第五章整数规划
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章 整数规划
主要内容:1、分枝定界法; 2、割平面法; 3、0-1型整数规划; 4、指派问题。
重点与难点:分枝定界法和割平面法的原理、求解方法,0-1型规划模型的建立及求解步骤,用匈牙利法求解指派问题的方法和技巧。
要 求:理解本章内容,熟练掌握求解整数规划的方法和步骤,能够运用这些方法解决实际问题。
§1 问题的提出
要求变量取为整数的线性规划问题,称为整数规则问题(简称IP )。
如果所有的变量都要求为(非负)整数,称之为纯整数规划或全整数规划;如果仅一部分变量要求为整数,称为混合整数规划。
例1 求解下列整数规划问题
211020m ax x x z +=
⎪⎪⎩⎪⎪
⎨
⎧≥≤+≤+为整数2
1212121,0,13522445x x x x x x x x 如果不考虑整数约束,就是一个线性规划问题(称这样的问题为原问题相应的线性规划问题),很容易求得最优解为:
96m ax ,0,8.421===z x x 。
用图解法将结果表示于图中画“+”号的点都是可行的整数解,为满足要求,将等值线向原点
方向移动,当第一次遇到“+”号点(1,421==x x )时得最优解为1,421==x x ,
最优值为z=90。
由上例可看出,用枚举法是容易想到的,但常常得到最优解比较困难,尤其是遇到变量的取值更多时,就更困难了。
下面介绍几种常用解法。
§2 分枝定界法
分枝定界法可用于解纯整数或混合的整数规划问题。
基本思路:设有最大化的整数规划问题A ,与之相应的线性规划问题B ,从解B 开始,若其最优解不符合A 的整数条件,那么B 的最优值必是
A 的最优值
*
z
的上界,记为
z ;而A 的任意可行解的目标函数值是*
z
的一个下界
z ,采
取将B 的可行域分枝的方法,逐步减少z 和增大z ,最终求得*z 。
现举例说明: 例2 求解A
219040m ax x x z +=
⎪⎪⎩⎪⎪⎨
⎧≥≤+≤+为整数
21212121,0
,7020756
79x x x x x x x x 解:先不考虑条件⑤,即解相应的线性规划B (①--④),得最优解
=1x 4.81, =2x 1.82,
①
② ③ ④ ⑤
=0z 356(见下图)。
显然,它不符合整数条件⑤。
这时,0z 为问题A 的最优值*z 的上界,记0z z =,而=1x 0, =2x 0显然是问题A 的一个整数可行解,这时z=0,是*z 的一个下界,记0=z ,即2560*≤≤z 。
分枝定界法的解法,首先注意其中一个非整数变量的解,如1x ,在B 中1x =4.81,于是对原问题增
加两个约束条件:5411≥≤x x 、,可将原问题分解为两个子问题21B B 、(即两枝),给每枝增加一
个约束条件,如图。
8不考虑整数条件解问题21B B 、得到最优解:
显然未得到全部变量是整数解,
21z z > ,∴将z
改为349(z =349),
3490*≤≤z 。
继续对问题21B B 、
进行分解,21z z > ,∴先分解1B 为两枝,增加条件22≤x 的问题称为
3B ;增加条件32≥x 的问题称为4B 。
在上图中再去掉22>x 与32<x 之
间的可行域,再求解问题43
B B 、,其结果列在下图中,可见问题3B 的解已都是整数,它的目
标函数值
3403=z ,取z
=340,而它大于327
4
=z ,所以再分解4B 已无必要,而问题2
B 的3412=z ,所以*
z
可能在341340*≤≤
z 之间有整数解,于是再对2B 分解,得问
题
65,B B ,5B 为非整数解,且35308z z <=,问题6B 为无可行解,于是可断定:
340*3===z z z ,2,421==x x 为最优整数解。
356=z
349,0==z z
由以上解题过程可得到分枝定界法的求解步骤:
1. 给定原问题的初始上界z
解与原问题A 相应的线性规划问题B ,可能出现以下情况之一:
①B 没有可行解,这时A 也没有可行解,则停止;
②B 有最优解,并符合A 的整数条件,B 的最优解即为A 的最优解,则停止; ③B 有最优解,但不符合A 的整数条件,记它的目标函数值0z 为z 。
2. 给定原问题的初始下界z
用观察法找出问题A 的一整数可行解,一般取n j x j ,,2,1,0 ==。
求得其目标函数值,记作z 。
这样,就有z z z ≤≤*。
3. 分枝
在B 的最优解中任选一个不符合整数条件的变量j x ,其值为j b ,以[j b ]表示小于j b 的最大整数,构造两个约束条件:
][j j b x ≤和1][+≥j j b x
并将其分别加入问题B ,求两个后继规划问题21B B 、
,不考虑整数条件,解这两个后继问题。
4. 定界(修改上、下界)
以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出最优目标函数值最大者作为新的上界z ,从已符合整数条件的各分支中,找出目标函数值的最大者作为新的下界z 。
5. 比较与剪枝
各分枝的最优目标函数值中若有小于z 者,则剪掉这枝,以后不再考虑了,若大于z ,且不符
②
③ ④ ⑤
合整数条件,则继续分枝直到得到z z =*为止,求得最优整数解),,2,1(*n j x j =。
§3 割平面法
这个方法的基础仍是用解线性规划的方法去解整数规划问题,首先不考虑变量j x 是整数这个条件,但增加线性约束条件(用几何术语,称为割平面)使得由原可行域中切割掉一部分,这部分只包含非整数解,但没有切割掉任何整数可行解。
这个方法就是指出怎样找到适当的割平面(不见得一次就找到),使切割后最终得到这样的可行域,它的一个有整数坐标的极点恰好是问题的最优解。
例3 求解
21m ax x x z += ① ⎪⎪⎩⎪⎪⎨
⎧≥≤+≤+-整数
21212
121,0,431
x x x x x x x x 如不考虑条件⑤,求得相应的线性规划的最优解:
就是图中可行域R 的极点A ,不符合整数条件。
432100m ax x x x x z +++=
⎪⎪⎩
⎪⎪⎨⎧==≥=++=++-4,,2,14,,2,104
31421
321 j x j x x x x x x x j j
为整数 不考虑整数条件,用单纯形法求解相应线性规划的最优解。
4
10max ,47,4321=
==z x x
2
5max ,47,4321===
∴z x x 由最终表中得到变量间的关系式:
4741434
3
4141432431=
++=+-
x x x x x x
将系数和常数项都分解为整数和非负真分数之和,并移项变为
⎪⎭
⎫ ⎝⎛+-=
-⎪⎭
⎫ ⎝⎛+-=-43243314143431414343x x x x x x x
现考虑整数条件,21,x x 为非负整数,那么43,x x 也是非负整数。
对上式,从等式左边看是整数,等式右边的()是正数,所以等式右边定一为负数,即041434343≤⎪⎭
⎫
⎝⎛+-x x 。
整理得:3343-≤--x x ------切割方程
将新的约束方程,引入松驰变量,得到33543-=+--x x x ,将其列入最终表
∴最优解T
X )0,0,1,1,1(*=,最优值z=2
一、割平面法的解题步骤:
1. 若i ij b a ,中有分数,先全部整数化,而后引入松驰变量,暂不考虑整数约束条件,用单纯形法求出相应线性规划的最优解。
2. 求切割方程
①令i x 是相应线性规划最优解中为分数值的一个基变量,由最终单纯形表得到
i k
k ik i b x a x =+∑ (1)
其中:Q i ∈(Q 指构成基变量下标的集合)
K k ∈(K 指构成非基变量下标的集合)
②将i b 和ik a 都分解成整数部分N 与真分数f 之和,即
i i i f N b +=,其中10<<i f (2) ik ik ik f N a +=,其中10<≤ik f
而N 表示不超过b 的最大整数,如:
若 b=2.35,则N=2 f=0.35
b=–0.45,则N=–1 f=0.55
将(2)代入(1)得
∑∑-=-+k
k ik i i k
k ik i x f f N x N x
③现在提出变量为整数的条件,上式由左边看必是整数,由右边看,因为10<<i f 所以不能为正,即
0≤-∑k
k ik i x f f -------- 割线方程
3. 把切割方程作为新的约束条件,并入单纯形最优表。
继续换算,取得最优解。
二.割平面法的性质
1. 割平面法割去了整数规划原问题相应的线性规划问题的最优解。
2. 割平面未割去整数规划原问题的任一可行解,即未割去其相应的线性规划问题的任一整数可行解。
§4 0–1规划
一、0-1变量及其应用
0-1型整数规划是整数规划的特殊情形,它的变量i x 仅取值0或1,这时i x 称为0-1变量,或称二进制变量。
0-1变量作为逻辑变量(logical variable ),常用来表示系统是否处于某个特定状态,或者决策时是否取某个特定方案。
例如
⎩⎨
⎧=时)
时(即取当决策不取方案时
当决策取方案P P P x 0
1
当问题含有多项要素,而每项要素皆有两种选择时,可用一组0-1变量来描述。
一般地,设
问题有有限项要素n E E E ,,,21 ,每项i E 有两种选择i A 和),,2,1(n i A i =,则可令
),,2,1(0
1n i A E A E x i
i i i i =⎪⎩⎪⎨
⎧=选择若选择若
那么,向量T n x x x ),,,(21 就描述了问题的特定状态或方案,即
⎪⎪
⎪⎩
⎪
⎪⎪⎨⎧=----T n n T T n n T T n n T T
n n T T n A A A A A A A A A A A A A A A A x x x ),,,,(,)0,0,,0,0(),,,,(,)0,0,,0,1(),,,,(,)0,1,,1,1(),,,,(,)1,1,,1,1(),,,(12112112112121 若选择若选择若选择若选择
1、选址问题----相互排斥的计划
例4 某公司拟在市东、西、南三区建立门市部,拟议中有7个位置A i )7,,2,1( =i 可供选择,规定
在东区,由321,,A A A 三个点中至多选两个; 在西区,由54,A A 两个点中至少选一个; 在西区,由76,A A 二个点中至少选一个。
如选用i A 点,设备投资估计为i b 元,每年可获利润估计为i C 元,但投资总额不能超过B 元,问应选择哪几个点可使利润为最大? 解:先引入0–1变量i x )7,,2,1( =i
令 ⎩⎨⎧=点未被选用当点被选用
当i i i A A x ,0,1 )7,,2,1( =i
于是问题可列成: ∑==7
1max i i i x c z
⎪⎪⎪⎪⎩
⎪
⎪⎪⎪⎨⎧=≥+≥+≤++≤∑=101
1
27
6
543217
1
或i i i i x x x x x x x x B x b 2、相互排斥的约束条件
例5. 某厂决定生产两种产品,有两种加工方法可供选用,已知设备供应情况:
问选用哪种加工方法收益最大。
解:设A 产品的日产量为1x ,B 产品的日产量为2x 若采用I ,其约束条件:124521≤+x x 若采用II ,其约束条件:
8
212232121≤+≤+x x x x
由于最终只能选用一种方法,我们引入0–1变量和一个任意大的正数M 。
令 ⎩⎨⎧=时选用,时
选用II I y 0,1
于是,上述约束条件可变为:
yM
x x yM x x M y x x +≤++≤+-+≤+821223)1(1245212121
若选用第一种方法生产,则y=1,约束条件就变成124521≤+x x ,其余的约束条件就失去了作用;若选用第二种方法生产,则y=0,第一个约束条件由于右侧多了一个M 成了多余的限制。
注意:引入的变量y 不必出现在目标函数内,即认为在目标函数中y 的系数为0。
3、关于固定费用问题(Fixed cost Problem)
例 6 某厂生产某种产品,有几种生产方式可供选择,如选定的生产方式投资高(自动化程度高的设备),由于产量大,因而分配到每件产品的变动成本就降低,反之,分配到每件产品的变动成本就可能增加,所以应全面考虑。
设有三种方式可供选择,令
j x 表示采用第j 种方式时的产量
j c 表示采用第j 种方式时每件产品的变动成本 j k 表示采用第j 种方式时的固定成本
则采用各种方式的总成本分别为
3,2,100
,=⎪⎩⎪⎨
⎧=>+=j x x x c k P j j j j j j
引入0–1变量和任意大的正数M ,令
⎪⎩⎪⎨⎧=>=0
,00
,1j j i x j x j y 种生产方式,即不采用第种生产方式,即采用第
于是目标函数 )()()(m in 333322221111x c y k x c y k x c y k z +++++=
约束条件 3,2,1,=≤j M y x i j
当0>j x 时,1=i y ;当0=j x 时,0=i y ,才有意义。
二、0–1规划的解法
解0-1规划最容易想到的方法,就是穷举法,即检查变量取值为0或1的每一种组合,比较目标函数值以求得最优解,这就需要检查变量取值的2n 个组合。
对于变量个数n 较大(如n>10)时,是不可能的。
因此,人们设计一种方法,只检查变量取值的组合的一部分,就能求到问题的最优解,这种方法称为隐举法(Implicit Enumeration ),下面举例说明这种方法。
例7 321523m ax x x x z +-=
⎪⎪⎪⎩⎪
⎪⎪
⎨⎧=≤+≤+≤++≤-+)
5(1
0,,)4(6
4)3(3)2(44)1(2232131
2131321或x x x x x x x x x x x x x
解题时,先通过试探的方法找一个可行解,容易看出)0,0,1(),,(321=x x x 就适合(1)--(5)条
件,计算出相应的目标函数值z=3。
我们求最优解,对于极大化问题,当然希望3≥z ,于是增加一个约束条件:
3523321≥+-x x x (0)
后加的条件称为过滤条件(Filtering Constraint),这样,原问题的线性约束条件就变成5个,若用全部枚举的方法,3个变量8个解,原来4个约束条件,共需32次运算;现增加了过滤条件,如按隐枚举法,就可减少运算次数。
将5个约束条件按(0)–(4)顺序排好,对每个解,依次代入约束条件左侧,求出数值,看是否适用不等式条件,如某一条件不适合,同行以下各条件就不必再检查,因而就减少了运算次数。
最优解)1,0,1(),,(321=x x x ,最优值 8max =z
注意:在计算过程中,若遇到Z 值已超过条件(0)右边的值,应改变条件(0),使右边为当前为止最大者,如当检查点(0,0,1)时,因z=5(>3),所以将条件(0)换成
5523321≥+-x x x (0)’
这样对过滤条件的改进,更可以减少计算量。
§5 指派问题
在实际工作中经常遇到这样的问题:某单位需完成n 项任务,恰好有n 个人可承担这些任务。
由于每人的专长不同,各人完成任务不同(或所费时间),效率也不同。
于是产生应指派哪个人去完成哪项任务,使完成n 项任务的总效率最高(或所需时间最少)的问题,这类问题称为指派问题或分派问题。
一、指派问题的数学模型
例8 有一份说明书,需译成英、日、德、俄四种文字。
现有甲、乙、丙、丁四人,他们将说明书翻译成不同文字所需时间(单位:小时)如下表,问应指派何人去完成何工作,使所需总时间最少?
类似有:有n 项加工任务,怎样指派到n 台机床上分别完成的问题;有n 条航线,怎样指定n 艘船去航行问题等等。
对应每个指派问题,需有类似上表的数表,称之为效率矩阵或系数矩阵,其元素
),,2,1,(0n j i c ij =>表示指派第i 个人去完成第j 项工作时的效率(或时间、成本)。
我们引入0–1变量,令
⎩⎨
⎧=项任务
人去完成第不指派第项任务
人去完成第指派第j i j i x ij ,0,1 数学模型(当问题要求极小化时):
∑∑=i
j
ij ij x c z min
()
⎪⎪⎪⎩⎪
⎪⎪⎨⎧=====∑∑30
1)2(,,2,1,1)1(,,2,1,1或ij j ij i ij x n i x n
j x
约束条件(1)说明第j 种任务只能由1人去完成;约束条件(2)说明第i 个人只能完成1项任务。
二、指派问题的解法 1. 指派问题最优解的性质:
若从系数矩阵)(ij c 的一行(列)各元素中分别减去该行(列)的最小元素,得到新矩阵)(ij b ,那么以)(ij b 为系数矩阵求得的最优解和用原系数矩阵求得的最优解相同。
根据这个性质,可使原系数矩阵变换为每行每列中均有0元素的新系数矩阵,并使这几个0元素位于不同行或不同列,则令相应的1=ij x ,其余的ij x 全为0,这样就得到了最优解,这种解法称为匈牙利法。
2. 解指派问题的步骤:
(1)使系数矩阵经变换各行各列中都出现0元素。
①每行各元素减去该行最小元素;
②每列各元素减去该列最小元素。
若某行(列)已有0元素,就不必再减了。
min
24241047501110062111307942911
8713161491514
4101413152min )(⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡→⎥⎥⎥⎥⎦⎤⎢
⎢⎢⎢
⎣⎡=ij c )()(00102350960607130II b ij =⎥⎥⎥⎥
⎦
⎤
⎢⎢⎢
⎢⎣⎡→
(2)用最少的直线划去所有0元素,当所划直线数l=n (矩阵阶数)时,就可得到最优方案。
①初始指派。
用最少的直线画去II 中的所有0元素。
⎥⎥
⎥⎥
⎦
⎤
⎢⎢⎢
⎢⎣⎡00102350960607130 (III) l =n=4,已得到最优方案。
②若得不到最优方案,需进行改进。
A 、未被划去的所有元素减去其中最小元素,以便得到新的0元素。
B 、横、竖直线交叉处的所有元素增加A 中所减的最小元素(以避免重复指派和消除等不正当指派),得到新矩阵,并以最少直线划去所有0元素。
如:
⎥⎥
⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡0408241000230400 ⎥
⎥
⎥⎥⎦
⎤
⎢
⎢⎢⎢⎣⎡0408241000230400
(3)最优方案的确定
① 0元素最少的行(列)先指派(使0元素所在格的1=ij x ) ② 所有行、列只有一个1=ij x ,其余0=ij x 。
对例8,由矩阵III 先指派1,13122==x x ,然后指派1,14314==x x 。
即派甲译俄文、乙译日文、丙译英文、丁译德文,所需总时间最少,
28min 14432231=+++==∑∑c c c c x c z i
j
ij ij (小时)
三、特殊的指派问题 1、极大化的指派问题
∑∑=i
j
ij ij x c z max
令ij ij c M b -=,M 等于ij c 中最大元素,则系数矩阵可变换为)(ij b B =
0≥ij b 符合匈牙利法的条件
∑∑∑∑-==∴i
j
ij ij i
j
ij ij x c nM x b z 'min
这样就将极大化问题化为极小化问题了。
例9 有四台机器分别完成四项任务,完成不同任务的效率见下表,问如何分派任务才能使效率最高?
解:min 372603036
3201
50461128371
41475423
5046min
)()(⎥
⎥
⎥
⎥⎦
⎤
⎢⎢⎢⎢⎣⎡→⎥
⎥
⎥⎥⎦
⎤⎢⎢⎢⎢
⎣⎡=-=ij ij c M b ⎥⎥⎥⎥⎦
⎤⎢⎢⎢⎢⎣⎡→4260
003602012046 4==n l
∴先指派113=x ,141=x ,然后指派1,13422==x x ,即最优指派为31B A →,
22B A →,43B A →,14B A →。
最大效率298579m ax 41342213=+++=+++=c c c c z
2、人数和事数不等的指派问题
若人少事多,则添上一些虚拟的“人”。
这些虚拟的“人”做各事的费用系数可取0,理解为这些费用实际上不会发生。
若人多事少,则添上一些虚拟的“事”。
这些虚拟的“事”被各人做的费用系数同样也取0 。
3、一个人可做几件事的指派问题
若某人可做几件事,则可将该人化作相同的几个“人”来接受指派。
这几个“人”做同的一件事的费用系数当然都一样。
4、某事不能由某人做的指派问题
若某事一定不能由某个人做,则可将相应的费用系数取作足够大的数M。