欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

【运筹学】表上作业法 ( 最小元素法分析 | Vogel 方法 )

发布时间:2025/6/17 编程问答 48 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【运筹学】表上作业法 ( 最小元素法分析 | Vogel 方法 ) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 一、" 最小元素法 " 分析
  • 二、Vogel 方法 ( 差额法 )





一、" 最小元素法 " 分析



在上一篇博客 【运筹学】表上作业法 ( 求初始基可行解 | 最小元素法 ) 中 , 按照 " 最小元素法 " 找到了初始基可行解 ,

使用 " 最小元素法 " , 属于贪婪算法 , 每次都找运费最小的优先供应 , 每个步骤的方案都是最优 , 局部最优 ,

每步最优不一定能使得全局最优 ;





二、Vogel 方法 ( 差额法 )



" Vogel 方法 " 的核心思想就是从运价表中 , 分别计算 各行 , 各列最小运费次最小运费 差额 , 填写到表的 最右列最下行 ;


基于如下运输问题进行分析 : 下面的表格代表 333 个产地 , 444 个销地 的运输规划问题 , 表格中的内容是 某产地运往某销地的运费 ;


B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A1333111111333101010777000
A2\rm A_2A2111999222888444111
A3\rm A_3A3777444101010555999111
销量333666555666
列差额222555111333

列差额 :

111 列 列差额 : 最小运费 111 , 次最小运费 333 , 差额是 222 ;

222 列 列差额 : 最小运费 444 , 次最小运费 999 , 差额是 555 ;

333 列 列差额 : 最小运费 222 , 次最小运费 333 , 差额是 111 ;

444 列 列差额 : 最小运费 555 , 次最小运费 888 , 差额是 333 ;


行差额 :

111 行 行差额 : 最小运费 333 , 次最小运费 333 , 差额是 000 ;

222 行 行差额 : 最小运费 111 , 次最小运费 222 , 差额是 111 ;

333 行 行差额 : 最小运费 444 , 次最小运费 555 , 差额是 111 ;


111 列 列差额 为例进行分析 , 最小运费 111 , 次最小运费 333 , 差额是 222 ; 如果不能使用最小运费 111 , 那么退而求其次 , 使用次最小运费 333 ; 最优方案无法使用 , 考虑次优方案 , 这两个方案的差距就是 列差额 222 , 次优方案比最优方案运费高 , 高 222 ;

第二列的列差额是 555 , 如果不能使用最优方案 , 使用次优方案 , 每个都要增加运费 555 , 这个增加的就太多了 , 应该 优先满足差额较高的行列 优先安排运输 ;

" Vogel 方法 " 将全局的最优考虑了进去 , 不再追求局部最优 , 使用该方法得出的初始基可行解 , 距离最优解更近 , 可以迭代更少次数 ;




111 个基变量 :

从所有 没有被划掉 的并且 没有被安排 的的运费中找到差额最大的 , 是 B2\rm B_2B2 的列差额 555 ;

B2\rm B_2B2 列最小运费 : 这里优先给 B2\rm B_2B2 销地的最小运费 444 安排运输 , 避免为其安排次小运费 , 对应表格第 333 行第 222 列 , A3\rm A_3A3 产地运往 B2\rm B_2B2 销地的运费 ;

产地分析 : 对于产地 A3\rm A_3A3 来说 , 其生产 999 个 , 已经安排了 000 个 , 还可以再安排 999 个 ;

销地分析 : 对于销地 B2\rm B_2B2 来说需求 666 个 , 已经安排了 000 个 , 还可以再安排 666 个 ;

最大安排最小运费运输 , 从 A3\rm A_3A3B2\rm B_2B2 运输 666 个产品 ;

B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A13331̸1\not 1111333101010777000
A2\rm A_2A21119̸\not 99222888444111
A3\rm A_3A37774̸\not 44 , 666101010555999111
销量333666555666
列差额2225̸\not 55111333

此时 B2\rm B_2B2 的销量已经全部消耗完毕 , 该列就不需要安排其它产地向 B2\rm B_2B2 销地运输了 , 可以划掉这一列 , 讨论其它列的运输问题 ;




222 个基变量 :

划掉了 B2\rm B_2B2 行 , 这里重新计算行差与列差 ,

B1\rm B_1B1 , B3\rm B_3B3 列最小运费 与 次小运费 没有变化 , 行差额不变 ;

A1\rm A_1A1 , A2\rm A_2A2 行最小运费 与 次小运费 没有变化 , 行差额不变 ;

A3\rm A_3A3 行差额需要重新计算 , 最小运费被划掉了 , 此时最小运费是 555 , 次小运费是 777 , 行差额变为 222 ;

B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A13331̸1\not 1111333101010777000
A2\rm A_2A21119̸\not 99222888444111
A3\rm A_3A37774̸\not 44 , 666101010555999222
销量333666555666
列差额2225̸\not 55111333

从所有 没有被划掉 的并且 没有被安排 的的运费中找到差额最大的 , 是 B4\rm B_4B4 的列差额 333 ;

