【路径规划】[Q-learning]路径规划与强化学习(Matlab实现)

 💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

路径规划是指确定从起始点到目标点之间最佳路径的过程,通常涉及到考虑到环境、约束条件和优化目标等因素。强化学习是一种通过与环境交互来学习决策策略的机器学习方法,它试图通过最大化累积奖励来达到某个目标。 首先,需要定义问题的状态空间,即机器人可能处于的各种环境状态。这可能涉及到机器人当前的位置、姿态、目标位置等信息。 确定机器人可以采取的动作集合,这些动作将影响机器人的状态转移。例如,机器人在某个位置可以选择向前、向后、向左或向右移动等动作。 定义在每个状态下采取每个动作后机器人所获得的奖励。奖励的设计应该考虑到优化目标,例如最短路径、最小碰撞风险等。通过将路径规划与强化学习结合,机器人能够更加智能地选择路径,并在不断的交互中学习和优化决策策略,从而实现更加灵活、高效的路径规划。

在路径规划中,Q-learning 是一种常用的强化学习方法。Q-learning 通过学习一个动作-价值函数(Q-函数)来指导智能体在环境中的行为,使其能够找到从起点到目标的最优路径。以下是 Q-learning 在路径规划中的基本概念和步骤:

Q-learning 基本概念

1. **状态 (State, S)**: 系统所处的具体情况,可以表示为一个位置或者节点。例如,在一个网格地图中,每个格子可以视为一个状态。
   
2. **动作 (Action, A)**: 智能体可以在该状态下采取的行为。例如,在一个网格地图中,可能的动作有上、下、左、右移动。

3. **奖励 (Reward, R)**: 当智能体从一个状态转移到另一个状态时所获得的反馈。例如,达到目标状态可能有高额奖励,而碰到障碍物则可能受到惩罚。

4. **Q-值 (Q-value, Q)**: Q(s, a) 表示智能体在状态 s 采取动作 a 的价值。Q-值越高,意味着这个动作在未来能够带来更高的累计奖励。

5. **学习率 (Learning Rate, α)**: 决定了每次更新 Q-值时新信息占的比重。

6. **折扣因子 (Discount Factor, γ)**: 表示未来奖励的当前价值,取值在 0 到 1 之间。

Q-learning 算法步骤

1. **初始化 Q-表**: 创建一个状态-行为表格 Q(s, a),初始值可以设置为零或其他任意值。

2. **选择动作**: 根据当前状态 s 选择一个动作 a。通常使用ε-贪婪策略(ε-greedy policy),即以概率ε随机选择动作,以概率1-ε选择当前 Q-值最高的动作。

3. **执行动作**: 在环境中执行选择的动作 a,并观察结果,得到新的状态 s' 和即时奖励 r。

