拉格朗日乘子(Lagrange multify)和KKT条件
拉格朗日乘子(Lagrange multify)和KKT条件
无约束问题
无约束问题定义如下:

f(x)称为目标函数, 其中x是一个向量,它的维度是任意的。
通过求导, 令导数等于零即可:

如下图所示:

等式约束问题
单约束问题
单约束问题定义如下:

g(x)称为约束函数
单约束问题的解决步骤如下:
1, 加一个变量,这个变量称为拉格朗日乘子将约束条件和目标函数联立构造拉格朗日函数
2, 对每个变量分别求导, 令导数等于零,求得最优值

这是一个例子:

使用一个约束,一个拉格朗日乘子,得到拉格朗日函数:

求导得到:

解得:

代入f(x, y)可得2, -2, 0, 也就是我们的最优值
约束函数的即是一维空间的圆圈,变成目标函数的约束条件嵌入到目标函数的曲面中,整个过程如图:

多约束问题
等式约束的多约束问题即有多个约束函数, 多约束问题的定义如下:

多约束的问题和单约束问题的解决过程类似:
1, 加k个拉格朗日乘子,将约束条件和目标函数联立构造拉格朗日函数
2, 对每个变量分别求导, 令导数等于零,求得最优值

在约束线上找到一个点可以和等高线相切,所得的值实在约束范围内的最大值或者最小值如下面两个图, 分别是原图和等高线图


不等式约束问题
不等式问题单约束问题定义如下:

多约束的问题定义如下:

单约束和多约束问题的解法是类似的,下面以分析单约束问题为例。
不等式的约束,会出现两种情况,一种是最优解不在不等式的约束中,我们称为约束无效(下图左), 一种是在不等式的约束中,约束有效(下图右)。
情况一:约束无效
如图左,由于最优点在可行域内, 约束了跟没约束一样,由于等价于没有约束作用,所以直接可以对 f(x)+λh(x) 用拉格朗日乘子法

情况二:约束有效
如图右,由于有约束的作用,约束条件最弱的时候取得最优值,可以看出, 最优解在可行域的边界上取得,转化成了等式约束,因此,不等式约束变成了等式约束。
(我也不想用可以看出的, 但是确实是这样,从等高图直观的来看, 可行域里面的等高更高,边界才有可能取得最优解)

h(x), g(x) 为0没有问题,但是为什么
大于 0 呢?后面通过例题来解释(先记住,俺也没咋搞懂, 老师跟我说这里很简单,但是他也记不得了,我搜了一堆博客,大部分都是用梯度解释的【惨兮兮)。
综上, 在情况一下,μ=0 且 g(x)≤0,情况二下,μ≥0 且 g(x)=0,将上面的条件综合起来, 写成多约束的形式,即可以得到大名鼎鼎的KKT条件:

下面通过例子来解释
对于情况一,问题如下:
.

这个不等式约束包含了原点, 求它相当于没有求, 属于约束无效, 如图:

对于情况二,问题如下:
.
这个不等式不包含原点, 在不等式约束下,最小值是在边缘相切的地方取得,和用等式h(x,y)=x+y=-2进行约束效果是一样的,如图:

但是这里又不能完全等价为等式约束, 因为不等式带来了新的条件, 就是我们需要解释的μ
如图, 同心圆是凸函数的等高线,等高线的值如下排列,所以在相切处,法线也就是
的方向如下(法线也就是梯度,指向增长或下降最快的方向,这里用的是增长的, 也就是等高线的值变大的方向)
而凸函数h(x,y)的法线
也一样指向h(x,y)增长的方向,这个方向正好和
相反:
因此, 我们有

μ ≥ 0说明了两个梯度是方向是相反的。
KKT总结:
各个项以及对应的含义如下:
拉格朗日乘子(Lagrange multify)和KKT条件的更多相关文章
- 【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有不等约束时使用 ...
- 深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
[整理] 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法.在有等式约束时使用拉格朗日乘子法,在有 ...
- 装载:深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值:如果含有不等式 ...
- Machine Learning系列--深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值:如果含有不等式 ...
- 【机器学习】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值:如果含有不等式 ...
- 拉格朗日乘子法(Lagrange Multiplier) 和KKT条件
参考文献:https://www.cnblogs.com/sddai/p/5728195.html 在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush ...
- 拉格朗日乘子法(Lagrange multiplier)和KKT条件
拉格朗日乘子法: KKT条件:
- 机器学习——支持向量机(SVM)之拉格朗日乘子法,KKT条件以及简化版SMO算法分析
SVM有很多实现,现在只关注其中最流行的一种实现,即序列最小优化(Sequential Minimal Optimization,SMO)算法,然后介绍如何使用一种核函数(kernel)的方式将SVM ...
- 重温拉格朗日乘子法和KKT条件
在求取有约束条件的优化问题时,拉格朗日乘子法(Lagrange Multiplier) 和KKT条件是非常重要的两个求取方法,对于等式约束的优化问题,可以应用拉格朗日乘子法去求取最优值:如果含有不等式 ...
- 从对偶问题到KKT条件
转自:http://xuehy.github.io/%E4%BC%98%E5%8C%96/2014/04/13/KKT/ 从对偶问题到KKT条件 Apr 13, 2014 对偶问题(Duality) ...
随机推荐
- C++编程学习(十)引用
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. 注意以下几点与指针的区别: 不存在空引用.引用必须连接到一块合法的 ...
- Java8集合框架——LinkedHashSet源码分析
本文的目录结构如下: 一.LinkedHashSet 的 Javadoc 文档注释和简要说明 二.LinkedHashSet 的内部实现:构造函数 三.LinkedHashSet 的 add 操作和 ...
- 六十九、SAP中内表插入的三种方法之三,INSERT的使用,用于指定位置插入
一.代码如下 二.需要注意的时候,如果内表和工作区同名,这可以用隐式插入,不需要什么工作区INTO到什么表,INDEX为位置,效果图如下:
- 035-PHP简单定义一个闭包函数
<?php /* + 什么是闭包函数?即一个函数内部,包含了1-N个匿名函数, + 用处是可以做局部数据缓存与实现封装(有点类似class) */ # 函数内部,定义一个匿名函数,即可称为闭包函 ...
- Bulma CSS - 简介
Bulma CSS框架教程 Bulma CSS – 简介 Bulma CSS – 开始 Bulma CSS – CSS类 Bulma CSS – 模块化 Bulma CSS – 响应式 Bulma是什 ...
- [ WARN ] Keyword 'Capture Page Screenshot' could not be run on failure: URLError: <urlopen error [Errno 10061] Connection refused>
[ WARN ] Keyword 'Capture Page Screenshot' could not be run on failure: URLError: <urlopen error ...
- C++的vector容器清空
c++内部STL库中自带了一个容器vetcor, 自带了清空方法——clear().但是clear使用之后,并不能清空数据,其数据再未被覆盖之前是不会改变的,个人猜测clear仅仅把指针挪动到了起始位 ...
- 【LeetCode】最小路径和
[问题]给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [ [,,], [,,], [, ...
- spring 官方文档-片段学习——webflux-ann-controller
spring 官方文档-片段学习总结 片段所在连接:https://docs.spring.io/spring/docs/5.0.4.RELEASE/spring-framework-referenc ...
- Vue.js(2)- 过滤器
概念:过滤器本质上就是一个函数,可被用作一些常见的文本格式化. 过滤器只可以用在两个地方:mustache 插值表达式和 v-bind 表达式. 过滤器应该被添加在 JavaScript 表达式的尾部 ...