函数极值及规划问题解读Word格式.docx
- 文档编号:22833086
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:41
- 大小:207.33KB
函数极值及规划问题解读Word格式.docx
《函数极值及规划问题解读Word格式.docx》由会员分享,可在线阅读,更多相关《函数极值及规划问题解读Word格式.docx(41页珍藏版)》请在冰豆网上搜索。
先将目标函数转化成最小值问题:
min(-f)=-2x1-5x2
具体程序如下:
f=[-2-5];
A=[10;
01;
12];
b=[4;
3;
8];
lb=[00];
[x,fval]=linprog(f,A,b,[],[],lb)
f=fval*(-1)
运行结果:
x=23
fval=-19.0000
maxf=19
【例5.2】:
minf=5x1-x2+2x3+3x4-8x5
s.t–2x1+x2-x3+x4-3x5≤6
2x1+x2-x3+4x4+x5≤7
0≤xj≤15j=1,2,3,4,5
编写以下程序:
f=[5-123-8];
A=[-21-11-3;
21-141];
b=[6;
7];
lb=[00000];
ub=[1515151515];
[x,fval]=linprog(f,A,b,[],[],lb,ub)
x=
0.0000
0.0000
8.0000
15.0000
minf=
-104
【例5.3】:
假设某厂计划生产甲、乙两种产品,现库存主要材料有A类3600公斤,B类2000公斤,C类3000公斤。
每件甲产品需用材料A类9公斤,B类4公斤,C类3公斤。
每件乙产品,需用材料A类4公斤,B类5公斤,C类10公斤。
甲单位产品的利润70元,乙单位产品的利润120元。
问如何安排生产,才能使该厂所获的利润最大。
建立数学模型:
设x1、x2分别为生产甲、乙产品的件数。
f为该厂所获总润。
maxf=70x1+120x2
s.t9x1+4x2≤3600
4x1+5x2≤2000
3x1+10x2≤3000
x1,x2≥0
将其转换为标准形式:
minf=-70x1-120x2
x1,x2≥0
编写以下程序:
f=[-70-120];
A=[94;
45;
310];
b=[3600;
2000;
3000];
lb=[00];
[x,fval,exitflag]=linprog(f,A,b,[],[],lb);
x,exitflag,maxf=-fval
运行结果:
x=
200.0000
240.0000
exitflag=
1
maxf=
4.2800e+004
【例5.4】:
某公司有一批资金用于4个工程项目的投资,其投资各项目时所得的净收益(投入资金百分比)如下表:
工程项目收益表
工程项目
A
B
C
D
收益(%)
15
10
8
12
由于某种原因,决定用于项目A的投资不大于其他各项投资之和而用于项目B和C的投资要大于项目D的投资。
试确定该公司收益最大的投资分配方案。
设x1、x2、x3、x4分别代表用于项目A、B、C、D的投资百分数。
maxf=0.15x1+0.1x2+0.08x3+0.12x4
s.tx1-x2-x3-x4≤0
x2+x3-x4≥0
x1+x2+x3+x4=1
xj≥0j=1,2,3,4
minz=-0.15x1-0.1x2-0.08x3-0.12x4
-x2-x3+x4≤0
编写程序:
f=[-0.15;
-0.1;
-0.08;
-0.12];
A=[1-1-1-1;
0-1-11];
b=[0;
0];
Aeq=[1111];
beq=[1];
lb=zeros(4,1);
[x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb)
fmax=-fval
运行结果:
0.5000
0.2500
0.0000
fval=
-0.1300
1
fmax=
0.1300
即4个项目的投资百分数分别为50%,25%,0,25%时可使该公司获得最大的收益,其最大收益可到达13%。
过程正常收敛。
【例5.5】:
有A、B、C三个食品加工厂,负责供给甲、乙、丙、丁四个市场。
三个厂每天生产食品箱数上限如下表:
工厂
生产数
60
40
50
四个市场每天的需求量如下表:
市场
甲
乙
丙
丁
需求量
20
35
33
34
从各厂运到各市场的运输费(元/每箱)由下表给出:
市场
工
厂
2
1
3
4
求在基本满足供需平衡的约束条件下使总运输费用最小。
设aij为由工厂i运到市场j的费用,xij是由工厂i运到市场j的箱数。
bi是工厂i的产量,dj是市场j的需求量。
b=(604050)d=(20353334)
s.t
xij≥0
AA=[2132;
1321;
3411];
f=AA(:
);
A=[100100100100
010010010010
001001001001];
Aeq=[111000000000
000111000000
000000111000
000000000111];
b=[60;
40;
50];
beq=[20;
35;
33;
34];
lb=zeros(12,1);
[x,fval,exitflag]=linprog(f,A,b,Aeq,beq,lb)
20.0000
35.0000
33.0000
18.4682
15.5318
122.0000
即运输方案为:
甲市场的货由B厂送20箱;
乙市场的货由A厂送35箱;
丙商场的货由C厂送33箱;
丁市场的货由B厂送18箱,再由C厂送16箱。
最低总运费为:
122元。
5.20-1整数规划求极值
形如:
minfTX
xi为0或1
其中X为n维未知向量,fT=[f1,f2,…fn]为目标函数系数向量,小于等于约束系数矩阵A为m×
5.2.1分支定界法
在Matlab中提供了bintprog函数实现0-1型线性规划,采用的是分支定界法原理,其调用格式如下:
x=bintprog(f,A,b)
x=bintprog(f,A,b,Aeq,beq)
[x,fval]=bintprog(…)
[x,fval,exitflag]=bintprog(…)
[x,fval,exitflag,output]=bintprog(…)
[x,fval,exitflag,output,lambda]=bintprog(…)
说明:
x=bintprog(f,A,b)返回值x为最优解向量。
x=bintprog(f,A,b,Aeq,beq)作有等式约束的问题。
[x,fval]=bintprog(…)左端fval返回解x处的目标函数值。
【例5.6】求解以下问题:
maxz=x1+1.2x2+0.8x3
st
2.1x1+2x2+1.3x3<
=5
0.8x1+x2<
x1+2.5x2+2x3<
=8
2x2<
x1,x2,x3为0或1
解答:
首先,将其改变成0-1整数规划函数bintprog要求的标准形式:
minz=-x1-1.2x2-0.8x3
Matlab求解:
c=[-1,-1.2,-0.8];
A=[2.1,2,1.3;
0.8,1,0;
1,2.5,2;
0,2,0];
b=[5;
5;
8;
[x,fval]=bintprog(c,A,b);
x
fmax=-fval
运行结果可得:
x=
0
2.2000
【例5.7】某快餐连锁经营公司有7个地点(A1,A2,---,A7)可以设立快餐店,由于地理位置因素,设立快餐店时必须满足以下要求:
A1,A2,A3三个地点最多可选两个,A1和A5至少选取一个,A6和A7至少选取一个。
已知各个地点设立快餐店的投入和预计收益如表所示。
已知目前公司有650万元可以投资。
问怎样投资才能使公司预计收益最高?
地点
A1
A2
A3
A4
A5
A6
A7
利润/万元
11
5
投资/万元
103
140
95
150
193
160
80
解:
这是一个选址问题。
首先引入0-1变量xi;
xi=1,选择Ai地址;
xi=0,不选择Ai地址。
则该问题的数学模型可以表示如下:
maxz=10x1+11x2+8x3+12x4+15x5+12x6+5x7
(1)103x1+140x2+95x3+150x4+193x5+160x6+80x7<
=650
(2)x1+x2+x3<
=2
(3)x4+x5>
=1
(4)x6+x7>
(5)xi=0,1
matlab求解程序如下:
c=[-10-11-8-12-15-12-5];
A=[1031409515019316080;
1110000;
000-1-100;
00000-1-1];
b=[650;
2;
-1;
-1];
运行程序得:
x=[1;
1;
0;
1],fval=50
5.2.2枚举法
除了采用分支定界法原理计算0-1整数规划外,还可以采用枚举法
枚举法程序bintLp_E.m
function[x,f]=bintLp_E(c,A,b,N)
%[x,f]=bintLp_E(c,A,b,N):
用枚举法求解下列0-1线性规划
%minf=c'
*x,s.t.A*x<
=b,x的分量全为0或1
%其中N表示约束条件A*x<
=b中的前N个是等式,N=0时可以省略
%返回结果x是最优解,f是最优解处的函数值
ifnargin<
N=0;
end
c=c(:
b=b(:
[m,n]=size(A);
x=[];
f=abs(c'
)*ones(n,1);
i=1;
whilei<
=2^n
B=de2bi(i-1,n)'
;
t=A*B-b;
t11=find(t(1:
N,:
)~=0);
t12=find(t(N+1:
m,:
)>
0);
t1=[t11;
t12];
ifisempty(t1)
f=min([f,c'
*B]);
ifc'
*B==f
x=B;
end
i=i+1;
注意:
以上程序需保存至搜索路径之下才可以调用。
【例5.8】求解下列0-1型整数线性规划。
分别采用二种算法计算如下:
c=[3-25];
a=[12-1;
14-1;
110;
041];
b=[2;
4;
6];
[x,fval]=bintprog(c,a,b)
[xx,ffval]=bintLp_E(c,a,b)
计算结果如下:
-2
xx=
ffval=
【例5.9】某公司有A1,A2,A3三项业务需要B1,B2,B3三位业务员处理,每个业务员处理业务的费用如表所示,其中业务员B2不能处理业务A1,问应指派何人去完成何项业务,使所需总费用最少?
B1
B2
B3
1500
不能处理
800
1200
900
750
解:
设xij表示第i项业务被第j位业务员处理,其中不能处理时可以认为费用非常高,比如999999元,则依题意可得如下模型:
minz=1500x11+999999x12+800x13+1200x21
+900x22+750x23+900x31+800x32+900x33
x11+x12+x13=1
x21+x22+x23=1
x31+x32+x33=1
x11+x21+x31=1
x12+x22+x32=1
x13+x23+x33=1
xij=0,1
编写matlab程序:
c=[15009999998001200900750900800900];
Aeq=[111000000;
000111000;
000000111;
100100100;
010010010;
001001001];
beq=ones(6,1);
[x,fval]=bintprog(c,[],[],Aeq,beq)
[xx,ffval]=bintLp_E(c,Aeq,beq,6)
运行程序可得:
x=xx=[001010100];
fval=ffval=2600
答案:
A1被B3处理,A2被B2处理,A3被B1处理时总费用最少,只需2600元.
5.3整数规划求极值
MATLAB关于整数规划没有内带的函数,目前关于整数规划的自编程序已编好,以下是其中之一:
function[x,val,status]=ip(f,A,b,Aeq,beq,lb,ub,M,e)
options=optimset('
display'
'
off'
bound=inf;
[x0,val0]=linprog(f,A,b,Aeq,beq,lb,ub,[],options);
[x,val,status,b]=rec(f,A,b,Aeq,beq,lb,ub,x0,val0,M,e,bound);
function[xx,val,status,bb]=rec(f,A,b,Aeq,beq,lb,ub,x,v,M,e,bound)
[x0,val0,status0]=linprog(f,A,b,Aeq,beq,lb,ub,[],options);
ifstatus0<
=0|val0>
bound
xx=x;
val=v;
status=status0;
bb=bound;
return;
ind=find(abs(x0(M)-round(x0(M)))>
e);
ifisempty(ind)
status=1;
ifval0<
x0(M)=round(x0(M));
xx=x0;
val=val0;
bb=val0;
else
val=v;
bb=bound;
return
[rowcol]=size(ind);
br_var=M(ind
(1));
br_value=x(br_var);
fori=2:
col
tempbr_var=M(ind(i));
tempbr_value=x(br_var);
iftempbr_value>
br_value
br_var=tempbr_var;
br_value=tempbr_value;
ifisempty(A)
[rc]=size(Aeq);
else
[rc]=size(A);
A1=[A;
zeros(1,c)];
A1(end,br_var)=1;
b1=[b;
floor(br_value)];
A2=[A;
A2(end,br_var)=-1;
b2=[b;
-ceil(br_value)];
[x1,val1,status1,bound1]=rec(f,A1,b1,Aeq,beq,lb,ub,x0,val0,M,e,bound);
status=status1;
ifstatus1>
0&
bound1<
xx=x1;
val=val1;
bound=bound1;
bb=bound1;
[x2,val2,status2,bound2]=rec(f,A2,b2,Aeq,beq,lb,ub,x0,val0,M,e,bound);
ifstatus2>
bound2<
status=status2;
xx=x2;
val=val2;
bb=bound2;
请先将以上程序保存至搜索路径之下,函数名为ip.m
函数调用规则如下:
[x,val,status]=ip(c,A,b,Aeq,beq,lb,ub,M,e)
该函数求解如下整数规划问题:
Minc*x
Subjectto
A*x<
=b
Aeq*x=beq
Lb<
=x<
=ub
M是存放整数变量编号的向量
e是整数取值的容忍度,当一个变量同其取值之间差值小于e时,该变量被认为是已经为整数。
一般e=5.96e-08;
该函数返回变量如下:
X:
整数规划的解
Val;
目标函数最优值
Status=1如果成功
=0如果迭代到线性规划的最大迭代次数
=-1如果没有解
【例5.10】求解满足以下条件的极值:
maxz=20x1+10x2
5x1+4x2<
=24
2x1+5x2<
=13
x1,x2>
=0
x1,x2取整数
分析:
由于函数是求极小值,故先变换成求负的最小值,然后变成正的最大值。
具体如下:
c=[-20,-10];
A=[54;
25];
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 函数 极值 规划 问题 解读