用q-learning解决MountainCar

解决了MountainCar,虽然之前也解决过,但是不是那么熟练和熟悉,有股陌生感。

q-learning是时序差分的一种方法,也就是可以不用完整的回合(完整的回合,相当于游戏从开始到结束)来更新Q价值函数。

之前不怎么会用q-learning,因为之前的蒙特卡罗等等方法都是在一个格子世界环境来执行的,格子世界的状态是坐标,所以状态不仅是离散的而且还很少。所以可以很容易的初始化Q函数。但是在gym库里的环境就不一样了,状态是连续的,这就很麻烦。后来就用人工的把状态分割成几部分。

mountain car里面的状态包含两个元素,第一个是位置,第二个是速度。当位置超过0.5时就算赢了。在0.5之前的所有状态的奖励都是-1.到达终点0.5的奖励为0.如果游戏超过200时间步就终止,或者位置超过0.5就终止。

后面训练了两万次.
图片

average 奖励,玩100次,得到100个累积奖励,然后求期望。
最大奖励就是100个累积奖励里面最大的。

在mountain car里面自己重新设置了奖励,如果位置大于0.5,reward = 10000.表示奖励达到这个结果的行为。
在8100左右,max reward已经基本上是平的线了。意味着在这之后的每100个回合里面,至少有一个位置超过了0.5.
看图,总体来说,agent还是表现的越来越好的。

感觉还是太慢了,不过还是不错了。

|

你可能感兴趣的:(用q-learning解决MountainCar)