4、经典多目标优化算法(上):加权求和法、ε-约束法、目标规划法,优缺点分析。
各位同学,咱们今天聊聊多目标优化里的几个“老前辈”。
做材料设计,你很少只盯着一个指标。比如我要设计一个锂电池正极材料,既要能量密度高,又要循环寿命长,还得成本低。这三个目标往往互相打架。你想想看,能量密度上去了,循环寿命可能就下来了。这就是典型的多目标优化问题。
我早年做合金配方优化时,就吃过这个亏。当时只盯着强度一个目标优化,结果强度是上去了,韧性差得一塌糊涂,一掰就断。从那以后,我再也不敢只看单一目标了。
今天咱们先讲三个最经典的算法:加权求和法、ε-约束法和目标规划法。它们虽然“老”,但非常实用,很多现代算法也是从它们的思想上演化来的。
4.1 加权求和法:最简单,也最容易被坑
加权求和法的思路,说白了就是把多个目标揉成一个。
比如你有两个目标:f1(比如成本)和 f2(比如性能)。你给每个目标分配一个权重 w1 和 w2,然后加起来:
minimize F = w1 * f1(x) + w2 * f2(x)
subject to: x ∈ S
其中 w1 + w2 = 1, w1, w2 ≥ 0
嗯,这里要注意。权重怎么定?这完全取决于你的偏好。我个人习惯是先跑几组不同权重的解,看看帕累托前沿大概长什么样,再决定权重。
- 实现简单,代码就几行
- 计算效率高,一次优化出一个解
- 适合目标重要性明确的情况
- 权重选择主观性强,不同权重结果差异巨大
- 无法处理非凸的帕累托前沿——这是个大坑
- 一次只能得到一个解,想得到多个解需要反复跑
我曾经在一个高熵合金项目中用加权求和法,怎么调权重都得不到理想结果。后来才发现,帕累托前沿是非凸的,加权求和法根本找不到凹进去的那部分解。所以,如果你不确定前沿形状,慎用加权求和法。
4.2 ε-约束法:把目标变成约束
这个方法很有意思。它的核心思想是:只优化一个主要目标,把其他目标变成约束条件。
比如,你主要关心性能,但成本不能太高。那你就把成本设为一个上限 ε,然后优化性能:
minimize f1(x)
subject to: f2(x) ≤ ε2
f3(x) ≤ ε3
x ∈ S
你想想看,这样做的好处是什么?你可以通过调整 ε 的值,系统地探索帕累托前沿。我建议你从宽松的约束开始,逐步收紧,这样能看到完整的 trade-off 关系。
- 能处理非凸的帕累托前沿
- 每次优化只针对一个目标,问题简化了
- 通过调整 ε,可以生成多个帕累托解
- ε 值的选取也需要经验,太松或太紧都不行
- 如果约束太多,可行域可能为空
- 计算量比加权求和法大一些
我在做聚合物复合材料设计时,经常用 ε-约束法。我会先确定一个“必须满足”的硬约束,比如成本上限,然后在这个约束下优化其他性能。这样出来的结果,工程上更可行。
4.3 目标规划法:给每个目标设个“小目标”
目标规划法,说白了就是给每个目标设定一个期望值,然后尽量去接近它。
比如,我希望成本低于 100 元,性能高于 80 分。那优化目标就是让实际值尽可能接近这些目标值。数学上,它通常写成:
minimize Σ |fi(x) - Ti|^p
subject to: x ∈ S
其中 Ti 是第 i 个目标的目标值,p 是范数(常用 p=1 或 p=2)。
我个人觉得,这个方法最贴近工程师的思维习惯。因为我们做设计时,心里往往有个“理想值”。比如我希望这个催化剂的转化率能达到 95%,选择性达到 90%。目标规划法就是帮你找到最接近这个理想点的实际方案。
- 直观,容易理解
- 可以处理优先级不同的目标(加权目标规划)
- 能找到“折中”的解,而不是极端解
- 目标值 Ti 的设定很关键,设得不好结果会偏
- 如果目标之间严重冲突,可能找不到满意的解
- 对非凸问题也可能失效
我曾经在优化热电材料时,给电导率和塞贝克系数都设了很高的目标值。结果优化出来的解,两个指标都离目标很远。后来我才意识到,这两个参数本身就有物理上的制约关系,不可能同时达到最优。所以,设定目标值前,一定要先搞清楚目标之间的物理关系。
4.4 三种算法对比总结
好了,咱们把这三个算法放在一起对比一下。我整理了一个表格,方便你快速查阅:
| 特性 | 加权求和法 | ε-约束法 | 目标规划法 |
|---|---|---|---|
| 核心思想 | 多目标变单目标 | 一个目标优化,其余做约束 | 接近预设目标值 |
| 处理非凸前沿 | ❌ 不能 | ✅ 能 | ⚠️ 部分能 |
| 参数设置难度 | 中等(权重) | 较高(ε值) | 中等(目标值) |
| 计算效率 | 高 | 中等 | 高 |
| 工程实用性 | 一般 | 好 | 好 |
| 适用场景 | 目标重要性明确,前沿凸 | 有硬约束,需要探索前沿 | 有明确期望值 |
4.5 知识体系结构图
为了让你更直观地理解这三种算法的关系,我画了一张图:
嗯,今天的内容就到这里。这三种算法虽然经典,但各有局限。下一章咱们会讲更高级的算法,比如 NSGA-II 和 MOEA/D,它们能更好地处理复杂的多目标问题。不过,先把这三个基础算法吃透,后面的内容你会学得更轻松。