钢管运输优化模型

基于贪心算法的钢管运输策略

【摘要】

本文主要对钢管订购和运输费用最小化建立模型进行设计,根据订购钢管的费用、运输钢管的费用、铺设钢管的费用使得总使用费用最少来建立最优化模型,并设计算法,利用lingo编程求解

针对问题,在已知钢厂制作钢管及其制作量的最大值与钢厂到达不同铺设点的路径距离及其铁路,公路每公里多少的运费,来求出总需要费用的最小值

关键词:迪杰斯特拉算法、邻接矩阵、Lingo编程

  • 问题重述

  1. 引言

本题主要是铺设一条A1A2AjA15的运输天然气管道,生产这样钢管的钢厂有S1,S2,Si,S7。在从各个厂家生产钢管的价格,厂家运输钢管到A1A2AjA15的运输费用,不同地点铺设道路的费用。一个钢厂如果承担制造这种钢管,至少需要生产500个单位。钢厂在指定期限内能生产该钢管的最大数量为si个单位,钢管出厂销价1单位钢管为万元,如下表:

1

2

3

4

5

6

7

800

800

1000

2000

2000

2000

3000

160

155

155

160

155

150

160

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

里程(km)

≤300

301~350

351~400

401~450

451~500

运价(万元)

20

23

26

29

32

里程(km)

501~600

601~700

701~800

801~900

901~1000

运价(万元)

37

44

50

55

60

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

公路运输费用为1单位钢管每公里0.1万元(不足整数公里部分按整数公里计算)。钢管可由铁路、公路运往铺设地点(不只是运到点,而是管道全线)。

具体地点参考下图

A1

3

2

5

80

10

10

31

20

12

42

70

10

88

10

70

62

70

30

20

20

30

450

104

301

750

606

194

205

201

680

480

300

220

210

420

500

600

3060

195

202

720

690

520

170

690

462

160

320

160

110

290

1150

1100

1200

A2

A3

A4

A5

A6A11

A711A11

A8A11

A911A11

A10

A11

A12

A13

A14

A15

S1

S2

S3

S4

S5

S6

S7

图一

  1. 问题提出

根据不同厂家最多生产钢管的数量及价格,结合不同厂家运输到不同地点需要运费多少的数据建立线性整数规划模型;

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

  • 问题分析

本题主要是针对选择不同厂家制作管道运输到铺路地点所需要的最少费用建立优化模型进行求解,在一定约束条件下的非线性优化问题,由题意知,建立以总费用为目标函数来建立优化模型进行求解。总费用z由钢管的订购费用、钢厂到铺设点的运输费以及铺设点到铺设点的运输费三部分组成。

  1. 钢管的订购费用

钢管总的订购费用可在每个钢管的购买量与每个钢厂的制作钢管单个费用通过的线性运算得到。在每个钢厂购买的钢管量必须大于500km ,否则不能在该厂购买。构造一个“0-1”变量fi,那么当f不等于0时,表示在第i个钢厂购买大于500km的钢量,反之表示则不在第i个钢厂购买。

2、钢厂的运输钢管的费用

得到每个钢厂到铺设点的运输费需先知道每个钢厂到各个站点的钢管输送量,以及所选择的路线即铁路总长和公路总长,所以需要首先计算出各个钢厂到每个铺设点的最佳运输路径,使得平均单位公里的运输费用最小。在这里,可以列出每个钢厂到达铺设点的可能路径,然后根据每条路径的铁路和公路里程数计算出平均每公里运输费用最小的一条,最后将所有计算出花费最少费用的路径建立一个“7*15”的邻接矩阵。以此计算出所有钢厂到所有铺设点需要运输费用最少路径。

3、铺设费用

在铺设点到铺设点的运输费问题上,假设以1km为单位进行铺设,即铺设中车每向前开1km 便将1km 的钢管放下。由于铺设管道是线型的,除了两个端点外,每个站点需要往两边进行铺设管道。所以,假设第j个站点往左、右边铺设管道为rjlj公里,则由站点到铺设地点的运输费就可以通过等差数列求和得到。

  • 符号说明

Pi

i个钢管的价格

xij

从钢厂si运输到铺设点Ai的钢管数量

si

不同生产钢管的钢厂

rj

Aj向右铺设的钢管路径

lj

Aj向左铺设的钢管路径

dj

两点之间铺设的路径

fi

0-1变量

Aj

j个铺设点

aij

运输费用

X0

订购钢管的费用

X1

运输钢管费用

X2

铺设钢管的费用

z

