线性规划

Published: by Creative Commons Licence

  • Tags:

线性规划原理

线性规划用于在某个约束条件下,优化某个线性函数。其标准型如下:

maxcTxs.t.Axbx0

我们可以通过加入一些松弛变量,将其变成松弛型:

maxcTxs.t.Ax=bx0

其中所有涉及的数值都是实数,ARm×n,c,xRn,bRm。定义P={xAx=bx0},即所有可行解的集合。

我们下面的讨论均认为A的行向量是线性无关的,即mn

转换为标准型

如果约束公式形式为jaijxjbi,那么我们可以记

aij=aij

并将约束公式替换为

jaijxjbi

如果约束条件为jaijxj=bi,可以拆分成两个约束条件jaijxjbi以及jaijxjbi

如果某个变量xi没有约束,那么可以替换为xi=xixi,其中xi,xi0

转换为松弛型

如果约束条件形式为jaijxjbi,我们可以增加一个松弛变量si,满足si0,并将约束公式替换为jaijxj+si=bi

线性规划几何解释

所有满足线性规划的m+n个约束条件的向量集合P,我们可以将其理解为Rnm空间中用半平面切出的凸包。凸包的特点就是P中任意两点a,b指定的直线上的所有点也是P中的点。

命题1:在凸包顶点处可以取得线性规划的最优解

假设我们在凸包非顶点处x上取到了最优解。那么一定存在某个非0向量d,满足x±dP,即A(x±d)=bAd=0。如果xi=0,那么一定有di=0。且由于x上是最优解,我们可以推出cTd=0

由于d非0,因此一定存在某个i,满足xi,di>0(否则我们取d即可),我们选择一个合适的λ,满足xiλdi=0,即我们从x转移到x=xλd处,且x0,这时候依旧能取到最优解,但是一个新的维度被赋值为0

重复上面这个过程,直到找到某个顶点为止,很显然流程必定会终止。

命题2:对于任意xP,定义B=ixi>0。那么x是凸包上的某个顶点,当且仅当AB的列向量线性无关,这里AB表示由B中下标指定的A中的列组成的子阵。

比如

x=[2010]A=[213073210005]

那么B=1,3

AB=[237200]

由于AB的列向量线性无关,因此x是凸包上的某个顶点。

这里给一下证明:

先证明充分性。假设x不是顶点,那么存在某个d,满足x±dP,即Ad=0,且xi=0di=0。而Ad=0可以推出ABdB=0,其中dB0,这与AB的列线性无关相悖,因此假设不成立。

再证明必要性。如果AB线性无关,那么一定存在某个向量dB满足ABdB=0,我们用0填充d的其它维度,将其扩展为长度为n的向量,这样一定有Ad=0,即x±dP,即x不是顶点。

命题3:x是一个顶点,当且仅当存在存在某个CN=1,,n,满足|C|=m,且AC是非奇异矩阵,xC=A1CbC0xN/C=0

证明:

必要性:由于行向量线性无关,因此如果x是顶点,我们可以将AB扩充为AC

充分性:对应的如果我们找到这样一个C,由于Ax=b,且x0,因此xP,假如x不是顶点,就能找到这样的d,满足满足x±dP。当然根据dC非0且ACdC=0,可以推出AC的为奇异矩阵。

现在我们就得到了一个获取线性规划最优解的简单算法,遍历所有凸包上的顶点,并判断其是否是最优解。但是不幸的是,虽然我们可以O(m3)时间复杂度内判断矩阵是否奇异,但是C共有(nm)种可能的选择,而这是指数级别的。

单纯形算法

单纯形算法的实践表明,一般pivot执行次数为2(m+n)次以内。

整数规划与全幺模矩阵

定义:一个方矩是幺模矩阵(Unimodular matrix),当且仅当这个方阵的行列式值为±1

幺模矩阵的性质:

  • 单位矩阵是幺模矩阵
  • 置换矩阵是幺模矩阵
  • 幺模矩阵的转置是幺模矩阵
  • 幺模矩阵交换两行或两列后依旧是幺模矩阵
  • 幺模矩阵的某一行(列)加上另外一行(列)乘上某个常数得到的矩阵还是幺模矩阵
  • 幺模矩阵的逆矩阵是幺模矩阵
  • 两个幺模矩阵的乘积是幺模矩阵

定义:一个矩阵是全幺模矩阵(Total Unimodular matrix),当且仅当这个矩阵的任意非奇异子阵都是幺模矩阵

全幺模矩阵的性质:

  • 一个矩阵是全幺模矩阵的必要条件是矩阵的每个元素都是1,0,1,但这不是充分条件,比如 [1111] 就不是全幺模矩阵。
  • 全幺模矩阵交换两行或两列后依旧是全幺模矩阵
  • 全幺模矩阵的任意子阵还是全幺模矩阵
  • 如果A是全幺模矩阵,那么[A,A],[A,I],A,AT都是全幺模矩阵

