一、单智能体路径规划:基于Q-learning的MATLAB实现
1. MATLAB实现步骤详解
环境建模方法与栅格地图构建:

在MATLAB中创建一个20×20的栅格地图,数值0代表可通行区域,1代表障碍物。核心步骤是设定障碍物的具体位置,例如:
% 创建栅格地图(0: 可通行, 1: 障碍物)
gridSize = 20;
gridMap = ones(gridSize);
gridMap(5:8, 10) = 1; % 设置障碍物
接下来配置Q-learning算法的核心参数。Q表(Q-table)的维度为状态数乘以动作数,其中状态指栅格中每一个单元格的坐标,动作包括上、下、左、右四个移动方向:
Q = zeros(gridSize^2, 4); % 4个动作:上下左右
alpha = 0.1; gamma = 0.9; epsilon = 0.1;
进入训练循环后,核心在于平衡探索(exploration)与利用(exploitation)。每次迭代从起始位置出发,采用ε-greedy策略选择动作——以一定概率随机探索新路径,其余则选择当前最优动作。执行动作后更新智能体状态,依据预先设计的奖励函数计算即时奖励,再通过贝尔曼方程(Bellman equation)迭代更新Q表中的Q值:
for episode = 1:1000
state = [startRow, startCol]; % 起点
while ~isGoal(state)
% 选择动作(ε-greedy策略)
if rand < epsilon
action = randi(4); % 随机动作
else
[~, action] = max(Q(sub2ind(size(Q), state(1), state(2)), :));
end
% 执行动作并更新状态
nextState = moveAgent(state, action);
% 计算奖励
reward = calculateReward(state, nextState, gridMap);
% 更新Q值
Q(sub2ind(size(Q), state(1), state(2)), action) = ...
(1-alpha)*Q(sub2ind(size(Q), state(1), state(2)), action) + ...
alpha*(reward + gamma*max(Q(sub2ind(size(Q), nextState(1), nextState(2)), :)));
state = nextState;
end
end
二、多智能体路径规划:基于DDPG的协同算法
1. DDPG算法原理
DDPG(深度确定性策略梯度,Deep Deterministic Policy Gradient)专为连续动作空间而设计,其核心架构基于Actor-Critic(演员-评论家)框架。Actor网络负责输出确定性策略,即给定当前状态直接生成一个具体的动作;Critic网络则对状态-动作对进行Q值评估,用以判断该决策的优劣程度。
在奖励机制设计中需要兼顾协作与冲突:当多个智能体同时向各自目标靠近时,给予正向的协同奖励(例如总距离缩短);而当智能体之间距离过近时,则施加负向的冲突惩罚,防止发生碰撞。
2. MATLAB实现步骤
首先构建多智能体环境,需要明确状态和动作的维度。每个智能体占据2维坐标,如果同时控制两个智能体,状态空间就是4维,动作空间也相应扩展:
function env = createMultiAgentEnv(gridMap, starts, goals)
numAgents = size(starts, 1);
stateInfo = rlNumericSpec([numAgents*2 1], 'LowerLimit', [1 1], 'UpperLimit', [gridSize gridSize]);
actionInfo = rlNumericSpec([numAgents*2 1], 'LowerLimit', [-1 1], 'UpperLimit', [1 1]);
env = rl.env.MATLABEnvironment('ObservationInfo', stateInfo, 'ActionInfo', actionInfo);
env.GridMap = gridMap;
env.Starts = starts;
env.Goals = goals;
end
下一步是构建DDPG智能体。Actor网络输入4维状态,通过全连接层和ReLU激活后,输出2维动作(x、y方向的速度);Critic网络则负责把状态和动作拼接起来进行联合评估:
% Actor网络
actorNet = [
featureInputLayer(4) % 输入:4维状态(2智能体坐标)
fullyConnectedLayer(64)
reluLayer
fullyConnectedLayer(2) % 输出:2维动作(x,y方向速度)
tanhLayer]; % 动作范围[-1,1]
% Critic网络
criticNet = [
concatenationLayer(1,2,'Name','concat') % 合并状态和动作
fullyConnectedLayer(64)
reluLayer
fullyConnectedLayer(1)];
agentOpts = rlDDPGAgentOptions('SampleTime', 0.1, 'DiscountFactor', 0.99);
agent = rlDDPGAgent(actorNet, criticNet, agentOpts);
训练过程采用多智能体联合训练策略,每次模拟最多执行500步,总共迭代1000个回合:
% 多智能体联合训练
simOpts = rlSimulationOptions('MaxSteps', 500);
trainOpts = rlTrainingOptions('MaxEpisodes', 1000, 'Verbose', false);
trainingStats = train(agent, env, trainOpts);
三、算法优化方向与改进策略
针对实际应用中的复杂需求,可从以下几个方面进行优化。在状态空间扩展方面,单智能体可考虑加入历史路径信息,例如最近5步的轨迹记忆;多智能体则更适合采用联合状态编码,将所有智能体的当前位置与目标点信息整合为一个综合状态向量。
奖励函数的改进同样至关重要。动态权重调整是指根据任务的不同阶段灵活调整奖励的权重——前期侧重探索行为,后期强调精准到达目标;针对稀疏奖励问题,可以引入虚拟奖励点,在关键路径上设置中间目标,使智能体获得更频繁的反馈信号。
冲突避免机制是实际部署中的刚性需求。势场法是一种常用思路,通过在奖励函数中加入排斥势场,使智能体自动保持安全距离;更高级的做法是引入通信机制,让智能体之间共享局部观测信息,从源头上规避碰撞风险。
四、MATLAB代码示例(简化版)
单智能体Q-learning完整代码示例
% 参数设置
gridSize = 10;
start = [1,1]; goal = [10,10];
Q = zeros(gridSize^2, 4);
% 训练循环
for ep = 1:500
state = start;
while ~isequal(state, goal)
% 选择动作
if rand < 0.1
action = randi(4);
else
[~, action] = max(Q(sub2ind([gridSize gridSize], state(1), state(2)), :));
end
% 执行动作
nextState = move(state, action);
% 计算奖励
reward = -1 + 100*(isequal(nextState, goal));
% 更新Q值
Q(sub2ind([gridSize gridSize], state(1), state(2)), action) = ...
Q(sub2ind([gridSize gridSize], state(1), state(2)), action) + ...
0.1*(reward + 0.9*max(Q(sub2ind([gridSize gridSize], nextState(1), nextState(2)), :)) - ...
Q(sub2ind([gridSize gridSize], state(1), state(2)), action));
state = nextState;
end
end
多智能体DDPG训练与可视化代码
% 绘制训练曲线
figure;
plot(trainingStats.EpisodeRewards);
xlabel('Episode'); ylabel('Total Reward');
% 路径可视化
figure; hold on;
plot(env.Goals(:,1), env.Goals(:,2), 'go');
for i = 1:numAgents
plot(agentTrajectory{ i}(:,1), agentTrajectory{ i}(:,2), 'r-o');
end
axis equal;
五、参考文献与推荐阅读
- 基于Q-learning的路径规划算法
- 基于DDPG的多智能体协同实现
- 复杂场景下的路径规划优化方法
