​原始-对偶(Primal-Dual)算法(Dantzig, Ford, and Fulkerso,1956)是用来求解线性规划的一种算法,可以看作是单纯形法的一种变体,目的是减少迭代次数。

构建该算法的核心依据为原问题和对偶问题的最优解满足的互补松弛关系。
考虑以下线性规划问题PPP:
min⁡cTxs.t.Ax⩾bx⩾0\min \quad \boldsymbol{c}^T\boldsymbol{x} \\ s.t.\,\qquad \quad \\ \qquad \boldsymbol{Ax}\geqslant \boldsymbol{b} \\ \qquad \boldsymbol{x}\geqslant \mathbf{0} mincTxs.t.Ax⩾bx⩾0

和他的对偶问题DDD:
max⁡bTys.t.ATy⩽cy⩾0\max \quad \boldsymbol{b}^T\boldsymbol{y} \\ s.t.\,\qquad \quad \\ \qquad \boldsymbol{A^{T}y}\leqslant \boldsymbol{c} \\ \qquad \boldsymbol{y}\geqslant \mathbf{0} maxbTys.t.ATy⩽cy⩾0

其中A\boldsymbol{A}A 是m×nm\times nm×n的矩阵, b\boldsymbol{b}b 和 c\boldsymbol{c}c 都大于0。

假设 x\boldsymbol{x}x 和 y\boldsymbol{y}y 分别是问题 PPP, DDD 的可行解,判断 x\boldsymbol{x}x 和 y\boldsymbol{y}y 是否为最优解,需要同时考虑两种互补松弛条件:

  • 第一种:primal complementary slackness conditions
    xj>0⇒Ajy=cj(1)Ajy<cj⇒xj=0(2)x_j>0\Rightarrow A^jy=c_j\qquad \left( 1 \right) \\ A^jy<c_j\Rightarrow x_j=0\qquad \left( 2 \right) xj​>0⇒Ajy=cj​(1)Ajy<cj​⇒xj​=0(2)
    其中 Aj\boldsymbol{A^j}Aj 表示系数矩阵的第 jjj 列。

    (1)表示,当原问题的可行解 xj>0x_j>0xj​>0 时,它对应的对偶问题的约束为紧约束(等号成立)。
    (2)表示,当对偶问题的某个约束为松约束时,它对应的原问题的可行解 xj=0x_j=0xj​=0 。

​- 第二种:dual complementary slackness conditions
yi>0⇒Aix=bi(3)Aix<bi⇒yi=0(4)\\ y_i>0\Rightarrow A_ix=b_i\qquad \left( 3 \right) \\ \\ A_ix<b_i\Rightarrow y_i=0\qquad \left( 4 \right) yi​>0⇒Ai​x=bi​(3)Ai​x<bi​⇒yi​=0(4)
​其中 Ai\boldsymbol{A_i}Ai​ 表示系数矩阵的第 iii 行。

可以从经济分析的角度理解这一条件:
假设原问题是形如 DDD 的资源分配模型,c\boldsymbol{c}c 为资源限额,此时每条供给约束都对应着一个影子价格。影子价格的定义是:管理层愿意为获取额外一定单位的既定资源而多付出的最大价格。

表达式 (3)表示当影子价格大于0时,表示在现有基础资源限额上,每增加一单位资源,收益便会改善,说明现有资源已经被消耗殆尽,约束为紧约束;

表达式(4)说明假如当前资源过剩,并不稀缺时,说明并不需要获取额外单位的既定资源,因此影子价格为0 。

只有当上述条件 (1)~(4) 全部同时满足的时候,x\boldsymbol{x}x 和 y\boldsymbol{y}y 才会是最优解。

因此,为了找到最优解,首先需要找到能够满足上述条件的松、紧约束的下标集合。这里考虑两种集合:
J={j∣yAj=cj}I={i∣yi=0}J = \{j \;|\;\boldsymbol{y}\boldsymbol{A}^j=c_j\}\\ I = \{i \;|\;y_i=0\} J={j∣yAj=cj​}I={i∣yi​=0}

​> 如果将互补松弛性的达成视为目标的话,寻找可行解的过程就是使得原始约束和互补松弛条件的违背最小的过程。
这样的“违背”可以建模为多种形式,称为限定原问题(restricted primal problems)。

例如下例 (5):
zINF=min⁡∑i∉Isi+∑j∉Jxjs.t.Aix⩾bii∈IAix−si=bii∉Ix⩾0s⩾0z_{INF}=\min \sum_{i\notin I}{s_i+\sum_{j\notin J}{x_j}} \\ s.t.\quad \quad \quad \quad \quad \quad \;\; \\ \qquad A_ix\geqslant b_i\qquad i\in I \\ A_ix-s_i=b_i\qquad i\notin I \\ \qquad \quad x\geqslant 0\qquad \qquad \\ \qquad \quad s\geqslant 0\qquad \qquad \\ zINF​=mini∈/​I∑​si​+j∈/​J∑​xj​s.t.Ai​x⩾bi​i∈IAi​x−si​=bi​i∈/​Ix⩾0s⩾0
当该限定原问题的目标值为0的时候,即得原问题的最优解

