探索日志:Transformer 机械臂闭环控制
长期锚点:docs/Transformer轨迹拟合训练方案.md §9.2(部署形态 = 策略 + 安全层)。
验收口径(§9.2):实际执行碰撞 = 0;held-out 可达任务到达率 ≥ 98%;到达用时 ≤ 老师 ×1.3;关节行程 ≤ 现有规划器 ×1.10;冷启动 < 10 ms;每次推理 + 安全认证 P99 < 20 ms;刹停发生率 < 2% 的推理周期;策略单独(关安全层)碰撞率 < 3%。
评测约定:val 任务、部署节奏(r = 3 重规划、1 段采样、K=8);「纯策略」= 关安全层;「部署」= 开安全层。时延:桌面 RTX 3090 上 sample_k(B=64, K=8) 墙钟均值(均值,非 P99);浏览器 ONNX P99 以 §9.2 R4 的独立测量为准。
轮次 0:基线(2026-10-18,main)
- 假设:模型开环已拟合老师(末端 ~6 mm),闭环失败另有原因。
- 判据:reach = 0 且碰撞 ≈ 100% 即失败;需同时报告碰撞 / 到达 / 精度 / 时延。
- 配方:
ml/runs/base/last.pt(step 14000,旧配方、act_scale=1.0),n=256。
- 对照:老师回放 reach 1.0 / 碰撞 0;H1_oracle(老师提线走 rollout)reach 1.0、碰撞 0、轨迹偏差 p99 4.6e-4°。
- 指标:到达 0%;碰撞 99.6%;精度 ol_fk 5.98 mm / ol_best 2.92 mm / ol_div 0.655,2 s 误差比 0.755;时延未测。
- 结论:仿真/滚动无误,失败在策略输出。闭环对每步残差极敏感(老师动作加 σ=0.05×STEP 即 reach 1.0→0.218)。
轮次 1:数据规模能否救闭环(main,负结论)
- 假设:训练数据不足导致分布外状态无覆盖。
- 判据:若闭环状态到训练集最近邻距离大,且密度缩放无法在误差尺度内缩小差距,则加大同类数据无效。
- 配方:191 万老师状态最近邻分析;6 维密度缩放 d∝N^(−1/6)。
- 对照:起点(老师分布内)最近邻。
- 指标:闭环状态最近邻 p50 21.5°(起点 13.2°);数据翻 4 倍仅降 ~21%,与 0.02° 误差尺度差三个量级。
- 结论:加大同类老师数据无效;需要「不同的数据」(闭环状态标注)。
- 下一步:DAgger 或状态扰动数据。
轮次 2:合成扰动状态微调(main,负结论)
- 假设:偏移 1.5° 状态的老师标注可补足闭环状态覆盖。
- 判据:若 success 仍 0 或开环精度退化,则配方不成立。
- 配方:2000 个扰动起点(σ 混合 0.5/1/2/4°)→ 老师重规划(2000/2000 到达)→ 36k 样本 → 从 base/last.pt 微调 3000 步(lr 3e-4 / 1e-4 两轮)。
- 对照:base/last.pt。
- 指标:碰撞 99.6%→48.4% / 60.4%;到达仍 0%;开环 6→15.3 / 16.4 mm(退化 2.5×);ratio2s 0.927/0.893。
- 结论:只学会了「保守避撞」,开环精度被带偏,success 仍 0;此配方不成立。
- 下一步:改训练标签(绝对目标)或真实 DAgger。
轮次 3:绝对目标参数化(exp: feat/abs-target,负结论)
- 假设:模型从当前状态外推增量(判别 ρ=1.54),改为绝对目标标签可让输出指向参考位置。
- 判据:一步采样开环误差需回到 <10 mm,闭环 success > 0;否则参数化不可行。
- 配方:
ABS_TARGET=1 重打主数据(201 万样本,Y=16 步绝对目标/180),train/rollout/ckpt 适配;从零训练 9950 步(p_neq 预热 5000)。过程中修复前缀噪声增广把 eps 直接加到绝对目标(≈18° 污染)的 bug。
- 对照:base/last.pt(ol_fk 5.98 mm、reach 0%)。
- 指标:一步采样动作误差 31°(4/8 段 2.3°/2.8°);ol_fk 4000/6000/8000 步 = 74.6/140.4/139.0 mm;闭环 0% / 100%(1 段与 4 段皆然);时延未测。
- 结论:绝对目标的一步流匹配在 MeanFlow 头上学不动(过预热后 5000 步无下降趋势);此配方不成立。分支已推送远端
217a70b(本地分支可删,远端保留可复现)。
- 下一步:回归增量口径,上真实 DAgger。
轮次 4:真实 DAgger 1 轮(main,部分有效)
- 假设:策略自己走到的状态(离训练集 21.5°)+ 老师重标注,可让模型学会在偏移状态上行动。
- 判据:reach 是否从 0 抬头;同时看碰撞、开环精度、时延。
- 配方:
ACT_SCALE=1.0 DAG_ROUNDS=1 DAG_N=2000 bash ml/dagger/run.sh base ml/runs/base/last.pt(采集 2000 题 → 老师重规划 → 打包 → 微调 15000 步,lr 3e-4;主数据 + DAgger 混合)。
- 对照:base/last.pt。
- 指标:碰撞 99.6%→40.2%(8000 步 36.9%,10000 步 58.8%);到达 0%,仅微调 12000 步时出现 0.4%(2/512);开环退化 6→15.7 mm;ratio2s 0.87–0.92;时延未测。
- 结论:DAgger 数据确实教会避撞,但微调把主分布带偏(开环退化),到达仍近 0;单独 DAgger 不是终点。
- 下一步:在 DAgger 模型上加目标反馈(模型前馈 + DLS 反馈)。
轮次 5:模型前馈 + DLS 目标反馈(exp: feat/fb-mix,历史最佳)
- 假设:模型擅长开环轨迹/避撞,但不指向目标;把 DLS 朝目标的反馈叠加到候选动作上,可把「走偏」拉回目标。
- 判据:部署口径(+安全层)reach 显著 > 0 且碰撞 < 3%(§9.2 策略单独碰撞线)、刹停可控;否则不成立。
- 配方:
closed_loop.rollout(fb_gain=...):inc += fb_gain · DLS(qe→T,R, n=1)(加在所有候选上,安全层评估带反馈的候选)。模型 ml/runs/base_dag1/best.pt(DAgger 轮 4 的 best,12000 步)。n=128,val。
- 对照:base/last.pt + 同反馈;DAgger 模型 + 无反馈。
- 指标(n=128):
| 配置 |
到达 |
碰撞 |
精度 ratio2s |
刹停/题 |
时延 |
| DAgger 模型, gain 0 |
0% |
44.5% |
0.873 |
0 |
— |
| DAgger 模型, gain 1.0, 关安全层 |
29.7% |
73.4% |
0.370 |
0 |
— |
| DAgger 模型, gain 1.0, 开安全层 |
20.3% |
2.3% |
0.480 |
21.9 |
12.58 ms/次(B=64,K=8,桌面 3090) |
| base 模型, gain 1.0, 关安全层 |
0% |
94.5% |
0.554 |
0 |
— |
(另测 n=32 复核:gain 1.0 + safety → reach 25.0%、碰撞 6.2%、ratio2s 0.588。)
- 结论:反馈混合是首个把到达率从 0 拉到 20%+ 的机理;安全层把碰撞从 73% 压到 2.3%(部署口径),代价是刹停 21.9 次/题(远超 §9.2 的 <2%/周期)。精度 ratio2s 0.48(2 s 时误差缩一半),时延 12.58 ms/次接近 §9.2 的 20 ms(推理+认证)门槛。
- 与历史最佳/基线对比:reach 0→20.3%、碰撞 99.6→2.3%、ratio2s 0.755→0.480;开环精度仍退化(DAgger 微调导致 15.7 mm vs 基线 5.98 mm)。
- 漂移检查:main = 70654e4(无新提交);工作区仅用户个人 html 未跟踪;数据口径 act_scale=1.0 与 ckpt 一致;
feat/abs-target 已推送远端;本次实验在独立分支 feat/fb-mix。
- 下一步:扫更大 gain(1.2–2.0)与增益衰减;目标是把刹停次数降下来、到达率再提升,并测 ONNX/浏览器时延。
轮次 6:反馈增益扩展扫描(exp: feat/fb-mix,小幅进展)
- 假设:更大增益能把到达率继续推高。
- 判据:reach 显著高于 20.3%(>25%)且碰撞 ≤3%、刹停不失控。
- 配方:
rollout(fb_gain∈{1.2,1.5,2.0}, safety=True),模型同轮次 5,n=128。
- 对照:轮次 5(gain 1.0:reach 20.3% / 碰撞 2.3% / ratio2s 0.480 / 刹停 21.9)。
- 指标:
| gain |
到达 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| 1.2 |
23.4% |
1.6% |
0.454 |
31.4 |
973 ms |
| 1.5 |
21.9% |
2.3% |
0.498 |
43.0 |
1151 ms |
| 2.0 |
23.4% |
0.8% |
0.530 |
57.6 |
1100 ms |
- 结论:到达率封顶在 ~23%,增益再大只增刹停(31→58 次/题)。当前瓶颈从「到不了目标」变成「安全层频繁刹停 + 近目标过冲」。
- 下一步:距离衰减增益(远离目标全增益、贴近目标减弱)+ 刹停兜底;目标 reach > 30% 且刹停显著下降。
轮次 7:距离衰减增益 + 刹停兜底(exp: feat/fb-mix,负结论)
- 假设:贴近目标减弱反馈可减少过冲/刹停;安全层全拒时用「半速朝目标一步」(单点安全认证)可减少原地停滞。
- 判据:reach > 23.4%(轮次 6)且碰撞 ≤3%、刹停下降。
- 配方:
fb_scale=100(>100 mm 全增益,近目标最低 0.2 倍);fb_fallback=0.5(全拒时半速 DLS 一步,认证 qe+fb1 单点无碰)。n=128,safety=True。
- 对照:轮次 6(gain 1.2、无衰减、无兜底:23.4% / 1.6% / 0.454 / 31.4 / 973 ms)。
- 指标:
| 配置 |
到达 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| decay + fallback (gain 1.2) |
7.0% |
57.8% |
0.506 |
45.1 |
1166 ms |
| decay only (gain 1.2) |
9.4% |
1.6% |
0.454 |
29.6 |
1106 ms |
| no-decay + fallback (gain 1.2) |
21.1% |
57.8% |
0.506 |
46.8 |
1063 ms |
| gain 1.0 + decay + fallback |
4.7% |
55.5% |
0.515 |
37.2 |
939 ms |
- 结论:两个改动都失败。① 衰减使接近目标时的收敛变慢,到达从 23.4% 掉到 9.4%;② 兜底绕过安全层的多候选选择,碰撞从 1.6% 拉到 57.8%(仅单点认证、且执行 3 步同向动作,危险),必须清除。保留参数但默认关闭(
fb_scale=0, fb_fallback=0),历史最佳配置(轮次 6)可复现。
- 过程 bug(自造):衰减代码曾用变量名
g 覆盖 rollout 的随机数生成器,导致 randn 报错;改名 gdec 后正常——记录以免误判为模型问题。
- 下一步:DAgger 第 2 轮——采集时加入 fb_gain + safety,让训练分布 = 部署分布(1 轮,15000 步微调,约 1 小时)。按目标要求先向用户确认。
轮次 8:部署分布 DAgger 第 2 轮(exp: exp/dagger-deploy,边际改善)
- 假设:第 1 轮 DAgger 用纯策略轨迹采集,与部署分布(反馈 + 安全层)不一致;用部署分布采集可让模型学到刹停/反馈下的正确动作。
- 判据:部署口径 reach > 23.4%(轮次 6)或刹停显著下降且到达不降。
- 配方:
ml.dagger.collect --fb_gain 1.2 --safety 1(2000 题 → 637 起点,部署分布)→ 老师重规划 → 打包 → 从 base_dag1/best.pt 微调 15000 步(配置 base_dag2,lr 3e-4)。
- 对照:base_dag1/best.pt(轮次 6 历史最佳);纯策略 eval 见训练日志。
- 指标(部署口径,n=128,safety=True):
| 模型 |
gain |
到达 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| dag2 best |
1.0 |
21.9% |
1.6% |
0.485 |
18.9 |
905 ms |
| dag2 best |
1.2 |
22.7% |
1.6% |
0.491 |
25.9 |
922 ms |
| dag1 best |
1.0 |
20.3% |
2.3% |
0.480 |
21.9 |
944 ms |
| dag1 best(轮次 6) |
1.2 |
23.4% |
1.6% |
0.454 |
31.4 |
953 ms |
- 结论:部署分布 DAgger 把刹停降 18–40%、时延降 ~31 ms,但到达率未突破 23% 平台(-0.7 pp),属边际权衡改善;历史最佳到达仍是 dag1+gain1.2(23.4%)。
- 下一步:试 replan=empty(r=0 规划,让反馈逐步生效)与安全层候选 K=16(减少全拒刹停)。
轮次 9:replan=empty(队列空时规划、r=0)/ K=16 安全候选(exp: exp/dagger-deploy,新历史最佳)
- 假设:replan='empty'(每次队列空时规划、无前缀 r=0)比默认 r=3 更适合反馈混合。K=16 给安全层更多候选、减少全拒。
(更正:replan='empty' 仍是每 3 步规划一次——队列空才规划,commit 3 步;收益来自 r=0 无前缀,不是规划频率。)
- 判据:部署口径 reach > 23.4% 且碰撞 ≤1.6%、刹停/时延不恶化。
- 配方:dag2 best;
replan='empty'(每次 r=0 规划);K=16。n=128,safety=True。
- 对照:轮次 8(dag2+gain1.2:22.7% / 1.6% / 0.491 / 25.9 / 922 ms)。
- 指标:
| 配置 |
到达 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| gain1.2 + replan=empty |
26.6% |
0.8% |
0.453 |
20.6 |
845 ms |
| gain1.2 + K=16 |
21.1% |
1.6% |
0.451 |
19.4 |
1629 ms |
| gain1.0 + K=16 |
21.9% |
4.7% |
0.506 |
14.6 |
1588 ms |
- 结论:replan=empty(r=0)全面改善(到达 +3.9 pp、碰撞 1.6→0.8%、刹停 25.9→20.6、时延 922→845 ms),成为新历史最佳。K=16 无收益且时延翻倍(1629 ms),淘汰。
- 下一步:replan=empty 下重扫增益(0.8/1.0/1.5/2.0),找新最优。
轮次 10:replan=empty(r=0)下的增益重扫(exp: exp/dagger-deploy,新历史最佳)
- 假设:r=0 规划下,最优增益会上移。
- 判据:reach > 26.6%(轮次 9)且碰撞 ≤1.6%;同时比较刹停/时延。
- 配方:dag2 best,
replan='empty',gain ∈ {0.8, 1.0, 1.2, 1.5, 2.0},safety=True,n=128。
- 对照:轮次 9(gain 1.2:26.6% / 0.8% / 0.453 / 20.6 / 845 ms)。
- 指标:
| gain |
到达 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| 0.8 |
21.9% |
2.3% |
0.505 |
11.3 |
801 ms |
| 1.0 |
22.7% |
0.0% |
0.489 |
15.2 |
810 ms |
| 1.2 |
26.6% |
0.8% |
0.453 |
20.6 |
845 ms |
| 1.5 |
28.9% |
0.8% |
0.411 |
28.5 |
844 ms |
| 2.0 |
28.9% |
0.8% |
0.414 |
44.9 |
914 ms |
- 结论:到达在 gain 1.5 封顶(28.9%),2.0 无收益且刹停翻倍(44.9)。按到达优先/碰撞 ≤3%:历史最佳 = gain 1.5 + replan=empty(28.9% / 0.8% / 0.411 / 28.5 / 844 ms);按碰撞优先:gain 1.0(22.7% / 0.0% / 0.489 / 15.2 / 810 ms)。n=128 的差异约 3–4 题,需 n=256 复核。
- 下一步:n=256 复核 gain 1.0 / 1.2 / 1.5;若平台稳定,再决定是否 DAgger 第 3 轮(采集用新部署配置)。
轮次 11:n=256 复核(发现前 128 题偏难)
- 假设:轮次 10 的 n=128 差异含样本偏差,需扩大样本复核。
- 判据:reach 排名与轮次 10 一致、碰撞 ≤3%;若差异大则以 n=256 为准。
- 配方:dag2 best,
replan='empty',safety=True,gain ∈ {1.0, 1.2, 1.5},n=256。
- 对照:轮次 10(n=128:22.7/26.6/28.9%)。
- 指标:
| gain |
n=128 到达 |
n=256 到达 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| 1.0 |
22.7% |
31.6% |
0.8% |
0.428 |
15.0 |
748 ms |
| 1.2 |
26.6% |
34.8% |
1.2% |
0.392 |
18.6 |
752 ms |
| 1.5 |
28.9% |
36.7% |
1.6% |
0.323 |
27.4 |
760 ms |
- 结论:前 128 题显著偏难;n=256 上 gain 1.5 + replan=empty = 到达 36.7% / 碰撞 1.6% / ratio2s 0.323 / 刹停 27.4 / 760 ms(新历史最佳)。gain 1.0 更保守(31.6% / 碰撞 0.8% / 刹停 15.0)。排名与 n=128 一致(1.5 > 1.2 > 1.0)。
- 下一步:n=512 复核 gain 1.2/1.5;随后评估 DAgger 第 3 轮(部署分布采集)与监控页回写。
轮次 12:n=512 复核(稳定结论)
- 假设:n=256 的 34.8–36.7% 需在更大样本上确认。
- 判据:reach 与 n=256 差异 <5 pp、碰撞 ≤3%。
- 配方:dag2 best,
replan='empty',safety=True,gain ∈ {1.2, 1.5},n=512。
- 对照:轮次 11(n=256:34.8 / 36.7%)。
- 指标:
| gain |
n=256 到达 |
n=512 到达 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| 1.2 |
34.8% |
32.6% |
1.0% |
0.435 |
18.6 |
722 ms |
| 1.5 |
36.7% |
33.4% |
1.0% |
0.399 |
28.1 |
738 ms |
- 结论:n=512 稳定在 33% 左右(n=256 略乐观);历史最佳(n=512,部署口径)= gain 1.5 + replan=empty:到达 33.4% / 碰撞 1.0% / ratio2s 0.399 / 刹停 28.1 / 738 ms。保守版 gain 1.2:32.6% / 1.0% / 0.435 / 18.6 / 722 ms(刹停少 1/3)。
- 监控页回写:
ml/monitor.py 新增 /api/explore(读 docs/探索日志.md),ml/monitor.html 新增「闭环探索日志」卡片;Edge headless 截图确认渲染正常(http://127.0.0.1:8100)。
- 下一步:候选选择器(consist/value/first)与 K=4 在反馈+每步重规划下是否影响到达/刹停。
轮次 13:选择器 / K / 失败模式(exp: exp/dagger-deploy)
- 假设:反馈混合下,候选选择器与候选数 K 会影响到达/时延;失败模式可指导下一步。
- 判据:reach > 36.7% 或时延显著下降;同时报告 time_ok_1p3。
- 配方:dag2 best,replan='empty',gain 1.5,safety=True,n=256。
- 对照:轮次 11/12(consist K=8:36.7%)。
- 指标:
| 配置 |
到达 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| consist K=8 |
36.7% |
1.6% |
0.323 |
27.4 |
764 ms |
| value K=8 |
35.9% |
1.6% |
0.334 |
29.4 |
1063 ms |
| first K=8 |
36.3% |
1.2% |
0.338 |
28.1 |
780 ms |
| K=6 |
35.9% |
1.6% |
0.353 |
28.6 |
627 ms |
| K=4 |
31.6% |
1.2% |
0.396 |
32.6 |
482 ms |
- 失败模式(n=256,consist K=8):失败 149 题中 碰撞仅 3 题(1.2%)、超时无碰撞 146 题(57.0%);失败题终点误差 p50 140 mm;
time_ok_1p3 仅 13.3%;成功题 t_done p50 2.74 s(时限 p50 3.4 s);刹停 27.4 次/题。
- 结论:选择器无差别(consist 略优);K=8 到达最佳,K=6 省 18% 时延(到达 -0.8 pp)。当前真正的瓶颈是时间效率(频繁刹停→超时),不是碰撞。§9.2 的「用时 ≤ 老师×1.3」当前只有 13.3%。
- 下一步:每步重规划下,安全层只需认证第 1 步(现在验 3 步,过度保守→全拒→刹停);改
safety_steps=1 验证能否在保持低碰撞的同时大幅减少刹停。
轮次 14:部分安全前缀(exp: exp/dagger-deploy,刹停大降)
- 假设:安全层现在要求 3 步全安全才执行,候选只要第 2–3 步有碰撞就全拒刹停;改为「执行到第一个不安全步为止」可减少刹停。
- 判据:刹停显著下降、到达不降、碰撞 ≤3%。
- 配方:dag2 best,replan='empty',gain 1.5,safety=True,
safety_partial=1;n=256。
- 对照:全窗口(轮次 11/13:36.7% / 1.6% / 0.323 / 27.4 / 775 ms)。
- 指标:
| 安全层 |
到达 |
time_ok_1p3 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| 3 步全安全 |
36.7% |
13.3% |
1.6% |
0.323 |
27.4 |
775 ms |
| 部分安全前缀 |
38.3% |
13.7% |
1.6% |
0.308 |
8.6 |
770 ms |
- 结论:刹停 27.4→8.6(-69%)、到达 +1.6 pp、碰撞不变——部分安全前缀有效(新最佳:38.3% / 1.6% / 0.308 / 8.6 / 770 ms)。但
time_ok_1p3 仍 13.7%:说明超时主因不是刹停,而是执行粒度——部分前缀的填充零步仍在消耗时间。
- 下一步:commit_n=1(每次只提交 1 步、每步规划,无填充步),验证时间效率。
轮次 15:每步规划(commit_n=1)(exp: exp/dagger-deploy,新历史最佳)
- 假设:部分前缀的填充零步仍在消耗时间;每次只提交 1 步、每步重新规划可消除填充、提升时间效率。
- 判据:time_ok_1p3 显著上升、到达不降、碰撞 ≤3%。
- 配方:dag2 best,replan='empty',gain 1.5,safety=True,
safety_partial=1, commit_n=1;n=256。
- 对照:commit_n=3 部分前缀(轮次 14:38.3% / 13.7% / 1.6% / 0.308 / 8.6 / 770 ms)。
- 指标:
| commit_n |
到达 |
time_ok_1p3 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| 3 |
38.3% |
13.7% |
1.6% |
0.308 |
8.6 |
770 ms |
| 1 |
41.8% |
21.5% |
2.3% |
0.259 |
26.9 |
967 ms |
- 结论:每步规划把到达推到 41.8%、时间效率 13.7→21.5%、精度 ratio2s 0.259;代价:碰撞 1.6→2.3%(仍 <3%)、刹停计数回升(每步都判断)、时延 +26%。新历史最佳(n=256,部署口径):41.8% / 2.3% / 0.259 / 21.5% / 967 ms。
- 注:commit_n=1 的推理频率是 3 倍,真机需核对 §9.2 的 P99 <20 ms 预算(当前桌面 12.58 ms/次)。
- 下一步:n=512 复核;若稳定则收尾(更新最佳、监控页、分支清理)。
轮次 16:n=512 复核每步规划(稳定结论)
- 假设:轮次 15 的 41.8%(n=256)需更大样本确认。
- 判据:reach 与 n=256 差异 <5 pp、碰撞 ≤3%。
- 配方:dag2 best,replan='empty',gain 1.5,safety=True,safety_partial=1,commit_n=1;n=512。
- 对照:轮次 15(n=256:41.8% / 21.5% / 2.3% / 0.259 / 967 ms)。
- 指标:到达 40.8%、time_ok_1p3 25.0%、碰撞 2.1%、ratio2s 0.309、刹停 25.3、墙钟 852 ms/题。
- 结论:稳定。历史最佳(n=512,部署口径)= 40.8% 到达 / 2.1% 碰撞 / ratio2s 0.309 / time_ok 25.0% / 852 ms/题;从基线 0% 到达提升 40.8 pp。相对 §9.2(98%、碰撞 0、用时≤老师×1.3)仍有大差距,但机理已成立。
- 下一步:每步规划下重扫增益(1.8/2.2/3.0),看时间效率是否继续提升;随后收尾。
轮次 17:每步规划下的更大增益(exp: exp/dagger-deploy)
- 假设:每步规划下更大的反馈增益可进一步提升到达与时间效率。
- 判据:time_ok 上升、到达不降、碰撞 ≤3%。
- 配方:dag2 best,replan='empty',commit_n=1,safety_partial=1,gain ∈ {1.8, 2.2, 3.0},n=256。
- 对照:轮次 15(gain 1.5:41.8% / 21.5% / 2.3% / 0.259 / 26.9 / 967 ms)。
- 指标:
| gain |
到达 |
time_ok_1p3 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| 1.8 |
43.8% |
28.9% |
1.6% |
0.216 |
40.0 |
956 ms |
| 2.2 |
41.0% |
32.4% |
2.0% |
0.174 |
64.4 |
976 ms |
| 3.0 |
36.3% |
32.8% |
0.8% |
0.153 |
123.2 |
994 ms |
- 结论:gain 1.8 到达最高(43.8%);2.2/3.0 精度与时间效率更好但到达下降、刹停暴涨(3.0 达 123 次/题,过冲)。历史最佳按到达优先(碰撞 ≤3%):gain 1.8 = 到达 43.8% / 碰撞 1.6% / ratio2s 0.216 / time_ok 28.9% / 956 ms(n=256)。保守/时间优先可选 2.2。
- 下一步:n=512 复核 gain 1.8;随后收尾。
轮次 18:n=512 复核 gain 1.8(收尾)
- 假设:轮次 17 的 43.8%(n=256)需更大样本确认。
- 判据:reach 与 n=256 差异 <5 pp、碰撞 ≤3%。
- 配方:dag2 best,replan='empty',commit_n=1,safety_partial=1,gain 1.8;n=512。
- 对照:轮次 17(n=256:43.8% / 28.9% / 1.6% / 0.216 / 40.0 / 956 ms);轮次 16(gain 1.5 n=512:40.8% / 25.0% / 2.1% / 0.309 / 25.3 / 852 ms)。
- 指标:到达 42.2%、time_ok_1p3 29.1%、碰撞 2.9%、ratio2s 0.270、刹停 37.4、墙钟 870 ms/题。
- 结论:gain 1.8 在 n=512 稳定(42.2%),到达/时间效率优于 gain 1.5(+1.4 pp / +4.1 pp),但碰撞 2.1→2.9%(贴近 3% 线)、刹停 25.3→37.4。历史最佳(到达优先,n=512)= gain 1.8;碰撞优先 = gain 1.5。
- 下一步:本轮探索收尾(监控页已回写);进入大规模训练需用户确认 §9.2 锚点。
轮次统计
- 连续无实质进展轮数:0(轮次 9–17 持续有实质进展)。
- 历史最佳(部署口径,n=512):
ml/runs/base_dag2_dag1/best.pt + K=8, safety=True, replan='empty', fb_gain=1.8, safety_partial=1, commit_n=1 → 到达 42.2%、碰撞 2.9%、ratio2s 0.270、time_ok_1p3 29.1%、刹停 37.4/题、仿真墙钟 870 ms/题;推理 12.58 ms/次(B=64,K=8,桌面 3090 均值,P99 未测)。
- 保守版(碰撞优先):gain 1.5 → 40.8% / 2.1% / 0.309 / 25.0% / 25.3 / 852 ms。
- 与基线对比:到达 0→42.2%、碰撞 99.6→2.9%、ratio2s 0.755→0.270;代价:DAgger 微调使开环 ol_fk 5.98→15.7 mm。
- 相对 §9.2:到达 42.2% vs ≥98%(差距大);碰撞 2.9% vs 0(接近策略单独 <3% 线);用时 ≤老师×1.3 为 29.1%;推理+认证 P99 未测(桌面均值 12.58 ms,预算 20 ms)。
- 未进入大规模训练(需用户确认 §9.2 锚点)。
- 训练方法探索(轮次 19–22):APG(管线修复、尺度失控)、反馈蒸馏(未内化)、DAgger-3(39.5%)、冻结编码器(41.8%)——均未超过 dag2 基线 43.8%。
轮次 19:APG 闭环策略梯度试跑(exp: exp/dagger-deploy,管线修复但暂不采用)
- 假设:用闭环目标/碰撞损失直接微调策略(把"朝目标走"内化),减少对执行层反馈的依赖。
- 判据:纯策略闭环 success 上升、碰撞铰链下降;部署口径(+反馈/安全层)不降。
- 配方:
ml.apg.apg_finetune --init base_dag2_dag1/best.pt --steps 2(先冒烟;原计划 500 步)。
- 修复的两个既有 bug(APG 此前从未实测):
kin_torch._cat_gaps 的 p['b'] += s 是 in-place,而 b 被 autograd 索引反向图引用 → backward 报 version 错;改为 p['b'] = p['b'] + s。
- APG 段边界
queue.detach() 让下一段执行的动作无梯度;改为只 detach 状态并重置队列(下一 plan 走 r=0 重新提交)。
- 指标(2 步冒烟):EVAL0(纯策略)success 0 / 碰撞 31.8%;第 0 步 col(碰撞铰链均值)409508、gnorm 473119(被裁剪)、tgt 206.6、smooth 645;EVAL@2 success 0 / 碰撞 26.0%。
- 结论:管线已能跑,但损失尺度失控(碰撞铰链均值 40 万,远大于 margin 3mm 的合理量级);且 APG 展开是纯策略口径(无反馈/安全层/每步规划),与当前部署形态不一致。暂不采用,转「反馈蒸馏」。
- 下一步:反馈蒸馏——用最终部署配置收集 (特征, 复合动作=模型输出+目标反馈) 样本,微调模型把反馈内化。
轮次 20:反馈蒸馏(exp: exp/dagger-deploy,负结论)
- 假设:用最终部署配置收集 (特征, 复合动作 = 模型输出 + 目标反馈) 样本,微调后模型可内化反馈(部署时降低/去掉反馈仍能到目标)。
- 判据:部署口径下
fb_gain=0~0.9 时 success 接近/超过基线(43.8%,n=256),且 time_ok 不降。
- 配方:
rollout 加 collect 钩子(与部署一致:safety、replan='empty'、safety_partial=1、commit_n=1、fb_gain=1.8)收集 500 题 → 17.7 万样本;train.py --config distill.json(lr 1e-4、3000 步、w_value=0、w_sub=0、w_fk=0.1、w_smooth=0.01)+ 主数据 BC 锚定,从 dag2 best 微调。
- 对照:dag2 + gain 1.8(n=256:43.8% / 28.9% / 1.6% / 0.216 / 40.0 / 956 ms)。
- 指标(n=256,部署口径):
| 模型 |
gain |
到达 |
time_ok_1p3 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| distill |
0.0 |
0.8% |
— |
0.0% |
0.708 |
2.1 |
762 ms |
| distill |
0.9 |
36.7% |
10.5% |
1.2% |
0.421 |
12.4 |
916 ms |
| distill |
1.8 |
43.4% |
27.7% |
2.0% |
0.228 |
47.4 |
925 ms |
| dag2(基线) |
1.8 |
43.8% |
28.9% |
1.6% |
0.216 |
40.0 |
956 ms |
- 结论:反馈未内化——
gain=0 时到达仅 0.8%(与基线纯策略一样);gain=1.8 时与基线持平(43.4 vs 43.8,差约 1 题),碰撞/刹停略差。蒸馏样本占比仅 8.5%、标签仍以主数据增量为主,模型没有学会"看目标修正"。此配方不成立。
- 下一步:与最终部署配置一致的 DAgger 第 3 轮(采集时已用 safety+fb 1.2,但仍是 3 步提交/全窗口;现在部署是每步规划+部分前缀)。
轮次 21:DAgger-3(最终部署配置采集)(exp: exp/dagger-deploy,负结论)
- 假设:用最终部署配置(每步规划 + 部分安全前缀 + 反馈 gain1.8 + 安全层)采集,训练分布与部署完全一致,可继续提升。
- 判据:部署口径 success > 43.8%(dag2 基线,n=256)。
- 配方:
collect --fb_gain 1.8 --safety 1 --replan empty --commit_n 1 --safety_partial 1(500 题、73 起点)→ 老师重规划 → 打包 → 从 dag2 best 微调 15000 步(lr 3e-4,配置 base_dag3)。
- 对照:dag2 + gain1.8(n=256:43.8% / 28.9% / 1.6% / 0.216 / 40.0 / 956 ms)。
- 指标(n=256,部署口径):
| 模型 |
gain |
到达 |
time_ok_1p3 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
| dag3 |
1.5 |
39.8% |
16.0% |
1.2% |
0.360 |
14.7 |
912 ms |
| dag3 |
1.8 |
39.5% |
21.1% |
1.2% |
0.320 |
24.5 |
935 ms |
| dag2(基线) |
1.8 |
43.8% |
28.9% |
1.6% |
0.216 |
40.0 |
956 ms |
- 结论:DAgger-3 到达 -4.3 pp(39.5 vs 43.8),time_ok -7.8 pp;碰撞/刹停略好但主指标下降。开环进一步退化(ol_fk 19.5 mm vs dag2 15.7)。负结论:继续微调(15000 步 lr 3e-4)会退化主分布,训练侧收益递减。
- 下一步:冻结编码器、只微调解码器(假设:微调退化来自表征漂移),用同一份数据与预算验证。
轮次 22:冻结编码器微调(exp: exp/dagger-deploy,负结论)
- 假设:微调导致的分布退化来自表征漂移;冻结编码器(enc + enc_norm)、只调解码器/头,可保留开环精度同时吸收 DAgger-3 的部署分布样本。
- 判据:部署口径 success > 43.8%(dag2)且 ol_fk 不退化(≤16 mm)。
- 配方:
train.py --freeze-enc(优化器只含 requires_grad 参数),数据 = 主数据 + DAgger-3 样本,lr 3e-4、5000 步,从 dag2 best 初始化;n=256 部署口径。
- 对照:dag2 + gain1.8(43.8% / 28.9% / 1.6% / 0.216 / 40.0 / 956 ms)。
- 指标:
| 模型 |
gain |
到达 |
time_ok_1p3 |
碰撞 |
ratio2s |
刹停/题 |
墙钟/题 |
ol_fk |
| 冻结编码器 |
1.5 |
39.8% |
22.3% |
1.2% |
0.293 |
25.4 |
936 ms |
15.8 mm |
| 冻结编码器 |
1.8 |
41.8% |
26.2% |
2.3% |
0.274 |
41.4 |
940 ms |
15.8 mm |
| dag2(基线) |
1.8 |
43.8% |
28.9% |
1.6% |
0.216 |
40.0 |
956 ms |
15.7 mm |
- 结论:冻结编码器确实减缓了开环退化(ol_fk 15.8 vs 全微调 19.5),但部署到达仍比 dag2 低 2.0 pp——无提升。至此训练侧四种方法(APG、反馈蒸馏、DAgger-3、冻结编码器)均未超过 dag2 基线(43.8%),训练侧在当前数据/预算下已到平台。
- 下一步(超出小规模范围,需确认):更大规模训练(24000 步从头 + 8000×2 轮 DAgger)或改特征/架构(目标条件化、状态扰动训练需重算特征)。
轮次 23:实时性口径评估(exp: exp/dagger-deploy)
- 背景:870 ms/题是仿真里整条轨迹的总时长(150–300 次规划累加),不是控制延迟。实时口径按 §9.2:每次「推理 + 安全认证」P99 < 20 ms(50 Hz,DT=0.02 s)。
- 假设:单次规划延迟可以压到 20 ms 以内。
- 判据:B=1 单题、单次规划(features + sample_k K=8 + 目标反馈 + 安全层)P99 < 20 ms。
- 优化:① DLS 目标反馈的 6 次串行有限差分改为一次批量 FK(数值差 ≤0.013°,DLS 25→10–17 ms);② 单题安全层按候选早停(首个全安全候选即停,16 点→2–4 点)。
- 指标(桌面 RTX 3090,B=1,Python;GPU 时钟抖动使 p50 在 40–65 ms 间波动):单次规划 p50 40–65 ms / p99 70–80 ms;分解:features 10–17 ms、推理 8–14 ms、DLS 反馈 10–17 ms、安全层 10–17 ms。
- 实时频率扫描(n=256,部署口径,gain1.8 + safety + partial):
| 规划节奏 |
控制周期 |
到达 |
time_ok_1p3 |
碰撞 |
刹停/题 |
| 每步(commit_n=1) |
20 ms |
42.2%(n=512) |
29.1% |
2.9% |
37.4 |
| 每 3 步(commit_n=3) |
60 ms |
36.3% |
16.4% |
1.6% |
14.3 |
| 每 6 步(commit_n=6) |
120 ms |
14.8% |
3.9% |
2.0% |
6.1 |
| 每 10 步(commit_n=10) |
200 ms |
2.0% |
— |
1.2% |
3.7 |
- 结论:当前方案不满足 50 Hz 实时(单次 40–80 ms,超预算 2–4 倍);42.2% 的成绩依赖每步规划(20 ms 节奏)。实时可行节奏下:每 3 步 → 36.3%(p50 有余量、p99 需继续优化),每 6 步 → 14.8%。实时性是当前方案的硬约束,不是仿真耗时问题。
- 下一步(需确认):① 浏览器 ONNX 路径实测(推理 P99 历史 10–12 ms;特征/安全层在 JS 端需
tests/policy_bench.cjs 实测);② 特征缓存 + 安全层粗筛,目标单次 P99 < 20 ms;③ 或接受「每 3 步规划」的 60 ms 周期(36.3%)。
轮次 24:实时性优化与新方法(exp: exp/dagger-deploy)
- 目标:准确率更高 + 效率满足 50 Hz(20 ms 控制步)。
- ① 混合节奏(规划每 3 步 + 执行时每步反馈)——负结论:plan fb1.8 + exec fb1.8 → 36.3%(与纯规划反馈的 commit_n=3 完全相同);plan fb0 + exec fb1.8 → 仅 1.6%。执行时反馈不带来额外收益(规划时的反馈已是主要贡献),此捷径不成立。
- ② 特征几何优化(有效):特征只用 8 组间隙(GP),但原实现算全部 49 组(67256 簇对)。新增
Kin.gm_groups(q, GP, cap):按 7 连杆组对过滤簇对(簇索引 → cl_g → 组对 min/max),只算 8 组。
- 数值验证:与
gaps()['gm'][:, a*7+b] 逐项一致(diff 0)。
- 延迟:gm 计算 10.4→7.1 ms(p50),单次规划省约 3 ms。
- ③ 浏览器部署:导出
webapp/models/traj_policy.onnx(dag2 best,19.8 MB,对拍误差 3.1e-6,act_scale 1.0);ik-policy.js 加全程目标反馈(fbGain)+ commit 可配;ik-policy-glue.js 支持 ?fb=&commit=(默认 fb=1.8、commit=3)。
- JS bench(Node,10 题,fb1.8+commit1):到达 0、刹车率 47.3%(每 2 次规划刹停一次)、planP50 43.8 / P99 70.5 ms。JS 安全层(5 mm 护栏 + 距离认证)比 Python(0.5 mm gap)保守,反馈+每步规划被大量拒绝。
- ④ 实时口径的关键认识:部署形态是异步规划(tick 20 ms 只执行队列;
plan() 后台跑),所以 50 Hz 的约束是「tick < 20 ms + 规划在队列耗尽前完成」,不是「单次规划 < 20 ms」。
- JS 的 tick 只做队列执行 + 投影/碰撞检查(~1.5–3 ms)→ 50 Hz 可行;
- 规划 P99 70 ms → 需要 commit ≥ 4(80 ms 队列)才不饥饿;commit=3(60 ms)会偶发饥饿。
- 准确率与规划频率的 trade-off:commit1 42.2%(不可 50Hz)、commit3 36.3%、commit6 14.8%。
- 下一步:① 在 commit=3/4 的实时节奏下找准确率提升(候选平均、dag3_fe 冻结编码器、更高 gain);② 把 gm_groups 同步到 JS(gapMatrix 只算 8 组);③ 降低 JS 安全层拒绝率(margin/认证预算调参)。
轮次 25:实时节奏下的准确率探索 + 推理提速(exp: exp/dagger-deploy)
- 目标:在 50 Hz 可行的节奏(commit=3,60 ms 周期)下提升准确率。
- 效率优化(有效):
Kin.gm_groups:特征只算 8 组间隙(数值 diff 0),features 10.4→7.1 ms;
- onnxruntime CPU 推理 3.9 ms(PyTorch 11.1 ms,部署端本来就是 ONNX);
- 单次规划 ≈ 7.1(features)+3.9(推理)+11(DLS)+8(安全)+2 ≈ 32 ms p50 / ~45 ms p99;
- 异步部署下 tick(执行步 + 碰撞检查)2–3 ms → 50 Hz 控制可行;commit=3(60 ms 队列)可覆盖规划 p99。
- 准确率尝试(n=256,commit=3,gain1.8,safety_partial):
| 方法 |
到达 |
time_ok |
碰撞 |
ratio2s |
刹停 |
| dag2 + consist(基线) |
36.3% |
16.4% |
1.6% |
0.277 |
14.3 |
| dag2 + 候选平均(select=average) |
29.7% |
20.3% |
0.4% |
0.432 |
55.9 |
| 冻结编码器模型(dag3_fe) |
34.4% |
14.8% |
2.0% |
0.332 |
15.8 |
| dag2 + commit=4 |
28.9% |
8.2% |
3.5% |
0.339 |
10.5 |
- 结论:候选平均、冻结编码器、更稀疏规划均未超过 36.3%。50 Hz 节奏下的最佳配置 = dag2 + commit=3 + consist + gain1.8 + safety_partial:到达 36.3% / 碰撞 1.6% / ratio2s 0.277(相对非实时的 42.2% 差 5.9 pp)。
- 下一步:若要把实时准确率再拉高,需要把单次规划再压到 ~22 ms 以支持 commit=2(40 ms 周期,预计 ~39%);或提升模型本身精度(训练侧)。
轮次 26:解析雅可比 DLS——去掉差分噪声,准确率大幅提升(exp: exp/dagger-deploy,新历史最佳)
- 背景:DLS 目标反馈此前用 6 次批量有限差分(ε=1e-3°)求雅可比。float32 下旋转项信噪比只有 ~1%,位置项 ~3.6%(与 autograd 对拍,见下),相当于每次规划往反馈方向注入 2–4% 的随机扰动。
- 假设:改用几何雅可比(一次 FK)可同时去噪 + 提速;闭环准确率应不降、延迟应下降。
- 判据:① 雅可比与 autograd 一致(rel < 1e-4);② n=256 commit=3 到达 ≥ 36.3%(轮次 25 基线,不劣化);③ DLS 单次延迟下降。
- 配方:
Kin.jac 几何雅可比(Jv_k = a_k×(p−o_k),Jw_k = a_k,度单位);dls_steps(analytic=True) 默认;其余同轮次 25(dag2、K=8、gain1.8、safety_partial、replan=empty)。
- 数值对拍(
ml/eval/check_dls.py):
- 位置项:解析 J 与 autograd 逐项一致(rel 0.00000);有限差分 J 自身 rel 误差 3.58%。
- 姿态项:解析 J 与差分 DLS 输出 max 0.20°/rel 5%(差的部分是 rotvec 的二阶项 Jr(e),非噪声)。
- DLS 输出:pos-only max 0.12°,pos+rot max 0.20°。
- 延迟(B=1,3090):n=1 9.3→7.1 ms,n=3 27.7→19.5 ms(每次 DLS 少 6 次批量 FK)。
- 闭环(replan=empty,analytic,n=256):
| commit |
到达 |
time_ok_1p3 |
碰撞 |
ratio2s |
刹停/题 |
| 3(FD 对照,完全复现轮次 25) |
36.3% |
16.4% |
1.6% |
0.277 |
14.3 |
| 3(解析 J) |
46.5% |
16.4% |
1.6% |
0.337 |
13.5 |
| 2(解析 J) |
50.4% |
27.0% |
2.0% |
0.287 |
22.1 |
| 1(解析 J) |
57.4% |
31.6% |
3.1% |
0.251 |
39.1 |
- n=512 复核(commit=2,解析 J):到达 49.2% / time_ok 26.2% / 碰撞 2.3% / ratio2s 0.351 / 刹停 21.0(n=256 的 50.4% 在噪声内)。
- 结论:
- 解析雅可比既快又准:commit=3 到达 36.3→46.5%(+10.2 pp),碰撞不变;commit=2 达 49.2%(历史最佳 42.2% 是 commit=1 + FD,现在 commit=2 就超过),碰撞 2.3%。
- 机理:DLS 差分雅可比在 float32 下的 2–4% 噪声被慢变误差闭环放大(轮次 4/闭环根因结论:σ>0.02×STEP 即崩);解析 J 去掉噪声后失败题里"能到 50 mm 却到不了"的那批能收敛了(err_fail 中位数 51→217 mm:失败集两极分化,成功集变大)。
- ratio2s 在 commit=3 变差(0.277→0.337)但到达更多:慢收敛题现在"最终到得了",不是"更快"。
- 新历史最佳(50 Hz 目标节奏,commit=2)= 49.2% / 碰撞 2.3% / ratio2s 0.351 / time_ok 26.2%;非实时上限(commit=1)= 57.4%(n=256,待 n=512 复核)。
- 下一步:① n=512 复核 commit=1;② 积分反馈(fb_ki,针对慢变偏差)在 commit=2 上叠加;③ 浏览器 JS 端同步解析 J;④ commit=2 的 40 ms 周期实测规划 P99(Python/JS)。
轮次 27:解析 J 后重扫增益 + 积分/缓存反馈(负结论)+ 浏览器安全层对齐(exp: exp/dagger-deploy)
- 目标:解析雅可比改变了反馈噪声结构,重扫增益;同时修浏览器部署路径的安全层(轮次 25 遗留:bench 刹车 47%、到达 0)。
- 增益重扫(commit=2,empty,analytic,n=256):
| gain |
到达 |
time_ok_1p3 |
碰撞 |
ratio2s |
刹停/题 |
| 1.8 |
50.4% |
27.0% |
2.0% |
0.287 |
22.1 |
| 2.2 |
52.0% |
29.7% |
1.6% |
0.329 |
35.3 |
| 2.5 |
49.6% |
34.4% |
1.2% |
0.334 |
47.9 |
| 2.8 |
47.7% |
34.4% |
2.0% |
0.362 |
59.8 |
- n=512 复核 gain 2.2(commit=2):到达 50.8% / time_ok 28.9% / 碰撞 1.4% / ratio2s 0.343 / 刹停 35.9。新历史最佳(50 Hz 节奏)= gain 2.2 + commit=2。
- 负结论:
- 积分反馈(fb_ki=0.3,decay0.9,限幅0.5·STEP):到达 48.0%(gain2.2 单独 52.0%),−4.0 pp。慢变偏差用积分项补偿会过冲,不采用。
- 反馈隔次复用(fb_every=2,省 ~3.5 ms/次规划):到达 46.9%(−5.1 pp)。误差方向变化比预期快,缓存不成立。
- 浏览器部署修复(有效):三个与 Python 仿真不一致的 bug 修掉后(
webapp/js/ik-policy.js):
tick 不夹关节限位(Python clamp_box 每步夹)→ q 一旦越限,认证的 inBox 永远拒绝所有候选,原地刹停到超时(certWhy.box 2650 次);现执行与候选投影都夹 LIM。
- 安全层整段拒绝 → 刹停;移植
safety_partial:整段不过时依次缩短前缀,执行到第一个不安全步。
- 新增
segCert 开关(默认 true):连续区间认证(距离下界递归)~40 ms/次,是 50 Hz 预算的主要超支项;关闭后改为离散判定「每步端点+中点 collideFree」(与 Python 安全层同口径),默认仍走严格认证,bench 用 --seg 0 测部署口径。
- JS bench(nc10,fb2.2,commit2;
node tests/policy_bench.cjs ... --seg 0):
| 集合 |
修复前 ok/reached |
修复后 ok/reached |
刹车率 |
safety P50 |
plan P50 / P99 |
| near_column_pos |
0/—(轮次 25) |
5/7 |
79.5→48.1% |
41.6→19.8 ms |
56.1→33.5 / 61.1 ms |
| near_column_pose |
0/— |
3/3 |
80.4→31.6% |
43.4→22.8 ms |
57.3→37.6 / 66.3 ms |
- 结论:实时配置定为
dag2 + 解析 J + gain2.2 + commit2 + safety_partial + replan=empty:n=512 到达 50.8%、碰撞 1.4%。浏览器端从「0 到达 + 47% 刹车」恢复到 nc 集可达,plan P50 33.5/37.6 ms;P99 仍 61–66 ms,commit=2 的 40 ms 队列会偶发饥饿,需继续压 P99(K/安全候选数/JS 特征)。
- 下一步:① Python 测
safety_try=1(只认证首选候选)对准确率的影响,若无损则 JS 同步(省多次 collideFree);② K=4/6 的准确率-时延权衡;③ JS gapMatrix 同步只算 8 组特征;④ commit=2 异步部署的饥饿率实测。
分支清理(2026-10-20)
feat/fb-mix(8e5431c):反馈混合方案的中间分支,已验证是 exp/dagger-deploy 的祖先(所有提交都在后者历史里),本地/远端分支删除,内容保留在 exp/dagger-deploy。
feat/abs-target(217a70b):绝对目标参数化负结论分支(轮次 3);打 tag archive/abs-target 保留可复现实体后,删除远端分支(本地此前已删)。
backup/pre-deep-squash、backup/pre-squash:历史备份分支,非实验方案,保留未动。
- 保留:
main(70654e4)、exp/dagger-deploy(39c870c,历史最佳)。