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