前言
在网上搜索一遍之后发现,大家都是在用这个游戏来写代码,但是这个游戏怎么玩都没说。比如环境的state的4个指标表示什么意思?
env.reset()
返回的4个值代表什么意思?
而且奇怪的是,为什么在官网也没有说这4个值是什么意思。
官网只介绍了这个游戏要干什么。
游戏
这个游戏的主角包括两部分,一个是小车,一个是杆子,小车套在一个光滑无摩擦的轨道上。
杆子只要有倾斜,小车就会滑动。如果我们放任他们不管,结果就是杆子会倒下,小车会滑动,且远离中心。
游戏结束
此外,还有一个游戏结束的条件,那就是在一个游戏中走了500步,据说版本1(v0)是200步。
state
描述这个环境,即描述小车和杆子。用了4个指标描述,如下:
env.reset()
As discussed previously, the obs of CartPole has 4 values:
位置
First value is the position of the cart.
速度
Second value is the velocity of the cart.
角度
Third value is the angle of the pole.
角速度
Fourth value is the angular velocity of the pole.
从reset返回的值就可以看到,默认这个游戏开始就是杆子就是有倾斜的。
action和reward
action
动作包括向小车向左/向右施加一牛的力,在代码中用0,1表示。
reward
在本episode结束之前,做出的每一步动作都得到1的回报,如上。 注意:即使是本次做出一个动作,但是游戏结束了,我们也得到1的回报(这点环境设计得很不人性),这意味着我们要自己做一个代码判断,如果done=True,把reward改为负数之类的。
还要注意的是,如果done=True,我们还继续做动作,这个状态仍然会改变(不人性,我以前见过的有的游戏,结束后再继续操作不会有变化了),但是reward=0。
已经True了,继续移动
不过话说回来,其实他这样设计也没啥问题,因为这个游戏的目标就是要看谁玩得久,所以即使执行动作后,游戏结束了,其仍然给一个1的reward,也没啥问题,因为每个episode都多给了1,所以还是公平的,看步数就可以判断出谁玩的更好。
其他操作:
不过,这个好像没有什么用,是个垃圾。因为我试过,杆子角度是一[-0.21,0.21]的时候就会game over,不是上面的[-0.41,0.41]。至于game over之后,前面说过,你可以继续玩,上面的0.41同样没用,我试过,好几百了你都还可以继续玩。
|