订购和运输钢管的总费用

  • 模型假设
  1. 一个钢厂如果承担制造这种钢管,至少需要生产500单位钢管;
  2. 钢管的铺设是全线的,而不只是运到点A1A2AjA15中;
  3. 钢厂的钢管价格不随订购数量的改变而变化;
  4. 运费只按照铁路与公路行驶的路径进行计算;
  5. 铺设管道时除去端点铺设点,其余都能从左右进行铺设。

  • 模型建立与求解

1.钢管订购量

总订购钢管的费用应该为15个铺设点在第i个钢厂的购买量与该钢厂需要的价钱相乘的总和。

X0=i=17j=115pixij (i=1,2,⋯,7;j=1,2,⋯,15)

2.运输钢管费用

不同钢厂到与之相邻不同铺设点的矩阵,下列模型为钢厂到达铺设点通过的路径需要的费用。

X1=i=17j=115aijxij(i=1,2,⋯,7;j=1,2,⋯,15)

邻接矩阵D:

A1

A2

A3

A4

A5

A6

A7

A8

s1

170.7

160.3

140.2

98.6

38

20.5

3.1

21.2

s2

215.7

205.3

190.2

171.6

111

95.5

86

71.2

s3

230.7

220.3

200.2

181.6

121

105.5

96

86.2

s4

260.7

250.3

235.2

216.6

156

140.5

131

116.2

s5

255.7

245.3

225.2

206.6

146.0

130.5

121

111.2

s6

265.7

255.3

235.2

216.6

156

140.5

131

121.2

s7

275.7

265.3

245.2

226.6

166

150.5

141

131.2

A9

A10

A11

A12

A13

A14

A15

s1

64.2

92

96

106

121.2

128

142

s2

114.2

142

146

156

171.2

178

192

s3

48.2

82

86

96

111.2

118

132

s4

84.2

62

51

61

76.2

83

97

s5

79.2

57

33

51

71.2

73

87

s6

84.2

62

51

45

26.2

11

28

s7

99.2

77

66

56

38.2

26

2

3.对于铺设管道路径

在第j个站点往左、右边铺设管道为rjlj公里,则由铺设点到铺设点的运输费就可以通过等差数列求和得到。

X2=0.1j=115lj1+lj2+j=115rj1+rj2(i=1,2,⋯,7;j=1,2,⋯,15)

4.确定目标

要求出需要的最小费用,设订购钢管的费用为X0,运输钢管费用为X1,铺设钢管的费用为X2,可确定目标如下。

z=X0+X1+X2

5.约束条件

(1)钢厂制作钢管个数的约束

根据题目可知,每个钢厂是以500个钢管为基础开始制作。

500≤J=115xijsi(j=1.2…..15)

(2)“0-1”变量的约束

本题可以考虑到钢厂制作钢管不足500个的情况来进行“0-1”变量的设置。

fij0,1(i=1.2…7)(j=1.2…15)

(3)两个变量的约束

总需要的钢管长度与铺设点左右铺设钢管的约束。

i=17xij=rj+lj              (  i=1,2,⋯,7)(j=1,2,⋯,15 )

(4)整数小数的约束

求出最小花费的价钱,可以得出花费的费用不能够为负数,列出以下条件

xijN*  (i=1,2,⋯,7)(j=1,2,⋯,15)

6.模型的建立与求解

Min       z=i=17j=115pixij+i=17j=115aijxij+0.1j=115lj1+lj2+j=115rj1+rj2

&500fij=115xijsifi                i=1,2,⋯,7;j=1,2,⋯,15&rj+lj+1=dj                            j=1,2,⋯,14&i=17xij=rj+lj                         i=1,2,⋯,7;j=1,2,⋯,15 &fi0,1                                 i=1,2,⋯,7&xijN*                                  i=1,2,⋯,7;j=1,2,⋯,15

附录

程序代码

上述问题的lingo代码

sets:

aa/1..7/:p,s,f;

bb/1..15/:l,r,d;

dd(aa,bb):x,a;

endsets

data:

d=104,301,750,606,194,205,201,680,480,300,220,210,420,500,0;

a=@ole('D:\工作簿1(1).xlsx','glje');

p=160,155,155,160,155,150,160;

s=800,800,1000,2000,2000,2000,3000;

enddata

min=@sum(dd(i,j):p(i)*x(i,j))+@sum(dd(i,j):a(i,j)*x(i,j))+0.1*(@sum(bb(j):l(j)*(1+l(j))/2)+@sum(bb(j):r(j)*(1+r(j))/2));

@for(aa(i):500*f(i)<=@sum(bb(j):x(i,j)));

@for(bb(j)|(j#ne#15):r(j)+l(j+1)=d(j));

@for(aa(i):@sum(bb(j):x(i,j))<=s(i)*f(i));

@for(bb(j):@sum(aa(i):x(i,j))=r(j)+l(j));

@for(aa(i):@bin(f(i)));

@for(dd(i,j):@gin(x(i,j)));

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值