【强化学习】使用Q-Learning 和 Sara 解决GridWorld 炸弹环境

使用Q-Learning 和 Sara 解决GridWorld 炸弹环境

代码链接

代码连接

一.实验原理
1.1 Q-learning 和 Sara 的异同
1.1.1 相似之处
  1. 两种算法本质都是通过策略迭代得到最优策略。
  2. 两种算法都是基于时序差分法进行更新,可以看作蒙特卡洛仿真和动态规划的结合。
  3. 在选择策略时,都使用 ϵ − g r e e d y \epsilon - greedy ϵgreedy 算法,即以 ϵ \epsilon ϵ 的概率选择使得动作-值函数最大的动作,以 1 − ϵ 1-\epsilon 1ϵ的概率随机选择。
1.1.2 不同之处

Q-Learning是强化学习算法中value-based的算法,Q即为Q(s,a)就是在某一时刻的 s 状态下(s∈S),采取 动作a (a∈A)动作能够获得收益的期望,环境会根据agent的动作反馈相应的回报reward r,所以算法的主要思想就是将State与Action构建成一张Q-table来存储Q值,然后根据Q值来选取能够获得最大的收益的动作。
Q-learing 算法可用如下伪代码表示:

在这里插入图片描述

​ Sara和Q-Learning基本一致,可用如下伪代码表示:

在这里插入图片描述

从两个算法的伪代码可以看出,两者的最大区别在于Q-table的更新方式不同:

Q-Learning更新Q值的公式为:

Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ m a x a Q ( S t + 1 , a ) − Q ( S t , A t ) ] Q(S_t,A_t) \leftarrow Q(S_t, A_t) + \alpha[R_{t+1}+\gamma \underset{a}{max}Q(S_{t+1},a)-Q(S_t,A_t)] Q(St,At)Q(St,At)+α[Rt+1+γamaxQ(St+1,a)Q(St,At)]

Sara更新Q值的公式为:

Q ( S t , A t ) ← Q ( S t , A t ) + α [ R t + 1 + γ Q ( S t + 1 , A t + 1 ) − Q ( S t , A t ) ] Q(S_t,A_t)\leftarrow Q(S_t,A_t)+\alpha[R_{t+1}+\gamma Q(S_{t+1},A_{t+1})-Q(S_t,A_t)] Q(St,At)Q(St,At)+α[Rt+1+γQ(St+1,At+1)Q(St,At)]

  1. **Q-learning:**在状态 S t S_t St下,根据 ϵ − g r e e d y \epsilon-greedy ϵgreedy策略选择动作 A t A_{t} At 到达 S t + 1 S_{t+1} St+1后,利用状态 S t + 1 S_{t+1} St+1下的最佳Q值 Q ( S t + 1 , a ) Q(S_{t+1},a) Q(St+1,a)来更新 Q ( S t , A t ) Q(S_t,A_{t}) Q(St,At),但并不真正采取动作 ( S t + 1 , a ) (S_{t+1},a) (St+1,a) 。更新Q-table用到的值有 < S t , A t , r e w a r d , S t + 1 > <S_t,A_t,reward,S_{t+1}> <St,At,reward,St+1>
  2. Sara: 在状态 S t S_t St下,根据 ϵ − g r e e d y \epsilon-greedy ϵgreedy 策略选择动作 A t A_t At到达 S t + 1 S_{t+1} St+1之后,选择最大的 ( S t + 1 , a ) (S_{t+1},a) (St+1,a)并真正采取该动作。更新Q-table用到的值有 < S t , A t , r e w a r d , S t + 1 , A t + 1 > <S_t,A_t,reward,S_{t+1},A_{t+1}> <St,At,reward,St+1,At+1>
  3. Q−learning选取动作和更新Q表值的方法不同,而Sarsa选取动作和更新Q表值的方法相同。Q-Learning算法,先假设下一步选取最大奖赏的动作,更新值函数。然后再通过ε-greedy策略选择动作。Sarsa算法,先通过ε-greedy策略执行动作,然后根据所执行的动作,更新值函数。
  4. 可以看出Q-Learning使用的更新方法更激进,即直接选择下一个状态下的最大值进行更新。而Sara算法更保守,基于现有的步骤进行更新,整体上来说Sara更偏向于避免陷阱。
1.2 算法图解

两种算法的基本流程出了训练过程中更新参数的方法不同,其余流程相同。可用下图表示:

在这里插入图片描述

二.算法实现

整体分为环境类和代码类。

2.1 环境

