倒立摆#
倒立摆(CartPole)是强化学习中的经典控制任务。其目标是训练一个通过控制小车左右移动来保持杆子平衡的智能体。
任务描述#
CartPole 是一个经典的平衡控制任务。环境由一个小车和一根通过铰链连接在小车上的杆组成。智能体通过向左或向右施加力来控制小车移动,使杆子保持直立不倒。该任务要求精确的时序控制和平衡能力。
动作空间(Action Space)#
项目 |
详细信息 |
|---|---|
类型 |
|
维度 |
1 |
动作对应如下:
序号 |
动作含义(施加在小车上的力) |
最小值 |
最大值 |
对应 XML 中名称 |
|---|---|---|---|---|
0 |
水平方向的力 |
-3.0 |
3.0 |
|
观察空间#
项目 |
详细信息 |
|---|---|
类型 |
|
维度 |
4 |
CartPole 环境的观测空间由以下部分组成(按顺序):
部分 |
内容说明 |
维度 |
备注 |
|---|---|---|---|
qpos |
小车位置和杆子角度 |
2 |
位置和角度信息 |
qvel |
小车速度和杆子角速度 |
2 |
速度为位置导数 |
序号 |
观察量 |
最小值 |
最大值 |
XML 名称 |
关节 |
类型 (单位) |
|---|---|---|---|---|---|---|
0 |
小车位置 |
-Inf |
Inf |
slider |
slide |
位置 (m) |
1 |
杆子角度 |
-Inf |
Inf |
hinge |
hinge |
角度 (rad) |
2 |
小车速度 |
-Inf |
Inf |
slider |
slide |
速度 (m/s) |
3 |
杆子角速度 |
-Inf |
Inf |
hinge |
hinge |
角速度 (rad/s) |
奖励函数设计#
cartpole 的奖励函数设计如下:
# 每步保持杆子不倒下获得 +1 奖励
reward = 1.0 # 每步固定奖励
初始状态#
小车初始位置:0.0 米(中心位置)
杆子初始角度:0.0 弧度(直立)
初始速度:均为 0
在初始状态上添加小幅随机噪声(
reset_noise_scale = 0.01)以增加训练多样性
Episode 终止条件#
杆子角度超过 ±0.2 弧度(约 ±11.5 度)
小车位置超出 [-0.8, 0.8] 米范围
杆子角度出现 NaN 值
Episode 最大时长:10 秒
使用指南#
1. 环境预览#
uv run scripts/view.py --env cartpole
2. 开始训练#
uv run scripts/train.py --env cartpole
3. 查看训练进度#
uv run tensorboard --logdir runs/cartpole
4. 测试训练结果#
uv run scripts/play.py --env cartpole
预期训练结果#
杆子角度大部分时间保持在 ±5 度以内
Episode 时长接近或超过 10 秒
小车在合理范围内移动以保持平衡