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

news2024/11/19 5:24:21

系列文章目录

【管理运筹学】第 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.coloradmin.cn/o/1001265.html

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

相关文章

健身小程序制作流程详解

随着移动互联网的普及&#xff0c;越来越多的人开始关注健康和健身。为了满足这一需求&#xff0c;制作一款健身小程序已经成为一种趋势。本文将详细介绍如何使用第三方制作平台&#xff0c;如乔拓云网&#xff0c;制作健身小程序&#xff0c;让你轻松成为专家。 一、注册与登录…

CG MAGIC分享3ds Max卡顿未保存处理方法有哪些?

3ds Max进行建模、渲染这一系列过程中&#xff0c;大家使用中都会遇到各种原因导致软件卡顿或崩溃是很常见的情况。 可以说卡机没关系&#xff0c;可是卡顿发生时&#xff0c;如果之前的工作没有及时保存&#xff0c;可能会导致数据的丢失和时间的浪费。这就是最让人烦躁的了&…

Pytorch 多卡并行(1)—— 原理简介和 DDP 并行实践

近年来&#xff0c;深度学习模型的规模越来越大&#xff0c;需要处理的数据也越来越多&#xff0c;单卡训练的显存空间和计算效率都越来越难以满足需求。因此&#xff0c;多卡并行训练成为了一个必要的解决方案本文主要介绍使用 Pytorch 的 DistributedDataParallel&#xff08…

Java开发分布式抽奖系统

Lottery 基于Springboot&#xff0c;Dubbo 等开发的分布式抽奖系统 1. 环境 配置 规范 2. 搭建(DDD RPC)架构 DDD&#xff08;Domain-Driven Design 领域驱动设计&#xff09;是由Eric Evans最先提出&#xff0c;目的是对软件所涉及到的领域进行建模&#xff0c;以应对系统…

阿里云轻量应用服务器为什么便宜?CPU性能差吗?

阿里云轻量应用服务器2核2G3M带宽优惠价108元一年&#xff0c;轻量应用服务器为什么便宜&#xff1f;是因为性能差吗&#xff1f;并不是&#xff0c;轻量应用服务器不限制CPU基准性能&#xff0c;轻量有月流量限制&#xff0c;轻量不支持指定CPU处理器&#xff0c;阿里云轻量2核…

研发效能行业发展趋势及人才认证的重要性丨IDCF

在当今的高科技环境下&#xff0c;“研发效能”已成为企业竞争和发展的关键因素。近年来&#xff0c;随着技术的快速发展&#xff0c;研发效能行业也在不断演进&#xff0c;并且将在未来几年内持续发展。本文将探讨研发效能行业的发展趋势以及人才认证的重要性。 一、研发效能…

便捷查询中通快递,详细物流信息轻松获取

在如今快节奏的生活中&#xff0c;快递已成为人们生活中不可或缺的一部分。然而&#xff0c;快递查询却常常让人头疼&#xff0c;因为需要分别在不同的快递公司官网上进行查询&#xff0c;耗费时间和精力。为了解决这个问题&#xff0c;固乔科技推出了一款便捷的快递查询助手&a…

Deepface使用教程

一&#xff1a;github地址 GitHub - iperov/DeepFaceLab: DeepFaceLab is the leading software for creating deepfakes. GitHub - iperov/DeepFaceLive: Real-time face swap for PC streaming or video calls DeepFaceLab为视频处理。 DeepFaceLabLive为直播版本。 此处C…

vue3中css使用script中定义的变量

