您的位置:首页 > 编程语言 > MATLAB

Matlab应用实例(4)—linprog(02高级)

2015-07-06 04:31 393 查看
续—>Matlab应用实例(4)—linprog(01基础)

【例5】厂址选择问题

考虑A、B、C三地,每地都出产一定数量的原料,也消耗一定数量的产品(见表9-15)。已知制成每吨产品需3吨原料,各地之间的距离为:A-B:150km,A-C:100km,B-C:200km。假定每万吨原料运输1km的运价是5000元,每万吨产品运输1km的运价是6000元。由于地区条件的差异,在不同地点设厂的生产费用也不同。问究竟在哪些地方设厂,规模多大,才能使总费用最小?另外,由于其它条件限制,在B处建厂的规模(生产的产品数量)不能超过5万吨。

表4-5 A、B、C三地出产原料、消耗产品情况表
地点
年产原料(万吨)
年销产品(万吨)
生产费用(万元/万吨)
A
20
7
150
B
16
13
120
C
24
0
100
令X=xij为由i地运到j地的原料数量(万吨),Y=yij为由i地运往j地的产品数量(万吨),i,j=1,2,3(分别对应A、B、C三地)。

用MATLAB的linprog工具求解。

fun007.m

clear

clc

H1=[0 75 50;75 0 100;50 100 0]; %原料运费矩阵(化为万元后的邻接矩阵,是对称的)

H2=[0 90 60;90 0 120;60 120 0]; %产品运费矩阵(化为万元后的邻接矩阵,是对称的)

H3=[150 150 150;120 120 120;100 100 100];

%H3产品加工费用,只与加工所在地有关,与运往何处无关

f=[H1 H2+H3]

A=[0 1 1 -1 0 0 -1 0 0 3 3 3 zeros(1,6)

0 -1 0 1 0 1 0 -1 0 zeros(1,3) 3 3 3 zeros(1,3)

0 0 -1 0 0 -1 1 1 0 zeros(1,6) 3 3 3

zeros(1,12) ones(1,3) zeros(1,3)]

b=[20;16;24;5];

Aeq=[zeros(1,9) 1 0 0 1 0 0 1 0 0

zeros(1,9) 0 1 0 0 1 0 0 1 0

zeros(1,9) 0 0 1 0 0 1 0 0 1]

beq=[7;13;0];

lb=zeros(18,1); %非负解

ub=[];

[x,z]=linprog(f,A,b,Aeq,beq,lb,ub);

X=reshape(x(1:9),3,3)' %变形使原料运输结果更直观

Y=reshape(x(10:18),3,3)' %变形使产品运输及加工规模结果更直观

解得:

X =

0 0.0000 0.0000

1.0000 0 0.0000

0.0000 0.0000 0

Y =

7.0000 0.0000 0.0000

0.0000 5.0000 0.0000

0.0000 8.0000 0.0000

z =

3.6450e+03

exitflag = 1

output =

iterations: 7

时间已过 0.015801 秒。

即B地往A地运输1万吨原料,A,B,C地的生产规模分别为7万,5万,8万吨。最小费用为3645万元。其中A、B地自产自销,C地生产的8吨产品全部销往B地。

说明:含有18个变量,4个不等式约束,3个等式约束的线性规划,这几乎是人脑不能完成的计算量,而MATLAB只要迭代7次,不到0.02秒就可以完成计算。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: