要铺设一条\(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 |
---|---|---|---|---|---|
运价(万元) | 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万元(不足整公里部分按整公里计算)。钢管可由铁路、公路运往铺设地点(不只是运到点\(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\) |
\(y_j\) | 在点\(A_j\)与点\(A_{j+1}\)之间的公路上,运输点\(A_j\)向点\(A_{j+1}\)方向铺设的钢管量,\(j=1,2,3,...,14\) |
\(A_{ij}\) | 1单位钢管从钢厂\(S_i\)到点\(A_j\)的最少总费用,即订购费用、公路运费、铁路运费、铺设管道和钢管销价之和,\(i=1,2,...,7 \quad j=1,2,...,15\) |
\(l_j\) | 管道第\(j\)需要铺设的钢管量,\(j=1,2,...,15\) |
\(y_j\) | 节点\(j\)向左铺设的钢管量,\(j=1,2,...,15\) |
\(z_j\) | 节点\(j\)向右铺设的钢管量,\(j=1,2,...,15\) |
2.3 数学模型
\[\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} \]三、求解过程
3.1 运费矩阵的计算
使用计算机求解上述数学规划时, 需要对非线性约束条件式(4.23)进行处理。引进0-1变量
\[f_i=\left\{\begin{array}{l} 1, \text { 钢厂 } i \text { 生产, } \\ 0, \text { 钢厂 } i \text { 不生产。 } \end{array} \quad i=1,2, \cdots, 7\right. \text { 。 } \]把约束条件式(4.23)转化为线性约束
\[500 f_i \leqslant \sum_{j=1}^{15} x_{i j} \leqslant s_i f_i, i=1,2, \cdots, 7 \]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) | 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 |
**单位钢管从钢厂\(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 |
即厂家S1往A4节点运输335单位钢管,往A6节点运输200单位钢管,往A7节点运输265单位钢管,共计800单位。其它钢厂以此类推…………最小费用为127.8632亿元。
3.3 Python代码
使用计算机求解上述数学规划时,需要对约束条件(20)进行处理。我们引进0 −1 变量
求得总费用的最小值为 127.8632 亿。