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三地出产原料、消耗产品情况表
令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秒就可以完成计算。
【例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 |
用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秒就可以完成计算。
相关文章推荐
- PCA and kmeans MATLAB实现
- BSCB 图像修复算法 Matlab 仿真-(2000)
- Matlab应用实例(4)—linprog(01基础)
- Matlab矩阵幂运算
- Matlab应用实例(3)—fminsearch
- Matlab应用实例(2)—fminunc
- matlab在图片上画框
- Matlab聚类分析[转]
- Matlab绘图系列之高级绘图
- matlab图像中的数据类型
- Matlab应用实例(1)—fminbnd
- 基于MATLAB的EAN-13条码识别系统
- [转] 图像放大并进行BiCubic插值 Matlab/C++代码
- 【MatLab】将矩阵写入到文件
- 高斯滤波在图像处理的基本应用
- 图像质量评价指标之Matlab实现
- Matlab学习 · 1st day
- 带你认识LabVIEW和MATLAB
- MATLAB中取整函数(fix, floor, ceil, round)的使用
- Ubuntu Matlab 2014b Setup