定义类FronzenLakeWapper(gym.Wrapper),主要实现以下接口:

draw_box: 绘制一个坐标处的矩形框,并做以下填充:

  • 起点:红色

  • 出口:黄色

  • 炸弹:黑色

  • 平地:白色

move_player(self, x, y):将智能体移动到对应的坐标

render(self):渲染一帧图像

step(self,action):根据传入的动作,计算智能体的新坐标,以及对应的返回值。为了训练智能体避免炸弹并且尽量减少路径长度,将奖励值设置如下:

  • 起点或空地: reward = -2
  • 炸弹:reward = -20
  • 终点:reward = 10
2.2 智能体

根据使用的算法不同,分别创建类QLearningAgent(object)SaraAgent(object)

两个类有以下相同接口:

sample(self, obs):根据输入的观察值,使用 ϵ − g r e e d y \epsilon-greedy ϵgreedy 策略选择动作。

predict(self, obs): 根据输入的观察值,预测输出的动作值。

save(self, npy_file): 将Q表保存到文件中。

restore(self, npy_file): 从文件中读取Q表数据。

根据Q表更新公式的不同,实现不同的学习函数。

QLearningAgent.learn(self,obs,action,next_obs,reward,done):根据当前状态和动作以及下个状态更新Q表。

QLearningAgent.learn(self,obs,action,next_obs,next_action,reward,done):根据当前状态和动作以及下个状态和下个动作更新Q表。

三.实验结果及分析
3.1 输入

使用文件输入,在input.txt中输入矩阵,例如下图,输入一个 7 × 17 7\times 17 7×17 的矩阵,其中S表示起点,F表示空地,H表示炸弹,G表示出口。

在这里插入图片描述

3.2 可视化环境及移动轨迹

运行结果,使用乌龟模拟机器人,从起点出发到达终点需要六步,分别如下:

在这里插入图片描述

3.3 学习参数对策略收敛的影响

训练过程中,当连续五局游戏都成功且总奖励值不变时,认为模型已经收敛

3.3.1 Q-Learning 算法

模型的收敛速度随着回报衰减系数变化如下图:

在这里插入图片描述

从图中可以看出,随着gamma值的增大,模型收敛速度越来越快,从Q-Learning的Q表更新公式可以看出,gamma值越大,更新程度越大,所需的训练次数也越小。

对各个gmma值下的收敛模型进行1000次测试,所得的成功率和平均步数如下:

从图中可以看出,当gamma=0.6时,模型的成功率最高并且平均步数最少。原因可能是:gamma值教小时,无法充分学习每步的未来收益,而gamma值过大时,模型采取的策略过于激进,可能出现过拟合。

3.3.2 Sara 算法

模型的收敛速度随着回报衰减系数变化如下图:

在这里插入图片描述

可以看出,整体来说,随着gamma值的变大,模型收敛所需的训练次数逐渐减少。但gamma从0.1变为0.2时,训练次数显著增加,可能是gamma=0.1时模型陷入局部最优。

对各个gmma值下的收敛模型进行1000次测试,所得的成功率和平均步数如下:

在这里插入图片描述

从图中可以看出,当 gamma=0.7时,模型的成功率最高并且平均步数最少,原因可能是取一个适中的gamma值更能平衡当前收益和未来收益。同时可以看出,当gamma值由0.1变为0.2时,平均步数显著减少,可能是gamma=0.1时模型陷入局部最优。

3.4 探究模型鲁棒性

选取五个规模的地图,分别如下:

在这里插入图片描述

分别统计训练到收敛所需回合数以及成功率和平均步数(测试1000回合):

地图规模收敛所需回合数成功率平均步数
2 × 2 2\times2 2×24497.2%2.17
4 × 4 4\times4 4×44891.5%2.22
6 × 6 6\times6 6×640393%3.50
8 × 8 8\times8 8×811596.4%3.32
10 × 10 10\times10 10×1099891.6%6.50

从结果可以看出,随着地图的变大,均能保持较高的准确率,说明模型鲁棒性较高。

3.5 可视化Q表

从3.3可以看出,Q-learning算法效果较好,下面以Q-learning算法为例,当gamma=0.6时,每训练500个episode输出一次Q表中间结果:

在这里插入图片描述

可以看出Q表中部分坐标的值始终为0(这些点包括炸弹,出口,以及距离出口较远的点),同时可以看出episode=1500时的对应Q表和episode=2000时对应的Q表几乎没有变化,这也和3.3.1中”当gamma=0.6时,模型训练1136个episode达到收敛“相符合。

  • 9
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值