4、ε-约束法:基本原理、算法流程、在ACC决策中的案例

4.1 为什么需要ε-约束法?

好,咱们接着聊多目标优化。前面讲了加权法,简单粗暴,但有个硬伤——权重怎么定?

我记得有一次做ACC(自适应巡航)的决策算法,团队里吵了三天。安全工程师说“安全权重必须0.8”,舒适性工程师说“你开什么玩笑,乘客会晕车的”。最后谁也没说服谁。

加权法的问题就在这里。你很难事先知道哪个目标更重要。而且有些目标之间压根儿就不是线性关系。你想想看,把碰撞时间和加速度加权求和,这物理意义是什么?说实话,我自己都觉得牵强。

ε-约束法就是来解决这个问题的。它的思路很直接:

  • 选一个你最重要的目标,作为主优化目标
  • 其他目标,设定一个可接受的阈值(ε),作为约束条件
  • 然后求解这个单目标优化问题

说白了,就是“保一个,限其他”。

4.2 基本原理

数学上,ε-约束法是这样定义的:

假设我们有m个目标函数 f₁(x), f₂(x), ..., fₘ(x)。我们选其中一个作为主目标,比如 f₁(x)。那么问题就变成:

min f₁(x)
s.t. f₂(x) ≤ ε₂
     f₃(x) ≤ ε₃
     ...
     fₘ(x) ≤ εₘ
     x ∈ S

这里的ε₂, ε₃, ..., εₘ就是我们对其他目标设定的上限。S是原始问题的可行域。

关键点:通过调整ε的值,我们可以得到不同的Pareto最优解。ε越小,约束越紧,主目标可能越差;ε越大,约束越松,主目标可能越好。

我在项目中遇到过一个问题:ε设得太紧,结果可行域直接空了,算法报错。嗯,这个后面会讲怎么处理。

4.3 算法流程

我个人习惯用下面的流程来实现ε-约束法。你照着走,基本不会出大问题:

  1. 确定主目标:选一个你最关心的目标。在ACC里,我一般选安全性(比如最小碰撞时间TTC)。
  2. 设定ε值:对其他目标设定可接受的阈值。比如舒适性(加速度变化率)不超过2 m/s³,燃油经济性不超过某个值。
  3. 求解单目标问题:用你熟悉的优化算法(比如SQP、遗传算法)求解。
  4. 检查可行性:如果无解,说明ε太紧了,需要放松。
  5. 调整ε,重复:如果你想得到多个Pareto解,就改变ε值,重复步骤2-4。

我的小技巧:ε的初始值可以从每个目标的单目标最优值开始。比如先单独优化舒适性,得到最优值J_comf*,然后ε可以设为1.1×J_comf*到1.5×J_comf*之间。这样既保证可行,又能探索Pareto前沿。

4.4 在ACC决策中的案例

好,咱们来点实际的。ACC决策中,我们通常要考虑三个目标:

  • 安全性:用最小碰撞时间TTC表示,越大越安全
  • 舒适性:用加速度变化率jerk表示,越小越舒适
  • 跟车效率:用与前车的速度差表示,越小越稳定

这里有个坑——TTC是越大越好,但我们的优化问题通常是求最小。所以我会把安全性目标取负,变成求最小化 -TTC。

假设我们选安全性作为主目标,舒适性和跟车效率作为约束:

min -TTC(a)
s.t. jerk(a) ≤ ε_jerk
     |v_ego - v_target| ≤ ε_speed
     a_min ≤ a ≤ a_max
     jerk_min ≤ jerk ≤ jerk_max

这里的a是加速度,是我们的决策变量。

我曾经做过一个测试,ε_jerk分别取1.0、1.5、2.0 m/s³,看看结果有什么不同:

ε_jerk (m/s³) TTC (s) 实际jerk (m/s³) 速度差 (m/s) 评价
1.0 2.8 0.95 0.3 舒适但安全余量小
1.5 3.5 1.42 0.2 平衡点
2.0 4.1 1.88 0.1 安全但舒适性差

你看,ε_jerk从1.0放宽到2.0,TTC从2.8秒提升到4.1秒。这就是ε-约束法的直观效果——你牺牲一点舒适性,换来更多的安全余量。

避坑指南:我曾经把ε_jerk设到0.5 m/s³,结果算法直接报错——可行域为空。为什么?因为物理上,在紧急情况下,你不可能用那么小的jerk完成避撞。所以ε的设定一定要结合物理约束,不能拍脑袋。

4.5 ε-约束法 vs 加权法

我个人的经验是:

  • 加权法适合目标之间量纲一致、权重可以明确给出的场景。比如两个成本函数,都是钱。
  • ε-约束法适合目标量纲不同、且有一个目标明显更重要的场景。比如ACC里安全第一,其他都是“在保证安全的前提下尽量好”。

你想想看,在ACC里,你敢说“安全权重0.6,舒适权重0.4”吗?万一某个场景下,加权后的最优解恰好让TTC只有1.5秒,你敢用吗?

但ε-约束法就不一样。你直接说“TTC必须大于3秒”,然后在这个前提下尽量优化舒适性。这个逻辑,工程师和项目经理都能接受。

4.6 小结

ε-约束法,说白了就是“抓大放小”。把最重要的目标拎出来,其他的设个底线就行。这个方法在ADAS决策中特别实用,因为安全永远是底线。

下一章我会讲NSGA-II,那是另一种思路——直接找出一堆Pareto解,让你自己选。到时候咱们再对比一下两种方法的优劣。

一句话总结:ε-约束法不是让你在所有目标之间找平衡,而是让你在保证底线的前提下,把最重要的目标做到极致。