MatLab运输问题高手进

2025-02-18 13:38:5798 次浏览

最佳答案

简单地写了一些(分析部分,你好好看一下,应当可以看得懂,多看一两遍,自己总结一下,我可能描述得不准)

(1)问题分析:

运输费=运输单价*运输量。这里要求是总运输费最低,也就是说规划的目标函数是使得运输费最小。

约束条件有:

a.ABC三个工厂生产能力存在上限,当然也存在下限(产量为0)

b.至少应甲乙丙丁四个市场的需求量。

(2)符号说明:

xij代表i工厂给j市场的箱数,当然这里i=1,2,3分别代表ABC;j=1,2,3,4分别代表甲乙丙丁

costij代表i工厂运到j市场每箱的运输费。由题意得cost=[2,1,3,2;1,3,2,1;3,4,1,1];

proi代表i工厂生产的总箱数,很明显proi=sum(xij,j,1,4)-----注意这里引入的东西是说对j从1到4求和。即xi1+xi2+xi3+xi4

needj代表j市场的实际进货,很明显needj=sum(xij,i,1,3)----同上

根据"问题分析"我们可以得到规划

目标:min f=sum(sum(costij.*xij,i,1,3),j,1,4)

约束条件:

xij>=0 其中i=1,2,3;j=1,2,3,4

pro1=sum(x1j,j,1,4)<=60

pro2=sum(x2j,j,1,4)<=40

pro3=sum(x3j,j,1,4)<=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转成列向量)

clear

cost=[2,1,3,2;1,3,2,1;3,4,1,1];

f=cost(:);%目标

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=zeros(12,1);

xmax=inf*ones(12,1);

x0=xmin;

[x,fmin]=linprog(f,A,b,Aeq,beq,xmin,xmax,x0);

reshape(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)启示

我们注意观察

cost与ans的关系

cost =

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三个厂进货。但是要使得费用最近,当然是希望从运费最低的那个厂进货。

先观察甲乙丙和ABC,对于甲乙丙来说,他们分别从BAC三个厂进贷是最合算的,当然BAC的产量都大于甲乙丙三个市场的需求量。这三个市场都从BAC那里进货。

对于丁市场来说,它的最低运费的有BC两个工厂,而BC工厂分别给甲丁两个市场20,33个箱。它们离最大的产量还剩20,17。只要丁市场从这里取34箱就可以了。对于这两个就没有什么优先性,因为它的运输费是一致的。

所以本例存在多解情况,先让BAC三个工厂分别满足甲乙丙三个市场,丁市场从BC两个工厂进货34箱即可(而这34箱从B厂的20箱和C厂的17箱里面运出即可),考虑到箱数一般为整数。BC厂给丁市场的箱数可有以下几种组合

B厂 C厂

20 14

19 15

18 16

17 17

声明:知趣百科所有作品均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请在页面底部查找“联系我们”的链接,并通过该渠道与我们取得联系以便进一步处理。