openAi开源了一个叫gym的游戏库,这个库里有好多小游戏可以用来做强化学习试验,比如Cart Pole平衡车小游戏。
gym的Cart Pole环境
Cart Pole在OpenAI的gym模拟器里面,是相对比较简单的一个游戏。游戏里面有一个小车,上有竖着一根杆子。小车需要左右移动来保持杆子竖直。如果杆子倾斜的角度大于15°,那么游戏结束。小车也不能移动出一个范围(中间到两边各2.4个单位长度)。如下图所示:
在gym的Cart Pole环境(env)里面,左移或者右移小车的action之后,env都会返回一个+1的reward。到达200个reward之后,游戏也会结束。
强化学习的目的就是训练神经网络来自动玩这个游戏,使得最终结果是连续移动200个action而平衡车不倒,一直到游戏正常结束。
那么问题来了,神经网络是通过什么机制来学会自动玩这个游戏呢?这就是深度学习里一个鼎鼎大名的领域叫“强化学习”。著名的围棋智能机器人阿法狗就是强化学习的一个典型应用。
那么强化学习是怎么实现的呢?它的工作原理是什么?
笔者不打算太多介绍理论方面的知识,更多的从实践出发,教给大家怎么编写自己的强化学习模型。强化学习模型大概有DQN,策略网络,DDPG等几种常见的神经网络结构,具体的模型实践会在后续章节详细介绍,这里首先给出一点大概的印象。
首先看下怎么使用gym吧:
先安装openai的gym环境,gym是一个模拟游戏环境的小引擎,openai开发gym就是为了方便广大机器学习爱好者做一些游戏交互方面的机器学习尝试。
pip install gym安装完成后,试试gym能不能正常运行。
运行下面代码:
import gym
# 创建一个小车倒立摆模型
env = gym.make('CartPole-v0')
# 初始化环境
env.reset()
# 刷新当前环境,并显示
env.render()
CartPole-v0’是小车游戏名称。出现上面这个窗口就表示gym环境已经可以正常运行了!
第二步,让小车动起来!
count = 0
for t in range(100):
action = env.action_space.sample() #随机采样动作
print("action:%s"%(action))
observation, reward, done, info = env.step(action) #与环境交互,获得下一步的时刻
if done:
break
env.render() #绘制场景
count+=1
time.sleep(0.2) #每次等待0.2s
print(count)
env.step(action)是让小车按照action的动作动起来,返回动起来之后的小车状态,回报值,是否结束等信息。
done=True表示本次游戏结束;observation是小车状态,reward是本次游戏动作的回报值。