Files
DynamisLab/src/drl_pinball/train/README.md
T
Frank14fandCursor 4feac49f1c feat: eval benchmark + cloud-trained models replace train/
- eval/: 统一推理评估框架 (infer_train.py, infer_reproduce.py, viz_flow.py,
  viz_signals.py, generate_report.py, run_all.sh, scene_manifest.py)
- train/: 替换为云端正式训练产出,覆盖 11 个场景
  - Karman: Re100 (5 seeds), Re60/200/400 transfer
  - VarDist: d075/d15/d2 scratch
  - Illusion: 0.75L/1.0L/1.5L/2.0L scratch
- train_karman.py: 新增 --resume-from 断点续训支持
- calibrations: 17 组标定数据 (kar/ill 命名规范)
- scripts/: 7 个自动化训练脚本
- 清理旧 calibrations/shell scripts/visualize

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-12 23:56:02 +08:00

7.0 KiB

DynamisLab — 训练目录

src/drl_pinball/train/
更新: 2026-07-12


命名规则

{domain}_{variant}_{method}_seed{seed}

domain:  kar = Karman  |  ill = Illusion
variant: re{60,100,200,400} = 雷诺数  |  d{075,15,2} = 扰动圆柱直径(L)  |  {1L,15L,075L,2L} = 目标圆柱尺寸
method:  sc = from scratch  |  tr = transfer from re100 baseline
seed:    seed{41..45}

Examples:
  kar_re100_sc_seed45   — Karman Re100 scratch, seed 45
  kar_d075_sc_seed44    — Karman 0.75L dist-cyl scratch
  kar_d15_tr_seed45     — Karman 1.5L dist-cyl transfer
  kar_re200_sc_seed43   — Karman Re200 scratch
  ill_2L_sc_seed43      — Illusion 2L target scratch

目录结构

train/
├── train_karman.py              # Karman PPO 训练 (核心)
├── train_illusion.py            # Illusion PPO 训练
├── calibrate.py                 # Phase 0 校准
│
├── env_karman.py                # Karman 环境
├── env_illusion.py              # Illusion 环境
├── symmetry_wrapper.py          # G-symmetry 数据增强
│
├── scripts/                     # 启动脚本
│   ├── train_baseline.sh        # kar_re100_sc multi-seed
│   ├── train_illusion.sh        # ill_*_sc 4 个尺寸
│   ├── vardist_scratch.sh       # kar_d*_sc (推荐)
│   ├── vardist_transfer.sh      # kar_d*_tr (参考)
│   ├── crossre_scratch.sh       # kar_re*_sc
│   ├── crossre_transfer.sh      # kar_re*_tr (参考)
│   └── resume.sh                # 中断恢复
│
├── calibrations/                # 校准文件
│   ├── kar_re100/               # Re100 基准
│   ├── kar_d*_sc/               # 变直径 scratch (generic SIM_BP)
│   ├── kar_d*_tr/               # 变直径 transfer (实测 SIM_BP)
│   ├── kar_re*_sc/              # 变雷诺数 scratch (generic SIM_BP)
│   ├── kar_re*/                 # 变雷诺数 transfer (实测 SIM_BP)
│   └── ill_*/                   # Illusion
│
├── output/                      # 训练输出 (21 dirs)
│   ├── kar_re100_sc_seed{41..45}/
│   ├── kar_d*_sc_seed{44,45}/
│   ├── kar_d*_tr_seed{44,45}/
│   ├── kar_re*_sc_seed43/
│   ├── kar_re*_tr_seed43/
│   └── ill_*_sc_seed43/
│
├── archive/                     # 旧版本 (保留)
├── README.md                    # 当前文件
├── VARDIST_ANALYSIS.md
├── CROSSRE_ANALYSIS.md
└── SERVER_DEPLOY.md

快速开始

基准训练

cd scripts
bash train_baseline.sh --gpu 0 --episodes 500
# → output/kar_re100_sc_seed{41..45}/

变直径 scratch (推荐)

cd scripts
bash vardist_scratch.sh --gpu 0
bash vardist_scratch.sh --only d075
# → output/kar_d075_sc_seed44/  etc.

变雷诺数 scratch

cd scripts
bash crossre_scratch.sh --gpu 0
bash crossre_scratch.sh --only re200
# → output/kar_re200_sc_seed43/  etc.

Illusion

cd scripts
bash train_illusion.sh --gpu 0
# → output/ill_2L_sc_seed43/  etc.

