Q-learning与Sarsa算法的区别

接触reinforcement learning有一个月的时间了,现在回来回顾当时写的Q-learning和Sarsa算法,有了更多的感触。

对于Q-learning算法和Sarsa算法的具体流程,原文已经讲解的很详细,附上参考博客地址:

https://blog.csdn.net/u010223750/article/details/78955807

本文就记录一下Q-learning和Sarsa的区别,并不详细解释这两种算法了。

首先,设想一种走迷宫的场景。迷宫中有陷阱,给定迷宫的入口和出口,agent的初始位置在迷宫的入口,要让agent以最少的步数走出迷宫。(如下图所示)每走一步给一个-1的reward,进入到陷阱就结束了,reward为-100,进入到出口游戏也结束,reward=0

环境的部分我就不细说了,下面说一说Q-learning和Sarsa在解决这个问题的区别在哪里。

区别在于选择action(当前动作和下一个状态采取的动作)

Q-learning每次使用epsilon-greedy的方法,选择当前状态的action,

在更新Q[state][action]的时候,是使用Q[next_state][next_acion],其中next_action是使Q[next_state][next_action]最大的动作。
然后state=next_state,动作再重新选择,next_acion值用于更新Q值。

Sarsa则不同。使用epsilon-greedy选择next_state的next_action,然后用Q[next_state][next_acion]来更新Q[state][action],更新的时候:
state=next_state, action=next_action 

从中就可以看出两个算法的区别,Sarsa是一种on-policy算法,Q-learning是一种off-policy算法。
Sarsa选取的是一种保守的策略,他在更新Q值的时候已经为未来规划好了动作,对错误和死亡比较敏感。而Q-learning每次在更新的时候选取的是最大化Q的方向,而当下一个状态时,再重新选择动作,Q-learning是一种鲁莽、大胆、贪婪的算法,对于死亡和错误并不在乎。
在实际中,如果你比较在乎机器的损害就用一种保守的算法,在训练时,可以减少机器损害的次数。
可以看一下代码的运行结果:

Sarsa:选择的是一条最安全的道路,远离陷阱

Q-learning:选择的是一条最快的道路,尽快到达出口

最后附上代码链接:

https://github.com/nuomizai/Qlearning

猜你喜欢

转载自blog.csdn.net/qq_39004117/article/details/81705845
今日推荐