拉格朗日乘子法以及KKT条件

拉格朗日乘子法以及KKT条件

拉格朗日乘子法是一种优化算法,主要用来解决约束优化问题。他的主要思想是通过引入拉格朗日乘子来将含有n个变量和k个约束条件的约束优化问题转化为含有n+k个变量的无约束优化问题。

其中,利用拉格朗日乘子法主要解决的问题为:

等式的约束条件和不等式的条件约束。

 

拉格朗日乘子的背后的数学意义是其为约束方程梯度线性组合中每个向量的系数。

等约束条件的解决方法不在赘述。

对于非等约束条件的求解,需要满足KKT条件才能进行求解。下面对于KKT条件进行分析。

不等式约束优化问题:

<span>拉格朗日乘子法以及KKT条件</span>

得到拉格朗日乘子法的求解方程:

<span>拉格朗日乘子法以及KKT条件</span>

给出KKT条件:

<span>拉格朗日乘子法以及KKT条件</span>

 

实际上,为什么要给出KKT条件?这里涉及到对偶问题。

我们引入拉格朗日函数L(x,α,β)将有约束的优化问题转换为无约束的优化问题,然后对原问题的参数求导,获得使拉格朗日函数最小的拉格朗日对偶函数g(α,β),最后使得对偶函数最大的问题则成为原问题的对偶问题。(对偶函数给出了主问题最优解的下界。那么下界最大是什么,这就是主问题的对偶问题)

因此对于上面拉格朗日乘子法问题的描述表达为:

<span>拉格朗日乘子法以及KKT条件</span>

但其实是仍然个很难解决的问题,因为我们要先解决不等式约束的max问题,然后再在x上求最小值。怎么办呢?如果能把顺序换一下,先解决关于x的最小值,在解决关于α、β的不等式约束问题就好了。即,

<span>拉格朗日乘子法以及KKT条件</span>

假设原问题为p,对偶问题为d,事实上,p和d并不完全相等,此处含有一个性质:弱对偶性

即:

<span>拉格朗日乘子法以及KKT条件</span>

而他两个的差即为对偶间隙

解释:大家想一下,函数L中最大值中最小的一个总比最小值中最大的那一个要大,也就是对偶问题提供了原问题最优值的一个下界。

但是大家想,我们是想通过对偶问题求解原问题的最优解,所以只有当二者相等时才可能将原问题转化成对偶问题进行求解。当然,当满足一定条件的情况下,便有p=d。而这个条件便是 slater条件和KTT条件

在凸优化理论中,有一个Slater定理,当这个定理满足,结合KKT条件,那么对偶间隙就会消失,就是强对偶性成立。

<span>拉格朗日乘子法以及KKT条件</span>

 

其中对于KKT条件的KKT因子为什么需要大于等于0不太好理解。

 

 <span>拉格朗日乘子法以及KKT条件</span>

我的理解:如上,只有当大于等于0的时候,L的取值才能有最大值,即:

<span>拉格朗日乘子法以及KKT条件</span>这一步才有值。

当然这个只是我个人的理解吧,理论上详细的证明参考《数值优化》-Jorge Nocedal  第12章

当然它上面的公式:

<span>拉格朗日乘子法以及KKT条件</span>

<span>拉格朗日乘子法以及KKT条件</span>

都是基于

<span>拉格朗日乘子法以及KKT条件</span>

这样一个假设,不过我们一般假设的约束条件是小于等于0,所以看上去形式有点不一样,其实道理都一样的。

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119460.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Go语言开发环境_如何搭建语言培训平台

    Go语言开发环境_如何搭建语言培训平台前言:在《高效能人士的七个习惯》一书中有这么一句话“学而不做等于没学,知而不做等于无知”,所以学习一门新语言光看是不行的,必须身体力行才可以,如果不实践的话最终也只是无知的状态。对于学习语言来说,“做”对应的是编码、调试、运行等,在进行这些工作之前,我们必须安装好编码和调试用的编辑器,运行所需的环境等,这篇文章便是和大家介绍关于go语言开发的环境搭建。一、安装go语言开发包1….

    2022年10月12日
    3
  • 学生成绩管理系统——JAVA

    学生成绩管理系统——JAVA学生成绩管理系统1.简介本学生成绩管理系统具有录入学生成绩、查询学生成绩、输出学生按成绩的排名、输出学科的分数四个功能,其中后两个功能在“输出成绩”这一目录下。此系统可以实现学生成绩管理的一些基本操作。1.1各模块功能简介录入成绩输入若干同学的学号、姓名以及四个科目的成绩(应用数学、大学英语、Java程序设计、计算机应用基础),并将其保存在建立好的数据库中。查询成绩进入该模块后,输入想要查询成绩的学生姓名,即可在数据库中检索该学生的成绩信息并输出其各科成绩。输出成绩该模块主要分为两

    2022年7月13日
    16
  • 怎么将python代码编译_python怎么编译运行

    怎么将python代码编译_python怎么编译运行有时为了一些机密,不方便公开python源码,所以需要以编译方式进行部署。这里主要介绍以.pyc的方式。1、生成单个文件:(1)python-mxx.py(2)在python编译器中进行:importpy_compilepy_compile.compile(‘路径’)2、批量生成文件:importcompileallcompileall.compile_dir(r’/pat………

    2025年7月20日
    3
  • Windows jmeter安装

    Windows jmeter安装安装了jdk就可以然后下载jmeter压缩包ApacheJMeter-DownloadApacheJMeterWindows下载zip文件下载下来后,解压,就可以使用打开jmeter打开解压文件夹,打开bin目录,双击jmeter.bat文件即可。

    2022年5月4日
    64
  • clion 激活码2022_在线激活「建议收藏」

    (clion 激活码2022)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.net/100143.htmlFZP9ED60OK-eyJsaWN…

    2022年4月1日
    1.7K
  • fopen函数打开文件失败原因_为什么打开文件失败

    fopen函数打开文件失败原因_为什么打开文件失败大家好,我是疯狂的比特,一个每天在互联网上种菜和砍柴的程序员今天给大家分享一个C语言初学者常见的一个问题。问题经常有人问我,我的C语言代码好好的,怎么就打开文件失败了呢?我们先来看看代码吧#include<stdio.h>#include<stdlib.h>intmain(){ FILE*pfRead=fopen(“test.txt”,”r”); if(pfRead==NULL) { printf(“打开文件test.txt失败啦\

    2022年10月14日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号