代码 <template><div class"box">haha</div> </template><script setup lang"ts"> const boxWidth 500px </script><style lang"scss"> .box {width: v-bind(boxWidth);height: 200px;background-c…

Allegro166版本如何在颜色管理器中实时显示层面操作指导

Allegro166版本如何在颜色管理器中实时显示层面操作指导 在用Allegro166进行PCB设计的时候,需要在颜色管理器中频繁的开关层面。但是166不像172一样在颜色管理器中可以实时的开关层面,如下图 需要打开Board Geometry/Soldermask_top层,首先需要勾选这个层面,再点击Apply即…

2023年车载超声波雷达行业研究报告

第一章 行业概况 车载超声波雷达&#xff0c;通常在英文中被称为“Automotive Ultrasonic Radar”或“Automotive Ultrasonic Sensor”&#xff0c;是一种使用超声波来检测车辆周围物体的距离的传感器。这个行业主要关注的是为汽车提供停车辅助、防撞和其他安全功能。 图 超声…

GDB调试方法汇总

gcc常用选项 选项含义描述-o filename指定输出文件名&#xff0c;在编译目标代码时&#xff0c;可不选&#xff0c;不指定filename时&#xff0c;默认文件名是a.out-c只编译不链接&#xff0c;生成目标文件.o-S只编译不汇编&#xff0c;生成汇编代码-E只进行预编译&#xff0c…

MyBatis:The error occurred while setting parameters;foreach语句不生效

根本原因就是在参数上&#xff0c;列举一下可能的原因&#xff1a; 1.sql语句中的传的参数类型和数据库中不一致 2.#{}写成${} 3.也有说是在sql语句后加了“&#xff1b;”有影响的 本人sql语句如下&#xff1a; 该条语句的参数是list&#xff0c;list中存着试卷对象&#xff…

雅思口语回答拿不准,chatgpt担任考官帮你润色文本

目录 你现在是一位雅思口语考官&#xff0c;请你现在以雅思口语的评价标准&#xff0c;来对于我的回答进行打分 问题是“Do you like wearing T-shirts?”&#xff0c;我即将在下一句话中进行回答&#xff0c;请你进行评价&#xff0c;请等待我的回答&#xff0c;请等待我的回…

【Linux】编辑器 vim

1、vim的基本概念 vi/vim【一款文本编辑器】vim【一款多模式编辑器】vi/vim 的区别简单点来说&#xff0c;它们都是多模式编辑器&#xff0c;不同的是 vim 是 vi 的升级版本&#xff0c;它不仅兼容vi的所有指令&#xff0c;而且还有一些新的特性在里面。例如语法加亮&#xff0…

Android高德地图截屏功能(可包含自定义控件)

一、不包含自定义控件 地图 SDK 支持对当前屏幕显示区域进行截屏&#xff0c;可以对地图、覆盖物&#xff08;包含信息窗口&#xff09;、Logo进行截取屏幕&#xff0c;这其中不包括地图控件、Toast窗口。 详细示例如下&#xff1a; // 对地图进行截屏aMap!!.getMapScreenSho…

ajax day3

3、将普通对象转为查询参数字符串形式&#xff1a; 创建URLSearchParams参数&#xff0c;再用toString方法转为字符串 4、xhr对象 请求参数&#xff1a;body参数 5、promise promise对象一旦被兑现或拒绝&#xff0c;就是已敲定了&#xff0c;状态无法再被改变。故此处先执行…

基于Python和mysql开发的智慧校园答题考试系统(源码+数据库+程序配置说明书+程序使用说明书)

一、项目简介 本项目是一套基于Python和mysql开发的智慧校园答题考试系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Python学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都…

第十章 数组和指针

本章介绍以下内容&#xff1a; 关键字&#xff1a;static 运算符&#xff1a;&、*&#xff08;一元&#xff09; 如何创建并初始化数组 指针&#xff08;在已学过的基础上&#xff09;、指针和数组的关系 编写处理数组的函数 二维数组 人们通常借助计算机完成统计每月的支出…

konisGraph学习。复杂查询优化记录

最近有需求是查两个公司之间的投资关系 比如 a和b之间有哪些直接投资和间接投资。 例如 a->b a->e->b a->c->d->b b->f->a 需求是查出7跳以内的ab之间的投资关系 v的标签是company_name,属性是company_name ,eid 其中ideid e的标签是inv…