南邮运筹学实验2:运输问题
题目:某企业集团有 3个生产同类产品的工厂,生产的产品由 4个销售中心出售,各工厂的生产量、各销售中心的销售量(假定单位均为吨)、各工厂到各销售点的单位运价(元/吨)示于表1中。要求研究产品如何调运才能使总运费最小。
表1 产销平衡表和单位运价表
销地 运价 产地 | B1 B2 B3 B4 | 产量 |
A1 A2 A3 | 3 12 3 9 1 9 2 8 7 4 10 5 | 6 4 9 |
销量 | 2 8 5 5 |
|
解:
一、建立模型
这是一道运输问题。写出目标函数,求运输费用最小值。
在这之前,发现是产销不平衡问题,增加一个虚拟产地。
先设A1产地运往B1销地为:x11。以此类推,自变量设为:
A1产地:x11,x12,x13,x14。
A2产地:x21,x22,x23,x24。
A3产地:x31,x32,x33,x34。
A4产地:x41,x42,x43,x44。
所以,目标函数为:
max z = 3x11+12x12+3x13+9x14+x21+9x22+2x23+8x24+7x31+4x32+10x33+5x34+0x41+0x42+0x43+0x44
约束条件为:
x11+x12+x13+x14=6
x21+x22+x23+x24=4
x31+x32+x33+x34=9
x41+x42+x43+x44=1
x11+x21+x31+x41≤2
x12+x22+x32+x42≤8
x13+x23+x33+x43≤5
x14+x24+x34+x44≤5
xij≥0,i,j=1,2,3,4
二、计算过程
1. Excel
写出单位运价表:
写出运输量表:
产量位置,输入公式:=SUM(D11:G11)
把产地A1运往销地B1,B2,B3,B4四个地方的运输量加起来,以此类推,其他三个产地也是如此输入公式。
销量位置,输入公式:=SUM(D11:D14)
把运往销地B1的四个产地的运输量加起来,以此类推,其他三个销地也是如此输入公式。
总费用位置,输入公式:=SUMPRODUCT(D4:G7,D11:G14)
把单位运价表数据和运输量数据都放进函数SUMPRODUCT中。
得出结果:
2. Lingo
model:
!4发点4收点运输问题,增加了一个虚拟产地;
sets:
warehouses/wh1..wh4/: capacity;
vendors/v1..v4/: demand;
links(warehouses,vendors): cost, volume;
endsets
!目标函数;
min=@sum(links: cost*volume);
!需求约束;
@for(vendors(J):
@sum(warehouses(I): volume(I,J))=demand(J));
!产量约束;
@for(warehouses(I):
@sum(vendors(J): volume(I,J))<=capacity(I));
!这里是数据;
data:
capacity=6 4 9 1;
demand=2 8 5 5;
cost=3 12 3 9
1 9 2 8
7 4 10 5
0 0 0 0;
enddata
end
3. Matlab
F = [3 12 3 9 1 9 2 8 7 4 10 5 0 0 0 0];
m = [1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1
1 0 0 0 1 0 0 0 1 0 0 0 1 0 0 0
0 1 0 0 0 1 0 0 0 1 0 0 0 1 0 0
0 0 1 0 0 0 1 0 0 0 1 0 0 0 1 0
0 0 0 1 0 0 0 1 0 0 0 1 0 0 0 1];
n = [6 4 9 1 2 8 5 5];
M = [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];
[v,e] = linprog(F,[],[],m,n,M)
x = reshape(v,4,4);
x = x'
F表示单位运价。
m表示八个约束条件方程。
N表示产量和销量。
M表示自变量都≥0。
reshape:先把v矩阵按列拆分,然后拼接成一个大小为4*4的向量。
版权声明:本文为博主原创文章,未经博主允许不得转载。