表上作业法一般流程(最小元素法、闭合回路法、位势法)

news2024/10/6 22:23:41

目录

一、列出物资调运平衡表和运价表

二、编制初始调运方案

三、初始方案的检验与调整 

 1)闭合回路法

 2)位势法

 3)调整调运方案 

表上作业法一般步骤: 

列出调运物资的供需(产销)平衡表及运价表;

②按最小元素法建立初始调运方案;

③采用位势法计算初始方案每个空格的闭回路的检验数Dxij

④检查检验数,如果所有Dxij >=0,说明方案是最优的,已经得到我们想要的方案,结束求解;

⑤如果有某个或某几个Dxij<0,则选择负检验数中绝对值最大的闭回路进行调整,建立新的方案;

⑥重复3—5步,直至获得最优调运方案。

表上作业法的实质就是利用运价表在平衡表上进行求解。 

例题:某公司下属三个储存某种物资的仓库,供应四个工地的需要。三个仓库的供应量和四个工地的需求量以及由各仓库到各工地调运单位物资的运价(元/吨)由下表给出,试求运输费用最少的调运方案

一、列出物资调运平衡表和运价表

供需平衡表

注:平衡表中填入的数字表示供需点之间的调运量;空格表示双方不发生调运关系

二、编制初始调运方案

        物资调运规划其总目的是寻求一个运输费用最少的最优调运方案。一般最优方案是由初始方案经过反复调整得到的。因此,编制出较好的初始调运方案非常重要。

        最好的调运方案是使运费最省的方案,因此可以用最小元素法来确定初始调运方案。

        最小元素法,就是按运价表依次挑选运费少的供——需点尽量优先安排供应的调运方法。


        ①首先,在运价表内找出最小的运价,对本例而言,方格(21)数值是1,最小,这样,供应点A2尽可能地满足B1工地的需要,于是在平衡表中有(21)300,即在空格(21)中填入数字300  

        此时,由于工地B1已经全部得到满足,不需要其他仓库供应给它了,运价表中的第一列数字已不起作用,因此将运价表第一列划去,并标注符号

        ②然后,在运价表未划去的各行、列中,再选取一个最小的运价,本例,即 (2 3) 2 最小,让 A 2 料库尽量供应满足 B 3 工地的需要。由于 A 2 库储量 400t 已供应给 B1 工地 300t 了,所以最多还能供给 B3 工地 100t 。于是在平衡表 (2 3) 空格填入 100

        相应地,由于仓库A2所储物资已全部供应完毕,因此,在运价表中与A2同行的运价也不再起作用,所以也将它们划去,并标注符号 


        ③仿照前面的方法,一直作下去,就得到如下图所示的运价表和平衡表。 

        此时,在运价表中只有方格 (1 4) 处的运价没有划掉, B4 尚有 300t 的需求,而 A1 刚好还有 300t 的物资可以供应,为了满足供需平衡,所以最后在平衡表上应有

(14)300。这样就得到表4的初始调运方案。

        ④根据初始调运方案的运输量和单位运价,可以计算初始调运方案的运输费用为:

    S=1*300+4*600+3*400+2*100+10*300+5*300=8600()

三、初始方案的检验与调整 

 1)闭合回路法

相关概念

    闭回路对表上作业法的初始方案,从调运方案表上的一个空格出发,存在条且仅存在一条以该空格(xij 表示)为起点,以其他填有数字的点为其他顶点的闭合回路,简称闭回路。

每个顶点都是闭合回路的转角点;
闭合回路是一条封闭折线,每一条边都是水平或垂直的;
每一行 ( ) 若有闭合回路的顶点,则必有两个(起点所在的行(列)除外)。
任一空格的闭合回路不仅是存在的,而且是唯一的。
只有从空格出发, 其余各转角点 所对应的方格内均 填有数字 时,所构成的闭合回路,才是我们这里所说的闭回路 。

 空格(11):  (11)(13)(23)(21)(11)

 空格(31):  (3I)(21)(23)(13)(14)(34)(31)

对所有的空格,都可以用同样的方法画出一条闭回路。

  检验数:调运方案的每个空格所形成的闭回路上,作单位物资的运量调整,总可以计算出相应的运费是增加还是减少。把所计算出来的每条闭回路上调整单位运量而使运输费用发生变化的增减值,称其为检验数。

如果检验数小于零,表示在该空格的闭回路上调整运量使运费减少;
如果检验数大于零,则表示在该空格的闭回路上调整运量会使运费增加。

最优方案的判定准则:

     初始调运方案中,如果它所有的检验数都是非负的,那么这个初始调运方案最优。否则。这一调运方案不一定是最优的。

   (如果所有空格的检验数都小于零,那么如果再对调运方案进行任何调整,都会增加运输费用)

2)位势法

第一步:求位势量

        首先将初始调运方案中填有运量的方格对应的运价填写好,然后将初始调运方案中填有运量的方格对应的运价cij分解为两部分,即:  

    cij =ui+vj ,(i=1,2,3; j=1,2,3,4,这里的i和j均为下标,下同)

