一、运输问题的数学模型

运输问题的建模有点类似于初高中的解方程组问题,以清华大学出版社的《运筹学(第四版)》P82页中的表格为例

图源:清华大学出版社的《运筹学(第四版)》P82
https://my.oschina.net/liyangke/blog/2981227

运输问题的建模就是一个解决运输问题的建模,这里的变量设的是从各个产地运往哥哥销售地的物资量Xij(即为表3-1中未显示内容的方框内应填入的变量)。
在产销平衡的条件下, 表3-1代表产量和销量间的关系。竖着看这张表,各个产地i(从1到m)运往同一销地j的物资量之和等于bj;因为i地卖了这么多出去,那肯定需要进这么多物资进来。横着看表格同理。
表3-2代表从i地进到j地在运输过程中产生的运输单价,通俗来说也就是邮费。

那么模型的构建就很简单了,目标函数是求所有邮费之和的最小值
约束条件是表3-1所描述的供销关系:
从第1个产地发出的物资受到的约束条件方程是

以此类推,得到方程组

图源:https://www.docin.com/p-2088705409.html

整合成数学模型如下

这就是运输问题的数学模型。
从我们上面得到的
如图结果,我们发现,这个数学模型总共有m*n个变量(m个产地和n个销售地一一组合),m+n个约束方程(m个关于产量的约束方程,n个关于销量的约束方程)。
该图结果亦可化为系数矩阵形式

图源:中国大学慕课网-华侨大学运筹学

把每一列Xij看作一个对应于变量Xij的系数向量Pij,其分量中除了第i个和第m+j个为1以外,其余都为0。即
Pij=(0…1…0…1…0)T=eie_iei​+em+je_m+jem​+j(e表示单位向量)

我们前面也提到,这是产销平衡下的运输问题模型,所以产量之和也等于销量之和

也就是说,可以做到有两行完全一样,比如让前面的m行加到其中一行,后面的n行加到其中一行,就会得到两个相同的约束条件,一行减去另一行得到一行全为0的向量。
结合矩阵秩的求法,最小非零行数为矩阵秩的值;所以模型最多只有m+n-1个独立约束方程,即系数矩阵的秩r<=m+n-1.
我们可以得到结论,(在不含闭回路的情况下,)运输问题任何一组基都由m+n-1个变量构成
关于什么是闭回路,将在下文进行讲解。

二、表上作业法

要解前面的运输问题模型,用学过的单纯形表法求解不是不行,但是计算量很大,所以运输问题模型一般采用表上作业法求解。
不过表上作业法的实质也是单纯形表法的迭代,所以求解过程类似。首先需要画出单位运价表和产销平衡表,这里以清华大学出版社的《运筹学(第四版)》P94例1为例。

1.确定初始可行解

有两种确定方法。

(1)最小元素法

最小元素法顾明思意,就是从运价最小的产销地开始外销。同样以清华大学出版社的《运筹学(第四版)》P94例1为例,根据上表,运价最便宜的是从A2运往B1的价格(为1)

所以先尝试B1所需要的物资全部由A2供给,在表格中填入如图

因为第1列饱和了,所以舍弃第1列,在剩余列中继续寻找运价最小的地方

因为第二行到4就饱和了,所以A2-B3只能填入1,填入后第二行饱和。
接下来重复上述步骤

直到所有行列饱和。最终得到最初的6个基变量(恰好是m+n-1=3+4-1=6个)。

但是,需要注意的是,最小元素法可能出现退化现象。以下题为例:

在填入第二个数:A3-B2的6后,第三行,第二列同时饱和,最终只会得到5个基变量,这时候需要在同时被划去的行或列中任选一个空格填入0作为基变量。补充的0有两个补充原则
1.尽量先选运费小的实变量
2.补充后不能有某个基变量独占一行一列

并且,最小二乘法还有一个缺点,其算法必定导致为了一处费用的节省而可能导致的在其他处的运费多花,所以又出现了伏格尔法

(2)伏格尔法

伏格尔法考虑的是运费的差额。差额太大了,就会出现我不使用最便宜的运输方法,就要花多上许多的钱执行昂贵的次优运输方案。
继续以清华大学出版社的《运筹学(第四版)》P94例1为例。

首先计算其行差额与列差额:

