面对复杂的工程数学问题,学术界和工业界最常规的解题逻辑,就是通过各种数学工具将复杂问题降维到可以用成熟算法求解的形态。
下面总结了三大转化中最经典的常规思路和数学工具:
1.多目标转化为单目标(MOO--->SOO)
真正的多目标优化(寻找帕累托前沿)通常计算成本极高。为了求解,最常规的做法是将其"坍缩"为单目标问题:
- 加权和法(最直接):给每个目标函数分配一个权重 w i w_i wi ,将它们线性相加组合成一个单目标函数 F ( x ) = ∑ w i f i ( x ) F(x) = \sum w_i f_i(x) F(x)=∑wifi(x) 。权重的选择代表了决策者的主观偏好。
- ϵ \epsilon ϵ-约束法:保留其中最核心的一个目标作为优化的目标函数,将其他所有目标转化为不等式约束。例如,只最小化上行误差,但要求下行速率必须大于某个阈值 ϵ \epsilon ϵ。
- 理想点法/乌托邦点法:假设存在一个完美但实际上达不到的"乌托邦解"(所有指标都达到极值),然后构建一个新的单目标函数:最小化当前解与这个"乌托邦解"之间的空间距离。
2.多变量转化为单变量/降维解耦(Coupled--->Decoupled)
当目标函数中包含多个互相缠绕的变量,直接求导会得到极其复杂的非线性方程,常规的转化思路是"分而治之":
- 块坐标下降法(BCD)/交替优化法(AO):核心思想是"固定其他,只优化一个"。第一轮固定变量 Y Y Y 来求解使得目标函数最优的 X X X;第二轮固定刚求出的 X X X 去求解 Y Y Y,如此反复迭代直到收敛。
- 交替方向乘子法(ADMM):针对更复杂的耦合情况,通过引入辅助变量,把一个含有耦合变量的大问题,撕裂成几个可以并行求解的小问题,然后通过乘子(惩罚项)强行让它们在迭代中达成一致。
- 变量替换/消元法:如果多个变量之间存在严格的等式约束关系,直接用一个变量表达另一个变量并代入目标函数,从而在数学维度上直接消灭一个变量。
3.有约束转化为无约束(Constrained--->Unconstrained)
计算机极其讨厌带约束的优化问题(尤其是带有不等式约束的),因为边界的存在打破了单纯的"梯度下降"逻辑。常规的转化思路是将约束"揉"进目标函数里:
- 拉格朗日乘子法与KKT条件:对于等式约束 h ( x ) = 0 h(x)=0 h(x)=0,引入乘子 λ \lambda λ,构造新的拉格朗日函数 L ( x , λ ) = f ( x ) + λ h ( x ) \mathcal{L}(x, \lambda) = f(x) + \lambda h(x) L(x,λ)=f(x)+λh(x)。求驻点时,原本的有约束求极值就变成了对 L \mathcal{L} L 进行无约束求导。对于不等式约束,则扩展为 KKT 条件。
- 惩罚函数法:在原目标函数后面加上一个"惩罚项"。如果当前解满足约束,惩罚项为零;一旦当前解越界违规,惩罚项就会变得无穷大。这迫使原本的无约束搜索算法"自觉"地退回到可行域内。
- 障碍函数法/内点法:与惩罚函数类似,但在边界处设置一道"绝对屏障"(例如使用对数函数 − log ( g ( x ) ) -\log(g(x)) −log(g(x)))。只要解试图靠近约束边界,目标函数的值就会趋向无限大,从而把解死死限制在可行域内部。