gym创建自己的强化学习环境env
创建自己的用于强化学习的环境env
1,在C:\Users\xxx\anaconda3\envs\pytorch\Lib\site-packages\gym\envs\classic_control下创建环境文件MyEnv.py
2,在C:\Users\xxx\anaconda3\envs\pytorch\Lib\site-packages\gym\envs\_init_.py中注册
# 创建自己的环境
register(id="MyEnv-v0",entry_point="gym.envs.classic_control.MyEnv:MyEnv"
)
3,在C:\Users\xxx\anaconda3\envs\pytorch\Lib\site-packages\gym\envs\classic_control\_init_.py中导入自己的环境
from gym.envs.classic_control.MyEnv import MyEnv # 创建自己的环境
4,开始写环境文件
import gym
from numpy import random
import timeclass MyEnv(gym.Env):def __init__(self):self.viewer = None# 状态空间self.states = [1, 2, 3, 4, 5,6, 7, 8, 9, 10,11, 12, 13, 14, 15,16, 17, 18, 19, 20,21, 22, 23, 24, 25]# 动作空间self.actions = ['n', 'e', 's', 'w'] # 上、右、下、左# 回报函数self.rewards = dict()self.rewards['10_s'] = 10 # 第10个格子往南能得到奖励10self.rewards['14_e'] = 10 # 第14个格子往东能得到奖励10self.rewards['20_n'] = 10 # 第20个格子往北能得到奖励10self.rewards['3_e'] = -100self.rewards['5_w'] = -100self.rewards['8_e'] = -100self.rewards['10_w'] = -100self.rewards['14_n'] = -100self.rewards['6_s'] = -100self.rewards['7_s'] = -100self.rewards['16_n'] = -100self.rewards['17_n'] = -100self.rewards['13_w'] = -100self.rewards['18_s'] = -100self.rewards['19_s'] = -100self.rewards['20_s'] = -100self.rewards['22_e'] = -100# 状态转移概率,用状态_动作的模式存入字典self.t = dict() # 当前格子_动作-->得到下一个格子self.t['1_s'] = 6self.t['1_e'] = 2self.t['2_w'] = 1self.t['2_s'] = 7self.t['2_e'] = 3self.t['3_w'] = 2self.t['3_s'] = 8self.t['5_s'] = 10self.t['6_n'] = 1self.t['6_e'] = 7self.t['7_w'] = 6self.t['7_n'] = 2self.t['7_e'] = 8self.t['8_w'] = 7self.t['8_n'] = 3self.t['8_s'] = 13self.t['10_n'] = 5# self.t['10_s'] = 15self.t['13_n'] = 8self.t['13_e'] = 14self.t['13_s'] = 18self.t['14_w'] = 13# self.t['14_e'] = 15self.t['14_s'] = 19self.t['16_e'] = 17self.t['16_s'] = 21self.t['17_w'] = 16self.t['17_e'] = 18self.t['17_s'] = 22self.t['18_w'] = 17self.t['18_e'] = 19self.t['18_n'] = 13self.t['19_w'] = 18self.t['19_n'] = 14self.t['19_e'] = 20self.t['20_w'] = 19# self.t['20_n'] = 15self.t['21_n'] = 16self.t['21_e'] = 22self.t['22_w'] = 21self.t['22_n'] = 17def step(self, action):#系统当前状态state = self.stateprint('当前状态state:', state)#将状态和动作组成的字典的键值key = "%d_%s" % (state, action)print('key :', key)# 出口判断,初值为FALSEis_terminal = False#状态转移#self.t是状态转移表,如果键值在表中,则通过表选出下一状态if key in self.t:next_state = self.t[key]r = -1# 动作的下一刻是黑色墙壁的、出口的和超出迷宫范围的都不在状态转移表中#如果键值不在状态转移表中,则维持当前状态elif key in self.rewards:if self.rewards[key] == -100:next_state = 0 # 没有下一个状态了r = -100is_terminal = Trueelif self.rewards[key] == 10:next_state = 15 # 找到出口r = 10is_terminal = Trueelse:next_state = stater = -1self.state = next_statereturn next_state, r, is_terminal, {}def reset(self):s = [4, 9, 11, 12, 23, 24, 25]self.state = self.states[int(random.random() * (len(self.states)))]while self.state in s:self.state = self.states[int(random.random() * (len(self.states) - 1))]return self.statedef close(self):if self.viewer:self.viewer.close()self.viewer = Nonedef render(self, mode="human"):from gym.envs.classic_control import renderingwidth = 60height = 40edge_x = 0edge_y = 0if self.viewer is None:self.viewer = rendering.Viewer(300, 200)# 右下角 用黑色表示墙self.viewer.draw_polygon([(0, 0), (0, height), (width, height), (width, 0)], filled=True,color=(0, 0, 0)).add_attr(rendering.Transform((edge_x + width * 2, edge_y + height * 1)))self.viewer.draw_polygon([(0, 0), (0, height), (width, height), (width, 0)], filled=True,color=(0, 0, 0)).add_attr(rendering.Transform((edge_x + width * 3, edge_y + height * 1)))self.viewer.draw_polygon([(0, 0), (0, height), (width, height), (width, 0)], filled=True,color=(0, 0, 0)).add_attr(rendering.Transform((edge_x + width * 4, edge_y + height * 1)))# 左边self.viewer.draw_polygon([(0, 0), (0, height), (width, height), (width, 0)], filled=True,color=(0, 0, 0)).add_attr(rendering.Transform((edge_x, edge_y + height * 3)))self.viewer.draw_polygon([(0, 0), (0, height), (width, height), (width, 0)], filled=True,color=(0, 0, 0)).add_attr(rendering.Transform((edge_x + width * 1, edge_y + height * 3)))# 上边self.viewer.draw_polygon([(0, 0), (0, height), (width, height), (width, 0)], filled=True,color=(0, 0, 0)).add_attr(rendering.Transform((edge_x + width * 3, edge_y + height * 4)))self.viewer.draw_polygon([(0, 0), (0, height), (width, height), (width, 0)], filled=True,color=(0, 0, 0)).add_attr(rendering.Transform((edge_x + width * 3, edge_y + height * 5)))# 出口,用黄色表示出口self.viewer.draw_polygon([(0, 0), (0, height), (width, height), (width, 0)], filled=True,color=(1, 0.9, 0)).add_attr(rendering.Transform((edge_x + width * 4, edge_y + height * 3)))# 画网格for i in range(1, 7):self.viewer.draw_line((edge_x, edge_y + height * i), (edge_x + 5 * width, edge_y + height * i)) # 横线self.viewer.draw_line((edge_x + width * (i - 1), edge_y + height),(edge_x + width * (i - 1), edge_y + height * 6)) # 竖线# 人的像素位置self.x = [edge_x + width * 0.5, edge_x + width * 1.5, edge_x + width * 2.5, 0, edge_x + width * 4.5,edge_x + width * 0.5, edge_x + width * 1.5, edge_x + width * 2.5, 0, edge_x + width * 4.5,0, 0, edge_x + width * 2.5, edge_x + width * 3.5, edge_x + width * 4.5,edge_x + width * 0.5, edge_x + width * 1.5, edge_x + width * 2.5, edge_x + width * 3.5,edge_x + width * 4.5,edge_x + width * 0.5, edge_x + width * 1.5, 0, 0, 0]self.y = [edge_y + height * 5.5, edge_y + height * 5.5, edge_y + height * 5.5, 0, edge_y + height * 5.5,edge_y + height * 4.5, edge_y + height * 4.5, edge_y + height * 4.5, 0, edge_y + height * 4.5,0, 0, edge_y + height * 3.5, edge_y + height * 3.5, edge_y + height * 3.5,edge_y + height * 2.5, edge_y + height * 2.5, edge_y + height * 2.5, edge_y + height * 2.5,edge_y + height * 2.5,edge_y + height * 1.5, edge_y + height * 1.5, 0, 0, 0]# 用圆表示人# self.viewer.draw_circle(18,color=(0.8,0.6,0.4)).add_attr(rendering.Transform(translation=(edge_x+width/2,edge_y+height*1.5)))self.viewer.draw_circle(18, color=(0.8, 0.6, 0.4)).add_attr(rendering.Transform(translation=(self.x[self.state - 1], self.y[self.state - 1])))return self.viewer.render(return_rgb_array=mode == 'rgb_array')
调用自己的环境
import gymenv = gym.make("MyEnv-v0")
env.reset()
env.step()
env.render()
gym创建自己的强化学习环境env相关推荐
- openai的gym baseline spiningup 深度强化学习环境安装 手撸gym环境demo
按照spiningup我们学习DRL,链接 https://github.com/openai/gym https://github.com/openai/baselines 1. 安装anacond ...
- 强化学习环境库 Gym 发布首个社区发布版,全面兼容 Python 3.9
作者:肖智清 来源:AI科技大本营 强化学习环境库Gym于2021年8月中旬迎来了首个社区志愿者维护的发布版Gym 0.19.该版本全面兼容Python 3.9,增加了多个新特性. 强化学习环境库的事 ...
- 强化学习——环境库OpenAI Gym
前言 前段时间各大新闻媒体都在报道SpaceX的马斯克,因为其公司成功发射"猎鹰9号"火箭.马斯克是一个极具传奇色彩的人物,其成就也足以让他名垂青史.但今天我们要讨论的不是马斯克这 ...
- qlearning算法_通过OpenAI Gym编写第一个强化学习算法
腾讯互娱Turing Lab从创建开始,每周在内部进行分享读书会,对业界的技术研究和应用进行讨论.在此通过公众号形式把相关有趣内容也推送给对新技术和业界趋势感兴趣的朋友. 和大量的所谓技术公众号不同, ...
- PyTorch强化学习实战(1)——强化学习环境配置与PyTorch基础
PyTorch强化学习实战(1)--强化学习环境配置与PyTorch基础 0. 前言 1. 搭建 PyTorch 环境 2. OpenAI Gym简介与安装 3. 模拟 Atari 环境 4. 模拟 ...
- Docker实操3——配置强化学习环境镜像
手动配置一遍docker中的强化环境 一.安装基本操作 1.1 查看基础信息 1.2 国内换源 1.3 安装nvidia-docker 二.docker基本操作 三.例子:强化学习库的docker环境 ...
- 强化学习环境全库安装(从mujoco到spinningup)
强化学习环境全库安装 从mujoco200到spinningup (上篇) 前言 一: 安装Mujoco200物理引擎 二. 创建conda虚拟环境 1:选择python版本 2.创建conda虚拟环 ...
- 【强化学习实战】基于gym和tensorflow的强化学习算法实现
[新智元导读]知乎专栏强化学习大讲堂作者郭宪博士开讲<强化学习从入门到进阶>,我们为您节选了其中的第二节<基于gym和tensorflow的强化学习算法实现>,希望对您有所帮助 ...
- 打造一个投资组合管理的金融强化学习环境
原创文章第120篇,专注"个人成长与财富自由.世界运作的逻辑, AI量化投资". 今天继续金融强化学习环境. 网上的金融学习环境不少,但都太过于"业余",或者离 ...
最新文章
- 【记录】ASP.NET IIS ISAPI_Rewrite
- FPGA之道(44)HDL中的隐患写法
- python基础代码-python基础代码
- MySQL中INSERT IGNORE INTO和REPLACE INTO的使用
- php在sql中添加数据,使用php在oracle数据库中插入数据
- 实现才是目的——《大道至简》第六章读后感
- 通过Java代码浅谈HTTP协议
- Linux应用程序和驱动程序如何完成交互,应用程序和驱动的简易交互方式的实现...
- java的接口语法_JAVA接口的基本语法
- 当碰到非ARC写的文件时在ARC环境下运行报错时解决办法
- 通用有限元软件简介及比较
- 基于学术研究风云卫星数据下载教程
- DOS命令行界面打开文件
- Linux虚拟机快速搭建RabbitMQ(解压版)完整流程(简单明了、不亲测能写这么多)
- 【offer谈判】如何做一朵盛世白莲花,让企业愿意为你花大价钱!
- 微信小程序之发送表情和文字和语音之php
- 赛程表 (递归调用, 非递归调用)
- Kaldi 入门使用教程
- 定积分在几何学上的应用
- C++学习笔记(六)
热门文章
- NLP模型集锦----pynlp
- matlab模拟斜抛运动60,大学物理教学改革论文,关于大学物理教学方法改革-Matlab的妙用相关参考文献资料-免费论文范文...
- 云上数据保护,你以为挡住黑客就够了?
- vs2008编译QT开源项目--太阳神三国杀源码分析(一) 项目编译及整体分析
- 坚守在技术无人区,一群无名英雄的低调与浪漫
- 黑帽黑客历史盘点:这群人到底厉害到什么程度?
- 支付宝618红包怎么领?怎么用?
- 2022国赛题vsftpd
- 特朗普荣获医学教育奖!2020年搞笑诺贝尔奖出炉,还有有味道的一系列研究......
- juju debug hacks (by quqi99)