首先介绍下拉格朗日松弛的出发点,以及该方法所属的门类;再介绍下拉格朗日松弛法需要处理的难点和注意事项。

目录

1.拉格朗日松弛出发点

2.拉格朗日松弛所属分类

3.拉格朗日松弛

3.1 拉格朗日松弛(松弛全部,转化为无约束问题)

3.2 拉格朗日分解(只松弛部分约束)

3.2.1 简单可分离问题——满足可分离性

3.2.2 非可分离性问题——需要上拉格朗日分解(松弛部分约束)


1.拉格朗日松弛出发点

对于min问题而言,众所周知线性松弛可以提供一个下界,线性松弛很简单,即把决策变量的整数约束松弛为连续约束,这个界并不好。

因此我们期望找到一个更好的下界,这样上下界之间差距gap小,后续使用分支定界就可以剪去更多分支,求解效率就可以提升了。同样提升下界的方法,还有添加割平面,有效不等式,这些方法本质也是通过添加约束,砍掉外围的部分,通过缩小可行域,来让解提到提升(下界变大)。

所以综上:

(1)拉格朗日松弛得到的下界会比线性松弛得到的下界要好。

(2)每一个拉格朗日乘子对应着一个界,我们期望找到最好的下界,这句话等同于找到最好的拉格朗日乘子

这是我们的出发点。

2.拉格朗日松弛所属分类

张老师提到ARRD的方法,是求解优化问题的四条路径:

A:approximate,近似算法

R:reformulation,重写模型,像DW分解,列生成,就属于这个脉络;

R:relaxation,松弛,线性松弛,拉格朗日松弛属于这个脉络;

D:decomposition,分解算法,本质是降维,benders分解,拉格朗日分解属于这一脉络。

换句话说拉格朗日算法还挺牛的,横跨拉格朗日松弛和拉格朗日分解两条路径。

3.拉格朗日松弛

拉格朗日松弛的思路和做法是,对于约束引入拉格朗日乘子,然后构造拉格朗日函数。注意,拉格朗日函数会比原问题的解更好,因为原目标函数中引入的拉格朗日项让原目标函数min问题更小,让原目标函数max问题更大了。因此我们对于min问题而言,在所有的拉格朗日乘子构造的拉格朗日函数中取max,往上拉大下界,从而可以得到拉格朗日松弛所能得到的最好的下界;对于max问题而言,在所有拉格朗日函数中取min,往下拉低上界。

拉格朗日松弛后的拉格朗日函数的形式,可以分为两种类型,(此处默认是松弛所有约束):

(1)一种是经过分析后不再含有原变量,只含有拉格朗日乘子,也叫作只含有拉格朗日乘子的显示表达。此时,直接求解,就可以得到最好的拉格朗日乘子,也就是我们说的对偶变量。——线性规划的对偶规划就是这么得到的。详见3.1。

(2)同时含有原函数的变量和拉格朗日乘子,也叫作非显示表达。有两种处理途径:一种是外逼近法,或者是只松弛部分约束即拉格朗日分解法。详见3.1种注意点(2)及3.2。

3.1 拉格朗日松弛(松弛全部,转化为无约束问题)

经过合并同类项,以及分析(各种场景,这一步是核心,可见注意点1里的分析),这样就能够使得拉格朗日函数得到的下界最好,最好的下界对应的乘子就是最好的乘子,也是我们说的对偶变量。(以下全部以min问题为例,只要不提,默认就是min问题。)

线性规划的对偶规划就是通过拉格朗日松弛推理分析得到的。

注意点:

(1)拉格朗日松弛得到的最好下界即使是可行解,也不一定是原问题的最优解。

因为新目标函数中还存在拉格朗日乘子项,除非拉格朗日乘子项=0(下图中的μ(b-Ax)=0,此时L(μ)=mincx也就是原来的目标函数),即被松弛约束的互补松弛性成立,再具体点说:要么乘子为0,要么被松弛的约束等式成立,(这就是KKT条件的3个条件之一)。

