gym 搭建 RL 环境
时间:2022-07-23
本文章向大家介绍gym 搭建 RL 环境,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
gym调用
gym的调用遵从以下的顺序
- env = gym.make('x')
- observation = env.reset()
- for i in range(time_steps): env.render() action = policy(observation) observation, reward, done, info = env.step(action) if done: …… break
- env.close()
例程
例程是一个简单的策略,杆左斜车左移,右斜则右移。
import gym
import numpy as np
env = gym.make('CartPole-v0')
t_all = []
action_bef = 0
for i_episode in range(5):
observation = env.reset()
for t in range(100):
env.render()
cp, cv, pa, pv = observation
if abs(pa)<= 0.1:
action = 1 -action_bef
elif pa >= 0:
action = 1
elif pa <= 0:
action = 0
observation, reward, done, info = env.step(action)
action_bef = action
if done:
# print("Episode finished after {} timesteps".format(t+1))
t_all.append(t)
break
if t ==99:
t_all.append(0)
env.close()
print(t_all)
print(np.mean(t_all))
gym的搭建
gym的函数构成
一个完整的gym环境包括以下函数:类构建、初始化、
- class Cartpoleenv(gym.env)
- def __ init __(self):
- def reset(self):
- def seed(self, seed = None): return [seed]
- def step(self, action): return self.state, reward, done, {}
- def render(self, mode='human'): return self.viewer.render()
- def close():
功能函数
- 参数限位
vel = np.clip(vel, vel_min, vel_max)
- action输入校验
self.action_space.contains(action)
- action和observation空间定义 Discrete: 0,1,2 low = np.array([min_0,min_1],dtype=np.float32) high = np.array([max_0,max_1],dtype=np.float32) self.action_space = spaces.Discrete(3) self.observation_space = spaces.Box( self.low, self.high, dtype=np.float32)
Mac系统添加自己写的环境到gym
- 打开gym.envs目录:
/usr/local/lib/python3.7/site-packages/gym/envs
- 将自己编写的myenv.py拷贝至一个aa目录
- envs/aa下__init__.py添加
from gym.envs.classic_control.myenv import MyEnv
- env下__init__.py添加
register(
id='myenv-v0',
entry_point='gym.envs.classic_control:MyEnv,
max_episode_steps=999,
)
- 注意:注册方法内 id号不能省 然后就可以调用了
id = 'myenv-v0'
env = gym.make('id')
env.reset()
env.step()
env.sloce()
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Python 之pyaudio使用随笔
- Determining 32 vs 64 bit in C++
- 在线、离线激活鉴权实战
- Spark vs Dask Python生态下的计算引擎
- 表达差异基因分析
- threadlocal记录
- 2020-09-22:已知两个数的最大公约数,如何...
- 【超详细】分布式一致性协议 - Paxos
- MySQL 8.0新特性 — 降序索引
- TRTC横竖屏切换2,重力感应
- Elasticsearch 日志配置详解【技术创作101训练营】
- HashMap源码分析
- SpringBoot分组校验及自定义校验注解
- BERT详解
- 技术创作101训练营--一篇文章带你了解CSS基本用法和选择器知识