Dantzig-Wolfe分解

参考资料:Introduction to Linear Programming, Dimitris Bertsimas etc
这篇博客是个人笔记的电子版(●ˇ∀ˇ●),希望之后的自己也能看懂吧
在这本教材的Dantzig-Wolfe分解章节中,作者主要列举了两个小例子,结合坐标图,解释这种分解算法的过程,非常推荐看原书的讲解。
大家小心,我要开始胡诌了……


  • 学习体会
    Dantzig-Wolfe分解主要是针对大型线性规划问题的一种精确算法。其思想是,对于一些有特殊结构(约束矩阵的一部分是由对角分块矩阵构成,另一部分是耦合约束(coupling constraints),具体的样式可以参考下图的(6.10))的线性规划问题,将原大规模矩阵分解成 主问题+若干子问题求解。
    为了便于理解,可以把主问题视为一个中心,把子问题视为若干小部门,小部门向中心反馈信息(信息指的是,能够改进目标函数值的进基变量和对应的列),中心收到信息后会更新自己的信息库(目标函数、约束矩阵、基等)并求解,得到对偶信息;中心将这个对偶变量的值下发到小部门,以便于小部门更新他们的目标函数。
    其实质是列生成,但值得注意的是“如何引入列生成算法”:Dantzig-Wolfe分解算法用到了线性规划问题解的表示定理(线性规划问题可行域中的任一点可以表示成极点的凸组合+极射线的非负组合),从而将原问题(决策变量为x)转化为等价问题(决策变量为组合系数λ、θ)。如此一来,转化后的问题有更少的约束(更重要的是,转换后的约束有上述的特殊结构,这是我们希望看到的)、更多的变量(因为线性规划问题的极点、极射线是很多,在实际场景中很难全部找到,其实也没必要全部找到——这就启发我们使用列生成算法)。以原问题是最小化问题为例,简单说说子问题的构造:目标函数是主问题(Master)的非基变量的检验数(minimize its reduced cost),约束是上述特殊结构约束矩阵中的对应分块。子问题主要是想检查还有没有更好的变量可以进基,从而进一步减小主问题的目标函数值。(注:这里说的主问题,具体指的是限制性主问题(restricted master problem),二者的区别在于后者只有部分列,前者有全部列)。
    有意思的是,在计算过程中,这种算法给出的可行解可能并不是极点(而是极点的凸组合);但最优解还是会落到极点上啦。
    另外,本章最后还给出了一个定理——关于该分解算法求得的最优值下界,证明过程特别巧妙!
  • 小提示
    学这个算法之前,最好把单纯形法中的概念弄清楚,比如:reduced cost(检验数及其计算、如何选择进基变量), dual variable, simplex multiplier, 最小比值原则选择出基变量、reduced cost与dual variable之间的关系等等。

在这里插入图片描述
在这里插入图片描述

例子6.2

在这里插入图片描述
在这里插入图片描述

例子6.3

在这里插入图片描述
在这里插入图片描述

如何启动这个算法

这个算法需要一个主问题的初始基可行解来启动。
如果没有,那么参照“两阶段法”的思路,引入辅助变量(人工变量),构造辅助主问题。
通过求解辅助问题,判断主问题是否可行,如果可行,找到初始基可行解。

  • Dantzig-Wolfe分解算法优势在于:相比于直接在原问题上做revised simplex method,这种算法很节省计算内存。
    在这里插入图片描述

关于解的下界,定理证明

写出主问题的对偶问题,
根据“z是主问题的可行解对应的目标函数值”,找到主问题的可行解对应的对偶变量值(q,r1,r2);
虽然这个对偶变量值(q,r1,r2)能够使得“ q T b 0 + r 1 + r 2 = z q^Tb_0+r_1+r_2=z qTb0+r1+r2=z”成立,但是并不一定是 主问题的对偶问题 的可行解;
这里有一个很重要的点是,我们已经假设 子问题i的最优值zi是有限的,于是可以找到合适的r1,r2使得 这个对偶变量值(q,r1,r2) 对 主问题的对偶问题 可行。
然后,根据原问题与对偶问题之间的弱对偶定理,写出原问题最优解下界的不等式。

在这里插入图片描述

相关推荐

  1. ESP8266发送WOL幻数据包实现电脑远程唤醒

    2023-12-10 17:42:03       10 阅读
  2. 将真分数分解为埃及分数

    2023-12-10 17:42:03       39 阅读
  3. 【数值分析】choleskey分解,matlab实现

    2023-12-10 17:42:03       42 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-10 17:42:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-10 17:42:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-10 17:42:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-10 17:42:03       20 阅读

热门阅读

  1. springboot——helloworld入门

    2023-12-10 17:42:03       27 阅读
  2. Python3 基本数据类型 ----20231209

    2023-12-10 17:42:03       31 阅读
  3. mysql中information_schema.tables字段说明

    2023-12-10 17:42:03       41 阅读
  4. GO设计模式——1、简单工厂模式(创建型)

    2023-12-10 17:42:03       39 阅读
  5. 开源软件:JumpServer、DataEase、MeterSphere

    2023-12-10 17:42:03       44 阅读
  6. 【周报2023.12.09】

    2023-12-10 17:42:03       43 阅读
  7. c++ 类和对象-封装意义一

    2023-12-10 17:42:03       39 阅读
  8. 用格里高利公式求给定精度的PI值

    2023-12-10 17:42:03       43 阅读