(2)拉格朗日松弛后的拉格朗日函数有两种类型:

a)一种是经过分析后不再含有原变量,只含有拉格朗日乘子,比如我们上面介绍的拉格朗日松弛得到对偶。

b)还有一种是无法分析,此时拉格朗日函数中同时含有原变量和拉格朗日乘子两类变量。那么我们的方式是先固定原变量,此时拉格朗日函数中只含有拉格朗日乘子一类变量了。具体的方法是我们通过列举原变量取值的可能,或者列举部分可能,这样拉格朗日函数中仅含有拉格朗日乘子一类变量,然后求解,得到乘子;再得到新的原变量取值,再求解继续得到新乘子......这是外逼近法的思路。在非线性规划问题中用的多。

3.2 拉格朗日分解(只松弛部分约束)

由于非显示表示的拉格朗日函数不好处理,我们通常采用只松弛部分约束的方式。也就是拉格朗日分解这条路。

分解的本质是降维。按照问题的难易(是否满足分离性),可以将所有的优化问题分为两类:

3.2.1 简单可分离问题——满足可分离性

对于一个优化问题而言,如果
• (1) 约束条件彼此之间互相独立(约束中只含有某类变量,不会有多类变量混合的情况。混合的也被叫做耦合/链接约束),
• (2) 目标函数可以写成对应元素的和的形式

我们称这样的问题为可分离问题。对于可分离问题,我们可以对其进行分解,分解成一个个的独立子问题,子问题往往是容易求解的。求解完独立子问题之后,再求和就可以得到原问题的解,原问题的最优解就等于子问题的最优解之和。

总之,对于满足可分类的问题而言,子问题之间是互相独立的,目标函数也是互相独立的,那么原问题可以拆成若干个子问题,原问题的目标函数也是这若干个子问题的累加。

3.2.2 非可分离性问题——需要上拉格朗日分解(松弛部分约束)

如果约束条件不具备上述可分离性,那么需要上拉格朗日分解了!拉格朗日分解的本质还是拉格朗日松弛。先进行拉格朗日松弛处理,通过拉格朗日松弛的方式把一些复杂的约束条件放到目标函数上进行处理,之后再对问题进行分解。

这种处理方法的难点在于:

(1)松弛哪些约束——直接决定着子问题好不好解,常见的思路是看处理后的子问题是否具有特殊结构,比如形如背包约束的等等;

(2)解出来的好不好——间接决定着得到的下界怎么样,也是需要注意的一个问题。

总结:

1.拉格朗日松弛其实是想找最好的下界,这等同于找最好的乘子。一个拉格朗日乘子对应着一个下界。

2.假如拉格朗日函数可以写出显示表达,那么就可以直接得到原问题的对偶,直接找到最好的拉格朗日乘子。

3.拉格朗日得到的下界即使是原问题的可行解,也不一定是原问题的最优解,因为存在着拉格朗日乘子项,除非该项为0。

4.拉格朗日松弛掉部分约束的时候,这部分约束应该怎么选,直接决定着子问题求解的难易,以及求解结果的好坏。基本的出发点是处理那些子问题具有特殊结构的约束松弛掉;或者是耦合约束。

运筹优化课程 013-Lagrangian relaxation

拉格朗日松弛与拉格朗日分解 lagrangian relaxation相关推荐

  1. 拉格朗日松弛(一)——理论及算法

    目录 背景 拉格朗日松弛--理论 拉格朗日松弛--算法 次梯度优化算法 拉格朗日松弛启发式算法 参考资料 背景 Marshall L.Fisher在1981年发表在<Management Sci ...

  2. 拉格朗日松弛(lagrangian relaxation) - An Overview

    拉格朗日松弛(lagrangian relaxation) - An Overview 文章目录 拉格朗日松弛(lagrangian relaxation) - An Overview 1. Appl ...

  3. 拉格朗日松弛与分解学习笔记2023.3.8

    第一种松弛,将约束右边值变大,可行空间变大,但是没什么意义. 第二种松弛,去除部分约束,改变问题结构 第三种松弛,叫做连续松弛或者线性松弛,保留约束条件,但是离散变量看成连续变量(去掉整数约束) 第四 ...

  4. 拉格朗日松弛求解整数规划浅析(附Python代码实例)

    运筹优化博士,只做原创博文.更多关于运筹学,优化理论,数据科学领域的内容,欢迎关注我的知乎账号:https://www.zhihu.com/people/wen-yu-zhi-37 拉格朗日松弛是一种 ...

  5. 拉格朗日松弛求解问题

    1.概述 直观上拉格朗日松弛方法就是将约束中难解的部分变为目标函数中的一部分,扩大搜索的范围. 拉格朗日松弛方法不仅能够求解非线性规划问题还能求解整数规划问题. 整数规划问题求解方法 benders ...

  6. Multi-target tracking by Lagrangian relaxation to min-cost network flow

    Multi-target tracking by Lagrangian relaxation to min-cost network flow high-order constraints min-c ...

  7. 拉格朗日函数、拉格朗日对偶问题、KKT条件个人理解

    最近学习SVM的相关内容时,接触到了拉格朗日函数及其对偶问题,于是就学习了一些相关内容,在此整理总结一下.文章内容为个人理解,如有错误,欢迎指正! 文章目录 1. 引言 1.1 在约束条件下求函数的极 ...

  8. 拉格朗日插值_拉格朗日插值定理的理论基础

    缺失,几乎是不可避免的.只要做数据处理,不可避免的工作就是插值.而插值里面比较常用的方法之一就是拉格朗日插值法,这篇文章就跟大家讲讲拉格朗日插值的理论基础. 为什么需要进行插值 我们进行数据处理的理想 ...

  9. RN-Integer Programming:Lagrangian Relaxation and Duality Theory

    Content 1 Lagrangian Relaxation 2 Continuous Relaxation and Dual Relaxation 3 Dual Search 4 Conclusi ...

最新文章

  1. python的jupyter的使用教程-Jupyter notebook快速入门教程
  2. 最大矩形面积_JAVA
  3. DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优
  4. React手稿 - Context
  5. basic4android 开发教程翻译(六)使用B4A-Bridge连接你的设备
  6. python 逆向生成正则表达式_用Python中的正则表达式生成lis
  7. spring用的很开心的标签(随时增加)
  8. Spring Boot 声明式事务 @Transactional 的使用
  9. 为什么我的mysql比redis快_为什么redis是单线程的以及为什么这么快?
  10. Android开发笔记(七十二)数据加密算法
  11. 自主创新生态圈再扩大,深度科技与金格科技完成产品兼容性认证
  12. 老王教您怎么做cass7.1 8.0 9.1所有系列的复制狗 加密狗 破解狗
  13. 使用clonezilla(在生龙)克隆系统
  14. Dell OptiPlex 7090插入耳机有声音没有麦克风的解决方案
  15. C++程序的设计机制1 NVI机制
  16. Android红外线遥控
  17. 教你文件批量重命名技巧,彻底告别手工改名的繁琐
  18. java币值转换_-PAT-java-5-23 币值转换 (20分)
  19. 纷享销客标讯通,大客招标经营的杀手锏
  20. 开发规范及具体开发任务分工

热门文章

  1. iOS 判断字符串中含有某个字符串 rangeOfString
  2. Snort入侵检测系统实验
  3. libnet介绍与分析
  4. Java基础冒泡排序——高低输出十个学生的成绩
  5. 【实习之路】投了109份简历,幸运的大二菜鸡终于拿到欢聚时代的offer了!!
  6. 新浪采集内容数据自动发布
  7. Linux中误删文件的恢复方法
  8. python去复杂的水印_两种Python基于OpenCV的固定位置半透明水印去除方案
  9. C# 数字转16进制和字符串转换16进制
  10. 机器学习所需要的高数知识