命题1:如果矩阵A,b都是整数上的矩阵,且A是全幺模矩阵,那么线性规划凸包上的所有顶点都是整数顶点

证明:

根据线性规划几何解释中的命题3可知,P中的任意顶点x,可以找到A的某个非奇异子阵AC,满足xC=A1Cb,且AN/C=0。由于A是全幺模矩阵,因此AC是幺模矩阵也是全幺模矩阵,利用伴随矩阵法我们对AC进行求逆,会发现A1C中的所有元素都是整数。因此xC的所有元素也是整数。

命题2:如果矩阵A,b都是整数上的矩阵,且A是全幺模矩阵,那么线性规划的最优解x是整数向量

证明:

线性规划的最优解在某个顶点取到,而所有顶点都是整数顶点,因此命题得证。

命题3:无向二分图的关联矩阵是全幺模矩阵

(无向二分图的关联矩阵为行表示结点,列表示边,如果结点和边关联,则单元格值为1,否则为0)

证明:

根据归纳法进行证明,考虑大小为1的子阵,其行列式取值只能为0,±1

现在假设所有大小小于n的子阵都是全幺模矩阵。现在考虑大小为n+1的子阵。这里考虑三种情况:

  1. 如果存在一列全为0,那么行列式值只能为0。
  2. 如果存在一列只有一个1,那么我们可以得出行列式值为去除这一列这一行的代数余子式,而余子式的取值仅可能为0,±1(根据归纳法)。
  3. 否则所有列都有两个1,那么如果我们将所有行都加总,但是左边子图顶点对应的行的系数为1,右边子图的顶点对应的行的系数为-1,那么加总和为0,这意味着矩阵的行线性相关,因此行列式值为0。

命题4:有向图的关联矩阵是全幺模矩阵

(有向图的关联矩阵为行表示结点,列表示边,每条边与入点的单元格值为1,与出点的单元格值为-1,否则为0)

证明:

与命题3相同,第二步的条件是存在一列只有一个数非0,第三步的证明中所有行的系数都为1。

提供一道题目

命题5:线性规划求解二分图最大匹配的系数矩阵是全幺模矩阵

举个例子,左右各有两个顶点,其中左1和左2均与右1和右2有连边,那么它们系数矩阵为:

A=[1100001110100101]

向量b为:

b=[1111]

这时候满足Axb。之后我们加入松弛变量,得到

[A,I]x=b

其中A的左边是一个二分图的关联矩阵,右边是单位矩阵,满足全幺模矩阵的条件。

命题5:线性规划求解最大流的系数矩阵是全幺模矩阵

举个例子,源点是1,汇点是4,1到2连容量为c1,2的边,1到3连容量为c1,3的边,2到4连容量为c2,4的边,3到4连容量为c3,4的边。那么它们的约束方程为:

A=[101001011000010000100001]

向量b为:

b=[00c1,2c1,3c2,4c3,4]

这时候满足Axb,我们加入松弛变量后得到:

[A,I]x=b

这里A的前两行是有向边关联矩阵的子阵,下面是4行是单位矩阵,因此A是全幺模矩阵,对应的系数矩阵[A,I]也是全幺模矩阵。

命题6:线性规划求解最小费用最大流的系数矩阵是全幺模矩阵

举个例子,源点是1,汇点是4,1到2连容量为c1,2的边,费用为C1,2,1到3连容量为c1,3的费用为C1,3边,2到4连容量为c2,4的费用为C2,4边,3到4连容量为c3,4的费用为C3,4边。首先可以求出最大流为f,那么系数矩阵为:

A=[11001100101001011000010000100001]

向量b为:

b=[ff00c1,2c1,3c2,4c3,4]

这时候满足Axb,我们加入松弛变量后得到:

[A,I]x=b

这里A的第1行、第2行、第3到4行,第5到8行全是全幺模矩阵的子阵,因此矩阵A是全幺模矩阵,故[A,I]也是全幺模矩阵。

对偶线性规划

线性规划的原始型:

maxcTxs.t.Axbx0

它的对偶型:

minbTys.t.ATycy0

对偶型有以下性质:

  • x是线性规划最优值对应的解,而y是对偶型最优值对应的解,那么一定有cTx=bTy
  • 如果原始型无解,那么对偶型则无界。
  • 对偶线性规划的对偶是原始线性规划。

这里稍微提一个对偶的技巧。

对于一类线性规划:

maxcTxs.t.Ax=bx0

其对偶后的形式为

minbTys.t.ATyc

注意对偶形式中y0这个约束条件不见了。

对偶线性规划的应用

最大流和最小割

最大流的线性规划形式为:

maxft,ss.t.fi,jui,j(j,i)Efj,i=(i,j)Efi,j,iVfi,j0

这里E=E+(t,s)ui,j表示边(i,j)的容量。

其对偶形式为:

min(i,j)Eui,jdi,js.t.di,j+yiyj0ytys1di,j0

