1. 环境建模与参数设置
地图定义
matlab
% 创建10x10栅格地图(0=可行,1=障碍物)
map = zeros(10,10);
map(3:7,4) = 1; % 垂直障碍
map(5,2:8) = 1; % 水平障碍
map(randi([1,10],1,15)) = 1; % 随机障碍
% 定义起点和终点
start = [2,2]; % (行,列)
goal = [9,9];
Q-learning参数
matlab
alpha = 0.1; % 学习率
gamma = 0.9; % 折扣因子
epsilon = 0.3; % 探索率
episodes = 1000;% 训练轮次
2. Q-learning算法核心实现
初始化Q表
matlab
% 状态空间:每个栅格为一个状态
% 动作空间:上下左右(索引1-4)
Q = zeros(size(map,1), size(map,2), 4);
动作选择函数
matlab
function action = choose_action(state, Q, epsilon)
if rand() < epsilon
action = randi(4); % 随机探索
else
[~, action] = max(Q(state(1), state(2), :)); % 利用最优策略
end
end
状态转移与奖励计算
matlab
function [next_state, reward] = move_agent(state, action, map, goal)
% 动作映射:1=上, 2=下, 3=左, 4=右
[rows, cols] = size(map);
next_state = state;
switch action
case 1 % 上
next_state(1) = max(1, state(1)-1);
case 2 % 下
next_state(1) = min(rows, state(1)+1);
case 3 % 左
next_state(2) = max(1, state(2)-1);
case 4 % 右
next_state(2) = min(cols, state(2)+1);
end
% 碰撞检测与奖励
if map(next_state(1), next_state(2)) == 1
next_state = state; % 碰撞后保持原位
reward = -50;
elseif isequal(next_state, goal)
reward = 100;
else
reward = -1; % 普通移动惩罚
end
end
3. 训练循环
matlab
for episode = 1:episodes
state = start;
path = [state];
while ~isequal(state, goal)
% 选择动作
action = choose_action(state, Q, epsilon);
% 执行动作并获取新状态和奖励
[next_state, reward] = move_agent(state, action, map, goal);
% Q值更新
Q(state(1), state(2), action) = Q(state(1), state(2), action) + ...
alpha * (reward + gamma * max(Q(next_state(1), next_state(2), :)) - Q(state(1), state(2), action));
% 更新状态
state = next_state;
path = [path; state];
end
% 动态衰减探索率
epsilon = epsilon * 0.995;
end
4. 最优路径提取与可视化
路径提取
matlab
function path = get_optimal_path(Q, start, goal)
path = start;
current = start;
while ~isequal(current, goal)
[~, action] = max(Q(current(1), current(2), :));
[current(1), current(2)] = move_agent(current, action, map, goal);
path = [path; current];
end
end
可视化代码
matlab
figure;
imagesc(map);
colormap([1 1 1; 0 0 0]); % 白色=可行,黑色=障碍
hold on;
plot(start(2), start(1), 'go', 'MarkerSize', 10); % 起点
plot(goal(2), goal(1), 'rx', 'MarkerSize', 10); % 终点
% 绘制最优路径
optimal_path = get_optimal_path(Q, start, goal);
plot(optimal_path(:,2), optimal_path(:,1), 'b-o', 'LineWidth', 2);
title('Q-learning路径规划结果');
参考代码 matlab强化学习算法,通过Q学习算法解决房间路径规划问题 youwenfan.com/contentcsj/83757.html
5. 关键改进与优化
- 动态障碍物处理
在move_agent
函数中增加动态障碍检测逻辑,例如周期性改变部分栅格状态。 - 三维空间扩展
将二维状态扩展为[x, y, z]
,动作空间增加上下层移动,需调整奖励函数和碰撞检测。 - 多智能体协同
使用MATLAB并行计算工具箱,为每个智能体分配独立Q表,通过共享经验加速训练。 - 深度Q网络(DQN)融合
当状态空间过大时,用神经网络替代Q表,参考MATLAB强化学习工具箱的DQN实现。
6. 参数调优建议
参数 | 推荐范围 | 作用说明 |
---|---|---|
alpha |
0.01-0.3 | 学习率过高导致震荡,过低收敛慢 |
gamma |
0.8-0.99 | 高值更重视长期收益 |
epsilon |
0.1-0.5 | 初始阶段高探索,后期降低 |
训练轮次 | 500-5000 | 根据地图复杂度调整 |
7. 代码
将上述代码片段整合为完整MATLAB脚本,需注意:
- 使用
rng(0)
固定随机种子保证可复现性 - 添加
tic;
和toc;
记录训练时间 - 使用
pause(0.01)
实现训练过程动态可视化
应用场景扩展
- 室内机器人导航:结合激光雷达数据动态更新地图
- 无人机集群路径规划:多智能体协同探索未知环境
- 动态避障系统:实时更新障碍物信息并重规划路径
通过调整地图参数和奖励函数,该框架可扩展至更复杂的路径规划任务。建议结合MATLAB的Reinforcement Learning Toolbox
进行高级算法验证。