exp: #21定案——关闸后两段每格都不更差(碰撞步58.3→45.1),主因是候选塌缩35倍;安全层值25.4pp到达但净收益为正(纯策略无碰撞到达仅0.359)

This commit is contained in:
cbb
2026-10-20 22:53:07 +08:00
parent 04fe4a007b
commit 00602f3f0b
3 changed files with 182 additions and 0 deletions
@@ -0,0 +1,82 @@
{
"config": {
"ckpt": "ml/runs/base_dag2_dag1/best.pt",
"samples": "ml/data/samples",
"tasks": null,
"split": "val",
"n": 256,
"K": 8,
"commit": 2,
"fb": 2.2,
"ki": 0.0,
"fb_scale": 0.0,
"fb_near": 0.2,
"fb_fallback": 0.0,
"kdecay": 0.9,
"kimax": 0.5,
"fb_every": 1,
"safety_try": 0,
"sel_w": 0.1,
"dls_safety": 1,
"fb_clear": 0.0,
"fb_cmin": 0.3,
"sub_refresh": 0,
"fb_block_gain": 0.5,
"dump": null,
"out": "docs/experiment_round40_safetyoff_steps1.json",
"trace": null,
"select": "endpoint",
"replan": "empty",
"safety": 0,
"partial": 1,
"inc_cap": 0,
"gap_margin": 0.0,
"cert_batch": 0,
"steps": 1,
"z_scale": 1.0,
"len_w": 0.0,
"backoff": 0,
"max_sec": null,
"seed": 0,
"dls": "analytic",
"device": "cuda"
},
"batch_size": 256,
"batch_seed_rule": "same seed per batch",
"checkpoint_sha256": "f7f686fd8ee92fb6948fbcc4ee954636065ad87bb54f661c4f8f575bc16c2ce1",
"tasks_sha256": "249bd93457825cda98c59e64d9a096d3473c69aeb3553de1dea6d9e56be71772",
"kin_fp": "2ebcbf17",
"act_scale": 1.0,
"metrics": {
"n": 256,
"n_ref": 256,
"success": 0.77734375,
"collision_free_success": 0.359375,
"time_ok_1p3": 0.53515625,
"collision_rate": 0.5859375,
"collision_steps_mean": 58.33984375,
"travel_ratio_median": 2.375220775604248,
"time_mean_s": 2.3642210960388184,
"brakes_mean": 0.0,
"start_fail": 0.0,
"goal_ratio_2s": 0.0402195081114769,
"err_fail_med": 50.388858795166016,
"err_success_med": 0.1961677223443985,
"dls_share": 0.84765625,
"time_budget": "teacher×2(≥3 s)",
"speed_ratio_p50": 1.6600004434585571,
"speed_ratio_p95": 1.660003662109375,
"speed_ratio_max": 1.660003662109375,
"over_vmax_rate": 1.0,
"accel_ratio_p95": 1.5426017045974731,
"accel_ratio_max": 1.6600004434585571,
"reverse_p50": 0.2846153974533081,
"reverse_mean": 0.2833859324455261,
"reverse_moving_p50": 0.2846153974533081,
"moving_share_p50": 1.0,
"brake_rate_mean": 0.0,
"brake_rate_p50": 0.0,
"n_plans_mean": 195.0
},
"simulation_wall_s": 52.50466950000555
}
@@ -0,0 +1,82 @@
{
"config": {
"ckpt": "ml/runs/base_dag2_dag1/best.pt",
"samples": "ml/data/samples",
"tasks": null,
"split": "val",
"n": 256,
"K": 8,
"commit": 2,
"fb": 2.2,
"ki": 0.0,
"fb_scale": 0.0,
"fb_near": 0.2,
"fb_fallback": 0.0,
"kdecay": 0.9,
"kimax": 0.5,
"fb_every": 1,
"safety_try": 0,
"sel_w": 0.1,
"dls_safety": 1,
"fb_clear": 0.0,
"fb_cmin": 0.3,
"sub_refresh": 0,
"fb_block_gain": 0.5,
"dump": null,
"out": "docs/experiment_round40_safetyoff_steps2.json",
"trace": null,
"select": "endpoint",
"replan": "empty",
"safety": 0,
"partial": 1,
"inc_cap": 0,
"gap_margin": 0.0,
"cert_batch": 0,
"steps": 2,
"z_scale": 1.0,
"len_w": 0.0,
"backoff": 0,
"max_sec": null,
"seed": 0,
"dls": "analytic",
"device": "cuda"
},
"batch_size": 256,
"batch_seed_rule": "same seed per batch",
"checkpoint_sha256": "f7f686fd8ee92fb6948fbcc4ee954636065ad87bb54f661c4f8f575bc16c2ce1",
"tasks_sha256": "249bd93457825cda98c59e64d9a096d3473c69aeb3553de1dea6d9e56be71772",
"kin_fp": "2ebcbf17",
"act_scale": 1.0,
"metrics": {
"n": 256,
"n_ref": 256,
"success": 0.81640625,
"collision_free_success": 0.375,
"time_ok_1p3": 0.68359375,
"collision_rate": 0.55859375,
"collision_steps_mean": 45.07421875,
"travel_ratio_median": 1.5936355590820312,
"time_mean_s": 2.019808530807495,
"brakes_mean": 0.0,
"start_fail": 0.0,
"goal_ratio_2s": 0.003008240135386586,
"err_fail_med": 48.19245529174805,
"err_success_med": 0.2415877878665924,
"dls_share": 0.8515625,
"time_budget": "teacher×2(≥3 s)",
"speed_ratio_p50": 1.6600004434585571,
"speed_ratio_p95": 1.660003662109375,
"speed_ratio_max": 1.660003662109375,
"over_vmax_rate": 0.9921875,
"accel_ratio_p95": 1.010289192199707,
"accel_ratio_max": 1.4423871040344238,
"reverse_p50": 0.08469945192337036,
"reverse_mean": 0.09047156572341919,
"reverse_moving_p50": 0.08469945192337036,
"moving_share_p50": 1.0,
"brake_rate_mean": 0.0,
"brake_rate_p50": 0.0,
"n_plans_mean": 195.0
},
"simulation_wall_s": 58.29419349999807
}
+18
View File
@@ -107,6 +107,24 @@
- **对 `backoff` 的预期与判据**:全拒意味着"连第 1 步的端点或中点已经穿进障碍",缩步能不能救取决于**穿得有多深**(穿 0.1 mm 救得回,穿 3 mm 救不回)。这个数转储里没记(只记被选中那条),所以直接由 `backoff_mean`/`reject_all_mean` 来量:
`reject_all_mean ≈ 原全拒次数`(=backoff_mean+brakes_mean,与轮次 33 cap 的 19.55 可比),`backoff_mean/(backoff_mean+brakes_mean)` 就是"缩步能救回的比例"。这是补跑(#22)要读的第一个数。
## 判别定案(#21):两段动作不是"更危险",是"没有备选";顺带量出安全层值多少到达
- 关安全层(`--safety 0`,同 256 题、`--inc_cap 1`,只改段数):
| 口径 | 到达 | **无碰撞到达** | 碰撞率 | 碰撞步/题 | 时限内 | 行程比 |
|---|---|---|---|---|---|---|
| pure steps=1 | 0.7773 | 0.3594 | 0.5859 | 58.34 | 0.5352 | 2.375 |
| pure steps=2 | **0.8164** | **0.3750** | **0.5586** | **45.07** | **0.6836** | **1.594** |
| 开安全层 steps=1(对照) | 0.5234 | 0.5234 | 0 | 0 | 0.2656 | 2.616 |
| 开安全层 steps=2 | 0.3945 | 0.3945 | 0 | 0 | 0.2969 | 1.844 |
(`docs/experiment_round40_safetyoff_steps{1,2}.json`)
- **结论 1(判据 #21 定案)**:关掉安全层以后,两段在**每一格都不更差**——到达更高(+3.9 pp)、时限内高一大截(+14.8 pp)、**碰撞步反而更少**(58.3→45.1)、行程比更接近老师。⇒ "两段动作更危险"被否;两段在开环与纯策略口径都更好,它唯一输的地方是"开安全层时刹车多 4.5 倍"。
- **结论 2(机理)**:这正好是候选塌缩的必然结果——`steps=2` 时 K 条候选的一阶步标准差从 0.852 掉到 0.0245(35 倍),"塌成一条"以后,那条在采样点上穿模就等于**全拒**;`steps=1` 时候选彼此差得远,总有一条能过。所以"没有备选"是主因,不是"界太保守"(线上只有端点+中点点检,没有位移界)。
- **结论 3(安全层值多少到达,首次定量)**:一步口径下安全层把到达从 0.7773 压到 0.5234(**−25.4 pp**),换来碰撞从 58.6% 到 0;纯策略的**无碰撞到达只有 0.3594**,比开安全层的 0.5234 低 16.4 pp ⇒ **安全层确实在净收益上是赚的**,不是白拿到达。
- **对"把一步角点训准"这条训练路线的直接警告**:一步候选的多样性,恰恰来自角点的**偏差/欠缩放**(每条 ε 被削到不同的衰减幅度)。如果训练把一步映射成两段那样的收敛解,候选可能一起塌缩 ⇒ **按当前安全层口径,到达率可能不升反降**(实测就是这个方向:steps=2 开闸 −12.9 pp)。所以任何"修角点"的训练都必须**同时**处理候选多样性(更大 K、或给候选注入受控多样性),否则就是拿开环收益去换闭环到达。
- 顺带修一处历史口径:§9.2 的"策略单独碰撞率 <3%"这一格,现在才有合法读数 **58.6%**(一步)/ **55.9%**(两段)——差距巨大,且以前从没在同一配方下报过。
## §9.2 记分板(2026-10-20 现状,最好的合法口径 = `--inc_cap 1` + K=16)
| 判据(§9.2) | 要求 | 当前 | 差距 |