Modified Distribution算法(MODI)其实可以看成是Stepping-Stone算法的变体,它和Stepping-Stone算法的主要区别在于MODI是通过数学表达式直接计算空单元格对总cost的变化情况,而不是先识别Loop
我们还是使用之前的例子:
三个Supply结点,其供应量为:
仓库 | 库存(Supply) |
---|---|
1. 堪萨斯 | 150 |
2. 奥马哈 | 175 |
3. 得梅因 | 275 |
Total | 600 |
三个Demand结点,其需求量为:
面粉厂 | 需求(Demand) |
---|---|
A. 芝加哥 | 200 |
B. 圣路易斯 | 100 |
C. 辛辛那提 | 300 |
Total | 600 |
路径的单位花销:
A.芝加哥 | B.圣路易斯 | C.辛辛那提 | |
1. 堪萨斯 | $6 | $8 | $10 |
2. 奥马哈 | $7 | $11 | $11 |
3. 得梅因 | $4 | $5 | $12 |
根据上面的已知量,采用Minimum-Cell-Cost算法,得到了如下表所示的初始解:
要进行MODI,我们需要对初始的TP表进行扩展,在表的外层添加uuu列和vvv行:
新增的uiu_iui和vjv_jvj序列和具有分配值的单元格的单位花销构成这样的等式约束:
ui+vj=Cij \begin{aligned} u_i+v_j=C_{ij} \end{aligned} ui+vj=Cij
例如对于单元格1B,有:
u1+vB=C1B=8 \begin{aligned} u_1+v_B=C_{1B}=8 \end{aligned} u1+vB=C1B=8
剩下的等式:
u1+vC=10u2+vC=11u3+vA=4u3+vB=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
我们需要例用这五个等式计算出六个uiu_iui和vjv_jvj的值;不过因为只有5个等式,我们必须手动把其中一个置零才能计算剩下的变量,一般就直接让u1=0u_1=0u1=0,然后就可以计算出剩下的变量值:
x1B:u1+vB=80+vB=8vB=8x1C:u1+vC=100+vC=10vC=10x2C:u2+vC=11u2+10=11u2=1x3B:u3+vB=5u3+8=5u3=−3x3A:u3+vA=4−3+vA=4vA=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+v