我们可以理解di,j表示是否要删除边(i,j),删除为1,不删除为0。而yi表示从si的最短路径。很显然在最小割后,不存在从st的路径(即至少需要经过一条被割去的边)。因此下面的公式就是最小割的线性规划公式。

二分图最大权匹配和最小顶标和

对于二分图,其顶点分成两个集合LR

二分图最大权匹配的线性规划形式为:

max(i,j)Ewi,jfi,js.t.(i,j)Efi,j1,iL(i,j)Efi,j1,jRfi,j{0,1}

其对偶形式为:

miniLpi+iRpis.t.pi+pjwi,jpi0

下面这个对偶形式实际上是最小顶标和的线性规划形式。

最小费用最大流和最短路

对于给定的费用网络G=(V,E),最小费用流问题(不要求最大)对应的线性规划形式为:

max(i,j)Eci,jfi,js.t.fi,jui,jft,s=F(j,i)Efj,i=(i,j)Efi,j,iVfi,j0

将其转换为对偶形式:

min(i,j)Eui,jyi,j+Fyt,ss.t.yi,j+zizjci,jyt,s+ztzs0yi,j0,(i,j)E

题目1:给定一个连同无向图G=(V,E)n=|V|。其中边(u,v)有一个非负长度lu,v和非负的费用cu,v。现在我们允许将每条边的长度延长某个非负距离yu,v,每单位的费用为cu,v。现在要求计算通过延长边,使得从顶点1到顶点n最短距离不小于m,要求计算最小的总费用icixi。其中1V,E1030li,j,ci,j102

建立线性规划公式可以得出:

min(i,j)Eci,jyi,js.t.yi,j+zizjli,jztzsUyi,j0,(i,j)E

考虑它的对偶形式:

max(i,j)Eli,jfi,j+Uft,ss.t.fi,jci,jft,s+(j,i)Efj,i=(i,j)Efi,j,iVfi,j0

即要求找到一个网络的最小费用流(注意不一定最大)。我们可以建立网络流来求解。

题目2:给定一个连同无向图G=(V,E)n=|V|。其中边i有一个非负长度li和非负的费用ci。现在我们允许将每条边的长度延长某个非负距离xi,每单位的费用为ci。要求回答m个请求,每个请求给定费用上限C,要求总费用且总费用icixiC,问从顶点1到顶点n的最远距离是多大。其中2V100V1E1031m,C105。其中lici都是非负整数,且1li,ci10

提供一道题目

我们可以用二分法来校验,即我们只需要负责计算最远距离为d的时候,最小的费用是多少。这就转换为题目1了。这样还是比较慢的。

注意观察我们最后得到的公式:(i,j)Eci,jfi,j+Uft,s。这等价于我们在计算最大流的时候按照最小费用路径增广,且只要费用路径的总费用不超过U我们就继续增广。由于所有li,ci都是整数,因此边上的流量以及整个网络的流量都是整数。且根据最小费用流的性质知道,当我们按照最小费用路径增广的时候,最小费用路径的总费用是递增的。因此我们可以发现对于U[x,x+1)的时候,ft,s以及(i,j)Eci,jfi,j都是常数,扩容费用和U的关系为cost(U)=aU+b,即是一个线性函数,且cost函数在整个定义域中都是递增函数。

因此我们可以不断沿着最短路径进行增广。由于流量上限最多为10m,因此我们可以用费用流算法求解的时间复杂度为O(10mn2+qlog2q)

题目3:给定一个连同无向图G=(V,E)n=|V|。其中边(u,v)有一个非负长度lu,v和非负的费用cu,v。现在我们允许将每条边的长度延长某个非负距离yu,v,延长的上限为tu,v,每单位的费用为cu,v。现在要求计算通过延长边,使得从顶点1到顶点n最短距离不小于m,要求计算最小的总费用icixi。其中1V,E1030li,j,ci,j102

建立线性规划公式可以得出:

min(i,j)Eci,jyi,js.t.yi,j+zizjli,jztzsUyi,jti,jyi,j0,(i,j)E

考虑它的对偶形式:

max(i,j)Eli,jfi,j+Uft,s+(i,j)Eti,jpi,js.t.fi,jpi,jci,jft,s+(j,i)Efj,i=(i,j)Efi,j,iVfi,j0pi,j0

由于ti,j0,因此当pi,j=max(fi,jci,j,0)的时候目标公式可以取到最大值。因此我们可以删除p。得到

max(i,j)Eli,jfi,j+Uft,s+(i,j)Eti,jmax(fi,jci,j,0)s.t.ft,s+(j,i)Efj,i=(i,j)Efi,j,iVfi,j0

我们可以理解为对于任意网络中的边(i,j),我们能支付额外的ti,j单位费用将其扩容。这个可以通过加入一条费用为li,j+ti,j且容量为无穷的边来实现。

提供一道题目

参考资料