ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

求解传输问题(四) Modified Distribution算法

2021-02-08 14:03:12  阅读:315  来源: 互联网

标签:11 10 vj 单元格 Modified 算法 ui Distribution aligned


Modified Distribution算法(MODI)其实可以看成是Stepping-Stone算法的变体,它和Stepping-Stone算法的主要区别在于MODI是通过数学表达式直接计算空单元格对总cost的变化情况,而不是先识别Loop

我们还是使用之前的例子:
三个Supply结点,其供应量为:

仓库库存(Supply)
1. 堪萨斯150
2. 奥马哈175
3. 得梅因275
Total600

三个Demand结点,其需求量为:

面粉厂需求(Demand)
A. 芝加哥200
B. 圣路易斯100
C. 辛辛那提300
Total600

路径的单位花销:

A.芝加哥B.圣路易斯C.辛辛那提
1. 堪萨斯$6$8$10
2. 奥马哈$7$11$11
3. 得梅因$4$5$12

根据上面的已知量,采用Minimum-Cell-Cost算法,得到了如下表所示的初始解:
在这里插入图片描述
要进行MODI,我们需要对初始的TP表进行扩展,在表的外层添加 u u u列和 v v v行:
在这里插入图片描述
新增的 u i u_i ui​和 v j v_j vj​序列和具有分配值的单元格的单位花销构成这样的等式约束:
u i + v j = C i j \begin{aligned} u_i+v_j=C_{ij} \end{aligned} ui​+vj​=Cij​​
例如对于单元格1B,有:
u 1 + v B = C 1 B = 8 \begin{aligned} u_1+v_B=C_{1B}=8 \end{aligned} u1​+vB​=C1B​=8​
剩下的等式:
u 1 + v C = 10 u 2 + v C = 11 u 3 + v A = 4 u 3 + v B = 5 \begin{aligned} u_1+v_C=10 \\ u_2+v_C=11 \\ u_3+v_A=4 \\ u_3+v_B=5 \end{aligned} u1​+vC​=10u2​+vC​=11u3​+vA​=4u3​+vB​=5​
我们需要例用这五个等式计算出六个 u i u_i ui​和 v j v_j vj​的值;不过因为只有5个等式,我们必须手动把其中一个置零才能计算剩下的变量,一般就直接让 u 1 = 0 u_1=0 u1​=0,然后就可以计算出剩下的变量值:
x 1 B : u 1 + v B = 8 0 + v B = 8 v B = 8 x 1 C : u 1 + v C = 10 0 + v C = 10 v C = 10 x 2 C : u 2 + v C = 11 u 2 + 10 = 11 u 2 = 1 x 3 B : u 3 + v B = 5 u 3 + 8 = 5 u 3 = − 3 x 3 A : u 3 + v A = 4 − 3 + v A = 4 v A = 7 \begin{aligned} x_{1B}:u_1+v_B&=8 \\ 0+v_B&=8 \\ v_B&=8\\ x_{1C}:u_1+v_C&=10\\ 0+v_C&=10\\ v_C&=10\\ x_{2C}:u_2+v_C&=11 \\ u_2+10&=11 \\ u_2&=1 \\ x_{3B}:u_3+v_B&=5\\ u_3+8&=5 \\ u_3&=-3\\ x_3A:u_3+v_A&=4\\ -3+v_A&=4\\ v_A&=7\\ \end{aligned} x1B​:u1​+vB​0+vB​vB​x1C​:u1​+vC​0+vC​vC​x2C​:u2​+vC​u2​+10u2​x3B​:u3​+vB​u3​+8u3​x3​A:u3​+vA​−3+vA​vA​​=8=8=8=10=10=10=11=11=1=5=5=−3=4=4=7​
现在TP表如下表所示:
在这里插入图片描述
在计算出 u i u_i ui​和 v j v_j vj​序列后,我们可以使用下面的公式直接计算出空单元格重分配的单位cost变化值:
c i j − u i − v j = k i j \begin{aligned} c_{ij}-u_i-v_j=k_{ij} \end{aligned} cij​−ui​−vj​=kij​​
对于当前TP表中的四个空单元格,我们运用这个公式计算一下:
x 1 A : k 1 A = c 1 A − u 1 − v A = 6 − 0 − 7 = − 1 x 2 A : k 2 A = c 2 A − u 2 − v A = 7 − 1 − 7 = − 1 x 2 B : k 2 B = c 2 B − u 2 − v B = 11 − 1 − 8 = + 2 x 3 C : k 3 C = c 3 C − u 3 − v C = 12 − ( − 3 ) − 10 = + 5 \begin{aligned} x_{1A}: &k_{1A}=c_{1A}-u_1-v_A=6-0-7=-1\\ x_{2A}: &k_{2A}=c_{2A}-u_2-v_A=7-1-7=-1\\ x_{2B}: &k_{2B}=c_{2B}-u_2-v_B=11-1-8=+2\\ x_{3C}:&k_{3C}=c_{3C}-u_3-v_C=12-(-3)-10=+5 \end{aligned} x1A​:x2A​:x2B​:x3C​:​k1A​=c1A​−u1​−vA​=6−0−7=−1k2A​=c2A​−u2​−vA​=7−1−7=−1k2B​=c2B​−u2​−vB​=11−1−8=+2k3C​=c3C​−u3​−vC​=12−(−3)−10=+5​
这个计算结果其实和使用Stepping-Stone算法的结果是一样的;根据计算结果,应该选择 x 1 A x_{1A} x1A​作为分配对象,那么接下来的操作其实和Stepping-Stone算法一致,从 x 1 A x_{1A} x1A​出发,构造Loop,然后使用需要减数量的单元格中最小的数量分别进行重分配,得到了新的TP表同时外层的 u i u_i ui​和 v j v_j vj​被清空:
在这里插入图片描述
需要重新计算 u i u_i ui​和 v j v_j vj​的值,同样,先让 u 1 = 0 u_1=0 u1​=0,然后依次计算出其他的变量值:
在这里插入图片描述
接着使用公式 c i j − u i − v j = k i j c_{ij}-u_i-v_j=k_{ij} cij​−ui​−vj​=kij​计算空单元格的cost变化值:
x 1 A : k 1 B = c 1 B − u 1 − v B = 8 − 0 − 7 = + 1 x 2 A : k 2 A = c 2 A − u 2 − v A = 7 − 1 − 6 = 0 x 2 B : k 2 B = c 2 B − u 2 − v B = 11 − 1 − 7 = + 3 x 3 C : k 3 C = c 3 C − u 3 − v C = 12 − ( − 2 ) − 10 = + 4 \begin{aligned} x_{1A}: &k_{1B}=c_{1B}-u_1-v_B=8-0-7=+1 \\ x_{2A}: &k_{2A}=c_{2A}-u_2-v_A=7-1-6=0\\ x_{2B}: &k_{2B}=c_{2B}-u_2-v_B=11-1-7=+3\\ x_{3C}: &k_{3C}=c_{3C}-u_3-v_C=12-(-2)-10=+4\\ \end{aligned} x1A​:x2A​:x2B​:x3C​:​k1B​=c1B​−u1​−vB​=8−0−7=+1k2A​=c2A​−u2​−vA​=7−1−6=0k2B​=c2B​−u2​−vB​=11−1−7=+3k3C​=c3C​−u3​−vC​=12−(−2)−10=+4​
可以看到现在所有的cost变化值都大于等于零,所以当前解已经是最优解,可以停止MODI算法了.

可以看到相比于Stepping-Stone算法,MODI可以更直接地计算空单元格的cost变化值,但是因为要计算 u i u_i ui​和 v j v_j vj​的值,并且重分配时也要构建Loop,所以实际的计算量也并没有比Stepping-Stone算法少很多

总结下Modified Distribution算法的步骤:

  1. 在所有有分配值的单元格上应用 u i + v j = c i j u_i+v_j=c_{ij} ui​+vj​=cij​来计算 u i u_i ui​和 v j v_j vj​序列的值;
  2. 对每个空单元格使用公式 c i j − u i − v j = k i j c_{ij}-u_i-v_j=k_{ij} cij​−ui​−vj​=kij​计算cost的变化值;
  3. 选择 k i j k_{ij} kij​最小的那个空单元格(负数),构建Loop并重分配数量得到新的TP表;
  4. 重复1到3,直到所有的 k i j k_{ij} kij​都大于等于零

标签:11,10,vj,单元格,Modified,算法,ui,Distribution,aligned
来源: https://blog.csdn.net/wangzhenyang2/article/details/113744349

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有