正如在应用单纯形算法时需要注意处理一些特殊情况一样,计算TP问题时也需要考虑到下面的特殊情况;这里我们还是使用前面的例子进行说明:
三个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 |
根据上面的已知量,初始化TP表结构:
非平衡传输问题
前面的文章讨论的都是平衡传输问题,总的供应量恰好等于需求量,但是实际应用中更多的情况是供应量和需求量并不相等;在我们的例子中,把C号辛辛那提面粉厂的需求量改成350,这样总的需求量变成了650,比总的供应量多出了50吨.
为了处理这多出来的50吨需求量,在TP表上,我们可以添加额外的一个dummy行,这个dummy行被绑定50吨的supply来平衡问题模型,该行的单元格可以被分配数量,但是单位花销为零,因为在该行分配的数量并不是真的被传输的数量,而是指的无法被满足的需求量;事实上,这些单元格就是松弛变量
与之类似,如果是供应量更多的情况,例如将3号得梅因仓库的供应量提升到375,那么就在TP表中添加一个dummy列:
添加了dummy行或者列对TP算法的过程没有任何影响,所以处理非平衡情况可以作为算法的一个预处理步骤
退化
事实上,对于TP表,如果算法工作正常,那么一定满足下面这个等式:
m r o w s + n c o