列差额最大的是第2列,如果不执行A3-B2的话,就要多花5个单位的钱去补给B2,很亏,所以优先通过A3补给B2,得到下表结果

此时第3行差额发生了变化,最小变为5,次小变为7,行差额变为2.
不过接下来差额最大的还是第4列,所以选择A3-B4,填入3.(9-6=3)
类似最小元素法推导,最终得到如图结果。

2.判别最优解

最优解的判别方法基于一个公式


基于这一公式,我们常用两种方式判别。

(1)闭回路法

这一方法用于求检验数。
怎么求呢?很好理解,其实就是从空白格出发,遇到(合适的)数字就转90度弯,最终会转回来形成闭回路,就像下图这样。

从A1-B1格子出发,遇到A1-B3有数字4,转弯;遇到A2-B3有数字,转弯;遇到A2-B1转弯;回到A1-B1。闭回路结束。(已经有的数字是运量,填入的是检验数)
那怎么算A1-B1的检验数呢,很简单,先假设A1-B1多进了一单位物资,那A1-B3和A2-B1就要少进一单位物资,A2-B2就要多进一单位物资。
结合运价表,这时候的调整带来的运费变化是

这段检验数计算的意义是,从A1运往B1的资源增加1单位,带来运费增加量也是1单位,这1单位增加量即为该空格处的检验数,检验数大于0,说明该空格符合最优解判别。
同理继续求其他格子,遇到(合适的)数字就转弯。那什么时候是不合适的数字呢?以求A1-B2检验数为例

遇到B3格子上的4不能转弯,因为在4转弯的话,下一个转弯点是1,再下一个转弯点是A2-B1的3,没办法回到A1-B2,所以要在A1-B4转弯,以此类推求出每个格子的检验数

我们发现A2-B4检验数小于0,说明现在的方案不是最优解。

(2)位势法

位势法是一个计算的方法。
根据原解,分别设产量对偶变量为u1,u2…ui;销量对偶变量v1,v2…vj
通过初始解的表格

得到方程组

如果令u1=0,解方程组得

根据得到的数字,重新填入表格(玩数学填格子,要求Ui+Vj是格子里的数字)

最后根据检验数公式求得

表中仍有负数,说明现在的方案不是最优解。
上述过程可以在一张表中完成↓

右上角是单价,格子正中间是检验数。

3.迭代求最优解

改进的方法又称为闭回路调整法
继续以上图为例,找到负数值最小的检验数,出发进行闭回路检验

四个格子中,最小的基变量是1,把1换出,换给A2-B4;得到新的基变量表。

再进行检验

此时所有检验数均>=0,所以上表基变量已经是最优解了。
另外,上表结果出现了很多检验数=0,这是一个个例,表示无穷多最优解,换成下图解其实也是最优解。

需要注意的是,除了可能出现无穷多解的问题外,闭回路调整过程中也可能出现(和1.最小元素法 中出现一样的)退化现象

其情况如下

图源:中国大学慕课网-华侨大学运筹学

同样,此时仍然是尽量选取运费最大的作为出基变量。

以上内容为本人对于产销平衡下运输问题的概念理解,如果有误,欢迎批评指正。

