运筹说 第82期 | 算法介绍之图与网络分析(二)

news2024/10/6 0:37:23

本期我们继续进行运筹学之图与网络分析算法的讲解,我们将对图与网络分析的基础知识进行一个简单的回顾,并介绍求解最大流问题和最小费用最大流的MATLABPython相关代码,以帮助大家利用工具快速求解最大流问题和最小费用最大流问题,做到事半功倍。由于篇幅有限,小编接下来只展示部分代码,小伙伴们可以关注“运筹说”公众号→后台回复“算法介绍之图与网络分析(二)”获取完整代码。话不多说,我们一起来看看吧!

 一、基础知识

1、最大流问题

最大流有关概念

(1) 可行流:对任一G中的边(vi, vj)有流量fij,称集合f={fij}为网络G上的一个流。且称满足容量限制条件和平衡条件的流f为可行流。

①容量限制条件:对G中每条边(vi, vj),有0≤fijcij

②平衡条件:对中间点vi有∑j fij =∑k fki,即物资的输入量与输出量相等。

(2)总流量:对收、发点vtvs,有∑i fsi =∑j fjt=WW为网络流的总流量。

(3)可增广链:容量网络G,若μ为网络中从vsvt的一条链,给μ定向为从vsvtμ上的边凡与μ同向称为前向边,凡与μ反向称为后向边,其集合分别用μ+和μ-表示,f是一个可行流,如果满足

 \begin{cases}0\le f_{ij}<c_{ij}\cdot(v_i,v_j)\in\mu^+\\ c_{ij}\ge f_{ij}>0\cdot(v_i,v_j)\in\mu^-\end{cases}

则称μ为从vsvt的(关于f的)可增广链。

(4) 可增广链的意义:沿着这条链从发点到收点输送的流,还有潜力可挖。

最大流-最小割定理

(1) 割集:容量网络G=(V,E,C),vs,vt为发、收点,若有边集E’为E的子集,将G分为两个子图G1,G2,其顶点集合分别记SS’,SS’=VSS’=∅,vs,vt分属S,S’,满足:①G(V,E- E’)不连通;②E’’为E’的真子集,而G(V,E- E’’)仍连通,则称E为G的割集,记E’=(S,S’)。

(2) 割集容量:割集(S,S’)中所有始点在S,终点在S’的边的容量之和,称为(S,S’)的割集容量,记为C(S,S’)。容量网络G的割集有多个,其中割集容量最小者称为网络G的最小割集容量(简称最小割)。

(3) 最大流-最小割定理:任一个网络G中,从vs到vt的最大流的流量等于分离vs、vt的最小割的容量。

(4) 最小割的意义:网络从发点到收点的各通路中,由容量决定其通过能力,最小割则是这些路中的咽喉部分,其容量最小,它决定了整个网络的最大通过能力。要提高整个网络的运输能力,必须首先改造这个咽喉部分的通过能力。

问题描述

求网络中一个可行流,使其流量达到最大,这种流称为最大流,这个问题称为(网络)最大流问题。

算法流程

2、最小费用流问题

基本概念

(1) 链的费用:已知网络G=(V,E,C,d),fG上的一个可行流,μ为从vsvt的(关于f的)可增广链,则链μ的费用为

d(\mu)=\sum\limits_{\mu^+}d_{ij}-\sum\limits_{\mu^-}d_{ij}

μ*是从vsvt所有可增广链中费用最小的链,则称μ*为最小费用可增广链。

(2) 长度网络:对网络G=(V,E,C,d),有可行流f,保持原网络各点,每条边用两条方向相反的有向边代替,各边的权lij按如下规则:

①当边(vi, vj)∈E,令

 这里+∞的意义是:这条边已饱和,不能再增大流量,否则要花费很高的代价,实际无法实现,因此权为+∞的边可从网络中去掉。

②当边(vj, vi)为原来G中边(vi, vj)的反向边,令

这里+∞的意义是此边流量已减少到0,不能再减少,权为+∞的边也可以去掉。

这样得到的网络L(f)称为长度网络(将费用看成长度)。

问题描述

已知容量网络G=(V,E,C),每条边(vi, vj)除了已给出容量cij外,还给出了单位流量的费用dij(≥0),记G=(V,E,C,d)。求G的一个可行流f={fij},使得流量W( f )=v,且总费用最小。

特别地,当要求f为最大流时,此问题即为最小费用最大流问题。

算法流程

3、算法对比

二、算法实现

1、最大流问题

(1)例题介绍

给定指定的一个有向图,v0为起点,v5为起点,每条边有指定的容量,求满足条件的从v0到v5的最大流。

 (2)平台实现

我们以上述例题为例,借助MATLABPython介绍实现求解最大流问题的相关代码。

①MATLAB

代码展示

代码调用

