1 环境描述
Pendulum-v1
是一个经典的强化学习环境,属于 OpenAI Gym 库的一部分。这个环境模拟了一个倒立摆的问题,目标是通过施加适当的扭矩使摆杆保持在竖直向上的位置。
-
目标:控制摆杆使其保持在竖直向上的位置(即角度为 0 弧度)。
-
状态空间 (
observation_space
):一个三维向量,包含以下信息:theta
:摆杆的角度(弧度),范围为[-π, π]
。theta_dot
:摆杆的角速度(弧度/秒),范围为[-8, 8]
。cos(theta)
和sin(theta)
:这两个值通常用于表示角度,避免角度值的不连续性。
-
动作空间 (
action_space
):一个一维向量,表示施加在摆杆上的扭矩:- 范围为
[-2, 2]
(牛顿·米)。
- 范围为
-
奖励函数:每一步的奖励计算公式为:
r = − ( θ 2 + 0.1 ⋅ θ dot 2 + 0.001 ⋅ torque 2 ) r = -( \theta^2 + 0.1 \cdot \theta_{\text{dot}}^2 + 0.001 \cdot \text{torque}^2 ) r=−(θ2+0.1⋅θdot2+0.001⋅torque2)
其中:- θ \theta θ 是摆杆的角度(弧度)。
- θ dot \theta_{\text{dot}} θdot 是摆杆的角速度(弧度/秒)。
- torque \text{torque} torque 是施加的扭矩(牛顿·米)。
最小的奖励是
-16.2736044
,当摆杆处于竖直向下位置( θ = π \theta = π θ=π),角速度最大( θ dot = 8 \theta_{\text{dot}} = 8 θdot=8),并且施加最大扭矩( torque = 2 \text{torque} = 2 torque=2)时。
最大的奖励是0
,当摆杆处于竖直向上位置( θ = 0 \theta = 0 θ=0),角速度为零( θ dot = 0 \theta_{\text{dot}} = 0 θdot=0),并且没有施加扭矩( torque = 0 \text{torque} = 0 torque=0)时。 -
初始状态:
- 角度 θ \theta θ 随机初始化在 [ − π , π ] [-π, π] [−π,π] 范围内。
- 角速度 θ dot \theta_{\text{dot}} θdot 随机初始化在 [ − 1 , 1 ] [-1, 1] [−1,1] 范围内。
-
终止条件:默认情况下,
Pendulum-v1
环境没有明确的终止条件,通常会在达到最大步数(例如 200 步)后终止。
2 示例代码
以下是一个简单的示例代码,演示如何在 Pendulum-v1
环境中执行随机动作并观察环境的变化:
import gym
import numpy as np
import time
# 创建环境
env = gym.make('Pendulum-v1')
env.reset()
for _ in range(200): # 运行200步
# 随机选择一个动作
action = env.action_space.sample()
# 执行动作
observation, reward, done, info = env.step(action)
print(f"Observation: {observation}, Reward: {reward}, Done: {done}, Info: {info}")
if done:
print("Episode finished after {} timesteps".format(_ + 1))
break
# 关闭环境
env.close()
- 总结
Pendulum-v1
是一个经典的控制问题,适用于测试和评估各种强化学习算法。通过控制施加在摆杆上的扭矩,使摆杆保持在竖直向上的位置,可以训练出高效的控制策略。