KKT条件(卡罗需-库恩-塔克条件)

article/2025/8/20 22:16:08

1,定义

KKT是啥?
它是Karush、Kuhn和Tucker三个人。这三个人单独提出了在非线性规划中获得最优解的必要条件。
看着很复杂呀?
还好啦。。。只是将拉格朗日乘数法中的等式约束条件泛化到了不等式。

2,先来几个简单例子

为什么要搞这个看似复杂的东东?当然是为了解决一些问题。下面的问题如果你能解出来,你就可以不用学这个了。

2.1 求 f ( x 1 , x 2 ) = x 1 2 + x 2 2 的最小值,约束条件为 x 1 + x 2 = 1 和 x 2 < = α 求f(x_1,x_2)=x_1^2+x_2^2的最小值,约束条件为x_1+x_2=1和 x_2<=\alpha f(x1,x2)=x12+x22的最小值,约束条件为x1+x2=1x2<=α
易得 f ( x 1 , x 2 ) = ( 1 − x 2 ) 2 + x 2 2 = 2 ( x 2 − 0.5 ) 2 + 0.5 , f(x_1,x_2)=(1-x_2)^2+x_2^2=2(x_2-0.5)^2+0.5, f(x1,x2)=(1x2)2+x22=2(x20.5)2+0.5,
则当 α > = 0.5 时, f ( x 1 , x 2 ) 在 x 2 = 0.5 处有最小值,为 0.5 \alpha>=0.5时,f(x_1,x_2)在x_2=0.5处有最小值,为0.5 α>=0.5时,f(x1,x2)x2=0.5处有最小值,为0.5
α < 0.5 , f ( x 1 , x 2 ) 在 x 2 = α 处有最小值,为 2 α 2 − 2 α + 1 \alpha<0.5,f(x_1,x_2)在x_2=\alpha处有最小值,为2\alpha^2-2\alpha+1 α<0.5f(x1,x2)x2=α处有最小值,为2α22α+1
尴尬了。。。解出来了。。。

好吧。。用KKT的思路来玩一下吧。
先构造拉格朗日函数:
L ( x 1 , x 2 , λ , μ ) = x 1 2 + x 2 2 + λ ( x 1 + x 2 − 1 ) + μ ( x 2 − α ) \mathcal{L}(x_1,x_2,\lambda,\mu)=x_1^2+x_2^2+\lambda(x_1+x_2-1)+\mu(x_2-\alpha) L(x1,x2,λ,μ)=x12+x22+λ(x1+x21)+μ(x2α)(似曾相识)
跟拉格朗日法一样对原始变量和等式约束部分求偏导数,并令其等于0:
∂ L x 1 = 2 x 1 + λ = 0 \frac{\partial\mathcal{L}}{x_1}=2x_1+\lambda=0 x1L=2x1+λ=0
∂ L x 2 = 2 x 2 + λ + μ = 0 \frac{\partial\mathcal{L}}{x_2}=2x_2+\lambda+\mu=0 x2L=2x2+λ+μ=0
∂ L λ = x 1 + x 2 − 1 = 0 \frac{\partial\mathcal{L}}{\lambda}=x_1+x_2-1=0 λL=x1+x21=0
对于不等式部分,要用下列条件去约束:
x 2 − α < = 0 x_2-\alpha<=0 x2α<=0
μ > = 0 \mu>=0 μ>=0
μ ( x 2 − α ) = 0 \mu(x_2-\alpha)=0 μ(x2α)=0
容易解出:
x 1 = 1 / 2 + μ / 4 , x 2 = 1 / 2 − μ / 4 , λ = − 1 − μ / 2. x_1=1/2+\mu/4,x_2=1/2-\mu/4,\lambda=-1-\mu/2. x1=1/2+μ/4x2=1/2μ/4λ=1μ/2.
将约束条件转化成只有 μ 和 α 的式子 \mu和\alpha的式子 μα的式子
μ > = 2 − 4 α \mu>=2-4\alpha μ>=24α
μ > = 0 \mu>=0 μ>=0
μ ( 1 / 2 − μ / 4 − α ) = 0 \mu(1/2-\mu/4-\alpha)=0 μ(1/2μ/4α)=0
1),当 α > = 1 / 2 时,必须要使 μ = 0 才能满足要求,此时 x 1 = x 2 = 1 / 2 ; \alpha>=1/2时,必须要使\mu=0才能满足要求,此时x_1=x_2=1/2; α>=1/2时,必须要使μ=0才能满足要求,此时x1=x2=1/2;
2),当 α < 1 / 2 时,易得 μ > 0 ,则 μ = 2 − 4 α ,此时 x 1 = 1 − α , x 2 = α . \alpha<1/2时,易得\mu>0,则\mu=2-4\alpha,此时x_1=1-\alpha,x_2=\alpha. α<1/2时,易得μ>0,则μ=24α,此时x1=1αx2=α.

