**

原始对偶方法

**
注:因原文未转码,方便观看,遂作此文
原文连接:https://www.cnblogs.com/tsreaper/p/aop5.html
原始对偶方法利用的就是上一节课中讲到的互补松弛定理。我们首先找到对偶问题的一个可行解 yyy,并尝试找到一个原问题的可行解 xxx,使得 xxx 和 yyy 满足互补松弛定理。如果我们找到了这样的 xxx,那么 xxx 和 yyy 就分别是原问题和对偶问题的最优解;否则我们就需要调整 yyy,让它变得更好,继续尝试,直到找到最优解为止。

寻找对偶可行解
考虑以下线性规划问题作为原问题 min⁡xcTxs.t.Ax=b≥0x≥0\begin{matrix} \min\limits_x & c^Tx \\ \text{s.t.} & Ax = b \ge 0 \\ & x \ge 0 \end{matrix}xmin​s.t.​cTxAx=b≥0x≥0​ 它的对偶问题为 max⁡xbTys.t.ATy≤c\begin{matrix} \max\limits_x & b^Ty \\ \text{s.t.} & A^Ty \le c \end{matrix}xmax​s.t.​bTyATy≤c​ 我们首先需要获得一个对偶问题的可行解。如果 c≥0c \ge 0c≥0,显然 y=0y = 0y=0 就是对偶问题的一个可行解,否则我们可以使用如下方法寻找可行解。

给原问题增加一个变量与一条约束 x1+x2+⋯+xn+xn+1=bm+1x_1 + x_2 + \dots + x_n + x_{n+1} = b_{m+1}x1​+x2​+⋯+xn​+xn+1​=bm+1​,其中 bm+1b_{m+1}bm+1​ 需要足够大,至少要大等于 x1+x2+⋯+xnx_1 + x_2 + \dots + x_nx1​+x2​+⋯+xn​ 可能的最大值。这样的约束就不会改变原问题。

加入新约束后,我们写出新的对偶问题 max⁡ybTy+bm+1ym+1s.t.ATy+ym+1[11…1]T≤cym+1≤0\begin{matrix} \max\limits_y & b^Ty + b_{m+1}y_{m+1} \\ \text{s.t.} & A^Ty + y_{m+1}\begin{bmatrix} 1 & 1 & \dots & 1 \end{bmatrix}^T \le c \\ & y_{m+1} \le 0 \end{matrix}ymax​s.t.​bTy+bm+1​ym+1​ATy+ym+1​[1​1​…​1​]T≤cym+1​≤0​ 我们很容易看出这个新对偶问题的可行解为 yi=0∀i∈{1,2,…,m}y_i = 0 \quad \forall i \in \{1, 2, \dots, m\}yi​=0∀i∈{1,2,…,m} 以及 ym+1=min⁡iciy_{m+1} = \min\limits_i \quad c_iym+1​=imin​ci​。

限制的原问题 (RP) 与限制的对偶问题 (DRP)
假设我们找到了对偶问题的可行解 yyy,现在我们需要寻找一个原问题的可行解 xxx 满足互补松弛定理。

设 AjA_jAj​ 表示矩阵 AAA 的第 jjj 列,定义 J={j∣AjTy=cj}J = \{ j | A_j^Ty = c_j \}J={j∣AjT​y=cj​}(称 JJJ 为允许指标集,简单来说 JJJ 就是以 yyy 作为对偶可行解时,对偶问题中较紧的那些限制的编号)。根据原问题的定义和互补松弛定理,我们有 Ax=bxj=0∀j∉Jxj≥0∀j∈JAx = b \\ x_j = 0 \quad \forall j \not\in J \\ x_j \ge 0 \quad \forall j \in JAx=bxj​=0∀j​∈Jxj​≥0∀j∈J 如果我们能找到一个 xxx 满足上面三个条件,xxx 和 yyy 就能满足互补松弛定理。

为了获得一个可行的 xxx,我们使用一个类似于两阶段法的思想(虽然两阶段法和原始对偶方法可能没啥联系- -),构造一个优化问题,称为限制的原问题(restricted primal,RP)max⁡x∑i=1mxˉis.t.∑j∈Jai,jxj+xˉi=bixj≥0,xˉi≥0\begin{matrix} \max\limits_x & \sum\limits_{i=1}^m \bar{x}_i \\ \text{s.t.} & \sum\limits_{j\in J} a_{i,j}x_j + \bar{x}_i = b_i \\ & x_j \ge 0, \bar{x}_i \ge 0 \end{matrix}xmax​s.t.​i=1∑m​xˉi​j∈J∑​ai,j​xj​+xˉi​=bi​xj​≥0,xˉi​≥0​ 很显然,若目标函数值取 0,那么我们就找到了满足互补松弛定理的 xxx。

