Demo_QLearning20240724.zip
大小:4.34KB
价格:30积分
下载量:0
评分:
5.0
上传者:MyAis
更新日期:2025-09-22

Q-Learning在路径规划中的应用(MATLAB版)

资源文件列表(大概)

文件名
大小
Demo_QLearning20240724/demo20240725.m
2.51KB
Demo_QLearning20240724/dist.m
139B
Demo_QLearning20240724/getLearningRoute.m
854B
Demo_QLearning20240724/getMaxAction.m
1.62KB
Demo_QLearning20240724/getNextAction.m
431B
Demo_QLearning20240724/getTrainResult.m
1.88KB

资源内容介绍

针对于已知环境中的路径规划问题,本文提出Q-Learning解决智能体在复杂环境中找到最优路径。最终阶段包括查询 Q 表以选择最佳行动路径。训练完成后,呈现了历时、最小步数、最大奖励值等结果,以及 Q 表的可视化、最短路径和整个训练过程。Q-learning 是强化学习中的一种基于值函数的学习方法,用于解决无模型的马尔可夫决策过程(MDP)问题。在 Q-learning 中,代理尝试学习一个价值函数 Q(s, a),它估计在状态 s 采取动作 a 后所能获得的长期回报的价值。状态 s、动作a、奖励信号r、Q 值函数 (Q-table)、折扣因子 γ、学习率 α、探索-利用策略。图1 Q-Learning结构图状态s:在 Q-learning 中,代理与环境进行交互,环境处于不同的状态。状态是描述环境的特定情况或配置的抽象表示。
clcclearclose all%% 地图建模%rng(1) % 此指令为测试时固定地图不变% 设置超参数、规划起点、终点和障碍物数量myMap = struct('Size',[30,30],'MAP',[],'startState',[2 2],'finalState',[29,29], ... 'obstaclesNum',50,'Obstacles',[],'Reward',[],'H',10,'W',10);trainOpts = struct('MaxSteps',200,'MaxEpisodes',1000,'LearnRate',0.9,... 'Epsilon',0.5,'gamma',0.8);myMap.H = myMap.Size(1);myMap.W = myMap.Size(2);myMap.MAP = zeros(myMap.Size);%myMap.obstaclesNum = randi([20,40],1,1); % 例如,添加5个障碍物while sum(myMap.finalState == myMap.startState) > 1 % 保证起点与终点位置不同 myMap.finalState = 1+[randi(myMap.Size(1)-2) randi(myMap.Size(2)-2)];end%myMap.MAP(25,25) = 0.5;myMap.MAP(myMap.finalState(1),myMap.finalState(2)) = 150; % 设置终点的奖励值% 生成围墙,将四周用障碍物代替myMap.MAP(1, :) = -100;myMap.MAP(end, :) = -100;myMap.MAP(:, 1) = -100;myMap.MAP(:, end) = -100;% 设置障碍物myMap.Obstacles = find(myMap.MAP == 0);myMap.Obstacles = myMap.Obstacles(randperm(length(myMap.Obstacles),myMap.obstaclesNum));myMap.MAP(myMap.Obstacles) = -100; %设置障碍物位置为-1% 设置起点位置myMap.MAP(myMap.startState(1),myMap.startState(2)) = 0;myMap.Reward = myMap.MAP;%% 开始训练Qtable = getTrainResult(myMap, trainOpts);%% 绘制训练结果figure('Name','Path','Position',[700,50,600,600])screen = axes;set(screen, 'YDir', 'reverse');grid onhold on[rows,cols] = find(Qtable == 0);for i = 1:size(rows) rectangle('Position', [cols(i)-1 rows(i)-1 1 1], 'FaceColor', [0,0, 0], 'EdgeColor', 'none')end% 获取到最后训练的路径route = getLearningRoute(Qtable,myMap.startState,myMap.finalState);% 绘制路径scatter(route(1,2)-.5,route(1,1)-.5, 'x', 'b', 'Linewidth', 5);scatter(route(end,2)-.5,route(end,1)-.5, 'x', 'g', 'Linewidth', 5);line(route(:,2)-.5,route(:,1)-.5,'Color','red','LineWidth',3)figure('Name','Qtable','Position',[100,50,800,800])screen1 = axes;set(screen1, 'YDir', 'reverse');grid onhold onfor x = 0:myMap.W-1 for y = 0:myMap.H-1 rectangle('Position', [x y 1 1], 'FaceColor', [.5 .5 .5], 'EdgeColor', [.192, .192, .192]) if myMap.MAP(y+1, x+1) == 0 rectangle('Position', [x y 1 1], 'FaceColor', [1 1 1], 'EdgeColor', [.192, .192, .192]) t = text(x, y + .5, num2str(round(Qtable(y+1, x+1)))); t.FontSize = 7; t.FontWeight = 'bold'; end endend

用户评论 (0)

发表评论

captcha