钢管订购和运输问题

Ø  摘要

l  应用最短路径的Floyd算法和灵敏度分析法建立一个以总费用为目标函数的非线性规划模型。

l  对于钢管订购和运输的总费用,分为三部分:购买钢管费用,由钢厂运送到站点的费用以及由站点开始铺设的费用。

l  对于由钢厂运送到站点的费用,利用MATLAB软件编程,用Floyd算法,求出铁路网和公路网的最短路径,然后转化为最少运输费用。

l  最后利用Lingo软件编程,求解非线性规划模型,解决问题。

 

Ø  关键词:Floyd算法,非线性规划,灵敏度分析

 

一、问题描述

要铺设一条A1-A2-…-A15的输送天然气的主管道,如图1所示。经筛选后可以生产这种主管道钢管的钢厂有S1,S2,…,S7。图中粗线表示铁路,单细线表示公路,双细线表示要铺设的管道(假设沿管道或者原来有公路,或者建有施工公路),圆圈表示火车站,每段铁路、公路和管道旁的阿拉伯数字表示里程(单位:km)。为方便计算,1km主管道钢管称为1单位钢管。

 

 

一家钢厂如果承担制造这种钢管,至少需要生产500个单位。钢厂Si在指定期限内能生产该钢管的最大数量为si个单位,钢管出厂销价1单位钢管为pi万元,见表1;1单位1钢管的铁路运价见表2。

 

表1  各钢管厂的供货上限及售价

表2  单位钢管的铁路运价

1000km以上每增加1-100km运价增加5万元。公路运输费用为1单位钢管每公里0.1万元(不足整千米部分按整千米计算)。钢管可由铁路、公路运往铺设地点(不只是运到点A1,A2…A15,而是管道全线)。

 

问题:

(1)请制定一个主管道钢管的订购和运输计划,使总费用最小(给出总费用)。

(2)请就(1)的模型分析:哪个钢厂钢管的销价的变化对购运计划和总费用影响最大,哪个钢厂钢管的产量的上限的变化对购运计划和总费用的影响最大,并给出相应的数字结果。

(3)如果要铺设的管道不是一条线,而是一个树形图,铁路、公路和管道构成网络,请就这种更一般的情形给出一种解决办法,并对图2按(1)的要求给出模型和结果。

 

 

二、问题分析

1、基本假设

l  钢管在运送使用过程中没有损耗

l  不考虑恶劣天气等突发情况对运输及铺设的影响

l  在求解钢厂钢管的销价对总费用的影响时,认为钢管的销价只会在一个小范围内变化,在求解钢厂钢管的生产上限对总费用的影响时,亦是如此。

2、符号说明

Si:第i个钢厂;i=1,..7

si:第i个钢厂的最大产量; i=1,..7

Aj :输送管道(主管道)上的第j个点; j=1,..15

Bi:公路和铁路的相交点; i=1,..17 :

pi:第i个钢厂1单位钢管的销价;i=1,..7

cij:1单位钢管从Si钢厂到铺设节点Aj的最小购运费

lj:管道第Aj段需要铺设的钢管量

xij:钢厂Si运到节点Aj的钢管量

yj:从节点Aj向左铺设的钢管量

zj:从节点Aj向右铺设的钢管量

W:最小总费用

 

三、模型构造与求解

1、订购运输铺设计划及总费用:

先计算从Si到Aj的最小购运费cij(即订购费用与运输费用之和),再根据cij求解最小总费用W(即订购费用、运输费用、铺设费用之和)

 

1)    运费矩阵的计算模型

①  构造铁路费用赋权图

l  用Floyd算法来计算铁路任意相邻两点间的最短距离值。

l  再根据题中的铁路运价表,求出铁路任意两点间的最少运费。

②  构造公路费用赋权图

l  用Floyd算法来计算公路任意相邻两点间运输的最少运费4

③  构造铁路公路费用的混合赋权图

l  由于可以铁路公路交叉运输,所以任意相邻两点间的最小运输费用为铁路、公路两者最小运输费用的最小值。即c=min(v,w)

l  用Floyd算法来图中任意相邻两点间运输的最少运费

假设:用Xi表示Bi、Si、Aj,其中B1-B17记为X1-X17,S1-S7记为X18-X24,A1-A15记为X25-X39

MATLAB程序见附录1

 

④  从运行结果中提取所需要的Si到Aj的最小运输费用。见表3

表3 最优路径单位钢管运输费用

 

S1

S2

S3

S4

S5

S6

S7

A1

170.7

215.7

230.7

260.7

255.7

265.7

275.7

A2

160.3

205.3

220.3

250.3

245.3

255.3

265.3

