在优化理论中,KKT条件是非线性规划(nonlinear programming)最佳解的必要条件。KKT条件将lagrange乘数法(Lagrange multipliers)中的等式约束优化问题推广至不等式约束。本文从Lagrange乘数法推导KKT条件。

给定一个目标函数f:Rn→Rf:Rn→R,我们希望找到x∈Rnx∈Rn ,在满足约束条件g(x)=0g(x)=0的前提下,使得f(x)f(x)有最小值。这个约束优化问题如下:

minimize f(x)f(x) 
subject to g(x)=0g(x)=0

为方便分析,假设ff对gg是连续可导函数。Lagrange乘数法是含等式约束条件优化问题的典型解法。定义Lagrangian函数

L(x,λ)=f(x)+λg(x)L(x,λ)=f(x)+λg(x)

其中λλ为Lagrange乘数。Lagrange乘数法将原来的约束优化问题转化成等价的非约束问题

minimize x,λL(x,λ)minimize x,λL(x,λ)

优化必要条件:

▽xL=∂L∂x=▽f+λg(x)=0▽xL=∂L∂x=▽f+λg(x)=0 
▽λL=∂L∂λ=g(x)=0▽λL=∂L∂λ=g(x)=0

其中第一个为stationary equation,第二个为约束条件。通过求解上述方程,可得L(x,λ)L(x,λ)的驻点(stationary point)x∗x∗以及λλ的值(正负数皆可能)。

接下来我们将约束等式g(x)=0g(x)=0推广为g(x)⩽0g(x)⩽0。优化问题如下:

minimize f(x)f(x) 
subject to g(x)⩽0g(x)⩽0

约束不等式g(x)⩽0g(x)⩽0称为primal feasibility, 由此定义可行域(feasible region)K={x∈Rn∣g(x)⩽0}K={x∈Rn∣g(x)⩽0}。假设x∗x∗为满足约束条件的最佳解,分两种情况讨论:(1)g(x∗)⩽0g(x∗)⩽0,最佳解位于KK的内部,称为interior solution,这时约束条件是无效的;(2)g(x∗)=0g(x∗)=0,最佳解落在KK的边界,称为boundary solution,此时约束条件是有效的。这两种情况的最佳解具有不同的必要条件。

  • 内部解:在约束条件无效的情形下, g(x)g(x)不起作用,约束优化问题退化为无约束优化问题,因此驻点x∗x∗满足▽f=0▽f=0且λ=0λ=0。
  • 边界解:在约束条件有效的情形下,约束不等式变成等式g(x)=0g(x)=0,这与前面Lagrange乘数法的情况相同。我们可以证明驻点x∗x∗发生在▽f∈span{▽g}▽f∈span{▽g},换句话说,存在λλ使得▽f=−λg(x)▽f=−λg(x),但这里λλ的正负号是尤其意义的。因为我们希望最小化ff,梯度▽f▽f应该指向可行域KK的内部,但▽g▽g指向可行域KK的外部(即g(x)>0g(x)>0的区域),因此λ⩾0λ⩾0称为对偶可行性
  • 更直观的图解来自https://en.wikipedia.org/wiki/Karush%E2%80%93Kuhn%E2%80%93Tucker_conditions 及 http://blog.csdn.net/johnnyconstantine/article/details/46335763: 
     

不论是内部解还是边界解,λg(x)=0λg(x)=0恒成立,称为complementary slckness。综上,最佳解的必要条件包括lagrangian函数L(x,λ)L(x,λ)的定常方程式、原始可行性、对偶可行性,以及complementary slckness:

▽xL=▽f+λg(x)=0▽xL=▽f+λg(x)=0 
g(x)⩽0g(x)⩽0 
λ⩾0λ⩾0 
λg(x)=0λg(x)=0

以上就是KKT条件。如果我们要做大化f(x)f(x)且受限于g(x)⩽0g(x)⩽0,那么对偶可行性要改成λ⩽0λ⩽0

考虑标准约束优化问题

minimize f(x)f(x) 
subject to g(x)=0g(x)=0, j=1,...,mj=1,...,m 
     hk(x)⩽0hk(x)⩽0, k=1,...,pk=1,...,p

定义拉格朗日函数

L(x,{λj},{μk})=f(x)+∑mj=1λjgj(x)+∑pk=1μkhk(x)L(x,{λj},{μk})=f(x)+∑j=1mλjgj(x)+∑k=1pμkhk(x)

其中λjλj是对应gj(x)=0gj(x)=0的拉格朗日乘数,μkμk是对应hk(x)⩽0hk(x)⩽0的拉格朗日乘数,KKT条件

▽xL=0▽xL=0 
gj=0,j=1,...,mgj=0,j=1,...,m 
hk(x)⩽0hk(x)⩽0 
μk⩾0μk⩾0 
μkhk(x)=0,k=1,...,p

