4、决策空间与目标空间:映射关系、可行域、非劣解集
做多目标优化,你最先得搞清楚两个“世界”。
一个是决策空间——你手里能调的那些参数、变量。另一个是目标空间——你真正关心的那些性能指标。
我开始做工程优化那会儿,也把这两个空间混为一谈。后来有一次,我在调一个发动机进气道设计,总盯着目标值看,却死活找不到对应决策变量的合理范围。嗯,那才真正理解了映射关系的重要性。
4.1 决策空间:你能操控的世界
决策变量就是你可以自由调整的所有输入参数。把它们放在一起,就构成了一个决策向量:
x = [x₁, x₂, ..., xₙ]ᵀ
每个变量都有自己的上下界——比如温度不能超过材料耐受上限,厚度不能低于工艺最小值。这些边界限定了决策向量的可行取值范围,记作 Ω:
Ω = { x ∈ ℝⁿ | xᵢₘᵢₙ ≤ xᵢ ≤ xᵢₘₐₓ, i=1..n }
4.2 目标空间:你在乎的结果
每一个决策向量 x 通过目标函数映射到一组目标值:
f(x) = [f₁(x), f₂(x), ..., fₘ(x)]ᵀ ∈ ℝᵐ
这 m 个目标值构成目标空间中的一个点。目标空间的维度就是你关心的指标个数。注意,目标之间往往存在冲突——减重就会降刚度,提速就会增油耗,这是多目标优化的核心难题。
4.3 可行域:你能用的“地盘”
不是所有决策变量组合都能用。约束条件会砍掉一部分区域:
gⱼ(x) ≤ 0, j=1..p
hₖ(x) = 0, k=1..q
那些同时满足所有约束的决策变量,才属于可行决策域。它们在目标空间对应的点集,就是可行目标域。
举个例子,我做过一个物流路径优化,约束包括车辆载重、时间窗、燃油费。决策空间是路径节点的顺序排列,但真正合法的路径只占整个排列空间的一小部分。
4.4 非劣解集:Pareto 前沿的“根”
非劣解(Pareto最优解)在目标空间里的像就是Pareto前沿。但非劣解集本身是决策空间里的一个集合:
P_S = { x ∈ Ω_可行 | 不存在 x' ∈ Ω_可行 使得 f(x') 支配 f(x) }
这个集合在决策空间里长什么样?我见过很多种:
- 连续曲线或曲面——常见于光滑凸问题
- 离散点集——组合优化问题特有
- 多段不连续区域——约束强烈非线性时出现
搞懂这个结构对算法设计很有用。比如你在NSGA-II里做交叉变异,如果知道非劣解集在决策空间里大致是一条光滑曲线,就可以针对性地设计交叉算子,提高搜索效率。
4.5 映射关系总结表
| 概念 | 决策空间 | 目标空间 |
|---|---|---|
| 元素 | 决策向量 x ∈ ℝⁿ | 目标向量 f(x) ∈ ℝᵐ |
| 可行域 | Ω_可行(变量+约束) | f(Ω_可行)(映射后区域) |
| 非劣解集 | P_S(决策空间中的点集) | Pareto前沿(目标空间中的像) |
| 映射特点 | 可以是多对一 | 不可逆(一般无单一起点) |
下面这张SVG图把上述关系串起来了——我画的时候把决策空间放在左边,目标空间放在右边,中间用箭头表示映射函数 f(·)。
4.6 如何在实际项目中应用这些概念
我习惯先理清决策空间和目标空间的维度,再用表格列出所有变量和约束。这样做的好处是:
- 发现冗余变量——如果一个变量的变化对任何目标都没影响,那它就不该出现在优化里。
- 定位约束冲突——两个约束可能直接矛盾,导致可行域为空。这种情况在目标空间中非常明显——你会发现所有候选点都落在不可行区。
- 理解Pareto前沿形状——非劣解集在决策空间中的连通性会影响MOEA的收敛难度。不连通的时候,算法容易陷入局部Pareto前沿。
我记得有一次给团队做报告,我用两张图对比展示——左边是决策空间里的非劣解集散点,右边是目标空间里的Pareto前沿。项目经理立刻就看明白了:原来那些看起来性能差不多的最终解,在参数上差别很大。从那以后,我们团队每次出优化结果都会附带一张“决策空间→目标空间”的双图。
现在你自己做优化的时候,也试试这个习惯。把两个空间的映射关系刻到脑子里,很多困惑自然就解开了。