Discrete Optimization课程笔记(5)—混合整数规划

目录​​​​​​​

1.MIP介绍(Mixed Integer Program)

Case1: Warehouse Location

Case2: Knapsack Problem(Branch and Bound)

2.MIP模型(modeling) 

Case3: Coloring Problem(Big-M Transformation) 

3.割平面法(Cutting planes)

4.多面体切割(Polyhedral Cuts)

Case4: Node Packing(Clique Facets)

Case3: Coloring Problem

5.分支割平面法(Branch and Cut)

5.1 覆盖切割(Cover Cuts)

5.2 分支割平面法(Branch and Cut)

5.3 分离问题(The Separation Problem)

5.4 MIP+TSP

6. facility location 编程作业


1.MIP介绍(Mixed Integer Program)

MIP问题是在LP问题上添加变量取整的约束

Case1: Warehouse Location

在仓库选址问题中,仓库有一系列可选地,给定客户,要求决定在哪些地方建立仓库并且将每个客户分配到对应仓库去,每个仓库建立有一个固定成本,从仓库到各个客户有运输成本,要求总成本最小

  • 决策变量:两个0/1决策变量,x_w代表是否开设仓库w,y_{wc}代表仓库w是否服务顾客c
  • 约束条件:一个仓库只有开设了才能服务客户y_{wc}<x_w,一个客户只能被一个仓库服务
  • 目标函数:仓库建立成本+运输成本

 在上面模型中,决策变量为0/1变量,该问题也称为0/1整数规划问题,MIP模型通常设置决策变量为0/1变量

Case2: Knapsack Problem(Branch and Bound)

解决MIP问题有很多方法,分支定界是一种常用的方法

  • Bounding:找到乐观松弛
  • Branching:将问题分割成多个子问题

线性松弛(linear relaxation):不考虑MIP问题里对变量的整数约束得到的LP模型的最优解称为MIP的线性松弛

 任何MIP问题都可以看成是LP松弛+附加约束(某些变量要求取整数),因此LP松弛是MIP减少约束,或者说更松弛的版本,任何MIP的可行域一定被包含在其LP松弛可行域中,如果是一个最大化问题,LP松弛的最优解 >= MIP的最优解,同理,如果是一个最小化问题,LP松弛的最优解 <= MIP的最优解。LP松弛可以和Branch and bound方法结合,找到上界(下界)

  • 当前的线性松弛要比之前找到的解更差,停止探索这个子问题,如x2=1时的松弛解为71.33,比已经找到的80差,停止搜索这个分支
  • 当前的线性松弛为整数解,已经找到了一个可行解,如x1=1,x2=0,x3=1
  • 否则选择线性松弛解里的非整数值变量进行分支,创建两个子问题,如最初的线性松弛为92,其中x1=1,x2=0.25,x3=1,选择x2进行分支分成x2=0和x2=1两个子问题

MIP的LP松弛意义在于给出最优解的上界(下界),一个好的MIP模型会拥有一个好的LP松弛 

2.MIP模型(modeling) 

 MIP问题的模型表达形式多样,怎么样才算一个好的MIP模型?

  • 倾向于使用0/1变量
  • 有好的线性松弛

比如在 Case1: Warehouse Location 中,对于约束1:y_{wc}<x_w还可以用其它方式表示,如下图所示,原先约束是针对每个仓库和每个客户,共WC个约束,现在对于每个仓库,用一个约束条件代替原来的C个约束条件,两个约束条件对比:原先约束的解一定包含在后来约束解中。因此原先的约束效力更高,该问题为最小化总成本,原始约束的LP松弛目标值更大,其线性松弛也更好,找到的下界更高。不同的MIP模型表达有不同的松弛约束,搜索效率也不同,这就是模型的重要性

Case3: Coloring Problem(Big-M Transformation) 

