【管理运筹学】第 7 章 | 图与网络分析(4,最大流问题)

系列文章目录

【管理运筹学】第 7 章 | 图与网络分析(1,图论背景以及基本概念、术语、矩阵表示)
【管理运筹学】第 7 章 | 图与网络分析(2,最小支撑树问题)
【管理运筹学】第 7 章 | 图与网络分析(3,最短路问题)

文章目录

  • 系列文章目录
  • 引言
  • 四、最大流问题
    • 4.1 有关概念与定理
      • 4.1.1 基本概念
      • 4.1.2 有关定理
    • 4.2 寻找最大流的标号法
  • 写在最后


引言

承接系列文章,这一节主要来学习最大流问题。

生活中,有许多流量问题,例如公路系统的车辆流、控制系统的信息流和金融系统的现金流等等。对于这类包含了流量问题的系统,我们往往要在现有系统容量的约束下,求出系统的最大流。


四、最大流问题

4.1 有关概念与定理

4.1.1 基本概念

定义 1 —— 对于网络 G = ( V , A , C ) G=(V,A,C) G=(V,A,C) ,在弧集合 A A A 上的一个函数 f = { f ( v i , v j } f=\{f(v_i,v_j\} f={f(vi,vj} 称为网络流 f ( v i , v j ) f(v_i,v_j) f(vi,vj) 为弧 a i j a_{ij} aij 上的流。 c i j c_{ij} cij 为弧 a i j a_{ij} aij 所能通过的最大流量。

定义 2 —— 满足下列条件的网络流 f f f 称为可行流

(1)容量限制条件。即每条弧上的流量满足 0 ≤ f ( v i , v j ) ≤ c i j . 0 \leq f(v_i,v_j) \leq c_{ij}. 0f(vi,vj)cij.

(2)平衡条件。对于中间点,流出量和流入量相等。对于起点,记所有从起点流出的流量,减去流进起点的流量为 V ( f ) V(f) V(f) ;对于终点,所有从终点流出的流量,减去流进终点的流量为 − V ( f ) . -V(f). V(f).

V ( f ) V(f) V(f) 即为可行流 f f f 的流量,即起点的净输出量或终点的净输入量。

可行流总是存在的,如所有弧的流量 f i j f_{ij} fij 均取 0 ,就是一个可行流, V ( f ) = 0. V(f)=0. V(f)=0.

定义 3 —— 网络中可能会有多条可行流,其中流量最大的可行流我们称为最大流

μ = ( x , ⋯ , u , v , ⋯ , t ) \mu=(x,\cdots,u,v,\cdots,t) μ=(x,,u,v,,t) 是网络 G G G 中的一条初等链(各个顶点均不相同),定义链的方向为 x → t x\to t xt 。若链上有弧 ( u , v ) (u,v) (u,v) 的方向与 μ \mu μ 的方向一致,称其为前向弧,所有前向弧记为 μ + \mu^+ μ+ 。若链上有弧 ( v , u ) (v,u) (v,u) 的方向与 μ \mu μ 的方向相反,称其为后向弧,所有后向弧记为 μ − \mu^- μ

对于一个可行流 f = { f i j } f=\{f_{ij}\} f={fij} ,我们把网络中使 f i j = c i j f_{ij}=c_{ij} fij=cij 的弧称为饱和弧,使 f i j < c i j f_{ij}<c_{ij} fij<cij 的弧称为非饱和弧,把 f i j = 0 f_{ij}=0 fij=0 的弧称为零流弧 f i j > 0 f_{ij}>0 fij>0 的弧称为非零流弧

定义 4 —— 设 f f f 为一个可行流, v s v_s vs 是网络起点, v t v_t vt 是网络终点, μ \mu μ 是从起点到终点的一条链,若 μ \mu μ 满足下列条件:

(1)所有前向弧均为非饱和弧。(2)所有后向弧均为非零流。

则称 μ \mu μ 为关于可行流 f f f 的一条增广链

定义 5 —— 对于有向网络 G = ( V , A , C ) G=(V,A,C) G=(V,A,C) ,若 S S S V V V 的子集, S ‾ = V − S \overline{S}=V-S S=VS ,则称弧集合 ( S , S ‾ ) = { a ∣ a = ( u , v ) , u ∈ S , v ∈ S ‾ } (S,\overline{S})=\{a|a=(u,v),u\in S,v\in\overline{S}\} (S,S)={aa=(u,v),uS,vS} 为网络 G G G 的一个截集,并将截集中所有弧容量之和称为截容量,简称截量。所有截集中截量最小的称为最小截,其容量为最小截量

感觉这不就是割集的意思嘛,不过是在有向图中。比如下图,如果 S = { v 2 , v 3 , v 4 , v 5 , v 6 } S=\{v_2,v_3,v_4,v_5,v_6\} S={v2,v3,v4,v5,v6} ,截集为 { ( v 2 , v 1 ) , ( v 3 , v 1 } \{(v_2,v_1),(v_3,v_1\} {(v2,v1),(v3,v1} 。不能加上 ( v 1 , v 4 ) (v_1,v_4) (v1,v4) ,它不是这个截集中的,因为它的起点不在集合 S S S 中。

在这里插入图片描述

4.1.2 有关定理

定理 1 —— 若 f ∗ f^* f 是网络 G = ( V , A , C ) G=(V,A,C) G=(V,A,C) 上的可行流,则可行流 f ∗ f^* f 为最大流的充要条件为 G G G 中不存在关于 f ∗ f^* f 的增广链 μ \mu μ

定理 2(最大流量、最小截量定理) —— 任一网络 G = ( V , A , C ) G=(V,A,C) G=(V,A,C) 中,从起点 v s v_s vs 到终点 v t v_t vt 的最大流的流量,等于分离 v s v_s vs v t v_t vt 的最小截集的容量。

4.2 寻找最大流的标号法

寻找最大流的标号法,是由 Ford(福特)和 Fulkerson(福克尔逊)首先提出来的,所以又称 2F 算法。

2F 算法可以分为两大过程。首先是标号过程,检查是否存在增广链,如果不存在,现行流就是最大流;否则,进入调整过程,也叫增值过程。标号与调整过程如下。

(1)标号过程

先给起点 v s v_s vs 标上 ( 0 , + ∞ ) (0,+\infty) (0,+),不断其它点 v i , v j v_i,v_j vi,vj (包括后向弧),此时有下列两种情况:

  1. 在前向弧 ( v i , v j ) (v_i,v_j) (vi,vj) 上,若 f i j < c i j f_{ij}<c_{ij} fij<cij ,则给 v j v_j vj 标号 ( v i , l ( v j ) ) (v_i,l(v_j)) (vi,l(vj)) 。其中, l ( v j ) = m i n { l ( v i ) , c i j − f i j } l(v_j)=min\{l(v_i),c_{ij}-f_{ij}\} l(vj)=min{l(vi),cijfij}
  2. 在后向弧 ( v j , v i ) (v_j,v_i) (vj,vi) 上,若 f j i > 0 f_{ji}>0 fji>0 ,则给 v j v_j vj 标号 ( − v i , l ( v j ) ) (-v_i,l(v_j)) (vi,l(vj)) 。其中, l ( v j ) = m i n { l ( v i ) , f j i } l(v_j)=min\{l(v_i),f_{ji}\} l(vj)=min{l(vi),fji}

重复上述步骤,一旦终点 v t v_t vt 得到标号,表明得到一条增广链,进入调整过程。

若标号过程进行不下去,则算法结束,此时可行流即为最大流。

(2)调整过程

首先根据各点标号进行回溯,找出增广链。增广链的调整量 θ \theta θ 为终点 l ( v t ) l(v_t) l(vt)
f i j ′ = { f i j + l ( v t ) , ( v i , v j ) ∈ μ + f i j − l ( v t ) , ( v i , v j ) ∈ μ − f i j , e l s e f'_{ij}=\begin{cases} f_{ij}+l(v_t), & (v_i,v_j)\in \mu^+ \\ f_{ij}-l(v_t), & (v_i,v_j)\in \mu^- \\ f_{ij},& else\\ \end{cases} fij= fij+l(vt),fijl(vt),fij,(vi,vj)μ+(vi,vj)μelse 即现行流中的前向弧加上调整量,后向弧减去调整量,现行流外的流量不变。

对新流 f i j ′ f_{ij}' fij ,重新进行标号过程。


写在最后

最大流问题,相较于之前的最短路还是较为简单些的,不过这只是一个载体,后面结合了最小费用流可就不简单了。

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

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

相关文章

学习笔记-配置备份静态路由及优先级

上一个笔记&#xff1a;学习笔记-静态路由配置有来无回导致无法访问目标IP 拓扑图&#xff1a; 书接上回。 模拟R2至R3之间的链路中断&#xff0c;配置备份路由通过R1访问R3。 shutdown掉R2的gi0/0/2端口&#xff0c;模拟链路中断。pingR3的gi0/0/0和R3的loopback0&#xff…

Java中如何获取一个字符串是什么类型

Java中如何获取一个字符串是什么类型&#xff1f; 在Java中&#xff0c;您可以使用一些方法来确定一个字符串的类型。下面是一些常用的方法&#xff1a; 使用正则表达式&#xff1a;您可以使用正则表达式来匹配字符串是否符合特定的模式或格式&#xff0c;以确定其类型。例如&…

Android——数据存储(二)(二十二)

1. SQLite数据库存储 1.1 知识点 &#xff08;1&#xff09;了解SQLite数据库的基本作用&#xff1b; &#xff08;2&#xff09;掌握数据库操作辅助类&#xff1a;SQLiteDatabase的使用&#xff1b; &#xff08;3&#xff09;可以使用命令操作SQLite数据库&#xff1b; …

Leangoo领歌 -敏捷任务管理软件,任务管理更轻松更透明

​任务管理&#xff0c;简单易懂&#xff0c;就是对任务进行管理。那怎么可以更好进行任务管理呢&#xff1f;怎么样样可以让任务进度可视化&#xff0c;一目了然呢&#xff1f;有效的管理可以让我们事半功倍。 接下来我们看一下如何借助任务管理软件高效的做任务管理。 首先…

Python Opencv实践 - Harris角点检测

参考资料&#xff1a;https://blog.csdn.net/wsp_1138886114/article/details/90415190 import cv2 as cv import numpy as np import matplotlib.pyplot as pltimg cv.imread("../SampleImages/chinease_tower.jpg", cv.IMREAD_COLOR) plt.imshow(img[:,:,::-1])#…

【Python】多线程

进程、线程 现代操作系统比如Mac OS X&#xff0c;UNIX&#xff0c;Linux&#xff0c;Windows等&#xff0c;都是支持“多任务”的操作系统。 进程&#xff1a;就是一个程序&#xff0c;运行在系统之上&#xff0c;那么便称之这个程序为一个运行进程&#xff0c;并分配进程ID…

【echarts】如何修改折线图X轴每个刻度的间隔宽度,让拥挤的空间变大,所有坐标点的文案可以显示得下,Echarts x轴文本内容太长的几种解决方案

Echarts 如何修改折线图X轴每个刻度的间隔宽度&#xff0c;让拥挤的空间变大&#xff0c;所有坐标点的文案可以显示得下&#xff0c;Echarts x轴文本内容太长的几种解决方案 有以下几种方案&#xff0c;堪称最全方案&#xff1a; 1、dataZoom进行坐标的比例缩放 通过调整dataZ…

设计模式篇(Java):装饰者模式

&#x1f468;‍&#x1f4bb;本文专栏&#xff1a;设计模式篇-装饰者模式 &#x1f468;‍&#x1f4bb;本文简述&#xff1a;装饰者模式的详解以及jdk中的应用 &#x1f468;‍&#x1f4bb;上一篇文章&#xff1a; 设计模式篇(Java)&#xff1a;桥接模式 &#x1f468;‍&am…

vue+element使用阿里的图标库保存图标

阿里图标网站iconfont-阿里巴巴矢量图标库 我想使用保存图标&#xff0c;但是element的图标库没有找到可用的&#xff0c;首先在阿里的图标网站搜索保存 发现这个还不错 点击添加入库 点击购物车 点击添加至项目 点击下载到本地 把下载的压缩包里面的文件拖到自己项目里面 在m…

探索多态的本质【C++】

文章目录 多态的构成条件虚函数虚函数的重写&#xff08;覆盖&#xff09; 虚函数重写的两个例外C11 override和final区分重载、覆盖(重写)、隐藏(重定义)抽象类接口继承和实现继承多态的原理虚函数表 动态绑定和静态绑定动态绑定静态绑定 单继承中的虚函数表多继承中的虚函数表…

Java——》synchronized锁升级

推荐链接&#xff1a; 总结——》【Java】 总结——》【Mysql】 总结——》【Redis】 总结——》【Kafka】 总结——》【Spring】 总结——》【SpringBoot】 总结——》【MyBatis、MyBatis-Plus】 总结——》【Linux】 总结——》【MongoD…

mysql中GROUP_CONCAT函数详解

GROUP_CONCAT是MySQL中的一个聚合函数&#xff0c;它用于将多行数据按照指定的顺序连接成一个字符串&#xff0c;并返回结果。下面是对GROUP_CONCAT函数的详解&#xff1a; 语法&#xff1a; GROUP_CONCAT([DISTINCT] expr [,expr …] [ORDER BY {unsigned_integer | col_name…

Vue错误记录

文章目录 1. 项目build的时候报错Warning: Accessing non-existent property cat of module exports inside circular dependency2. WebpackOptionsValidationError: Invalid configuration object. Webpack has been initialised using a configuration object that does not …

数据结构与算法之(赫夫曼树,哈夫曼树,压缩软件)

一&#xff1a;思考 1.电报发送&#xff1a;二战的时候大家都知道那时候普遍会应用电报&#xff0c;如果让你来设计一个电报的发送编码你该如何设计呢&#xff1f; 2.压缩算法&#xff1a;给你10000个字符&#xff08;每个字符1btye&#xff0c;也就是8bit&#xff09;的文件&a…

GitHub星标超70K,阿里大佬的架构总结“分布式全解”笔记霸榜

分布式架构与微服务平台是当今IT界的关键技术&#xff0c;也是资深软件工程师和系统架构师必须掌握的核心技术。 因此小编为各位粉丝朋友带来这份阿里大佬的分布式笔记&#xff1a;从传统分布式架构迁移到基于容器技术的微服务架构为主线&#xff0c;全面、透彻地介绍了与分布…

华为回击:制裁无法阻挡中国科技创新 | 百能云芯

华为最新推出的Mate 60 Pro手机引发了中国市场的抢购热潮&#xff0c;这一成功的举措为华为带来了信心。华为在这个背景下再度推出两款新机&#xff0c;其中包括高阶版的Mate 60 Pro和折叠式手机Mate X5。这两款手机在首批预购开始后迅速售罄&#xff0c;不仅取得了市场的热烈欢…

JavaScript基础

1 JavaScript概述 1.1 什么是JavaScript 1.1.1 概念 JavaScript 是脚本语言&#xff0c;是一种解释性脚本语言&#xff08;代码不进行预编译&#xff09; JavaScript 是一种轻量级的编程语言。 JavaScript 是可插入 HTML 页面的编程代码。 JavaScript 插入 HTML 页面后&a…

CANoe中的工作模式之争:由一段简单的代码引出的问题

1、引子 有网友问我一个CAPL中timer定时器的代码问题。他在CANoe工程中写了一段代码:每5秒循环触发一次定时器事件程序,输出一句文本信息到Write窗口。但是执行后发现并不是每5秒触发一次定时器事件程序,而是非常快的触发定时器事件程序。当他把这段代码复制到一个新的CANo…

【开发】安防监控/视频汇聚/云存储/AI智能视频融合平台页面新增地图模式

AI智能分析网关包含有20多种算法&#xff0c;包括人脸、人体、车辆、车牌、行为分析、烟火、入侵、聚集、安全帽、反光衣等等&#xff0c;可应用在安全生产、通用园区、智慧食安、智慧城管、智慧煤矿等场景中。将网关硬件结合我们的视频汇聚/安防监控/视频融合平台EasyCVR一起使…

2023-简单点-怎么知道树莓派是什么cpu架构?

树莓派是几位&#xff1f; getconf LONG_BIT https://qengineering.eu/install-ncnn-on-raspberry-pi-4.html