我们再来写出 RP 的对偶问题,称为限制的对偶问题(DRP)max⁡xbTys.t.AjTy≤0∀j∈Jyi≤1∀i∈{1,2,…,m}\begin{matrix} \max\limits_x & b^Ty \\ \text{s.t.} & A^T_jy \le 0 & \forall j \in J \\ & y_i \le 1 & \forall i \in \{1, 2, \dots, m\} \end{matrix}xmax​s.t.​bTyAjT​y≤0yi​≤1​∀j∈J∀i∈{1,2,…,m}​ 设 yˉ\bar{y}yˉ​ 为 DRP 的最优解,根据强对偶定理,若 bTyˉ=0b^T\bar{y} = 0bTyˉ​=0 则 RP 的目标函数值也可以取到 0,那么当前对偶可行的 yyy 就是对偶问题的最优解;否则我们有 bTyˉ≥0b^T\bar{y} \ge 0bTyˉ​≥0,因为至少 yˉ=0\bar{y} = 0yˉ​=0 是 DRP 的可行解。

一开始要求原问题的 b≥0b \ge 0b≥0 可能是为了保证 RP 问题有可行解(如果 b≥0b \ge 0b≥0 那么 RP 问题至少有可行解 x=0x = 0x=0 和 xˉ=b\bar{x} = bxˉ=b)。不过这可能也不是很有必要,如果发现 RP 问题无可行解,或者 DRP 问题无有限最优解,那就说明了原问题无可行解。

改进当前的对偶可行解
如果 DRP 的最优解让 DRP 的目标函数值超过 0,说明当前的 yyy 还不是最优的。我们来想办法用 yˉ\bar{y}yˉ​ 改进 yyy。我们让新的对偶可行解 y^=y+θyˉ\hat{y} = y + \theta\bar{y}y^​=y+θyˉ​(其中 θ≥0\theta \ge 0θ≥0),显然有 bTy^=bTy+θbTyˉ>bTyb^T\hat{y} = b^Ty + \theta b^T\bar{y} > b^TybTy^​=bTy+θbTyˉ​>bTy,说明对偶问题的目标函数值的确改进了。但别忘了,y^\hat{y}y^​ 仍然需要是对偶可行的,也就是说,ATy^=ATy+θATy^≤cA^T\hat{y} = A^Ty + \theta A^T\hat{y} \le cATy^​=ATy+θATy^​≤c 仍要满足。

我们来考虑 θ\thetaθ 的取值范围。对于 j∈Jj \in Jj∈J,因为 AjTyˉ≤0A^T_j\bar{y} \le 0AjT​yˉ​≤0,无论 θ\thetaθ 取多大,都不会超过 ccc 的限制,所以这些项不会限制 θ\thetaθ 的取值;对于 j∉Jj \not\in Jj​∈J,我们选择 θ=min⁡j∉J,AjTyˉ>0cj−AjTyAjTyˉ\theta = \min_{j \not\in J, A^T_j\bar{y} > 0} \quad \frac{c_j - A^T_jy}{A^T_j\bar{y}}θ=j​∈J,AjT​yˉ​>0min​AjT​yˉ​cj​−AjT​y​ 这样就会让 j∉Jj \not\in Jj​∈J 中的一条限制变紧,其它限制则不会超过,仍然是对偶可行的。当然啦,如果 θ\thetaθ 可以无限增大,说明对偶问题没有有限最优解,那么原问题无可行解。

将 yyy 调整为 y^\hat{y}y^​ 之后,就进入下一轮迭代继续调整(当然我们不需要再从原问题开始,慢慢写出 RP 和 DRP 了,直接确定新的 JJJ 和新的 DRP 即可),直到 DRP 的最优解让目标函数值为 0,此时的 yyy 就是对偶问题的最优解。

算法的时间复杂度
事实上,原始对偶问题就是通过枚举 JJJ 来获得对偶问题的最优解。由于 JJJ 至多有 2n2^n2n 个,所以这个方法是一定会终止的。当然,这个方法的最差复杂度也是指数级的。如果限制条件在进入 JJJ 后不会出来,那么算法就能在线性步数内结束。