【运筹学】产销平衡下的运输问题概念理解(4月9日学习笔记)相关推荐

  1. 2017年11月23日学习笔记_用python解决杨辉三角函数,以及理解

    今天学习了廖雪峰老师的python教程,学到杨辉三角函数的时候很迷茫, 他的基本格式如下: [1],[1, 1],[1, 2, 1],[1, 3, 3, 1],[1, 4, 6, 4, 1],[1, ...

  2. 信号完整性的一些概念(2022年6月14日学习笔记)

    信号完整性的一些概念: 1.信号完整性(SignalIntegrity):就是指电路系统中信号的质量,如果在要求的时间内,信号能不失真地从源端传送到接收 端,我们就称该信号是完整的. 2.传输线(Tr ...

  3. 《深入理解LINUX内存管理》学习笔记(一)

    引子 为什么要写这个笔记: 1,这本书的中文版翻译了太垃圾,没法阅读.阅读英文原版,可以很好的理解作者的思路.作此笔记备忘 2,一直以来学习LINUX kernel的知识缺乏系统化,借对这本书的学习, ...

  4. 知识图谱·概念与技术--第1章学习笔记--知识图谱概述--知识图谱的概念,与传统语义网络的区别

    知识图谱·概念与技术--第1章学习笔记--知识图谱概述--知识图谱的概念,与传统语义网络的区别 知识图谱的概念,与传统语义网络的区别 狭义概念 作为语义网络的内涵 与传统语义网络的区别 优点 缺点 与 ...

  5. AI:2020北京智源大会与五位图灵奖得主和100多位专家《共同探讨人工智能的下一个十年》——6月21日~6月24日的日程安排(实时更新,建议收藏)

    AI:2020北京智源大会与五位图灵奖得主和100多位专家<共同探讨人工智能的下一个十年>--6月21日~6月24日的日程安排(实时更新,建议收藏) 导读:2020年,是一个十年的结束,也 ...

  6. kaldi群北京线下交流会(2017年4月9日)

    kaldi群北京线下交流会(2017年4月9日) 2017年4月5日更新: 首先感谢来自搜狗的陈伟大大提供场地和作为发言人,非常感谢. 其次,这次kaldi线下第二次交流会正式确定,时间为4月9日下午 ...

  7. 互联网线下活动一周整理 11月23日—29日

    本周虎嗅通过懒汉互联等公开渠道收集互联网线下活动共计26场.其中北京13场,上海1场,广深3场,成都3场.下周有几次重大活动,如在北京举办的创业家年会.黑马大赛年度总决赛,中国创新营销峰会,第五届中国 ...

  8. 自然语言理解理论实践-主要的语言理解任务(一)《个人学习笔记》

    自然语言理解理论实践 主要的语言理解任务 1.域检测和意图识别 2.填槽 希望能多多交流,共同学习进步 主要的语言理解任务 首先,以介绍人机对话系统中使用语言理解为目标任务,进行之后的理论和实践背景的 ...

  9. 学习java要学类与对象的使用吗_java 类与对象 的概念理解(可以用我们学习多年的蚂蚁哲学套用)...

    面向对象其实是一种思考的思想,是解决问题,架构工程的整体解决方案.二早期编程语言的思想是面向过程. 面向过程注重的是过程,过程所涉及的行为,也就是功能.通过选择循环语句等逻辑将参与者连接起来. 面向对 ...

最新文章

  1. js向head中添加js代码
  2. Oracle关联更新语法(T-SQL中的update...from)
  3. oracle 00851,Oracle调整内存参后报ORA-00844和ORA-00851
  4. 计算机学院创新实验室,ACM创新实验室概况
  5. springboot 启动退出终端不停止
  6. Err:ClassNotFoundException: org.apache.tomcat.util.log.SystemLogHandler
  7. mysql数据库权限传递,mysql数据库权限分配-参考
  8. springboot简单的整合swagger
  9. html css js介绍ppt,HTML+CSS+JS-入门基础.ppt
  10. 基于MATLAB的战术手势识别功能的设计与实现
  11. Spotfire使用经验-自定义饼图中显示的数据量(Top N分析,排名分析)
  12. GPS原理与接收机————GPS信号及其导航电文
  13. 计算机硬件系统册组成,计算机硬件系统的组成教案.doc
  14. 计算机串口(RS232)的针脚定义
  15. 金蝶K3修改库存更新控制方式
  16. Unity 中实现 打击感的物理
  17. 教你用Python实现经典游戏《小蜜蜂》
  18. visio 画图记录
  19. hydrus1d使用说明_HYDRUS——1D中文说明书.pdf
  20. 2021Unity学习教程:本地下载的Unity项目怎么打开?

热门文章

  1. 线性联立方程的高斯赛德尔迭代(Gauss-Seidel iteration)(python,数值积分)
  2. 关于数据库的表如何删除空行
  3. B6065刨床推动架机械加工工艺规程及专用夹具设计(说明书+CAD图纸+工序卡+过程卡)
  4. 三种爱心代码html(文本文档即可实现)
  5. Mac系统下获取/创建ssh key
  6. html简单留言板教程,JS实现简易留言板(节点操作)
  7. iOS无法播放MP4视频文件的解决方案
  8. ubuntu提示“播放此文件需要MPEG-4-AAC解码器,H264解码器“
  9. 这个MT4指标代码哪里出问题了?
  10. linux使用usb转ttl,USB转TTL转换器 USB V2.0 - 宇泰(UTEK) - 全球领先智能通讯解决方案提供商!...