需求

要用强化学习(Reinforcement Learning)算法解决问题,需要百千万次的训练,真实环境一般不允许这么多次训练(时间太长、试错代价太大),需要开发仿真环境。OpenAI的gym环境是目前的标准,遵守其API写一个自定义的环境可以被各种强化学习算法无码调用。

gym API要求

分析gym的代码和文档,可以看出,一个环境至少应该包含动作空间(action space)、状态空间(observation space)定义,以及reset()、step()、render()、close()方法,代码结构如下:

from typing import Optional
import gym
from gym import spacesclass MyEnv(gym.Env):def __init__(self):self.observation_space = spaces.Box(-np.inf, np.inf, shape=(5,), dtype=np.float32)#5个浮点数状态空间self.action_space = spaces.Discrete(3)#0,1,2三个动作空间def step(self, action):passdef reset(self,*,seed: Optional[int] = None,return_info: bool = False,options: Optional[dict] = None):passdef render(self, mode="human"):return Nonedef close(self):pass

环境的测试

自定义环境写好后,首先应该用预设数据进行测试,看结果是否符合预期,排出完bug之后,再交给RL算法去训练。

修改最多的地方就是奖励机制(reward)了,与领域问题密切相关,比如我的环境是仿真加热过程,温度每增加1℃得1分对么?实际温升的成本与温度之间不是线性关系,是指数函数,我感觉环境的学问90%都在奖励机制的设计上了。

注册为gym环境

我照着知乎这篇文章做的,分三步:

第一步:将我们自己的环境文件(我创建的文件名为myenv.py)拷贝到你的gym安装目录/gym/gym/envs/classic_control文件夹中。(拷贝在这个文件夹中因为要使用rendering模块。当然,也有其他办法。该方法不唯一)

第二步:打开该文件夹(第一步中的文件夹)下的__init__.py文件,在文件末尾加入语句:

from gym.envs.classic_control.myenv import MyEnv

第三步:进入文件夹你的gym安装目录/gym/gym/envs,打开该文件夹下的__init__.py文件,添加代码:

register(
id='MyEnv-v0',
entry_point='gym.envs.classic_control:GridEnv',
max_episode_steps=200,
reward_threshold=100.0,
)

在RL算法上训练

RL算法很多,实现就更五花八门了,推荐github上面星比较多的,我用的cleanrl,理念是一个算法一个独立文件搞定,B站上有作者介绍PPO的视频。把ppo.py文件中的env-name参数替换为MyEnv后就可以跑起来了,默认env-nums是4个,我改成了20个。

跑了4个小时,训练基本收敛了,满分应该是72.33分左右

仿真速度

    当你的仿真算法复杂时,速度恐怕不乐观,要训练1M次十天半个月的等不起,这时候就要优化仿真代码的速度,并考虑多环境并发训练了。

在我的仿真逻辑中,大计算量在蒸汽的物性参数计算上,而这个计算是在一定温度范围内才需要做的,加一些判断避免不必要的计算可以提高计算速度。

cleanrl默认用的是SyncVectorEnv(单进程内顺序调用环境),可以修改为AsyncVectorEnv,然后每个环境都会在独立的子进程中运行,再以通讯的方式与智能体进行交互。我试了20报错,spawn页面太小无法完成操作,修改D盘虚拟内存后,试10时似乎错误少了,改为8不报错了,可能是系统资源受限了吧,这回速度快了。