若满足互补松弛性,则i∉Ii \notin Ii∈/​I对应着原问题的所有紧约束,即∑i∉Isi=0\sum_{i\notin I}{s_i}=0∑i∈/​I​si​=0必须成立,;若不成立,即不满足互补松弛性条件,说明当前可行解不是最优解,需要更新集合。

若满足互补松弛性,∑j∉Jxj\sum_{j\notin J}{x_j}∑j∈/​J​xj​表示原问题所有紧约束的解,即∑j∉Jxj=0\sum_{j\notin J}{x_j}=0∑j∈/​J​xj​=0一定成立。

而当该限定原问题的目标值不为0时,说明当前解为可行解,需要更换下标集合,修改可行解,再次进行求解判断,循环往复,直到得到原问题的最优解,或者推导出原问题无可行解。

考虑限定原始问题的对偶问题 (6) 用于构造下一个对偶问题的可行解:
max⁡bTws.t.Ajw⩽0j∈JAjw⩽1j∉Jwi⩾−1i∈Iwi⩾0i∉I\max \quad \boldsymbol{b}^T\boldsymbol{w}\qquad \\ s.t.\,\qquad \qquad \quad \\ \qquad \boldsymbol{A}^j\boldsymbol{w}\leqslant 0\qquad j\in J \\ \qquad \boldsymbol{A}^j\boldsymbol{w}\leqslant 1\qquad j\notin J \\ \qquad w_i\geqslant -1\qquad i\in I \\ \quad \qquad w_i\geqslant 0\qquad i\notin I maxbTws.t.Ajw⩽0j∈JAjw⩽1j∈/​Jwi​⩾−1i∈Iwi​⩾0i∈/​I

设 (6) 的最优解为 w0\boldsymbol{w_0}w0​,下面利用对偶问题 DDD 的可行解y0\boldsymbol{y_0}y0​构造一个新的对偶可行解y=y0+θw0\boldsymbol{y} = \boldsymbol{y_0}+\theta \boldsymbol{w_0}y=y0​+θw0​,其中 θ>0\theta>0θ>0。

由于不同 jjj 对应着不同的问题约束,下面分两种情况讨论:

当 j∈Jj\in Jj∈J 时:
此时 w0Aj⩽0\boldsymbol{w_0}\boldsymbol{A^j}\leqslant0w0​Aj⩽0 ,则有:
yAj−cj=(y0+θw0)Aj−cj=y0Aj−cj+θw0Aj⩽0\boldsymbol{y} \boldsymbol{A}^j-c_j = (\boldsymbol{y_0}+\theta\boldsymbol{w_0} )\boldsymbol{A}^j-c_j\\ =\boldsymbol{y_0}\boldsymbol{A}^j-c_j+\theta\boldsymbol{w_0}\boldsymbol{A}^j \leqslant 0 yAj−cj​=(y0​+θw0​)Aj−cj​=y0​Aj−cj​+θw0​Aj⩽0
满足 DDD 约束,。

当 j∉Jj\notin Jj∈/​J 时:
此时根据集合 JJJ 的定义,有 y0Aj−cj<0\boldsymbol{y_0}\boldsymbol{A}^j-c_j<0y0​Aj−cj​<0,也就是说,只需选取适当的 θ\thetaθ ,便可以证明 y0Aj−cj+θw0Aj<0\boldsymbol{y_0}\boldsymbol{A}^j-c_j+\theta\boldsymbol{w_0}\boldsymbol{A}^j <0y0​Aj−cj​+θw0​Aj<0 成立,从而证明 y\boldsymbol{y}y是可行解。
接下来讨论 w0Aj\boldsymbol{w_0}\boldsymbol{A^j}w0​Aj 的符号:
① ​如果 w0Aj⩽0\boldsymbol{w_0}\boldsymbol{A^j}\leqslant0w0​Aj⩽0,则 y0Aj−cj+θw0Aj<0\boldsymbol{y_0}\boldsymbol{A}^j-c_j+\theta\boldsymbol{w_0}\boldsymbol{A}^j <0y0​Aj−cj​+θw0​Aj<0成立。
② 如果 w0Aj>0\boldsymbol{w_0}\boldsymbol{A^j}>0w0​Aj>0,要使y0Aj−cj+θw0Aj<0\boldsymbol{y_0}\boldsymbol{A}^j-c_j+\theta\boldsymbol{w_0}\boldsymbol{A}^j <0y0​Aj−cj​+θw0​Aj<0成立,则需
θ⩽−(y0Aj−cj)w0Aj\theta \leqslant \frac{-\left( \boldsymbol{y}_{\boldsymbol{0}}\boldsymbol{A}^j-c_j \right)}{\boldsymbol{w}_{\boldsymbol{0}}\boldsymbol{A}^j}θ⩽w0​Aj−(y0​Aj−cj​)​ 成立,则令:
θ=min⁡j{−(y0Aj−cj)w0Aj∣w0Aj>0}=−(y0Ak−ck)w0Ak\theta = \underset{j}{\min}\left\{ \frac{-\left( \boldsymbol{y}_{\boldsymbol{0}}\boldsymbol{A}^j-c_j \right)}{\boldsymbol{w}_{\boldsymbol{0}}\boldsymbol{A}^j}|\boldsymbol{w}_{\boldsymbol{0}}\boldsymbol{A}^j>0 \right\} =\frac{-\left( \boldsymbol{y}_{\boldsymbol{0}}\boldsymbol{A}^k-c_k \right)}{\boldsymbol{w}_{\boldsymbol{0}}\boldsymbol{A}^k} θ=jmin​{w0​Aj−(y0​Aj−cj​)​∣w0​Aj>0}=w0​Ak−(y0​Ak−ck​)​