代码运行及最终结果展示如下,求得v0到v5的最大流为23,其中v0流向v1的流量为11,v0流向v2的流量为12,v2流向到v1的流量为1,v1流向到v3的流量为12,v2流向到v4的流量为11,v4流向v3的流量为7,v3流向v5的流量为19,v4流向v5的流量为4。

②Python

代码展示

  代码调用

代码运行及最终结果展示如下,求得v0到v5的最大流为23,其中v0流向v1的流量为11,v0流向v2的流量为12,v2流向到v1的流量为1,v1流向到v3的流量为12,v2流向到v4的流量为11,v4流向v3的流量为7,v3流向v5的流量为19,v4流向v5的流量为4。

(3)图形结果展示

v0到v5的最大流为23,每条边的流向及流量如图所示。

2、最小费用流问题

(1)例题介绍

在如图所示的运输网络上,求流量v为10的最小费用流,边上括号内为(cij, dij)。

(2)平台实现

我们以上述例题为例,借助MATLABPython介绍实现求解最小费用流问题的相关代码。

①MATLAB

代码展示

  代码调用

代码运行及最终结果展示如下,本例中MATLAB代码以1代表起点vs,以5代表终点vt,求得流v为10的最小费用流为48,其中vsv1的流量为4,vsv2的流量为8,v2到v1的流量为5,v2到v3的流量为3,v1到v3的流量为0,v3到vt的流量为3,v1到vt的流量为7。

②Python

代码展示

代码调用

代码运行及最终结果展示如下,本例中Python代码以0代表起点vs,以4代表终点vt,求得流量v为10的最小费用流为48,其中vsv1的流量为4,vsv2的流量为8,v2到v1的流量为5,v2到v3的流量为3,v1到v3的流量为0,v3到vt的流量为3,v1到vt的流量为7。

(3)图形结果展示

流量为10时vsvt的最小费用流为48,每条边的流向及流量如图所示。

三、参考资料

【最大流问题Python实现】

https://blog.csdn.net/anlian523/article/details/81202622

【最小费用流问题Python实现】

https://zhuanlan.zhihu.com/p/103521228

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

作者 | 尹萌娟 王连聚

责编 | 刘文志

审核 | 徐小峰

 

 

 

 

 

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

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

相关文章

Spring的Bean意义

一、Spring概述 1. Spring家族 官网&#xff1a;https://spring.ioSpring发展到今天已经形成了一种开发的生态圈&#xff0c;Spring提供了若干个项目&#xff0c;每个项目用于完成特定的功能。 2. Spring体系结构 ⑴. Spring Framework系统架构图 Spring Framework是Spri…

四、【React-Router5】样式丢失问题

文章目录1、先上结论2、修改上一节代码3、发现问题4、分析原因5、3个解决办法1、先上结论 public/index.html 中 引入样式时不写 ./ 写 / [ 常用 ]public/index.html 中 引入样式时不写 ./ 写 %PUBLIC_URL% [ 常用 ]使用 HashRouter 2、修改上一节代码 点击访问 上节代码&…

[附源码]SSM计算机毕业设计学生档案管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【错误 :Segmentation fault 】以及gdb调试 core duumped文件

core dumped文件&#xff08;核心转储文件&#xff09; 当进程意外终止&#xff0c;系统可以将该进程的地址空间的内容急终止的一些其它信息转储到核心转储文件 它的触发条件&#xff0c;当系统收到以下信号时就会产生coredumped文件。 SIGABRT &#xff1a;异常终止(abort)时…

野火FPGA进阶(1):基于SPI协议的Flash驱动控制

文章目录第48讲&#xff1a;基于SPI协议的Flash驱动控制0. 理论部分1. Flash全擦除实验key_filterflash_be_ctrlspi_flash_betb_flash_be_ctrltb_spi_flash_be2. Flash扇区擦除实验key_filterflash_se_ctrlspi_flash_se3. 数据读操作key_filteruart_txflash_read_ctrlspi_flash…

专注于元宇宙实际应用方案的企业

元宇宙的话题持续火热。国内互联网大厂正在加大对元宇宙相关技术和应用的研发&#xff0c;元宇宙正在逐步成为创新创业的主战场。企业元宇宙在教育、会展、文创、旅游、博物馆、文化艺术、娱乐、社交、版权、零售等等领域发力&#xff0c;增加客户对企业的认同。 也许未来只需一…

接口测试学习第一天

1. 接口 接口的定义&#xff1a;是指系统或组件之间的交互点&#xff0c;通过这些交互点可以实现数据的交互。&#xff08;数据交互的通道&#xff09; 接口的分类&#xff1a;硬件接口和软件接口&#xff1b;我们这里只关注软件层面的接口&#xff1b; 1.1 接口的类型 接…

LeetCode-28-找出字符串中第一个匹配项的下标

