我们首先要引入包含不等式约束的优化问题,标准形式如下:
(1)
f(x)是目标函数,而后面分别是一系列的不等式约束和等式约束。
我们首先明确几个概念:
可行点(可行解):所有满足约束的点x。
可行域:所有可行点组成的点集,记为R。正式写出来就是:
最优点(最优解):满足约束(也就是处于可行域之内)并且使目标函数达到最小的点,记为x*。
最优值:如果找到了x*,p* = f(x*) 就是最优值。
明确了这些概念以后我们就接着说下面的内容了。
与上节所说的只包含等式约束的情况类似,我们定义拉格朗日函数如下:
我们来看看,这与上节的拉格朗日函数有什么不同?多了一系列的不等式约束对应的项,所以也多了一系列的拉格朗日乘子。在这里需要强调的是,所有的λi必须是大于等于0的(也即是不等式约束对应的乘子要求大于等于0,我们记为λ≥0,意思是每个都λi≥0)。至于为什么要这样要求,后面自然可以看出来。
接下来我们定义一个重要的函数,我们定义拉格郎日对偶函数(the Lagrange dual function)如下:
(2)
所以拉格朗日对偶函数就是把看成x的函数所找到的最小值。找到这个最小值有什么意义呢?
我们先把结论写下来,这个结论十分重要,是本节论述的目的:
对偶函数产生了原问题(1)最优值p*的一个下界,也就是说,对于任意的λ≥0和任意的μ来说,有:
(3)
那么如何证明(3)呢?
这个证明步骤十分简洁。假设x*是原问题(1)中的最优解,也就是f(x*) = p*。
最后两行的推导是考虑到x*是在可行域R内的,所以肯定有,当然前提是λ≥0,这也就是为什么在一开始要做这个规定的原因了。
我们如何理解这个不等式(3)呢?下面给出两个直观的解释:
解释一:线性逼近的解释
我们首先重写问题(1),就是把问题(1)换个更加紧凑的方式来表达,首先我们定义示性函数:
同样我们也可以定义另外一个示性函数:
有了这两个示性函数的帮助,现在我们可以把问题(1)重新写成一个没有约束的形式:
(4)
我们来看看这个优化问题(4)和问题(1)是等价的么?我们可以把(4)的后面两大项看做是对违反约束条件的x的惩罚函数。起的作用是对违反不等式约束的x进行“无限的”惩罚,也就一旦,惩罚就等于无穷大。而起的作用是对违反等式约束的x进行惩罚,一旦,惩罚就为无穷大。这样对(4)中目标函数的优化跟对(1)中目标函数在约束条件下的优化就是同一回事,是不是?也就是说,(1)和(4)这两个问题是等价的问题,但是在(4)中约束被融合到目标函数中来了。
现在我们再回头看看(2),也就是拉格朗日对偶函数,它也是个优化问题,我们对比它所优化的函数和(4)中所优化的函数,把它们重写在一起:
(2)中的目标函数
(4)中的目标函数
可见在问题(2)和问题(4)中,我们优化的目标函数区别在于惩罚项不同,(4)中的惩罚项是无限的,就是说一旦违反约束,就施加无穷大的惩罚;而在(2)中我们的惩罚项是线性的,就是说随着gi(x)和hi(x)的不同,惩罚项是线性变化的。所以(2)和(4)中需要优化的目标函数有很大的不同,用(2)来逼近(4)是很不准确的。但是我们可以看出,对于任意的u,任意的λ≥0和任意的μ来说都有:
(我们把λ限制为大于等于0了)
所以在任意点,(2)中的目标函数的值都是小于(4)中的目标函数的值,所以(2)中找到的最优值肯定是小于(4)中找到的最优值的。再结合前面说的(1)和(4)是等价的问题,所以不等式(3)是成立的。
解释二:交换max和min的次序
我们首先可以看出:
为什么会有这个结果呢?当x满足约束的时候,也就是对所有的i来说有并且,如果我们想通过调整λ和μ让变大怎么办呢?只有让λ全部为0(注意λ只能大于等于0),这样就消去了小于0的项,至于,无论μ怎么变都是没有影响的。所以当x属于可行域的时候上式的结果是f(x)。如果x违反了约束呢?在做sup运算的时候只需要对满足和的项对应的乘子定为+∞,而把其他的项对应的乘子设为0,就可以让整个式子的结果变为无穷大。
所以我们可以看出来,在问题(1)中的带约束的优化问题和直接优化是一回事,也就是说:
现在我们把inf和sup两个运算符调换次序,显然有:
我们重写(2)式:
(2)
可以看出结论了,也就是λ≥0时(3)式成立:
(3)
好了,费了半天的劲我们说明了一个问题,就是不等式(3)是怎么来的。
总结一下,不等式(3)用文字叙述就是:
如果我们把拉格朗日函数看做是x的函数,然后取下确界(注意:是在整个定义域里取下确界,而不是仅仅在可行域里取值,也就是说取下确界时对x是没有约束的),那么得到的结果就是原优化问题(1)的最优值的一个下界。
至于我们得到这个结果有什么用,下节再说。