Lingo学习—— 拉格朗日乘子法 KKT条件

2024-05-01 22:08

本文主要是介绍Lingo学习—— 拉格朗日乘子法 KKT条件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

 

一、初识拉格朗日乘子法和KKT条件

什么是拉格朗日乘子法?

二、最优化问题会碰到一下三种情况:

(1)无约束条件

(2)等式约束条件

例题1.1:求椭球内接长方体 的最大体积。

例题1.2:(用LINGO求解)求原点到椭圆的最短距离。

                ​​​​  (3)不等式约束条件

         参考文章:(如侵权,请联系我删除)


一、初识拉格朗日乘子法和KKT条件

什么是拉格朗日乘子法?

在数学最优问题中,拉格朗日乘子法(Lagrange Multiplier)

        :是一种寻找变量 受一个或多个条件限制的 多元函数的 极值的方法。

这种方法将一个有 n 个变量与 k 个约束条件的最优化问题 转换为一个有 n + k 个变量的方程组的极值问题,其变量不受任何约束。

(可以理解为:约束和变量同时都成为了变量)

这种方法引入了一种新的标量未知数,即 拉格朗日乘数 

        约束方程的梯度(gradient)的线性组合里每个向量的系数。

什么时候需要 拉格朗日乘子法

答:多变量、多等式约束条件 求极值

在求解最优化问题中,拉格朗日乘子法(Lagrange Multiplier)和KKT(Karush Kuhn Tucker)条件是两种最常用的方法。

有等式约束 时使用拉格朗日乘子法,

在 有不等约束 时使用KKT条件。

我们这里提到的最优化问题通常是指对于给定的某一函数,求其在指定作用域上的全局最小值

(因为最小值与最大值可以很容易转化,即最大值问题可以转化成最小值问题)

KKT条件 与 拉格朗日乘子法 二者均是求解最优化问题的方法,不同之处在于应用的情形不同。

二、最优化问题会碰到一下三种情况:

(1)无约束条件

这是最简单的情况,解决方法通常是函数对变量求导,令求导函数等于0的点可能是极值点。将结果带回原函数进行验证即可。

(2)等式约束条件

 设目标函数为f(x),约束条件为h_k(x),我们称:

                min\, f(x)\,,\, s.t.\,\, \,\,\,\,h_{k}(x)=0\,,\,k=1,2,...m         为等式约束条件。

则解决方法是消元法或者拉格朗日法。

例题1.1:

给定椭球: \frac{x^{2}}{a^{2}}+\frac{y^{2}}{b^{2}}+\frac{z^{2}}{c^{2}}=1  求这个椭球的 内接长方体 的最大体积。

解答:

这个问题实际上就是 条件极值问题,即在条件    \frac{x^{2}}{a^{2}}+\frac{y^{2}}{b^{2}}+\frac{z^{2}}{c^{2}}=1 下,

求   f(x,y,z) = 8xyz   的最大值。  

当然这个问题实际可以先根据条件消去 z (消元法),然后带入转化为无条件极值问题来处理。

但是有时候这样做很困难,此时我们用拉格朗日乘数法

首先 定义拉格朗日函数 F(x):

F(x,\lambda ) = f(x) + \sum_{k=1}^{m} \lambda_{k}h_{k}(x)     ( 其中λ、k是各个约束条件的待定系数)                                   

然后解变量的偏导方程:

\frac{\partial F}{\partial x_{i}} = 0    ......  {\frac{\partial F}{\partial \lambda _{k}}} = 0   如果有m个约束条件,就应该有m+1个方程。

求出的方程组的解就可能是 最优解(高等数学中提到的极值)

将结果带回原方程验证就可得到解。

回到上面的题目,通过拉格朗日乘数法将问题转化为:

F(x,y,z,\lambda) = f(x,y,z) + \lambda\varphi (x,y,z)

                      = 8xyz +\lambda (\frac{x^2}{a^2}+\frac{y^2}{b^2}+\frac{z^2}{c^2}-1)

对 F(x,y,z,\lambda) 求偏导得:

联立前面三个方程得到

  和  

带入 第④个 方程 解得:

带入解得最大体积为:


PS:深层理解做法:为什么这么做可以求解最优解?(不深究原理的可自行跳过)

举个二维 最优解的例子:

min f(x,y)    

s.t. g(x,y) = c

      这里画出 z = f(x,y) 的等高线 :          

        绿线标出的是约束 g(x,y)=c 的点的轨迹。

        蓝线是f(x,y)的等高线。

        箭头表示斜率,和等高线的法线平行。

        从梯度的方向上来看,显然有d1>d2。绿色的线是约束,也就是说,只要正好落在这条绿线上的点才可能是满足要求的点。如果没有这条约束,f(x,y)的最小值应该会落在最小那圈等高线内部的某一点上。

        而现在加上了约束,最小值点应该在哪里呢?

        显然应该是在f(x,y)的等高线正好和约束线相切的位置,因为如果只是相交意味着肯定还存在其它的等高线在该条等高线的内部或者外部,使得新的等高线与目标函数的交点的值更大或者更小,只有到等高线与目标函数的曲线相切的时候,可能取得最优解。

  如果我们对约束也求梯度 ∇g(x,y) ,则其梯度如图中绿色箭头所示。

        很容易看出来,要想让目标函数f(x,y)的等高线和约束相切,则他们切点的梯度一定在一条直线上 ( f 和 g 的斜率平行)。

  也即在最优解的时候:\bigtriangledown f(x,y)= \lambda(\bigtriangledown g(x,y) - C )

