求解混合整数规划问题0-1规划时,目标函数不显含决策变量

混合整数规划问题规划的数学模型及解的特点

解纯混合整数规划问题规划的割平面法

混合整数规划问题规划IP (integer  programming):在许多规划问题中如果要求一部分或全部决策变量必须取混合整数规划问题。例如所求的解是机器的台数、人数、车辆船只数等,这样的规划问题称为混合整数规划问题规划简记IP。

松弛问题(slack  problem):不考虑混合整数规划问题条件由余下的目标函数和约束条件构成的规划问题称为该混合整数规划问题规划问题的松弛问题。

一、混合整数规划问题线性规划数学模型的一般形式

混合整数规划问题线性规划问题可以分为以下几种类型

1、纯混合整数规划问题线性规划(pure  integer linear programming):指全蔀决策变量都必须取混合整数规划问题值的混合整数规划问题线性规划有时,也称为全混合整数规划问题规划

2、混合混合整数规划问題线性规划(mixed integer liner programming):指决策变量中有一部分必须取混合整数规划问题值,另一部分可以不取混合整数规划问题值的混合整数规划问题线性规划

②、混合整数规划问题规划的解的特点

相对于松弛问题而言,二者之间既有联系又有本质的区别

(1)混合整数规划问题规划问题的可行域是其松弛问题的一个子集

(2)混合整数规划问题规划问题的可行解一定是其松弛问题的可行解

(3)一般情况下,松弛问题的最优解不会刚好满足变量嘚混合整数规划问题约束条件因而不是混合整数规划问题规划的可行解,更不是最优解

(4)对松弛问题的最优解中非混合整数规划问题变量簡单的取整所得到的解不一定是混合整数规划问题规划问题的最优解,甚至也不一定是混合整数规划问题规划问题的可行解

(5)求解还是要先求松弛问题的最优解然后用分支定界法或割平面法。

基本思路:通过增加新的约束来切割可原问题伴随规划的可行域使它在不断缩尛的过程中,将原问题的混合整数规划问题最优解逐渐暴露且趋于可行域极点的位置这样就有可能用单纯形法求出。

增加的新约束称为割平面方程或切割方程

例  用割平面法解混合整数规划问题规划问题

解:将原混合整数规划问题规划问题称为原问题A0不考虑混合整数规划問题条件的伴随规划称为问题B0,求解过程如下:

1.用单纯形法求解B0得最优单纯形表

(1)   在最终表上任选一个含有不满足混合整数规划问题条件基变量的约束方程。

若选x1则含x1的约束方程为:

(2)将所选的约束方程中非基变量的系数及常数项进行拆分处理。具体规则是:将上述系数囷常数均拆成一个混合整数规划问题加一个非负的真分数之和

(3)将上述约束方程重新组合。组合的原则是:将非基变量系数及常数项中的非负真分数部分移到等号左端将其他部分移到等式右端,即得

分析式(3)等式右端由三部分组成,常数项得混合整数规划问题部分基变量及非基变量(含松弛变量或剩余变量),前两部分都是混合整数规划问题或应取混合整数规划问题而松弛变量根据约束方程来看也应取非負混合整数规划问题(对于这一点,当原问题A0得约束方程组中的系数或常数项中有非混合整数规划问题时要求将该约束方程先化成混合整數规划问题系数及混合整数规划问题常数项,然后再标准化就可满足),因此式(3)右端应为混合整数规划问题同时由于等式左端的特殊性,右端的混合整数规划问题应是大于等于零的混合整数规划问题这是因为可将(3)式改写成

式(4)左端是非负数,右端第一项是一个真分数如果第二项为负混合整数规划问题(即≤-1的混合整数规划问题),则不能保证左端为非负数因此,(3)式的左端应大于等于零

这就是一个割平面方程

将上述方法进行一般化描述:

(1)设 是伴随规划最终单纯形表上第I行约束方程所对应的基变量,其取值为非混合整数规划问题则其约束方程式为

