运输问题
模型建立
-
已知有 m m m个生产地点 A i ( i = 1 , ⋯ , m ) A_i(i=1,\cdots,m) Ai(i=1,⋯,m),可供应某种(单个)物资,供应量(产量)分别为 a i ( i = 1 , ⋯ , m ) a_i(i=1,\cdots,m) ai(i=1,⋯,m)。现有 n n n个销地 B j ( j = 1 , ⋯ , n ) B_j(j=1,\cdots,n) Bj(j=1,⋯,n),其需求量分别为 b j ( j = 1 , ⋯ , n ) b_j(j=1,\cdots,n) bj(j=1,⋯,n)。用 c i j c_{ij} cij表示从 A i A_i Ai运到 B j B_j Bj的单位物资的运价。设从 A i A_i Ai运到 B j B_j Bj的运输量为 x i j ( x i j ≥ 0 ) x_{ij}(x_{ij}\ge 0) xij(xij≥0)
- 目标函数
min z = ∑ i = 1 m ∑ j = 1 n c i j x i j \min z=\sum\limits_{i=1}^m\sum\limits_{j=1}^n c_{ij}x_{ij} minz=i=1∑mj=1∑ncijxij
- 约束条件
{ ∑ i = 1 m x i j = b j , j = 1 , ⋯ , n ⇐ 销量角度 ∑ j = 1 n x i j = a i , i = 1 , ⋯ , m ⇐ 产量角度 x i j ≥ 0 \left\{\begin{array}{l} \sum\limits_{i=1}^mx_{ij}=b_j,~j=1,\cdots,n\Leftarrow\text{销量角度}\\ \sum\limits_{j=1}^nx_{ij}=a_i,~i=1,\cdots,m\Leftarrow\text{产量角度}\\ x_{ij}\ge 0 \end{array}\right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧i=1∑mxij=bj, j=1,⋯,n⇐销量角度j=1∑nxij=ai, i=1,⋯,m⇐产量角度xij≥0
-
对于产销平衡的运输问题,有以下关系式成立
∑ j = 1 n b j = ∑ j = 1 n ( ∑ i = 1 m x i j ) = ∑ i = 1 n ( ∑ j = 1 m x i j ) = ∑ i = 1 m a i \sum\limits_{j=1}^nb_j=\sum\limits_{j=1}^n(\sum\limits_{i=1}^mx_{ij})=\sum\limits_{i=1}^n(\sum\limits_{j=1}^mx_{ij})=\sum\limits_{i=1}^ma_i j=1∑nbj=j=1∑n(i=1∑mxij)=i=1∑n(j=1∑mxij)=i=1∑mai
⇒ \Rightarrow ⇒模型最多只有 m + n − 1 m+n-1 m+n−1个独立的约束方程 ⇒ \Rightarrow ⇒系数矩阵的秩 ≤ m + n − 1 \le m+n-1 ≤m+n−1 ⇒ \Rightarrow ⇒一定存在可行解 -
系数矩阵的结构松散特殊
x 11 x 12 ⋯ x 1 n x 21 x 22 ⋯ x 2 n ⋯ x m 1 x m 2 ⋯ x m n u 1 u 2 ⋮ u m v 1 v 2 ⋮ v n [ 1 1 ⋯ 1 1 1 ⋯ 1 ⋱ 1 1 ⋯ 1 1 1 1 1 1 1 ⋱ ⋱ ⋱ 1 1 1 ] \begin{array}{l} &\left.\begin{array}{l} x_{11}~x_{12}~~\cdots ~x_{1n}~x_{21}~x_{22}~\cdots ~~x_{2n}~\cdots ~~x_{m1}~x_{m2}~\cdots ~x_{mn} \end{array}\right.\\ \left.\begin{array}{l} u_1\\u_2\\\vdots\\u_m\\v_1\\v_2\\\vdots\\v_n \end{array}\right. &\left[\begin{array}{ccccccccccccc} 1&1&\cdots&1&&&&&&&&&\\ &&&&1&1&\cdots&1&&&&&\\ &&&&&&&&\ddots&&&&\\ &&&&&&&&&1&1&\cdots&1\\ 1&&&&1&&&&&1&&&\\ &1&&&&1&&&&&1&&\\ &&\ddots&&&&\ddots&&&&&\ddots&\\ &&&1&&&&1&&&&&1 \end{array}\right] \end{array} u1u2⋮umv1v2⋮vnx11 x12 ⋯ x1n x21 x22 ⋯ x2n ⋯ xm1 xm2 ⋯ xmn⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1111⋯⋱111111⋯⋱11⋱1111⋯⋱11⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
⇒ \Rightarrow ⇒系数矩阵的系数向量 P i j P_{ij} Pij可以表示为 P i j = ( 0 ⋯ 1 ⋯ 0 ⋯ 1 ⋯ 0 ) T = e i + e m + j P_{ij}=(0\cdots1\cdots0\cdots1\cdots0)^T=e_i+e_{m+j} Pij=(0⋯1⋯0⋯1⋯0)T=ei+em+j
-
运输问题与指派问题类似,区别在于运输问题约束方程中的自由项 a i , b j a_i,b_j ai,bj非负即可,但指派问题恒为1。不能用匈牙利法求解运输问题
表上作业法和对产销平衡问题的处理
- e.g. 三个产地 A 1 , A 2 , A 3 A_1,A_2,A_3 A1,A2,A3,产量分别是7,4,9,四个销地 B 1 , B 2 , B 3 , B 4 B_1,B_2,B_3,B_4 B1,B2,B3,B4,销量分别是3,6,5,6.又已知单位运价,求 min z \min z minz
-
根据 7 + 4 + 9 = 3 + 5 + 6 + 5 7+4+9=3+5+6+5 7+4+9=3+5+6+5容易得到产销平衡
-
画出产销平衡表和单位运价表(合在一起)
B 1 B_1 B1 B 2 B_2 B2 B 3 B_3 B3 B 4 B_4 B4 产量 A 1 A_1 A1 x 11 ∥ 3 x_{11}\|3 x11∥3 x 12 ∥ 11 x_{12}\|11 x12∥11 x 13 ∥ 3 x_{13}\|3 x13∥3 x 14 ∥ 10 x_{14}\|10 x14∥10 7 7 7 A 2 A_2 A2 x 21 ∥ 1 x_{21}\|1 x21∥1 x 22 ∥ 9 x_{22}\|9 x22∥9 x 23 ∥ 2 x_{23}\|2 x23∥2 x 24 ∥ 8 x_{24}\|8 x24∥8 4 4 4 A 3 A_3 A3 x 31 ∥ 7 x_{31}\|7 x31∥7 x 32 ∥ 4 x_{32}\|4 x32∥4 x 33 ∥ 10 x_{33}\|10 x33∥10 x 34 ∥ 5 x_{34}\|5 x34∥5 9 9 9 销量 3 3 3 6 6 6 5 5 5 6 6 6 该表即可作为表上作业法的使用起点
-
确定初始基可行解,查看视频
-
西北角法:从表的西北角开始,填出 m + n − 1 m+n-1 m+n−1个数作为初始解
注:西北角法纯粹就是为了找到个解,但是局限性太大
注:当出现退化(即按步骤计算出来的运输量为0)时,在相应的格中一定要填一个0,以表示此格为数字格
-
最小元素法:就近供应,从运输单价最小的地方开始确定供销关系
注:可能一开始很节省,但之后翻倍增长
-
伏格尔法:从运费差额的角度去考虑(更容易找到最优解)
- 求各行各列最小运价与次小运价的差额(绝对值)
- 选出1中所有差额的最大值,找到这个最大值所对应的行或列,再找这行或列中的最小运价,优先供应(若差额最大值有多个,任选一个即可)
- 如果某一行或某一列按照这种方法已被供应了,则划去该行或该列,在剩下的行列中重复这种方法,直到划去所有的行列
-
-
判别最优解
-
闭回路法:以某一空格(非基变量)为起点,用水平线或者竖直线向前划线,对于其他空格,只能穿过,不能转向,只有在碰到某一数字时才能转弯。按照这一规矩继续前进,直到回到起始空格位置。(回路是唯一的)。有几个空格就必须找几个回路
检验数 = 奇数顶点的单位运价之和 − 偶数顶点的单位运价之和 \text{检验数}=\text{奇数顶点的单位运价之和}-\text{偶数顶点的单位运价之和} 检验数=奇数顶点的单位运价之和−偶数顶点的单位运价之和
检验数经济意义:当由 A i A_i Ai往 B j B_j Bj增运一个单位的货物时,所引起的总运输成本的变化
局限:产销点很多时,计算很繁,不好找回路
-
位势法:另一种计算检验数的方法,但是只能计算不能调整
- 每一个格都对应了唯一确定的行列的位置,那么我们就认为每个格都对应唯一的行势( u i u_i ui)和唯一的列势( v j v_j vj),且 σ i j = c i j − ( u i + v j ) \sigma_{ij}=c_{ij}-(u_i+v_j) σij=cij−(ui+vj)。对于所有的有数格 σ = 0 \sigma=0 σ=0,故可通过 σ = 0 \sigma=0 σ=0列出方程组,求出所有的 u i , v j u_i,v_j ui,vj,那么,对于空格来说就可以直接计算 σ i j \sigma_{ij} σij并比较
-
-
解的调整:在负检验数中,选择绝对值最大的空格作为调整的切入点,并在表格上以该点出发,沿着其闭回路,在回路所经过的每一个方格内一次表上 + q +q +q和 − q -q −q,由于存在非负约束,故只需保证回路上所有的 x i j ± q ≥ 0 x_{ij}\pm q\ge 0 xij±q≥0,由此便可得到 q q q的具体值。然后根据计算出来的 q q q值对相应的顶点进行调整,重复计算检验数和调整解的过程
- 当某个非基变量(空格)的检验数为0时,该问题有无穷多最优解
对产销不平衡问题的处理
-
产大于销: ∑ a i > ∑ b j \sum a_i>\sum b_j ∑ai>∑bj;产小于销: ∑ a i < ∑ b j \sum a_i<\sum b_j ∑ai<∑bj
-
产大于销
min z = ∑ i = 1 m ∑ j = 1 n c i j x i j s . t . { ∑ i = 1 m x i j = b j , j = 1 , ⋯ , n ∑ j = 1 n x i j ≤ a i , i = 1 , ⋯ , m x i j ≥ 0 \begin{array}{l} \min z=\sum\limits_{i=1}^m\sum\limits_{j=1}^n c_{ij}x_{ij}\\ s.t. \left\{\begin{array}{l} \sum\limits_{i=1}^mx_{ij}=b_j,~j=1,\cdots,n\\ \sum\limits_{j=1}^nx_{ij}\le a_i,~i=1,\cdots,m\\ x_{ij}\ge 0 \end{array}\right. \end{array} minz=i=1∑mj=1∑ncijxijs.t.⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧i=1∑mxij=bj, j=1,⋯,nj=1∑nxij≤ai, i=1,⋯,mxij≥0- 引入 m m m个松弛变量: ∑ j = 1 n + 1 x i j = a i , i = 1 , ⋯ , m \sum\limits_{j=1}^{n+1}x_{ij}=a_i,~i=1,\cdots,m j=1∑n+1xij=ai, i=1,⋯,m
- 对于 b n + 1 b_{n+1} bn+1可以令 b n + 1 = ∑ a i − ∑ b j b_{n+1}=\sum a_i-\sum b_j bn+1=∑ai−∑bj
- 难点在于价值系数,在实际解题过程中,必须具体问题具体分析。若要求将这个产地的所有多产的全部被用掉,可以令相应的价值系数为大M
- 设 x i j x_{ij} xij为第 i i i季度生产的用于第 j j j季度交货的柴油机数。
- 根据合同要求,则有
{ x 11 = 10 x 12 + x 22 = 15 x 13 + x 23 + x 33 = 25 x 14 + x 24 + x 34 + x 44 = 20 \left\{\begin{array}{lcl} x_{11}&=&10\\ x_{12}+x_{22}&=&15\\ x_{13}+x_{23}+x_{33}&=&25\\ x_{14}+x_{24}+x_{34}+x_{44}&=&20 \end{array}\right. ⎩⎪⎪⎨⎪⎪⎧x11x12+x22x13+x23+x33x14+x24+x34+x44====10152520 - 由每季度生产的用于当季和以后各季的柴油机数不可能超过该季度的生产能力,得
{ x 11 + x 12 + x 13 + x 14 ≤ 25 x 22 + x 23 + x 24 ≤ 35 x 33 + x 34 ≤ 30 x 44 ≤ 10 \left\{\begin{array}{rcl} x_{11}+x_{12}+x_{13}+x_{14}\le 25\\ x_{22}+x_{23}+x_{24}\le 35\\ x_{33}+x_{34}\le 30\\ x_{44}\le 10 \end{array}\right. ⎩⎪⎪⎨⎪⎪⎧x11+x12+x13+x14≤25x22+x23+x24≤35x33+x34≤30x44≤10 - 可以看出该问题实际上是一个运输问题,并且产大于销(并且考虑实际意义, i > j i>j i>j时 x i j = 0 x_{ij}=0 xij=0),画出表格如图,注意价值系数 c i j c_{ij} cij的计算,应该是实际成本加上储存维护费用
- 对于D列,如果题目没有特殊说明,默认成本为0