欢迎去各大电商平台选购纸质版蘑菇书《Easy RL:强化学习教程》
文章是根据 蘑菇书EasyRL 以及新版本的gym编写的可运行代码和示例,
0.安装环境,
文章所使用的python版本为py310
库版本如下
cloudpickle==3.1.1
Farama-Notifications==0.0.4
gym-notices==0.0.8
gymnasium==1.1.1
numpy==2.2.4
pygame==2.6.1
typing_extensions==4.13.2
1、查看gym里面都有什么内容:
from gymnasium import envs
env_spaces = envs.registry
envs_ids = [env_spaces[env_spec].id for env_spec in env_spaces]
print("\n".join(envs_ids))
运行结果:
对应的效果:
GYM document
2、小车让旗杆立起来示例
CartPole 通过控制一辆小车,让杆立起来:
CartPole-v0 环境有两个动作:将小车向左移动和将小车向右移动。我们还可以得到观测:小车当前的位置,小车当前往左、往右移的速度,杆的角度以及杆的最高点(顶端)的速度。观测越详细,我们就可以更好地描述当前所有的状态。这里有奖励的定义,如果能多走一步,我们就会得到一个奖励(奖励值为 1),所以我们需要存活尽可能多的时间来得到更多的奖励。当杆的角度大于某一个角度(没能保持平衡),或者小车的中心到达图形界面窗口的边缘,或者累积步数大于 200,游戏就结束了,我们就输了。所以智能体的目的是控制杆,让它尽可能地保持平衡以及尽可能保持在环境的中央
import gymnasium as gym
env = gym.make("CartPole-v1",render_mode="human")
observation, info = env.reset()
episode_over = False
for step in range(1000):
action = env.action_space.sample() # 从动作空间中随机选取一个动作
observation, reward, terminated, truncated, info = env.step(action)
episode_over = terminated or truncated
if episode_over:
observation, info = env.reset() # 游戏失败了,重设环境
env.close()
运行后得到:
打印observation
,输出的结果是:
3,CartPole 小车旗杆游戏失败:
如果发生以下任何一种情况,该游戏就会结束:
杆子倒了:极角大于±12°
终止:车位置大于±2.4(车中心到达显示屏边缘)
截断:Episode 长度大于 500(CartPole-v0 为 200)
4.输入输出的含义
在上面的CartPole 小车旗杆游戏的例子里,
输出env.action_space.sample()的返回值,能看到输出为 1 或者 0
。
env.action_space.sample()的含义是,在该游戏的所有动作空间里随机选择一个作为输出。
在这个例子中,动作只有两个:0 和 1,一左一右。
env.step()方法有4个返回值:observation、reward、done、info 。
Gym 库中的每个环境都定义了观测空间和动作空间。观测空间和动作空间可以是离散的(取值为有限个离散的值),也可以是连续的(取值为连续的值)。