其中uivj 分别为该方格对应于i行和j列的位势量.

然后列出所有方程

假定其中一个未知量为0(任意),如假定v1=0,则可以根据方程解出全部未知量。 

步:求准检验数 

步:求检验数 

        利用运价表与准检验数表求检验数

 

检验结果:检验数出现负值,根据最优方案判断准则,该方案不是最优方案。

    3)调整调运方案 

当判定一个初始调运方案不是最优调运方案时,就要 在检验数出现负值的该空格内进行调整
如果检验数是负值的空格不只一个时,一般选择 检验数为负值且绝对值最大的空格 作为具体的调整对象。

调整过程:

1)作出负值所在空格的闭回路,本例为空格x24,闭回路如上图所示。

2)沿闭回路在各奇数次转角点中挑选运量的最小数值作为调整量。本例是将x23方格的100作为调整量,将这个数填入空格x24内,同时调整该闭回路中其他转角点上的运量,使各行、列保持原来的供需平衡.这样使得到一个新的调运方案。

调整后的结果如下

通过计算其检验数全部非负,此方案为最优方案。

运输费用为:S3×50010×2008×1001×3004×6005×3008500()

该值小于初始调运方案的总运费。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679911.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mediapipe 谷歌高效ML框架-图像识别、人脸检测、人体关键点检测、手部关键点检测

参考&#xff1a; https://github.com/google/mediapipe https://developers.google.com/mediapipe/solutions/guide 框架也支持cv、nlp、audio等项目&#xff0c;速度很快&#xff1a; 1、图形识别 参考&#xff1a;https://developers.google.com/mediapipe/solutions/vi…

05.内存管理:动态申请和释放内存

动态分配内存&#xff0c;进行内存管理 参考: 伙伴算法原理简介 linux 0.11源码 本文主要针对Linux0.11的malloc和free进行分析。是一种类似伙伴系统的内存管理方法&#xff0c;不过伙伴系统的内存通常是申请大于一页的内存&#xff0c;但是在该内核版本的内存管理&#xff0c…

剑指 Offer 68 - I. 二叉搜索树的最近公共祖先 / LeetCode 235. 二叉搜索树的最近公共祖先(二叉搜索树性质,搜索与回溯)

题目&#xff1a; 链接&#xff1a;剑指 Offer 68 - I. 二叉搜索树的最近公共祖先&#xff1b;LeetCode 235. 二叉搜索树的最近公共祖先 难度&#xff1a;中等 给定一个二叉搜索树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对…

redis存储原理与数据模型学习笔记

目录 1 redis线程模型1.1 线程组成1.2 redis命令处理是单线程 2 redis db 存储分析2.1 先了解代码server.hdict.h 2.2 从kv存储分析2.3 负载因子2.4 渐进式rehash机制数据访问scan 3 数据模型分析以zset为例跳表 1 redis线程模型 1.1 线程组成 redis-server 命令处理 网络事件…

Nerf论文前后介绍以及今后方向(2020年各个方向工作论文分析) NEURAL VOLUME RENDERING:NERF AND BEYOND

你好&#xff01; 这里是“出门吃三碗饭”本人&#xff0c; 本文章接下来将介绍2020年对Nerf工作的一篇总结论文NEURAL VOLUME RENDERING:NERF AND BEYOND&#xff0c;论文作者是佐治亚理工学院的Frank Dellaert同学和 MIT的Lin Yen-Chen同学&#xff0c;非常感谢两位大佬的总结…

序列化和反序列化的认识【protobuf、json、xml】

1. 什么是序列化与反序列化&#xff1f; 程序员在编写应用程序的时候往往需要将程序的某些数据存储在连续的内存中&#xff0c;然后将其写入文件或是将其传输到网络中的另一台计算机上以实现通讯。这个将程序数据转换成能被存储并传输的格式的过程被称为序列化&#xff08;seri…

C++ array (STL array) 序列容器

文章目录 1 类模板2 begin()/end() 和 cbegin()/cend()3 cbegin() 和 cend()4 rbegin()/rend() 和 crbegin()/crend()5 访问array容器中单个元素参考 1 类模板 array 容器以类模板的形式定义在 头文件&#xff0c;并位于命名空间 std 中&#xff0c;如下所示&#xff1a; nam…

一、约束编程简介(Constraints Programming)

文章目录 1、约束编程求解器2、值域传播器THE END 1、约束编程求解器 \qquad 约束编程是一种编程范式&#xff0c;旨在解决那些需要满足一系列约束条件的问题。在约束编程中&#xff0c;问题被定义为一组变量和约束条件&#xff0c;而不是指定解决问题的算法步骤。通过定义变量…

XXE漏洞复现步骤