A3

140.2

190.2

200.2

235.2

225.2

235.2

245.2

A4

98.6

171.6

181.6

216.6

206.6

216.6

226.6

A5

38

111

121

156

146

156

166

A6

20.5

95.5

105.5

140.5

130.5

140.5

150.5

A7

3.1

86

96

131

121

131

141

A8

21.2

71.2

86.2

116.2

111.2

121.2

131.2

A9

64.2

114.2

48.2

84.2

79.2

84.2

99.2

A10

92

142

82

62

57

62

76

A11

96

146

86

51

33

51

66

A12

106

156

96

61

51

45

56

A13

121.2

171.2

111.2

76.2

71.2

26.2

38.2

A14

128

178

118

83

73

11

26

A15

142

192

132

97

87

28

2

任意两点间的最小运输费用加上出厂售价,得到单位钢管从任一个Si到Aj的最小购运费cij。

 

2)    总费用的数学规划模型

①  分析题目可以知道约束条件应包括以下几方面

Ø  钢厂产量约束:

l  引入0-1变量

 

将上式转化成线性约束:

Ø  运量约束:

记:xij:钢厂Si运到节点Aj的钢管量

      yj:从节点Aj向左铺设的钢管量

      zj:从节点Aj向右铺设的钢管量

      lj:管道第Aj段需要铺设的钢管量


②  根据以上条件可以建立如下数学规划模型

③  Lingo程序见附录2,由运行结果分析可得表4。

表4  问题一订购和运输方案及最小总费用

 

S1

S2

S3

S4

S5

S6

S7

订购量

800

800

1000

0

1190

1181

0

A1

0

0

0

0

0

0

0

A2

0

179

0

0

0

0

0

A3

0

137

141

0

230

0

0

A4

149

74

79

0

166

0

0

A5

186

110

116

0

203

0

0

A6

200

0

0

0

0

0

0

A7

265

0

0

0

0

0

0

A8

0

300

0

0

0

0

0

A9

0

0

664

0

0

0

0

A10

0

0

0

0

176

176

0

A11

0

0

0

0

415

0

0

A12

0

0

0

0

0

86

0

A13

0

0

0

0

0

333

0

A14

0

0

0

0

0

621

0

A15

0

0

0

0

0

165

0

订购总量

5171

总费用

1278632

 

2、   灵敏度分析

 

1)钢厂钢管的销售价格变化对购运计划和总费用的影响

 

当钢厂钢管销售价格变化时,会对购运计划和总费用造成影响. 为了更好地观察每一个钢厂钢管销售价格所造成的影响,采用比较法,即每次只让一个钢厂钢管的销售价格发生相同的变化,其余钢厂钢管的销售价格不发生变化。

我们将各个钢厂单位钢管的销价分别增加1万元和减少1万元,借助Lingo软件得出相应的总费用、运输方案、订购方案变化情况如表5、表6所示

表5  各个钢厂单位钢管的销价分别增加1万元

钢厂

总费用

总费用变化量

运输方案变化量

订购方案变化量

S1

1279432

800

0

0

S2

1279432

800

0

0

S3

1279632

1000

0

0

S4

1278632

0

0

0

S5

1279639

1007

40

30

S6

1279834

1202

712

712

S7

1278632

0

0

0

表6  各个钢厂单位钢管的销价分别减少1万元

钢厂

总费用

总费用变化量

运输方案变化量

订购方案变化量

S1

1277832

800

0

0

S2

1277832

800

0

0

S3

1277632

1000

0

0

S4

1278632

0

0

0

S5

1277263

1369

712

712

S6

1277068

1564

40

30

S7

1278632

0

0

0

由上述表格观察分析可得:S6钢厂销价变化对总费用影响最大,S5,S6钢厂钢管的销价的变化对购运计划影响最大。

 

2)、钢厂钢管产量的上限的变化对购运计划和总费用的影响

同样采用比较法,即每次只让一个钢厂钢管产量的上限的发生相同的变化,其余钢厂钢管产量的上限不发生变化. 将各个钢厂的产量的上限分别增加100个单位和减少100个单位,分别计算,得到购运计划和总费用变化情况如表7、表8所示.

表7  各个钢厂钢管的产量的上限分别增加100个单位

钢厂

总费用

总费用变化量

运输方案变化量

订购方案变化量

S1

1268332

10300

218

200

S2

1275132

3500

404

200

S3

1276132

2500

1786

200

S4

1278632

0

0

0

S5

1278632

0

0

0

S6

1278632

0

844

0

S7

1278632

0

0

0 

表8  各个钢厂钢管的产量的上限分别减少100个单位

钢厂

总费用