在图着色问题中,有一个约束为:相邻点不同色,用数学表达x\neq y,这不是线性约束,因此需要转换,x\neq y意味着有两种情况:x更大或者y更大,在MIP问题中不允许有连接约束,因此引入big M方法,变量b为0/1变量,M为无穷大的数,如下所示x\neq y变成了两个约束条件,b=0时满足x\leqslant y-1,b=1时满足x\geq y+1 。用big M转换后建立MIP模型,求解其LP松弛,目标值为0,表明我们至少需要1种颜色,显然这种松弛是无效的,需要重新构建MIP模型

在上面的模型中,决策变量为每个点的颜色,取值范围{0,1,2,3},前面提到MIP更喜欢0/1变量,因此修改决策变量,换成0/1变量,对每个点设置4个0/1变量,代表这个点是否使用某个颜色

  • 每个点只能有一种颜色:b_{x=0}+b_{x=1}+b_{x=3}+b_{x=4}=1 
  • 相邻点不同色:b_{x=0}+b_{y=0}\leq 1

使用0/1变量的MIP模型求解的LP松弛为0.27,注意此处的v取值从0开始,意味着v至少可以取到1,总共至少需要2种颜色,比前面的模型LP松弛更好,在取得松弛后,要选择变量分支,变量分支数过多,因此本模型还可以改进 

将第一个约束条件和第二个约束条件组合成为如下约束条件,LP松弛要搜索的节点更少 

不同的MIP模型有不同的LP松弛,会对接下来的搜索效率产生影响,因此需要选择好的MIP模型

3.割平面法(Cutting planes)

割平面的核心思想是:通过增加约束能改进LP松弛最优解,同时不会消除任何MIP的可行解。如下图所示,LP松弛和MIP的差别在于后者的解要求取整数,因此完全可以去掉LP松弛中不包含任何整数解的部分,这样能同时保证MIP的可行解不被破坏同时增加了LP松弛最优解的边界能力。

满足上述要求的约束称为Gomory切割(Gomory Cut),割平面法的关键便是找到Gomory切割,增加新约束,更新LP松弛解。从LP松弛解中选择取值分数的变量,如下图所示,假设x1取值b1为分数,经过下面的转换可以得到一个切割:\sum (a_{1j}-\left \lfloor a_{1j} \right \rfloor)x_{j}\geq b_{1}-\left \lfloor b_{1} \right \rfloor,从而得到新约束。重新求解增加新约束的LP松弛。

以下面问题为例说明

  • 原始LP松弛求解后表格如下,x2=3/2,因此选择x2这行进行切割,找到新约束\frac{1}{4}x_{3}+\frac{1}{4}x_{4}\geq \frac{1}{2}

  •  将上面约束用上面的x1,x2代替,可得x_{1}\leq 1,表明原始可行域得到切割,引入人工变量s1,更新迭代表格,x1取值为2/3,选择x1这行得到切割,新约束为\frac{2}{3}x_{4}+\frac{2}{3}s_{1}\geq \frac{2}{3}

  •  将上面的约束用x1,x2代替,可得x1-x2>=0,又切割了一部分非整数可行域 

 综上所述,割平面法思路

  • 求解线性松弛问题
  • 选择取值为分数的变量,增加Gomory切割
  • 使用对偶单纯形法获得新的最优解
  • 迭代直到解满足整数要求或者不再有可行解

在Gomory切割基础上,Balas, Ceria, Cornuejols, Natraj (1994-1996)研究了如何将Gomory切割和branch and bound结合,一次性生成多个切割,只要对目标函数值边界提升有用就生成切割,目前MIP问题中SOTA模型边使用了Gomory切割。

4.多面体切割(Polyhedral Cuts)

上面介绍的切割方法只是其中一种,一个问题可以根据问题结构使用多种切割类型,本节介绍Polyhedral cuts

  • 凸包(Convex Hull):在一个实数向量空间V中,对于给定集合X,所有包含X的凸集的交集S被称为X的凸包
  • 多面体切割(Polyhedral cuts):代表整数解的凸包平面(facet)的切割

 Polyhedral cuts不像第3节介绍的是从迭代后的表格里得出的切割,而是从约束本身的结构性质出发,同样有效,不会消除任何MIP的可行解,但是会让LP松弛的当前基础可行解不可行,从而提升LP松弛边界能力。用下面两个例子说明Polyhedral cuts

