强化学习的平衡车游戏

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而平衡车不倒,一直到游戏正常结束。spa

那么问题来了,神经网络是经过什么机制来学会自动玩这个游戏呢?这就是深度学习里一个鼎鼎大名的领域叫“强化学习”。著名的围棋智能机器人阿法狗就是强化学习的一个典型应用。code

那么强化学习是怎么实现的呢?它的工做原理是什么?blog

笔者不打算太多介绍理论方面的知识,更多的从实践出发,教给你们怎么编写本身的强化学习模型。强化学习模型大概有DQN,策略网络,DDPG等几种常见的神经网络结构,具体的模型实践会在后续章节详细介绍,这里首先给出一点大概的印象。游戏

首先看下怎么使用gym吧:ip

先安装openaigym环境,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是本次游戏动做的回报值。