当使用某种初始化算法得到TP问题的一个初始解后,就可以使用迭代算法进行最优解的搜索;Stepping-Stone算法和Modified Distribution(MODI)算法是常用的两种算法,这篇文章先介绍Stepping-Stone算法,而初始化算法则默认使用Minimum-Cell-Cost算法
还是使用前面文章使用的例子来说明:
三个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算法,得到了如下表所示的初始解:

Stepping-Stone算法的基本思想是验证如果给一个空单元格进行分配,是否能达到一个更低的目标值。在上面的例子中,有4个单元格是空的:1A, 2A, 2B和3C,我们首先评估下给单元格1A进行分配造成的cost变化情况:如果我们给1A分配一个单位的数量,那么总cost将会提高$6;但是给1A多分配一个单位将使得第一行的总supply变成151,为了维持约束,我们必须在这一行中选择一个已经分配的单元格减去1单位;在第一行,1B是已分配状态,所以从1B上减掉1单位;从1B上减去1个单位将使得这一列的总demand变成99,所以我们又需要在这一列的3B上加1单位来维持约束;类似的,给3B加一单位,我们又需要从3A上减掉1个单位;而在3A这一列上,1A在最开始就加上了一单位,整个TP表刚好平衡了;那么1A->1B->3B->3A刚好构成了一个回路,也就是前面文章提到的Loop

现在我们可以计算一下按照这个Loop进行一单位数量的变化所引起的总Cost变化是多少:
1A→1B→3B→3A+6−8+5−4=−1 \begin{aligned} 1A\rightarrow1B\rightarrow3B\rightarrow3A \\ +6-8+5-4=-1 \end{aligned} 1A→1B→3B→3A+6−8+5−4=−1
可见,每次在1A上新加一单位的数量,将使得总的cost降低$1,也就意味着我们可以按照这个Loop进行数量的重分配来达到一个更优解;不过我们不急着这么做,因为还有另外3个空单元格没有评估,我们可以看看是否又能使得总cost降低更多的Loop
对于2A,其Loop和cost变化值:

2A→2C→1C→1B→3B→3A+7−11+10−8+5−4=−1 \begin{aligned} 2A\rightarrow 2C\rightarrow 1C \rightarrow 1B \rightarrow 3B \rightarrow 3A \\ +7-11+10-8+5-4=-1 \end{aligned} 2A→2C→1C→1B→3B→3A+7−11+10−8+

本文介绍了运筹优化中的Stepping-Stone算法,用于求解运输问题的最优解。通过举例展示了算法的基本思想,即通过寻找并调整Loop来降低总成本。在示例中,经过迭代,找到了问题的最优解,并指出当所有空单元格的cost变化均为非负时,迭代结束,得出多最优值问题的可能性。
最低0.47元/天 解锁文章
1404

被折叠的 条评论
为什么被折叠?