0X00XXE注入定义 XXE注入&#xff0c;即XML External Entity&#xff0c;XML外部实体注入。通过 XML 实体&#xff0c;”SYSTEM”关键词导致 XML 解析器可以从本地文件或者远程 URI 中读取数据。所以攻击者可以通过 XML 实体传递自己构造的恶意值&#xff0c;是处理程序解析它…

Nginx-负载均衡详解

本文已收录于专栏 《中间件合集》 目录 概念说明什么是Nginx什么是负载均衡 功能介绍配置过程1.修改nginx配置文件添加服务组修改HTTP模块 2.保存配置文件3.重启配置文件4.查看配置文件是否重启成功5.还可以配置其他策略轮询权重最少连接数 常用命令总结提升 概念说明 了解ngi…

MySQL:环境安装和数据库基础

环境安装 说明&#xff1a; • 安装与卸载中&#xff0c;用户全部切换成为root&#xff0c;⼀旦 安装&#xff0c;普通用户能使⽤的 • 初期练习&#xff0c;mysql不进行用户管理&#xff0c;全部使⽤root进行&#xff0c;尽快适应mysql语句&#xff0c;后⾯学了用户管 理&a…

实例讲解,一文弄懂workqueue和waitqueue

本期主题&#xff1a; 讲清workqueue和waitqueu&#xff1a; 从中断讲起waitqueue是什么workqueue总结 往期链接&#xff1a; linux设备驱动中的并发linux设备驱动中的编译乱序和执行乱序linux设备驱动之内核模块linux字符驱动linux字符驱动之ioctl部分linux字符驱动之read、…

数据结构07:查找[C++][朴素二叉排序树BST]

图源&#xff1a;文心一言 考研笔记整理8k字&#xff0c;小白友好、代码可跑&#xff0c;请小伙伴放心食用~~&#x1f95d;&#x1f95d; 第1版&#xff1a;查资料、写BUG、画导图、画配图~&#x1f9e9;&#x1f9e9; 参考用书&#xff1a;王道考研《2024年 数据结构考研复习…

【MATLAB第45期】基于MATLAB的深度学习SqueezeNet卷积神经网络混凝土裂纹图像识别预测模型

【MATLAB第45期】基于MATLAB的深度学习SqueezeNet卷积神经网络混凝土裂纹图像识别预测模型 引言 该文章展示如何微调名为SqueezeNet的预训练深度卷积网络&#xff0c;以执行裂纹图像分类预测。并使用一种称为Grad-CAM的技术来解释和分析分类输出。文章使用L.Zhang介绍的混凝土…

C++初阶之C++入门最全详解

C入门 1. C关键字&#xff08;C98&#xff09;2. 命名空间2.1 命名空间定义2.2 命名空间使用 3. C输入&输出4. 缺省参数4.1 缺省参数概念4.2 缺省参数分类 5. 函数重载5.1 函数重载概念5.1.1 参数类型不同5.1.2 参数个数不同5.1.3 参数类型顺序不同 5.2 C支持函数重载的原理…

Spring Cloud Alibaba Seata(二)

目录 一、Seata 1、Seata-AT模式 1.1、具体案例 1.2、通过Seata的AT模式解决分布式事务 2、Seata-XA模式 3、Seata-TCC模式 4、Seata-SAGA模式 一、Seata 1、Seata-AT模式 概念&#xff1a;AT模式是一种无侵入的分布式事务解决方案&#xff0c;在 AT 模式下&#xff0c…

git修改默认主分支main为master和设置git默认创建的项目默认分支都为master

文章目录 前言一、设置新建仓库默认分支为master1.点击GitHub右上角的头像2. 选中settings&#xff08;设置&#xff09;3.点击Repositories&#xff08;存储库&#xff09;4.更改main为master后点击update 二、设置已建仓库的默认分支为master1.找到你要改的项目点击settings&…

STL序列式容器的概念

文章目录 1 迭代器2 什么是序列式容器3 序列式容器容器中常见的函数成员参考 1 迭代器 迭代器和C指针非常类似&#xff0c;它可以是需要的任意类型&#xff0c;通过迭代器可以指向容器中的某个元素&#xff0c;如果需要&#xff0c;还可以对该元素进行读写操作。 迭代器类别 …

ThreeJS案例一——在场景中添加视频,使用人物动作以及用键盘控制在场景中行走的动画

准备 首先我们需要两个模型&#xff0c;一个是场景模型&#xff0c;另一个是人物模型。 人物模型我这里用的Threejs官网中的给的模型&#xff0c;名称是Xbot.glb。 当然人物模型也可以自己去这个网站下载sketchfab&#xff0c;下载后给模型添加动画mixamo 下载模型动画 先让…

C++ STL vector容器用法

文章目录 1 vector初始化方法2 vector容器迭代器3 data()函数4 emplace_back()和push_back()的区别5 insert()函数6 vector删除元素参考 1 vector初始化方法 方式1&#xff1a; std::vector<double> values;//创建空的vcetor values.reserve(20); //设置容器的内存分配…