gym是强化学习的库,接口简单,并且提供了更新、状态标识、显示等一系列方便的接口,并可以自主设计各类环境。目前最新版本介绍如下
https://gymnasium.farama.org/
2、简单的使用2.1简单的引入包模块import gymnasium as gym
2.2 生成环境make
(1)生成环境通过make方法,简单的例子如下
env = gym.make('FrozenLake-v1',
render_mode='rgb_array',
is_slippery=False)
(2)注意gym有很多例子***
2.3环境初始化reset通过reset可以初始化环境
env.reset()
2.4控制对象迭代运行step
(1)控制对象迭代运行的操作为step
state, reward, terminated, truncated, info = self.env.step(action)
注意:step函数是action→observation之间的一个映射函数,通过做出动作action,将获得一个怎样的observation以及相应的reward,并判断是否到达终点状态(terminated),并将相应的信息返回
(2)判断是否结束
over = terminated or truncated
2.5step返回的几个函数
(1)state,状态
(2)reward,奖励函数
(3)terminated,是否游戏(失败)结束,结束则为true
(4)truncated,崩溃结束
(5)info,信息
2.6关闭环境close关闭环境的函数如下
env.close()
3、FrozenLake-v1游戏的测试3.1 aciton的方向
该游戏中:2向右,1向下,0向左,3向上。如下所示
{0: "←", 1: "↓", 2: "→", 3: "↑"}
3.2设定机器人路径并查看输出
(1)编一个程序让机器人手动周一下,查看一下输出
(2)路径随意写,简单例子如下
3.3测试代码import gymnasium as gym
from matplotlib import pyplot as plt
def show(env,sleepFlag=True,sleepSpan=2):
plt.figure(figsize=(3, 3))
plt.imshow(env.render())
if sleepFlag:
plt.pause(sleepSpan) # 显示2s
plt.close()
else:
plt.show()
if __name__ == '__main__':
#(1)生成环境
env = gym.make('FrozenLake-v1', render_mode='rgb_array',is_slippery=False)
env.reset()
show(env,sleepFlag=False)
# action 2向右,1向下,0向左,3向上
givenPath = [2,2,2,1]
icount =0
for path in givenPath:
state, reward, terminated, truncated, info = env.step(path)
show(env)
icount = 1
print(f"state: {state},reward: {reward},terminated: {terminated},truncated: {truncated},info: {info}")
3.4测试结果
(1)4步以后得测试结果如下
(2)注意状态变量值的输出:
state: 1,reward: 0.0,terminated: False,truncated: False,info: {'prob': 1.0}
state: 2,reward: 0.0,terminated: False,truncated: False,info: {'prob': 1.0}
state: 3,reward: 0.0,terminated: False,truncated: False,info: {'prob': 1.0}
state: 7,reward: 0.0,terminated: True,truncated: False,info: {'prob': 1.0}
明显,state是坐标,terminate代表是否结束。