写一个强化学习训练的gym环境相关推荐

  1. 利用深度强化学习训练机械臂环境

    训练环境 使用Movan写的机械臂环境:https://github.com/MorvanZhou/Reinforcement-learning-with-tensorflow/blob/master ...

  2. 从零使用强化学习训练AI玩儿游戏(3)——使用Q-learning

    本文目前主要是写给自己的一个笔记,接下来这段时间会逐步记录我是怎么通过学习使用TensorFlow+Keras训练神经网络自己玩儿游戏,如果能间接帮助到他人就最好不过了,不喜勿喷. 上一篇我们已经找到 ...

  3. 在Unity环境中使用强化学习训练Donkey Car(转译)

    在Unity环境中使用强化学习训练Donkey Car 1.Introduction 简介 2. Train Donkey Car with Reinforcement Learning 使用强化学习 ...

  4. 田渊栋的2021年终总结:多读历史!历史就是一个大规模强化学习训练集

      视学算法报道   作者:田渊栋 编辑:好困 LRS [新智元导读]田渊栋博士最近又在知乎上发表了他的2021年度总结,成果包括10篇Paper和1部长篇小说及续集.文章中还提到一些研究心得和反思, ...

  5. 利用AI强化学习训练50级比卡超单挑70级超梦!

    强化学习(Reinforcement Learning, RL),是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题. ...

  6. 【经验】深度强化学习训练与调参技巧

    来源:知乎(https://zhuanlan.zhihu.com/p/482656367) 作者:岳小飞 天下苦 RL 久矣,其中最苦的地方莫过于训练和调参了,人人欲"调"之而后快 ...

  7. 1个GPU几分钟搞定强化学习训练,谷歌新引擎让深度学习提速1000倍丨开源

    博雯 发自 凹非寺 量子位 报道 | 公众号 QbitAI 机器人要如何完成这样一个动作? 我们一般会基于强化学习,在仿真环境中进行模拟训练. 这时,如果在一台机器的CPU环境下进行模拟训练,那么需要 ...

  8. 谷歌造了个虚拟足球场,让AI像打FIFA一样做强化学习训练丨开源有API

    郭一璞 发自 苏州街  量子位 报道 | 公众号 QbitAI 除了下棋.雅达利游戏和星际,AI终于把"魔爪"伸向了粉丝众多的体育竞技活动: 足球. 今天,谷歌开源了足球模拟环境G ...

  9. 强化学习在电商环境下的若干应用与研究

    背景 随着搜索技术的持续发展,我们已经逐渐意识到监督学习算法在搜索场景的局限性: 搜索场景中,只有被当前投放策略排到前面的商品,才会获得曝光机会,从而形成监督学习的正负样本,而曝光出来的商品,只占总的 ...

最新文章

  1. RedisClient 连接redis 提示 ERR Client sent AUTH, but no password is set
  2. java禁止放大_java 所有组件缩放、放大
  3. 用python多个关键字查找_python 如何实现并行查找关键字所在的行?
  4. boost::multiprecision模块mpfr_float相关的测试程序
  5. android适配器持有者模式
  6. 基于海量日志和时序数据的质量建设最佳实践
  7. C++ DNN Opencv3.4 实现人脸计数和人脸检测
  8. JSON与XML的选择
  9. Android第二十课 解决Logcat无法输出调试信息
  10. php无人点餐,东营_无人餐厅来了! 自助点餐、自动上菜 , 没有一个服务员!_胜利社区_东营论坛_油城茶座...
  11. 3D数学---坐标空间
  12. linux shell编程大作业,《Linux操作系统》Shell编程大作业-01-潘春艳.doc
  13. 最常用到的35种心理效应集锦
  14. Win10找不到便签怎么办 Win10找不到便签解决方法
  15. Windows XP 的共享问题!
  16. STM32 IIC协议 读写EEPROM
  17. 森林火灾发生时,如何做好火灾救援应急通信保障工作?
  18. Adobe illustrator快捷键整理
  19. android省市区 简书,中国省市区脚本
  20. css 3D 简单实践

热门文章

  1. OrCAD+PADS联合绘制PCB的总结
  2. VS code SSH 反复提示输入密码
  3. 前端三刺客---JS(WebAPI)
  4. 学习teardrop攻击并伪造一个ip包
  5. 关于bootstrap4 以下 与bootstrap5 的区别
  6. 径向基函数模型matlab,径向基函数RBF.ppt
  7. 就靠一刀999的手游广告,这些隐形公司可以月赚百万
  8. 家常菜做法:熬萝卜粉丝
  9. linux常用命令——ls
  10. 尚医通 (二十)就诊人用户管理 | 平台用户管理