机器人路径规划:基于Q-learning算法的移动机器人路径规划的,可以自定义地图,修改起始点

机器人路径规划:基于Q-learning算法的移动机器人路径规划的,可以自定义地图,修改起始点,提供MATLAB代码

今天咱们来聊聊怎么用Q-learning教机器人走迷宫,这玩意儿可比遥控赛车刺激多了。只要一台能跑MATLAB的电脑,你就能亲手训练出个会自己找路的智能体。直接上干货,先看效果------给个5x5的网格地图,机器人从左上角出发,分分钟给你规划出避开障碍的最短路径。

先整张地图玩玩(MATLAB矩阵就是直观):

matlab 复制代码
map = [1 1 1 1 1;
       1 0 0 0 1;
       1 1 1 0 1;
       1 0 0 0 1;
       1 1 1 1 1]; 
% 1是障碍,0是可通行区域
start_point = [1,1]; 
goal_point = [5,5];

看到没?中间那个十字形障碍摆明了要考验算法的绕路能力。这时候Q-learning的核心登场------Q表。这个表格记录了每个状态下采取各个动作的预期收益,初始化起来超简单:

matlab 复制代码
Q = zeros(prod(size(map)), 4);  % 状态数x动作数(上下左右)
alpha = 0.1;    % 学习率别太高,容易过冲
gamma = 0.9;    % 未来奖励折扣
epsilon = 0.7;  % 探索概率

这里有个小技巧,状态编号用线性索引代替行列坐标,用sub2ind函数转换更方便。训练时机器人每走一步都要做选择题:是贪婪地选当前最优动作(exploit)还是随机探索(explore)?代码实现这个策略只需要几行:

matlab 复制代码
if rand < epsilon
    action = randi(4);  % 随机探索
else
    [~, action] = max(Q(current_state,:));  % 选择最优动作
end

但别急着跑训练,奖励机制才是灵魂所在!碰到障碍直接给-10分惩罚,到达终点给+100分大奖,普通移动就扣1分鼓励找最短路径:

matlab 复制代码
if next_pos == goal_point
    reward = 100;
elseif map(next_pos) == 1
    reward = -10;
else
    reward = -1;
end

更新Q表的核心公式一定得配上代码才够味:

matlab 复制代码
Q(current_state, action) = Q(current_state, action) + alpha * (reward + gamma * max(Q(next_state,:)) - Q(current_state, action));

跑个2000次迭代后,用热力图看看Q表,明显能看到靠近终点区域的动作价值更高。最后提取路径时就像玩贪吃蛇,从起点开始每一步都选最大Q值的动作:

matlab 复制代码
path = start_point;
while ~isequal(path(end,:), goal_point)
    [~, action] = max(Q(state_sequence(end),:));
    % 根据动作更新位置...
end

实测发现调参是门艺术------ε设0.7时探索效率最高,α超过0.3就容易震荡。想要可视化效果?用scatter画路径,gif函数保存训练过程动态图,朋友圈装X必备。

完整代码已打包在GitHub,改地图只需要动matrix那几个数字。下次试试在复杂迷宫加个移动障碍物?Q-learning照样能玩得转,不过那就是另一个故事了...

相关推荐
成都渲染101云渲染66662 天前
CR15新功能介绍以及CR15云渲染流程
ue5·图形渲染·blender·maya·corona
charlie1145141912 天前
通用GUI编程技术——图形渲染实战(五十)——命中测试与鼠标事件路由:精确交互
c++·windows·架构·交互·图形渲染
做cv的小昊3 天前
计算机图形学:【Games101】学习笔记08——光线追踪(辐射度量学、渲染方程与全局光照、蒙特卡洛积分与路径追踪)
图像处理·笔记·学习·计算机视觉·游戏引擎·图形渲染·概率论
RReality3 天前
【Unity UGUI】血条 / 进度条(HP Bar)
ui·unity·游戏引擎·图形渲染
郝学胜-神的一滴3 天前
中级OpenGL教程 009:用环境光告别模型死黑
前端·c++·unity·godot·图形渲染·opengl·unreal
charlie1145141914 天前
通用GUI编程技术——图形渲染实战(四十八)——Owner-Draw控件:让标准控件焕然一新
图形渲染
故渊at4 天前
第三板块:Android 图形渲染与窗口体系 | 第十四篇:View 绘制体系与 RenderThread 异步渲染
android·图形渲染·ui线程·renderthread·view体系
故渊at4 天前
第三板块:Android 图形渲染与窗口体系 | 第十三篇:SurfaceFlinger 与 VSYNC 信号机制
android·图形渲染·surfaceflinger·帧率·窗口体系
charlie1145141914 天前
通用GUI编程技术——图形渲染实战(四十九)——完全自绘控件架构:状态机与动画
c++·windows·架构·图形渲染
玖釉-5 天前
Vulkan 离屏渲染详解:从 Framebuffer 到后处理、阴影贴图与 Render Texture
c++·windows·计算机视觉·图形渲染