| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 【数学】整数线性规划问题与对偶单纯形法 -> 正文阅读 |
|
[数据结构与算法]【数学】整数线性规划问题与对偶单纯形法 |
我们此前探讨过了一般的单纯形法(传送门),这次则来研究所谓“对偶单纯形法”。 线性规划的对偶问题原始的线性规划问题: 它的对偶问题: 容易看出,对偶的对偶就是它自身。 定理1: c T x ≤ ( A T y ) T x = y T ( A x ) ≤ y T c = c T y c^T x \leq (A^Ty)^T x=y^T(Ax)\leq y^Tc=c^Ty cTx≤(ATy)Tx=yT(Ax)≤yTc=cTy 定理2:若原始问题有一组可行解 x x x,对偶问题有一组可行解 y y y,且 c T x = b T y c^Tx=b^Ty cTx=bTy,则两个解分别是它们的最优解。(由定理1确定的上下界知,显然) 定理3:若原问题有最优解,则对偶问题有最优解。 对偶单纯形法由以上证明过程可以看出,如果认为 y T = c B B ? 1 y^T=c_BB^{-1} yT=cB?B?1,对偶问题的一组可行解,能够保证原问题 λ ≥ 0 \lambda \geq 0 λ≥0,虽然此时它不一定是原问题的可行解。我们定义这样的解叫做正则解。 普通的单纯形法,是可行解保证了可行性后,我们再将其逐步变为正则解保证最优性。 交换后,要让 λ j ′ = λ j ? λ k α l j / α l k ≥ 0 \lambda_j' = \lambda_j-\lambda_k \alpha_{lj}/\alpha_{lk} \geq 0 λj′?=λj??λk?αlj?/αlk?≥0,即正则性依然成立。 当 α l j ≥ 0 \alpha_{lj} \geq 0 αlj?≥0等式自然成立,则只需要对于 α l j < 0 \alpha_{lj} < 0 αlj?<0的,有 λ j α l j ≤ λ k α l k \frac{\lambda_j}{\alpha_{lj}} \leq \frac{\lambda_k}{\alpha_{lk}} αlj?λj??≤αlk?λk??即可。 故对偶单纯形法的流程如下:
整数线性规划问题你可能要问,既然我们已经有了普通的单纯形算法,为什么需要对偶单纯形算法?这就要提整数线性规划问题了。 整数线性规划问题,指的是添加了条件“变量必须是整数”的线性规划问题,视具体的约束条件不同,又分了很多种,就不细说了。 算分书中的例题:
min
?
z
=
?
3
x
?
5
y
\min z = -3x-5y
minz=?3x?5y 同样,本文不作数学证明,只说解法: 先去掉整数条件,做线性规划求最优解。比方说例题,两个条件添加松弛变量 u 1 u_1 u1?和 u 2 u_2 u2?,去掉整数条件做完单纯形算法,最终单纯形表如下:
如果解都是整数,很好。但是我们得到的 x = 1.3 , y = 2.8 x=1.3, y=2.8 x=1.3,y=2.8,解都不是整数!所以我们得继续。 有若干变量不是整数,任选一个,比如 x i = s x_i=s xi?=s,将这个问题分裂成两个子问题,分别添加条件 x i ≤ ? s ? x_i \leq \lfloor s \rfloor xi?≤?s?和 x i ≥ ? s ? x_i \geq \lceil s \rceil xi?≥?s?两个条件,分别求解。然后选择得到的最优解值更优的,再继续重复分裂,直到所有解都变成整数为止。 一个
x
i
≤
a
x_i \leq a
xi?≤a的条件相当于
x
i
+
u
=
a
x_i + u =a
xi?+u=a。 比方说例题,我们先来解决添加了 x ≤ 1 x \leq 1 x≤1条件的子问题吧。 我们需要给 A A A添加一行(一个新条件)和一列(一个新变量u),并且基变量也要增加一个 u u u。
而由于 x x x已经是一个基变量的,所以应该把 u u u这一行的那个1给消掉(严格证明略,即我不会),也就是说要这样:
可以看到,现在 u ≥ 0 u \geq 0 u≥0的条件并没有满足,但 λ ≥ 0 \lambda \geq 0 λ≥0的条件还是满足的,也就是说这是一组基本正则解。 所以此时应用对偶单纯形算法,就可以继续求解了。 此时我们把 θ \theta θ写最上面,值为 ∣ λ j α l j ∣ |\frac{\lambda_j}{\alpha_{lj}} | ∣αlj?λj??∣,其中这个 l = 3 l=3 l=3:
若 α l j ≥ 0 \alpha_{lj}\geq0 αlj?≥0,那这一列就直接忽略,所以只有 u 2 u_2 u2?是我们心仪的换入变量。将其换入,消元如出一辙,将第3行第4列消成1,其他行第4列都消成0:
可喜可贺可喜可贺。加 x ≥ 1 x \geq 1 x≥1的子问题也类似,我也没有算,按算分书的说法,那个子问题的解更优,应该从它开始继续分裂。要分好几次才能找到最优解 x = 4 , y = 1 , z = ? 17 x=4,y=1,z=-17 x=4,y=1,z=?17。 这个算法被称为分支限界算法。 总结讨论了线性规划的对偶单纯形法,以及它在整数线性规划问题中的应用。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 10:02:24- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |