同一个 IDM 考生、同一道“前车急刹”,从 A4 自己写的世界换到 HighwayEnv,我最猛的刹车从 −3.69 变成了 −3.44。考生没变,变的是考场每 0.1 秒给前车“记账”的顺序。
前车 10 m/s,每秒减 5,2 秒停下,一共 20 格(每格 0.1 秒)。每一格考场要做两件事:改车速、挪位置。只是顺序不同。
俯视图,前车往右开,横轴是从开始刹车算起走了几米。竖短线是每一格结束时前车车尾的位置;灰色虚线框是真实物理(车速连续往下掉)该在的位置。车身画短了,只看它停在哪。
前车在 7.0 秒停住,这一刻我的车离它:A4 里 14.29 米,HighwayEnv 里 15.14 米。离得远一点,IDM 怕撞的那一项就小一点,所以最猛的刹车轻了 0.25。
两条线都是同一个 IDM 算出来的;最小车距两边都是 4.95 米(最后都停在前车后面约 5 米),差别只在刹车的那一下。
都不完全对。真实的车速是一直连续往下掉的,前车刹停走 10.0 米(10² ÷ 2 ÷ 5)。A4 每一格都用“减完的车速”,少算;HighwayEnv 每一格都用“减之前的车速”,多算。格子越细,两边越靠近真实值。
| 每格多长 | A4(先减速再挪) | HighwayEnv(先挪再减速) | 真实物理 |
|---|---|---|---|
| 0.1 秒(这次) | 9.50 米 | 10.50 米 | 10.00 米 |
| 0.01 秒 | 9.95 米 | 10.05 米 | 10.00 米 |
考生和题目一个字没改,分数变了 7%,原因在考场。
公司里换仿真器、升级仿真器版本以后,同一个版本的驾驶系统分数变了,第一步不是说“算法退化了”,而是先查考场:每格多长、先算什么后算什么、车的模型一不一样。
这就是为什么要有回归测试(tests/test_b1_brake.py 把 4.95 / −3.44 / 2.15 钉住了)和仿真器适配层(B2)。