运筹学课件第五章整数规划.docx
《运筹学课件第五章整数规划.docx》由会员分享,可在线阅读,更多相关《运筹学课件第五章整数规划.docx(28页珍藏版)》请在冰豆网上搜索。
运筹学课件第五章整数规划
第五章整数规划
一、学习目的与要求
1、熟悉分支定界法和割平面法的原理及其应用;
2、掌握求解0——1规划问题的隐枚举法;
3、掌握求解指派问题的匈牙利法。
二、课时9学时
第一节整数规划的数学模型及解的特点
整数规划IP(integerprogramming):
在许多规划问题中,如果要求一部分或全部决策变量必须取整数。
例如,所求的解是机器的台数、人数、车辆船只数等,这样的规划问题称为整数规划,简记IP。
松弛问题(slackproblem):
不考虑整数条件,由余下的目标函数和约束条件构成的规划问题称为该整数规划问题的松弛问题。
若松弛问题是一个线性规化问题,则该整数规划为整数线性规划(integerlinearprogramming)。
一、整数线性规划数学模型的一般形式
整数线性规划问题可以分为以下几种类型
1、纯整数线性规划(pureintegerlinearprogramming):
指全部决策变量都必须取整数值的整数线性规划。
有时,也称为全整数规划。
2、混合整数线性规划(mixedintegerlinerprogramming):
指决策变量中有一部分必须取整数值,另一部分可以不取整数值的整数线性规划。
3、0—1型整数线性规划(zero—oneintegerlinerprogramming):
指决策变量只能取值0或1的整数线性规划。
二、整数规划的例子
例1某服务部门各时段(每2h为一时段)需要服务员的人数见下表。
按规定,服务员连续工作8h(即四个时段为一班)。
现在求安排服务员的工作时间,使服务部门服务员总数最少?
时段
1
2
3
4
5
6
7
8
服务员最少数目
10
8
9
11
13
8
5
3
解:
设在第j时段开始上班的服务员的人数为xj。
问题的数学模式略。
例2现有资金总额为B。
可选择投资项目有n个,项目j所需投资额和预期收益分别为aj和cj(j=1,2,…,n)。
此外由于种种原因,有三个附加条件:
若选择项目1,就必须选择项目2。
反这则不一定;第二,项目3和项目4中至少选择一个;第三,项目5、项目6和项目7恰好选择两个。
应当怎样选择投资项目,才能使预期收益最大?
解:
每一个投资项目都有被选择和不被选择两种可能,为此令
这样,问题可表示为
例3工厂A1和A2生产某种物资。
由于该种物资供不应求,故需要再建一家工厂。
相应的建厂方案有A3和A4两个。
这种物资的需求地有B1,B2,B3,B4四个。
各工厂年生产能力、各地所需求量、各厂至各需求地的单位物资运费cij(i,j=1,2,…,4)见下表。
B1
B2
B3
B4
生产能力
(kt/年)
A1
2
9
3
4
400
A2
8
3
5
7
600
A3
7
6
1
2
200
A4
4
5
2
5
200
需求量(kt/年)
350
400
300
150
工厂A3或A4开工后,每年的生产费用估计分别为1200万元或1500万元。
现要决定应该建设工厂A3还是A4,才能使今后每年的总费用(即全部物资运费和新工厂生产费用之和)最少?
解:
这是全个物资运输问题,其特点是事先不能确定应该建A3或A4中哪一个,因而不知道新厂投产后的实际生产费用。
引入0—1变量
再设cij为由Ai运往Bj的物资数量(i,j=1,2,…,4),单位是千吨,z表示总费用。
问题数学模型为
三、整数规划的解的特点
相对于松弛问题而言,二者之间既有联系,又有本质的区别
(1)整数规划问题的可行域是其松弛问题的一个子集
(2)整数规划问题的可行解一定是其松弛问题的可行解
(3)一般情况下,松弛问题的最优解不会刚好满足变量的整数约束条件,因而不是整数规划的可行解,更不是最优解
(4)对松弛问题的最优解中非整数变量简单的取整,所得到的解不一定是整数规划问题的最优解,甚至也不一定是整数规划问题的可行解
(5)求解还是要先求松弛问题的最优解,然后用分支定界法或割平面法。
例4考虑下面的整数规划问题:
第二节解纯整数规划的割平面法
考虑纯整数规划问题
设其中aij(i=1,2,…,m,j=1,2,…,n)和bj(j=1,2,…,n)皆为整数。
纯整数规划的松驰问题是一个线性规划问题,可以用单纯形法求解。
在松驰问题的最优单纯形表中,记Q为m个基变量的下标的集合,K为n-m个非基变量的下标的集合,则m个约束方程可表示为
(1)
而对应的最优解
,其中
若
皆为整数,则此解就是纯整数规划的最优解。
否则不是原整数规划最优解。
割平面法基本思路:
通过增加新的约束来切割可原问题伴随规划的可行域,使它在不断缩小的过程中,将原问题的整数最优解逐渐暴露且趋于可行域极点的位置,这样就有可能用单纯形法求出。
每次增加的新的约束条件应当具备两个基本性质:
一是已获得的不符合整数要求的线性规划最优解不满足线性约束条件,从而不可能在以后的解中再出现;二是凡整数可行解均满足线性约束条件,因而整数最优解始终被保留在每次形成的线性规划可行域中。
为此若
不是整数,在
(1)式中的约束方程为
(2)
其中
应为整数,按
不是整数,
可能是整数也可能不是整数。
分解
成两个部分。
一部分是不超过该数的最大整数,另一部分是余下的小数。
即
(2)式变为
因此有
,即
(3)
上式满足上面要求的两个性质(证明见书P128)。
实际解题时,经验表明若从最优单纯表中选择具有最大(小)数部分的非整分量所在行构造割平面约束条件,往往可以提高切割效果,减少切割次数。
例5用割平面法解整数规划问题
解:
将原整数规划问题称为原问题A0,不考虑整数条件的松驰问题为问题B0,求解过程如下:
1.用单纯形法求解B0,得最优单纯形表
Cj
3
-1
0
0
0
CB
基
x1
x2
x3
x4
x5
3
x1
13/7
1
0
1/7
0
2/7
-1
x2
9/7
0
1
-2/7
0
3/7
0
x4
31/7
0
0
-3/7
1
22/7
cj-zj
0
0
-5/7
0
-3/7
2.求一个割平面方程
在最终表上任选一个含有不满足整数条件基变量的约束方程。
若选x1,则含x1的约束方程为:
上式加入松驰变量x6得
3、将上述约束方程重新组合。
用对偶单纯形法解新线性规划
Cj
3
-1
0
0
0
0
CB
基
x1
x2
x3
x4
x5
x6
3
x1
13/7
1
0
1/7
0
2/7
0
-1
x2
9/7
0
1
-2/7
0
3/7
0
0
x4
31/7
0
0
-3/7
1
22/7
0
0
x6
-6/7
0
0
-1/7
0
-3/7
1
cj-zj
0
0
-5/7
0
-3/7
0
3
x1
1
1
0
0
0
0
1
-1
x2
5/4
0
1
0
-1/4
0
-5/4
0
x3
5/2
0
0
1
-1/2
0
-11/2
0
x5
7/4
0
0
0
1/4
1
-3/4
cj-zj
0
0
0
-1/4
0
-17/4
类似的得新割平面约束条件
再解新线性规划得
Cj
3
-1
0
0
0
0
0
CB
基
x1
x2
x3
x4
x5
x6
x7
3
x1
1
1
0
0
0
0
1
0
-1
x2
2
0
1
0
0
0
-1
-1
0
x3
4
0
0
1
0
0
-5
-2
0
x5
1
0
0
0
0
1
-1
1
0
x4
1
0
0
0
1
0
1
-4
cj-zj
0
0
0
0
0
-4
-1
得最优解。
割平面法解整数规划问题的基本步骤
第一步:
用单纯形法解松弛问题,得到最优单纯形表。
第二步:
求一个割平面方程,加到最优单纯形表中,用对偶单纯形法继续求解。
第三步:
若没有得到整数最优解,则继续作割平面方程,转第二步。
第三节分支定界法
分枝定界法是一种隐枚举法或部分枚举法,它不是一种有效算法,是枚举法基础的改进。
分枝定界法的关键是分支和定界。
分支定界法的主要思路是首先求解整数规划的伴随规划,如果求得的最优解不符合整数条件,则增加新约束——缩小可行域;将原整数规划问题分支——分为两个子规划,再解子规划的伴随规划……,最后得到原整数规划的伴随规划。
这就是所谓的“分支”。
所谓“定界”,是在分支过程中,若某个后继问题恰巧获得整数规划问题的一个可行解,那么,它的目标函数值就是一个“界限”,可以作为衡量处理其它分支的一个依据。
“分支”为整数规划最优解的出现创造了条件,而“定界”则可以提高搜索的效率。
例用分支定界法求解整数规划问题
解:
记整数规划为(IP),它的松驰问题为(LP)。
(1)首先解该整数规划的松驰问题为(LP),如图所示,用图解法
C(1,7/3)
B(2,23/9)
其最优解为X*=(3/2,10/3)’,图中点A,Z*=29/6。
不符合整数要求,可任选一个变量,如x1=3/2进行分支。
由于最接近3/2的整数是1和2,因而可以构造两个约束条件x1≥2和x1≤1,分别并入原来的约束条件,形成两个分支S1、S1,松驰问题分别记为(LP1)、(LP2)。
(LP1)其最优解为X*=(2,23/9)’,图中点B,Z*=41/9;(LP2)其最优解为X*=(1,7/3)’,图中点C,Z*=10/3;都不整数解,因41/9>7/3,优先S1分枝。
因x2=23/9,进行分支。
由于最接近23/9的整数是2和3,因而可以构造两个约束条件x2≥3和x2≤2,分别并入原来的约束条件,形成两个分支S11、S12,松驰问题分别记为(LP11)、(LP12)。
(LP11)其最优解为为空;(LP12)其最优解为X*=(33/14,2)’,图中点D,Z*=61/14;不是整数解。
F(2,2)
D(33/14,2)
E(3,1)
因x1=33/14,进行分支。
由于最接近33/14的整数是2和3,因而可以构造两个约束条件x1≥3和x1≤2,分别并入原来的约束条件,形成两个分支S121、S122,松驰问题分别记为(LP121)、(LP122)。
(LP121)其最优解为X*=(3,1)’,图中点E,Z*=4;(LP122)其最优解为X*=(2,2)’,图中点F,Z*=4。
因此有两个最优解,分别是(2,2)、(3,1),最大值为4。
分支定界法的计算步骤
第一步:
计算原问题目标函数值的初始上界
第二步:
计算原问题目标函数值的初始下界
第三步:
增加约束条件将原问题分支
第四步:
分别求解一对分支
第五步:
修改上、下界
第六步:
比较上、下界大小,如有上界=下界,停止计算,找到最优解,否则转3
第四节0—1型整数规划
0—1型整数规划中0—1变量作为逻辑变量(logicalvariable),常被用来表示系统是否处于某一特定状态,或者决策时是否取某个方案。
当问题含有多项要素,而个要素的两种选择时,可用一组0—1变量来描述。
一、0—1型整数规划的典型应用问题
例1:
背包问题:
一个登山队员,他需要携带的物品有:
食品、氧气、冰镐、绳索、帐篷、照相器材、通信器材等。
每种物品的重量合重要性系数如表所示。
设登山队员可携带的最大重量为25kg,试选择该队员所应携带的物品。
序号
1
2
3
4
5
6
7
物品
食品
氧气
冰镐
绳索
帐篷
照相器材
通信设备
重量/Kg
5
5
2
6
12
2
4
重要性系数
20
15
18
14
8
4
10
解:
引入0—1变量xi,xi=1表示应携带物品i,,xi=0表示不应携带物品I
上述问题就是一个标准的整数规划问题,解法。
。
。
。
。
。
。
。
比较每种物品的重要性系数和重量的比值,比值大的物品首先选取,直到达到重量限制
解得:
X*=(1,1,1,1,0,1,1)’Z*=81
例2:
集合覆盖和布点问题
某市消防队布点问题。
该市共有6个区,每个区都可以建消防站,市政府希望设置的消防站最少,但必须满足在城市任何地区发生火警时,消防车要在15min内赶到现场。
据实地测定,各区之间消防车行驶的时间见表,请制定一个布点最少的计划。
地区1
地区2
地区3
地区4
地区5
地区6
地区1
地区2
地区3
地区4
地区5
地区6
0
10
16
28
27
20
10
0
24
32
17
10
16
24
0
12
27
21
28
32
12
0
15
25
27
17
27
15
0
14
20
10
21
25
14
0
解:
引入0—1变量xi,xi=1表示在该区设消防站,,xi=0表示不设
解得:
X*=(0,1,0,1,0,0)’Z*=2
二、特殊约束的处理
1.含有相互排斥约束条件的问题:
建模时,有时会遇到相互矛盾的约束,而模型只能两者取一,例如下面两个约束
这时引入一个0-1变量y,及一个很大的正数M,原式可化为:
y=0时,
(1)与(3)相同,(4)自然满足,实际上不起作用
y=1时,(4)与
(2)相同,(3)自然满足,实际上不起作用
对于形似
,可以用以下一对约束代替
引入0—1变量后,约束可改为
2.从p个约束条件中恰好选择q个的问题
模型希望在下列p个约束中,恰在此时好有q个约束有效:
引入p个0-1整数变量yi,i=1,2,…,p
.
则上式可改写为:
三、隐枚举法求解小规模0-1规划问题
例1隐枚举法求解小规模0-1规划问题
解:
(1)先用试探的方法找出一个初始可行解,如x1=1,x2=x3=0
则X0=(1,0,0)’Z0=3
(2)对原有约束增加一个过滤条件,加到原约束条件中
(3)再求解上述问题
按照枚举法得思路,依次检查各种变量得组合。
每找到一个可行解,求出它的目标函数Z1,Z1>Z0,则将过滤条件换成Z1。
求解过程见下表,表中
(1),
(2),(3),(4)为原问题得约束条件,(5)为增加的过滤条件,“×”代表不满足约束,“√”代表满足条件,空格代表不需要计算。
点
过滤条件
约束
Z值
(5)
(1)
(2)
(3)
(4)
(0,0,0)’
×
(0,0,1)’
√
√
√
√
√
5
(0,1,0)’
×
(0,1,1)’
×
(1,0,0)’
×
(1,0,1)’
√
√
√
√
√
8
(1,1,0)’
×
(1,1,1)’
×
这种对过滤条件的改进,可以减少计算量。
注:
一般常重新排列xi的顺序使目标函数中xi的系数是递增(不减)的,在上例中,改写
因为-2,3,5是递增的,变量(x2,x1,x3)也按下述顺序取值:
(0,0,0),(0,0,1)…,这样,最优解容易比较早的发现,再结合过滤条件的改进,更可使计算简化。
例隐枚举法求解小规模0-1规划问题
解:
采用上例的方法解此例共需36次运算,为了进一步减少运算量,按目标函数中各变量系数的大小顺序重新排列各变量,以使最优解有可能较早出现。
对于最大化问题,可按由小到大的顺序排列,最小化问题则相反。
本例可写为:
由于本题过滤条件不好选,所以开始不设过滤条件
点
过滤条件
约束
Z值
(x2,x1,x4,x3)
(4)
(1)
(2)
(3)
(0,0,0,0)
×
(0,0,0,1)
√
×
(0,0,1,0)
×
(0,0,1,1)
×
(0,1,0,0)
√
×
(0,1,0,1)
√
×
(0,1,1,0)
√
×
(0,1,1,1)
√
√
√
3
(1,0,0,0)
×
(1,0,0,1)
×
(1,0,1,0)
×
(1,0,1,1)
×
(1,1,0,0)
×
(1,1,0,1)
×
(1,1,1,0)
×
(1,1,1,1)
×
此例的最优解X*=(0,1,1,1)’minz=3
第五节指派问题
在现实生活中,有各种性质的指派问题(assignmentproblem)。
指派问题也是整数规划的一类重要问题。
例如:
有若干项工作需要分配给若干个人(或部门)来完成;有若干项合同需要选择若干个投标者来承包;有若干个班级需要安排在各教室上课等。
诸如此类问题,它们的基本要求是在满足特定的指派要求条件下,使指派方案的总体效果最佳。
一、指派问题的标准形式与数学模型
指派问题的标准形式是:
有n个人和n件事,已知第i人做第j件事的费用为cij(i,j=1,2,…,n),要确定人和事之间的一一对应的指派方案,使完成这n件事的费用最少。
一般称矩阵C=(cij)n×n为指派问题的系数矩阵。
在实际中根据的具体意义,矩阵C有不同的含义,如费用、成本、时间等。
引入0-1变量xij,
因此指派问题的数学模型为
例某商业公司计划开办5家新商店。
为尽早建成营业,商业公司决定由5家建筑公司分别承建。
已知建筑公司Ai(i=1,23,4,5)对新商店Bj(j=1,23,4,5)的建造费用报价为Cij(i,j=1,23,4,5),见下表。
商业公司应当对5家建筑公司如何分配建造任务,才能使总的建造费用最少?
Cij
B1
B2
B3
B4
B5
A1
4
8
7
15
12
A2
7
9
17
14
10
A3
6
9
12
8
7
A4
6
7
14
6
10
A5
6
9
12
10
6
解:
设
则数学模型为
二、匈牙利法的基本原理
因此,指派问题是线性规划问题,同时也是一类特殊的运输问题。
定理1:
设指派问题的系数矩阵为C,若将该矩阵的某一行(或列)的各个元素都减去同一常数k(k可正可负),得到新的矩阵C’,则以C’为系数矩阵的新指派问题与原指派问题的最优解相同,但其最优值减少k。
推论1:
若指派问题系数矩阵每一行及每一列分别减去各行及各列的最小元素,则得到的新指派问题与原指派问题有相同的最优解。
定义1:
在系数矩阵C中,有一组处在不同行不同列的零元素,称为独立零元素组,此时其中每个零元素称为独立零元素。
例:
已知
则
是一个独立零元素组,
也是一个独立零元素组。
再将n×n个决策变量xij也排成一个n×n矩阵
,称为决策变量矩阵,即
根据以上分析,对C中出现独立零元素的位置,再X中令xij=1,其余取0值,就是指派问题的一个最优解,如上例
和
都是最优解。
但在有的问题中发现效率矩阵中独立零元素得个数不到n个,这样就无法求到最优指派方案,需要作进一步的分析,首先给出下述定理。
定理2:
系数矩阵C中独立零元素的最多个数等于能覆盖所有零元素的最小直线数。
例已知系数矩阵C1,C2,C3如下
分别用最少的直线去覆盖各自矩阵中的零元素
可见C1至少需要4根,C2至少需要4根,C3最少需要5根,因此它们的独立零元素个数分别为4,4,5。
三、匈牙利法求解步骤
例1已知指派问题的效率矩阵如下,求解指派问题
解:
第一步:
变换效率矩阵,使指派问题的系数矩阵经过变换,在各行各列中都出现0元素。
具体作法是:
先将效率矩阵的各行减去该行的最小非0元素,再从所得系数矩阵中减去该列的最小非0元素。
这样得到的新矩阵中,每行每列都必然出现零元素。
第二步:
用圈0法求出矩阵C1中的独立零元素。
经第一步变换后,系数矩阵中每行每列都已有了独立零元素;但需要找出n个独立的0元素。
若能找出,就以这些独立0元素对应的决策变量矩阵中的元素为1,其余为0,就得到了最优解。
当n较小时,可用观察法、试探法去找出n个独立0元素;若n较大时,就必须按照一定的步骤去找,常用的步骤为:
(1)从只有一个0元素的行(或列)开始,给这个0元素加圈,记作◎。
这表示对这行所代表的人,只有一种任务可指派,然后划去◎所在列(行)的其他元素,记作ф,这表示这列所代表的任务已指派完,不必再考虑别人了。
(2)给只有一个0元素列(行的)0元素加圈,记作◎。
然后划去◎所在行(列)的其他元素,记作ф。
(3)反复进行
(1),
(2)两步,直到每一列都没有未被标记的0元素或至少有两个未被标记的0元素时止。
这时可能出现3种情形:
(1)每一行均有圈零出现,圈0的个数m=n。
(2)存在未标记过的0元素,但它们所在的行和列中,未标记过的0元素均至少有两个。
(3)不存在未被标记过的0元素,但圈0的个数m<n。
第三步:
进行试指派
若情况
(1)出现,则可进行指派:
令圈0位置的决策变量取值为1,其它决策变量的取值均为0,得到一个最优指派方案,停止计算。
本例中得到C2后,出现了情况
(1),可令x14=x22=x31=x43=1,其余xij=0。
即为最佳指派方案。
若情况
(2)出现,则再对每行,每列中有两个未被标记过的0元素任选一个,加上标记,即圈上该0元素。
然后给同行、同列的其他未被标记的0元素加标记“×”。
然后再进行行、列检验,可能出现
(1)或(3)。
若出现(3),则要转入下一步。
第四步:
作最少直线覆盖当前所有的0元素(以例题说明)
例2某5×5指派问题效率矩阵如下,求解该指派问题。
解:
对C进行行、列变换,减去各行各列最小元素
用圈0法对C1进行行列检验,得到
可见C2中没有未被标记过的0元素,但圈0的个数m<n,出现情况(3)。
现在独立0元素的个数少于n,不能进行指派,为了增加独立0元素的个数,需要对矩阵C2进行进一步的变换,变换步骤如下:
(1)对