整数规划5文档格式.docx
《整数规划5文档格式.docx》由会员分享,可在线阅读,更多相关《整数规划5文档格式.docx(32页珍藏版)》请在冰点文库上搜索。
x1=4.8,x2=0,maxz=96
但x1是托运甲种货物的箱数,现在它不是整数,所以不合条件⑤的要求.
是不是可以把所得的非整数的最优解经过“化整”就可得到合于条件⑤的整数最优解呢?
如将(x1=4.8,x2=0)凑整为(x1=5,x2=0),这样就破坏了条件②(关于体积的限制),因而它不是可行解;
如将(x1=4.8,x2=0)舍去尾数0.8,变为(x1=4,x2=0),这当然满足各约束条件,因而是可行解,但不是最优解,因为
当x1=4,x2=0时,z=80,
但当x1=4,x2=1(这也是可行解)时,z=90.
本例还可以用图解法来说明.见图5—1非整数的最优解在C(4.8,0)点达到.图中画(+)号的点表示可行的整数解.凑整的(5,0)点不在可行域内,而C点又不合于条件⑤.为了满足题中要求,表示目标函数的z的等值线必须向原点平行移动,直到第一次遇到带“+”号B点(x1=4,x2=1)为止.这样,z的等值线就由z=96变到z=90,它们的差值
Δz=96–90=6
表示利润的降低,这是由于变量的不可分性(装箱)所引起的.
由上例看出,将其相应的线性规划的最优解“化整”来解原整数规划,虽是最容易想到的,但常常得不到整数规划的最优解,甚至根本不是可行解。
因此有必要对整数规划的解法进行专门研究.
2分枝定界解法
在求解整数规划时,如果可行域是有界的,首先容易想到的方法就是穷举变量的所有可行的整数组合,就象在图5—1中画出所有“+”号的点那样,然后比较它们的目标函数值以定出最优解.对于小型的问题,变量数很少,可行的整数组合数也是很小时,这个方法是可行的,也是有效的.在例1中,变量只有x1和x2,由条件②,x1所能取的整数值为0、1、2、3、4共5个;
由条件③,x2所能取的整数值为0、1、2共3个,它的组合(不都是可行的)数是3×
5=15个,穷举法还是勉强可用的,对于大型的问题,可行的整数组合数是很大的.例如在本章§
5的指派问题(这也是整数规划)中,将n项任务指派n个人去完成,不同的指派方案共有n!
种,当n=10,这个数就超过三百万;
当n=20,这个数就超过2×
1018,如果一一计算,就是用每秒百万次的计算机,也要几万年的功夫。
很明显,解这样的题,穷举法是不可取的.所以我们的方法一般应是仅检查可行的整数组合的一部分,就能定出最优的整数解.分枝定界解法(BranchandBoundMethod)就是其中的一个.
分枝定界法可用于解纯整数或混合的整数规划问题.在本世纪六十年代初由LandDoig和Dakin等人提出的.由于这方法灵活且便于用计算机求解,所以现在它已是解整数规划的重要方法.设有最大化的整数规划问题A,与它相应的线性规划为问题B。
从解问题B开始,若其最优解不符合A的整数条件,那么B的最优目标函数必是A的最优目标函数z*的上界,记作
;
而A的任意可行解的目标函数值将是z*的一个下界z.分枝定界法就是将A的可行域分成子区域(称为分枝)的方法.逐步减小
和增大z,最终求到z*.现用下例来说明:
2.1求解实例
例2求解A
maxz=40x1+90x2①
9x1+7x2≤56②
7x1+20x2≤70③(5.2)
解先不考虑条件⑤,即解相应的线性规划B①一④,得最优解
x1=4.81,x2=1.82,z0=356.
(见图5—2)。
可见它不符合整数条件⑤.这时z0是问题A的最优目标函数值z*的上界,记作
=z0.而x1=0,x2=0时,显然是问题A的一个整数可行解,这时z=0,是z*的一个下界,记作z=0,即0≤z*≤356.
图5—2
分枝定界法的解法,首先注意其中一个非整数变量的解,如x1在问题B的解中x1=4.81.于是对原问题增加两个约束条件
x1≤4,x1≥5
可将原问题分解为两个子问题B1和B2(即两枝),给每枝增加一个约束条件,如图5—3所示,这并不影响问题A的可行域,不考虑整数条件解问题B1和B2,称此为第一次迭代.
得到最优解为:
问题B1
问题B2
z1=349
x1=4.00
x2=2.10
z2=341
x1=5.00
x2=1.57
图5—3
显然没有得到全部变量是整数的解.因z1>
z2,故将
改为349,那么必存在最优整数解,得到z*,并且
0≤z*≤349
继续对问题B1和B2,进行分解,因z1>
z2,故先分解B1为两枝.增加条件x2≤2者,称为问题B3;
增加条件x2≥3者称为问题B4,在图5—3中再舍去x2>
2与x2<
3之间的可行域,再进行第二次迭代,解题过程的结果都列在图5—4中.可见问题B3的解已都是整数,它的目标函数值z3=340,可取为z,而它大于z4=327.所以再分解B4已无必要.而问题B2的z3=341,所以z*可能在340≤z*≤341之间有整数解.于是对B2分解,得问题B5,既非整数解,且z5=308<
z3,问题B6为无可行解,于是可以断定
z3=z=z*=340
问题B6的解x1=4.00,x2=2.00为最优整数解.
2.2分枝定界解法步骤
从以上解题过程可得用分枝定界法求解整数规划(最大化)问题的步骤为:
1确定初始上界和下界
将要求解的整数规划问题称为问题A,将与它相应的线性规划问题称为问题B.
(1)解问题B,可能得到以下情况之一:
(a)问题B没有可行解,这时A也没有可行解,则停止.
(b)问题B有最优解,并符合问题A的整数条件,B的最优解即为A的最优解,则停止.
(c)问题B有最优解,但不符合问题A的整数条件,记它的目标函数值为
。
(2)用观察法找问题A的一个整数可行解,一般可取xj=0,j=1,…,n,试探,求得其目标函数值,并记作z.以z*表示问题A的最优目标函数值;
这时有
z≤z*≤
进行迭代.
2第一步分枝与定界
分枝
在问题B的最优解中任选一个不符合整数条件的变量xj,其值为bj,以[bj]表示小于bj的最大整数.构造两个约束条件:
xj≤[bj]①
和
xj≥[bj]+1②
将这两个约束条件,分别加入问题B,可得两个后继规划问题B1和B2.不考虑整数条件求解这两个后继问题.
定界
以每个后继问题为一分枝标明求解的结果,与其它问题的解的结果中,找出最优目标函数值最大者作为新的上界
.
从已符合整数条件的各分支中,找出目标函数值为最大者作为新的下界z,若无作用,z=0.
3第二步比较与剪枝
各分枝的最优目标函数中若有小于z者,则剪掉这枝(用打X表示),即以后不再考虑了.若大于z,且不符合整数条件,则重复第一步骤.一直到最后得到z*=z为止.得最优整数解xj*,j=1,…,n.
用分枝定界法可解纯整数规划问题和混合整数规划问题.它比穷举法优越.因为它仅在一部分可行解的整数解中寻求最优解,计算量比穷举法小.若变量数目很大,其计算工作量也是相当可观的.
3割平面解法
这个方法的基础仍然是用解线性规划的方法去解整数规划问题,首先不考虑变量xi是整数这一条件,但增加线性约束条件(用几何术语,称为割平面)使得由原可行域中切割掉一部分,这部分只包含非整数解,但没有切割掉任何整数可行解.这个方法就是指出怎样找到适当的割平面(不见得一次就找到),使切割后最终得到这样的可行域,它的一个有整数坐标的极点恰好是问题的最优解.这个方法是R.E.Gomory提出来的,所以又称为Gomory的割平面法.我们只讨论纯整数规划的情形.现举例说明.
3.1求解实例
例3求解
maxz=x1+x2①
–x1+x2≤1②
3x1+x2≤4③(5.3)
如不考虑条件⑤,容易求得相应的线性规划的最优解:
x1=3/4,x2=7/4,maxz=10/4
图5—5
图5—6
就是图5—5中域R的极点A,它不合于整数条件.我们想,如能找到象CD那样的直线去切割域R(图5—6),去掉三角形域ACD,那么具有整数坐标的C点(1,1)就是域R,的一个极点,如在域R'
,上求解①一④,而得到的最优解又恰巧在C点就得到原问题的整数解,所以解法的关键就是怎样构造一个这样的“割平面”CD,尽管它可能不是唯一的,也可能不是一步能求到的.下面仍就本例说明;
在原问题的前两个不等式中增加非负松弛变量x3,x4,使两式变成等式约束:
–x1+x2+x3=1⑥
3x1+x2+x4=4⑦(5.3)
不考虑条件⑤,用单纯型表解题,见表5—2.
从表5—2的最终计算表中,得到非整数的最优解:
x1=3/4,x2=7/4,x3=x4=0,maxz=5/2
由最终计算表中得到变量间的关系式:
x1–1/4x3+1/4x4=3/4
x2+3/4x3+1/4x4=7/4
将系数和常数项都分解成整数和非负真分数之和,移项以上两式变为
x1–x3=3/4–(3/4x3+1/4x4)
x2–1=3/4–(3/4x3+1/4x4)
现考虑整数条件⑤,要求x1,x2都是非负整数,于是由条件⑥、⑦可知x3,x4也都是非负整数[注3],这一点对以下推导是必要的,如不都是整数,则应在引入x3,x4之前乘以适当常数,使之都是整数].在上式中(其实只考虑一式即可)从等式左边看是整数;
在等式右边的(·
)内是正数(x3,x4不全为0的非负整数);
所以等式右边必是负数.就是说,整数条件⑤可由下式所代替:
3/4–(3/4x3+1/4x4)≤0
即
–3x3–x4≤–3⑧
这就得到一个切割方程,将它作为增加约束条件,再解例3。
引入松弛变量x5,得到等式
–3x3–x4+x5=–3⑧
将这新的约束方程加到表5—2的最终计算表,得表5—3.
cj->
1
CB
XB
b
x1
x2
x3
x4
x5
1.75
0.75
0.25
-0.25
-3
-1
cj-zj
-2.5
-0.5
从表5—3的b列中可看到,这时得到的是非可行解,于是需要用对偶单纯形法继续进行计算.选择x5为换出变量,计算,
θ=min(-0.5/-3,-0.5/-1)=-0.5/-3
将x3做为换入变量,再按,原单纯形法进行迭代,得表5—4:
表5—3
由于非基变量检验数为非正且x1,x2的值已都是整数,解题已完成。
注意:
新得到的约束条件⑧
–3x3–x4≤–3
如用x1、x2表示,由⑥、⑦式得
–3(1+x1–x2)–(4–3x1–x2)≤–3
即:
x2≤1
这是(x1、x2)平面上平行于x1轴的在直线x2=1下的区域,见图5—7.但从解题过程来看,这一步是不必要的.
3.2求一个切割方程的步骤
现把求一个切割方程的步骤归纳为:
1.令xi是相应线性规划最优解中为分数值的一个基变量,由单纯型表的最终表得到
xi+∑aikxk=bi(5.4)
其中i∈Q(Q指构成基变量号码的集合)
k∈K(K指构成非基变量号码的集合)
2.将bi和aik都分解成整数部分N与非负真分数f之和,即
bi=Ni+fi,其中0<
fi<
aik=Nik+fik,其中0≤fik<
1(5.5)
而N表示不超过b的最大整数.例如:
若b=2.35,则N=2,f=0.35;
若b=–0.45,则N=–1,f=0.55.
代入(5.4)式得
xi+∑Nikxk–Ni=fi–∑fikxk(5.6)
3.现在提出变量(包括松弛变量,参阅例3的注)为整数的条件(当然还有非负的条件),这时,上式由左边看必须是整数,但由右边看,因为0<
fik<
l,所以不能为正,即
fi–∑fikxk≤0(5.7)
这就是一个切割方程.
由(5.4),(5.6),(5.7)式可知:
(1)切割方程(5.7)真正进行了切割,至少把非整数最优解这一点割掉了.
(2)没有割掉整数解,这是因为相应的线性规划的任意整数可行解都满足(5.7)的缘故。
Gomory的切割法自1958年被提出后,即引起人们广泛地注意.但至今完全用它解题的仍是少数,原因就是经常遇到收敛很慢的情形,但若和其它方法(如分枝定界法)配合使用,也是有效的.
40–1型整数规划
0–1型整数规划是整数规划中的特殊情形,它的变量xi仅取值0或1。
这时xi称为0–1变量,或称二进制变量[注]。
xi仅取值0或1这个条件可由下述约束条件:
xi≤1
xi≥0,整数
所代替,是和一般整数规划的约束条件形式一致的.在实际问题中,如果引入0–1变量,
就可以把有各种情况需要分别讨论的线性规划问题统一在一个问题中讨论了,在本节我们先介绍引入0–1变量的实际问题,再研究解法。
4.1引入0—1变量的实际问题
1.相互排斥的计划
投资场所的选定
例4某公司拟在市东、西、南三区建立门市部.拟议中有了个位置(点)Ai(i=1,2,…,7)可供选择.规定
在东区,由A1,A2,A3三个点中至多选两个;
在西区,由A4,A5两个点中至少选一个;
在南区,由A6,A7两个点中至少选一个.
如选用Ai点,设备投资估计为bi元,每年可获利润估计为ci元,但投资总额不能超过B元.问应选择哪几个点可使年利润为最大?
解题时先引入0—1变量xi(i=1,2,…,7)
令
xi=1,当Ai点被选用
xi=0,当Ai点不被选用,(i=1,2,…,7)
于是问题可列成:
maxz=c1x1+…+c7x7
b1x1+…+b7x7≤B
x1+x2+x3≤2
x4+x5≥1
x6+x7≥1
xi=0或1,i=1,2,…,7
2.相互排斥的约束条件
在本章开始的例1中,关于运货的体积限制为
5x1+4x2≤24
今设运货有车运和船运两种方式,上面的条件系用车运时的限制条件,如用船运时关于体积的限制条件为
7x1+3x2≤45
这两条件是互相排斥的。
为了统一在一个问题中,引入0–1变量y,令
y=0,当采取车运方式
y=1,当采取船运方式
于是(5.9)和(5.10)可由下述的条件(5.11)和(5.12)来代替:
5x1+4x2≤24+yM(5.11)
7x1+3x2≤45+(1–y)M(5.12)
其中M是充分大的数.读者可以验证,当y=0时,(5.11)就是(5.9),而(5.12)自然成立,因而是多余的.当y=1时(5.12)就是(5.10),而(5.11)是多余的.引入的变量y不必出现在目标函数内,即认为在目标函数式内y的系数为0.
如果有m个互相排斥的约束条件(≤型):
a1x1+a2x2+…+ainxn≤bi,i=1,2,…,m
为了保证这m个约束条件只有一个起作用,我们引入m个0–1变量yi(i=1,2,…,m)和一个充分大的常数M,而下面这一组m+1个约束条件
a1x1+a2x2+…+ainxn≤bi+yiM,i=1,2,…,m(5.13)
y1+y2+…+ym=m–1(5.14)
就合于上述的要求.这是因为,由于(5.14)m个yi中只有一个能取0值,设yi*=0,代入(5.13),就只有i=i*的约束条件起作用,而别的式子都是多余的.
3.关于固定费用的问题(FixedCostProblem)
在讨论线性规划时,有些问题是要求使成本为最小.那时总设固定成本为常数,并在线性规划的模型中不必明显列出.但有些固定费用(固定成本)的问题不能用一般线性规划来描述,但可改变为混合整数规划来解决,见下例.
例5某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成本就降低;
反之,如选定的生产方式投资低,将来分配到每件产品的变动成本可能增加,所以必须全面考虑.今设有三种方式可供选择,令
xj表示采用第j种方式时的产量;
cj表示采用第j种方式时每件产品的变动成本;
kj表示采用第j种方式时的固定成本.
为了说明成本的特点,暂不考虑其它约束条件.采用各种生产方式的总成本分别为
Pj=kj+cjxj,当xj>
Pj=0,当xj=0,j=1,2,3
在构成目标函数时,为了统一在一个问题中讨论,现引入0–1变量yj,令
yj=1,当采用第j种生产方式,即xj>
0时
yj=0,当不采用第j种生产方式,即xj=0时
于是目标函数
minz=(k1y1+c1x1)+(k2y2+c2x2)+(k3y3+c3x3)
(5.15)式这个规定可由下述3个线性约束条件:
xj≤yjM,j=1,2,3(5.16)
其中M是个充分大的常数.(5.16)式说明,当xj>
0时yj必须为1,当xj=0时只有yj为0时才有意义,所以(5.16)式完全可以代替(5.15)式.
4.20–1型整数规划的解法
解0–1型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法,即检查变量取值为0或1的每一种组合,比较目标函数值以求得最优解,这就需要检查变量取值的2n个组合.对于变量个数n较大(例如n>
10),这几乎是不可能的.因此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解.这样的方法称为隐枚举法(implicitEnumeration),分枝定界法也是一种隐枚举法,当然,对有些问题隐枚举法并不适用,所以有时穷举法还是必要的.
下面举例说明一种解0–1型整数规划的隐枚举法.
1例6
maxz=3x1–2x2+5x3
x1+2x2–x3≤2
x1+4x2+x3≤4
x1+x2≤3
4x2+x3≤6
x1,x2,x3=0或1
1)试探
解题时,先通过试探的方法找一个可行解,容易看出(x1,x2,x3)=(1,0,0)就是合于①一④条件的,算出相应的目标函数值z=3.
2)增加约束条件
我们求最优解,对于极大化问题,当然希望z≥3,于是增加一个约束条件:
3x1–2x2+5x3≥3◎
后加的条件称为过滤的条件(FilteringConstraint).这样,原问题的线性约束条件就变成5个.用全部枚举的方法,3个变量共有23=8个解,原来4个约束条件,共需32次运算.现在增加了过滤条件⑥,如按下述方法进行,就可减少运算次数.
3)枚举
将5个约束条件按◎—④顺序排好(表5—5),对每个解,依次代入约束条件左侧,求出数值,看是否适合不等式条件,如某一条件不适合,同行以下各条件就不必再检查,因而就减少了运算次数.本例计算过程如表5—5,实际只作24次运算.
表5—5
条件
点X
◎
(3,–2,5)X
≥3
①
(1,2,–1)X
≤2
②
(1,4,1)X
≤4
③
(1,1,0)X
≤3
④
(0,4,1)X
≤6
满足
否
z
值
(0,0,0)T
×
(0,0,1)T
√
(0,1,0)T
-2
(0,1,1)T
3
(1,0,0)T
(1,0,1)T
8
(1,1,0)T
(1,1,1)T
6
于是求得最优解(x1,x2,x3)=(1,0,1),maxz=8
2隐枚举法一般步骤
通过试探的方法找一个可行解,算出相应的目标函数值z0.
2)增加过滤条件
增加一个约束条件:
z=∑cixi≥z0◎
3)目标函数重排
一般常重新排列xi的顺序使目标函数中xi的系数是递增(不减)的。
变量(xr1,xr2,…,xrn)也按下述顺序取值:
(0,…,0,0),(0,…,0,1),(0,…,0,1,0),(0,…,0,1,1)…。
4)枚举及过滤条件的改进
在计算过程中,若遇到z值已超过条件◎右边的值z0,应改变条件◎,使右边为迄今为止最大者,
∑cixi≥zmax
然后继续作.
例如,当检查点(0,0,1)时因z=5(>
3),所以应将条件◎换成,
3x1–2x2+5x3≥5◎
这种对过滤条件的改进,更可以减少计算量.
3例6的改进求解
(x1,x2,x3)=(1,0,0)就是合于①一④条件的,算出相应的目标函数值z=3.
3)目标函数改写
z=3x1–2x2+5x3=–2x2+3x1+5x3
因为–2,3,5是递增的。
变量(x2,x1,x3)也按下述顺序取值:
(0,0,0),(0,0,1),(0,1,0),(0,1,1)……,这样,最优解容易比较