理解KKT条件

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

一、引言

    对于无约束最优化问题,其搜索空间是无界的,只要确定了搜索方向步长因子,便可以在一轮或几轮迭代之后找到最优解或近似最有解。这里举个不太恰当的例子,无约束最优化如同在浩瀚的宇宙中寻找体积最大的星球,你按照一定的策略去找,不用担心越界

     而约束的优化问题就不同了,在寻找最优解的过程中始终要在某一个约束范围空间内进行。还是以上述例子说明,约束最优化如同在浩瀚的宇宙中寻找体积最大的星球你按照一定的策略去找,但是不能离开银河系KKT条件正是这类最优化问题的最优解必须要满足的条件,言外之意便是只要是最优解,必然满足这个条件,反之则不然;但对于凸问题,确是充分必要条件,这一点很重要,很多问题是凸的,这就为问题求解带来很大的便利性。

     为了方便后续说明,本文以最小化下列同时含有等式约束和不等式约束的函数为例。

 

二、起作用约束和不起作用约束

     在约束问题最优化中,约束分为起作用约束和不起作用约束两种。

     设红色圆点表示 \textit{\textbf{x}}^*,三条曲线表示约束条件,共同构成可行域的边界。其中,与\textit{\textbf{x}}^*相交的约束条件便是该点的起作用约束,而不相交的曲线称为该点的不起作用约束。其中,箭头表示约束边界在\textit{\textbf{x}}^*处的梯度。

      为什么要这样说那? 这是因为它处在可行域的边界之上,\textit{\textbf{x}}^*相交的约束曲线限制了从 \textit{\textbf{x}}^*开始的下一步的搜索方向,,沿着某些方向稍微一动,必然后离开可行域; 而不与\textit{\textbf{x}}^*相交的约束曲线对次没有限制,只要步伐不是太大,可以向四面八方随意游走,总不会越过约束曲线。由此,可得两点结论

  1.   约束起作用与否是相对于某一点而言的
  2.   所谓的起作用约束即点\textit{\textbf{x}}^*位于该约束曲线上

     后续,将与\textit{\textbf{x}}^*起作用的约束下标集合记为 \textbf{I}\left ( \textit{\textbf{x}}^* \right )

 

三、可行方向

     设 \overrightarrow{\textit{\textbf{p}}} 为可行域内以\textit{\textbf{x}}^*为起点的向量。在上图的基础上,利用下图说明\overrightarrow{\textit{\textbf{p}}}与约束条件满足何种关系时是可行方向。

      其中,红色圆点表示\textit{\textbf{x}}^*,黑色箭头表示两个起作用约束在\textit{\textbf{x}}^*处的梯度向量。分别以红色和蓝色箭头表示\overrightarrow{\textit{\textbf{p}}}并进行讨论。

  1. \overrightarrow{\textit{\textbf{p}}}与其中一个起作用约束在点\textit{\textbf{x}}^*处的梯度夹角大于90度,稍微离开\textit{\textbf{x}}^*一点便于离开可行域。
  2. \overrightarrow{\textit{\textbf{p}}}与两个梯度向量的夹角均小于90度,稍微离开\textit{\textbf{x}}^*一点不会离开可行域。

      因此,若\overrightarrow{\textit{\textbf{p}}}为可行方向,\overrightarrow{\textit{\textbf{p}}}与所有在点\textit{\textbf{x}}^*处起作用约束的梯度向量所形成的的夹角都必须小于90度。更加严格的证明是通过在\textit{\textbf{x}}^*处的泰勒展开式进行证明,此处为了便于理解仅做一个直观的说明。

 

四、KKT条件

     介绍完了上面的一些概念 后,来看一下KKT条件的定义。

     OK,看上去很复杂的样子,其实我初次看到这个公式也有点被吓到, 不过理清了上述的概念后,便很容易的理解了这一大坨公式的意义,那我就以图文并茂的方式逐条解释一下。

    1、第一条。最左边是目标函数在\textit{\textbf{x}}^*处的梯度向量,其余各项是在\textit{\textbf{x}}^*处各约束的梯度向量的线性组合,自然也是向量,要求这两个向量方向必须相同,等价的说目标函数在\textit{\textbf{x}}^*处的的负梯度向量的方向和它要相反!这是数学描述上的解释,直观一点可以参考下面两幅图

         红色圆点表示 \textit{\textbf{x}}^*,如果点 \textit{\textbf{x}} 是最优解,则必然满足KKT条件,假定\textit{\textbf{x}}^*就是局部最小值点,择\textit{\textbf{x}}^*不会是右图所示的红色圆点为什么? 如果\textit{\textbf{x}}^*是右图的红色圆点,那么目标函数在\textit{\textbf{x}}^*处的梯度向量以及\textit{\textbf{x}}^*所在的等值线的切线向量之间存在一块狭长的区域中沿着\textit{\textbf{x}}^*点继续在此狭长区域中搜索,一定能找到一个比当前最小值还要小的值,这与我们的假设相悖!

    2、第二条。对于起作用约束,约束函数值等于0,乘上一个常数因子依然等于0;对于不起作用约束,约束函数值大于零,相应的常数因子必然等于0;常数因子是否取0需要根据当前点\textit{\textbf{x}}出的函数值确定。

    3、第三条。显然可由第一条推出。

 

四、总结

     最后,根据上述讨论和从书本上看到的,总结一下:本质上,KKT条件是为了证明\textit{\textbf{x}}^*已无可行下降方向,那么自然是最小值点了。顺便的推荐一下《最优化方法》这本书,何建勇著,写的非常好。


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

相关文章

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

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

KKT条件(Karush–Kuhn–Tucker conditions)

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

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

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

KKT条件(Karush-Kuhn-Tucker Conditions)

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

windows下Armadillo+openBlas

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

C++线性代数库armadillo

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

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

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

C++调用Armadillo计算库

1. 下载压缩包,解压到目录,比如D:\ALGLIB\armadillo,只保留include文件夹和examples里的lib_win32文件夹即可; 下载地址: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;毕…