运筹说 第36期 | 算法介绍之运输问题

本期继续进行运筹学算法的讲解,我们将对比求解运输问题初始调运方案西北角法、最小元素法、沃格尔法并介绍实现三种方法的MATLAB相关代码,以帮助大家利用工具快速求解运输问题,做到事半功倍。话不多说,我们一起来看看吧!

 表上作业法是求解运输问题的一种简便而有效的方法,其求解工作在运输表上进行。作为一种迭代的方法,其迭代步骤为:

①按某种规则找出一个初始解(初始调运方案);

②对现行解作最优性判别;

③若该解不是最优解,就在运输表上对它进行调整改进,得出一个新解;

④再判别,再改进,直至得到最优解为止。

 此次推文重点为大家介绍表上作业法的第一步—求解运输问题初始调运方案的三种方法,即西北角法、最小元素法、沃格尔法。

一、方法介绍

1、方法概述

西北角法

遵循“优先安排运价表上编号最小的产地和销地之间(即运价表的西北角位置)的运输业务”的规则,从运价表的西北角(左上角)格开始,在格内标上允许取得的最大数;然后按行(列)标下一格的数;若某行(列)的产量(销量)已满足,则把该行(列)的其他格划去;如此进行下去,直至得到一个基本可行解。

最小元素法

最小元素法的基本思想是就近供应,为了减少运费,优先考虑运价表中单位运价最小(或运距最短)的供销业务,最大限度地满足其供销量,从而确定该处的产销关系,然后在余下的供销地关系中,继续按上述方法安排调运,直至安排完所有供销任务,得到一个完整的调运方案(完整的解)为止。

沃格尔(Vogel)法

沃格尔法又称差值法,该方法考虑到,最初按某一最小单位运价优先安排物品调运时,在后续调运过程中却可能不得不采用运费很高的其他供销点,从而使整个运输费用增加。沃格尔法的基本思想是在运价表中分别计算出各行各列的最小单位运价和次小单位运价之差,并称这两个单位运价之差为该销售地或供应地的罚数,然后按照最小单位运价对罚数最大处安排运输。因为若罚数的值很大,说明不按最小运价组织运输就会造成很大的运费损失。

2、方法对比

从本质上说,运输问题还是一种线性规划问题,可以用迭代法进行求解,西北角法、最小元素法、沃格尔(Vogel)法是求解运输问题初始基可行解的3种方法。西北角法并没有对运价进行考量,只是从西北角处进行迭代,因此其求解出的初始方案往往离最优解还有一定差距,后续进行解的改进时可能需要的次数较多,现已不常使用。最小元素法考虑到了单位运价的大小,但在某些问题中有着因追求最小运费而使得其他供销地运费陡然增加的弊端。沃格尔(Vogel)法求解初始调运方案时,考虑到了最小单位运价与次小单位运价的差额给组织运输关系带来的影响,因此其求解出的初始方案往往更接近最优解,后续在进行解的改进时所需次数也相对较少,甚至在某些简单的问题中,其初始调运方案可能就已经是最优调运方案。与前两种方法相比,沃格尔(Vogel)法的应用更加广泛。

二、算法实现

1、例题介绍

某部门有3个生产同类的工厂(产地),生产的产品由4个销售点(销地)出售,各工厂的生产量、各销售点的销售量(假定单位均为t)以及各工厂到各销售点的单位运价(元/t)示于下表中。要求研究产品如何调运才能使总运费最小 2、平台实现

此次我们以上述例题为例,借助MATLAB平台分别介绍西北角法、最小元素法以及沃格尔法三种方法的详细代码、代码调用方法以及最终的运行结果。由于篇幅有限,小编接下来只展示每种方法的部分代码,小伙伴们可以关注“运筹学”公众号→后台回复“MATLAB之运输问题”获取三种方法的完整代码。

(1)西北角法

代码展示

代码调用及运行结果

点击运行N_W文件,在命令行窗口依次输入运价矩阵→回车→输入产量矩阵→回车→输入销量矩阵→回车”,便可得到初始调运方案结果,结果中等于-1的为非基元素,不等于-1的为基元素。可以看出,A1运往B1的产品数量为8t,A1运往B2的产品数量为8t,A2运往B2的产品数量为6t,A2运往B3的产品数量为4t,A3运往B3的产品数量为8t,A3运往B4的产品数量为14t。

(2)最小元素法

代码展示

代码调用及运行结果

点击运行“min_element”文件,在命令行窗口依次“输入运价矩阵→回车→输入产量矩阵→回车→输入销量矩阵→回车”,便可得到初始调运方案结果,结果中等于-1的为非基元素,不等于-1的为基元素。可以看出,A1运往B3的产品数量为10t,A1运往B4的产品数量为6t,A2运往B1的产品数量为8t,A2运往B3的产品数量为2t,A3运往B2的产品数量为14t,A3运往B4的产品数量为8t。

 

(3)沃格尔(Vogel)法

代码展示

代码调用及运行结果

点击运行“Vogel”文件,在命令行窗口依次“输入运价矩阵→回车→输入产量矩阵→回车→输入销量矩阵→回车”,便可得到初始调运方案结果,结果中等于-1的为非基元素,不等于-1的为基元素。可以看出,A1运往B3的产品数量为12t,A1运往B4的产品数量为4t,A2运往B1的产品数量为8t,A2运往B4的产品数量为2t,A3运往B2的产品数量为14t,A3运往B4的产品数量为8t。

☆ 参考资料:

https://download.csdn.net/download/weixin_42576279/10908971?spm=1001.2014.3001.5503

本期的内容就介绍到这里,想要进一步了解运筹学,关注本公众号,快快学起来吧!

后台回复“MATLAB之运输问题”获取三种方法的完整代码

作者 | 曹贵玲 尹萌娟

责编 | 何洋洋

审核 | 徐小峰

· 知乎|运筹说 ·

· Bilibili|运筹说 ·

· CSDN|运筹说 ·

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值