钢管订购和运输求解1Word文件下载.docx

上传人:b****3 文档编号:16792052 上传时间:2022-11-26 格式:DOCX 页数:28 大小:224.96KB
下载 相关 举报
钢管订购和运输求解1Word文件下载.docx_第1页
第1页 / 共28页
钢管订购和运输求解1Word文件下载.docx_第2页
第2页 / 共28页
钢管订购和运输求解1Word文件下载.docx_第3页
第3页 / 共28页
钢管订购和运输求解1Word文件下载.docx_第4页
第4页 / 共28页
钢管订购和运输求解1Word文件下载.docx_第5页
第5页 / 共28页
点击查看更多>>
下载资源
资源描述

钢管订购和运输求解1Word文件下载.docx

《钢管订购和运输求解1Word文件下载.docx》由会员分享,可在线阅读,更多相关《钢管订购和运输求解1Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。

钢管订购和运输求解1Word文件下载.docx

3000

160

155

150

1单位钢管的铁路运价如下表:

里程(km)

≤300

301~350

351~400

401~450

451~500

运价(万元)

20

23

26

29

32

501~600

601~700

701~800

801~900

901~1000

37

44

50

55

60

注:

1000km以上每增加1至100km运价增加5万元。

公路运输费用为1单位钢管每公里0.1万元(不足整公里部分按整公里计算)。

钢管可由铁路、公路运往铺设地点(不只是运到点

,而是管道全线)。

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

(2)请就

(1)的模型分析:

哪个钢厂钢管的销价的变化对购运计划和总费用影响最大,哪个钢厂钢管的产量的上限的变化对购运计划和总费用的影响最大,并给出相应的数字结果。

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

(1)的要求给出模型和结果。

2、运费矩阵的计算模型

问题分析:

我们只考虑本题第一问的求解。

首先,所有钢管必须要运到天然气主管道铺设线上的节点

,然后才能向左或右铺设,因此,必须求出从每个钢管厂

(记为i=1,……,7)到每个节点

(记为j=1,……,15)的每单位钢管最小运费Cij(不妨称为运费矩阵)及其对应的运输方式和线路。

因为题目中没有给出装卸成本,我们简单假设总是采用最经济的运输方式,虽然这个铺设在实际中可能不太接近现实,也就是说,在运输过程中需要多次装卸也是允许的(如铁路转公路,再转铁路,等等)。

自然的想法是运输路线应该是走最短路径,但由于有两种运输和计价方式(铁路和公路),公路运输费用为1单位钢管每公里0.1万元(不足整公里部分按整公里计算),运费是路程的线性函数;

然而,铁路运费要通过运输里程查表得到,是一个阶梯函数。

这两种计价方式混合在一起,使得我们不能直接在整个铁路、公路混合的运输网络上计算最短路径作为运输路线,但可以分析分别在铁路、公路网上技计算最短路径,然后换算成相应的费用;

最后在整个网络上以两个子网上相应的运费为权,再求一次最短路问题,就可以把它们统一成一个标准的运费矩阵。

铁路子网络:

假设铁路运输线应该是走最短路径,而且采用连续路径计价方式一定优于分段计价方式(其实题中数据并不符合这一规定。

例如题中650km的运价为44万元,而分成300km和350km两段计价只需要43万元,这种情况不太符合实际,可能是每题时选择数据的疏忽,我们不过多考虑这种情况)。

这时,我们可以把铁路运输子网独立出来,在这个网络上计算任意两个节点i,j之间的最短路径长度dij1,然后按照这个最短路长度查铁路运价表得到最小费用Cij1。

在无向网络上求任意两点之间最短路径算法很多,尤其对本题这种弧上的权(距离)全为正数的情况,存在相对比较的算法。

例如,求任意两点之间最短路径的Floyd-Warshall算法是(可参阅网络优化的有关书籍)

(24)

 

这实际上是一种标号算法,其中n是网络节点数(节点编号为1,2,……,n);

wij是给定的网络上相邻节点i,j之间的直接距离(i,j不相邻时取wij充分大就可以了);

uij(k)可以看成是任意两个节点i,j之间距离的中间迭代值,(或称为临时编号),即从节点i到j但不允许经过其他节点k,k+1,……,n时的最短距离;

自然uij(k+1)就是i,j之间的最短距离(或称为永久标号),即dij1。

下面说明如何用LINGO软件求最短路。

对图中节点编号(除已经编号的节点si、Ai外,在增加编号B1……B17,如图所示)。