perfect,,,两种方法解出来的结果完全一样。

2.2 升级一下问题:求 f ( x 1 , x 2 , x 2 , x 4 ) = x 1 2 + x 2 2 + x 3 2 + x 4 2 的最小值,约束条件为 x 1 + x 2 + x 3 + x 4 = 1 和 x 4 < = A f(x_1,x_2,x_2,x_4)=x_1^2+x_2^2+x_3^2+x_4^2的最小值,约束条件为x_1+x_2+x_3+x_4=1和x_4<=A f(x1,x2,x2,x4)=x12+x22+x32+x42的最小值,约束条件为x1+x2+x3+x4=1x4<=A
思考:四个变量,这下传统的方法不好使了。。。
构造拉格朗日函数:
L ( x 1 , x 2 , λ , μ ) = x 1 2 + x 2 2 + x 3 2 + x 4 2 + λ ( x 1 + x 2 + x 3 + x 4 − 1 ) + μ ( x 4 − A ) \mathcal{L}(x_1,x_2,\lambda,\mu)=x_1^2+x_2^2+x_3^2+x_4^2+\lambda(x_1+x_2+x_3+x_4-1)+\mu(x_4-A) L(x1,x2,λ,μ)=x12+x22+x32+x42+λ(x1+x2+x3+x41)+μ(x4A)
约束条件为
2 x 1 + λ = 0 2x_1+\lambda=0 2x1+λ=0
2 x 2 + λ = 0 2x_2+\lambda=0 2x2+λ=0
2 x 3 + λ = 0 2x_3+\lambda=0 2x3+λ=0
2 x 4 + λ + μ = 0 2x_4+\lambda+\mu=0 2x4+λ+μ=0
x 1 + x 2 + x 3 + x 4 = 1 x_1+x_2+x_3+x_4=1 x1+x2+x3+x4=1
x 4 < = A x_4<=A x4<=A
μ > = 0 \mu>=0 μ>=0
μ ( x 4 − A ) = 0 \mu(x_4-A)=0 μ(x4A)=0
解得 x 1 = x 2 = x 3 = 1 / 4 + μ / 8 , x 4 = 1 / 4 − 3 / 8 μ , λ = − 1 / 2 − μ / 4 x_1=x_2=x_3=1/4+\mu/8,x_4=1/4-3/8\mu,\lambda=-1/2-\mu/4 x1=x2=x3=1/4+μ/8x4=1/43/8μλ=1/2μ/4
1),当 A > = 1 / 4 时,必须要使 μ = 0 才能满足要求,此时 x 1 = x 2 = x 3 = x 4 = 1 / 4 ; A>=1/4时,必须要使\mu=0才能满足要求,此时x_1=x_2=x_3=x_4=1/4; A>=1/4时,必须要使μ=0才能满足要求,此时x1=x2=x3=x4=1/4;
2),当 α < 1 / 4 时易得 μ > 0 ,则 μ = ( 2 − 8 A ) / 3 ,此时 x 1 = x 2 = x 3 = 1 / 3 − A / 3 , x 4 = A . \alpha<1/4时易得\mu>0,则\mu=(2-8A)/3,此时x_1=x_2=x_3=1/3-A/3,x_4=A. α<1/4时易得μ>0,则μ=(28A)/3,此时x1=x2=x3=1/3A/3x4=A.