由于 , 及 为大于等于0的混合整数规划问题,因此有

加入松弛变量xs化为等式:

就是割平面方程的最基本形式。

3.将割平面方程加到伴随规划的最终单纯形表中用对偶单纯形法继续求解

4.若没有得到混合整数规划问题最优解,则继续做割平面转2。

(画图说明原理即图解法)

割平面法解混合整数规划问题规划问题的基本步骤

第一步:用单纯形法解松弛问题,得到最优单纯形表

第二步:求一個割平面方程,加到最优单纯形表中用对偶单纯形法继续求解。

第三步:若没有得到混合整数规划问题最优解则继续作割平面方程,轉第二步

练习   用割平面法解混合整数规划问题规划问题

分支定界法的主要思路是首先求解混合整数规划问题规划的伴随规划,如果求得嘚最优解不符合混合整数规划问题条件则增加新约束——缩小可行域;将原混合整数规划问题规划问题分支——分为两个子规划,再解孓规划的伴随规划……最后得到原混合整数规划问题规划的伴随规划。这就是所谓的“分支”

所谓“定界”,是在分支过程中若某個后继问题恰巧获得混合整数规划问题规划问题的一个可行解,那么它的目标函数值就是一个“界限”,可以作为衡量处理其它分支的┅个依据

“分支”为混合整数规划问题规划最优解的出现创造了条件,而“定界”则可以提高搜索的效率


例  用分支定界法求解混合整數规划问题规划问题

(1)首先解该混合整数规划问题规划的伴随规划,如图所示用图解法

不符合混合整数规划问题要求,可任选一个变量洳x1=3/2进行分支。由于最接近3/2的混合整数规划问题是1和2因而可以构造两个约束条件x1≥2 和x1≤1,分别并入原来的约束条件形成两个分支,记为LP1,LP2

苐一步:计算原问题目标函数值的初始上界

第二步:计算原问题目标函数值的初始下界

第三步:增加约束条件将原问题分支

第四步:分别求解一对分支

第六步:比较上、下界大小如有上界=下界,停止计算找到最优解,否则转3

练习   用分支定界法求解混合整数规划问题规劃问题

0—1型混合整数规划问题规划是混合整数规划问题规划中的特殊情形它的变量仅可取值0或1,这时的变量xi称为0—1变量或称为二进制變量。

0—1型混合整数规划问题规划中0—1变量作为逻辑变量(logical variable)常被用来表示系统是否处于某一特定状态,或者决策时是否取某个方案

一、0—1型混合整数规划问题规划的典型应用问题

例1:背包问题:一个登山队员,他需要携带的物品有:食品、氧气、冰镐、绳索、帐篷、照相器材、通信器材等每种物品的重量合重要性系数如表所示。设登山队员可携带的最大重量为25kg,试选择该队员所应携带的物品

解:引入0—1變量xixi=1表示应携带物品i,,xi=0表示不应携带物品I

上述问题就是一个标准的混合整数规划问题规划问题解法。。。。

比较每种物品的重偠性系数和重量的比值,比值大的物品首先选取直到达到重量限制

例2:集合覆盖和布点问题

某市消防队布点问题。该市共有6个区每个區都可以建消防站,市政府希望设置的消防站最少但必须满足在城市任何地区发生火警时,消防车要在15min内赶到现场据实地测定,各区の间消防车行驶的时间见表请制定一个布点最少的计划。

解:引入0—1变量xixi=1表示在该区设消防站,xi=0表示不设

1.矛盾约束:建模时,有时会遇箌相互矛盾的约束而模型只能两者取一,例如下面两个约束

这时引入一个0-1变量y, 及一个很大的正数M原式可化为:

y=0时,(1)与(3)相同(4)自然满足,实际上不起作用

y=1时(4)与(2)相同,(3)自然满足实际上不起作用

对于形似 ,可以用以下一对约束代替

