OpenAI Gym是开发和比较强化学习算法的工具包。
OpenAI Gym由两部分组成:
- gym开源库:测试问题的集合。当你测试强化学习的时候,测试问题就是环境,比如机器人玩游戏,环境的集合就是游戏的画面。这些环境有一个公共的接口,允许用户设计通用的算法。
- OpenAI Gym服务。提供一个站点(比如对于游戏cartpole-v0:https://gym.openai.com/envs/CartPole-v0)和api,允许用户对他们的测试结果进行比较。
gym的核心接口是Env,作为统一的环境接口。Env包含下面几个核心方法:
- reset(self):重置环境的状态,返回观察。
- step(self, action):推进一个时间步长,返回observation,reward,done,info
- render(self, mode=’human’, close=False):重绘环境的一帧。默认模式一般比较友好,如弹出一个窗口。
自定义环境
背景
机器人在一个二维迷宫中走动,迷宫中有火坑、石柱、钻石。如果机器人掉到火坑中,游戏结束,如果找到钻石,可以得到奖励,游戏也结束!设计最佳的策略,让机器人尽快地找到钻石,获得奖励。
操作环境
Python环境:anaconda5.2
pip安装gym
步骤
在 anaconda3/lib/python3.6/site-packages/gym/envs
下新建目录 user
,用于存放自定义的强化学习环境。
在 user
目录下新建环境 grid_mdp_v1.py
import logging
import random
import gym
logger = logging.getLogger(__name__)
class GridEnv1(gym.Env):
metadata = {
'render.modes': ['human', 'rgb_array'],
'video.frames_per_second': 2
}
def __init__(self):
self.states = range(1,17) #状态空间
self.x=[150,250,350,450] * 4
self.y=[450] * 4 + [350] * 4 + [250] * 40 + [150] * 4
self.terminate_states = dict() #终止状态为字典格式
self.terminate_states[11] = 1
self.terminate_states[12] = 1
self.terminate_states[15] = 1
self.actions = ['n','e','s','w']
self.rewards = dict(); #回报的数据结构为字典
self.rewards['8_s'] = -1.0
self.rewards['13_w'] = -1.0
self.rewards['7_s'] = -1.0
self.rewards['10_e'] = -1.0
self.rewards['14_4&#