将 θ\thetaθ 代入式子 y0Aj−cj+θw0Aj\boldsymbol{y_0}\boldsymbol{A}^j-c_j+\theta\boldsymbol{w_0}\boldsymbol{A}^jy0​Aj−cj​+θw0​Aj ,得到:
yAj−cj=(y0+θw0)Aj−cj=(y0Aj−cj)+θw0Aj=(y0Aj−cj)+−(y0Ak−ck)w0Akw0Aj⩽(y0Aj−cj)+−(y0Aj−cj)w0Ajw0Aj=(y0Aj−cj)−(y0Aj−cj)=0\boldsymbol{yA}^j-c_j\\=(\boldsymbol{y}_{\boldsymbol{0}}+\theta \boldsymbol{w}_{\boldsymbol{0}})\boldsymbol{A}^j-c_j \\ =\left( \boldsymbol{y}_{\boldsymbol{0}}\boldsymbol{A}^j-c_j \right) +\theta \boldsymbol{w}_{\boldsymbol{0}}\boldsymbol{A}^j \\ =\left( \boldsymbol{y}_{\boldsymbol{0}}\boldsymbol{A}^j-c_j \right) +\frac{-\left( \boldsymbol{y}_{\boldsymbol{0}}\boldsymbol{A}^k-c_k \right)}{\boldsymbol{w}_{\boldsymbol{0}}\boldsymbol{A}^k}\boldsymbol{w}_{\boldsymbol{0}}\boldsymbol{A}^j \\ \leqslant \left( \boldsymbol{y}_{\boldsymbol{0}}\boldsymbol{A}^j-c_j \right) +\frac{-\left( \boldsymbol{y}_{\boldsymbol{0}}\boldsymbol{A}^j-c_j \right)}{\boldsymbol{w}_{\boldsymbol{0}}\boldsymbol{A}^j}\boldsymbol{w}_{\boldsymbol{0}}\boldsymbol{A}^j \\ =\left( \boldsymbol{y}_{\boldsymbol{0}}\boldsymbol{A}^j-c_j \right) -\left( \boldsymbol{y}_{\boldsymbol{0}}\boldsymbol{A}^j-c_j \right) \\ =0 yAj−cj​=(y0​+θw0​)Aj−cj​=(y0​Aj−cj​)+θw0​Aj=(y0​Aj−cj​)+w0​Ak−(y0​Ak−ck​)​w0​Aj⩽(y0​Aj−cj​)+w0​Aj−(y0​Aj−cj​)​w0​Aj=(y0​Aj−cj​)−(y0​Aj−cj​)=0

因此,通过求解此时的θ\thetaθ 值可以构造出新的对偶可行解,修改集合III 和 JJJ ,再解 (5) 直至找到最优解。

参考文献

[1] Goemans M X, Williamson D P. The primal-dual method for approximation algorithms and its application to network design problems[J]. Approximation algorithms for NP-hard problems, 1997: 144-191.

[2] 陈宝林. 最优化理论与算法[M]. 清华大学出版社有限公司, 2005.

