diff --git a/docs/experiment_round39_try1.json b/docs/experiment_round39_try1.json new file mode 100644 index 0000000..6d1bdd1 --- /dev/null +++ b/docs/experiment_round39_try1.json @@ -0,0 +1,77 @@ +{ + "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": 1, + "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_round39_try1.json", + "trace": null, + "select": "endpoint", + "replan": "empty", + "safety": 1, + "partial": 1, + "inc_cap": 1, + "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.40234375, + "collision_free_success": 0.40234375, + "time_ok_1p3": 0.22265625, + "collision_rate": 0.0, + "collision_steps_mean": 0.0, + "travel_ratio_median": 2.5106539726257324, + "time_mean_s": 2.253203868865967, + "brakes_mean": 60.44140625, + "start_fail": 0.0, + "goal_ratio_2s": 0.4367985725402832, + "err_fail_med": 243.9196319580078, + "err_success_med": 0.21751396358013153, + "dls_share": 0.53125, + "time_budget": "teacher×2(≥3 s)", + "speed_ratio_p50": 1.0000016689300537, + "speed_ratio_p95": 1.0000038146972656, + "speed_ratio_max": 1.0000101327896118, + "over_vmax_rate": 0.0, + "accel_ratio_p95": 1.0000016689300537, + "accel_ratio_max": 1.0000101327896118, + "reverse_p50": 0.18634259700775146, + "reverse_mean": 0.19426266849040985 + }, + "simulation_wall_s": 111.52556069999991 +} diff --git a/docs/探索日志.md b/docs/探索日志.md index b6bf64f..7480218 100644 --- a/docs/探索日志.md +++ b/docs/探索日志.md @@ -107,6 +107,22 @@ - **对 `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)要读的第一个数。 +## 试候选数的成本-收益曲线(轮次 39,四档齐全,#15 主结果) + +- 同一 256 题、同 seed、`--inc_cap 1`、其余配方(`select=endpoint, replan=empty, commit_n=2, K=8, fb=2.2`)不变,只改**安全层允许试几条候选**: + + | 试候选数 | 到达 | 无碰撞到达 | 时限内 | 刹车/题 | 行程比 | reverse_p50 | 整批墙钟 | + |---|---|---|---|---|---|---|---| + | 1 | 0.4023 | 0.4023 | 0.2227 | 60.44 | 2.5107 | 0.1863 | 112 s | + | 3 | 0.4570 | 0.4570 | 0.2383 | 37.75 | 2.5297 | 0.2244 | 170 s | + | 8(对照) | 0.5234 | 0.5234 | 0.2656 | 19.55 | 2.6158 | —(改动前口径) | 329 s | + | 16 | 0.5625 | 0.5625 | 0.2969 | 13.77 | 2.6243 | 1.5750(旧口径,÷6=0.2625) | 573 s | + + (`docs/experiment_round39_try{1,3}.json`、`..._K16.json`、对照 `docs/experiment_round33_cap.json`) +- **读法**:到达 0.402→0.562(+16 pp)、刹车 60.4→13.8(÷4.4)单调随候选数变好;代价是串行认证下 gaps 调用次数与候选数成正比,整批墙钟 112→573 s(×5.1,与题数无关的部分就是几何调用)。碰撞全程 0、限速照开 ⇒ **这不是放松判据换来的分数**。 +- `reverse_p50` 随"站住更多"而**下降**(try1 的 0.186 < 对照 0.247),是稀释而不是变平滑 ⇒ 这个指标只能和 `moving_share` 一起读(后两个键从 14:41 之后的臂才有)。 +- **部署口径的未决项**:上面的墙钟是**串行认证**(`cert_batch=0`)口径;批量认证把 K 条候选并成 1 次调用,理论上能把候选数带来的成本从"线性调用"变成"一次更大的调用"。所以 `K=8/16 × cert_batch=0/1` 的四格 B=1 周期微基准(`ml/runs/_kcost_probe.py`)是这条杠杆能否上线的关键读数——**跨轮次墙钟不算证据**,本表的墙钟只用来说明趋势量级。 + ## try3 反向档位 + 换向指标的稀释修正(轮次 39 续) - `--safety_try 3`(只允许安全层试按分数排序的前 3 条候选,其余不变、仍 `--inc_cap 1`):到达 **0.4570**(对照 0.5234,−6.6 pp)、时限内 0.2383(−2.7 pp)、**刹车 37.75**(对照 19.55,+93%)、行程比 2.530、碰撞仍 0(`docs/experiment_round39_try3.json`)。