第二章--整数规划
优秀简历欣赏-商品房预售合同
第二章 整数规划
§1 概论
1.1 定义
规
划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中,
变量限制为整数,则称
为整数线性规划。目前所流行的求解整数规划的方法,往往只适
用于整数线性规划。目前还没有一种方法
能有效地求解一切整数规划。
1.2 整数规划的分类
如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类:
1
o
变量全限制为整数时,称纯(完全)整数规划。
2
o
变量部分限制为整数的,称混合整数规划。
1.2 整数规划特点
(i)
原线性规划有最优解,当自变量限制为整数后,其整数规划解出现下述情况:
①原线性规划最优解全是整数,则整数规划最优解与线性规划最优解一致。
②整数规划无可行解。
例1 原线性规划为
minzx
1
x
2
x
1
0,x
2
0
55
其最优实数解
为:
x
1
0,x
2
,minz
。
44
③有可行解(当然就存在最优解),但最优解值变差。
例2 原线性规划为
minzx
1
x
2
2x
1
4x
2
5,
x
1
0,x2
0
33
其最优实数解为:
x
1
0,x
2
,minz
。
22
若限制整数得:
x
1<
br>1,x
2
1,minz2
。
(ii)
整数规划最优解不能按照实数最优解简单取整而获得。
1.3 求解方法分类:
(i)分枝定界法—可求纯或混合整数线性规划。
(ii)割平面法—可求纯或混合整数线性规划。
(iii)隐枚举法—求解“0-1”整数规划:
①过滤隐枚举法;
②分枝隐枚举法。
(iv)匈牙利法—解决指派问题(“0-1”规划特殊情形)。
(v)蒙特卡洛法—求解各种类型规划。
下面将简要介绍常用的几种求解整数规划的方法。
§2 分枝定界法
对有约束条件的最优化问题(其可行解为有限数)的所有可行
解空间恰当地进行系
统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的
子
集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称
为定界
。在每次分枝后,凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,
2x
1
4x
2
6,
这样,许多子集可不予考虑
,这称剪枝。这就是分枝定界法的主要思路。
分枝定界法可用于解纯整数或混合的整数规划问题。在本世纪六十年代初由Land
Doig
和Dakin等人提出的。由于这方法灵活且便于用计算机求解,所以现在它已是解
整数规划的重要方法
。目前已成功地应用于求解生产进度问题、旅行推销员问题、工厂
选址问题、背包问题及分配问题等。
设有最大化的整数规划问题
A
,与它相应的线性规划为问题
B
,从解
问题
B
开始,
若其最优解不符合
A
的整数条件,那么
B的最优目标函数必是
A
的最优目标函数
z
*
的
上界,记
作
z
;而
A
的任意可行解的目标函数值将是
z
*
的
一个下界
z
。分枝定界法就
是将
B
的可行域分成子区域的方法。逐步
减小
z
和增大
z
,最终求到
z
*
。现用下例来说明:
例3 求解下述整数规划
Maxz40x
1
90x
2
9x
1
7x
2
56
7x
1
20x
2
70
x,x0
且为整数
12
解
(i)先不考虑整数限制,即解相应的线性规划
B
,得最优解为:
x
14.8092,x
2
1.8168,z355.8779
可见它
不符合整数条件。这时
z
是问题
A
的最优目标函数值
z
的上
界,记作
z
。而
*
x
1
0,x
2
0<
br>显然是问题
A
的一个整数可行解,这时
z0
,是
z
的一个下界,记作
z
,
*
即
0z356
。
(
ii)因为
x
1
,x
2
当前均为非整数,故不满足整数要求,任选一
个进行分枝。设选
x
1
进行分枝,把可行集分成2个子集:
x
1<
br>[4.8092]4
,
x
1
[4.8092]15
因为4与5之间无整数,故这两个子集的整数解必与原可行集合整数解一致。这
一步称为分枝。
这两个子集的规划及求解如下:
问题
B
1
:
Maxz40x
1
90x
2
*
9x
1
7x
2
56
7x
1
20x
2
70
0x4,x0
12
最优解为:
x
1
4.0,x<
br>2
2.1,z
1
349
。
问题
B
2
:
Maxz40x
1
90x
2
9x
1
7x
2
56
7x
1
20x
2
70
x5,x0
2
1
最优解为:
x
1
5.0,
x
2
1.57,z
1
341.4
。
再定界:
0z349
。
(iii)对问题
B
1
再进行分枝得问题
B
11
和
B
12
,它们的最优解为 <
br>*
B
11
:x
1
4,x
2
2,z
11
340
B
12
:x
1
1.43,x
2
3.00,z
12
327.14
再定界:
340z341
,并将
B
12
剪枝。
(iv)对问题
B
2
再进行分枝得问题
B
21
和
B
22
,它们的最优解为
*
B
21
:x
1
5.44,x
2
1.00,z
22
308
B
22
无可行解。
将
B
21
,B
22
剪枝。
于是可以断定原问题的最优解为:
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,j1,,
n
,试探,
求得其目标函数值,并记作
z
。以
z
表示问题<
br>A
的最优目标函数值;这时有
zzz
进行迭代。
第一步:分枝,在
B
的最优解中
任选一个不符合整数条件的变量
x
j
,其值为
b
j
,
以
[b
j
]
表示小于
b
j
的最大整数。构造两个
约束条件
*
*
x
j
[b
j
]
和
x
j
[b
j
]1
将这两个约束条件,分别加
入问题
B
,求两个后继规划问题
B
1
和
B
2
。不考虑整数条件
求解这两个后继问题。
定界,以每个后继问题为一分枝标明求解
的结果,与其它问题的解的结果中,找出
最优目标函数值最大者作为新的上界
z
。从已
符合整数条件的各分支中,找出目标函数
值为最大者作为新的下界
z
,若无作用
z0
。
第二步:比较与剪枝,各分枝的最优目标函数中若有小于
z
者,
则剪掉这枝,即
以后不再考虑了。若大于
z
,且不符合整数条件,则重复第一步骤。一
直到最后得到
z
*
z
为止。得最优整数解
x
*
,
,n
。
j
,j1
§3
01
型整数规划
01
型整数规划是整数规划中的特殊情形,它的变量
x
j
仅取值0
或1。这时
x
j
称
为
01
变量,或称二进制变量。
x
j
仅取值0或1这个条件可由下述约束条件:
0x
j
1
,整数
所代替,是和一般整数规划的约束条件形式一致的。在实际问题中,如果引入
01
变
量,就可以把有各种情况需要分别讨论的线性规划问题统一在一个问题中讨论了。我们
先介绍引入
01
变量的实际问题,再研究解法。
3.1
引入
01
变量的实际问题
3.1.1
投资场所的选定——相互排斥的计划
例4 某公司拟在市东、西、南三区建立门市部。拟议
中有7个位置(点)
A
i
(i1,2,,7)
可供选择。规定
在东区。由
A
1
,A
2
,A
3
三个点中至多选两个
;
在西区。由
A
4
,A
5
两个点中至少选一个;
在南区,由
A
6
,A
7
两个点中至少选一个。
如选用
A
i
点,设备投资估计为
b
i
元,每年可获利润估计
为
c
i
元,但投资总额不能
超过
B
元。问应选择哪几个点可
使年利润为最大?
解题时先引入
01
变量
x
i
(i1
,2,,7)
令
1,
当A
i
点被选中
,
i1,2,,7
.
x
i
0,
当
A点没被选中.
i
于是问题可列写成:
Maxz
c
i
x
i
i1
7
7
b
i
x
i
B
i1
x
1
x
2
x
3
2
xx1
5
4
x
i
0
或
1
x
6x
7
1,
3.1.2 相互排斥的约束条件
有两个相互排斥的约束条件
5x
1
4x
2
24
或
7x
1
3x
2
45
。
为了统一在
一个问题中,引入
01
变量
y
,则上述约束条件可改写为:
5x
1
4x
2
24yM
7x
1
3x
2
45(1y)M
y0或1
其中
M
是充分大的数。
约束条件
x
1
0
或
500x
1
800
可改写为
500yx
1
800y
y0
或
1
如果有
m
个互相排斥的约束条件:
a
i1
x
1
a
in
x
n
b
i
i
1,2,,m
为了保证这
m
个约束条件只有一个起作用
,我们引入
m
个
01
变量
y
i
(i1,2,
,m)
和一个充分大的常数
M
,而下面这一组
m1
个约束条件
a
i1
x
1
a
in
xn
b
i
y
i
Mi1,2,,m
(1)
y
1
y
m
m1
(2)
就合于上述的要求。这是因为,由于(2),
m
个
y
i中只有一个能取0值,设
y
i
*
0
,
代入(1),就
只有
ii
的约束条件起作用,而别的式子都是多余的。
3.1.3
关于固定费用的问题(Fixed Cost Problem)
在讨论线性规划时,有些问题是要求
使成本为最小。那时总设固定成本为常数,并
在线性规划的模型中不必明显列出。但有些固定费用(固定
成本)的问题不能用一般线
性规划来描述,但可改变为混合整数规划来解决,见下例。
例5
某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产
方式投资高(选购自动化程度
高的设备),由于产量大,因而分配到每件产品的变动成
本就降低;反之,如选定的生产方式投资低,将
来分配到每件产品的变动成本可能增加。
所以必须全面考虑。今设有三种方式可供选择,令
x
j
表示采用第
j
种方式时的产量;
*
c
j
表示采用第
j
种方式时每件产品的变动成本;
k
j
表示采用第
j
种方式时的固定成本。
为了说明成本的特点,暂不考虑其它约束条件。采用各种生产方式的总成本分别为
P
i
k
i
c
i
xi
,
当
x
j
0
当
x
j
0
0,
j1,2,3
.
在构成目标函数时,为了统一在一个问题中讨论,现引入
01
变量
y
j
,令
1,
当采用第j种生产方式,即x
j
0时,
(3)
y
j
0,
当不采用第j种生产方式,即xj
0时
.
于是目标函数
minz(k
1
y
1
c
1
x
1
)(k
2
y
2
c
2
x
2
)(k<
br>3
y
3
c
3
x
3
)
(3)式这个规定可表为下述3个线性约束条件:
x
j
y
j
M,j1,2,3
(4)
其中
M
是个充分大的常数。(4)式说明,当
x
j
0
时
y
j
必须为1;当
x
j
0
时只有
y
j
为0时才有意义,所以(4)式完全可以代替(3)式。
3.2
01
型整数规划解法之一(过滤隐枚举法)
解
01
型整数规划
最容易想到的方法,和一般整数规划的情形一样,就是穷举法,
即检查变量取值为0或1的每一种组合,
比较目标函数值以求得最优解,这就需要检查
变量取值的
2
个组合。对于变量个数n
较大(例如
n10
),这几乎是不可能的。因此
常设计一些方法,只
检查变量取值的组合的一部分,就能求到问题的最优解。这样的方
法称为隐枚举法(Implicit
Enumeration),分枝定界法也是一种隐枚举法。当然,对有
些问题隐枚举法并不适用,所以
有时穷举法还是必要的。
下面举例说明一种解
01
型整数规划的隐枚举法。
例6
Maxz3x
1
2x
2
5x
3
n
x
1
2x
2
x
3
2
x4xx4
123
x
1
x
2
3
4xx
6
3
2
x
1
,x
2,x
3
0或1
求解思路及改进措施:
(i) 先试探性求一个可行解
,易看出
(x
1
,x
2
,x
3
)(1,0,0)
满足约束条件,故为一
个可行解,且
z3
。
(ii) 因为是求
极大值问题,故求最优解时,凡是目标值
z3
的解不必检验是否
满足约束条件即可删
除,因它肯定不是最优解,于是应增加一个约束条件(目标值下界):
(iii) 改进过滤条件。
(iv) 由于对每个组合首先计算目标值以验证过滤条件,故应优先计算目标值大
的组合,这
样可提前抬高过滤门槛,以减少计算量。
§4 蒙特卡洛法(随机取样法)
前面
介绍的常用的整数规划求解方法,主要是针对线性整数规划而言,而对于非线
性整数规划目前尚未有一种
成熟而准确的求解方法,因为非线性规划本身的通用有效解
法尚未找到,更何况是非线性整数规划。 <
br>然而,尽管整数规划由于限制变量为整数而增加了难度;然而又由于整数解是有限
个,于是为枚举
法提供了方便。当然,当自变量维数很大和取值范围很宽情况下,企图
用显枚举法(即穷举法)计算出最
优值是不现实的,但是应用概率理论可以证明,在一
定的计算量的情况下,完全可以得出一个满意解。
例7 已知非线性整数规划为:
z
2222
Max zx
1
2
x
2
3x
3
4x
4
2x
5
8x
1
2x
2
3x3
x
4
2x
5
0x
i
99
(i1,,5)
xxxxx400
12345
x
1
2x
2
2x
3
x
4
6x
5
800
2xx6x200
2
3
1
x
3
x
4
5x<
br>5
200
对该题,目前尚无有效方法求出准确解。如果用显枚举法试探,共
需计算
(100)
5
10
10
个点,其计算量非常之大。然而应用
蒙特卡洛去随机计算
10
6
个点,便可
找到满意解,那么这种方法的可信度究
竟怎样呢?
下面就分析随机取样采集
10
个点计算时,应用概率理论来估计一下可信度。
不失一般性,假定一个整数规划的最优点不是孤立的奇点。
假设目标函数落在高值区的概率分
别为0.01,0.00001,则当计算
10
个点后,有
任一个点能落在高值区的概
率分别为
6
6
10.99
1000000
0.9999(1
00多位)
,
10.99999
1000000
0.999954602
。
解 (i)首先编写M文件mente.m定义目标函数f 和约束向量函数g,程序如下:
function [f,g]=mengte(x);
f=x(1)^2+
x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)-8*x(1)-2*x(2)-3*x(
3)...
-x(4)-2*x(5);
g(1)=sum(x)-400;
g(2)=x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800;
g(3)=2*x(1)+x(2)+6*x(3)-200;
g(4)=x(3)+x(4)+5*x(5)-200;
(ii)编写如下程序求问题的解:
rand('state',sum(clock));
p0=0;
tic
for i=1:10^5
x=99*rand(5,1);
x1=floor(x);x2=ceil(x);
[f,g]=mengte(x1);
if sum(g<=0)==4
if p0<=f
x0=x1;p0=f;
end
end
[f,g]=mengte(x2);
if sum(g<=0)==4
if p0<=f
x0=x2;p0=f;
end
end
end
x0,p0
toc
§5 整数规划的计算机解法
整数规划问题的求解可以使用Lingo等专用软件。对于一般的整数规划规划问题,
无法直接
利用Matlab的函数,必须利用Matlab编程实现分枝定界解法和割平面解法。
但对于指派问题
等特殊的
01
整数规划问题或约束矩阵
A
是幺模矩阵时,有时可以直
接利用Matlab的函数linprog。
例8 求解下列指派问题,已知指派矩阵为
38
87
64
84
910
210
29
2
2
6
7
3
9
3
7
5
5
10
解:编写Matlab程序如下:
c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5
8 4 2
3 5;9 10 6 9 10];
c=c(:);
a=zeros(10,25);
for i=1:5
a(i,(i-1)*5+1:5*i)=1;
a(5+i,i:5:25)=1;
end
b=ones(10,1);
[x,y]=linprog(c,[],[
],a,b,zeros(25,1),ones(25,1))
求得最优指派方案为
x15
x
23
x
32
x
44
x
51
1
,最优值为21。
习 题 二
1.
用分枝定界法解:
Max zx
1
x
2
951<
br>
xx
1
14
2
14
1<
br>
2xx
12
3
x
1
,x
2
0,x
1
,x
2
整数
2.
试将下述非线性的
01
规划问题转换成线性的
01
规划问题
maxzx
1
x
1
x
2
x
3
2x
1
3x
2
x
3
3
x
j
0
或
1,(j1,2,3)
3. 某钻
井队要从以下10个可供选择的井位中确定5个钻井探油,使总的钻探费
用为最小。若10个井位的代号
为
s
1
,s
2
,,s
10
,相应的钻探费用为<
br>c
1
,c
2
,,c
10
,并且
井位选择上
要满足下列限制条件:
(1) 或选择
s
1
和
s
7
,或选择钻探
s
9
;
(2) 选择了
s
3
或<
br>s
4
就不能选
s
5
,或反过来也一样;
(3) 在
s
5
,s
6
,s
7
,s
8
中最多
只能选两个;试建立这个问题的整数规划模型。