第一章 线性规划模型
一、 线性规划模型的建立
例1某工厂A有生产甲,乙二种产品的能力,且生产一吨甲产品需要3个工日和0.35吨小麦。生产一吨乙产品需要4个工日和0.25吨小麦。该厂仅有工人12人,一个月只能出300个工日,小麦一个月只能进21吨,并且还知生产一吨甲产品可盈利80(百元),生产一吨乙产品可盈利90(百元)。那么,工厂A在一月中应如何安排这两种产品的生产,使之获得最大的利润?
由以上条件可列表如下:
产品 资源 工日 小麦 盈利
问题一的数学模型:
设x1,x2分别表示一月中生产甲,乙二种产品的数量,称之为决策变量。所得利润为z,问题一的目标是使得总利润函数z80x190x2有最大值。 工日的约束为:3x14x2300
原料小麦的约束为:0.35x10.25x221
于是问题一可归结为求目标函数在约束条件下的最大值问题,显然目标函数和约束条件都是决策变量的线性函数,即可建立以下线性规划模型
3 0.35 80 4 0.25 90 300 21 甲 乙 总和 maxz80x190x2s.t.3x14x23000.35x10.25x221x1,x20 (1.1)
1
1.1 线性规划模型的一般形式
maxminzcixii1ns.t.aj1nijxj,bii1,2,m (m个约束) (1.2)
xj0矩阵形式
j1,2,nmaxminzcTXs.t.AX,b (1.3)
X0其中Xx1,x2,xn为决策向量,cc1,c2,cn为目标函数的系数向量,
TTTbb1,b2,bm为常数向量,Aaijmn为系数矩阵。
1.2 线性规划模型的标准形
minzcTXs.t.AXb (1.4)
X0对于例1可取:
43300c80,90,A0.350.25,b21。
T1.3 如何化一般形为标准形 1.3.1 目标函数的转化
例2 一个工厂的甲,乙,丙三个车间生产同一种产品,每件产品由4个零件A和3个零件B组成。这两种零件耗用两种不同的原材料,而这两种原材料的现有数额分别是300公斤和500公斤。每个生产班的原材料的耗用量和零件产量如下表。问这三个车间应各开多少班数,才能使这种产品的配套数达到最大?
2
车间 每班用料数 原料1 原料2 6 9 8 每班产量(个) 零件A 7 6 8 零件B 5 9 4 甲 乙 丙
8 5 3 解: 设x1,x2,x3是甲,乙,丙三个车间所开的生产班数,由原材料的条件,得
8x15x23x33006x19x28x3500 (1.5)
甲,乙,丙生产A零件总数是: 7x16x28x3,生产B 零件总数是: 5x19x24x3。因为目标函数是要使产品的配套数最大,而每个零件要4个A零件,3个B零件,所以产品的最大量不超过
7x16x28x35x19x24x3和中较小的一个。设S是产品的配套数,
43即Smin7x16x28x35x19x24x3,
43 这个目标函数不是线性函数,但可以通过适当的变换把它化为线性的,设
7x6x28x35x19x24x3ymin1, (1.6)
43则上式可以等价于下面两个不等式
7x16x28x35x9x24x3y,1y (1.7)
43故可得如下线性规划模型:
maxSys.t.7x16x28x34y05x19x24x33y0 (1.8) 8x15x23x33005x19x28x3500x1,x2,x3,y0目标函数为求最大值,令Sy即可将原问题转化为在相同约束条件下求最小值。
3
1.3.2 约束条件的转化
若约束条件中有和号,则可在()号的左端加上(或减去)一个非负变量(称为松弛变量)使其变成=号约束。如4x15x26变为4x15x2x36。
a1x1a2x2b若约束条件带有绝对值号,如a1x1a2x2b,则可等价转化为:。
axaxb2211若决策变量没有非负,称为自由变量。例如x1,为自由变量,则可引入
y10,y20,令x1y1y2代入模型即可。
二、 线性规划的求解方法
2.1 线性规划解的概念
T定义1.1 满足约束条件的解x(x1,x2,,xn),称为线性规划问题的可行解,而使目标函
数达到最小值的可行解叫最优解。所有可行解构成的集合称为可行域,记为R。 2.2 线性规划解的基本理论
定理1.1 如果线性规划问题存在可行域,则其可行域是凸集。
定理1.2 如果线性规划问题的可行域有界,则问题的最优解一定在可行域的顶点上达到。 2.3 单纯形法
单纯形法是求解线性规划问题的最常用、最有效的算法之一。单纯形法是首先由 George Dantzig于1947年提出的,近60年来,虽有许多变形体已被开发,但却保持着同样的基本观念。由定理2可知,如果线性规划问题的最优解存在,则一定可以在其可行区域的顶点中找到。基于此,单纯形法的基本思路是:先找出可行域的一个极点,据一定规则判断其是否最优;若否,则转换到与之相邻的另一极点,并使目标函数值更优;如此下去,直到找到某一最优解为止。这里我们不再详细介绍单纯形法,有兴趣的读者可以参看其它线
性规划书籍。 2.4 灵敏度分析
灵敏度分析是指对系统或周围事物因周围条件变化显示出来的敏感程度的分析。
4
在以前讨论线性规划问题时,假定aij,bi,cj都是常数。但实际上这些系数往往是估计值和预测值。如市场条件一变,cj值就会变化;aij往往是因工艺条件的改变而改变;bi是根据资源投入后的经济效果决定的一种决策选择。因此提出这样两个问题:当这些参数有一个或几个发生变化时,已求得的线性规划问题的最优解会有什么变化;或者这些参数在什么范围内变化时,线性规划问题的最优解不变。 2.5 可以转化为线性规划的问题
很多看起来不是线性规划的问题也可以通过变换变成线性规划问题来解决。如: 例3 问题为
min|x1||x2||xn|s. t. Axb其中x[x1 (1.9)
xn]T,A和b为相应维数的矩阵和向量。
要把上面的问题变换成线性规划问题,只要注意到事实:对任意的xi,存在ui,vi0满足
xiuivi,|xi|uivi (1.10)
事实上,我们只要取ui这样,记u[u1xi|xi||x|xi,vii就可以满足上面的条件。 22un]T,v[v1vn]T,从而我们可以把上面的问题变成
min(ui1nivi)
A(uv)b s. t. (1.11)
u,v0
三、 利用MATLAB求解线性规划问题
假设线性规划问题的数学模型为:
5
minzcTXs.t.AXbAeqXbeqlbXub
其中Aeq表示等号约束,beq表示相应的常数项。lb,ub分别表示决策变量X的上,下限
MATLAB中求解上述模型的命令如下:
X=linprog(C,A,b,Aeq,beq,lb,ub)
注意,如果没有等式约束,可用[]代替Aeq和beq;如果某个xi下无界或上无界,可设定lb(i)= –inf或ub(i)=inf;用[x,Fval]代替上述各命令行着左边的x则可同时得到最优值。当求解时有指定迭代初值x0时,求解命令如下:
X=linprog(C,A,b,Aeq,beq,lb,ub,x0)
用[x,Fval]代替上述各命令行左边的X则可同时得到最优值。 例4 某部门在今后5年内考虑给下列项目投资:
项目1,从第一年到第四年每年年初需要投资,并于次年末收回本利115%;
项目2,第三年初需要投资,到第五年末收回本利125%,但规定最大的投资额不超过4万元; 项目3,第二年初需要投资,到第五年末收回本利140%,但规定最大的投资额不超过2万元; 项目4,五年内每年初可购买国债,于当年末还,并加利息6%。
设该部门现有资金10万元,问应如何确定这些项目的投资额,使第五年末拥有的资金本利总额最大?
解 设xiji1,2,3,4,5;j1,2,3,4表示第i年年初投资于项目j的金额。 项目 1 2 3 4
第一年 第二年 第三年 第四年 第五年 x11 x21 1.15x11 x31 1.15x21 x41 1.15x31 x51 1.15x41 x33 1.25x33 1.40x23 x23 x14 1.06x14 x24 1.06x24 x34 1.06x34 x44 1.06x44 x51 1.06x51 6
根据题意可得:
第一年:x11x1410 (全部投入,不考虑全部投入可使用小于,由下面都要相应变化与
课本同) (
可写篇文章)
第二年:x21x23x2416%x14 第三年:x31x32x341.15x111.06x24 第四年:x41x441.15x211.06x34 第五年:x541.15x311.06x44
对项目2,3的投资有限额的规定,有x324,x233
第五年末该部门拥有的资金本利总额为:S1.40x231.25x321.15x411.06x54 建立线性规划模型:
maxS1.40x231.25x321.15x411.06x54s.t.x11x1410x21x23x241.06x140x31x32x341.15x111.06x240x41x441.15x211.06x340x541.15x311.06x440x324x233xij0,i1,25;j1,2,4对应的MATLAB求解程序为:
c=[0,0,0,-1.4,0,0,-1.25,0,-1.15,0,-1.06]';
A=[0,0,0,0,0,0,1,0,0,0,0;0,0,0,1,0,0,0,0,0,0,0]; b=[4,3]';
Aeq=[1,1,0,0,0,0,0,0,0,0,0;0,-1.06,1,1,1,0,0,0,0,0,0;-1.15,0,0,0,-1.06,1,1,1,0,0,0;0,0,-1.15,0,0,0,0,-1.06,1,1,0;0,0,0,0,0,-1.15,0,0,0,-1.06,1]; beq=[10,0,0,0,0]; lb=zeros(11,1);
[x,fval]=linprog(c,A,b,Aeq,beq,lb) 输出结果为:
7
(1.12)
x=
6.5508 3.4492 0.6561 3.0000 0.0000 2.0066 4.0000 1.5268 2.3730 0.0000 2.3076 fval=
-14.3750 即第五年末该部门拥有的资金总额为14.375万元,盈利43.75%。
四、matlab命令详解
线性规划问题是目标函数和约束条件均为线性函数的问题,MATLAB6.0解决的线性规划问题的标准形式为:
xRn min fxsub.to:Axb
Aeqxbeq lbxub
其中f、x、b、beq、lb、ub为向量,A、Aeq为矩阵。
其它形式的线性规划问题都可经过适当变换化为此标准形式。 函数 linprog
格式 x = linprog(f,A,b) %求min f ' *x sub.to Axb线性规划的最优解。
x = linprog(f,A,b,Aeq,beq) %等式约束Aeqxbeq,若没有不等式约束
Axb,则A=[ ],b=[ ]。
x = linprog(f,A,b,Aeq,beq,lb,ub) %指定x的范围lbxub,若没有等式约束
Aeqxbeq ,则Aeq=[ ],beq=[ ]
x = linprog(f,A,b,Aeq,beq,lb,ub,x0) %设置初值x0
x = linprog(f,A,b,Aeq,beq,lb,ub,x0,options) % options为指定的优化参数 [x,fval] = linprog(…) % 返回目标函数最优值,即fval= f ' *x。
[x,lambda,exitflag] = linprog(…) % lambda为解x的Lagrange乘子。 [x, lambda,fval,exitflag] = linprog(…) % exitflag为终止迭代的错误条件。 [x,fval, lambda,exitflag,output] = linprog(…) % output为关于优化的一些信息 说明 若exitflag>0表示函数收敛于解x,exitflag=0表示超过函数估值或迭代的最大数字,exitflag<0表示函数不收敛于解x;若lambda=lower 表示下界lb,lambda=upper表示上界ub,lambda=ineqlin表示不等式约束,lambda=eqlin表示等式约束,lambda中的非0元素表示对应的约束是有效约束;output=iterations表示迭代次数,output=algorithm表示使用的运算规则,output=cgiterations表示PCG迭代次数。
例5-1 求下面的优化问题
min 5x14x26x3
sub.to x1x2x320 3x12x24x342 3x12x230
0x1,0x2,0x3
解:
>>f = [-5; -4; -6];
>>A = [1 -1 1;3 2 4;3 2 0]; >>b = [20; 42; 30]; >>lb = zeros(3,1);
8
>>[x,fval,exitflag,output,lambda] = linprog(f,A,b,[],[],lb)
结果为:
x = %最优解 0.0000 15.0000 3.0000
fval = %最优值 -78.0000
exitflag = %收敛 1 output =
iterations: 6 %迭代次数 cgiterations: 0
algorithm: 'lipsol' %所使用规则 lambda =
ineqlin: [3x1 double] eqlin: [0x1 double] upper: [3x1 double] lower: [3x1 double] >> lambda.ineqlin ans =
0.0000 1.5000 0.5000
>> lambda.lower ans =
1.0000 0.0000 0.0000
表明:不等约束条件2和3以及第1个下界是有效的
9