总费用变化量

运输方案变化量

订购方案变化量

S1

1288932

10300

260

200

S2

1282132

3500

1244

200

S3

1281132

2500

200

200

S4

1278632

0

0

0

S5

1278632

0

0

0

S6

1278632

0

0

0

S7

1278632

0

0

0

 由上述表格观察分析可得:S1 钢厂钢管的产量的上限的变化对总费用影响最大,购运计划影响较小。


3、   树状管道图的订购运输铺设计划及总费用

 

问题(3)要铺设的管道不是一条线,而是一个树形图。铁路、公路和管道构成的网络时,只是在路线图中增加了四条公路,与问题(1)没有本质的区别。

因此,我们同样运用Floyd最短路径算法求得最小费用矩阵及最小费用路线矩阵。在模型上,第(3)问的模型只是第(1)问模型的扩展延伸,本质上是一样的。因此,可得模型为:

 

修改问题(1)的MATLAB和Lingo程序求解得到:

S1

S2

S3

S4

S5

S6

S7

最小费用

800

800

1000

0

1303

2000

0

1406331

 

 

四、优缺点改进

1.优点

1)本问题中运用了求网络中最短路径的Foyld思想,改进和修改得到新的算法,可对含多种权重计算方式的网络进行搜索,算出两点之间的最优路径,计算结果准确,从而得出相应的购运单价的矩阵.

2)本问题构造出的模型算法较简单,也可以运用相应的其他编程软件来得到比较满意的结果.

2.缺点

1)由于题意中不考虑铁路公路间转运的中转费用,也不限制转运次数,因此在算法设计中存在着考虑不周全的缺限,如我们考虑是先通过铁路再通过公路到铺设点,但这不一定是最小费用路径,有可能先通过公路,然后经铁路再经公路运到铺设点,费用更少,这里没有理论证明。

2) 问题二要求根据问题一的分析,指出哪家钢厂销价的变化对购运计划和总费用影响最大,哪家钢厂钢管产量的上限的变化对购运计划和总费用的影响最大,并给出相应的数字结果. 这个问题属于规划问题的灵敏度分析,在此模型中,只是通过说明销价增加一万元,减少一万元来说明,并没有给出一般的理论说明。

3.模型改进

这个数学模型可以应用于西部开发中“西气东送”问题,当然,西部开发中“西气东送”问题远比我们的假设还要复杂的多,但无论如何,他们的本质一样。

五、附录

1、   MATLAB程序:

%用Floyd算法来计算任意两点间的最短铁路距离值
clc;clear;

n=39;
u=zeros(n);
u(1,3)=450;u(2,3)=80;u(3,5)=1150;u(5,8)=1100;u(8,19)=1200;
u(8,18)=202;u(18,7)=20;u(7,6)=195;u(6,4)=306;u(8,9)=720;
u(9,20)=690;u(9,10)=520;u(10,12)=170;u(12,21)=690;u(12,11)=88;
u(11,22)=462;u(12,14)=160;u(14,13)=70;u(14,15)=320;u(15,16)=160;
u(16,23)=70;u(16,17)=290;u(17,24)=30;
u=u+u';%与其转置矩阵相加,得到对称矩阵
u(u==0)=inf;%把所有零元素换成无穷
u([1:n+1:n*24])=0;%其中24*24矩阵的对角线元素替换成0(MATLAB中数据是逐列存储的)
for k=1:n
    for i=1:n
        for j=1:n
            if u(i,j)>u(i,k)+u(k,j)
               u(i,j)=u(i,k)+u(k,j);
            end
        end
    end
end
%将最短铁路距离转换成最少铁路费用
v=zeros(n);
for i=1:n
    for j=1:n
        if u(i,j)==inf 
                v(i,j)=inf; 
        elseif u(i,j)==0 
                v(i,j)=0;  
        elseif 1<=u(i,j)&&u(i,j)<=300%注意不要写成1<=u(i,j)<=300,以下同
                v(i,j)=20; 
        elseif 301<=u(i,j)&&u(i,j)<=350
                v(i,j)=23;
        elseif 351<=u(i,j)&&u(i,j)<=400
                v(i,j)=26;
        elseif 401<=u(i,j)&&u(i,j)<=450
                v(i,j)=29;
        elseif 451<=u(i,j)&&u(i,j)<=500
                v(i,j)=32;
        elseif 501<=u(i,j)&&u(i,j)<=600
                v(i,j)=37;
        elseif 601<=u(i,j)&&u(i,j)<=700 
                v(i,j)=44;
        elseif 701<=u(i,j)&&u(i,j)<=800 
                v(i,j)=50;
        elseif 801<=u(i,j)&&u(i,j)<=900
                v(i,j)=55;
        elseif 901<=u(i,j)&&u(i,j)<=1000
                v(i,j)=60;
        elseif u(1,j)>1000
             v(i,j)=ceil((u(i,j)-1000)/100)*5+60;%ceil的作用是向正无穷方向取整
        end
    end
