引言
在学习《强化学习导论的》的过程中,都逃不过一个经典的强化学习案例—开车回家问题。
下面我们就来分析,如何用MC和TD方法预测回家总时间。
问题描述
每天下班回家时,您都会尝试预测回家需要多长时间。当您离开办公室时,您会记下时间,星期几,天气以及其他可能相关的内容。说这个星期五你正好在6点钟离开,你估计要回家需要30分钟。当你到达你的车是6:05,你注意到它开始下雨。在雨中交通通常较慢,所以你重新估计从那时起需要35分钟,或总共40分钟。十五分钟后,您及时完成了旅程的高速公路部分。当您退出二级道路时,您将总旅行时间的估计值减少到35分钟。不幸的是,此时你被困在一辆慢卡车后面,而且道路太窄而无法通过。你最终不得不跟随卡车,直到你6:40到达住的小街。三分钟后你就回家了。因此,状态,时间和预测的顺序如下:
在这个过程中α = 1,γ = 1, R 为每段实际消耗的时间。
图中黑色线是回家需要的总时间的估计,红色线是状态估计值的更新。
然后注明一下这两个图中容易混淆的地方:
(1)、图中的elapsed time记录的是消耗的总时间,而不是我们在TD方法中需要用的每一步的奖励R,真实的R是相邻elapsed time的差值。
(2)、在这里我们的值函数的含义是在当前状态开始到回家结束的剩余时间的期望,注意!!!这里不是总时间,即不是图中黑线。
这里估计的总时间等于当前状态下剩余时间的估计,加上已经消耗的时间。而我们需要更新的就是当前状态下剩余时间的估计,即这里的值函数。
在TD 方法中,需要更新的红色线就是当前时刻的估计误差。
求解
知道问题描述,以及注意了容易混淆的地方以后,我们就可以用正常的TD 算法和MC 算法求解了。
首先TD算法:
值函数:
误差:
这里在图中,我们只体现出误差的变化(红色线),因此只需要计算误差。以下高速的状态为例:
误差 = (30 - 20)+ 10 - 15 = 5
然后MC方法:
值函数:
误差就是后面括号内的值。
同样在下高速的状态时:
误差 = (43-20) - 15 = 7
在蒙特卡洛算法中,我们需要在最后得到实际当前状态时所需剩余时间后才能更新当前时间的估计;而在TD算法中,在走到下一时刻并且得到下一步的估计值以及所得奖励后就可以更新当前步状态的估计。
致谢
文中的图片以及问题描述均出自强化学习 6.1,在这里表示感谢!