在本科建模学优化的时候,老师说复杂情况下不可能求出目标函数的最优解,用优化解代替就可以了,当时我还信了。直到研究生『工程优化』学了填充函数法,才知道在『多决策变量、单目标函数』的复杂情况下,理论上是可以求出目标函数的最优值的。
而对于『多决策变量、多目标优化』的问题中,还是进化算法等方法较为实用。以遗传算法为例,直接一波种群撒到可行域中,这样会比传统方法便捷一些。
填充函数定义
在难以直接求解$\min f(x)$时,我们可以使用填充函数法。
假设,$f(x)$在$R^n$中连续可微,且在可行域内有有限个极值点,所以每一个极值点都是孤立的。设 $x_k^\ast$ 是目前得到的 $f(x)$ 的一个局部极小点。在此处构造一个新的函数$p(x,x_k^\ast)$,称为填充函数。填充函数应具有的性质如下:
- $x_k^\ast$是填充函数的一个局部极大点;
- 目标值大于$f(x_k^\ast)$的区域,填充函数没有驻点;
- 目标值小于$f(x_k^\ast)$的区域,存在一点是填充函数的极小点;
用数学语言描述:
- $x_k^\ast$是$p(x,x_k^\ast)$的严格极大点;
- $\forall x \in \Omega_1,\nabla p(x,x_k^\ast)\neq 0$,$\Omega_1=\{x\in \Omega | f(x) > f(x_k^\ast),x\neq x_k^\ast\}$,$\Omega$为可行域;
- 若$\Omega_2=\{x\in\Omega|f(x)<f(x_k^\ast),x\in\Omega\}$非空,则存在一点$x_k’\in\Omega_2$,它是$p(x,x_k^\ast)$的局部最小点。
则称$p(x,x_k^\ast)$是$f(x)$在$x_k^\ast$处的一个填充函数。画图如下,蓝色为函数图象,红色为填充函数图象。
算法步骤
- 第$k$次迭代:求$f(x)$一个局部极小点$x_k^\ast$;
- 构造$x_k^\ast$处的填充函数$P(x,x_k^\ast)$,求填充函数的极小点$x_k’$。根据前述条件,此时该点对$f(x)$而言,是比$x_k^\ast$更好的点,它在$f(x)$一个更深的谷里;
- 以$x_k’$为初始点,对$f(x)$求极小点得$x_{k+1}^\ast$,此点比$x_k^\ast$位于$f(x)$更深的谷里。令$k=k+1$,转Step2。
这样逐步迭代,直到函数再也没有局部最小点。如上图第二次迭代后的结果:
Q函数
一种只有一个参数的填充函数是($a$是参数):
\begin{equation}
Q(x,a)=-(f(x)-f(x_k^\ast))\exp\Bigl(x-x_k^\ast\Bigr)^2
\end{equation}
证明:略。