本意是在论文阅读中反复遇到不等式约束条件的类似问题,不过可惜地是每次想用的时候,几乎总是卡壳,不能满意地解决此类问题,故在这汇总,加以整理,以期熟练掌握其中细节。
当然也有可能出现周志成老师博客指出的问题
在优化理论,Karush-Kuhn-Tucker (KKT)条件是非线性规划(nonlinear programming)最佳解的必要条件。KKT条件将Lagrange乘数法(Lagrange multipliers)所处理涉及束缚等式的约束优化问题推广至不等式。在实际应用上,KKT条件(方程组)一般不存在代数解,许多优化算法可供数值计算选用。而我恰好每次试图追寻代数解,这或许是我失败的原因之一。
当然我们可以考虑软件求解,的确是有效策略之一,但是注意也不是万能的,大多数采用人工干预,有时候能化繁为简,反而得到最终求解结果。如果过分依赖反而求不出来,结果有时候也不能轻易相信,至少要适当检验。否则内置算法出现bug造成的后果也不可估量。
- 由于是自学,本文很大部分依赖网络资源,如有读者,慎重阅读。如有错误,欢迎大佬指正。主要参考下面两篇文章:
十分感谢他们的工作。后面会结合自己体会慢慢写出更好的分析。
- 解此类不等式当然方法不止一种,比如碰巧可以用一些微调整法。
在数学中,卡罗需-库恩-塔克条件(英文原名:Karush-Kuhn-Tucker Conditions 常见别名:KKT条件,Kuhn-Tucker条件)是在满足一些有规则的条件下,一个非线性规划(Nonlinear Programming)问题能有最优化解法的一个必要条件。这是一个广义化拉格朗日乘数的成果。
我们的问题的模型:考虑以下非线式最优化问题:![]()
![]()
![]()
是需要最小化的函数,其中
是不等式约束,
是等式约束,
和
分别为不等式约束和等式约束的数量。
不等式约束问题的必要和充分条件初见于卡罗需(William Karush)的硕士论文,之后在一份由W.库恩(Harold W. Kuhn)及塔克(Albert W. Tucker)撰写的研讨生论文出现后受到重视。
考虑标准约束优化问题(或称非线性规划):
定义Lagrangian 函数
其中
是对应
的Lagrange乘数,
$是对应
的Lagrange乘数(或称KKT乘数)。KKT条件包括
给定一个目标函数 ,我们希望找到
,在满足约束条件
的前提下,使得
有最小值。这个约束优化问题记为
为方便分析,假设 与
是连续可导函数。Lagrange乘数法是等式约束优化问题的典型解法。定义Lagrangian函数
其中 称为Lagrange乘数。Lagrange乘数法将原本的约束优化问题转换成等价的无约束优化问题
计算 对
与
的偏导数并设为零,可得最优解的必要条件:
其中第一式为定常方程式(stationary equation),第二式为约束条件。解开上面 个方程式可得
的stationary point
以及
的值(正负数皆可能)。
当目标函数为2元时候约束情形:假设有函数: ,要求其极值(最大值/最小值),且满足条件
,
为常数。我们可以给出下面简易证明
设函数 在
点处有极值
,且在
点的邻域内连续。则在
点处有
另有一常值函数 两函数在
点处的全微分为
,
由于 和
是任取的无穷小量,故该线性方程组的系数成比例,有
即
将上二式分别乘以 和
,再相加并积分,得到一新函数
那么,求原函数极值的问题就转化为求该函数极值的问题。
类似地,这种求极值的方法也可以推广到多维函数 。
求此方程的最小值:
同时未知数满足
因为只有一个未知数的限制条件,我们只需要用一个乘数
将所有 方程的偏微分设为零,得到一个方程组,最小值是以下方程组的解中的一个:
接下来就是解方程,这里可以采用Mathematica软件
s1=Solve[{2 x*y + 2 l*x==0, x^2 + 2 l*y==0,
x^2 + y^2 - 1==0},{x, y, l}];
ReplaceAll[x^2 y, #]& /@ s1
s1[[3]]
s1[[5]]
![](https://pic2.zhimg.com/v2-04fbe6e9c3699516aacc67647efce52d_r.jpg)
我们可知道
或者
函数 取得最小值。
当然也可以用Mathematica求解
Minimize[{x^2 y, x^2 + y^2==1},{x, y}]
接下来我们将约束等式 推广为不等式
。考虑这个问题
约束不等式 称为原始可行性(primal feasibility),据此我们定义可行域(feasible region)
。假设
为满足约束条件的最佳解,分开两种情况讨论:
(1) ,最佳解位于
的内部,称为内部解(interior solution),这时约束条件是无效的(inactive);
(2) ,最佳解落在
的边界,称为边界解(boundary solution),此时约束条件是有效的(active)。
这两种情况的最佳解具有不同的必要条件。
(1)内部解:在约束条件无效的情形下, 不起作用,约束优化问题退化为无约束优化问题,因此驻点
满足
且
。
(2)边界解:在约束条件有效的情形下,约束不等式变成等式 ,这与前述Lagrange乘数法的情况相同。我们可以证明驻点
发生于
,换句话说,存在
使得
,但这里
的正负号是有其意义的。因为我们希望最小化
,梯度
(函数
在点
的最陡上升方向)应该指向可行域
的内部(因为你的最优解最小值是在边界取得的),但
指向
的外部(即
的区域,因为你的约束是小于等于0),因此
,称为对偶可行性(dual feasibility)。
因此,不论是内部解或边界解, 恒成立,称为互补松弛性(complementary slackness)。整合上述两种情况,最佳解的必要条件包括Lagrangian函数
的定常方程式、原始可行性、对偶可行性,以及互补松弛性:
这些条件合称为Karush-Kuhn-Tucker (KKT)条件。如果我们要最大化 且受限于
,那么对偶可行性要改成
。
上面结果可推广至多个约束等式与约束不等式的情况。
考虑标准约束优化问题(或称非线性规划):
定义Lagrangian 函数
其中
是对应
的Lagrange乘数,
$是对应
的Lagrange乘数(或称KKT乘数)。KKT条件包括
考虑这个问题
其中 为实数。写出Lagrangigan函数
KKT 方程组如下:
求偏导可得 且
,分别解出
且
。代入约束等式
或
。合并上面结果,
最后再加入约束不等式 或
。底下分开三种情况讨论。
(1) :不难验证
满足所有的KKT条件,约束不等式是无效的,
是内部解,目标函数的极小值是
。
(2) :如同1,
满足所有的KKT条件,
是边界解,因为
。
(3) :这时约束不等式是有效的,
,则
且
,目标函数的极小值是
。
源自下面链接,有兴趣可以检验正确性。在文末我们试着做第一问。
![](https://pic2.zhimg.com/v2-c0fe011301bd00b6e220032f8d22053d_r.jpg)
![](https://pic4.zhimg.com/v2-080455bda2ed789eb1a3ba4114fcb2ab_r.jpg)
![](https://pic4.zhimg.com/v2-2802e7ee722abd217fad14ed3f3fca27_r.jpg)
![](https://pic2.zhimg.com/v2-4f19f35bcb8e85772bad5749c9edd881_r.jpg)
![](https://pic4.zhimg.com/v2-defe4f092a925ccdd24bcc61b8409a97_r.jpg)
对于参考文献1我们采用方法如下:
注意文中将求最大值作为标准型,我们还是按照自己的思路来;只需将目标函数改为 即可。我们构建KKT辅助条件
KKT条件如下:
我们进行求解即可,当然可以按照文中那样正规分析,此时也可以借助数学软件求解:
s1=Solve[-y + \\[Lambda]1 - \\[Lambda]2==0 && -x + 2 \\[Lambda]1*y - \\[Lambda]3==0 && \\[Lambda]1 (x + y^2 - 2)==0 && \\[Lambda]2*x==0 && \\[Lambda]3*y==0,{x, y, \\[Lambda]1, \\[Lambda]2, \\[Lambda]3}]
![](https://pic2.zhimg.com/v2-7bb9f39e714d4b67e6d531c1dfd62b6d_r.jpg)
注意这个警告,可能漏解。
改成
Reduce[-y + \\[Lambda]1 - \\[Lambda]2==0 && -x + 2 \\[Lambda]1*y - \\[Lambda]3==0 && \\[Lambda]1 (x + y^2 - 2)==0 && \\[Lambda]2*x==0 && \\[Lambda]3*y==0,{x, y, \\[Lambda]1, \\[Lambda]2, \\[Lambda]3}]
较好。
![](https://pic2.zhimg.com/v2-ff8af3b532b68483a932117fccf08d09_r.jpg)
ReplaceAll[-x*y, #]& /@ s1
得到
最小解是 ,则原问题最大值是
,
是最大值解。
和原文分析一致。
未完待续