这个方法看起来比单纯形法麻烦多了。单纯形法只要解一个优化问题就能得到最优解,这个方法一下子变出来四个优化问题。但是这个方法对特定问题是非常有效的,对于一些特定问题来说,我们可以一下子看出(或者在很短的时间内方便地算出)DRP 的最优解。下面就来举例说明原始对偶方法的应用。

原始对偶方法——转载相关推荐

  1. AOR4 原始对偶方法

    原始对偶算法 原始对偶算法利用了及其巧妙的方法减少参数,优化解,最后找到最优解. 互补松弛定理:最优解的等价命题为: 对于所有的j, 有(AjTy−cj)xj=0(A_j^Ty-c_j)x_j=0(A ...

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

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

  3. 原始-对偶的概念及写对偶问题的基本方法

    原始-对偶:写对偶问题 1.什么是原始对偶 ​ 字面理解:原始问题与对偶问题 假定原始问题为: minf(x)s.t.{gi≤0,i=1,...,mhi=0,i=1,...,p\begin{matri ...

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

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

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

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

  6. 光流 | 基于对偶方法的变分光流改进算法

    博主github:https://github.com/MichaelBeechan 博主CSDN:https://blog.csdn.net/u011344545 PCNN以及基于对偶方法的光流代码 ...

  7. 对偶方法(Dual Methods)

    总目录 一. 凸优化基础(Convex Optimization basics) 凸优化基础(Convex Optimization basics) 二. 一阶梯度方法(First-order met ...

  8. 原始-对偶(Primal-Dual)算法求解线性规划

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

  9. [ROM] 【技术帖】MIUI移植的简单方法 [转载]

    [ROM] [技术帖]MIUI移植的简单方法 [转载] 此教程仅介绍如何移植MIUI,原理方面的东西不会涉及太多,主要是因为我对原理方面的东西也不是很懂,怕误导了大家. 我以移植MIUI到Incred ...

  10. QT 框架搭建,用最原始的方法实现简单的塔防游戏 | 原力计划

    作者 | 白家名 责编 | 王晓曼 出品 | CSDN博客 本文作者使用 QT 框架写了一个塔防游戏程序,该程序中实现了购买炮塔.炮塔升级.怪物按照设定路径移动.炮塔自动寻找范围内目标.朝目标怪物发射 ...

最新文章

  1. 新建本地仓库,同步远程仓场景,出现git branch --set-upstream-to=origin/master master 解决方法...
  2. 刻意练习:LeetCode实战 -- Task30.通配符匹配
  3. 通俗易懂地讲解 Java 的注解
  4. php 换行 \n \r\n br 简介
  5. 《梦断代码Dreaming In Code》阅读计划
  6. 49、Power Query-合并查询温故知新
  7. 【Python】Matplotlib绘制各式各样的圆形
  8. 信息学奥赛一本通 1141:删除单词后缀 | OpenJudge NOI 1.7 20
  9. 图论:二分图多重匹配
  10. 16查看走线长度_糟糕!丝印放到表层走线上面啦
  11. Excel根据身份证号提取省份
  12. 原理图端口符号_电气百科:电气原理图和接线图区别详解
  13. 产品、技术和工程思维对工程师成长的影响
  14. HTTP Security Header Not Detected
  15. 华为android10手机指纹,华为P10这些指纹功能你知道几个?
  16. 关于java多参数的传值问题解析
  17. CISSP三次背书经验分享
  18. 杀毒软件McAfee导致客户端访问mscrm超慢
  19. zuk如将手机更新到Android10,ZUI新升级:ZUK宣布支持全机型升级Android N系统
  20. 剑指 Offer 19. 正则表达式匹配

热门文章

  1. PySide6将ui文件编译为py文件
  2. Android学习路线指南
  3. 01 WIFI ----- SDIO接口驱动
  4. 零基础想考华为认证,该怎么学?
  5. ofd阅读器qt_GitHub - gogo123150/ofdEditor: 一个很简陋的ofdEditor
  6. 【Python程序设计(七)】文件和数据格式化
  7. 计算机网络-ip地址聚合后可用的地址数
  8. mac搭建c语言开发环境
  9. 计算机上word如何批量打印,批量打印文件夹中的多个Word文档
  10. 【vue源码工程阅读1:下载源码】认识工程并打包