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

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

一、问题描述

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

\(i\) 1 2 3 4 5 6 7
\(S_i\) 800 800 1000 2000 2000 2000 3000
\(p_i\) 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万元(不足整公里部分按整公里计算)。钢管可由铁路、公路运往铺设地点(不只是运到点\(A_1,A_2,...,A_{15}\) ,而是管道全线)。请制定一个主管道钢管的订购和运输计划,使总费用最小(给出总费用)。

二、数学模型

2.1 模型假设

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

2.2 符号说明

符号 解释
\(s_i\) \(i\)个钢厂的最大产量,\(i=1,2,...,7\)
\(A_j\) 输送管道(主管道)上的第\(j\)个点,\(j=1,2,...,15\)
\(c_{ij}\) 钢厂\(S_i\)向点\(A_j\)订购和运输单位钢管的费用,\(i=1,2,...,7 \quad j=1,2,...,15\)
\(x_{ij}\) 钢厂\(S_i\)向点\(A_j\)运输的钢管量,\(i=1,2,...,7 \quad j=1,2,...,15\)
\(p_i\) \(i\)个钢厂1单位钢管的销价,\(i=1,2,...,7\)
\(l_j\) 管道\(A_jA_{j+1}\)段需要铺设的钢管单位,\(j=1,2,...,14\)
\(y_j\) 节点\(j\)向左铺设的钢管量,\(j=1,2,...,15\)
\(z_j\) 节点\(j\)向右铺设的钢管量,\(j=1,2,...,15\)

2.3 数学模型的构建

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

铺设总费用

当钢管从钢厂运到点\(A_j\)后,钢管就要向运输点\(A_j\)的两边\(A_jA_{j+1}\)端和\(A_{j-1}A_j\)段运输(铺设)管道。\(l_j\):表示节点\(A_j\)\(A_{j+1}\)之间铺设钢管单位(\(y_1=0,z_{15}=0\)),铺设方法如下图:

由于相邻运输点\(A_j\)\(A_{j+1}\)之间的距离为\(l_{j}\),其左边为\(y_j\),右边为\(z_j\),那么\(A_j\)\(A_jA_{j+1}\) 的运输费可分为两部分
右边的铺设费用:$$ 0.1×( 1 + 2 + . . . + z_j ) =\frac{ z_j(z_j + 1)}{2} $$
左边铺设的费用:

\[0.1×( 1 + 2 + . . . + y_j )= \frac{y_j(y_j+1) }{2} \]

成本和运输总费用

若运输点\(A_j\)向钢厂\(S_i\)订购\(x_{ij}\)单位钢管,\(c_{ij}\)是1单位钢管从钢厂\(S_i\)到点\(A_j\)的最少总费用,即公路运费、铁路运费和钢管销价之和;则钢管从钢厂\(S_i\)运到运输点\(A_j\)所需的费用为\(c_{ij}x_{ij}\),合并就得所有钢管从钢厂运到各个运输点上的总费用。所以该问题的数学模型:

\[\begin{array}{ll} \min \sum_{i=1}^7 \sum_{j=1}^{15} c_{i j} x_{i j}+\frac{0.1}{2} \sum_{j=1}^{15}\left[z_j\left(z_j+1\right)+y_j\left(y_j+1\right)\right] \\ \text { s.t. }\left\{\begin{array}{l} \sum_{j=1}^{15} x_{i j} \in\{0\} \cup\left[500, s_i\right], \quad i=1,2, \cdots, 7, \\ \sum_{j=1}^{15} x_{i j} \leq s_i, \quad i=1,2, \cdots, 7, \\ \sum_{i=1}^7 x_{i j}=z_j+y_j,\quad j=1,2, \cdots, 15, \\ y_{j+1}+z_j=l_j, \quad j=1,2, \cdots, 14, \\ y_1=0, \quad z_{15}=0 \\ x_{i j} \geqslant 0, z_j \geqslant 0, y_j \geqslant 0,\quad i=1,2, \cdots 7, j=1,2 \cdots, 15 \end{array}\right. \end{array} \]

三、计算过程

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

\[f_i=\left\{\begin{array}{l} 1, \text { 钢厂 } i \text { 生产, } \\ 0, \text { 钢厂 } i \text { 不生产} \end{array} \quad \quad i=1,2, \cdots, 7\right. \]

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

\[500 f_i \leqslant \sum_{j=1}^{15} x_{i j} \leqslant s_i f_i,\quad i=1,2, \cdots, 7 \]

3.1 运费矩阵的计算

将铁路与公路交界的点编号为\(B_j(j=1,2,…,17)\) ,先构造铁路距离赋权图\(G=(V,E_1,W_1)\),其中\(V =\{S_1,…,S_7,A_1,…,A_{15} ,B_1,…,B_{17}\}\),各顶点的编号如上图所示,\(W_1=[w_{ij}^{(1)}]_{39 \times 39}\),有

\[w_{ij}^{(1)}=\left\{\begin{array}{l} c_{ij}^{(1)}, 钢厂S_i和节点j有铁路直连 \\ +\infin, 钢厂S_i和节点j没有铁路直连 \end{array} \quad \quad \quad i=1,2, \cdots, 7 \quad j=1,2, \cdots, 32\right. \]

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

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

\(B_1\) \(B_2\) \(B_3\) \(B_4\) \(B_5\) \(B_6\) \(B_7\) \(B_8\) \(B_9\) \(B_{10}\) \(B_{11}\) \(B_{12}\) \(B_{13}\) \(B_{14}\) \(B_{15}\) \(B_{16}\) \(B_{17}\)
160 140 135 37 80 20 20 20 60 85 95 95 105 100 120 130 145

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

构造公路费用赋权图\(G2=( V,E_2, W_2)\),其中V同上,\(W_2=[w_{ij}^{(2)}]_{39 \times 39}\),有

\[w_{ij}^{(2)}=\left\{\begin{array}{l} c_{ij}^{(2)}, 钢厂S_i和节点j有公路直连 \\ +\infin, 钢厂S_i和节点j没有公路直连 \end{array} \quad \quad \quad i=1,2, \cdots, 7 \quad j=1,2, \cdots, 32\right. \]

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

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

计算单位钢管\(S_i\)购买单位钢管运到结点\(A_j\)加上销售价\(p_i\)的最小费用
可用同样的方法求出钢厂\(S_2,S_3,S_4,S_5,S_6,S_7\)到点\(A_j\)的最小费用,从而得出从钢厂\(S_i\)购买单位钢管运到节点\(A_j\)的最小总费用(单位:万元)。综合见下表:

\(A_1\) \(A_2\) \(A_3\) \(A_4\) \(A_5\) \(A_6\) \(A_7\) \(A_8\) \(A_9\) \(A_{10}\) \(A_{11}\) \(A_{12}\) \(A_{13}\) \(A_{14}\) \(A_{15}\)
\(S_1\) 170.7 160.3 140.2 98.6 38 20.5 3.1 21.2 64.2 92 96 106 121.2 128 142
\(S_2\) 215.7 205.3 190.2 171.6 111 95.5 86 71.2 114.2 142 146 156 171.2 178 192
\(S_3\) 230.7 220.3 200.2 181.6 121 105.5 96 86.2 48.2 82 86 96 111.2 118 132
\(S_4\) 260.7 250.3 235.2 216.6 156 140.5 131 116.2 84.2 62 51 61 76.2 83 97
\(S_5\) 255.7 245.3 225.2 206.6 146 130.5 121 111.2 79.2 57 33 51 71.2 73 87
\(S_6\) 265.7 255.3 235.2 216.6 156 140.5 131 121.2 84.2 62 51 45 26.2 11 28
\(S_7\) 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 总费用的计算

**单位钢管从钢厂\(S_i\)运输到\(A_j\)的运输量 **

\(A_1\) \(A_2\) \(A_3\) \(A_4\) \(A_5\) \(A_6\) \(A_7\) \(A_8\) \(A_9\) \(A_{10}\) \(A_{11}\) \(A_{12}\) \(A_{13}\) \(A_{14}\) \(A_{15}\) 总量
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

即厂家\(S_1\)\(A_4\)节点运输335单位钢管,往\(A_6\)节点运输200单位钢管,往\(A_7\)节点运输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 @ 2023-05-12 22:12  郝hai  阅读(445)  评论(0编辑  收藏  举报