引入0—1变量后约束可改为


模型希望在丅列几个约束中,只能有一个约束有效:

yi=0时自然满足,此时约束实际上不起作用

而(3)式保证了在0—1混合整数规划问题变量中有一个且也只囿一个取值1其余取0值。若希望有k个约束有效只需将(3)改为

解:(1)先用试探的方法找出一个初始可行解,如x1=1,x2=x3=0

(2)对原有约束增加一个过滤条件加到原约束条件中

按照枚举法得思路,依次检查各种变量得组合每找到一个可行解,求出它的目标函数Z1,Z1>Z0则将过滤条件换成Z1

求解过程见下表表中(1),(2),(3),(4)为原问题得约束条件,(5)为增加的过滤条件“×”代表不满足约束,“√”代表满足条件,空格代表不需要计算。

这种对过濾条件的改进可以减少计算量。

注:一般常重新排列xi的顺序使目标函数中xi的系数是递增(不减)的在上例中,改写

因为-23,5是递增的變量(x2,x1,x3)也按下述顺序取值:(0,0,0),(0,0,1)…,这样最优解容易比较早的发现,再结合过滤条件的改进更可使计算简化。

练习   隐枚举法求解小规模0-1规劃问题

解:采用上例的方法解此例共需36次运算为了进一步减少运算量,按目标函数中各变量系数的大小顺序重新排列各变量以使最优解有可能较早出现。对于最大化问题可按由小到大的顺序排列,最小化问题则相反

由于本题过滤条件不好选,所以开始不设过滤条件

茬现实生活中有各种性质的指派问题(assignment  problem)。指派问题也是混合整数规划问题规划的一类重要问题例如:有n项工作需要分配给n个人(或部门)来唍成;有n项合同需要选择n个投标者来承包;有n个班级需要安排在各教室上课等。诸如此类问题它们的基本要求是在满足特定的指派要求條件下,使指派方案的总体效果最佳

一、指派问题的数学模型

cij表示第个人完成第项工作所需的资源数,称之为效率系数(或价值系数)因此指派问题的数学模型为

二、匈牙利法的基本原理

效率矩阵:将指派问题中的效率系数cij排成一个n×n矩阵,称为效率矩阵

定理1:设指派问题的效率矩阵为C,若将该矩阵的某一行(或列)的各个元素都减去同一常数t(t可正可负),得到新的矩阵C’,则以C’为效率矩阵的新指派问题与原指派问题的最优解相同,但其最优值减少t

推论1:若指派问题效率矩阵每一行及每一列分别减去各行及各列的最小元素,则得到的新指派問题与原指派问题有相同的最优解

定义1:在效率矩阵C中,有一组处在不同行不同列 的零元素称为独立零元素组,此时其中每个零元素稱为独立零元素

则 是一个独立零元素组, 也是一个独立零元素组

再将n×n个决策变量xij也排成一个n×n矩阵 ,称为决策变量矩阵即  

根据以仩分析,对C中出现独立零元素的位置再X中令xij=1,其余取0值就是指派问题的一个最优解,如上例

但在有的问题中发现效率矩阵中独立零元素得个数不到n个这样就无法求到最优指派方案,需要作进一步的分析首先给出下述定理。

定理2:效率矩阵C中独立零元素的最多个数等於能覆盖所有零元素的最小直线数

分别用最少的直线去覆盖各自矩阵中的零元素

可见C1至少需要4根,C2至少需要4根C3最少需要5根,因此它们嘚独立零元素个数分别为44,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种情形:

(2)   存在未标记过的0元素但它們所在的行和列中,未标记过的0元素均至少有两个

若情况(1)出现,则可进行指派:令圈0位置的决策变量取值为1其它决策变量的取值均为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进行进一步的变换,变换步骤如下:

(2)   对打√的行中所有0元素所在列打√,如第1列

(3)   对所有打√列中圈0え素所在行打√如第3行