3,稍微抽象一下上述的例子

假设要求f(x)的最小值,约束条件是g(x)<=0.
x ∗ x^* x表示上述解出现时的x值。
分下面两种情况讨论上述问题:
1)假如 x ∗ x^* x出现在g(x)<0的范围内,则只需要满足下列条件:
d J ( x ∗ ) d x = 0 \frac{d J(x^*)}{dx}=0 dxdJ(x)=0
此时相当于已经解除了不等式的约束。
2)假如 x ∗ x^* x出现在g(x)=0处,设 x = x ∗ + δ x ,则 δ x = 0 应该是下面这种情况的解: x=x^*+\delta x,则\delta x=0应该是下面这种情况的解: x=x+δx,则δx=0应该是下面这种情况的解:
min ⁡ δ x J ( x ∗ + δ x ) ,约束条件为 g ( x ∗ + δ x ) < = 0 \min_{\delta x} J(x^*+\delta x),约束条件为g(x^*+\delta x)<=0 minδxJ(x+δx),约束条件为g(x+δx)<=0
用泰勒公式将上述式子改写:
min ⁡ δ x [ J ( x ∗ ) + d J ( x ∗ ) δ x d x ] \min_{\delta x} [J(x^*)+\frac{d J(x^*)\delta x}{dx}] minδx[J(x)+dxdJ(x)δx]
约束条件为 g ( x ∗ ) + d g ( x ∗ ) δ x d x < = 0 g(x^*)+\frac{d g(x^*)\delta x}{dx}<=0 g(x)+dxdg(x)δx<=0

由于 J ( x ∗ ) 是个固定值且跟 δ x 无关,且 g ( x ∗ ) = 0 ,所以上述条件可以进一步简化为 J(x^*)是个固定值且跟\delta x无关,且g(x^*)=0,所以上述条件可以进一步简化为 J(x)是个固定值且跟δx无关,且g(x)=0,所以上述条件可以进一步简化为
min ⁡ δ x d J ( x ∗ ) δ x d x \min_{\delta x} \frac{d J(x^*)\delta x}{dx} minδxdxdJ(x)δx
约束条件为 d g ( x ∗ ) δ x d x < = 0 \frac{d g(x^*)\delta x}{dx}<=0 dxdg(x)δx<=0

上述问题可以看成是关于 δ x \delta x δx的线性规划问题。分下列几种情况:
在这里插入图片描述
我们需要使 δ x = 0 \delta x=0 δx=0成为上述情况的解,因此case 2和case 3满足条件,即需要一个正数 μ \mu μ使得:
d J ( x ∗ ) d x + μ d g ( x ∗ ) d x \frac{d J(x^*)}{dx}+\mu\frac{d g(x^*)}{dx} dxdJ(x)+μdxdg(x)成立。

4,正式给出KKT条件

假设要优化f(x),即求最大值或最小值,约束条件为:
1)不等式约束: g i ( x ) < = 0 , i = 1 , 2 , . . . , m g_i(x)<=0,i=1,2,...,m gi(x)<=0i=1,2,...,m
2)等式约束: h j ( x ) = 0 , j = 1 , 2 , . . . , ℓ h_j(x)=0,j=1,2,...,\ell hj(x)=0j=1,2,...,
假设f(x)、g(x)和h(x)在点 x ∗ x^* x都是可以连续微分的,则存在常量 μ i ( i = 1 , 2 , . . . , m ) 和 λ j ( j = 1 , 2 , . . . , ℓ ) \mu_i(i=1,2,...,m)和\lambda_j(j=1,2,...,\ell) μi(i=1,2,...,m)λj(j=1,2,...,)满足下面四个条件:
1,定常方程式
在这里插入图片描述
2,原始可行性
在这里插入图片描述
3,对偶可行性
在这里插入图片描述
4,互补松弛性
在这里插入图片描述
当m=0,即不存在不等方程时,KKT条件变成了拉格朗日条件,KKT乘子变成了拉格朗日乘子。

Reference

