Q-learning与Sarsa算法与区别 小学生都看得懂系列

请先看https://blog.csdn.net/u010223750/article/details/78955807这文章大概了解一下
本文只是补充更仔细的代码实际运行过程,以彻底了解和区分Q-learning与Sarsa的算法与区别
代码https://github.com/nuomizai/Qlearning

正文:


已知从0.0开始,走入1.0----10.0 奖励为-100,其它每步为-1,终点11.0奖励为0

所有初始动作值都为0

因为初始值为0而探索过的动作都为负,比初始值小,所以有92.5%(自已定的随机函数)会选择没去过的为0的地方

假设已知0.1向右的动作值为-0.5
假设已知1.1向下的动作值为-50

简单解释版:
Qlearn在0.1下个位置为1.1,取1.1的最大动作值0来更新0.1向右的动作值,0.1的向右值=-0.5(先省略其它运算)
Sarsa在0.1下个位置为1.1,取1.1的随机动作值(2.5%的概率选中向下-50),0.1的向右值=-50(先省略其它运算)

因为Qlearn一定选择下一个位置动作的最大值1.1【0,-50,0,0】,用最大值0来更新当前位置动作价值,不可能选中-50来更新自己,所以不受-50分的影响

而Sarsa有概率选中1.1的-50分来更新当前值,所以导致所有指向1.1的值都很可能被拉低,最终的结果就是1.1----10.1,1.2----10.2这中间20格的价值都较低,所以Sarsa最终会从最边上走,而Qlearn因为每步都取下个最大动作值更新当前动作值,所以最终会找到最优最快的路线。

具体运行数值版:

学习速率alpha=0.5
下个动作的奖励折扣率discount_factor=1
上下左右对应
0 1 2 3

假如当前位置为0.1,此时假如动作是向下走到1.1奖励是-50 (由学习率0.5*-100得到)

此时Sarsa更新表格的方式:
Q[state][action]=Q[state][action]+alpha*(reward+discount_factor*Q[new_state][new_action]-Q[state][action])

可以看出Sarsa是根据下一个状态的动作值更新当前状态的动作值,比如当前是从0.1向下走到1.1的下个动作是走到1.0,动作选择策略采用随机92.5%选最大的值7.5%选其它3个方向。

那么表格实际值为:
Q[0,1][3]=Q[0,1][3]+alpha*(reward+discount_factorQ[1,1][1]-Q[0,1][3])
Q[0,1][3]=-0.5+0.5
(-1+1*-50- -0.5)=-25.75

Q-learning更新表格的方式:
max(Q[new_state])=取new_state的最大动作值
Q[state][action]=Q[state][action]+alpha*(reward+discount_factormax(Q[new_state])-Q[state][action])
Q[0,1][3]=-0.5+0.5
(-1+1*0–0.5)=-0.75

可以看出同样是更新0.1的右动作值,Sarsa得到了更多的负值-25.75,而Q-learning只是-0.75,剩下的事就是不断重复了


重复5000次最终结果(无法在变化了)
Q-learning:
    上 下 左 右
    0  1  2  3
0.1的值[-13. -13. -12. -11.]
1.1的值[ -12. -112. -12. -10.]
2.1的值[ -11. -112. -11. -9.]
10.1的值[ -3. -112. -3. -1.]
11.1的值[-2. 0. -2. -1.]
在得到最大奖励0后上一格10.1取到11.0的最大值0
根据更新公式:Q[10,1][3]=-0.99999999+0.5*(-1+10–0.99999999)=-0.999999995
Q[10,1][3]=-0.999999995+0.5
(-1+1*0–0.999999995)=-0.9999999975
可以看出Q[10,1][3]一直重复更新最终会等于-1不在变化,然后Q[9,1][3]拿着-1不断更新自己最终得到-2,一级一级往回更新到起点,最终所有值不在变化,除非最后一格的奖励值0变化。

Sarsa:5000次结果

     上      下      左      右
0.1的值[-18.76912594 -24.63324661 -21.28189541 -26.38952064]
0.2的值[-19.36981812 -22.58232749 -19.8608942 -21.87539996]
0.3的值[-21.1978019 -22.95632104 -19.14385891 -15.91234316]
1.1的值[ -19.13591329 -121.55964814 -28.10113213 -29.78971138]
11.1的值[-3.73350942    0.      -2.22450389     -1. ]

可以看出边缘动作值更高。
因为采用随机动作更新策略,即使重复10万次也会变化,但是动作值大小关系不会变,除非设置一个随着次数增加,随机率跟着减少直到为0的函数才会收敛不变.

以上就是不同策略导致的不同结果。

本人文化只有小学水平,第一次发文,如有错误欢迎指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值