想要源码可以点赞关注收藏后评论区留下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实现)相关推荐

  1. 用Turtlebot3实现基于深度强化学习的多移动机器人导航避障的仿真训练(附源码)

    Do not blindly trust anything I say, try to make your own judgement. 这是我的第一篇CSDN文章,本科四年一直都是白嫖现成的CSDN ...

  2. 深度强化学习控制六足机器人移动个人学习笔记(一)

    深度强化学习控制六足机器人移动个人学习笔记(一) 注意事项 ubuntu18对应的ros版本不是Kinect gym算法执行中部分包要求Python不低于3.6 conda虚拟环境安装gym-gaze ...

  3. 【医疗人工智能论文】使用深度强化学习的腹腔镜机器人辅助训练

    Article 作者:Xiaoyu Tan , Chin-Boon Chng, Ye Su, Kah-Bin Lim, and Chee-Kong Chui 文献题目:Robot-Assisted T ...

  4. 【李宏毅深度强化学习笔记】5、Q-learning用于连续动作 (NAF算法)

    [李宏毅深度强化学习笔记]1.策略梯度方法(Policy Gradient) [李宏毅深度强化学习笔记]2.Proximal Policy Optimization (PPO) 算法 [李宏毅深度强化 ...

  5. 《PCL点云库学习VS2010(X64)》Part 41 图形学领域的关键算法及源码链接

    <PCL点云库学习&VS2010(X64)>Part 41 图形学领域的关键算法及源码链接 原文链接: Conference papers Graphics Conference ...

  6. 通过自定义组件学习Vue系列(二)【时间轴】(附源码)

    需求: 用于升级日志的显示 效果图: 实现原理: 主要区域分为两块,时间区和内容区,时间区是画一个圆点和显示一个时间,内容区左边一个竖线和文字显示 然后做一下循环,将每个日期的数据显示出来 布局采用f ...

  7. 深度学习学习笔记-论文研读4-基于深度强化学习的多用户边缘计算任务卸载调度与资源分配算法

    本人学识浅薄,如有理解不到位的地方还请大佬们指出,相互学习,共同进步 概念引入 强化学习 DQN算法 边缘计算 边缘计算,是指在靠近物或数据源头的一侧,采用网络.计算.存储.应用核心能力为一体的开放平 ...

  8. ICLR2018 | 深度学习顶会见闻,干货资源都在这里(附源码、论文链接)

    虽然仅仅举办过六届,ICLR已经是深度学习领域的顶级会议,得到了业界的广泛认可.第六届ICLR于2018.4.30~2018.5.03在温哥华会展中心召开,笔者署名的一篇文章有幸被workshop接收 ...

  9. [附源码]Python计算机毕业设计SSM基于的英语学习网站的设计与实现(程序+LW)

    项目运行 环境配置: Jdk1.8 + Tomcat7.0 + Mysql + HBuilderX(Webstorm也行)+ Eclispe(IntelliJ IDEA,Eclispe,MyEclis ...

最新文章

  1. 【 MATLAB 】xlim 、 ylim 、zlim简介
  2. 对javascript闭包的理解
  3. sign的oracle,oracle sign
  4. POJ 2785 4 Values whose Sum is 0
  5. 50个Android应用!Win11支持运行了
  6. iOS 开发线程 gcd
  7. 通信原理眼图画法_光纤通信链路入侵与检测技术研究综述
  8. Spring Boot @ SpringBootApplication,SpringApplication类
  9. 10分钟就能学会,Linux操作系统21个shell常用命令
  10. 运动坐标系的旋转角速度与旋转角(转换角)的关系
  11. 工程师思维 vs 销售思维
  12. bldc不同载波频率_BLDC的双闭环老调不好,求帮助
  13. 辣侃情恋男女的犀利段子
  14. 一刀工具箱- 语音合成工具
  15. Rust学习教程30 - Panic原理剖析
  16. 车规电阻AEC-Q200测试项目及元器件检测设备
  17. OSChina 周五乱弹 —— duang ~ duang ~ duang~
  18. 如何在Chrome浏览器下清除DNS缓存
  19. CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲
  20. ios友盟错误_iOS - 友盟错误分析

热门文章

  1. Acwing第 64 场周赛【未完结】
  2. el-input 使用 回车键会刷新页面的问题
  3. Android Paint类
  4. 安卓手机管理软件_【软件合集】那些安卓系统应用的替代品
  5. python判断能否组成三角形_【python+任意输入3个数+判断能否组成三角形】 - #1
  6. 炁体源流 鸿蒙,《一人之下》八奇技 炁体源流
  7. Autocad批量打印快捷键如何批量打印
  8. Mysql出现问题:ERROR 1149 ( 42000 (ER_SYNTAX_ERROR)): You have an error in your SQL syntax; check th解决方案
  9. 【C++】1081:分苹果(信息学奥赛)
  10. 图像金字塔、高斯金字塔、拉普拉斯金字塔是怎么回事?附利用拉普拉斯金字塔和高斯金字塔重构原图的Python-OpenCV代码