一、 简介
OpenAI Gym 是一个用于开发和比较强化学习算法的工具包。 它提供了一系列标准化的环境,这些环境可以模拟各种现实世界的问题或者游戏场景,使得研究人员和开发者能够方便地在统一的平台上测试和优化他们的强化学习算法。
二、 Gym安装
2.1 最小化安装gym
python -m pip install --upgrade pip
pip install gym
2.2 安装pygame
安装pygame是为了渲染画面
pip install pygame
2.3 检查版本和可用环境
代码:
import gym
from gym import envs
print("gym version: {0}".format(gym.__version__))
env_list = envs.registry.keys()
env_ids = [env_item for env_item in env_list]
print('There are {0} envs in gym'.format(len(env_ids)))
print(env_ids)
outputs:
gym version: 0.26.2
There are 44 envs in gym
['CartPole-v0', 'CartPole-v1', 'MountainCar-v0', 'MountainCarContinuous-v0', 'Pendulum-v1', 'Acrobot-v1', 'LunarLander-v2', 'LunarLanderContinuous-v2', 'BipedalWalker-v3', 'BipedalWalkerHardcore-v3', 'CarRacing-v2', 'Blackjack-v1', 'FrozenLake-v1', 'FrozenLake8x8-v1', 'CliffWalking-v0', 'Taxi-v3', 'Reacher-v2', 'Reacher-v4', 'Pusher-v2', 'Pusher-v4', 'InvertedPendulum-v2', 'InvertedPendulum-v4', 'InvertedDoublePendulum-v2', 'InvertedDoublePendulum-v4', 'HalfCheetah-v2', 'HalfCheetah-v3', 'HalfCheetah-v4', 'Hopper-v2', 'Hopper-v3', 'Hopper-v4', 'Swimmer-v2', 'Swimmer-v3', 'Swimmer-v4', 'Walker2d-v2', 'Walker2d-v3', 'Walker2d-v4', 'Ant-v2', 'Ant-v3', 'Ant-v4', 'Humanoid-v2', 'Humanoid-v3', 'Humanoid-v4', 'HumanoidStandup-v2', 'HumanoidStandup-v4']
三、 示例
代码:
import gym
# 生成环境
env = gym.make("CartPole-v1", render_mode="human")
# 环境初始化
state = env.reset()
# 循环交互
while True:
# 从动作空间随机获取一个动作
action = env.action_space.sample()
# agent与环境进行一步交互
state, reward, terminated, truncated, info = env.step(action)
print('state = {0}; reward = {1}'.format(state, reward))
# 判断当前episode 是否完成
if terminated or truncated:
observation, info = env.reset()
print("done")
break
# 环境结束
env.close()
控制台输出:
其中state = [小车位置,小车速度,棍的倾斜角度,棍的角速度];reweard为1或0。
窗口显示:
四、参数解析
env.step() 返回的 4 个参数:
- 观测 State(Object):当前 step 执行后,环境的观测(类型为对象)。例如,从相机获取的像素点,机器人各个关节的角度或棋盘游戏当前的状态等;
- 奖励 Reward (Float): 执行上一步动作(action)后,智体(agent)获得的奖励(浮点类型),不同的环境中奖励值变化范围也不相同,但是强化学习的目标就是使得总奖励值最大;
- Terminated:环境自然结束(包括目标成功,失败等),例如当机器人摔倒或者掉出台面,就应当终止当前回合进行重置(reset)
- Truncated:人为截断(主要为达到一定步数结束)(Boolen): 表示是否需要将环境重置 env.reset。大多数情况下,当Truncated为 True时,就表明当前回合(episode)或者试验(tial)结束。
- 信息 Info (Dict): 针对调试过程的诊断信息。。