https://zhuanlan.zhihu.com/p/38163970
https://ccjou.wordpress.com/2017/02/07/karush-kuhn-tucker-kkt-%E6%A2%9D%E4%BB%B6/


http://chatgpt.dhexx.cn/article/G2apjKGl.shtml

相关文章

KKT条件(Karush–Kuhn–Tucker conditions)

在约束最优化问题中&#xff0c;常常利用有条件的拉格朗日乘子法&#xff0c;进而一步步推导KKT条件。 1.最优化条件和下降搜索 给定一个多变量可微函数 &#xff0c;是的局部最小值&#xff0c;这时有 如果&#xff0c;就存在使得 &#xff08;对这边做个解释&#xff1a;…

机器学习理论基础:线代相关、PCA、KKT条件、贝叶斯统计

机器学习理论基础&#xff1a;线代相关、PCA、KKT条件、贝叶斯统计 摘要1.线性代数相关与证明1.1.线性相关和生成子空间1.1.1.线性方程组的矩阵表示1.1.2.生成子空间1.1.3.线性相关1.1.4.方程组通过逆矩阵求解时的考量 1.2.证明&#xff1a;通过迹运算描述矩阵的Frobenius范数1…

KKT条件(Karush-Kuhn-Tucker Conditions)

总目录 一、 凸优化基础&#xff08;Convex Optimization basics&#xff09; 凸优化基础&#xff08;Convex Optimization basics&#xff09; 二、 一阶梯度方法&#xff08;First-order methods&#xff09; 梯度下降&#xff08;Gradient Descent&#xff09;次梯度&am…

windows下Armadillo+openBlas

1、处理Armadillo 1.1、http://arma.sourceforge.net/download.html#windows下载Armadillo&#xff0c;解压后把其中的include文件夹完整拷贝出来&#xff0c;放到某处&#xff0c;我放在了D:\Armadillo里 1.2、修改D:\Armadillo\include\armadillo_bits\config.hpp&#xff…

C++线性代数库armadillo

armadillo是为C设计的线性代数函数库&#xff0c;语法和函数类似MATLAB&#xff0c; 介绍主页 http://arma.sourceforge.net/ 与MATLAB语法对照如下http://arma.sourceforge.net/docs.html#syntax 功能概览 &#xff08;1&#xff09;matrix, vector, cube and field class…

Armadillo使用介绍(九):下载Armadillo、配置工程、运行第一个程序

一、下载Armadillo 通过以下两种途径下载Armadillo C库源码&#xff1a; Armadillo Download page 如下图所示&#xff0c;可以下载到最新版本的armadillo库&#xff08;随着时间变化&#xff0c;armadillo版本可能会比图示的版本更高&#xff09;。 点击上图红框中的链接后…

C++调用Armadillo计算库

1. 下载压缩包&#xff0c;解压到目录&#xff0c;比如D:\ALGLIB\armadillo&#xff0c;只保留include文件夹和examples里的lib_win32文件夹即可&#xff1b; 下载地址&#xff1a;Armadillo: C library for linear algebra & scientific computinghttp://arma.sourceforge…

armadillo 使用杂记

2022.10.06 验证矩阵首地址与首元素首地址的关系 验证矩阵中元素的存储方式 做以下实验 mat m;//输出矩阵头位置cout<<&m<<endl;m<<4<<6<<3<<endr<<1<<3<<1<<endr<<3<<5<<1<<endr;/…

Ubuntu21.10下安装使用Armadillo库

文章目录 一、前言二、下载安装文件三、编译与安装四、代码示例五、总结 一、前言 Armdillo 矩阵运算速度跟 MATLAB 一个量级&#xff0c;为目前使用比较广的 C 矩阵运算库之一&#xff0c;是在 C 下使用 MATLAB 方式操作矩阵很好的选择&#xff0c;许多 MATLAB 的矩阵操作函数…

Armadillo 线性代数库中的聚类算法避坑

1、本文的由来 最近由于需要在C语言编写的项目中使用高斯混合模型聚类算法&#xff0c;最开始是打算自己写一个的&#xff08;参考的是《机器学习》&#xff0c;周志华著这本书&#xff09;&#xff0c;但是最后发现自己写的算法运行效率低&#xff0c;而且对于维度比较高的样本…

