钢管订购和运输模型——Python实现

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

一、问题描述

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

i 1 2 3 4 5 6 7
Si 800 800 1000 2000 2000 2000 3000
pi 160 155 155 160 155 150 160

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

里程(km) ≤300 301~350 351~400 401~450 451~500 501~600 601~700 701~800 801~900 901~1000
运价(万元) 20 23 26 29 32 37 44 50 55 60

1000km以上每增加1至100km运价增加5万元。公路运输费用为1单位钢管每公里0.1万元(不足整公里部分按整公里计算)。钢管可由铁路、公路运往铺设地点(不只是运到点A1,A2,...,A15 ,而是管道全线)。请制定一个主管道钢管的订购和运输计划,使总费用最小(给出总费用)。

二、数学模型

2.1 模型假设

假设沿管道或者原来有公路,或者建有施工公路;
运费只按铁路、公路里程收取,即不考虑火车、汽车由于停靠站等其他一切外因带来的费用;
钢管在铺设过程中以1km为单位进行铺设;
钢管可由铁路、公路运往铺设路线任一地点;
所有钢管在指定期限内都能按时生产并运送指定地点;
钢管铺设过程中由站点向左右两边进行铺设。

2.2 符号说明

符号 解释
si i个钢厂的最大产量,i=1,2,...,7
Aj 输送管道(主管道)上的第j个点,j=1,2,...,15
cij 钢厂Si向点Aj订购和运输单位钢管的费用,i=1,2,...,7j=1,2,...,15
xij 钢厂Si向点Aj运输的钢管量,i=1,2,...,7j=1,2,...,15
pi i个钢厂1单位钢管的销价,i=1,2,...,7
lj 管道AjAj+1段需要铺设的钢管单位,j=1,2,...,14
yj 节点j向左铺设的钢管量,j=1,2,...,15
zj 节点j向右铺设的钢管量,j=1,2,...,15

2.3 数学模型的构建

项目总费用=铺设总费用+成本及运输总费用

铺设总费用

当钢管从钢厂运到点Aj后,钢管就要向运输点Aj的两边AjAj+1端和Aj1Aj段运输(铺设)管道。lj:表示节点AjAj+1之间铺设钢管单位(y1=0z15=0),铺设方法如下图:

由于相邻运输点AjAj+1之间的距离为lj,其左边为yj,右边为zj,那么AjAjAj+1 的运输费可分为两部分
右边的铺设费用:0.1×(1+2+...+zj)=zj(zj+1)2
左边铺设的费用:

0.1×(1+2+...+yj)=yj(yj+1)2

成本和运输总费用

若运输点Aj向钢厂Si订购xij单位钢管,cij是1单位钢管从钢厂Si到点Aj的最少总费用,即公路运费、铁路运费和钢管销价之和;则钢管从钢厂Si运到运输点Aj所需的费用为cijxij,合并就得所有钢管从钢厂运到各个运输点上的总费用。所以该问题的数学模型:

mini=17j=115cijxij+0.12j=115[zj(zj+1)+yj(yj+1)] s.t. {j=115xij{0}[500,si],i=1,2,,7,j=115xijsi,i=1,2,,7,i=17xij=zj+yj,j=1,2,,15,yj+1+zj=lj,j=1,2,,14,y1=0,z15=0xij0,zj0,yj0,i=1,2,7,j=1,2,15

三、计算过程

使用计算机求解上述数学规划时, 需要对非线性约束条件进行处理。引进0-1变量

fi={1, 钢厂 i 生产, 0, 钢厂 i 不生产i=1,2,,7

把约束条件第一式转化为线性约束

500fij=115xijsifi,i=1,2,,7

3.1 运费矩阵的计算

将铁路与公路交界的点编号为Bj(j=1,2,,17) ,先构造铁路距离赋权图G=(V,E1,W1),其中V={S1,,S7,A1,,A15,B1,B17},各顶点的编号如上图所示,W1=[wij(1)]39×39,有

wij(1)={cij(1),Sij+,Siji=1,2,,7j=1,2,,32

其中cij(1)是单位钢管的铁路运费,根据铁路运价表,可以得到铁路运输费用,若两点间的铁路距离值为无穷大,则对应的铁路运输费用也为无穷大。下面介绍购买单位钢管及从Si(i=1,2,,7)运送到Aj(j=1,2,,15)的最小购运费用cij的计算过程。

计算SiBj铁路直达的运输费用
(1)由于钢厂Si直接与铁路相连,所以可求出钢厂Si到铁路和公路相交点Bj(对应于Aj)的最短路径;
(2)依据钢管的铁路运价表,算出钢厂SiBj的铁路运输费用,并把费用作为边权赋给钢厂SiBj的边。
如以S1为例,S1Bj的单位钢管铁路费用为:

B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 B11 B12 B13 B14 B15 B16 B17
160 140 135 37 80 20 20 20 60 85 95 95 105 100 120 130 145

计算以费用为权的公路交通网络图
(1)再考虑从SiBj到运输点Aj的公路赋权图;
(2)根据单位钢管在公路上的运价规定,得出每一段公路的运费,并把此费用作为边权赋给相应的边。以S1为例得图:

构造公路费用赋权图G2=(V,E2,W2),其中V同上,W2=[wij(2)]39×39,有

wij(2)={cij(2),Sij+,Siji=1,2,,7j=1,2,,32

其中cij(2)为钢厂i到节点j的公路运输费用。!!!32是15个A和17个B节点的和,需要计算钢厂和他们之间的公路连接距离,以便计算相应的运费。

计算Si到结点Aj的最小运输费用
由于可以用铁路、公路交叉运送,所以任意相邻两点间的最小运输费用为铁路、公路两者运输费用加和的最小值(即最短路)。构造铁路公路混合赋权图G=(V,E,W)W=[cij]39×39cij=min{cij(1),cij(2)},对图G应用Floyd算法,就可以计算出所有顶点对之间的最小运输费用,最后提取需要的Si(i=1,2,,7)Aj(j=1,2,,15)的最小运送费用cij(单位:万元)。

计算单位钢管Si购买单位钢管运到结点Aj加上销售价pi的最小费用
可用同样的方法求出钢厂S2,S3,S4,S5,S6,S7到点Aj的最小费用,从而得出从钢厂Si购买单位钢管运到节点Aj的最小总费用(单位:万元)。综合见下表:

A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15
S1 170.7 160.3 140.2 98.6 38 20.5 3.1 21.2 64.2 92 96 106 121.2 128 142
S2 215.7 205.3 190.2 171.6 111 95.5 86 71.2 114.2 142 146 156 171.2 178 192
S3 230.7 220.3 200.2 181.6 121 105.5 96 86.2 48.2 82 86 96 111.2 118 132
S4 260.7 250.3 235.2 216.6 156 140.5 131 116.2 84.2 62 51 61 76.2 83 97
S5 255.7 245.3 225.2 206.6 146 130.5 121 111.2 79.2 57 33 51 71.2 73 87
S6 265.7 255.3 235.2 216.6 156 140.5 131 121.2 84.2 62 51 45 26.2 11 28
S7 275.7 265.3 245.2 226.6 166 150.5 141 131.2 99.2 77 66 56 38.2 26 2

3.2 总费用的计算

**单位钢管从钢厂Si运输到Aj的运输量 **

A1 A2 A3 A4 A5 A6 A7 A8 A9 A10 A11 A12 A13 A14 A15 总量
S(1) 0 0 0 335 0 200 265 0 0 0 0 0 0 0 0 800
S(2) 0 179 188 133 0 0 0 300 0 0 0 0 0 0 0 800
S(3) 0 0 320 0 16 0 0 0 664 0 0 0 0 0 0 1000
S(4) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
S(5) 0 0 0 0 600 0 0 0 0 0 415 0 0 0 0 1015
S(6) 0 0 0 0 0 0 0 0 0 351 0 86 333 621 165 1556
S(7) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

即厂家S1A4节点运输335单位钢管,往A6节点运输200单位钢管,往A7节点运输265单位钢管,共计800单位。其它钢厂以此类推,得最小费用为127.8632亿元。

3.3 Python计算代码

#铁路赋权图

[进行中,参看链接程序](https://blog.csdn.net/weixin_60200880/article/details/125881596)
#公路赋权图
[进行中,参看链接程序](https://blog.csdn.net/weixin_60200880/article/details/125881596)
#最小费用
[进行中,参看链接程序](https://blog.csdn.net/weixin_60200880/article/details/125881596)

引进0 −1 变量后,求得总费用的最小值为 127.8632 亿。

参考文献

  1. 钢管订购与运输优化模型
  2. 钢管运输模型
  3. 最短路+最小费用+线性规划(钢管订购和运输问题)
  4. 优化模型:钢管订购及运输优化模型
posted @   郝hai  阅读(480)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示