原始-对偶(Primal-Dual)算法求解线性规划相关推荐

  1. 针对安全探索的受限强化学习:原始对偶优化算法

    ©作者 | 周宣含 学校 | 国防科技大学 研究方向 | 深度强化学习 在强化学习中,智能体通过在未知环境中探索与试错来学习如何决策.大多数 RL 算法允许智能体自由地探索环境,并采取任意能够提升奖励 ...

  2. python线性规划算法_线性规划的算法分析

    本章涉及知识点 1.线性规划的定义 2.可行区域.目标函数.可行解和最优解 3.转线性规划为标准型 4.转线性规划为松弛型 5.单纯形算法的思想和例子 6.避免退化-Bland规则 7.广义单纯形算法 ...

  3. 最短路问题的原始对偶算法形式

    问题描述 给定一个图,求解源点s到终点t的路径. 点弧关联矩阵定义如下: 列表示边,行表示一个顶点. 可以看到,每一列一定是-1和+1组成,其中-1表示入边,+1表示出边. 我们的目标是求解下列线性规 ...

  4. 优化 | 随机原始对偶混合梯度(SPDHG)算法及在图像处理中的应用

    论文解读者:陈宇文,胡明杰,史铭伟,赵田田 许多实际问题都可以建模为凸优化问题.相比于直接求解原问题,将问题转化为鞍点问题往往会带来好处.求解鞍点问题的一种常用算法是原对偶混合梯度算法 (PDHG), ...

  5. 基于人工蜂群算法的线性规划求解matlab程序

    基于人工蜂群算法的线性规划求解matlab程序 1 人工蜂群算法概述 2005年D. Karaboga教授仿照蜜蜂集群采蜜生物行为,提出了人工蜂群仿生算法,可以有效解决有关函数优化等相关难题.ABC算 ...

  6. 基于沙猫群优化算法的线性规划求解matlab程序

    基于沙猫群优化算法的线性规划求解matlab程序 1 沙猫群优化算法 沙猫的中文学名叫沙丘猫,俗名沙漠猫,与荒漠猫名字相似,但却是两种不同的猫科动物.沙猫生活在茫茫沙漠里,主要分布在分布于非洲北部,阿 ...

  7. 线性规划问题的单纯形算法求解

    关于线性规划问题是什么已经有很多人早就说明过了,我也小抄一波给大家预热预热,线性规划问题是运筹学中研究较早.发展较快.应用广泛.方法较成熟的一个重要分支,它是辅助人们进行科学管理的一种数学方法. 在一 ...

  8. 近似算法中的技巧之一原始对偶模式

    近似算法中的技巧之一原始对偶模式 原始对偶模式 背景回顾 基础介绍 原始对偶模式 线性规划松弛的整间隙 原始对偶模式的近似算法 总结 参考文献 原始对偶模式 背景回顾 在过去的四十年里,组合优化受到线 ...

  9. matlab实现单纯型法解线性规划_【运筹学教程】求解线性规划问题的单纯形法

    这是本公众号的第①篇文章 主要讲述运筹学中求解线性规划问题的单纯形方法:单纯形法是运筹学中求解线性规划问题的主要方法,其他一些求解大规模优化问题的算法,如列生成算法等,都是在该算法的基础上发展而来的. ...

最新文章

  1. Java项目:嘟嘟网上商城系统(java+jdbc+jsp+mysql+ajax)
  2. emwin读取sd图片_262.3MB/S读取速率,雷克沙1667X这回谁还敢吐槽
  3. python-sdk-demo的打包
  4. 815. Bus Routes
  5. win7查看 本地计算机策略,win7系统本地组策略编辑器打不开怎么办
  6. Python爬取小说
  7. 【缺陷检测】基于matlab形态学液晶显示器表面缺陷检测【含Matlab源码 1304期】
  8. 在Covid-19期间测量社交距离
  9. php表单提交 邮箱_PHP的一个基础知识 表单提交
  10. Java传智播客基础班百度云分享,详解系列文章
  11. 【微信公众号】微信公众号授权出现的常见问题解决方案
  12. 南京信息工程大学计算机考研资料汇总
  13. 写在最后——如何做好一个语音助手
  14. 软件测试入职工作流程
  15. InstallShield自定义对话框浅谈(转)
  16. html输入框禁止输入汉字,input输入框输入中文时,监听的input事件怎样屏蔽拼音状态...
  17. c语言魔方还原程序案例,利用C语言玩转魔方阵实例教程
  18. 01. 全彩RGB LED灯模块使用教程
  19. PCSC那事儿(二)
  20. Blast+安装使用的简单流程

热门文章

  1. 程序员并不适合创业,请不要搞什么 “无脑创业崇拜”
  2. 员工的忠诚来自哪里 ?
  3. NORDFLASH与NANDFLASH的区别及选型
  4. 帮我写一段年终工作总结
  5. 【面向对象】大白话版(一)------【海贼王】
  6. 哄老婆的词…………太,太服了
  7. python外星人入侵代码提示has no attri_python错误:AttributeError:'module'objecthasnoattribute's...
  8. 河内塔php,基于HTML5的WebGL设计汉诺塔3D游戏
  9. attention战场态势感知与价值评估
  10. 精美UI强大娱乐功能组合微信小程序源码下载,安装简单