【路径规划】PDQN算法机器人避碰路径规划【含Matlab源码 2722期】

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、PDQN算法

PDQN(Prioritized Deep Q-Network)算法是一种基于深度强化学习的路径规划算法,它可以用于机器人的避碰路径规划。下面是使用PDQN算法进行机器人避碰路径规划的步骤:
定义状态(State):将环境划分为状态空间,以离散或连续的方式表示机器人所处的状态。状态可以包括机器人当前位置、周围障碍物的位置信息等。
定义动作(Action):定义机器人可以执行的动作集合,例如向前移动、向后移动、向左转、向右。
构建深度强化学习模型:设计一个深度神经网络模型,作为Q函数近似器。输入为状态,输出为不同动作对应的Q值。
初始化模型参数和经验回放缓冲区:随机初始化深度神经网络的参数,并创建一个经区来存储机器人的历史经验。

迭代训练过程:
a. 探索并选择动作测到的状态,根据某种策略(如ε-greedy),选择一个动作以探索环境。
执行动作并观测奖励和下一个状态:将选定的动作发送给机器人进行执行,观测环境返回的奖励和下一个状态。
c. 存储经验:将观测到的(状态,动作,奖励,下一个状态)元组存储到经验回放缓冲区中。
d. 从经验回放缓冲区中随机采样一批经验。
e. 计算目标Q值:使用深度神经网络计算对应状态下所有动作的Q值。
f. 更新模型参数:根据动作的实际奖励和目标Q值之间的差异,使用梯度下降法更新深度神经网络的参数。
g. 更新经验回放缓冲区中的优先级:根据目标Q值和当前估计的Q值的差异,更新经验回放缓冲区中存储的经验的优先级。
h. 重复步骤a-g,直到收敛或达到预定的训练步数。

使用训练好的模型进行路径规划:在使用路径规划时,根据器人的当前状态,输入到深度神经网络中,选择具有最高Q值的动作作为路径规划结果,同时考虑根据障碍物等信息进行避碰。
需要注意的是,PDQN算法是一种基于深度强化的方法,其训练需要大量样本和计算资源。在实际应用中,可能需要根据具体情况进行调整和优化。

⛄二、部分源代码

function net = BackPro(net, y)
%% 输入分析
% net是网络
% y是预期值

% 实现反向传播,更新网络参数
n = numel(net.layers);
%   error
net.e = net.o - y;
%  loss function
net.L = 1/2* sum(net.e(:) .^ 2) / size(net.e, 2);
%  backprop deltas
 net.od = net.e .* ((0.5+net.o) .* (0.5-net.o));
%net.od = net.e .* (net.o .* (1 - net.o));   %  output delta
net.fvd = (net.ffW' * net.od);              %  feature vector delta
if strcmp(net.layers{n}.type, 'c')         %  only conv layers has sigm function
    net.fvd = net.fvd .* (net.fv .* (1 - net.fv));
end
%  reshape feature vector deltas into output map style
sa = size(net.layers{n}.a{1});
fvnum = sa(1) * sa(2);
for j = 1 : numel(net.layers{n}.a)
    net.layers{n}.d{j} = reshape(net.fvd(((j - 1) * fvnum + 1) : j * fvnum, :), sa(1), sa(2), sa(3));
end
for l = (n - 1) : -1 : 1
    if strcmp(net.layers{l}.type, 'c')
        for j = 1 : numel(net.layers{l}.a)
            net.layers{l}.d{j} = net.layers{l}.a{j} .* (1 - net.layers{l}.a{j}) .* (expand(net.layers{l + 1}.d{j}, [net.layers{l + 1}.scale net.layers{l + 1}.scale 1]) / net.layers{l + 1}.scale ^ 2);
        end
    elseif strcmp(net.layers{l}.type, 's')
        for i = 1 : numel(net.layers{l}.a)
            z = zeros(size(net.layers{l}.a{1}));
            for j = 1 : numel(net.layers{l + 1}.a)
                 z = z + convn(net.layers{l + 1}.d{j}, rot180(net.layers{l + 1}.k{i}{j}), 'full');
            end
            net.layers{l}.d{i} = z;
        end
    end
end
%  calc gradients
for l = 2 : n
    if strcmp(net.layers{l}.type, 'c')
        for j = 1 : numel(net.layers{l}.a)
            for i = 1 : numel(net.layers{l - 1}.a)
                net.layers{l}.dk{i}{j} = convn(flipall(net.layers{l - 1}.a{i}), net.layers{l}.d{j}, 'valid') / size(net.layers{l}.d{j}, 3);
            end
            net.layers{l}.db{j} = sum(net.layers{l}.d{j}(:)) / size(net.layers{l}.d{j}, 3);
        end
    end
end
net.dffW = net.od * (net.fv)' / size(net.od, 2);
net.dffb = mean(net.od, 2);

for l = 2 : numel(net.layers)
    if strcmp(net.layers{l}.type, 'c')
        for j = 1 : numel(net.layers{l}.a)
            for ii = 1 : numel(net.layers{l - 1}.a)
                net.layers{l}.k{ii}{j} = net.layers{l}.k{ii}{j} - net.opts.alpha * net.layers{l}.dk{ii}{j};
            end
            net.layers{l}.b{j} = net.layers{l}.b{j} - net.opts.alpha * net.layers{l}.db{j};
        end
    end
end

net.ffW = net.ffW - net.opts.alpha * net.dffW;
net.ffb = net.ffb - net.opts.alpha * net.dffb;

end

function X = rot180(X)
%% 只翻转两个维度,给卷积用的
X = flipdim(flipdim(X, 1), 2);
end

function B = expand(A, S)
% 将矩阵A拓展到S的规模,填充0
if nargin < 2
error(‘Size vector must be provided. See help.’);
end
SA = size(A); % Get the size (and number of dimensions) of input.
if length(SA) ~= length(S)
error(‘Length of size vector must equal ndims(A). See help.’)
elseif any(S ~= floor(S))
error(‘The size vector must contain integers only. See help.’)
end
T = cell(length(SA), 1);
for ii = length(SA) : -1 : 1
H = zeros(SA(ii) * S(ii), 1); % One index vector into A for each dim.
H(1 : S(ii) : SA(ii) * S(ii)) = 1; % Put ones in correct places.
T{ii} = cumsum(H); % Cumsumming creates the correct order.
end
B = A(T{:}); % Feed the indices into A.
end

⛄三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]钱程,许映秋,谈英姿.A Star算法在RoboCup救援仿真中路径规划的应用[J].指挥与控制学报. 2017,3(03)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值