实际上如果令铁路运输子网以外的节点间的距离为充分大,就可以把整个铁路、公路网络放在一起考虑。

这样虽然增加了问题的规模,但对于最后将两个网络合并起来考虑是有利的。

所以我们采用这种想法来做。

对于本题,我们设这个充分大的数为BIG=20000(km),显然这已经足够大了。

相应的LINGO程序如下(简要解释参见程序中的注释语句):

model:

!

铁路运输网的运费计算;

SETS:

!

NOTES表示节点集合;

NODES/S1,S2,S3,S4,S5,S6,S7,

A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,

B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17/;

派生集合ROADS表示的是网络中的直接连接的道路(弧),

由于并非所有节点间都有道路直接连接,所以将弧具体列出,这是稀疏集合;

ROADS(NODES,NODES)/

要铺设的管道;

A1,A2A2,A3A3,A4A4,A5A5,A6A6,A7A7,A8A8,A9A9,A10A10,A11

A11,A12A12,A13A13,A14A14,A15

公路网;

B1,A2B2,A3B5,A4B4,A5B6,A6B7,A7S1,A7B8,A8B9,A9,B10,A10,

B11,A11B13,A12B15,A13S6,A14B16,A14B17,A15S7,A15

铁路网;

B1,B3B2,B3B3,B5B4,B6B6,B7B7,S1B5,B8B8,S1B8,S2B8,B9

B9,S3B9,B10B10,B12B12,B11B11,S5B12,S4B12,B14B14,B13

B14,B15B15,B16B16,S6B16,B17B17,S7

距离W0(i,j)是节点i到j的直接距离(已知);

/:

W0;

属性W表示基本的权矩阵(直接距离,考虑对称性并增加对不相邻弧的考虑),

D1(i,j)表示节点i到j的最优行驶路线的路长,

C1(i,j)表示节点i到j铁路运输的最小单位运价(万元);

LINK(NODES,NODES):

W,D1,C1;

属性U表示迭代过程的权矩阵(临时标号);

NNN(Nodes,nodes,nodes):

U;

ENDSETS

DATA:

针对铁路网计算时,将公路网的距离定为充分大(BIG=20000);

BIG=20000;

W0=20000200002000020000200002000020000200002000020000

20000200002000020000

20000200002000020000200002000020000200002000020000

20000200002000020000200002000020000

4508011503061952011002021200720

6905201708846269016070

3201607029030;

输出费用C1到文本文件中,以备后用;

@TEXT(TrainCost.txt)=@writefor(nodes(i):

@writefor(nodes(j):

@format(c1(i,j),'

5.0f'

)),@newline

(1));

ENDDATA

CALC:

无向网络,根据给定的直接距离具有对称性,得到初始距离矩阵;

@FOR(LINK(i,j)|@IN(ROADS,i,j):

W(i,j)=W0(i,j);

W(j,i)=W0(i,j);

);

@FOR(LINK(i,j)|i#eq#j:

W(i,j)=0);

所有无直接连接的节点间的距离定为充分大;

@FOR(LINK(i,j)|i#ne#j#and##not#@IN(ROADS,i,j)#and#

#not#@IN(ROADS,j,i):

W(i,j)=BIG;

W(j,i)=BIG;

以下三个循环语句就是最短路计算公式(Floyd-Warshall算法);

k=1的初值;

@FOR(NNN(i,j,k)|k#eq#1:

U(i,j,k)=W(i,j));

迭代过程;

@For(nodes(k)|k#lt#@size(nodes):

@FOR(LINK(i,j):

U(i,j,k+1)=

@if(U(i,j,k)#le#U(i,k,k)+U(k,j,k),

U(i,j,k),U(i,k,k)+U(k,j,k))));

最后一次迭代得到D1;

@FOR(NNN(i,j,k)|k#eq#@size(nodes):

D1(i,j)=

U(i,j,k),U(i,k,k)+U(k,j,k)));

以下就是按最短路D1查找相应运费C1的计算公式;

@FOR(LINK|D1#eq#0:

C1=0);

@FOR(LINK|D1#gt#0#and#D1#le#300:

C1=20);

@FOR(LINK|D1#gt#300#and#D1#le#350:

C1=23);

@FOR(LINK|D1#gt#350#and#D1#le#400:

C1=26);

@FOR(LINK|D1#gt#400#and#D1#le#450:

C1=29);

@FOR(LINK|D1#gt#450#and#D1#le#500:

C1=32);

@FOR(LINK|D1#gt#500#and#D1#le#600:

C1=37);

