![深度强化学习理论与实践](https://wfqqreader-1252317822.image.myqcloud.com/cover/892/52842892/b_52842892.jpg)
1.3.3 Gym的环境描述和案例
Gym中环境的调用主要通过接口函数进行。接口函数的主要功能包括生成环境、初始化环境、环境交互、渲染画面、指定随机数种子、关闭环境。以下对这些环境接口函数逐一介绍。
1.生成环境
生成环境的命令如下:
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P22_12590.jpg?sign=1739656678-TTOgKtTyL5hnn8UfmO917P7Ar0fR1VNu-0-b4ca7473579ef882675c033d95704255)
其作用是生成一个模拟环境。输入参数id是环境ID,为str类型;返回值env是一个具体的环境实例,为Env类型。
环境ID是OpenAI Gym提供的环境的ID,可以在OpenAI Gym网站的Environments中查询。例如,例1-2中提到的倒立摆系统的环境ID是CartPole-v1,这里v1是版号。
2.初始化环境
初始化环境的命令如下:
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P22_12600.jpg?sign=1739656678-lfDBvxLn9VVRUpimZAbHL7CBBq2pPlEC-0-e38dcbaee505d314303e0f36af521b1e)
其作用是在一局交互开始时将环境状态初始化。返回值state是环境的初始状态,其类型由状态空间的类型决定。
3.环境交互
环境交互的命令如下:
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P22_12610.jpg?sign=1739656678-d68xEHeS5cstqKsnDgFK3xCn6dxJ9Sv8-0-6080cd780e350c60924a9c054df24d2a)
其作用是在环境接受智能体向其施加的一个动作以后,环境向前演化一个时间步,改变环境状态,并给智能体一个奖励信息。输入值action是智能体向环境施加的动作,为object类型;输出值包括state、reward、done和info,分别表示转化后的环境状态、环境给智能体的奖励信息、一局是否结束的标识和交互过程中一些必要的日志信息。
4.渲染画面
渲染画面的命令如下:
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P23_12622.jpg?sign=1739656678-UHAd10guZx4aXvPW6qhVSvpBKGwVlkFw-0-70dbccaabef89ea3a1f647d4af60c5ca)
其作用是可视化环境交互过程。Gym支持的“渲染模式”根据环境的不同而不同,也有不支持渲染的环境。常用的渲染模式见表1-2。
表1-2 常用渲染模式
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-T23_23796.jpg?sign=1739656678-30Jann2YXpKaUhjNRoHZ3PxaQJOuYqG1-0-b7c311bf78ccb0f41025c06981086a40)
5.指定随机数种子
指定随机数种子的命令如下:
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P23_12659.jpg?sign=1739656678-knWdLKdQQLTaubmCzDTQZYyzfGVvtN5I-0-48c992b1af2c87943859406d974bbdab)
其作用是为计算机产生伪随机数指定一个随机数种子,输入值seed即为随机数种子,为int类型,输出值为以seed为种子的随机数列表。
6.关闭环境
结束环境的命令如下:
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P23_12669.jpg?sign=1739656678-NYDgNzf0H8M0hPS0E7K6OilIPKfmZLxF-0-42077f7b4e3b55bad1cd29e09f22cc64)
其作用是关闭当前环境,主要在需要渲染环境的情况下使用。
以下以CartPole-v1环境为例,将所有接口函数融入一个程序中,对该环境进行一次完整的运行,代码如下:
![](https://epubservercos.yuewen.com/5CB485/31398603504091106/epubprivate/OEBPS/Images/Figure-P23_12677.jpg?sign=1739656678-9HJXt46gdJyE0hYZTLoWAgkKkvk7UW8h-0-11c68b3f3cdbb6839eaf30eca9cb8656)
Gym的所有环境脚本都是开源的,读者如果想要更深入地了解一个环境的运行机理、各状态维度的意义、各动作维度的意义等信息,则可以直接阅读该环境的脚本代码。可以通过两种方式找到环境的源代码,列举如下:
(1)安装Gym以后,进入D:\Anaconda3\Lib\site-packages\gym\envs文件夹,Gym所有环境的源代码都保存在这个文件夹中。
(2)Gym源代码托管在著名的程序托管网站GitHub上,网址为https://github.com/openai/gym。可以在线查看Gym的源代码,也可以直接通过Download ZIP按钮将源代码下载到本地计算机。