MatLab运输问题专家
(1)问题分析:
运输费=运输单价*运输量。这里的要求是运输总费用最低,也就是说,规划的目标函数是运输费用最小。
约束条件包括:
A.a.ABC三家工厂的产能有上限,当然也有下限(产量为0)。
至少满足四个市场的需求。
(2)符号描述:
西集代表I厂交付给J市场的箱数。当然,I = 1,2,3代表ABC分别是。J=1,2,3,4分别代表A,B,C,D。
Costij代表每个箱子从I工厂到J市场的运输费用。成本=[2,1,3,2;1,3,2,1;3,4,1,1];
Proi代表工厂I生产的盒子总数,很明显PROI = SUM (xij,J,1,4)——注意这里介绍的是将J从1求和到4。即Xi 1+XII+XIII+XIV。
Needj代表在J市场的实际购买,显然Needj = sum (xij,I,1,3)-同上。
根据“问题分析”,我们可以得到计划。
目标:min f = sum (sum (costij。* xij,I,1,3),j,1,4)。
约束条件:
xij & gt=0其中i=1,2,3;j=1,2,3,4
pro1=sum(x1j,j,1,4)& lt;=60
pro2=sum(x2j,j,1,4)& lt;=40
pro3=sum(x3j,j,1,4)& lt;=50
need1=sum(xi1,I,1,3)>=20
need2=sum(x21,I,1,3)>=35
need3=sum(x31,I,1,3)>=33
need4=sum(x41,I,1,3)>=34
(3)编程(基于Matlab,这里注意把Aij转换成列向量)
清楚的
成本=[2,1,3,2;1,3,2,1;3,4,1,1];
f =成本(:);%目标
A=[
1,0,0,1,0,0,1,0,0,1,0,0;
0,1,0,0,1,0,0,1,0,0,1,0;
0,0,1,0,0,1,0,0,1,0,0,1;
-1,-1,-1,0,0,0,0,0,0,0,0,0;
0,0,0,-1,-1,-1,0,0,0,0,0,0;
0,0,0,0,0,0,-1,-1,-1,0,0,0;
0,0,0,0,0,0,0,0,0,-1,-1,-1;
];%约束,注意,当约束大于符号时,我们两边都乘以-1,成为小于符号的约束。
b =[60;40;50;-20;-35;-33;-34];
aeq =[];
beq =[];
xmin =零(12,1);
xmax=inf*ones(12,1);
x0 = xmin
[x,fmin]=linprog(f,A,b,Aeq,beq,xmin,xmax,x0);
整形(x,3,4),fmin
totalbox=sum(x)
(4)结果分析
上述过程的结果是:
ans =
0.0000 35.0000 0.0000 0.0000
20.0000 0.0000 0.0000 17.3777
0.0000 0.0000 33.0000 16.6223
fmin =
122.0000
totalbox =
122.0000
其中ans为Aij,总费用为122元,运输总箱数为122箱。也就是说,平均每盒成本为1元。
(5)启蒙
我们注重观察
成本和ans的关系
成本=
2 1 3 2
1 3 2 1
3 4 1 1
ans =
0.0000 35.0000 0.0000 0.0000
20.0000 0.0000 0.0000 17.3777
0.0000 0.0000 33.0000 16.6223
我们可以发现ans中的非元素对应的是cost中的1元素。
也就是说,对于J市场,它可以从三个ABC工厂进货。但是要让成本最接近,当然希望从运费最低的工厂采购。
首先,观察A,B,C和ABC。对于A、B、C来说,分别从三家BAC工厂贷款对他们来说是最划算的。当然,BAC的产量大于三个市场的需求。这三个市场都从BAC购买。
对于丁市场,其最低运费是两个BC厂,BC厂分别给丁市场20,33箱。他们离最大收益率还有2017。只要丁市场从这里拿走34箱。这两个没有先后之分,因为他们的运输成本是一样的。
因此,在这种情况下有多种解决方案。设BAC的三个工厂分别满足A、B、C三个市场,D的市场可以从BC的两个工厂采购34箱(而这34箱可以从B厂的20箱和C厂的17箱发货),考虑到箱数一般是整数。BC厂到丁市场的箱数可以组合如下。
乙厂丙厂
20 14
19 15
18 16
17 17