摆锤

../../../_images/pendulum.gif

此环境是经典控制环境的一部分,其中包含有关环境的一般信息。

动作空间

Box(-2.0, 2.0, (1,), float32)

观测空间

Box([-1. -1. -8.], [1. 1. 8.], (3,), float32)

导入

gymnasium.make("Pendulum-v1")

描述

倒立摆摆动问题基于控制理论中的经典问题。该系统由一个一端固定在固定点,另一端自由的摆锤组成。摆锤从随机位置开始,目标是施加扭矩到自由端,使其摆动到直立位置,其重心正好在固定点上方。

下图指定了用于实现摆锤动力学方程的坐标系。

Pendulum Coordinate System

  • x-y: 摆锤末端的笛卡尔坐标,单位为米。

  • theta: 弧度角。

  • tau: 扭矩,单位为 N m。定义为逆时针方向为正。

动作空间

动作是一个形状为 (1,)ndarray,表示施加到摆锤自由端的扭矩。

编号

动作

最小值

最大值

0

扭矩

-2.0

2.0

观测空间

观测是一个形状为 (3,)ndarray,表示摆锤自由端的 x-y 坐标及其角速度。

编号

观测

最小值

最大值

0

x = cos(theta)

-1.0

1.0

1

y = sin(theta)

-1.0

1.0

2

角速度

-8.0

8.0

奖励

奖励函数定义为

r = -(theta2 + 0.1 * theta_dt2 + 0.001 * torque2)

其中 theta 是摆锤的角度,在 [-pi, pi] 之间归一化(其中 0 表示直立位置)。根据上述公式,可以获得的最小奖励为 -(pi2 + 0.1 * 82 + 0.001 * 22) = -16.2736044,而最大奖励为零(摆锤处于直立状态,速度为零,没有施加扭矩)。

起始状态

起始状态是 [-pi, pi] 中的随机角度和 [-1,1] 中的随机角速度。

剧集截断

剧集在 200 个时间步长后截断。

参数

  • g: .

摆锤有两个参数用于 gymnasium.make,分别为 render_modeg,表示用于计算摆锤动力学的重力加速度,单位为 (m s-2)。默认值为 g = 10.0。在重置时,options 参数允许用户更改用于确定新的随机状态的边界。

>>> import gymnasium as gym
>>> env = gym.make("Pendulum-v1", render_mode="rgb_array", g=9.81)  # default g=10.0
>>> env
<TimeLimit<OrderEnforcing<PassiveEnvChecker<PendulumEnv<Pendulum-v1>>>>>
>>> env.reset(seed=123, options={"low": -0.7, "high": 0.5})  # default low=-0.6, high=-0.5
(array([ 0.4123625 ,  0.91101986, -0.89235795], dtype=float32), {})

版本历史

  • v1: 简化数学公式,行为没有差异。

  • v0: 初始版本发布