B4\rm B_4B4 列最小运费 : 这里优先给 B4\rm B_4B4 销地的最小运费 555 安排运输 , 避免为其安排次小运费 , 对应表格第 333 行第 444 列 , A3\rm A_3A3 产地运往 B4\rm B_4B4 销地的运费 ;

产地分析 : 对于产地 A3\rm A_3A3 来说 , 其生产 999 个 , 已经安排了 666 个 , 还可以再安排 333 个 ;

销地分析 : 对于销地 B4\rm B_4B4 来说需求 666 个 , 已经安排了 000 个 , 还可以再安排 666 个 ;

最大安排最小运费运输 , 从 A3\rm A_3A3B4\rm B_4B4 运输 333 个产品 ;

B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A13331̸1\not 1111333101010777000
A2\rm A_2A21119̸\not 99222888444111
A3\rm A_3A37̸\not 774̸\not 44 , 6661̸0\not 10105̸\not 55 , 333999222
销量333666555666
列差额2225̸\not 55111333

此时 A3\rm A_3A3 的产量已经全部消耗完毕 , 该行就不需要安排其它销地运输了 , 可以划掉这一行 , 讨论其它列的运输问题 ;




333 个基变量 :

划掉了 B2\rm B_2B2 行 , 这里重新计算行差与列差 ,

A1\rm A_1A1 , A2\rm A_2A2 行最小运费 与 次小运费 没有变化 , 行差额不变 ;

B1\rm B_1B1 , B3\rm B_3B3 列最小运费 与 次小运费 没有变化 , 列差额不变 ;

B4\rm B_4B4 列差额需要重新计算 , 最小运费被划掉了 , 此时最小运费是 888 , 次小运费是 101010 , 行差额变为 222 ;

B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A13331̸1\not 1111333101010777000
A2\rm A_2A21119̸\not 99222888444111
A3\rm A_3A37̸\not 774̸\not 44 , 6661̸0\not 10105̸\not 55 , 3339992̸\not 22
销量333666555666
列差额2225̸\not 55111222

从所有 没有被划掉 的并且 没有被安排 的的运费中找到差额最大的 , 是 B1\rm B_1B1B4\rm B_4B4 的列差额 222 ; 这两个任选一个都可以 ;

B4\rm B_4B4 列最小运费 : 这里优先给 B4\rm B_4B4 销地的最小运费 888 安排运输 , 避免为其安排次小运费 , 对应表格第 222 行第 444 列 , A2\rm A_2A2 产地运往 B4\rm B_4B4 销地的运费 ;

产地分析 : 对于产地 A2\rm A_2A2 来说 , 其生产 444 个 , 已经安排了 666 个 , 还可以再安排 444 个 ;

销地分析 : 对于销地 B4\rm B_4B4 来说需求 666 个 , 已经安排了 333 个 , 还可以再安排 333 个 ;

最大安排最小运费运输 , 从 A2\rm A_2A2B4\rm B_4B4 运输 333 个产品 ;

B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A13331̸1\not 11113331̸0\not 1010777000
A2\rm A_2A21119̸\not 992228̸\not 88 , 333444111
A3\rm A_3A37̸\not 774̸\not 44 , 6661̸0\not 10105̸\not 55 , 3339992̸\not 22
销量333666555666
列差额2225̸\not 551112̸\not 22

此时 B4\rm B_4B4 的销量已经全部消耗完毕 , 该列就不需要安排其它产地向 B4\rm B_4B4 销地运输了 , 可以划掉这一列 , 讨论其它列的运输问题 ;




444 个基变量 :

划掉了 B4\rm B_4B4 行列 , 这里重新计算行差与列差 ,

A1\rm A_1A1 , A2\rm A_2A2 行最小运费 与 次小运费 没有变化 , 行差额不变 ;

B1\rm B_1B1 , B3\rm B_3B3 列最小运费 与 次小运费 没有变化 , 列差额不变 ;

B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A13331̸1\not 11113331̸0\not 1010777000
A2\rm A_2A21119̸\not 992228̸\not 88 , 333444111
A3\rm A_3A37̸\not 774̸\not 44 , 6661̸0\not 10105̸\not 55 , 3339992̸\not 22
销量333666555666
列差额2225̸\not 551112̸\not 22

从所有 没有被划掉 的并且 没有被安排 的的运费中找到差额最大的 , 是 B1\rm B_1B1 的列差额 222 ;

B1\rm B_1B1 列最小运费 : 这里优先给 B1\rm B_1B1 销地的最小运费 111 安排运输 , 避免为其安排次小运费 , 对应表格第 222 行第 111 列 , A2\rm A_2A2 产地运往 B1\rm B_1B1 销地的运费 ;

产地分析 : 对于产地 A2\rm A_2A2 来说 , 其生产 444 个 , 已经安排了 333 个 , 还可以再安排 111 个 ;

销地分析 : 对于销地 B1\rm B_1B1 来说需求 333 个 , 已经安排了 000 个 , 还可以再安排 333 个 ;