4. **更新 Q-值**: 根据以下公式更新 Q-值:
   \[
   Q(s, a) \leftarrow Q(s, a) + \alpha [r + \gamma \max_{a'} Q(s', a') - Q(s, a)]
   \]
   其中,\( \alpha \) 是学习率,\( \gamma \) 是折扣因子.

5. **状态转移**: 将新的状态 s' 作为下一个状态,然后回到步骤2,直到达到终止条件(如达到目标状态或达到最大步数)。

6. **迭代学习**: 不断重复上述过程,使得 Q-值逐渐逼近最优值。

Q-learning 在路径规划中的应用示例

假设我们有一个简单的 4x4 网格环境:
```
S - 起点
G - 目标
O - 障碍物

S 0 0 0
O O 0 0
0 0 0 G
0 0 O 0
```

在这个环境中,智能体需要从起点 S 到目标 G,路径规划的具体 Q-learning 步骤如下:

1. **初始化**: 创建一个 4x4 的 Q-表,每个状态可以有四种动作(上、下、左、右),初始 Q-值为零。

2. **选择动作**: 从起点开始,根据 ε-贪婪策略选择一个动作。

3. **执行动作**: 执行选定的动作,获取即时奖励和新的状态。

4. **更新 Q-值**: 使用 Q-learning 更新公式更新 Q-表。

5. **继续迭代**: 重复以上步骤直至找到从 S 到 G 的最优路径。

通过不断试探和学习,智能体会逐渐找到一条使得累计奖励最大的路径,这就是它学习到的最优路径。

优化与改进

- **动态 ε 减少**: 在训练过程中,逐渐降低 ε 的值,使得智能体在初期更多地探索,后期更多地利用已有经验。
- **经验回放**: 记录智能体的经验(状态、动作、奖励、下一个状态),在更新 Q-表时可以使用这些记录以更快地收敛。
- **双 Q-learning**: 使用两个 Q-表来分别估计行为值和实际值,减少估计误差,提升学习效果。

Q-learning 是强化学习中一种经典且有效的方法,应用广泛,特别适合处理离散状态空间和动作空间的问题。

📚2 运行结果

部分代码:

function [ Qtable] = QLearningFunction( name )

model = xlsread(name)

% initial Q tables for up, right, down, left
Q1 = zeros(size(model)); %up
Q2 = zeros(size(model)); %right
Q3 = zeros(size(model)); %down
Q4 = zeros(size(model)); %left
Qtable = zeros(size(model));
% parameters for updating Q
gamma = 0.8;
alpha = 0.9;
epsilon = 0.9;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%updating Q%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
K = 10000; % number of the episodes to update the Q
for i = 1:K
    
%%%%%%%%%%%%%%%%% 0ne episode %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
s = 1 ; % number of the steps in each iteration 

% for each episode select a random start point
currentState = [randi([1 10],1,1) randi([1 10],1,1)]; 
if model( currentState(1) , currentState(2) ) == -1
    currentState = [2 2];
end

while s <= 150 % 150 is the max number of steps in each episode
s = s+1;
if model( currentState(1) , currentState(2) ) == 100 % agent has reached to the goal
    break
end 
% update all the four Qs in the current state 
a = currentState(1);
b = currentState(2);

% select action based on the epsilon policy to find the next state 
r = rand;
r2 = rand;
QState = [Q1(a,b); Q2(a,b); Q3(a,b); Q4(a,b)];
action = nextAction(epsilon, QState, r, r2);

if action == 1
% update Q1
[NS1,NS2]  = nextStep(a,b, 1, 1);
QNS = [Q1(NS1,NS2) ; Q2(NS1,NS2) ; Q3(NS1,NS2) ; Q4(NS1,NS2) ];
Q1(a,b) = Q1(a,b) + alpha*( model(NS1,NS2) + gamma* (max(QNS)) - Q1(a,b));
elseif action == 2
% update Q2
[NS1,NS2]  = nextStep(a,b, 2, 1);
QNS = [Q1(NS1,NS2) ; Q2(NS1,NS2) ; Q3(NS1,NS2) ; Q4(NS1,NS2) ];
Q2(a,b) = Q2(a,b) + alpha*( model(NS1,NS2) + gamma* (max(QNS)) - Q2(a,b));
elseif action == 3
% update Q3
[NS1,NS2] = nextStep(a,b, 3, 1);
QNS = [Q1(NS1,NS2) ; Q2(NS1,NS2) ; Q3(NS1,NS2) ; Q4(NS1,NS2) ];
Q3(a,b) = Q3(a,b) + alpha*( model(NS1,NS2) + gamma* (max(QNS)) - Q3(a,b));
elseif action == 4
% update Q4 
[NS1,NS2]  = nextStep(a,b, 4, 1);
QNS = [Q1(NS1,NS2) ; Q2(NS1,NS2) ; Q3(NS1,NS2) ; Q4(NS1,NS2) ];
Q4(a,b) = Q4(a,b) + alpha*( model(NS1,NS2) + gamma* (max(QNS)) - Q4(a,b));
end

Qtable(a,b) = max([Q1(a,b),Q2(a,b),Q3(a,b),Q4(a,b)]);

% update the next position of the agent
if model(NS1,NS2)~= -1
currentState = [NS1, NS2];
end

end % end of one episode
end % end of the 1000 episodes of training 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for x= 0:9
    for y = 0:9
        
        rectangle('Position',[x y 1 1],'FaceColor',[.5 .5 .5],'EdgeColor',[.192,.192,.192] )
        if model(9-y+1,x+1) == 0
        rectangle('Position',[x y 1 1],'FaceColor',[1 1 1],'EdgeColor',[.192,.192,.192] )
        t = text(x+.5,y+.9, num2str(round(Q1(9-y+1,x+1))))
        t.FontSize = 7;                     
        t.FontWeight = 'bold';
        t = text(x+.7,y+.5, num2str(round(Q2(9-y+1,x+1))))
        t.FontSize = 7;                     
        t.FontWeight = 'bold';
        t = text(x+.5,y+.1, num2str(round(Q3(9-y+1,x+1))))
        t.FontSize = 7;                      
        t.FontWeight = 'bold';
        t = text(x+.1,y+.5, num2str(round(Q4(9-y+1,x+1))))
        t.FontSize = 7;                      
        t.FontWeight = 'bold';
        end
        if model(9-y+1,x+1) == -1
        rectangle('Position',[x y 1 1],'FaceColor',[139/255,69/255,19/255] ,'EdgeColor',[.192,.192,.192])
        end
    end
    rectangle('Position',[8 1 1 1],'FaceColor','r' ,'EdgeColor',[.192,.192,.192])
    t = text(8.1, 1.5, 'Goal')
    t.FontSize = 10;                     % make the text larger
    t.FontWeight = 'bold';
   
end

 
end

🎉3 参考文献

文章中一些内容引自网络,会注明出处或引用为参考文献,难免有未尽之处,如有不妥,请随时联系删除。

[1]梁凯冲,赵治国,颜丹姝.基于动态运动基元的车辆高速公路换道轨迹规划[J/OL].机械工程学报:1-15[2024-06-09].http://kns.cnki.net/kcms/detail/11.2187.TH.20240603.0841.002.html.

[2]贾瑞,强颖,赵锋.基于机器视觉的图书机器人取书路径控制方法研究[J/OL].计算机测量与控制:1-9[2024-06-09].http://kns.cnki.net/kcms/detail/11.4762.tp.20240603.1039.002.html.

🌈4 Matlab代码实现

图片

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值