C++线代运算库Armadillo配置(Qt CLion VSCode)

目录 1. 前言 2. Armadillo下载 方法1&#xff1a;官网下载 方法2&#xff1a;安装包下载 3. Qt 中 Armadillo 配置 4. CLion 中 Armadillo 配置 5. VSCode 中 Armadillo 配置 1. 前言 工作和学习上一直用着 Armadillo 库中的矩阵运算&#xff0c;极大的提升了 Matlab 代…

Clion 使用 armadillo 配置方法

Clion 使用 armadillo 配置方法 jetbrains 全家桶是我的最爱 但是C的编写网上都是visual studio 的教程&#xff0c;尤其是对于库文件的引用&#xff0c;Clion很少有指导&#xff0c;最近需要将python的程序转为C&#xff0c;用到了armadillo 矩阵库&#xff0c; 但是网上对于…

Armadillo C++ Library

Armadillo 简介 Armadillo C Library是一种C的线性代数库&#xff08;矩阵数学&#xff09;&#xff0c;具有良好的平衡速度与易用性。其底层可以调用不同的BLAS和LAPACK库来提高效率&#xff0c;同时利用模板编程提高了代码的操作性 官网下载链接&#xff1a;点这里下载 Vi…

C++中armadillo矩阵库使用说明

在http://blog.csdn.net/piaoxuezhong/article/details/58055709博文中介绍了eigen矩阵库的使用&#xff0c;这里介绍另一种矩阵库&#xff1a;armadillo~ Armadillo&#xff1a;C下的Matlab替代品 armadillo是目前使用比较广的C矩阵运算库之一&#xff0c;许多Matlab的矩阵操…

armadillo库安装教程

目录 armadillo库功能介绍 armadillo库安装 vs中添加步骤 测试 armadillo库功能介绍 在c编程中&#xff0c;我们在进行一些算法运算经常会面对矩阵计算&#xff0c;c的标准库中是没有关于矩阵运算的库的&#xff0c;在面对矩阵计算我们只能自己编写相关代码进行计算&#xf…

armadillo使用,armadillo提高编译效率和速度

Armadillo是一个全面的、基于模板的 C 线性代数库&#xff0c;设计有 LAPACK 和 ATLAS 库的替代接口。 armadillo使用工具旨在提供速度和易用性&#xff0c;以及类似于 Matlab 的熟悉语法(或 API)。 armadillo使用允许您编写可以集成到组件或应用程序中的各种类型的数学函数。它…

C++ Armadillo矩阵库的安装与基本用法

文章目录 Armadillo安装入门案例直接赋值切片常用函数 Armadillo 安装 Armadillo是一个具有Matlab风格的线性代数包。下载之后解压到任意文件夹&#xff0c;然后对VS工程进行设置。 菜单栏生成->配置管理器&#xff0c;将平台改为x64右键项目名称->属性(快捷键ShiftF4…

一个常见的大数据平台架构

这是一个典型的大数据架构&#xff0c;且对架构进行了「分层」&#xff0c;分为「数据源层」、「数据传输层」、「数据存储层」、「编程模型层」和「数据分析层」&#xff0c;如果继续往上走的话&#xff0c;还有「数据可视化层」和「数据应用层」。

大数据平台架构实践

说明 本篇博客整理自参考内容&#xff0c;完整内容请查看原文章&#xff1b; 技术选型 MOLAP 与Druid相类似的实时数据分析工具&#xff0c;还有Linkedln的Pinot和eBay的Kylin&#xff0c;它们都是基于Java开发的。Druid相对比较轻量级&#xff0c;用的人也多&#xff0c;毕…

网易大数据平台架构实践分享!

随着网易云音乐、新闻、考拉、严选等互联网业务的快速发展&#xff0c;网易开始加速大数据平台建设&#xff0c;以提高数据获取速度&#xff0c;提升数据分析效率&#xff0c;更快发挥数据价值。 本次演讲主要分享网易如何围绕和改造开源技术&#xff0c;以产品化思维打造网易自…