1、整数规划5三、整数规划第五章 整数规划1 整数规划问题的提出在前面讨论的线性规划问题中,有些最优解可能是分数或小数,但对于某些具体问题,常有要求解答必须是整数的情形(称为整数解)例如,所求解是机器的台数、完成工作的人数或装货的车数等,分数或小数的解答就不合要求为了满足整数解的要求,初看起来,似乎只要把已得到的带有分数或小数的解经过“舍入化整”就可以了但这常常是不行的,因为化整后不见得是可行解;或虽是可行解,但不一定是最优解因此,对求最优整数解的问题,有必要另行研究我们称这样的问题为整数规划(Integer Programming),简称IP,整数规划是最近二十年来发展起来的规划论中的一个分支
2、整数规划中如果所有的变数都限制为(非负)整数,就称为纯整数规划(Pure Integer Programming)或称为全整数规划 (All Integer Programming);如果仅一部分变数限制为整数,则称为混合整数计划(Mixed Integer Programming)整数规划的一种特殊情形是01规划,它的变数取值仅限于0或1本章最后讲到的指派问题就是一个01规划问题现举例说明用前述单纯形法求得的解不能保证是整数最优解例1 某厂拟用集装箱托运甲乙两种货物,每箱的体积、重量、可获利润以及托运所受限制如表51:货物体积每箱(米3)重量每箱(百斤)利润每箱(百元)甲乙54252010托
3、运限制2413问两种货物各托运多少箱,可使获得利润为最大?现在我们解这个问题,设x1,x2分别为甲、乙两种货物的托运箱数(当然都是非负整数)这是一个(纯)整数规划问题,用数学式可表示为:max z=20x1+10x2 5x1+4x224 2x1+5x213 (5.1)x1,x20 x1,x2整数 它和线性规划问题的区别仅在于最后的条件现在我们暂不考虑这一条件,即解一(以后我们称这样的问题为和原问题相应的线性规划问题),很容易求得最优解为x1=4.8,x2=0,max z=96但x1是托运甲种货物的箱数,现在它不是整数,所以不合条件的要求是不是可以把所得的非整数的最优解经过“化整”就可得到合于条
4、件的整数最优解呢?如将(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本例还可以用图解法来说明见图51非整数的最优解在C(4.8,0)点达到 图中画(+)号的点表示可行的整数解凑整的(5,0)点不在可行域内,而C点又不合于条件为了满足题中要求,表示目标函数的z的等值线必须向原点平行移动,直到第一次遇到带“+”号B点(x1=4
5、,x2=1)为止这样,z的等值线就由z=96变到z=90,它们的差值z=96 90=6表示利润的降低,这是由于变量的不可分性(装箱)所引起的由上例看出,将其相应的线性规划的最优解“化整”来解原整数规划,虽是最容易想到的,但常常得不到整数规划的最优解,甚至根本不是可行解。因此有必要对整数规划的解法进行专门研究2 分枝定界解法在求解整数规划时,如果可行域是有界的,首先容易想到的方法就是穷举变量的所有可行的整数组合,就象在图51中画出所有“+”号的点那样,然后比较它们的目标函数值以定出最优解对于小型的问题,变量数很少,可行的整数组合数也是很小时,这个方法是可行的,也是有效的在例1中,变量只有x1和x
6、2,由条件,x1所能取的整数值为0、1、2、3、4共5个;由条件,x2所能取的整数值为0、1、2共3个,它的组合(不都是可行的)数是35=15个,穷举法还是勉强可用的,对于大型的问题,可行的整数组合数是很大的例如在本章5的指派问题(这也是整数规划)中,将n项任务指派n个人去完成,不同的指派方案共有n!种,当n=10,这个数就超过三百万;当n=20,这个数就超过21018,如果一一计算,就是用每秒百万次的计算机,也要几万年的功夫。很明显,解这样的题,穷举法是不可取的所以我们的方法一般应是仅检查可行的整数组合的一部分,就能定出最优的整数解分枝定界解法(Branch and Bound Method
7、)就是其中的一个分枝定界法可用于解纯整数或混合的整数规划问题 在本世纪六十年代初由Land Doig和Dakin等人提出的由于这方法灵活且便于用计算机求解,所以现在它已是解整数规划的重要方法设有最大化的整数规划问题A,与它相应的线性规划为问题B。从解问题B开始,若其最优解不符合A的整数条件,那么B的最优目标函数必是A的最优目标函数z*的上界,记作;而A的任意可行解的目标函数值将是z*的一个下界z分枝定界法就是将A的可行域分成子区域(称为分枝)的方法逐步减小和增大z,最终求到z*现用下例来说明:2.1求解实例例2 求解Amax z=40x1+90x2 9x1+7x256 7x1+20x270 (
8、5.2)x1,x20 x1,x2整数 解 先不考虑条件,即解相应的线性规划B一,得最优解x1=4.81,x2=1.82,z0=356(见图52)。可见它不符合整数条件这时z0是问题A的最优目标函数值z*的上界,记作=z0而x1=0,x2=0时,显然是问题A的一个整数可行解,这时z=0,是z*的一个下界,记作z=0,即0z*356图52分枝定界法的解法,首先注意其中一个非整数变量的解,如x1在问题B的解中x1=4.81于是对原问题增加两个约束条件x14,x15可将原问题分解为两个子问题B1和B2(即两枝),给每枝增加一个约束条件,如图53所示,这并不影响问题A的可行域,不考虑整数条件解问题B1和
9、B2,称此为第一次迭代得到最优解为:问题B1问题B2z1=349x1=4.00x2=2.10z2=341x1=5.00x2=1.57图53显然没有得到全部变量是整数的解因z1z2,故将改为349,那么必存在最优整数解,得到z*,并且0z*349继续对问题B1和B2,进行分解,因z1z2,故先分解B1为两枝增加条件x22者,称为问题B3;增加条件x23者称为问题B4,在图53中再舍去x22与x23之间的可行域,再进行第二次迭代,解题过程的结果都列在图54中可见问题B3的解已都是整数,它的目标函数值z3=340,可取为z,而它大于z4=327所以再分解B4已无必要而问题B2的z3=341,所以z*
10、可能在340z*341之间有整数解于是对B2分解,得问题B5,既非整数解,且z5=30811000CBXBbx1x2x3x4x51x21.75010.750.2501x10.7510-0.250.2500x5-300-3-11cj - zj-2.500-0.5-0.50从表53的b列中可看到,这时得到的是非可行解,于是需要用对偶单纯形法继续进行计算选择x5为换出变量,计算,=min(-0.5/-3,-0.5/-1)= -0.5/-3将x3做为换入变量,再按,原单纯形法进行迭代,得表54:表53由于非基变量检验数为非正且x1,x2的值已都是整数,解题已完成。注意:新得到的约束条件3x3x43如用
11、x1、x2表示,由、式得3(1+x1 x2) (4 3x1x2)3即:x21这是(x1、x2)平面上平行于x1轴的在直线x2=1下的区域,见图57但从解题过程来看,这一步是不必要的3.2求一个切割方程的步骤现把求一个切割方程的步骤归纳为:1令xi是相应线性规划最优解中为分数值的一个基变量,由单纯型表的最终表得到xi+aikxk=bi (5.4)其中iQ(Q指构成基变量号码的集合)kK(K指构成非基变量号码的集合)2将bi和aik都分解成整数部分N与非负真分数f之和,即bi=Ni+fi,其中0 fi 1aik=Nik+fik,其中0fik 1 (5.5)而N表示不超过b的最大整数例如: 若b=2
12、.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 0Pj=0,当xj=0,j=1, 2, 3在构成目标函数时,为了统一在一个问题中讨论,现引入01变量yj,令yj=1,当采用第j种生产方式,即xj0时yj=0,当不采用第j种生产方式,即xj=0时于是目标函数min z=(k1y1 + c1x1) + (k2y2 + c2x2)+( k3y3 + c3x3)(5.
13、15)式这个规定可由下述3个线性约束条件:xjyjM,j=1,2,3 (5.16)其中M是个充分大的常数(5.16)式说明,当xj 0时yj必须为1,当xj=0时只有yj为0时才有意义,所以(5.16)式完全可以代替(5.15)式4.2 01型整数规划的解法解01型整数规划最容易想到的方法,和一般整数规划的情形一样,就是穷举法,即检查变量取值为0或1的每一种组合,比较目标函数值以求得最优解,这就需要检查变量取值的2n个组合对于变量个数n较大(例如n 10),这几乎是不可能的因此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解这样的方法称为隐枚举法(implicit Enume
14、ration),分枝定界法也是一种隐枚举法,当然,对有些问题隐枚举法并不适用,所以有时穷举法还是必要的下面举例说明一种解01型整数规划的隐枚举法1例6 max z=3x1 2x2+ 5x3x1 + 2x2x32x1 +4x2+ x34x1 + x234x2+ x36x1,x2,x3=0或11)试探解题时,先通过试探的方法找一个可行解,容易看出(x1,x2,x3)=(1,0,0)就是合于一条件的,算出相应的目标函数值z=32)增加约束条件我们求最优解,对于极大化问题,当然希望z3,于是增加一个约束条件:3x1 2x2+ 5x33 后加的条件称为过滤的条件(Filtering Constraint
15、)这样,原问题的线性约束条件就变成5个用全部枚举的方法,3个变量共有23=8个解,原来4个约束条件,共需32次运算现在增加了过滤条件,如按下述方法进行,就可减少运算次数3)枚举将5个约束条件按顺序排好(表55),对每个解,依次代入约束条件左侧,求出数值,看是否适合不等式条件,如某一条件不适合,同行以下各条件就不必再检查,因而就减少了运算次数本例计算过程如表55,实际只作24次运算表55条件点X(3,2,5)X3(1,2,1)X2(1,4,1)X4(1,1,0)X3(0,4,1)X6满足条件否z值(0,0,0)T0(0,0,1)T5-11015(0,1,0)T-2(0,1,1)T315(1,0,
16、0)T311103(1,0,1)T802118(1,1,0)T1(1,1,1)T626于是求得最优解(x1,x2,x3)=(1,0,1),max z=82隐枚举法一般步骤1)试探通过试探的方法找一个可行解,算出相应的目标函数值z02)增加过滤条件增加一个约束条件:z=cixiz0 3)目标函数重排一般常重新排列xi的顺序使目标函数中xi的系数是递增(不减)的。变量(xr1,x r2,x rn)也按下述顺序取值:(0,0,0),(0,0,1),(0,0,1,0) ,(0,0,1,1) 。4)枚举及过滤条件的改进在计算过程中,若遇到z值已超过条件右边的值z0,应改变条件,使右边为迄今为止最大者,cixizmax然后继续作例如,当检查点(0,0,1)时因z=5(3),所以应将条件换成,3x1 2x2+ 5x35 这种对过滤条件的改进,更可以减少计算量3例6的改进求解1)试探(x1,x2,x3)=(1,0,0)就是合于一条件的,算出相应的目标函数值z=32)增加约束条件3x1 2x2+ 5x33 3)目标函数改写z=3x12x2 +5x3= 2x2+3x1+5x3因为2,3,5是递增的。变量(x2,x1,x3)也按下述顺序取值:(0,0,0),(0,0,1),(0,1,0) ,(0,1,1),这样,最优解容易比较
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1