深度强化学习之gym扫地机器人环境的搭建(持续更新算法,附源码,python实现)
想要源码可以点赞关注收藏后评论区留下QQ邮箱
本次利用gym搭建一个扫地机器人环境,描述如下:
在一个5×5的扫地机器人环境中,有一个垃圾和一个充电桩,到达[5,4]即图标19处机器人捡到垃圾,并结束游戏。同时获得+3的奖赏。左下角[1,1]处有一个充电桩,机器人到达充电桩可以充电且不再行走,获得+1的奖赏。环境中间[3,3]处有一个障碍物,机器人无法通过。
扫地机器人具体流程如下
1:每局游戏开始 机器人初始位置位于左上角 即[1,5]处
2:游戏进行过程中 机器人将在地图上不断进行探索
3:机器人遇到障碍物时无法通过 保持原地不动 获得-10的奖赏
4:地图上有两个终止状态,一个为捡到垃圾,获得+5的奖赏,另一个为达到充电桩进行充电进行充电 获得+1奖赏
5:扫地机器人到达终止状态 即一个情节结束 机器人回到初始位置
代码运行效果如下
扫地机器人环境搭建
部分代码如下
# 深度强化学习——原理、算法与PyTorch实战,代码名称:代02-搭建扫地机器人的Gym环境.pyimport gym
from gym import spaces
from gym.utils import seeding
import sys
from time import sleep
import signalclass Grid(object):def __init__(self,x: int = None, # 坐标xy: int = None, # 坐标ygrid_type: int = 0, # 类别值(0:空;1:障碍或边界)enter_reward: float = 0.0): # 进入该格子的即时奖励self.x = xself.y = yself.grid_type = grid_typeself.enter_reward = enter_rewardself.name = "X{0}-Y{1}".format(self.x, self.y)def __str__(self):return "Grid: {name:{3}, x:{0}, y:{1}, grid_type:{2}}".format(self.x, self.y, self.grid_type, self.name)class GridMatrix(object):def __init__(self,n_width: int, # 水平方向格子数n_height: int, # 竖直方向格子数default_type: int = 0, # 默认类型,0-空default_reward: float = 0.0, # 默认即时奖励值):self.n_height = n_heightself.n_width = n_widthself.default_reward = default_rewardself.default_type = default_typeself.grids = None # list(Grid) 将二维的格子世界中的格子存储在一维的列表中self.len = n_width * n_height # 格子数self.reset()def reset(self):self.grids = []for x in range(self.n_height):for y in range(self.n_width):self.grids.append(Grid(x, y, self.default_type, self.default_reward))def get_grid(self, x, y=None):"""获取一个格子信息args: 坐标信息,由x,y表示或仅有一个类型为tuple的x表示return: grid object"""xx, yy = None, Noneif isinstance(x, int):xx, yy = x, yelif isinstance(x, tuple):xx, yy = x[0], x[1]assert (0 <= xx < self.n_width and 0 <= yy < self.n_height) # 任意坐标值应在合理区间index = yy * self.n_width + xx # 二维坐标展开为一维线性坐标return self.grids[index]def set_reward(self, x, y, reward):grid = self.get_grid(x, y)if grid is not None:grid.enter_reward = rewardelse:raise ("grid doesn't exist")def set_type(self, x, y, grid_type):grid = self.get_grid(x, y)if grid is not None:grid.grid_type = grid_typeelse:raise ("grid doesn't exist")def get_reward(self, x, y):grid = self.get_grid(x, y)if grid is None:return Nonereturn grid.enter_rewarddef get_type(self, x, y):grid = self.get_grid(x, y)if grid is None:return Nonereturn grid.grid_typeclass GridWorldEnv(gym.Env):metadata = {'render.modes': ['human', 'rgb_array'], 'video.frames_per_second': 30}def __init__(self,n_width: int = 5, # 格子世界宽度(以格子数计)n_height: int = 5, # 高度u_size=40, # 当前格子绘制尺寸default_reward: float = 0,default_type=0):self.n_width = n_widthself.n_height = n_heightself.default_reward = default_rewardself.default_type = default_typeself.u_size = u_sizeself.screen_width = u_size * n_width # 场景宽度self.screen_height = u_size * n_height # 场景长度self.grids = GridMatrix(n_width=self.n_width,n_height=self.n_height,default_reward=self.default_reward,default_type=self.default_type)self.reward = 0 # for renderingself.action = None # for rendering# 0,1,2,3 represent left, right, up, downself.action_space = spaces.Discrete(4)# 观察空间由low和high决定self.observation_space = spaces.Discrete(self.n_height * self.n_width)self.state = None # 格子世界的当前状态self.ends = [(0, 0), (4, 3)] # 终止格子坐标,可以有多个self.start = (0, 4) # 起始格子坐标,只有一个self.types = [(2, 2, 1)]self.rewards = [(0, 0, 1), (4, 3, 5), (2, 2, -10)]self.refresh_setting()self.viewer = None # 图形接口对象self.seed() # 产生一个随机子self.reset()
深度强化学习之gym扫地机器人环境的搭建(持续更新算法,附源码,python实现)相关推荐
- 用Turtlebot3实现基于深度强化学习的多移动机器人导航避障的仿真训练(附源码)
Do not blindly trust anything I say, try to make your own judgement. 这是我的第一篇CSDN文章,本科四年一直都是白嫖现成的CSDN ...
- 深度强化学习控制六足机器人移动个人学习笔记(一)
深度强化学习控制六足机器人移动个人学习笔记(一) 注意事项 ubuntu18对应的ros版本不是Kinect gym算法执行中部分包要求Python不低于3.6 conda虚拟环境安装gym-gaze ...
- 【医疗人工智能论文】使用深度强化学习的腹腔镜机器人辅助训练
Article 作者:Xiaoyu Tan , Chin-Boon Chng, Ye Su, Kah-Bin Lim, and Chee-Kong Chui 文献题目:Robot-Assisted T ...
- 【李宏毅深度强化学习笔记】5、Q-learning用于连续动作 (NAF算法)
[李宏毅深度强化学习笔记]1.策略梯度方法(Policy Gradient) [李宏毅深度强化学习笔记]2.Proximal Policy Optimization (PPO) 算法 [李宏毅深度强化 ...
- 《PCL点云库学习VS2010(X64)》Part 41 图形学领域的关键算法及源码链接
<PCL点云库学习&VS2010(X64)>Part 41 图形学领域的关键算法及源码链接 原文链接: Conference papers Graphics Conference ...
- 通过自定义组件学习Vue系列(二)【时间轴】(附源码)
需求: 用于升级日志的显示 效果图: 实现原理: 主要区域分为两块,时间区和内容区,时间区是画一个圆点和显示一个时间,内容区左边一个竖线和文字显示 然后做一下循环,将每个日期的数据显示出来 布局采用f ...
- 深度学习学习笔记-论文研读4-基于深度强化学习的多用户边缘计算任务卸载调度与资源分配算法
本人学识浅薄,如有理解不到位的地方还请大佬们指出,相互学习,共同进步 概念引入 强化学习 DQN算法 边缘计算 边缘计算,是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平 ...
- ICLR2018 | 深度学习顶会见闻,干货资源都在这里(附源码、论文链接)
虽然仅仅举办过六届,ICLR已经是深度学习领域的顶级会议,得到了业界的广泛认可.第六届ICLR于2018.4.30~2018.5.03在温哥华会展中心召开,笔者署名的一篇文章有幸被workshop接收 ...
- [附源码]Python计算机毕业设计SSM基于的英语学习网站的设计与实现(程序+LW)
项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...
最新文章
- 【 MATLAB 】xlim 、 ylim 、zlim简介
- 对javascript闭包的理解
- sign的oracle,oracle sign
- POJ 2785 4 Values whose Sum is 0
- 50个Android应用!Win11支持运行了
- iOS 开发线程 gcd
- 通信原理眼图画法_光纤通信链路入侵与检测技术研究综述
- Spring Boot @ SpringBootApplication,SpringApplication类
- 10分钟就能学会,Linux操作系统21个shell常用命令
- 运动坐标系的旋转角速度与旋转角(转换角)的关系
- 工程师思维 vs 销售思维
- bldc不同载波频率_BLDC的双闭环老调不好,求帮助
- 辣侃情恋男女的犀利段子
- 一刀工具箱- 语音合成工具
- Rust学习教程30 - Panic原理剖析
- 车规电阻AEC-Q200测试项目及元器件检测设备
- OSChina 周五乱弹 —— duang ~ duang ~ duang~
- 如何在Chrome浏览器下清除DNS缓存
- CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲
- ios友盟错误_iOS - 友盟错误分析
热门文章
- Acwing第 64 场周赛【未完结】
- el-input 使用 回车键会刷新页面的问题
- Android Paint类
- 安卓手机管理软件_【软件合集】那些安卓系统应用的替代品
- python判断能否组成三角形_【python+任意输入3个数+判断能否组成三角形】 - #1
- 炁体源流 鸿蒙,《一人之下》八奇技 炁体源流
- Autocad批量打印快捷键如何批量打印
- Mysql出现问题:ERROR 1149 ( 42000 (ER_SYNTAX_ERROR)): You have an error in your SQL syntax; check th解决方案
- 【C++】1081:分苹果(信息学奥赛)
- 图像金字塔、高斯金字塔、拉普拉斯金字塔是怎么回事?附利用拉普拉斯金字塔和高斯金字塔重构原图的Python-OpenCV代码