其中∇为梯度算子;

即:f(x)的梯度 = λ*g(x) 的梯度,λ是常数,可以是任何非0实数,表示左右两边同向。

即:     \bigtriangledown [f(x,y)+\lambda(g(x,y)-c)]=0 \, \, \, \, \, \, \, \, \: \: \: \: \: \: (\lambda \neq 0)

那么拉格朗日函数: F(x,y)=f(x,y)+\lambda(\, \, g(x,y)-c)

在达到极值时 F(x,y) f(x,y) 相等,因为 F(x,y) 达到极值时 g(x,y)−c 总等于零。

min( F(x,λ) )  取得极小值时 其导数为0,即: \bigtriangledown f(x)+\bigtriangledown\sum n_{i} = \lambda_{i}h_{i}(x)=0

也就是说 f(x)h(x) 的梯度共线。

简单的说,在F(x,λ)取得最优解的时候,

即 F(x,λ) 取极值(导数为0,\bigtriangledown [f(x,y)+\lambda(g(x,y)-c)]=0 \, \, \, \, \, \, \, \, \: \: (\lambda \neq 0))的时候,

f(x)与g(x) 梯度共线,此时就是在条件约束g(x)下,f(x)的最优解。


 例题1.2:(用LINGO求解)

抛物面 z=x^2 +y^2 被平面 x+y+z=1 截成一椭圆,

求原点到这椭圆的最短距离。

解答:

该问题可以用拉格朗日乘子法求解。下面把问题归结成数学规划模型,用LINGO求解。

设原点到椭圆上点(x,y,z) 的距离最短,建立如下数学规划模型: (s.t. => subject to 即“受限于”)

                                                        min\sqrt{x^2+y^2+z^2}

                ​​​​​​​        ​​​​​​​        ​​​​​​​     s.t.\left\{\begin{matrix}x+y+z=1 & & \\ z=x^2+y^2 & & \end{matrix}\right.

LINGO求解程序如下:

min = (x^2+y^2+z^2)*(1/2);
x+y+z = 1;
z = x^2 + y^2;
@free(x);
@free(y);

PS:LINGO中默认所有变量都是非负的,这里的 x, y 的取值可正可负,所以使用@free函数

@free(x):取消对变量x 的默认下界为 0 的限制,即 x 可以取任意实数。

运行结果如下:


(3)不等式约束条件

       设目标函数f(x),不等式约束为g(x),有的教程还会添加上等式约束条件h(x)。

此时的约束优化问题描述如下:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        min \,\, f(X)

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        s.t.\,\,h_j(X)=0\,\,\,\,\,\,\,\,\,\,\,j=1,2...,p

                                                               g_{k}\leqslant 0\,\,\,\,\,\,\,\,\,\,k=1,2,...,q

则我们定义不等式约束下的拉格朗日函数 L,则 L表达式为:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​   L(x,\lambda,\mu ) = f(X) +\sum_{j=1}^{p}\,\lambda_{j}h_{j}(X)+\sum_{k=1}^{q}\,\mu_{k}\,g_{k}(X)

其中 f(x) 是原目标函数,h_{j}(X) 是第 j 个等式约束条件,\lambda_{j} 是对应的约束系数,g_{k} 是不等式约束,\mu_{k} 是对应的约束系数。

常用的方法是KKT条件,同样地,把所有的不等式约束、等式约束和目标函数全部写为一个式子:

        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        L(a, b, x)= f(x) + a*g(x)+b*h(x)

  KKT条件的最优值必须满足以下条件:

    1)L(a, b, x) 对 x 求导为零;

    2)h(x) =0;

    3)a*g(x) = 0;

求取这些等式之后就能得到候选最优值。其中第三个式子非常有趣,因为 g(x)\leqslant 0,如果要满足这个等式,必须a=0或者g(x)=0。

这是SVM的很多重要性质的来源,如支持向量的概念。

  接下来主要介绍KKT条件,推导及应用。详细推导过程如下:

        


参考文章:(如侵权,请联系我删除)

1. 拉格朗日乘数法_ACdreamer-CSDN博客_拉格朗日乘数法

2. 拉格朗日乘子法(Lagrange Multiplier) - 知乎 (zhihu.com)

3.​​​​​​一文看懂支持向量机 SVM(附:6个有点+5个缺点) (easyai.tech)

4. KKT条件介绍_johnnyconstantine的专栏-CSDN博客_kkt条件

5.​​​​​​【整理】深入理解拉格朗日乘子法(Lagrange Multiplier) 和KKT条件 - mo_wang - 博客园 (cnblogs.com)

这篇关于Lingo学习—— 拉格朗日乘子法 KKT条件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/952787

相关文章

Oracle Expdp按条件导出指定表数据的方法实例

《OracleExpdp按条件导出指定表数据的方法实例》:本文主要介绍Oracle的expdp数据泵方式导出特定机构和时间范围的数据,并通过parfile文件进行条件限制和配置,文中通过代码介绍... 目录1.场景描述 2.方案分析3.实验验证 3.1 parfile文件3.2 expdp命令导出4.总结

Python按条件批量删除TXT文件行工具

《Python按条件批量删除TXT文件行工具》这篇文章主要为大家详细介绍了Python如何实现按条件批量删除TXT文件中行的工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.简介2.运行效果3.相关源码1.简介一个由python编写android的可根据TXT文件按条件批

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识