在DQN(Deep Q-learning)入门教程(四)之Q-learning Play Flappy Bird中,我们使用q-learning算法去对Flappy Bird进行强化学习,而在这篇博客中我们将使用神经网络模型来代替Q-table,关于DQN的介绍,可以参考我前一篇博客:DQN(Deep Q-learning)入门教程(五)之DQN介绍
在这篇博客中将使用DQN做如下操作:
- Flappy Bird
- MountainCar-v0
再回顾一下DQN的算法流程:
项目地址:Github
MountainCar-v0
MountainCar的训练好的Gif示意图如下所示,汽车起始位置位于山的底部,最终目标是驶向右边山的插旗的地方,其中,汽车的引擎不能够直接驶向终点,必须借助左边的山体的重力加速度才能够驶向终点。
MountainCar-v0
由OpenAI提供,python包为gym,官网网站为https://gym.openai.com/envs/MountainCar-v0/。在Gym包中,提供了很多可以用于强化学习的环境(env):
在MountainCar-v0中,状态有2个变量,car position(汽车的位置),car vel(汽车的速度),action一共有3种:Accelerate to the Left
,Don't accelerate
,Accelerate to the Right
,然后当车达到旗帜的地方(position = 0.5)会得到
下面介绍一下gym中几个常用的函数:
- env = gym.make("MountainCar-v0")
这个就是创建一个MountainCar-v0
的游戏环境。 - state = env.reset()
重置环境,返回重置后的state - env.render()
将运行画面展示在屏幕上面,当我们在训练的时候可以不使用这个来提升速度。 - next_state, reward, done, _ = env.step(action)
执行action动作,返回下一个状态,奖励,是否完成,info。
初始化Agent
初始化Agent直接使用代码说明吧,这个还是比较简单的:
import keras
import random
from collections import deque
import gym
import numpy as np
from keras.layers import Dense
from keras.models import Sequential
class Agent():
def __init__(self, action_set, observation_space):
"""
初始化
:param action_set: 动作集合
:param observation_space: 环境属性,我们需要使用它得到state的shape
"""
# 奖励衰减
self.gamma = 1.0
# 从经验池中取出数据的数量
self.batch_size = 50
# 经验池
self.memory = deque(maxlen&#