(转https://blog.csdn.net/chensheng312/article/details/73166909)

KKT(Karush-Kuhn-Tucher)条件的更多相关文章

  1. Support Vector Machine(2):Lagrange Duality求解线性可分SVM的最佳边界

    在上篇文章<Support Vector Machine(1):线性可分集的决策边界>中,我们最后得到,求SVM最佳Margin的问题,转化为了如下形式: 到这一步后,我个人又花了很长的时 ...

  2. 【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

    在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 ...

  3. 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

    [整理]   在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有 ...

  4. 真正理解拉格朗日乘子法和 KKT 条件

        这篇博文中直观上讲解了拉格朗日乘子法和 KKT 条件,对偶问题等内容.     首先从无约束的优化问题讲起,一般就是要使一个表达式取到最小值: \[min \quad f(x)\]     如 ...

  5. 拉格朗日乘子法(Lagrange Multiplier) 和KKT条件

    参考文献:https://www.cnblogs.com/sddai/p/5728195.html 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush ...

  6. 装载:关于拉格朗日乘子法与KKT条件

    作者:@wzyer 拉格朗日乘子法无疑是最优化理论中最重要的一个方法.但是现在网上并没有很好的完整介绍整个方法的文章.我这里尝试详细介绍一下这方面的有关问题,插入自己的一些理解,希望能够对大家有帮助. ...

  7. 关于拉格朗日乘子法与KKT条件

    关于拉格朗日乘子法与KKT条件 关于拉格朗日乘子法与KKT条件   目录 拉格朗日乘子法的数学基础 共轭函数 拉格朗日函数 拉格朗日对偶函数 目标函数最优值的下界 拉格朗日对偶函数与共轭函数的联系 拉 ...

  8. 从感知机到 SVM,再到深度学习(二)

        这篇博文承接上一篇,详细推导了 SVM 算法,包括对偶算法,SMO 优化算法,核函数技巧等等,最后还提到用高度非线性的曲线代替超平面,就是神经网络的方法.     在第一篇中已经得到了最优间隔 ...

  9. SVM笔记

    1.前言 SVM(Support Vector Machine)是一种寻求最大分类间隔的机器学习方法,广泛应用于各个领域,许多人把SVM当做首选方法,它也被称之为最优分类器,这是为什么呢?这篇文章将系 ...

  10. 图解AI数学基础 | 概率与统计

    作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/83 本文地址:http://www.showmeai.tech/article-det ...

随机推荐

  1. int**a = new int[5][6] 怎么delete

    int **a = new int[5][6],这个根本编译不过去吧. 如果你想new一个二维数组出来,应该这样: int** a= new int*[5]; for (int i = 0; i &l ...

  2. 最新版本elasticsearch本地搭建入门篇

    最新版本elasticsearch本地搭建入门篇 项目介绍 最近工作用到elasticsearch,主要是用于网站搜索,和应用搜索. 工欲善其事,必先利其器. 自己开始关注elasticsearch, ...

  3. 使用vue-cli开发过程中如何把jQuery设置为全局

    说明:vue-cli是vue快速构建项目的命令行式开发模式. vue主要针对数据层,更多的操作在数据上,很少在DOM上,偶尔也会需要操作DOM,偶尔也会用到JQ插件,下面简单说下如何在使用vue-cl ...

  4. Runtime和Process

    private void runByshcommand(String command) { try { System.out.println("开始执行命令....."); Pro ...

  5. python 类函数,实例函数,静态函数

    一.实现方法 class Function(object): # 在类定义中定义变量 cls_variable = "class varibale" def __init__(se ...

  6. Autoit3操作网页实现自动化

    Autoit3 本身有内置的用户自定义函数IE.au3,只限于IE浏览器,如果是Firefox浏览器需要另外自定义函数. 找了很多资料发现有个FF.au3的自定义函数,下载地址 http://www. ...

  7. loadrunner 运行场景-场景运行原理

    运行场景-场景运行原理 by:授客 QQ:1033553122 运行原理 1 Remote Agent Dispatcher(Process) 运行Controller在负载机上开启应用程序. 2  ...

  8. 自定义控件详解(二):Path类 相关用法

    Path:路径 绘制路径:void drawPath (Path path, Paint paint) Path 可以绘制的路径 一.直线路径 1.基本方法 void moveTo (float st ...

  9. genymotion 模拟器内安装软件 the app contains ARM native code and your devices cannot run ARM instructions

    问题如图: 解决方法: 下载一个Genymotion-ARM-Translation软件,安装到模拟器中就好了

  10. python接口测试—post请求(二)

    使用post请求登陆小极客网. 1.获取登陆接口,及用户名和密码参数 进入小极客网,先注册个账户,修改用户名和密码,然后点击登陆,打开debug调试-进入到network下 输入用户名和密码,点击登陆 ...