LP-duality 定理

LP-duality 定理:线性规划问题的对偶定理。

【线性规划问题的标准形式】

给定矩阵 A,b,c,其中 b,c 都是只有一列的矩阵(可以当作列向量看)。

问题 1: 求向量(一组数)x,要求 Axb
x0,使得 cTx 最大。

{Axbx0,max{cTx}

问题 2: 求向量(一组数)y,要求 ATycy0,使得 bTy 最小。

{ATycy0,min{bTy}

【定理内容】

用于将线性规划问题转化为对偶问题,然后用算法解决。

这两个问题是 "对偶" 的,根据定理,它们满足这两个性质:
弱对偶性:记问题 1 的任一组可行解 X 和问题 2 的任一组可行解 Y,则 cTXbTY

强对偶性:如果问题 1,2 都是有解的,则 1 的最优解(最大值)和 2 的最优解(最小值)相等。

【一些观察】

线性规划问题其实可以看做给出一大堆不等式,求条件极值。

观察发现,LP 定理的问题 2 的变量个数(y 的元素个数)恰好等于问题 1 的约束个数(A 的行数)

【定理应用其一:最大流最小割定理】

网络流问题就是天生的一类线性规划问题。

这里将用 LP-duality 定理粗略证明 MF=MC 定理。拿个例子。

e1e5 是每条边的标号。x1x5 表示各边的流量。令 capi 表示 ei 的容量(图中未写)。

先把最大流问题改造成线性规划模式。

{xicapix1x3x4=0x2+x3x5=0

第一条不等式就是每条边不能流超过容量的,后两条等式满足 1,2 流量守恒。
目标是 maxx1+x2

虽然是等式,但其实我们可以把它拆成两个不等式。

{xicapix1x3x40x1+x3+x40x2+x3x50x2x3+x50,max{x1+x2}

这就是一个标准的线性规划问题的形式。为什么?改成矩阵形式看看。

x=(x1x2x3x4x5)

A=(100000100000100000100000110110101100110101101)

b=(cap1cap2cap3cap4cap50000)

c=(11000)

通过 LP 定理,我们等价于求:

{ATycy0,min{bTy}

那这是什么呢?

AT=(100001100010000011001001111000101100000010011)

而我们的 y 应当是一个包含 y1y9 的列向量。搭配上 c,写成不等式看看。

{y1+y6y71y2+y8y91y3y6+y7+y8y90y4y6+y70y5y8+y90yi0,min{cap1y1+cap2y2+cap3y3+cap4y4+cap5y5}

观察发现 y6,y7y8,y9 都是成对以差的形式出现。不如令 z1=y6y7,z2=y8y9,换元。而且注意 z1,z2 是没有 0 限制的。

{y11z1y21z2y3z2z1y4z10y5z20yi0,min{cap1y1+cap2y2+cap3y3+cap4y4+cap5y5}

然后我们会用到几个引理:

引理 1z1,z2[0,1]

如果不在 [0,1] 内,容易发现,总可以将不在 [0,1] 的变量调整,更靠近 [0,1] 且使得原本的 y 依然是合法解。

引理 1.5:给定数组 d1dn(可正可负),要求设置 n 个变量 0z1z2zn1,使 dizi 取最小值。则 z1zn{0,1}

z1zn 视作数轴上 [0,1] 内顺次排列的 n 个点。从 i=1 开始,如果 di>0,就向左移到极限;否则向右移到极限。容易发现每次移动之后,zi 要么 =0 了,要么和 zi+1 重合(可以和 zi+1 同步移动)。

引理 2z1,z2{0,1}

如果方程里的 z1,z2 的大小顺序确定了,显然每个 yi 都能取到一个最小值(而这个最小值要么是 0,要么可以表示为 zi 们的线性组合)。那么 min{cap1y1+cap2y2+cap3y3+cap4y4+cap5y5} 就可以写成 min(Pz1+Qz2) 的形式。更一般地,可以归约到 引理 1.5 的问题形式。

因为对于每种大小顺序,都能归约到 引理 1.5;而只要是 引理 1.5,就必然有 zi{0,1}。所以可得:zi{0,1}

引理 3:不等式只有三种类型,1zi,zizj,zk0

其实就是在考虑 AT 中的第 69 列,其实对应了 A 的对应行,也就是点的出入均衡条件。

A 的一行的某一列如果是 1,1,表示这一行所对应的点有对应的出或者入边(如果是 1 就是这个列对应的边是入)。

众所周知,一条边恰好从一个点出,向一个点入。所以在 A 的某一列上最多出现 1,1 各一次(如果是与 S 或者 T 相连的边,就只会有 11 中的一个)。

A 的一列对应 AT 的一行,所以 AT 的一行按理应该只出现 1,1 各一个;结合我们为了等式而拆出来了两个不等式(两个对应不等式其实对应了一个 z),AT 的每一行最多出现 4±1,也就是最多对应两个 z


下面根据引理 2,3 来证明求 y1y5,z1,z2 就是在求最小割。

因为 z1,z2{0,1},而不等式只有三种类型:1zi,zizj,zk0,所以显然 yi{0,1}

yi=0/1 视作第 i 条边是否割掉;将 zi=0/1 视作第 i 个点是否与 S 连通。可以发现这就是求最小割。

posted @   FLY_lai  阅读(110)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
点击右上角即可分享
微信分享提示