![深度强化学习理论与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/892/52842892/b_52842892.jpg)
1.3.4 在Gym中添加自编环境
可以将自编环境添加到Gym中,以实现在Gym中调用自编环境。本节中,首先通过一个案例讲解如何编写一个新环境模型,然后介绍如何将这一自编环境注册到Gym库中。
【例1-3】 找金币游戏
一个机器人在网格世界中找金币的游戏如图1-5所示。该网格世界一共有8种状态,其中状态6和状态8为死亡区域,状态7为金币区域。机器人的初始状态为状态空间中任意一种状态,从初始状态出发,每次探索即为行进到与当前状态相邻的网格,方向不定,直到进入死亡区域或找到金币,本局探测结束。机器人找到金币的回报为1,进入死亡区域的回报为-1,在区域1~5之间转换时,回报为0。机器人的学习目标是学到一个策略使机器人不论初始时处在哪一种状态都能顺利找到金币。
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P24_12695.jpg?sign=1739103217-earqEOfN0bq8ULdnzLma8Uxw3THpSWB1-0-a99553f9d07cc3e0559c2ba4b422f100)
图1-5 找金币游戏示意图
机器人找金币游戏的环境模型代码如下:
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P24_12703.jpg?sign=1739103217-tlA76JL5Sz5G9MLbkigSfKmiUQ7oL4aL-0-c658929d32b86c34313d8a9552eda0c6)
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P26_12730.jpg?sign=1739103217-JMGSzvMohLb6bBNFTus0iDBjgoAkNu7A-0-ba77d98bb7de466ae26b0aa275ed99a4)
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P27_12747.jpg?sign=1739103217-uzSO0onRR3X8tfPgSphC90aBVudQTwdR-0-8b78fcff56888ba5820c85d0f9b9e061)
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P28_12758.jpg?sign=1739103217-wgn6oVjx3bft9IOvVRDJkWj0jKvbyUGl-0-2b0e707a3b78ae30a72f098f41e47886)
将代码1-2保存为find_gold.py文件,接下来按步骤介绍如何将自编环境注册到Gym库中。
步骤1:将自编的环境文件find_gold.py复制到Gym安装目录D:\Anaconda3\envs\RL\Lib\site-packages\gym\envs\classic_control文件夹中(复制在这个文件夹中是因为要使用rendering模块。当然,也有其他办法,该方法不唯一)。
步骤2:打开该文件夹(步骤1中的文件夹)下的__init__.py文件,在文件末尾加入的语句如下。
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P28_12770.jpg?sign=1739103217-TvSnEN9GZwuRwsexNoeWHW7HwjU2fr6t-0-79b811a607b79880441eb44b8ab09a6f)
步骤3:进入Gym安装目录下的文件夹D:\Anaconda3\Lib\site-packages\gym\envs,打开该文件夹下的__init__.py文件,添加的代码如下。
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P29_12780.jpg?sign=1739103217-vzMnPoyc3wGD74VohhyS7ZrNtfLV6lSC-0-f16db6f423bb6de0d97dd9628ae70ecb)
第1个参数id就是调用函数gym.make('id')时的id,这个id是可以随意选取的。第2个参数就是函数入口了。max_episode_steps和reward_threshold两个参数原则上来讲可以不写。
安装完成后可以测试是否注册成功,代码如下:
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P29_12788.jpg?sign=1739103217-rpnsAFiM5swmx22FLwM0XeCB7MGKl2YW-0-811817522d32ef6af086bfab8f8c99c0)