✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。
?个人主页:Matlab科研工作室
?个人信条:格物致知。
更多Matlab仿真内容点击?
智能优化算法 神经网络预测 雷达通信 无线传感器 电力系统
信号处理 图像处理 路径规划 元胞自动机 无人机
⛄ 内容介绍
1 算法原理
PDQN(Proximal Deterministic Policy Gradient with Neural Network)是一种基于近端确定性策略梯度和神经网络的强化学习算法。它在深度强化学习领域被广泛应用于连续动作空间的决策问题,如机器人控制、自动驾驶等。
PDQN算法结合了确定性策略梯度方法和接近策略优化的思想,通过建立和优化策略网络来指导智能体做出确定性的动作决策。与传统的策略梯度算法不同,PDQN算法直接学习输出动作,而不是学习动作的概率分布。
以下是PDQN算法的基本思想和主要步骤:
-
状态表示:
-
将环境的状态输入给神经网络,并得到动作的输出。
策略网络构建:
-
使用多层神经网络作为策略网络。
-
输入状态,输出机器人的动作。
评估和更新策略网络:
-
根据当前状态,使用策略网络选择一个动作。
-
执行选择的动作,并观察环境的反馈(奖励信号)和新的状态。
-
根据策略梯度算法或其他优化方法,更新策略网络的参数,以最大化累积奖. 迭代训练:
-
重复执行步骤3,进行多次训练迭代。
-
通过大量迭代优化网络参数,提高机器人的决策性能。
PDQN算法的核心是使用神经网络逼近策略函数,并通过梯度下降优化策略网络的参数,以最大化期望累积奖励。它的优势在于可以处理连续动作空间问题,且输出结果为确定性动作,有助于解决动作选择的连续性和稳定性。
2 算法流程
基于PDQN(Proximal Deterministic Policy Gradient with Neural Network)算法实现机器人的避碰路径规划可以按照以下步骤进行:
-
环境建模:
-
将机器人运动环境建模为一个空间和动作空间。
-
确定机器人当前状态,例如位置、速度和周围障碍物信息。
构建PDQN网络:
-
使用神经网络作为PDQN的函数近似器。网络接受状态作为输入,并输出动作的概率分布。
初始化网络参数:
-
初始化PDQN网络的参数,包括神经网络的权重和偏差。
迭代训练:
-
在每个训练迭代中,执行以下步骤:a. 根据当前状态和PDQN网络,选择一个动作,例如使用策略抽样方法,如ε-greedy或Softmax策略。b. 执行选择的动作,并观察新的状态和奖励信号。c. 更新PDQN网络的参数,优化网络的目标是最小化损失函数,如均方差或策略梯度方法。d. 将当前状态更新为新状态,并步骤a。
避碰路径规划:
-
在每次迭代训练后,使用已训练好的PDQN网络来选择机器人的动作,以实现避碰路径规划。
-
根据机器人当前状态和具体的动作来避开障碍物。
需要注意的是,PDQN算法是一种基于深度强化学习的方法,可以通过大量的训练迭代来优化网络参数,并使机器人能够学习到避碰的策略。此外,在实际应用中,还可能需要考虑其他因素,如传感器数据的获取、环境建模的精确性以及对器人运行实时性要求等,以进一步改进和优化避碰路径规划的效果。
⛄ 运行结果
⛄ 部分代码
function [] = DisplayAndStore(net, StochQmean, StochCount, StochFail, TrainRmean, TrainCount, TrainFail, e, E, num)
%%
% net:当前的网络模型;
% StochQmean:随机策略下每一轮的Q值最大值的平均值;
% StochCount:随机策略下每一轮的训练次数;
% StochFail:随机策略下每一轮的失败次数;
% TrainRmean:当前策略下每一轮的奖励的平均值;
% TrainCount:当前策略下每一轮的训练次数;
% TrainFail:当前策略下每一轮的失败次数;
% e:当前轮数;
% E:总轮数;
% num:当前的模型编号。
%存储当前模型
time = clock();
timestr = cell(5);
for j = 2:5
timestr{j} = [‘0’, num2str(time(j))];
timestr{j} = timestr{j}(end – 1:end);
end
str = [‘model_’, timestr{2}, timestr{3}, ‘_’, timestr{4}, timestr{5}];
save([‘./’, str, ‘.mat’], ‘net’);
% 打印当前结果
disp([num2str(e), ‘/’, num2str(E), ‘: ‘]);
disp([‘StochCount/TrainCount: ‘, num2str(StochCount(e)), ‘/’, num2str(TrainCount(e, num))]);
disp([‘StochFail/TrainFail: ‘, num2str(StochFail(e)), ‘/’, num2str(TrainFail(e, num))]);
disp([‘StochQmean:’, num2str(StochQmean(e)), ‘ ,’, ‘TrainRmean:’, num2str(TrainRmean(e, end))]);
% 画图,Qmax值和Reward
figure(1); clf;
xl = (1:e);
subplot(2, 1, 1);
plot(xl, StochQmean(1:e), ‘r’); legend(‘Average of Qmax’);
subplot(2, 1, 2);
plot(xl, TrainRmean(1:e, end), ‘r’); legend(‘Average of R’);
drawnow;
% 画图,统计值
figure(2); clf;
subplot(2, 1, 1);
plot(xl, TrainCount(1:e, end), ‘r’); legend(‘Sum of TrainCount’);
subplot(2, 1, 2);
plot(xl, TrainFail(1:e, end), ‘r’); legend(‘Sum of TrainFail’);
drawnow;
end
⛄ 参考文献
[1] 徐晓晴,朱庆保.动态环境下基于多人工鱼群算法和避碰规则库的机器人路径规划[J].电子学报, 2012, 40(8):7.DOI:10.3969/j.issn.0372-2112.2012.08.032.
[2] 臧强,徐博文,李宁,等.一种基于改进深度Q网络算法的移动机器人路径规划[J].中国科技论文, 2023, 18(3):7.