第二章 整数规划
§1 概论
1.1 定义 规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。
1.2 整数规划的分类
如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类: o
1变量全限制为整数时,称纯(完全)整数规划。 2o 变量部分限制为整数的,称混合整数规划。 1.2 整数规划特点 (i) 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况: ①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。 ②整数规划无可行解。 例1 原线性规划为
minz=x1+x2
x1≥0,x2≥0 55
其最优实数解为:x1=0,x2=,minz=。
44
③有可行解(当然就存在最优解),但最优解值变差。
例2 原线性规划为
minz=x1+x2
2x1+4x2=5,
x1≥0,x2≥0 33
其最优实数解为:x1=0,x2=,minz=。
22
若限制整数得:x1=1,x2=1,minz=2。
(ii) 整数规划最优解不能按照实数最优解简单取整而获得。 1.3 求解方法分类:
(i)分枝定界法—可求纯或混合整数线性规划。 (ii)割平面法—可求纯或混合整数线性规划。 (iii)隐枚举法—求解“0-1”整数规划: ①过滤隐枚举法; ②分枝隐枚举法。
(iv)匈牙利法—解决指派问题(“0-1”规划特殊情形)。 (v)蒙特卡洛法—求解各种类型规划。
下面将简要介绍常用的几种求解整数规划的方法。
§2 分枝定界法
对有约束条件的最优化问题(其可行解为有限数)的所有可行解空间恰当地进行系统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的子集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称为定界。在每次分枝后,凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,
-16-
2x1+4x2=6,
这样,许多子集可不予考虑,这称剪枝。这就是分枝定界法的主要思路。
分枝定界法可用于解纯整数或混合的整数规划问题。在本世纪六十年代初由Land Doig和Dakin等人提出的。由于这方法灵活且便于用计算机求解,所以现在它已是解整数规划的重要方法。目前已成功地应用于求解生产进度问题、旅行推销员问题、工厂选址问题、背包问题及分配问题等。
设有最大化的整数规划问题A,与它相应的线性规划为问题B,从解问题B开始,若其最优解不符合A的整数条件,那么B的最优目标函数必是A的最优目标函数z的上界,记作z;而A的任意可行解的目标函数值将是z的一个下界z。分枝定界法就是将B的可行域分成子区域的方法。逐步减小z和增大z,最终求到z。现用下例来说明:
例3 求解下述整数规划
Maxz=40x1+90x2
*
*
*
?9x1+7x2≤56?
?7x1+20x2≤70
?x,x≥0且为整数?12
解 (i)先不考虑整数限制,即解相应的线性规划B,得最优解为:
x1=4.8092,x2=1.8168,z=355.8779
可见它不符合整数条件。这时z是问题A的最优目标函数值z的上界,记作z。而
*
x1=0,x2=0显然是问题A的一个整数可行解,这时z=0,是z的一个下界,记作z,
*
即0≤z≤356。
(ii)因为x1,x2当前均为非整数,故不满足整数要求,任选一个进行分枝。设选x1
*
进行分枝,把可行集分成2个子集:
x1≤[4.8092]=4,x1≥[4.8092]+1=5
因为4与5之间无整数,故这两个子集的整数解必与原可行集合整数解一致。这一步称为分枝。这两个子集的规划及求解如下:
问题B1: Maxz=40x1+90x2
?9x1+7x2≤56?
?7x1+20x2≤70
?0≤x≤4,x≥0
12?
最优解为:x1=4.0,x2=2.1,z1=349。
问题B2: Maxz=40x1+90x2
?9x1+7x2≤56?
?7x1+20x2≤70
?x≥5,x≥0
2?1
最优解为:x1=5.0,x2=1.57,z1=341.4。
再定界:0≤z≤349。
(iii)对问题B1再进行分枝得问题B11和B12,它们的最优解为
-17-
*
B11:x1=4,x2=2,z11=340
B12:x1=1.43,x2=3.00,z12=327.14
再定界:340≤z≤341,并将B12剪枝。
(iv)对问题B2再进行分枝得问题B21和B22,它们的最优解为
*
B21:x1=5.44,x2=1.00,z22=308 B22无可行解。
将B21,B22剪枝。
于是可以断定原问题的最优解为:
x1=4,x2=2,z*=340
从以上解题过程可得用分枝定界法求解整数规划(最大化)问题的步骤为:
开始,将要求解的整数规划问题称为问题A,将与它相应的线性规划问题称为问题B。
(i)解问题B可能得到以下情况之一:
(a)B没有可行解,这时A也没有可行解,则停止.
(b)B有最优解,并符合问题A的整数条件,B的最优解即为A的最优解,则停止。
(c)B有最优解,但不符合问题A的整数条件,记它的目标函数值为z。
(ii)用观察法找问题A的一个整数可行解,一般可取xj=0,j=1,L,n,试探,求得其目标函数值,并记作z。以z表示问题A的最优目标函数值;这时有
z≤z≤z 进行迭代。
第一步:分枝,在B的最优解中任选一个不符合整数条件的变量xj,其值为bj,以[bj]表示小于bj的最大整数。构造两个约束条件
*
*
xj≤[bj] 和 xj≥[bj]+1
将这两个约束条件,分别加入问题B,求两个后继规划问题B1和B2。不考虑整数条件求解这两个后继问题。
定界,以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出最优目标函数值最大者作为新的上界z。从已符合整数条件的各分支中,找出目标函数值为最大者作为新的下界z,若无作用z不变。
第二步:比较与剪枝,各分枝的最优目标函数中若有小于z者,则剪掉这枝,即以后不再考虑了。若大于z,且不符合整数条件,则重复第一步骤。一直到最后得到
z*=z为止。得最优整数解x*j,j=1,L,n。
§3 0?1型整数规划
0?1型整数规划是整数规划中的特殊情形,它的变量xj仅取值0或1。这时xj称为0?1变量,或称二进制变量。xj仅取值0或1这个条件可由下述约束条件: 0≤xj≤1,整数
-18-
所代替,是和一般整数规划的约束条件形式一致的。在实际问题中,如果引入 0?1变量,就可以把有各种情况需要分别讨论的线性规划问题统一在一个问题中讨论了。我们先介绍引入0?1变量的实际问题,再研究解法。
3.1 引入0?1变量的实际问题
3.1.1 投资场所的选定——相互排斥的计划
例4 某公司拟在市东、西、南三区建立门市部。拟议中有7个位置(点)Ai(i=1,2,L,7)可供选择。规定
在东区。由A1,A2,A3三个点中至多选两个; 在西区。由A4,A5两个点中至少选一个;
在南区,由A6,A7两个点中至少选一个。
如选用Ai点,设备投资估计为bi元,每年可获利润估计为ci元,但投资总额不能超过B元。问应选择哪几个点可使年利润为最大?
解题时先引入0?1变量xi(i=1,2,L,7) 令
?1,当Ai点被选中,xi=? i=1,2,L,7.
?0,当Ai点没被选中.
于是问题可列写成: Max
z=∑cixi
i=1
7
?7
?∑bixi≤Bi=1??
?x1+x2+x3≤2
?x+x≥1
5
?4?xi=0或1?x6+x7≥1,
3.1.2 相互排斥的约束条件
有两个相互排斥的约束条件
5x1+4x2≤24 或 7x1+3x2≤45。
为了统一在一个问题中,引入0?1变量y,则上述约束条件可改写为:
?5x1+4x2≤24+yM?
?7x1+3x2≤45+(1?y)M
?y=0或1?
其中M是充分大的数。
约束条件
x1=0 或 500≤x1≤800 可改写为
?500y≤x1≤800y
?
=01y或?
-19-
如果有m个互相排斥的约束条件:
i=1,2,L,m
为了保证这m个约束条件只有一个起作用,我们引入m个0?1变量yi(i=1,2,L,m)和一个充分大的常数M,而下面这一组m+1个约束条件
ai1x1+L+ainxn≤bi+yiMi=1,2,L,m (1)
y1+L+ym=m?1 (2)
就合于上述的要求。这是因为,由于(2),m个yi中只有一个能取0值,设yi*=0,
代入(1),就只有i=i的约束条件起作用,而别的式子都是多余的。
3.1.3 关于固定费用的问题(Fixed Cost Problem)
在讨论线性规划时,有些问题是要求使成本为最小。那时总设固定成本为常数,并在线性规划的模型中不必明显列出。但有些固定费用(固定成本)的问题不能用一般线性规划来描述,但可改变为混合整数规划来解决,见下例。
例5 某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成本就降低;反之,如选定的生产方式投资低,将来分配到每件产品的变动成本可能增加。所以必须全面考虑。今设有三种方式可供选择,令
xj表示采用第j种方式时的产量;
*
ai1x1+L+ainxn≤bi
cj表示采用第j种方式时每件产品的变动成本; kj表示采用第j种方式时的固定成本。
为了说明成本的特点,暂不考虑其它约束条件。采用各种生产方式的总成本分别为
??kj+cjxj,当xj>0
Pj=? j=1,2,3.
??0, 当xj=0 在构成目标函数时,为了统一在一个问题中讨论,现引入0?1变量yj,令
??1,当采用第j种生产方式,即xj>0时,
(3) yj=?
0,当不采用第j种生产方式,即xj=0时.??
于是目标函数
minz=(k1y1+c1x1)+(k2y2+c2x2)+(k3y3+c3x3)
(3)式这个规定可表为下述3个线性约束条件:
yjε≤xj≤yjM,j=1,2,3 (4) 其中ε是一个充分小的正常数,M是个充分大的正常数。(4)式说明,当xj>0时yj必须为1;当xj=0时只有yj为0时才有意义,所以(4)式完全可以代替(3)式。 3.2 0?1型整数规划解法之一(过滤隐枚举法)
解0?1型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法,即检查变量取值为0或1的每一种组合,比较目标函数值以求得最优解,这就需要检查变量取值的2个组合。对于变量个数n较大(例如n>100),这几乎是不可能的。因此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。这样的方法称为隐枚举法(Implicit Enumeration),分枝定界法也是一种隐枚举法。当然,对
-20-
n