From a982b0755d71a83a87281da76b8a29fa296c7793 Mon Sep 17 00:00:00 2001 From: cbb <2625274797@qq.com> Date: Tue, 20 Oct 2026 23:44:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E8=AF=84=E4=BC=B0=E5=8A=A0=E5=88=86?= =?UTF-8?q?=E5=B1=82=E8=AF=BB=E6=95=B0=E2=80=94=E2=80=94success=5Freachabl?= =?UTF-8?q?e(=E6=8E=92=E9=99=A4=E4=B8=8D=E5=8F=AF=E8=BE=BED=E7=B1=BB)/by?= =?UTF-8?q?=5Fcat=20=E5=88=B0=E8=BE=BE=E7=8E=87/brake=5Frate=5Fp90/stuck?= =?UTF-8?q?=5Fshare/n=5Fplans=5Fmean=EF=BC=9BCPU=20=E5=86=92=E7=83=9F?= =?UTF-8?q?=E5=85=A8=E9=94=AE=E4=BA=A7=E5=87=BA=E3=80=8143=20=E9=A1=B9?= =?UTF-8?q?=E6=B5=8B=E8=AF=95=E7=BB=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ml/eval/eval_cl.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/ml/eval/eval_cl.py b/ml/eval/eval_cl.py index 69133fc..695b363 100644 --- a/ml/eval/eval_cl.py +++ b/ml/eval/eval_cl.py @@ -54,9 +54,17 @@ def run(model, kin, tasks, device, bs=256, **kw): out.update({'reverse_p50': median(rr), 'reverse_mean': rr.mean().item(), 'reverse_moving_p50': median(flat['reverse_rate_moving']), # 只在动了的步上算,不被刹停稀释 'moving_share_p50': median(flat['moving_share'])}) # 活动窗内动了的步占比(=1−站住比例) - if 'brake_rate' in flat: # §9.2 判据是"刹停 <2% 推理周期",所以要按规划次数归一,不能只报绝对次数 - out.update({'brake_rate_mean': flat['brake_rate'].mean().item(), 'brake_rate_p50': median(flat['brake_rate']), + if 'brake_rate' in flat: # §9.2 要"刹停 <2% 推理周期"。均值会被长尾拖着(实测 p50=0.5% 而 mean=10%), + rr = flat['brake_rate'] # 所以必须分层报:p90 与"卡住题占比"才是能区分杠杆的读数。 + out.update({'brake_rate_mean': rr.mean().item(), 'brake_rate_p50': median(rr), 'brake_rate_p90': rr.quantile(0.9).item(), + 'stuck_share': (rr > 0.2).float().mean().item(), 'n_plans_mean': flat['n_plans'].mean().item()}) + cats = [t.get('cat') for t in tasks] # 分层读数:D 类按定义不可达,混在分母里会让"可达任务到达率"失真 + reach = torch.tensor([c != 'D' for c in cats]) + if reach.any(): + out['success_reachable'] = (ok[reach].float().mean().item()) + out['by_cat'] = {c: [int(sum(1 for x in cats if x == c)), int(sum(1 for i, x in enumerate(cats) if x == c and ok[i]))] + for c in sorted({c for c in cats if c})} if 'backoff' in flat and flat['backoff'].any(): # backoff=缩步顶上的次数;brakes 现在只记连最小档都不安全的 out['backoff_mean'] = flat['backoff'].mean().item() # ⇒ 原来的"全拒"事件数 = 两者之和 out['reject_all_mean'] = (flat['backoff'] + flat['brakes']).mean().item()