第五章整数规划【模板】
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章整数规划
§1整数规划的数学模型及特点
要求一部分或全部决策变量必须取整数值得规划问题称为整数规划。
其模型为:
Max(或min)z=
s.t
若要求决策变量只能取值0或1的整数规划称为0-1型整数线性规划。
§5 指派问题
一.指派问题的标准形式及数学模型
在现实生活中,有各种性质的指派问题。
例如,有若干项工作需要分配给若干人(或部门)来完成;有若干项合同需要选择若干个投标者来承包;有若干班级需要安排在各教室上课等等。
诸如此类的问题,它们的基本要求是在满足特定的指派要求条件下,使指派方案的总体效果最佳。
由于指派问题的多样性,有必要定义指派问题的标准形式。
指派问题的标准形式(以人和事为例)是:有n个人和n件事,已知第i个人作第j件事的费用为,要求确定人和事之间的一一对应的指派方案,是完成这n件事的总费用最少。
为了建立标准指派问题的数学模型,引入个0-1变量:
这样,问题的数学模型可写成
(5.1)
s.t (5.3)
其中,(5.1)表示每件事必优且只有一个人去做,(5.2)表示每个人必做且只做一件事。
注:○1指派问题是产量()、销量()相等,且==1,i,j=1,2,…n的运输问题。
○2有时也称为第i个人完成第j件工作所需的资源数,称之为效率系数(或价值系数)。
并称矩阵
C= =(5.5)
为效率矩阵(或价值系数矩阵)。
并称决策变量排成的n×n矩阵
X== (5.6)
为决策变量矩阵。
(5.6)的特征是它有n个1,其它都是0。
这n个1位于不同行、不同列。
每一种情况为指派问题的一个可行解。
共n!个解。
其总的费用 z =C⊙X
这里的⊙表示两矩阵对应元素的积,然后相加。
问题是:把这n个1放到X的个位置的什么地方可使耗费的总资源最少?(解最优)例1已知效率矩阵
C=
则
X(1)=,X(2)=
都是指派问题的最优解
例12/P-149:某商业公司计划开办五家新商店。
为了尽早建成营业,商业公司决定由
5家建筑公司分别承建。
已知建筑公司A i(i=1,2,…5)对新商店B j(1,2,…5)的建造费用的报价(万元)为(i,j=1,2,…5),见表5-9。
商业公司应当对5家建筑公司怎样分派建筑任务,才能使总的建筑费用最少?
0-1变量
=
则问题的数学模型为
Min z=4+8+…+10+6
s.t
若看成运输问题,且如上所述,则表5-9为
当然,第一行的1应放在(1,1)位置,此位置同时是第一列的费用最小。
但一般情况下没有这么好。
需找一适合一般的方法。
二.匈牙利解法原理:
虽然指派问题是一类特殊的整数规划问题,又是特殊的0-1规划问题和特殊的运输问题,因此,它可以用多种相应的解法来求解。
但是,这些解法都没有充分利用指派问题的特殊性质,有效地减少计算量。
1955年,库恩(W.W.Kuhn)提出了匈牙利法。
定理1:设指派问题的效率矩阵为C=,若将该矩阵的某一行(或某一列)的各个元素都减去统一常数t(t可正可负),得到新的效率矩阵,则以为效率矩阵的新的指派问题与原指派问题的最优解相同。
但其最优解比原最优解之减少t.
证明:设式(5.1)~(5.4)为原指派问题。
现在C矩阵的第k行个元素东减去同一常数t,记新的指派问题的目标函数为.则有
==+=+
=+-t=-t·1=Z-t
因此有
Min =min(Z-t)=minZ-t
而新问题的约束方程同原指派问题。
因此其最优解比相同,而最优解差一个常数。
推论:若将指派问题的效率矩阵每一行即每一列分别减去各行及各列的最小元素,则得到新指派问题与原指派问题有相同的最优解。
证明:结论是显然的。
只要反复运用定理1便可得证。
当将效率矩阵的每一行都减去各行的最小元素,将所得的矩阵的每一列在减去当前列中最小元素,则最后得到新效率矩阵中必然出现一些零元素。
设=0,从第i行来看,它表示第i个人去干第j项工作效率(相对)最好。
而从第j列来看,这个0表示第j项工作以第i 人来干效率(相对)最高。
定义:在效率矩阵C中,有一组在不同行不同列的零元素,称为独立零元素组,此时每个元素称为独立零元素。
例2:已知
C=
则{=0,=0,=0,=0}是一个独立零元素组,=0,=0,=0,=0分别称为独立零元素。
{=0,=0,=0,=0}也是一个独立零元素组,而{=0,=0,=0,=0}就不是一个独立零元素组,因为=0与=0这两个零元素位于同一列中。
根据以上对效率矩阵中零元素的分析,对效率矩阵C中出现的的独立零元素组中零元素所处的位置,在决策变量矩阵中令相应的=1,其余的=0。
就可找到指派问题的一个最优解。
就上例中
X(1)=,
就是一个最优解。
同理
X(2)=
也是一个最优解。
但是在有的问题中发现效率矩阵C中独立零元素的个数不够n个,这样就无法求出最优指派方案,需作进一步的分析。
首先给出下述定理。
定理2效率矩阵C中独立零元素的最多个数等于能覆盖所有零元素的最少直线数。
我们不证它,说一下意思:
例3:已知矩阵
C1=,C2=,C3=
分别用最少直线去覆盖各自矩阵中的零元素:
C1=,C2=,C3=
可见,C1最少需要4条线,C2最少需要4条线,C3最少需要5条线,方能划掉矩阵中所有的零。
即它们独立零元素组中零元素最多分别为4,4,5。
三.匈牙利法求解步骤:
我们以例题来说明指派问题如何求解:
例4给定效率矩阵
C=
求解该指派问题。
解:ⅰ)变换效率矩阵,将各行各列都减去当前各行、各列中最小元素。
C= =
这样得到的新矩阵中,每行每列都必然出现零元素。
ⅱ)用圈0法求出新矩阵中独立零元素。
(1)进行行检验
对进行逐行检验,对每行只有一个未标记的零元素时,用○记号将该零元素圈起。
然后将被圈起的零元素所在的列的其它未标记的零元素用记号×划去。
如中第2行、第3行都只有一个未标记的零元素,用○分别将它们圈起。
然后用×划去第1列其它未被标记的零元素(第2列没有),见
=
在第i行只有一个零元素=0时,表示第i人干第j件工作效率最好。
因此优先指派第i人干第j项工作,而划去第j列其它未标记的零元素,表示第j项工作不再指派其它人去干(即使其它人干该项工作也相对有最好的效率)。
重复行检验,直到每一行都没有未被标记的零元素或至少有两个未被标记的零元素时为止。
本题中第1行此时也只有1个未被标记的零元素。
因此圈起中第1行第4列的零元素,然后用×划去第4列中未被标记的零元素。
这是第4行也只有一个未被标记的零元素,再用○圈起,见
=
(2)进行列检验
与进行行检验相似,对进行了行检验的矩阵逐列进行检验,对每列只有一个未被标记的零元素,用记号○将该元素圈起,然后技改元素所在行的其他未被标记的零元素打×。
重复上述列检验,直到每一列都没有未被标记的零元素或有两个未被标记的零元素为止。
这时可能出现以下三种情况:
○1每一行均有圈0出现,圈0的个数m恰好等于n,即m=n.
○2存在未标记的零元素,但他们所在的行和列中,为标记过的零元素均至少有两个。
○3不存在未被标记过的零元素,当圈0的个数m< n.
ⅲ) 进行试指派
若情况○1出现,则可进行试指派:令圈0为止的决策变量取值为1,其他决策变量取值均为零,得到一个最优指派方案,停止计算。
上例中得到后,出现了情况○1,可令=1, =1,=1,=1,其余=0。
即为最优指派。
若情况○2出现,则在对每行、每列的其它未被标记的零元素任选一个,加上标记○,即圈上该零元素。
然后给同行、同列的其它未被标记的零元素加标记×。
然后再进行行、列检验,可能出现情况○1或○3,出现情况○1则由上述得到一最优指派,停止计算。
若情况○3出现,则要转入下一步。
ⅳ):做最少直线覆盖当前所有零元素。
我们还以例12来说明过程:
已知例12指派问题的系数矩阵为:
先对各行元素分别减去本行的最小元素,然后对各列也如此,即
C =
此时,中各行各列都已出现零元素。
为了确定中的独立零元素,对加圈,即
=
由于只有4个独立零元素,少于系数矩阵阶数n=5,不能进行指派,为了增加独立零元素的个数,需要对矩阵作进一步的变换,变换步骤如下:
(1)对中所有不含圈0元素的行打√,如第3行。
(2)对打√的行中,所有零元素所在的列打√,如第1列。
(3)对所有打√列中圈0元素所在行打√,如第2行。
(4)重复上述(2),(3)步,直到不能进一步打√为止。
(5)对未打√的每一行划一直线,如第1,3,5行。
对已打√的每一列划一纵线,如第1列,既得到覆盖当前0元素的最少直线数。
见。
= =
Ⅴ):对矩阵作进一步变换,以增加0元素。
在未被直线覆盖过的元素中找最小元素,将打√行的各元素减去这个最小元素,将打√裂的各元素加上这个最小元素(以避免打√行中出现负元素),这样就增加了零元素的个数。
如中未被直线覆盖过的元素中,最小元素为==1,对打√的第2,3行各元素都减去2,对打√的第1列各元素都加上1,得到矩阵。
=
Ⅵ):回到步骤Ⅱ),对已增加了零元素的矩阵,再用圈0法找出独立零元素组。
=
中已有5个独立零元素,故可确定指派问题的最优方案。
本例的最优解为
X*=
也就是说,最优指派方案是:让A1B3
A2 B2
A3 B1
A4 B4
A5 B5
这样按排能使总的建造费最少,为z=7+9+6+6+6=34(万元)
四.一般的指派问题
在实际应用中,常会遇到非标准形式,解决的思路是:先化成标准形式,然后再用匈牙利法求解。
1.最大化的指派问题
其一般形式为
s.t
处理办法:设最大化的指派问题的系数矩阵为C=,m=max{},令
B==,则以B为系数矩阵的最小化指派问题和以C为系数矩阵的原最大化指派问题有相同的最优解。
例5:某工厂有4名工人A1,A2,A3,A4,分别操作4台车床B1,B2,B3,B4。
每小时单产量
解:C==,m=max{10,9,8,7,…5,6}=10,
B=== =
=
中的◎数=n=4, 所以
X=(5。
7)
即为最优解。
从而产值最大的分配方案也为(5.7),最大产值为
Z=10+6+1+5=22
2.人数和事数不等的指派问题。
○1若人数<事数,添一些虚拟的“人”,此时这些虚拟的“人”做各件事的费用系数取为0,理解为这些费用实际上不会发生。
○2若人数>事数,添一些虚拟的“事”,此时这些虚拟的“事”被各个人做的费用系数同样也取为0。
解:添加虚拟人A5,构造标准耗时阵:
C= =
所圈0数=4< 5=n,下找最少覆盖0的直线。
=
从未划去的元素中找最小者:{4,3,7,5,1,4,7,9}=1。
未划去的行减去此最小者1,划去的列加上次最小者1,得。
=
◎个数=n,从而的一最优指派:
=
从而最少耗时为 z=2+7+6+7=22
3.一个人可做几件事的指派问题。
若某人可作几件事,则可将该人化作相同的几个“人”来接受指派。
这几个“人”做同一件事的费用系数当然一样。
例6:对例12的指派问题,为了保证工程质量,经研究决定,舍弃建筑公司A4和A5,让技术力量较强的建筑公司A1、A2、A3来承建。
根据实际情况,可以允许每家建筑公司承建一家
或两家商店。
求使总费用最少的指派方案。
解:反映投标费用的系数矩阵为:
由于每家建筑公司最多可承建两家新商店,因此,把每家建筑公司化作相同的两家建筑公司(和,i=1,2,3)。
这样,系数矩阵变为:
上面的系数矩阵有6行5列,为了使“人”和“事”的数目相同,引入一件虚拟事,使之成为标准的指派问题,其系数矩阵为:
C=
C =
的◎数=5< 6=n,下找0元素的最少直线覆盖。
= =
从而得一最优指派:
=
总费用为z=7+4+9+7+8=35(万元)
4.某事不能由某人去做的指派问题
某事不能由某人去做,可将此人做此时的费用取作足够大的M。
例7:分配甲、乙、丙、丁四个人去完成A、B、C、D、E五项任务,每人完成各项任务的时间如下表。
由于任务重,人数少,考虑:
a). 任务E必须完成,其它4项任务可选3项完成。
但甲不能做A项工作。
b) 其中有一人完成两项,其他人每人完成一项。
解:这是一人数与工作不等的指派问题,若用匈牙利法求解,需作一下处理。
a) 由于任务数大于人数,所以需要有一个虚拟的人,设为戊。
因为工作E必须完成,故设戊完成E的时间为M(M为非常大的数),即戊不能做工作E,其余的假想时间为0,建立的效率矩阵表如下:
C=
由于◎数=4< 5=阶数,下找最少覆盖0的直线
=
m={19,18.6.13,1,19,13,22}=1,第2、4行减去1,第4列加上1得:
=从而得最优指派:
最少的耗时数z=29+20+32+24=105.
b) 思路:方案1:甲,○甲,乙,丙,丁。
方案2:甲,乙,○乙,丙,丁。
方案3:甲,乙,丙,○丙,丁。
方案4:甲,乙,丙,丁,○丁。
方案5:甲,○甲,乙,○乙,丙,○丙,丁,○丁。
此为人;而工作:A,B,C,D,E,虚拟工作:F,G,H。
这些思路都比较烦,请看下面的思路:
设有虚拟人戊,它集五人优势为一身。
即戊的费用是每人的最低。
戊所做的工作即为此项工作的费用最低者的工作。
以下用匈牙利法求解:
C=
=
对加圈确定独立0元素,◎个数=3<5=n,作0元素的最少直线覆盖:
=
在未划去的数中选最小者1,未划取得行都减去1,划去的列都加上1得:
=再圈0且试指派:◎个数=3< 5,再作0元素的最少直线覆盖。
从未划取的元素中找最小者4,未划取得行都减去这个4,划去的列都加上这个4,得:
=再圈0试指派,结果为:
其中戊是虚拟人,不能真作,它作C工作是借乙
(此列最小时数26是C所创业绩)优势,应由C来作。
即C做两件工作:D,C。