@FOR(LINK|D1#gt#600#and#D1#le#700:

C1=44);

@FOR(LINK|D1#gt#700#and#D1#le#800:

C1=50);

@FOR(LINK|D1#gt#800#and#D1#le#900:

C1=55);

@FOR(LINK|D1#gt#900#and#D1#le#1000:

C1=60);

@FOR(LINK|D1#gt#1000:

C1=60+5*@floor(D1/100-10)

+@if(@mod(D1,100)#eq#0,0,5));

ENDCALC

end

其实,这个LINGO模型中的计算过程完全是在计算(CALC)段完成的,所以LINGO很容易就得到了结果,相应的费用存放在文本文件TrainCost.txt中,这是一个39行,每行39个数据的文件,即铁路运输费用。

为节省篇幅,我们这里略去这个文件的具体内容,但应注意,上面文件中,对应费用大于1000时,其实就等价于这两点无法仅仅通过铁路相互到达。

【20000km,费用1010万元,60+(20000-1000)*5/100=60+950=1010】

公路子网络

类似地,可以假设公路运输路线应该是走最短路径,把公路运输子网独立出来,在这个网络上计算任意两个节点i,j之间的最短路长度,然后按照这个最短路长度dij2乘以0.1得到最小运费Cij2。

(因为公路运输费用为1单位钢管每公里0.1万元)。

此时,上面的LINGO模型中除了将C1改为C2,D1改为D2外,主要还需作以下修改

(1)初始的直接距离W0需要修改,新的数据段为:

针对公路网计算时,将铁路网的距离定为充分大(BIG=20000);

W0=104301750606194205201680480300

220210420500

326001051031124270

101062110302020

2000020000200002000020000200002000020000

2000020000200002000020000;

输出费用C2到文本文件中,以备后用(因为有小数,格式也变化了,否则一行太长);

@TEXT(TruckCost.txt)=@writefor(nodes(i):

c2(i,j),@newline

(1)));

(2)从距离转化成费用的语句需要修改为:

以下就是按最短路D2查找相应运费C2的计算公式;

@FOR(LINK:

C2=.1*D2);

作以上修改后,用LINDO求解得到相应的费用,存放在文本TruckCost.txt中,这是一个1521行,每行一个数据的文件,即公路运输费用。

这个文件中,对应费用等于2000时,其实等价于这两点无法仅仅通过公路相互到达。

相应的LINGO程序如下

公路运输网的运费计算;

A1,A2,A3,A4,A5,A6,A7,A8,A9,A10,A11,A12,A13,A14,A15,

B1,B2,B3,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17/;

属性W表示基本的权矩阵(直接距离),

D2(i,j)表示节点i到j的最优行驶路线的路长,

C2(i,j)表示节点i到j公路运输的最小单位运价(万元);

W,D2,C2;

输出费用C2到文本文件中,以备后用(因为有小数,格式也变化了);

@FOR(LINK(i,j)|i#ne#j#and##not#@IN(ROADS,i,j)

#and##not#@IN(ROADS,j,i):

D2(i,j)=

购运费用矩阵

在此基础上,就可以将以上两个子网络(需要分别看成两个完全子图)组合成一个网络,每条弧上相应的运费Cij1或Cij2为权(如果某条弧(i,j)上既有铁路运费Cij1,又有公路运费Cij2,只需取其中较小的一个即可)。

此时,再计算从每个钢管厂S1,S2……S7(记为i=1,2,……,7),到每个节点A1,A2,……,A15(记为j=1,2,……,15)的最短路,得到的就是每单位钢管的最小运费Cij.。

算法仍然可以采用Floyd-Warshall算法,完全类似地修改LINDO程序如下:

铁路公路混合运输网的运费计算;

B14,B15B15,B16B16,S6B16,B17B17,S7/;

属性W表示基本的权矩阵(由C1、C2得到),

C1(i,j)表示节点i到j铁路运输的最小单位运价(万元),

C2(i,j)表示节点i到j公路运输的最小单位运价(万元),

C(i,j)表示节点i到j混合运输的最小单位运价(万元);

W,C1,C2,C;

读出前面刚刚计算得到的结果;

C1=@);

C2=@);

输出费用C到文本文件中,以备后用;

@TEXT(FinalCost.txt)=@writefor(nodes(i)|i#le#7:

@writefor(nodes(j)|j#ge#8#and#j#le#22:

@format(c(i,j),'

6.1f'

得到初始距离矩阵;

W=@if(C1#le#C2,C1,C2));

C(i,j)=

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 能源化工

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1