end
for i=1:n
    for j=1:n
        v(j,i)=v(i,j);
    end
end

%用Floyd算法来计算任意两点间的最短公路距离值
w=zeros(n);
w(25,26)=104;w(26,27)=301;w(27,28)=750;w(28,29)=606;w(29,30)=194;
w(30,31)=205;w(31,32)=201;w(32,33)=680;w(33,34)=480;w(34,35)=300;
w(35,36)=220;w(36,37)=210;w(37,38)=420;w(38,39)=500;w(26,1)=3;
w(27,2)=2;w(28,5)=600;w(29,4)=10;w(30,6)=5;w(31,7)=10;w(31,18)=31;
w(32,8)=12;w(33,9)=42;w(34,10)=70;w(35,11)=10;w(36,13)=10;
w(37,15)=62;w(38,23)=110;w(38,16)=30;w(39,17)=20;w(39,24)=20;
w=w+w';%与其转置矩阵相加,得到对称矩阵
w(w==0)=inf;%把所有零元素换成无穷
w([1:n+1:n^2])=0;%对角线元素替换成0(MATLAB中数据是逐列存储的)
for k=1:n
    for i=1:n
        for j=1:n
            if w(i,j)>w(i,k)+w(k,j)
               w(i,j)=w(i,k)+w(k,j);
            end
        end
    end
end
%将最短公路距离转换成最少公路费用
w=0.1*w;

%用Floyd算法来计算任意两点间的最少费用
c=min(v,w);
for i=1:n
    for j=1:n
         if c(i,j)>v(i,k)+w(k,j)
               c(i,j)=v(i,k)+w(k,j);
         end
     end
end

%输出c
c

2、   Lingo程序:

model:
!钢管购买与运输铺设;

sets:
!cj表示厂家,md表示目的地;
 cj/1..7/:p,s,t;
 md/1..15/:y,z,D;
 link(cj,md):cost,x;
endsets

data:
     s=800 800 1000 2000 2000 2000 3000;
     D=104,301,750,606,194,205,201,680,480,300,220,210,420,500,0; 
     p=160,155,155,160,155,150,160;
    cost=170.7 160.3 140.2 98.6  38.0  20.5  3.1   21.2  64.2  92.0  96.0  106.0 121.2 128.0 142.0 
         215.7 205.3 190.2 171.6 111.0 95.5  86.0  71.2  114.2 142.0 146.0 156.0 171.2 178.0 192.0 
         230.7 220.3 200.2 181.6 121.0 105.5 96.0  86.2  48.2  82.0  86.0  96.0  111.2 118.0 132.0 
         260.7 250.3 235.2 216.6 156.0 140.5 131.0 116.2 84.2  62.0  51.0  61.0  76.2  83.0  97.0 
         255.7 245.3 225.2 206.6 146.0 130.5 121.0 111.2 79.2  57.0  33.0  51.0  71.2  73.0  87.0 
         265.7 255.3 235.2 216.6 156.0 140.5 131.0 121.2 84.2  62.0  51.0  45.0  26.2  11.0  28.0 
         275.7 265.3 245.2 226.6 166.0 150.5 141.0 131.2 99.2  76.0  66.0  56.0  38.2  26.0  2.0;
enddata

!目标函数;
   min=w;
   w=@sum(link(i,j):(p(i)+cost(i,j))*x(i,j))+0.1/2*@sum(md(j):y(j)^2+y(j)+z(j)^2+z(j));

!约束条件;
     @for(cj(i):@sum(md(j):x(i,j))>=500*t(i);
                     s(i)*t(i)>=@sum(md(j):x(i,j));
                     @bin(t(i)));
     @for(md(j):@sum(cj(i):x(i,j))=y(j)+z(j));
     @for(md(j)|j#ne#15:D(j)=y(j)+z(j+1));
     z(15)=0;y(1)=0;
     @gin(@sum(link(i,j):x(i,j)));

end

   


阅读更多
个人分类: 数学建模
想对作者说点什么? 我来说一句

lingo运输问题解决例题

2009年04月05日 5KB 下载

运输问题的解法

2006年02月23日 68KB 下载

数学建模垃圾运输问题

2009年05月08日 241KB 下载

2000年B题钢管运输订购

2009年08月29日 19.62MB 下载

钢管订购运输

2012年08月11日 6KB 下载

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