第二章 整数规划
§1 概论
1.1 定义 规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,
变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适 用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。
1.2 整数规划的分类
如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类: 1o 变量全限制为整数时,称纯(完全)整数规划。 2o 变量部分限制为整数的,称混合整数规划。 1.2 整数规划特点 (i) 原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况: ①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。 ②整数规划无可行解。 例 1 原线性规划为
min z ? x1 ? x2
2x1 ? 4x2 ? 5, x1 ? 0, x2 ? 0
5 5
其最优实数解为: x1 ? 0, x2 ? , min z ? 。
4 4
③有可行解(当然就存在最优解),但最优解值变差。
例 2 原线性规划为
min z ? x1 ? x2
2x1 ? 4x2 ? 6, x1 ? 0, x2 ? 0
3 3
其最优实数解为: x1 ? 0, x2 ? , min z ? 。
2 2
若限制整数得: x1 ? 1, x2 ? 1, min z ? 2 。
(ii) 整数规划最优解不能按照实数最优解简单取整而获得。 1.3 求解方法分类:
(i)分枝定界法—可求纯或混合整数线性规划。 (ii)割平面法—可求纯或混合整数线性规划。 (iii)隐枚举法—求解“0-1”整数规划: ①过滤隐枚举法; ②分枝隐枚举法。
(iv)匈牙利法—解决指派问题(“0-1”规划特殊情形)。 (v)蒙特卡洛法—求解各种类型规划。 下面将简要介绍常用的几种求解整数规划的方法。
§2 分枝定界法
对有约束条件的最优化问题(其可行解为有限数)的所有可行解空间恰当地进行系 统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的子 集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称 为定界。在每次分枝后,凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,
-16-
这样,许多子集可不予考虑,这称剪枝。这就是分枝定界法的主要思路。
分枝定界法可用于解纯整数或混合的整数规划问题。在本世纪六十年代初由 Land Doig 和 Dakin 等人提出的。由于这方法灵活且便于用计算机求解,所以现在它已是解 整数规划的重要方法。目前已成功地应用于求解生产进度问题、旅行推销员问题、工厂 选址问题、背包问题及分配问题等。
设有最大化的整数规划问题 A ,与它相应的线性规划为问题 B ,从解问题 B 开始, 若其最优解不符合 A 的整数条件,那么 B 的最优目标函数必是 A 的最优目标函数 z的 上界,记作 z ;而 A 的任意可行解的目标函数值将是 z的一个下界 z 。分枝定界法就 是将 B 的可行域分成子区域的方法。逐步减小 z 和增大 z ,最终求到 z。现用下例来 说明:
例 3 求解下述整数规划
*
*
*
Max z ? 40x1 ? 90x2
?9x1 ? 7x2 ? 56 ??
?7x1 ? 20x2 ? 70 ??x, x? 0 且为整数 ?1 2
解 (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 : Max z ? 40x1 ? 90x2
?9x1 ? 7x2 ? 56
??
?7x1 ? 20x2 ? 70 ?0?
? ? x1 ? 4, x2 ? 0
最优解为: x1 ? 4.0, x2 ? 2.1, z1 ? 349 。
问题 B2 : Max z ? 40x1 ? 90x2
?9x1 ? 7x2 ? 56
??
?7x1 ? 20x2 ? 70 ??x? 5, x? 0 ?1 2
最优解为: 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 剪枝。
于是可以断定原问题的最优解为:
*
x 1 ? 4, x 2 ? 2, z? 340
从以上解题过程可得用分枝定界法求解整数规划(最大化)问题的步骤为: 开始,将要求解的整数规划问题称为问题 A ,将与它相应的线性规划问题称为问 题 B 。
(i)解问题 B 可能得到以下情况之一: (a) B 没有可行解,这时 A 也没有可行解,则停止. (b) B 有最优解,并符合问题 A 的整数条件, B 的最优解即为 A 的最优解,则 停止。
(c) B 有最优解,但不符合问题 A 的整数条件,记它的目标函数值为 z 。 (ii)用观察法找问题 A 的一个整数可行解,一般可取 x j ? 0, j ? 1,L, n ,试探, 求得其目标函数值,并记作 z 。以 z表示问题 A 的最优目标函数值;这时有
*
z ? z? z 进行迭代。
第一步:分枝,在 B 的最优解中任选一个不符合整数条件的变量 x j ,其值为 bj , 以[bj ] 表示小于 bj 的最大整数。构造两个约束条件
*
x j ? [bj ] 和 x j ? [bj ] ? 1
将这两个约束条件,分别加入问题 B ,求两个后继规划问题 B1 和 B2 。不考虑整数条件 求解这两个后继问题。
定界,以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出
。最优目标函数值最大者作为新的上界 z 从已符合整数条件的各分支中,找出目标函数
值为最大者作为新的下界 z ,若无作用 z 不变。
第二步:比较与剪枝,各分枝的最优目标函数中若有小于 z 者,则剪掉这枝,即 以后不再考虑了。若大于 z ,且不符合整数条件,则重复第一步骤。一直到最后得到
z* ? z 为止。得最优整数解 x* j , j ? 1,L, n 。
§3 0 ? 1 型整数规划
0 ? 1 型整数规划是整数规划中的特殊情形,它的变量 x j 仅取值 0 或 1。这时 x j 称 为 0 ? 1 变量,或称二进制变量。 x j 仅取值 0 或 1 这个条件可由下述约束条件:
0 ? x j ? 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 ? ??
当Ai点没被选?0,
7
i ? 1,2,L,7 .
Max z ? ?ci xi
i?1
??7
??bi xi ? B
i?1 ? x??1 ? x2 ? x3 ? 2 ?x 4 ? x 5 ? 1 ??
xi ? 0或??x6 ? x7 ? 1,
3.1.2 相互排斥的约束条件 1
有两个相互排斥的约束条件
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
可改写为
?500 y ? x1 ? 800 y
??
? y ? 0或1
-19-
如果有 m 个互相排斥的约束条件:
ai1x1 ? L? ain xn ? bi i ? 1,2,L, m
为了保证这 m 个约束条件只有一个起作用,我们引入 m 个 0 ? 1 变量 yi (i ? 1,2,L, m) 和一个充分大的常数 M ,而下面这一组 m ? 1 个约束条件
(1) ai1x1 ? L? ain xn ? bi ? yi M i ? 1,2,L, m
y1 ? L ? ym ? m ? 1
*
(2)
就合于上述的要求。这是因为,由于(2), m 个 yi 中只有一个能取 0 值,设 yi* ? 0 , 代入(1),就只有 i ? i的约束条件起作用,而别的式子都是多余的。
3.1.3 关于固定费用的问题(Fixed Cost Problem) 在讨论线性规划时,有些问题是要求使成本为最小。那时总设固定成本为常数,并
在线性规划的模型中不必明显列出。但有些固定费用(固定成本)的问题不能用一般线 性规划来描述,但可改变为混合整数规划来解决,见下例。
例 5 某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产 方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成 本就降低;反之,如选定的生产方式投资低,将来分配到每件产品的变动成本可能增加。 所以必须全面考虑。今设有三种方式可供选择,令
x j 表示采用第 j 种方式时的产量;
c j 表示采用第 j 种方式时每件产品的变动成本;
k j 表示采用第 j 种方式时的固定成本。 为了说明成本的特点,暂不考虑其它约束
条件。采用各种生产方式的总成本分别为
在构成目标函数时,为了统一在一个问题中讨论,现引入 0 ?1变量 y j ,
??k j ? c j x j , 当x j ? Pj ? ??0
0, ??当x ? 0
j ? 1,2,3.
于是目标函数
1, 当采用第j种生产方式,即x j ? 0??y j ? ??0 , 时, ???当不采用第j种生产方式,即x j ? 0
min z ? (k1 y1 ? c1 x1 ) ? (k2 y2 ? c2 x2 ) ? (k3 y3 ? c3 x3 )
(3)
(3)式这个规定可表为下述 3 个线性约束条件:
y j ? ? x j ? y j M , j ? 1,2,3
(4)
其中 ? 是一个充分小的正常数, M 是个充分大的正常数。(4)式说明,当 x j ? 0 时 y j 必须为 1;当 x j ? 0 时只有 y j 为 0 时才有意义,所以(4)式完全可以代替(3)式。 3.2 0 ?1型整数规划解法之一(过滤隐枚举法)
解 0 ?1型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法, 即检查变量取值为 0 或 1 的每一种组合,比较目标函数值以求得最优解,这就需要检查 变量取值的 2n 个组合。对于变量个数 n 较大(例如 n ? 100 ),这几乎是不可能的。因
此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。这样的 方法称为隐枚举法(Implicit Enumeration),分枝定界法也是一种隐枚举法。当然,对