(5)   对未打√的每一行划一直线,如12,4行对已打√的列划一纵线,

如第1列即得到覆盖当前0元素的最少直线数。見C3

第5步:对矩阵C3作进一步变换增加0元素

在未被直线覆盖过的元素中找出最小元素,将打√行的各元素减去这个最小元素将打√列的各え素加上这个最小元素(以避免打√行中出现负元素),这样就增加了0元素的个数

对C3进行变换,最小元素为2对打√的第3,5行各元素都减去2对打√的第1列各元素都加上2,得到矩阵C4

第6步:对已增加了0元素的矩阵再用圈0法找出独立0元素组。

即回到第2步对C4进行检验及列检验,矗到圈0的个数m=n时止

本题对C4再用行列检验后为:

四、非标准形式的指派问题

设最大化指派问题系数矩阵C=(cij)n×n中最大元素为m,令矩阵B=(bij)n×n,bij=m-cij则鉯B为系数矩阵的最小化指派问题和以C为系数矩阵的原最大化问题有相同最优解。

2.人数和事数不等的指派问题

若人多事少则添上一些虚拟嘚“人”,费用系数取0理解为这些费用实际上不会发生。反之添上一些虚拟的“事”,费用系数同样取0

3.一个人可做几件事的指派问題

将该人化作相同的几个“人”来指派。这几个人作同一件事的费用系数都一样

4.某事一定不能由某人做的指派问题

此时将相应的费用系數取作足够大的数M。

例    有4种机械要分别装在4个工地它们在4个工地的工作效率不同,问应如何指派安排才能使4台机械发挥总的效率最大?效率表如下:

增0打√行减1,打√列加1

加载中请稍候......

线性规划是数学规划中的一类最簡单规划问题常见的线性规划是一个有约束的,变量范围为有理数的线性规划如:

对于这类线性规划问题,数学理论已经较为完善鈳以有多种方法求解此类问题。但写这篇文章的目的并不是为了介绍数学理论我们这里主要讲解如果利用工具求解这一类线性规划问题。

最著名同时也是最强大的数学最优化软件是LINGO/LINDO软件包,它能够求解多种的数学规划问题同时还提供了多种的分析能力。但LINGO软件并不容噫上手同时,应用LINGO的场合一般是大规模的线性规划问题小小的线性规划完全可以不使用它。一个更受科研人员欢迎的数学软件是MATLAB它鉯功能强大而称著,并有数学软件中的“航空母舰”之称我们这里就是要学习使用MATLAB软件求解线性规划(含混合整数规划问题规划和0-1规划)问题。

为了使得不熟悉MATLAB的人员也能够使用MATLAB进行线性规划问题求解本文将对MATALB中使用到的函数和过程以及结果进行详细的分析,最后会对烸一个问题都给出一个可以完全“套用”的MATLAB程序

我们首先从上面的线性规划问题开始,为了便于表达将上面的式子写成矩阵形式:


于昰约束就表达为了一个不等式。

求解MATLAB线性规划时最常用的函数是linprog函数,下面来介绍一下这个函数的使用

打开MATLAB帮助文档(PS:帮助文档的内嫆是最全的,只要你的英文过了专业8级)可以看到linprog函数求解的是具有如下标准形式的线性规划:

公式中各符号的意义是自明的,在这里簡单介绍下首先MATLAB中求解的是目标函数是最小值的问题,但如果我们的目标函数是求最大值可以通过对目标函数中每一项中乘以-1,将求朂大值问题转化为求最小值问题;Ab分别为不等式约束中的系数矩阵。Aeq和beq分别为等式约束中的系数矩阵lb,和ub分别为每个变量的上下区间;最后f为目标函数中各变量的系数矩阵

现在,是时候动动手使用MATLAB编写代码求解这个线性规划了。MATLAB代码如下所示:

lb=zeros(2,1);% 生成一个2行1列的全0矩陣,很显示上面例子中的x,y的最小值为0

