许多问题都可以用线性整数规划表示,但是极少数可以由线性规划直接求解。其中,大多数问题是NP-Hard的,所以近似算法是一种重要的求解方法。本节我们要介绍的就是LP Rounding Based近似算法。
概念引入
对于一个极小化问题,称一个实例为I,近似算法为A,则A(I)表示算法A的目标函数值,OPT(I)表示最优目标函数值。
近似比: 若对于任何实例,都有A(I)≤r∗OPT(I),r≥1,那么称ρ=inf{r}为近似比。
- 等价定义:ρ=supOPT(I)A(I)
- 对于极大化问题,取ρ=supA(I)OPT(I)。
- 所以一般地,我们有:ρ=sup{A(I)OPT(I),OPT(I)A(I)}
近似比的确定: 往往我们无法求出OPT(I),只能通过OPT(I)的范围来确定近似比。以极小化问题为例,确定近似比需要以下两个条件:
- 首先要满足对于任何实例,都有A(I)≤r∗OPT(I),r≥1。则r是近似比的下界。
- 找到一个OPT(I)的下界LB(I),使得A(I)≤r∗LB(I)。
- 要满足对任意 ϵ≥0,存在 Iϵ,使得 A(Iϵ)≥(r−ϵ)∗OPT(Iϵ)。则r是近似比的上界。
一些研究思路:
LP-rounding based近似算法
整数间隙
在求解整数规划问题IP时,可以先进行条件的松弛。把整数约束x∈Z+松弛为x≥0,得到分数线性规划的解xLP∗,得到分数线性规划的目标函数值CLP∗。
则近似比ρ=CIP∗CIP≤CLP∗CIP,所以CLP∗CIP是近似比的上界,即rounding解目标函数值与分数解目标函数值的比。我们比较关心这个值,因为CLP∗CIP比较小的时候,才有分析的意义。
又因为CLP∗CIP≥CLP∗CIP∗,我们称CLP∗CIP∗为整数间隙,即整数最优解和分数最优解的比值。它是CLP∗CIP的一个下界,所以,整数间隙大,则无法得到有意义的分析。
背包问题
设共有 n 件物品,vi 表示第 i 件物品的价值,wi 表示第 i 件物品的重量,c 表示背包的最大承重,xi∈{0,1} 表示是否选择第 i 件物品。那么 0-1 背包问题可以写为 xmaxs.t.i=1∑nvixii=1∑nwixi≤cxi∈{0,1}
把整数要求松弛成 xi≥0,xi≤1。
根据之前的知识,设v1/wi≥v2/w2≥⋯≥vn/wn。则LP的一个最优解为(1,…,1,α,0,…,0)。其中1有k个,0<α≤1。则整数间隙Integrality Gap为2。
- 设前k个物品重量和为W1,第k+1个物品重量W2。则2WIP∗≥W1+W2≥WLP∗。所以Gap=WIP∗WLP∗≤2。
- 可以构造一个例子,一个物品重量,value分别为(2C,C),另一个物品(2C+1,C),这样Gap=WIP∗WLP∗=C+12C,因此Gap至少2。
顶点覆盖问题
求所有顶点的一个权值最小子集,使得所有边的两个顶点,至少有一个顶点在这个子集内。xmins.t.i=1∑nwixixi+xj≥1, ∀(i,j)∈Exi∈{0,1}
-
LP rounding:对xi的限制松弛为xi≥0。
-
对偶问题:每个点有一定的权值,现在给所有边分配权值,使得与某个点相连的所有边的权值都不能超过点权值,如何分配使得所有边的权值和最大。
-
顶点覆盖问题的基本可行解是半整的,即xi∈{0,0.5,1}
- 假设存在一个基本可行解是非半整的,构造向量V+={i∣21<xi<1},V−={i∣0<xi<21},那么总能找到一个足够小的ϵ>0构造两个解y={xi+ϵ(i∈V+),xi−ϵ(i∈V−),xi},z={xi−ϵ(i∈V+),xi+ϵ(i∈V−),xi},可得y,z都是满足条件的可行解,且满足x=(y+z)/2,所以基本可行解一定是半整数解。
-
拓展:顶点覆盖问题的整数间隙为2−Xf(G)2,Xf(G)表示对图G进行染色的最少颜色数。
问题描述: n个工件,m个机器,pij表示第j个工件在第i个机器上的运行时间,使得机器的最大负载(完工时间)最小。
模型:xij表示工件j是否安排给机器i,是的话取1,否则取0:x,tmins.t.ti=1∑mxij=1j=1∑nxijpij≤txij∈{0,1}∀j∈{1,2,…,n}∀i∈{1,2,…,m}
- 不能直接进行 LP 松弛,因为那样的话工件可以任意拆分。假设只有一件物品需要加工,而且该物品在所有机器上的加工时间都为 1。那么原问题的最优目标函数值显然为 1,然而 LP 松弛后的最优目标函数值为 1/m(LP 松弛求出的最优解为 xi,1=1/m),过于优秀,下界太松了,很难进行近似比分析。所以,直接做rounding得到的线性规划解没有参考价值。
- 改动:猜一个目标函数值T,二分 T 的值。过程如下:如果 pij>T,就让 xij=0 (或者直接把这个变量从 LP 中拿走),看看之后的线性规划LP(T)是否可行。如果可行就减少T,不可行就增大T,这样二分得到。显然,让改动后的 LP 问题存在可行解的最小的 T,就是原问题最优目标函数值的下界(用两阶段法的第一阶段判断是否存在可行解即可)。这个求得的就是LP最优解。
- 如何rounding:给原来的LP加上约束:任何一个机器都不能执行它需要超过T才能完成的任务,即使它只负责这个任务的一部分,比如pij>T那么任务j一定不能在机器i上运行,这样更符合整数规划的实际要求,约束更紧。
- 现在一共有n+m个约束,对应的在基本可行解中最多有n+m个正分量(考虑入基出基解单纯性的过程),设被一个机器做完的任务有n1个,被分开做完的有n2个,可以得到n1+n2=n,n1+2∗n2≤n+m,因为分开至少分到两个机器上,就对应着答案中两个正分量。
- 所以n2≤m,最多有m个工件是拆分的。
- 由于我们限定了任何的pij≤T,因此如果我们能把分开做的任务与机器一一匹配(上一行可知n2≤m)再做时间T,那么一定可以在2T内完成,这样就找到了一个整数解。这样的匹配一定存在吗?下面来构造这种匹配。
- 定义:若连通图中边数≤点数,即树再加一条边,那么称该连通图为伪树;若一张图的所有连通块都是伪树,那么称该图为伪森林。
- 构造一张二分图:左边有 m 个点,每个点表示一台机器;右边有 n 个点,每个点表示一件物品。若 xi,j>0 则连接第 i 台机器和第 j 件物品。如果这个二分图不连通,那么对每个连通块分别求解,最后把解合并起来就是答案,所以我们假设该二分图连通。由于非零变量至多有 n+m 个,所以该连通图的边数不超过点数,是一个伪树。
- 考虑“整数物品”。很显然,每个“整数物品” j 都只和一台机器 i 有连边 (i,j),那就把“整数物品” j 放在机器 i 中加工,并去掉物品 j 和边 (i,j)。由于每次恰好去除一个点和一条边,这张图仍然是伪树。根据前面我们加的约束,容易看出,每台机器对它所连工件的完整加工总时长也至多为 T。
- 考虑所有度数为 1 的机器 i。假设唯一连接机器 i 的边是 (i,j),那么我们把“分数物品” j 放在机器 i 中加工,并去掉机器 i、物品 j 和物品 j 的所有连边。由于每件“分数物品”都有至少两条连边(度数至少为 2),所以我们每次都会去掉两个点以及至少两条边,剩下的图是伪森林。考虑每个连通块就行。
- 反复考虑度数为 1 的机器并进行删除操作,直到最后不存在度数为 1 的机器为止。剩下的所有机器都度数为2,所有工件也度数为2,构成若干环。随便给每台机器分配一件物品即可。
- 这样,每台机器至多分配到一个“分数物品”,一件物品的加工时间至多为 T,再加上原来分配给它的“整数物品”,每台机器的总加工时长至多为 2T,整数间隙最大为2。
对偶近似算法
算法思路
-
考虑整数规划问题P:mins.t. ∑cjxj∑aijxi≥bi松弛为线性规划要求xj≥0。
-
那么它的对偶问题D就是maxs.t. ∑biyi∑aijyi≤cjyi≥0。
-
回忆互补松弛条件,在x,y取最优解时满足xj=0或∑aijyi=cj,yi=0或∑aijxj=bi。但对于整数规划很有可能取不到等号。
-
思路:要求 xj取整数,对上述条件进行放缩。即存在一组α,β≥1使得:
-
xj=0 或 αcj≤∑aijyi≤cj。达不到cj,但不会小太多。
-
yi=0或bi≤∑aijxj≤β∗bi。比bi多一些,但不会多太多。
若x, y可行并满足上述条件,则: =≤≤≤∑cjxj≤α∗∑(∑aijyi)xj α∗∑(∑aijxj)yi α∗β∗∑biyi α∗β∗OPTDual αβ∗OPTIP
思路:确定尽可能小的α,β使得构造的解尽可能满足互补松弛条件。
-
对于0-1整数规划,一般从y的可行解出发,α或β取1逐步改进对偶解,得到原始整数解。
-
使用近似对偶算法的思路是从一组对偶问题的可行解出发,尝试调整对偶问题的可行解来找到原问题的最优解,如果能证明取到的一个α,β满足上述式子,则可证明出这个算法是αβ近似的。
集合覆盖问题
集合覆盖问题:有若干集合U∈2E,寻找若干集合使得总费用最小并且保证E每个元素都被包含了至少一次,写为整数规划模型即 mins∈U∑c(s)xss.t. s:e∈s∑xs≥1xs∈{0,1}。
松弛约束为xs≥0,得到对偶问题 mins.t. e∈E∑yee∈s∑ye≤c(s)ye≥0。
f近似算法:f是出现频次最高的元素出现的次数。首先有一个对偶可行解y=0,然后逐步提升ye直到达到某个约束,如果满足了某个约束则称这个集合被选择了,xs=1,然后将集合中的点移除集合。继续提升剩下的点集,注意此时不提升已经覆盖的元素的权值。这么做下去,直到所有元素被覆盖,这样我们就得到了一个原问题的解。
对这个算法,xs=0 →xs=1 → 这个集合被选中,对偶约束满足了 →∑e∈sye=c(s)。所以α=1。
而 ye=0,说明这个元素有被分到权值,也就说明它所在的集合有被选到,最多被选了f个,所以β=f。
所以这个算法是f近似的。构造一个例子说明 f 是紧的:
E={e1,...en+1},U={ {e1,en},…{en−1,en},{e1,…en+1} },c(s1...sn−1)=1,c(sn)=1+ϵ
那么我们得到的解会是n+ϵ而最优解是1+ϵ,因此近似比是f=n。
无容量限制选址问题
无容量限制选址问题:有若干待选址地方F,有若干顾客D,要选择一部分地方建立设施提供服务,使得所有建立的花费加上顾客到设施服务的距离费用之和最小。
这个问题的距离费用满足三角不等式(欧氏距离)。
用cij表示第j个顾客到第i个设施(若开设)的距离费用。
yi=1 表示设施 i 开设,否则等于0;xij=1 表示顾客 j 会去 i 接受服务,否则等于0。
整数规划模型:mins.t. i∈F∑fiyi+i∈F,j∈D∑cijxiji∈F∑xij=1yi−xij≥0xij,yi∈{0,1}
对偶:maxs.t. j∈D∑vjvj−wij≤cijj∈D∑wij≤fiwij≥0
3近似算法:考虑对偶形式,可以在某种程度上认为vj是每个顾客的出资,wij表示第j个顾客去设施i接受服务(可能不是完整服务)的花费。首先对偶问题初始解是v=0,w=0,然后逐步提升所有vj,当遇到约束时将对应的所有wij一同加入提升集合中并记为紧边,继续提升,直到某些设施满足∑j∈Dwij=fi,记为暂时开放,满足vj−wij≤cij的顾客“连上”。
现在有的顾客对很多暂时开放的设施支付了wij,我们希望调整,每个顾客只对他最后相连的设施做贡献,也就是满足原整数规划的等号约束(现在相当于这部分xij是分数)。最后我们可以在对偶解的基础上构造出3近似的可行解。下面是3近似可行解的证明以及第二阶段的构造方法:
- 首先可以得到一张二分图,一侧点是设施,一侧是顾客,对于所有wij>0的连边,接下来我们只要考虑如何给每个顾客指定一个设施就可以在分数解的基础上构造出整数解了。设这张图为T,做T2((u,v)∈T2当distT(u,v)≤2即相邻或者有一个共同邻居),从T2的设施部分导出子图,取最大独立集为H。
- T2解释:如果两个设施有共同的顾客,就给他连边。然后从设施部分导出子图,再取最大独立集H。这就是暂时开放的设施集合的子集,它们没有共同的顾客邻点,所以是独立的。又因为是极大独立集,不在H的暂时开放设施一定与H的某个设施有共同邻点。
- H中的设施正式开放,对应的yi=1。
- 对于顾客j,定义满足vj=wij+cij的顾客为直连,他们支付了建设费用并去接受了完整的服务,其他的顾客为旁连。
- 设Fj为H中跟j有连边的设施的集合(wij>0),由独立集性质可知Fj至多含有1个点。
- 直连:如果Fj={i},直接让j去i接受服务。
- 直连:如果Fj={∅},考虑j的紧边(i′,j),(wij=0)去找设施i′,如果i′在H中,那么让j去设施i′接受服务。
- 如果j所有紧边关联设施都不属于H。设i′为j第一个连接上的设施,i为任意一个在H中与i′相邻的设施,让j去设施i。这部分是旁连。
- 对于顾客j,vj=vjf+vjc分别是支付给设施建设和自身过去的距离费用。对于直连的,cij=vjc, wij=vjf。对于旁连的,vjc=vj, vjf=0。旁连的没有出建设费用。
- 引理:H中的设施,与其相连(直连)的顾客出的建设费用和等于fi。
- 引理:对旁连顾客j,cij≤3∗vjc。
- 考虑四个点的二分图,边集为(i′,j),(i′,j′),(i′,j′),其中旁连顾客j,给j分配到了属于H的i。由我们的算法过程知道,j和i′相连,j′和i′,i相连,设施i和i′相邻。
- 由于有边连接可知vjc≥ci′j,vj′c≥cij′,vj′c≥ci′j′否则在提升时就会被约束卡住,另外我们选择的i′是j的第一个可能连接上的设施,因此当vj不能再提升的时候,一定满足i已经筹齐了设施的建设费并且wi′j′>0,因此还有vjc=vj≥vj′≥vj′c,再由欧氏距离的三角不等式cij≤cij′+ci′j′+ci′j,可证cij≤3∗vjc
- 定理:以上算法近似比为3。这个很好证明,因为旁连cij≤3∗vjc,有α=1,β=3。