diff --git a/docs/experiment_round38_backoff1.json b/docs/experiment_round38_backoff1.json new file mode 100644 index 0000000..bf69d62 --- /dev/null +++ b/docs/experiment_round38_backoff1.json @@ -0,0 +1,84 @@ +{ + "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_round38_backoff1.json", + "trace": null, + "select": "endpoint", + "replan": "empty", + "safety": 1, + "partial": 1, + "inc_cap": 1, + "gap_margin": 0.0, + "cert_batch": 1, + "steps": 1, + "z_scale": 1.0, + "len_w": 0.0, + "backoff": 1, + "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.52734375, + "collision_free_success": 0.52734375, + "time_ok_1p3": 0.26953125, + "collision_rate": 0.0, + "collision_steps_mean": 0.0, + "travel_ratio_median": 2.615795850753784, + "time_mean_s": 2.479703664779663, + "brakes_mean": 18.77734375, + "start_fail": 0.0, + "goal_ratio_2s": 0.27920001745224, + "err_fail_med": 212.4702606201172, + "err_success_med": 0.20242473483085632, + "dls_share": 0.6171875, + "time_budget": "teacher×2(≥3 s)", + "speed_ratio_p50": 1.0000016689300537, + "speed_ratio_p95": 1.0000101327896118, + "speed_ratio_max": 1.0000101327896118, + "over_vmax_rate": 0.0, + "accel_ratio_p95": 1.0000016689300537, + "accel_ratio_max": 1.0000101327896118, + "reverse_p50": 0.2482638955116272, + "reverse_mean": 0.2603996992111206, + "reverse_moving_p50": 0.3252427279949188, + "moving_share_p50": 0.9640287756919861, + "brake_rate_mean": 0.09629407525062561, + "brake_rate_p50": 0.0051282052882015705, + "n_plans_mean": 195.0, + "backoff_mean": 1.57421875, + "reject_all_mean": 20.3515625 + }, + "simulation_wall_s": 334.8870786000043 +} diff --git a/docs/experiment_round38_backoff2.json b/docs/experiment_round38_backoff2.json new file mode 100644 index 0000000..9f44646 --- /dev/null +++ b/docs/experiment_round38_backoff2.json @@ -0,0 +1,84 @@ +{ + "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_round38_backoff2.json", + "trace": null, + "select": "endpoint", + "replan": "empty", + "safety": 1, + "partial": 1, + "inc_cap": 1, + "gap_margin": 0.0, + "cert_batch": 1, + "steps": 1, + "z_scale": 1.0, + "len_w": 0.0, + "backoff": 2, + "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.5234375, + "collision_free_success": 0.5234375, + "time_ok_1p3": 0.26171875, + "collision_rate": 0.0, + "collision_steps_mean": 0.0, + "travel_ratio_median": 2.5341429710388184, + "time_mean_s": 2.4558210372924805, + "brakes_mean": 18.1171875, + "start_fail": 0.0, + "goal_ratio_2s": 0.274954229593277, + "err_fail_med": 207.97683715820312, + "err_success_med": 0.19538111984729767, + "dls_share": 0.60546875, + "time_budget": "teacher×2(≥3 s)", + "speed_ratio_p50": 1.0000016689300537, + "speed_ratio_p95": 1.0000101327896118, + "speed_ratio_max": 1.0000101327896118, + "over_vmax_rate": 0.0, + "accel_ratio_p95": 1.0000016689300537, + "accel_ratio_max": 1.0000101327896118, + "reverse_p50": 0.24827586114406586, + "reverse_mean": 0.2605503499507904, + "reverse_moving_p50": 0.32248520851135254, + "moving_share_p50": 0.9672130942344666, + "brake_rate_mean": 0.09290865808725357, + "brake_rate_p50": 0.0051282052882015705, + "n_plans_mean": 195.0, + "backoff_mean": 4.99609375, + "reject_all_mean": 23.11328125 + }, + "simulation_wall_s": 369.2254191000102 +} diff --git a/docs/experiment_round38_backoff3.json b/docs/experiment_round38_backoff3.json new file mode 100644 index 0000000..d0168cc --- /dev/null +++ b/docs/experiment_round38_backoff3.json @@ -0,0 +1,84 @@ +{ + "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_round38_backoff3.json", + "trace": null, + "select": "endpoint", + "replan": "empty", + "safety": 1, + "partial": 1, + "inc_cap": 1, + "gap_margin": 0.0, + "cert_batch": 1, + "steps": 1, + "z_scale": 1.0, + "len_w": 0.0, + "backoff": 3, + "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.515625, + "collision_free_success": 0.515625, + "time_ok_1p3": 0.2578125, + "collision_rate": 0.0, + "collision_steps_mean": 0.0, + "travel_ratio_median": 2.529658794403076, + "time_mean_s": 2.4427273273468018, + "brakes_mean": 16.48046875, + "start_fail": 0.0, + "goal_ratio_2s": 0.2868920564651489, + "err_fail_med": 208.72935485839844, + "err_success_med": 0.20242473483085632, + "dls_share": 0.60546875, + "time_budget": "teacher×2(≥3 s)", + "speed_ratio_p50": 1.0000016689300537, + "speed_ratio_p95": 1.0000101327896118, + "speed_ratio_max": 1.0000101327896118, + "over_vmax_rate": 0.0, + "accel_ratio_p95": 1.0000016689300537, + "accel_ratio_max": 1.0000101327896118, + "reverse_p50": 0.25, + "reverse_mean": 0.26120537519454956, + "reverse_moving_p50": 0.3236245810985565, + "moving_share_p50": 0.9672130942344666, + "brake_rate_mean": 0.08451522886753082, + "brake_rate_p50": 0.0051282052882015705, + "n_plans_mean": 195.0, + "backoff_mean": 9.703125, + "reject_all_mean": 26.18359375 + }, + "simulation_wall_s": 416.57447530000354 +} diff --git a/docs/探索日志.md b/docs/探索日志.md index f025c90..1056045 100644 --- a/docs/探索日志.md +++ b/docs/探索日志.md @@ -108,6 +108,23 @@ - **对 `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)要读的第一个数。 +## `backoff` 四臂判掉:转化率能买到刹停率,买不到到达——而且它能**绕过 §9.2 的判据**(轮次 43) + +- 同一 256 题同 seed、`--inc_cap 1 --cert_batch 1`,只改缩步档数(`docs/experiment_round38_backoff{0,1,2,3}.json`): + + | 档数 | 到达 | 时限内 | 刹停/题 | 缩步顶上/题 | 全拒事件合计 | 转化率 | `brake_rate` mean | + |---|---|---|---|---|---|---|---| + | 0(对照) | 0.5234 | 0.2656 | 19.55 | 0 | — | — | **10.03%** | + | 1(1/2) | 0.5273 | 0.2695 | 18.78 | 1.57 | 20.35 | **7.7%** | 9.63% | + | 2(+1/4) | 0.5234 | 0.2617 | 18.12 | 5.00 | 23.11 | 21.6% | 9.29% | + | 3(+1/8) | **0.5156** | **0.2578** | 16.48 | 9.70 | **26.18** | 37.1% | **8.45%** | + +- **预注册判读命中低那一支**(转化率 <60%):把全拒变成"慢一拍的动作"确实随档数上升(7.7%→37.1%),但**到达和时限一点没赚**(0.5234/0.2656 → 0.5156/0.2578,方向还是负的)。⇒ 被全拒的那些状态不是"差一点就能过",而是**这个方向本来就不通**:缩步只是慢一点去撞同一堵墙。 +- 更值得警惕的是第二列和最后一列的**背离**:`brake_rate`(§9.2 要 <2% 的那个判据)从 10.03% 一路降到 8.45%,`brakes_mean` 降 16%,**但真实结果没变好**。也就是说**缩步档可以只改善刹停率指标而不改善行为**——判据本身能被绕过。而且"全拒事件合计"反而从 20.35 涨到 26.18:缩步把机械臂带进了更容易被拒的几何里。 + ⇒ 规则:**任何降低刹停率的改动,必须同时报到达与时限**,只看 `brake_rate` 会奖励错误行为。这条已加进 #25 的分层读数要求。 +- 处置:`backoff` 保持默认关、**作为到达率杠杆判掉**;它在"减少原地站住"这件事上确实有效(−16% 刹停),所以留作实机上"不许完全停住"这类需求的安全侧选项,不再投入档位扫描。 +- 下一步(链已结束,可以改库):#25 分层指标(可达分母 / 按类别到达率 / `brake_rate_p90` / `stuck_share`)→ 用它重读 K=16(#27:+3.9 pp 到底买在哪一类)→ 才轮到 #24(几何信息进打分,直接打 B/C 类"方向不通")。 + ## 控制臂对表:22/22 键逐位复现 + 仪表预测精确命中(轮次 42) - `--backoff 0 --cert_batch 1 --inc_cap 1` 重跑轮次 33 cap 配方:**两文件共有的 22 个指标键全部相等,差异集合为空**(第三次确认批量认证分支重写没有改变行为)。