【管理运筹学】运筹学“背诵手册”(二) | 对偶理论与灵敏度分析

news/2025/2/19 8:06:44/

二、对偶理论与灵敏度分析

用矩阵形式表示原问题和对偶问题: max ⁡ z = C X s . t . { A X ≤ b X ≥ 0 \max z=\pmb{CX}\\ s.t.\begin{cases} \pmb{AX\leq b} \\ \pmb{X}\geq\pmb{0} \end{cases} maxz=CXs.t.{AXbX0 其中 C = ( c 1 , c 2 , ⋯ , c n ) , X = ( x 1 , x 2 , ⋯ , x n ) T , A m × n , b = ( b 1 , b 2 , ⋯ , b m ) T \pmb{C}=(c_1,c_2,\cdots,c_n),\pmb{X}=(x_1,x_2,\cdots,x_n)^T,\pmb{A}_{m\times n},\pmb{b}=(b_1,b_2,\cdots,b_m)^T C=(c1,c2,,cn),X=(x1,x2,,xn)T,Am×n,b=(b1,b2,,bm)T

其对偶问题为: min ⁡ w = Y b s . t . { A T Y T ≥ C T Y T ≥ 0 \min w=\pmb{Yb}\\ s.t.\begin{cases} \pmb{A^TY^T\geq C^T} \\ \pmb{Y^T}\geq\pmb{0} \end{cases} minw=Ybs.t.{ATYTCTYT0 其中 Y = ( y 1 , y 2 , ⋯ , y m ) \pmb{Y}=(y_1,y_2,\cdots,y_m) Y=(y1,y2,,ym)

对偶理论的几个定理:

弱对偶定理: 若互为对偶问题的线性规划问题分别有可行解 X , Y \pmb{X},\pmb{Y} X,Y ,则原问题的目标函数值不大于对偶问题的目标函数值。

有推论:若原问题可行,则其目标函数无界的充要条件为对偶问题没有可行解。

最优准则性定理: C X = Y b \pmb{CX=Yb} CX=Yb 时,两个问题均达到最优。

对偶定理: 若原问题有最优解,则对偶问题也有最优解,且目标函数值相同。

互补松弛定理: X ‾ , Y ‾ \pmb{\overline{X},\overline{Y}} X,Y 分别为原问题和对偶问题的可行解,那么当且仅当 X ‾ , Y ‾ \pmb{\overline{X},\overline{Y}} X,Y 为最优解时,有 Y ‾ X s = 0 , X ‾ Y s = 0 \pmb{\overline{Y}X_s=0,\overline{X}Y_s=0} YXs=0,XYs=0 ,其中 X s , Y s \pmb{X_s,Y_s} Xs,Ys 分别为对应线性规划问题添加的松弛变量所构成的向量。

当原问题的最优解 X \pmb{X} X 非零时,对偶问题添加的松弛变量一定为 0 ,也就是说对偶问题的约束条件是等式约束。同理,对偶问题的最优解非零时,原问题的约束条件就取严格等式。

需要注意的情况是,当原问题某个最优解取值为 0 时,不能说明对偶问题对应的约束就是等式,因为其是非等式时,即 Y s ≠ 0 Y_s\ne0 Ys=0 ,还是有 X Y s = 0 XY_s=0 XYs=0

对偶问题的经济解释 —— 影子价格。对偶问题的最优解所代表的就是单位资源对企业的价值,也就是资源所对应的影子价格。一般用增加一个单位该资源来描述,即若某资源的影子价格为 k k k ,若增加一个单位该资源,最优目标函数值增加 k k k 。不过,不能说增加 5 个单位,目标函数就增加 5 k 5k 5k ,因为,如果加了超过 1 个单位资源的话,有可能最优解就改变了。

对偶理论一个应用就是,原问题最优单纯形表中,松弛变量所对应的 z j z_j zj 就是对偶问题的最优解,即影子价格。

B \pmb{B} B A \pmb{A} A 中的一个基,当 B \pmb{B} B 对应的基解是可行解时,称 B \pmb{B} B 为可行基,当 B \pmb{B} B 对应的基本可行解为最优解时,称 B \pmb{B} B 为最优基。若 C B − 1 \pmb{CB}^{-1} CB1 是对偶问题的可行解,则称 B \pmb{B} B 为对偶可行基。

B \pmb{B} B 是线性规划问题的最优基的充要条件是, B \pmb{B} B 是可行基,同时是对偶可行基。在单纯形法中,我们从一个初始基可行解出发(假设还未达到最优解),它保证了原问题可行,却并未保证对偶问题可行。对偶问题可行需要 Y \pmb{Y} Y 非负,对应于原问题单纯形表中就是非基变量的 z j ≥ 0 z_j\geq0 zj0 ,那检验数就应该是小于等于 0 的。因此,只有原问题达到了最优解,即检验数都小于等于 0 ,对偶问题才是可行的。

因此,我们可以对称考虑,就是,先让对偶问题可行(原问题就最优),通过不断迭代,使得对偶问题最优(原问题就可行)。对偶单纯形法应用的前提便是,需要初始单纯形表中的检验数行全部非正(保证了原问题最优,也就是对偶问题可行)和基变量取值有负值(原问题不可行)。

对偶单纯形法的步骤为:

  1. 求一个满足最优性检验的初始基本解,列表;
  2. 若所有右端系数均非负,则已找到最优解,否则转下一步;
  3. 求另一个满足最优性检验且更接近可行解的基本解。换出变量原则,非可行中最小者,即 min ⁡ { b i ∣ b i < 0 } \min\{b_i|b_i<0\} min{bibi<0} ;换入原则,最小比例原则,检验数除以负的 a l k a_{lk} alk 最小者对应的非基变量。

灵敏度分析首先需要明白,我这一个参数变化,会影响最优单纯形表中的哪些数字。因此就要求我们掌握最优单纯形表的特征。
在这里插入图片描述
对于目标函数系数 c j c_j cj ,如果它是基变量对应的系数,那么,它会影响所有非基变量的检验数;如果它是非基变量对应的系数,那么它的变化只会改变该非基变量的检验数。对于右端列向量 b b b ,它的变化会引起最终最优解的取值。对于约束系数 a i j a_{ij} aij ,如果它对应的变量为非基变量,它的变化只会影响该非基变量的检验数;如果它对应的变量为基变量,会影响 B − 1 \pmb{B}^{-1} B1 ,则不仅右端常数变化,所有非基变量检验数都发生变化。

知道了这些变化在最优单纯形表中的反映,我们就不用记忆书上的公式,统统用待定系数法。

对于新增加变量的情况,我们可以先用 B − 1 \pmb{B}^{-1} B1 去求它在最优单纯形表中的系数列向量,进而求出检验数,如果是非正,那就不会改变最优解;而如果是正数,说明把这个新变量加进来对目标有益,因此把它作为基变量继续迭代。

对于添加了约束的情况,首先看看原来的最优解是不是满足这个约束,如果也满足,那最优解就不变;如果不满足,把这个约束添加松弛变量化成等式,直接添加到最优单纯形表中,并将其添加的松弛变量作为基变量继续迭代。



http://www.ppmy.cn/news/1217287.html

相关文章

2021年12月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 点击下列哪个按钮,可以让正在运行的程序停下来? A: B: C: D: 答案:B 选项B是停止运行程序的按钮。 第2题 小乔完成了一个编程作品后,点击“文件”中的“保存到电脑”将作品保存到本地,不修改文件名字,直接点击…

医学生画图ppt

微信回复&#xff1a;素材 领取

【论文阅读VLDB13】Online, Asynchronous Schema Change in F1

Online, Asynchronous Schema Change in F1 ABSTRACT 在一个globally 分布式数据库&#xff0c;with shared data, stateless servers, and no global membership.进行一个schema演变。证明许多常见的模式更改可能会导致异常和数据库损坏&#xff0c;通过将破坏引起的模式更改…

【Linux】update-alternatives

安装: sudo update-alternatives --install link name path priority [ --slave slink sname spath]选项注释: link是在/usr/bin/,/usr/local/bin/等默认PATH搜索目录name是在/etc/alternatives目录中的链接名path是真正的可执行程序的位置,可以在任何位置priority是优先级 …

Python深度学习预测倍周期分岔(鸡心脏细胞聚集体自发跳动)

背景 分岔可以根据它们发生在连续还是离散时间动力系统中进行划分。 这种区别很重要&#xff0c;因为离散时间动力系统&#xff08;微分方程&#xff09;可以表现出与其连续时间对应系统&#xff08;微分方程&#xff09;截然不同的行为。 例如&#xff0c;人口增长的逻辑模型…

Linux管道

管道 匿名管道 命名管道 管道是一种特殊的文件&#xff0c;保存在内存中&#xff0c;而不是硬盘里。不同进程通过文件路径来确定同一个管道&#xff0c;然后通过读写管道文件来进行通信 #define MY_FIFO "./named_fifo" int main() {umask(0); //取消系统对创建…

B : 赫夫曼编码长度

Description 每行一个大小写英文字母组成的字符串&#xff0c;长度不大于 1000&#xff0c;通过前缀编码后最短的编码长度。 Input 每组数据一行&#xff0c;大小写英文字母 Output 每组数据输出赫夫曼编码长度 Sample 思路&#xff1a; string res "";//用于…

java8 : Collectors.groupingBy(分组)

Collectors.groupingBy配合Stream流使用&#xff0c;可以对集合中一个或多个属性进行分组&#xff0c;分组后还可以做聚合运算。 首先把数据放入集合&#xff1a; Product prod1 new Product(1L, 1, new BigDecimal("15.5"), "面包", "零食");…