最大安排最小运费运输 , 从 A2\rm A_2A2B1\rm B_1B1 运输 111 个产品 ;

B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A13331̸1\not 11113331̸0\not 1010777000
A2\rm A_2A21̸\not 11 , 1119̸\not 992̸\not 228̸\not 88 , 3334441̸\not 11
A3\rm A_3A37̸\not 774̸\not 44 , 6661̸0\not 10105̸\not 55 , 3339992̸\not 22
销量333666555666
列差额2225̸\not 551112̸\not 22

此时 A2\rm A_2A2 的产量已经全部消耗完毕 , 该行就不需要安排其它销地运输了 , 可以划掉这一行 , 讨论其它列的运输问题 ;




555 个基变量 :

划掉了 A2\rm A_2A2 行 , 这里重新计算行差与列差 ,

A1\rm A_1A1 , A2\rm A_2A2 行最小运费 与 次小运费 没有变化 , 行差额不变 ;

B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A13331̸1\not 11113331̸0\not 1010777000
A2\rm A_2A21̸\not 11 , 1119̸\not 992̸\not 228̸\not 88 , 3334441̸\not 11
A3\rm A_3A37̸\not 774̸\not 44 , 6661̸0\not 10105̸\not 55 , 3339992̸\not 22
销量333666555666
列差额2225̸\not 551112̸\not 22

从所有 没有被划掉 的并且 没有被安排 的的运费中找到差额最大的 , A1\rm A_1A1 的行差额 000 ;

A1\rm A_1A1 列最小运费 : 这里优先给 A1\rm A_1A1 销地的最小运费 333 安排运输 , 避免为其安排次小运费 , 对应表格第 111 行第 111 列 , A1\rm A_1A1 产地运往 B1\rm B_1B1 销地的运费 ; ( 次小运费 = 最小运费 , 任选一个即可 )

产地分析 : 对于产地 A1\rm A_1A1 来说 , 其生产 777 个 , 已经安排了 000 个 , 还可以再安排 777 个 ;

销地分析 : 对于销地 B1\rm B_1B1 来说需求 333 个 , 已经安排了 111 个 , 还可以再安排 222 个 ;

最大安排最小运费运输 , 从 A1\rm A_1A1B1\rm B_1B1 运输 222 个产品 ;

B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A13̸\not 33 , 2221̸1\not 11113331̸0\not 1010777000
A2\rm A_2A21̸\not 11 , 1119̸\not 992̸\not 228̸\not 88 , 3334441̸\not 11
A3\rm A_3A37̸\not 774̸\not 44 , 6661̸0\not 10105̸\not 55 , 3339992̸\not 22
销量333666555666
列差额2225̸\not 551112̸\not 22

此时 B1\rm B_1B1 的销量已经全部消耗完毕 , 该列就不需要安排其它产地向 B1\rm B_1B1 销地运输了 , 可以划掉这一列 , 讨论其它列的运输问题 ;




666 个基变量 :

此时只剩下最后一个运费没有被安排 , A1\rm A_1A1 产地运往 B3\rm B_3B3 销地的运费 ;

产地分析 : 对于产地 A1\rm A_1A1 来说 , 其生产 777 个 , 已经安排了 222 个 , 还可以再安排 555 个 ;

销地分析 : 对于销地 B3\rm B_3B3 来说需求 555 个 , 已经安排了 000 个 , 还可以再安排 555 个 ;

最大安排最小运费运输 , 从 A1\rm A_1A1B3\rm B_3B3 运输 555 个产品 ;

B1\rm B_1B1B2\rm B_2B2B3\rm B_3B3B4\rm B_4B4产量行差额
A1\rm A_1A1333 , 2221̸1\not 1111333 , 5551̸0\not 1010777000
A2\rm A_2A21̸\not 11 , 1119̸\not 992̸\not 228̸\not 88 , 3334441̸\not 11
A3\rm A_3A37̸\not 774̸\not 44 , 6661̸0\not 10105̸\not 55 , 3339992̸\not 22
销量333666555666
列差额2225̸\not 551112̸\not 22

此时 B3\rm B_3B3 的销量已经全部消耗完毕 , 该列就不需要安排其它产地向 B3\rm B_3B3 销地运输了 , 可以划掉这一列 , 讨论其它列的运输问题 ;



至此 , 所有的产量与销量分配完毕 ;

上述初始基可行解方案总运费 :

(2×3)+(3×5)+(1×1)+(3×8)+(4×6)+(3×5)=85\rm ( 2 \times 3 ) + ( 3 \times 5 ) + ( 1 \times 1 ) + ( 3 \times 8 ) + ( 4 \times 6 ) + ( 3 \times 5 ) = 85(2×3)+(3×5)+(1×1)+(3×8)+(4×6)+(3×5)=85

最小元素法求出来的初始基可行解的 总运费是 868686 , " Vogel 方法 " 比 " 最小元素法 " 能找出更近的初始基可行解 ;

总结

以上是生活随笔为你收集整理的【运筹学】表上作业法 ( 最小元素法分析 | Vogel 方法 )的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。