赞
踩
基于贪心算法的钢管运输策略
【摘要】
本文主要对钢管订购和运输费用最小化建立模型进行设计,根据订购钢管的费用、运输钢管的费用、铺设钢管的费用使得总使用费用最少来建立最优化模型,并设计算法,利用lingo编程求解
针对问题,在已知钢厂制作钢管及其制作量的最大值与钢厂到达不同铺设点的路径距离及其铁路,公路每公里多少的运费,来求出总需要费用的最小值
关键词:迪杰斯特拉算法、邻接矩阵、Lingo编程
本题主要是铺设一条A1→A2→Aj→A15的运输天然气管道,生产这样钢管的钢厂有S1,S2,Si,S7。在从各个厂家生产钢管的价格,厂家运输钢管到A1→A2→Aj→A15的运输费用,不同地点铺设道路的费用。一个钢厂如果承担制造这种钢管,至少需要生产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 |
图一 |
根据不同厂家最多生产钢管的数量及价格,结合不同厂家运输到不同地点需要运费多少的数据建立线性整数规划模型;
制定一个主管道钢管的订购和运输计划,使总费用最小(给出总费用)。
本题主要是针对选择不同厂家制作管道运输到铺路地点所需要的最少费用建立优化模型进行求解,在一定约束条件下的非线性优化问题,由题意知,建立以总费用为目标函数来建立优化模型进行求解。总费用z由钢管的订购费用、钢厂到铺设点的运输费以及铺设点到铺设点的运输费三部分组成。
钢管总的订购费用可在每个钢管的购买量与每个钢厂的制作钢管单个费用通过的线性运算得到。在每个钢厂购买的钢管量必须大于500km ,否则不能在该厂购买。构造一个“0-1”变量fi,那么当f不等于0时,表示在第i个钢厂购买大于500km的钢量,反之表示则不在第i个钢厂购买。
2、钢厂的运输钢管的费用
得到每个钢厂到铺设点的运输费需先知道每个钢厂到各个站点的钢管输送量,以及所选择的路线即铁路总长和公路总长,所以需要首先计算出各个钢厂到每个铺设点的最佳运输路径,使得平均单位公里的运输费用最小。在这里,可以列出每个钢厂到达铺设点的可能路径,然后根据每条路径的铁路和公路里程数计算出平均每公里运输费用最小的一条,最后将所有计算出花费最少费用的路径建立一个“7*15”的邻接矩阵。以此计算出所有钢厂到所有铺设点需要运输费用最少路径。
3、铺设费用
在铺设点到铺设点的运输费问题上,假设以1km为单位进行铺设,即铺设中车每向前开1km 便将1km 的钢管放下。由于铺设管道是线型的,除了两个端点外,每个站点需要往两边进行铺设管道。所以,假设第j个站点往左、右边铺设管道为rj和lj公里,则由站点到铺设地点的运输费就可以通过等差数列求和得到。
Pi | 第i个钢管的价格 |
xij | 从钢厂si运输到铺设点Ai的钢管数量 |
si | 不同生产钢管的钢厂 |
rj | Aj向右铺设的钢管路径 |
lj | Aj向左铺设的钢管路径 |
dj | 两点之间铺设的路径 |
fi | 0-1变量 |
Aj | 第j个铺设点 |
aij | 运输费用 |
X0 | 订购钢管的费用 |
X1 | 运输钢管费用 |
X2 | 铺设钢管的费用 |
z | 订购和运输钢管的总费用 |
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个站点往左、右边铺设管道为rj和lj公里,则由铺设点到铺设点的运输费就可以通过等差数列求和得到。
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=115xij≤si(j=1.2…..15)
(2)“0-1”变量的约束
本题可以考虑到钢厂制作钢管不足500个的情况来进行“0-1”变量的设置。
fij∈0,1(i=1.2…7)(j=1.2…15)
(3)两个变量的约束
总需要的钢管长度与铺设点左右铺设钢管的约束。
i=17xij=rj+lj ( i=1,2,⋯,7)(j=1,2,⋯,15 )
(4)整数小数的约束
求出最小花费的价钱,可以得出花费的费用不能够为负数,列出以下条件
xij∈N* (i=1,2,⋯,7)(j=1,2,⋯,15)
6.模型的建立与求解
Min z=i=17j=115pixij+i=17j=115aijxij+0.1j=115lj1+lj2+j=115rj1+rj2
&500fi≤j=115xij≤sifi 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 &fi∈0,1 i=1,2,⋯,7&xij∈N* 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)));
赞
踩
赞
踩
赞
踩
赞
踩
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。