1、KMP算法$$ 解决本问题最简单的方法就是暴力穷举&#xff0c;思路简单但时间复杂度为O(m∗n)O(m*n)O(m∗n)。此处我们仅考虑最优的KMP算法&#xff0c;时间复杂度为O(mn)O(mn)O(mn)。 KMP算法的优化之处在于当我们对比haystackhaystackhaystack和needleneedleneedle时&…

[附源码]计算机毕业设计springboot基于Java酒店管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

亚马逊商品销售数据爬虫分析报告

家电产业和消费者升级悄然地展开。 市场的这种变化使消费者对家用电器的期望不再仅仅是一个简单的功能满足&#xff0c;而是更多的细节体验和技术创新。 通过洞察家用电器的消费特点&#xff0c;有利于确定市场的未来趋势&#xff0c;从而积极应对市场变化。 ▼ 我们围绕亚马逊…

AI智能视频技术在考古工作中的安防应用

文物考古关系着民族文化的传承、历史的记录与保留&#xff0c;工作意义重大。考古发掘工地由于面积大、区域多且分散&#xff0c;以及周边环境复杂&#xff0c;因此安全防护工作开展困难&#xff0c;整体的安全形势不容乐观。 一、考古现场安保面临问题&#xff1a;1、考古遗址…

K - Scholomance Academy Gym - 103202K

题目链接 题意&#xff1a;很长&#xff0c;读了很长时间才懂&#xff1a; 就是给一个物品评分&#xff0c;假设分数大于等于x&#xff0c;就将其判断为正数&#xff0c;否则判断为负数 这样判断肯定会出现一些误判&#xff0c;那么我们将判为负数的正数成为假正数&#xff0…

C. Set or Decrease(二分 + 有两个不确定情况如何二分)

Problem - 1622C - Codeforces 给你一个整数数组a1,a2,...,an和整数k。 在一个步骤中&#xff0c;你可以 选择某个索引i并将ai减少1&#xff08;使aiai-1&#xff09;。 或者选择两个索引i和j&#xff0c;将ai等于aj&#xff08;使aiaj&#xff09;。 为了使数组∑i1nai≤k的…

启动服务提供者报 zookeeper not connected错

今天启动zookeeper的服务提供者后&#xff0c;报 zookeeper not connected错&#xff0c;记录一下解决过程 意思是zookeeper注册中心连接不上&#xff0c;无非两个原因&#xff1a; 第一&#xff1a;zookeeper没有启动好。第二&#xff1a;zookeeper的ip以及端口号配置没配好 …

算法day35|860,406,452

目录 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球 860.柠檬水找零 class Solution:def lemonadeChange(self, bills: List[int]) -> bool:five,ten,twenty 0,0,0for bill in bills:#情况一&#xff1a;如果bills是5元&#xff0c;不需要找零if bill…

黑马点评--附近商铺

附近商铺 GEO数据结构 GEO就是Geolocation的简写形式&#xff0c;代表地理坐标。Redis在3.2版本加入了对GEO的支持&#xff0c;允许存储地理坐标消息&#xff0c;帮助我们根据经纬度来检索数据。常见的命令有&#xff1a; GEOADD&#xff1a;添加一个地理空间信息&#xff0…

gcexcel-java-5.2.5 Crack update in 2022-11-28

gcexcel高速 Java Excel 电子表格 API 库 在 Java 应用程序中以编程方式创建、编辑、导入和导出 Excel 电子表格。几乎可以在任何地方部署。 创建、加载、编辑和保存 Excel 电子表格 保存为 .XLSX、PDF、HTML、CSV 和 JSON 基于具有零 Excel 依赖性的 Excel 对象模型 在本地、…

Tomcat负载均衡部署动静分离

NginxTomcat架构拓扑 环境部署 Nginx服务器&#xff1a;IP地址192.168.32.3 Tomcat服务器1&#xff1a;IP地址192.168.32.4 Tomcat服务器2&#xff1a;IP地址192.168.32.5 关闭防火墙&#xff0c;关闭开机自启 systemctl stop firewalld.service setenforce 0Nginx 主机安…

计算机组成原理习题课第三章-1(唐朔飞)

计算机组成原理习题课第三章-1&#xff08;唐朔飞&#xff09; ✨欢迎关注&#x1f5b1;点赞&#x1f380;收藏⭐留言✒ &#x1f52e;本文由京与旧铺原创&#xff0c;csdn首发&#xff01; &#x1f618;系列专栏&#xff1a;java学习 &#x1f4bb;首发时间&#xff1a;&…

高电压放大器与高电流放大器该如何选择使用

虽然电压放大器和电流放大器都属于功率放大器的分支类型&#xff0c;所能起到的效果和作用也都是一致的&#xff0c;不过两者还是细微差别的。经常会有人在后台咨询“电压放大器和电流放大器有什么区别&#xff0c;该如何选择使用”等等&#xff0c;针对这些疑问&#xff0c;今…