Case4: Node Packing(Clique Facets)

node packing问题也称Maximal Independent Set,即最大独立集问题,最大独立集是图顶点子集合,满足任意两点都没有边连接,用MIP表示如右图,决策变量为0/1变量,表示每个顶点是否在最大独立集中,求的线性松弛解为所有变量取1/2,分数变量太多,因此需要改进,找到切割

  •  团(clique):一个无向图的完全子图。如果一个无向图的某几个顶点两两相邻,就说这几个顶点构成了一个团
  • 最大团(maximal clique):无向图中点数最多的完全图

最大独立集要求顶点之间无连接,说明一个最大团里的顶点最多只能有一个顶点在独立集中,因此上述node packing问题可以使用5个最大团约束作为切割,求解线性松弛x1=0,比最初的要好

​​​​​​​

Case3: Coloring Problem

同样在图着色问题中,可以使用团切割的方法,改进线性松弛

5.分支割平面法(Branch and Cut)

5.1 覆盖切割(Cover Cuts)

  • 覆盖(cover):对于约束\sum_{j=1}^{n}a_{j}x_{j}\leq b,集合C\subseteq N=\left \{ 1,...n \right \}是一个覆盖,如果\sum_{j\in C}^{}a_{j}>b

由于x为0/1变量,意味着覆盖C里的变量不能全部取1,可以得到覆盖不等式\sum_{j\in C}^{}x_{j}\leq |C|-1,如果覆盖C里的变量不能全部取1,那么加入系数比覆盖C的变量更大的变量成为E(C),也满足该约束,成为加强覆盖不等式,如下右图约束,根据原始约束可得覆盖不等式x3+x4+x5+x6<=3,x1和x2的系数比x3,x4,x5,x5的系数都大,因此可得加强覆盖不等式为x1+x2+x3+x4+x5+x6<=3

5.2 分支割平面法(Branch and Cut)

  • 将问题建模成MIP模型
  • 求解线性松弛,如果为整数,结束
  • 找到切割能裁剪线性松弛,如果能找到这样的切割,回到第二步
  • 如果找到不切割,对变量进行分支

Branch and Cut关键步骤:找到合适的切割能改进线性松弛最优解。我们不需要一次性列出所有的切割,只需要找到能移走当前最优解的切割

5.3 分离问题(The Separation Problem)

从Branch and Cut过程可知,假设线性松弛的最优解x^{*}可以通过一些切割改进,我们希望知道是否有Cover Cuts能切割掉x^{*}​​​​​​​,使原先的最优解变成不可行解,让切割更有效。为了移走x^{*}​​​​​​​,需要找到x^{*}违反的约束,违反前面的覆盖不等式,覆盖不等式\sum_{j\in C}^{}x_{j}\leq |C|-1能改写成\sum_{j\in C}^{}(1-x_{j})\geq 1,意思是一个覆盖集里至少有一个x=0,违反覆盖不等式即\sum_{j\in C}^{}(1-x_{j})< 1可以建模成一个最小化问题,如下右图,如果z_{j}=1​​​​​​​且目标函数值小于1,则找到了一个能移走x^{*}的切割,z_{j}=1​​​​​​​的变量组成一个切割

5.4 MIP+TSP

TSP的MIP建模思路如下:

  • 决策变量:x_{e}代表边e是否在解中
  • 约束条件:每个顶点连接的边有两条 

常规思路求解TSP会出现子圈的问题,消除子圈问题有以下思路

(1)Separation of Subtour Constraints

(2)Comb Constraints 

根据TSP基测表明,subtour elimination能实现2%的optimality gap,subtour + comb cuts能实现0.5%的optimality gap。切割+线性松弛是MIP求解非常有效的方式,还有很多类型的切割,具体问题具体应用。

6. facility location 编程作业

gurobi求解,80/80,代码见本人github,或参考用Gurobi+python求解设施选址问题(facility location)_bujbujbiu的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_45526117/article/details/128335479