中断恢复

cd scripts
bash resume.sh --case kar_re60_sc --seed 43 --resume 460 --episodes 500

核心训练脚本

train_karman.py

conda run -n pycuda_3_10 python -u train_karman.py \
    --case-name kar_re100_sc --device-id 0 --seed 42 \
    --config config.json --calibration calibrations/kar_re100/calibration.json \
    --total-episodes 500 [--transfer-model PATH] [--resume-from N]
参数 默认值 说明
n_steps 2048 PPO 每轮收集步数
batch_size 64 minibatch
n_epochs 10 经验重用次数
lr 3e-4 学习率
gamma 0.995 折扣因子
net_arch [64, 64] MLP 两层 sin 激活

最终结果

Re100 基准 — kar_re100_sc

Seed r_sim r_cd r_cl
45 0.883 0.977 0.982
Avg 0.866 0.971 0.965

Vardist 变直径

Case 方式 r_sim r_cd r_cl
kar_d075_sc scratch 0.918 0.954 0.879
kar_d075_tr transfer 0.450 0.585 0.236
kar_d15_sc scratch 0.904 0.991 0.992
kar_d15_tr transfer 0.791 0.918 0.470
kar_d2_sc scratch 0.793 0.967 0.961
kar_d2_tr transfer 0.673 0.537 0.192

Scratch 全面领先 transfer。

Cross-Re 变雷诺数

Case 方式 r_sim r_cd r_cl
kar_re60_tr transfer 0.446 0.882 0.936
kar_re60_sc scratch 0.261 0.987 0.981
kar_re200_sc scratch 0.664 0.667 0.281
kar_re200_tr transfer 0.374 0.749 0.427
kar_re400_sc scratch 0.509 0.714 0.420
kar_re400_tr transfer 0.293 0.883 0.571

Scratch sim 最优,transfer CD 最优。两者均保留。

Illusion

Case r_sim r_cd r_cl
ill_1L_sc 0.725 0.774 0.449
ill_15L_sc 0.810 0.825 0.384
ill_075L_sc 0.794 0.840 0.486
ill_2L_sc 0.896 0.863 0.570

Calibration 参考

Calibration 物理 SI SIM_BP K_CD/K_CL 对应 output
kar_re100 Re=100, 1.0L 800 实测 50/100 kar_re100_sc
kar_d075_sc Re=100, 0.75L 800 generic 50/100 kar_d075_sc
kar_d075_tr Re=100, 0.75L 800 实测 50/100 kar_d075_tr
kar_d15_sc Re=100, 1.5L 800 generic 50/100 kar_d15_sc
kar_d15_tr Re=100, 1.5L 800 实测 50/100 kar_d15_tr
kar_d2_sc Re=100, 2.0L 800 generic 50/100 kar_d2_sc
kar_d2_tr Re=100, 2.0L 800 实测 50/100 kar_d2_tr
kar_re60 Re=60 800 实测 12/25 kar_re60_tr
kar_re60_sc Re=60 800 generic 50/100 kar_re60_sc
kar_re200 Re=200 500 实测 12/25 kar_re200_tr
kar_re200_sc Re=200 500 generic 50/100 kar_re200_sc
kar_re400 Re=400 400 实测 12/25 kar_re400_tr
kar_re400_sc Re=400 400 generic 50/100 kar_re400_sc
ill_* Illusion 实测 12/25 ill_*_sc

Key Findings

  1. SIM_BP 映射是跨场景训练的最关键变量。 实测 gap ≠ 0.35 会导致 reward 梯度异常。

    • Generic SIM_BP [0, 0.30, 0.65, 0.79, 0.89, 1.0] (gap=0.35) → 稳定学习
  2. 变直径: scratch > transfer. Generic SIM_BP + K_CD/CL=50/100 + lr=3e-4 + 500ep 是最优配方。

  3. 变雷诺数: scratch 和 transfer 各有侧重。 两者均保留。

  4. 变雷诺数存在 CD/CL ↔ r_sim 根本性 trade-off。 训练越久 r_cd 越高但 r_sim 越低(re60_sc: Ep60 r_sim=0.48 → Ep390 r_sim=0.26, r_cd=0.99)。CD/CL reward 分量主导了优化方向。

  5. 降低 W_drag/W_lift (0.1) 有害。 CD/CL reward 是稳定器而非瓶颈。

  6. Ep1 r_sim ≥ 0.5 可预测 transfer 成功。