前言
gym官网:http://gym.openai.com/envs/#classic_control。
这gym的游戏真他妈坑,有很多游戏,但是只是粗略说说,而不说游戏具体规则。
不但如此,坑2:Pendulum-v0都已经被gym官方认定过时了,导入会报错。但是这个网站却还没有更新Pendulum-v1过来,蛋疼。
还有坑3:大家要看这个游戏的具体规则要进入github里面去看。例如CartPole-v1如下:
如下
但是坑爹的是游戏Pendulum-v1的github中竟然也没有写游戏规则,大部分在那个gym网站不会写,但是github中会写,但是这个游戏github中都没有写,这还让人怎么玩啊。
CartPole-v1
这个游戏的主角包括两部分,一个是小车,一个是杆子,小车套在一个光滑无摩擦的轨道上。
杆子只要有倾斜,小车就会滑动。如果我们放任他们不管,结果就是杆子会倒下,小车会滑动,且远离中心。
游戏结束
此外,还有一个游戏结束的条件,那就是在一个游戏中走了500步,版本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改为负数之类的。
Pendulum-v1
动作:往左转还是往右转,用力矩来衡量,即力乘以力臂。范围[-2,2]:
状态:cos(theta), sin(theta) , thetadot(角速度)
前面那个角度指的是什么?竖直为0度,顺时针方向来计算角度,所以角度范围是[0,360],例如图中大概是140度的样子。
奖励:
th就是上面的角度,thdot就是角速度,u就是你输入的动作值[-2,2]。
env.step(u)
也就是说:
总的来说,越直立拿到的奖励越高,越偏离,奖励越低。
游戏结束:200步后游戏结束。所以要在200步内拿到的分越高越好。
通用操作
env.observation_space#查看状态空间
env.action_space#查看动作空间