我们来解释下linprog函数中每参数的意义,linprog中的一个原型如下:

这7个参数的意义和上面f、A、b的意义是一样的f为目标函数的系数矩阵,A为线性规划不等式约束的变量系数矩阵b为不等式约束的资源数(如上面的[300;200;300]),这是一个N行1列的矩阵N为变量嘚个数。Aeqbeq是相应等式约束的变量系数矩阵和资源数(很明显上面的例子中并没有等式约束)。lbub分别为保变量的上下区间在上面的唎子中,x和y和最小值都为0但都无最大值约束而linprog的返回值x为求得的各变量的值,这是一个向量fval为最优化的值,一般是一个标量exitflag意为函數的退出标志。

上面所示的代码[x,fval]=linprog(f,A,b,[],[],lb,[])中[]代表不存在或空,因为在上面的例子中不存在等式约束所以Aeqbeq的位置为[]。而ub也为空是因为变量没囿最大值约束。

运行上面的程序行到结果为:

当x=20,y=24时,可以求得最优化的值最大值为428(因为这里的求目标最大值,但MATLAB只能求目标函数最尛值所以对目标函数进行了乘-1处理,所以也要对最后的结果乘以-1才是目标函数所求).

上面解决了简单的线性规划问题的求解线性规范囿两种比较特殊的情况,即混合整数规划问题规划和0-1混合整数规划问题规划在之前(不知MATLAB几之前……),MATLAB是不能直接求解这两种规划的bintprog函数可以用来求0-1混合整数规划问题规划,但求解过程比较麻烦而且最新版的MATLAB已经遗弃了这个函数,同时提供了一个比较新的、专用于求解混合整数规划问题规划和0-1混合整数规划问题规划的函数——intlinprogintlinprog的一个原型为:

该函数的使用和linprog函数的使用十分相似,其仅仅在linprog函数的基础上多了一个参数——intcon我们来通过下面的例子来学习该参数的意义。

在这里例子中变量的取值范围不再是有理数集,而是混合整数規划问题集求解此规划问题的MATLAB程序如下:

在函数intlinprog中,intcon的意义为混合整数规划问题约束变量的位置如上例中,因为x1和x2都要是混合整数规劃问题intcon参数位置ic_13的值为[1,2]。这个位置是按照目标函数和约束条件中变量位置来排列的如果上式中仅有x2为混合整数规划问题约束,那么ic_13的徝应该为2

需要说明的是,intlinprog函数在比较旧版本是不支持的(笔者使用的是MATLAB2014B)如果你发现你现在的MATLAB没有intlinprog函数,请不要吃惊因为一直以来,MATLAB都是无法直接求解混合整数规划问题规划的但今时已经不同往日了。

现在又有了一个新问题我们解决了在MATLAB上求解一般的混合整数规劃问题规划问题,但要是遇到0-1混合整数规划问题规划问题呢到这里,我们只要转换一下思维就可以利用MATLAB求解0-1混合整数规划问题规划了,这里先卖个关子请大家看下面的例子是怎么用MATLAB求解0-1混合整数规划问题规划的。


有木有发现在与上面混合整数规划问题规划不同的地方只有一个,就是多了ub_12=ones(5,1)也就是说求解0-1混合整数规划问题规划只要在求解混合整数规划问题规划的基础上加上一个对变量最大值约束为1就荇了,有木有恍然大悟的感觉?

后面两个程序并没有给出程序运行的结果,因为笔者坚信学习最好的方式就是“动手”^_^

精品:混合整数规划问题规划 混匼整数规划问题规划教案 lingo求解混合整数规划问题规划 01混合整数规划问题规划 lingo 混合整数规划问题规划 matlab 混合整数规划问题规划 混合混合整数规劃问题规划 matlab求解混合整数规划问题规划 混合整数规划问题规划问题 非线性混合整数规划问题规划

我要回帖

更多关于 混合整数规划问题 的文章

 

随机推荐