马尔可夫决策过程建模
强化学习把控制问题写成 MDP:在状态里选动作,环境按转移给出下一状态与奖励。
五元组 M = (S, A, P, R, γ)
| 符号 | 本任务定义 |
|---|---|
| S 状态 | s = [x, ẋ, θ, θ̇] ∈ ℝ⁴。θ=0 表示竖直向上。 |
| A 动作 | a ∈ [-1, 1],力 F = 10 · a(牛顿)施加在小车上。 |
| P 转移 | 确定性物理:分析动力学或 Genesis 刚体一步积分。 |
| R 奖励 | R = cos(θ) + 0.1 − 0.01 a²(权重可配) |
| γ 折扣 | 0.99,重视长期平衡而非单步姿态。 |
马尔可夫性质
「下一状态只依赖当前状态与动作,不依赖更早历史」。对倒立摆,四维状态已是 充分统计量(位置与速度),因此满足马尔可夫性。策略 π(a|s) 只需看当前 s。
终止条件(吸收 / 失败)
terminated ⇔ |x| > 2.4 或 |θ| > 12° ≈ 0.2095 rad
truncated ⇔ 步数 ≥ episode_length(如 500)
truncated ⇔ 步数 ≥ episode_length(如 500)
终止后环境自动 reset;回报在 episode 边界截断,GAE 用 done mask 处理。
奖励设计直觉
- cos(θ):竖直向上最大(1),偏斜变小,直接鼓励直立。
- alive bonus:每活一步给小正奖励,鼓励尽量坚持满局。
- −a²:抑制猛推,动作更平滑,利于泛化。
练习:若去掉 alive,策略可能更短视;若加大 action_penalty,训练会变慢但更稳。
可在
configs/train_config.yaml 改权重做对照实验。
代码锚点
# src/mdp/definition.py → InvertedPendulumMDP
# src/mdp/rewards.py → compute_reward()
# src/envs/*.py → reset / step 实现 P 与终止