本意是在论文阅读中反复遇到不等式约束条件的类似问题,不过可惜地是每次想用的时候,几乎总是卡壳,不能满意地解决此类问题,故在这汇总,加以整理,以期熟练掌握其中细节。
当然也有可能出现周志成老师博客指出的问题
在优化理论,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]]
我们可知道
或者
函数 取得最小值。
当然也可以用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) :这时约束不等式是有效的, ,则 且 ,目标函数的极小值是 。
源自下面链接,有兴趣可以检验正确性。在文末我们试着做第一问。
对于参考文献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}]
注意这个警告,可能漏解。
改成
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}]
较好。
ReplaceAll[-x*y, #]& /@ s1
得到
最小解是 ,则原问题最大值是 , 是最大值解。
和原文分析一致。
未完待续