数学建模——最大流问题(配合例子说明)
目录
一、最大流有关的概念
例1
1、容量网络的定义
2、符号设置
3、建立模型
3.1 每条边的容量限制
3.2 平衡条件
3.3 网络的总流量
4、网络最大流数学模型
5、计算
二、最小费用流
例2
【符号说明】
【建立模型】
(1)各条边的流量限制
(2)网络总流量
(3)网络总费用
(4)中间点的流量平衡
【数学模型】
【模型求解】
三、最大匹配问题
例3
【问题假设】
【问题分析】
【符号设置】
【数学模型】
【模型求解】
一、最大流有关的概念
最大流是应用广泛的一类问题,例如交通运输网络中的人流、车流、物流;供水网络中的水流、金融系统中的资金流;通讯系统中的信息流。上世纪50年代Ford,Fulkerson建立的《网络流理论》是网络应用的基础。
例1
如图1所示网络为输油管道网络,vs为起点,vt为终点,v1,v2,v3,v4为中转站,边上的数字表示该管道的最大输油能力(t/h)。问如何安排各管道的输油量,才能使得从vs到vt的输油量最大。
1、容量网络的定义
设有连通图G=(V,E),G的每一条边(vi,vj)上有非负数cij称为容量,仅有一个入次为0的点vs称为发点(源),一个出次为0的点vt称为收点(汇),其余点位中间点,这样的网络G称为容量网络,记为G=(V,E,C)。如图1所示。
2、符号设置
- Cij 边(i,j)的容量限制;
- fij 边(i,j)的实际流量;(称f={fij}为网络的一个流。)
- W 网络的总流量;
3、建立模型
3.1 每条边的容量限制
3.2 平衡条件
对中间点u,流入=流出,即
3.3 网络的总流量
称发点流量之和或汇点流量之和为网络总流量(忽略损失)。
4、网络最大流数学模型
5、计算
编写例1的Lingo计算程序,将计算结果填入表1,将数据反映如图1,得到图2.
sets:
dian/vs v1 v2 v3 v4 vt/:;
bian(dian,dian)/vs,v1 vs,v3 vs,v4 v1,v2 v1,v3 v2,v3 v2,vt v3,vt v3,v4 v4,v3 v4,vt/:c,f;
endsets
data:
c=4 3 4 2 1 2 4 2 3 2 3;
enddata
max=w;
w=@sum(bian(i,j)|j#eq#6:f(i,j));
@for(bian(i,j):f(i,j)<c(i,j));
@for(dian(k)|k#ne#1#and#k#ne#6:@sum(bian(i,k):f(i,k))=@sum(bian(k,j):f(k,j)));
表1 流量分布(不唯一)
fij | V1 | V2 | V3 | v4 | vt |
Vs | 3 | 4 | |||
V1 | 2 | 1 | |||
V2 | 2 | ||||
V3 | 1 | 2 | |||
v4 | 2 | 3 |
如图2所示,称形如(vs,v4),(v4,vt),(v4,v3),(v1,v2),(v1,v3)为饱和边;其余的边都是非饱和边。
要增大网络的流量,必须对饱和边扩容!!
二、最小费用流
设G=(V,E,C)为流量网络,边(i,j)除了容量限制cij外,还有因为流量而产生的单位费用dij(dij>0),记为G=(V,E,C,d)。这时如果不管流量大小,而只把网络流产生的费用当产目标,最优解必定是0,即各条边的实际流量为0时费用最小。研究方法必须改变为保持流量一定的情况下,使得流量产生的总费用最小。当网络流量保持最大而流量费用最小的网络流称为最小费用最大流。
例2
如图3所示网络G=(V,E,c,d),每条边有两个数字,第一个是容量限制,第二个是流量产生的单位费用。求该网络的最小费用最大流(最大流例1求得为7)。
【符号说明】
- G=(V,E,c,d] 如图3所示网络图;
- Cij 边(i,j)的管道容量限制;
- Dij 边(i,j)的单位费用;
- Xij 边(i,j)的实际流量;
- W 网络G的总流量。
【建立模型】
(1)各条边的流量限制
(2)网络总流量
(3)网络总费用
(4)中间点的流量平衡
【数学模型】
【模型求解】
编写lingo求解程序,计算得个各条边的实际流量见表2和总费用为50.(总流量为7时)
sets:
dian/vs v1 v2 v3 v4 vt/:;
bian(dian,dian)/vs,v1 vs,v3 vs,v4 v1,v2 v1,v3 v2,v3 v2,vt v3,vt v3,v4 v4,v3 v4,vt/:c,x,d;
endsets
data:
c=4 3 4 2 1 2 4 2 3 2 3;
d=3 3 2 4 2 1 3 3 3 2 4;
enddata
min=@sum(bian:d*x);
w=@sum(bian(i,j)|j#eq#6:x(i,j));
@for(bian(i,j):x(i,j)<c(i,j));
@for(dian(k)|k#ne#1#and#k#ne#6:@sum(bian(i,k):x(i,k))=@sum(bian(k,j):x(k,j)));
w=7;
表2 最小费用的流量分布
fij | V1 | V2 | V3 | v4 | vt |
Vs | 2 | 2 | 3 | ||
V1 | 2 | ||||
V2 | 2 | ||||
V3 | 2 | ||||
v4 | 3 |
三、最大匹配问题
问题来源:
有n个人,m件工作,每个人的工作能力不同,各能胜任某几项工作。假设每个只做一件工作;一件工作只需一个人做,怎样分配才能使得尽量多的工人有工作。
转化为匹配问题:
- x1,x2,…,xn表示工人;
- y1,y2,…,ym表示工作,
- X表示{x1,x2,…,xn}, Y表示{y1,y2,…,ym}。
这样就产生一个二部图G=(X,Y,E),其中E中的边(xi,yj)就表示xi胜任工作yj。如图4所示
匹配定义:
二部图G=(X,Y,E),M是E的子集,M中任意两条边都没有公共端点,则称M是G的一个匹配(对集)。使得|M|达到最大的匹配称为最大匹配。
例3
设有5位待业者,5项工作,他们各自能胜任的工作情况如图5所示,设计一个就业方案,使尽量多人能就业。
【问题假设】
一人最多一工作,一工作最多一人。
【问题分析】
注意到,对xi来说,出次可能不唯一,但最多有一条边可能实现;对yj来说,入次可能不唯一,但也最多一条边实现。根据流量平衡,在xi前置vs作为发点;在yj后置vt作为汇点,将图5改造为流量网络,见图六。
如图6所示流量网络图G=(V,E,C),其中每条边的容量都为1.
【符号设置】
- G=(V,E,C)流量网络图,如图6;
- vs 发点;
- vt 汇点;
- x1,…,x5,y1,…,y5,网络中间点;
- Cij 边(i,j)的容量限制,且cij=1,(i,j)∈E;
- xij 边(i,j)的实际流量,且只取0-1;
【数学模型】
【模型求解】
编写Lingo程序,计算得到最大匹配为4,具体安排反映在图6上,见图7.
sets:
dian/vs x1 x2 x3 x4 x5 y1 y2 y3 y4 y5 vt/:;
bian(dian,dian)/vs,x1 vs,x2 vs,x3 vs,x4 vs,x5
x1,y1 x1,y2 x1,y3 x2,y1 x2,y4 x3,y4 x3,y5 x4,y5
x5,y4 x5,y5 y1,vt y2,vt y3,vt y4,vt y5,vt/:x,c;
endsets
data:
c=1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1;
enddata
n=@size(dian);
max=@sum(bian(i,j)|i#eq#1:x(i,j));
@for(bian:@bin(x));
@for(bian:x<c);
@for(dian(k)|k#ne#1#and#k#ne#n:@sum(bian(i,k):x(i,k))=@sum(bian(k,j):x(k,j)));
相关文章:

数学建模——最大流问题(配合例子说明)
目录 一、最大流有关的概念 例1 1、容量网络的定义 2、符号设置 3、建立模型 3.1 每条边的容量限制 3.2 平衡条件 3.3 网络的总流量 4、网络最大流数学模型 5、计算 二、最小费用流 例2 【符号说明】 【建立模型】 (1)各条边的流量限制 &a…...

AAOS CarMediaService 服务框架
文章目录 前言MediaSessionCarMediaService作用是什么?提供了哪些接口?如何使用?CarMediaService的实现总结 前言 CarMediaService 是AAOS中统一管理媒体播放控制、信息显示和用户交互等功能的服务。这一服务依赖于android MediaSession框架…...

gRPC之gRPC转换HTTP
1、gRPC转换HTTP 我们通常把RPC用作内部通信,而使用Restful Api进行外部通信。为了避免写两套应用,我们使用grpc- gateway 把gRPC转成HTTP。服务接收到HTTP请求后,grpc-gateway把它转成gRPC进行处理,然后以JSON 形式返回数据。…...

【十四】记一次MySQL宕机恢复过程,MySQL INNODB 损坏恢复
记一次MySQL宕机恢复过程 简介:一个业务数据库疏于运维管理,突然在今天崩溃宕机了,真是让人抓狂,上面也不知道积累了多久的数据,平时也没有定期做好备份,这下岂不是瞎了啊,经过不断的收集信息和…...

从0开始在Vscode中搭建Vue2/3项目详细步骤
1.安装node.js:Node.js下载安装及环境配置教程【超详细】_nodejs下载_WHF__的博客-CSDN博客 node.js自带npm,无需单独安装。 验证: node -v npm -v 2.先简单创建一个空文件夹,vscode进入该文件夹,并打开终端。 3.安装cnpm&…...
JavaScript ES6类的定义与继承
文章目录 一、class方式定义类1.认识class定义类2.类和构造函数的异同3.类的构造函数4.类的实例方法5.类的访问器方法6.类的静态方法 二、继承1.extends实现继承2.super关键字3.继承内置类4.类的混入mixin 三、ES6转ES51.class转换2.extends转换 四、多态 一、class方式定义类 …...

中科芯与IAR共建生态合作,IAR集成开发环境全面支持CKS32系列MCU
中国上海–2023年10月18日–嵌入式开发软件和服务的全球领导者IAR今日宣布,与中科芯集成电路有限公司(以下简称中科芯)达成生态合作,IAR已全面支持CKS32系列MCU的应用开发。这一合作将进一步推动嵌入式系统的发展,并为…...

设计模式:外观模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)
大家好!本节主要介绍设计模式中的外观模式。 简介: 外观模式,它是一种设计模式,它为子系统中的一组接口提供一个统一的、简单的接口。这种模式主张按照描述和判断资料来评价课程,关键活动是在课程实施的全过程中进行…...

Leetcode—34.在排序数组中查找元素的第一个和最后一个位置【中等】
2023每日刷题(六) Leetcode—34.在排序数组中查找元素的第一个和最后一个位置 实现代码 /*** Note: The returned array must be malloced, assume caller calls free().*/ int lower_bound(int *arr, int numsSize, int target) {// 左闭右开区间[lef…...

Java 8 新特性 Ⅱ
方法引用 举例: Integer :: compare 理解: 可以看作是基于lambda表达式的进一步简化 当需要提供一个函数式接口的实例时, 可以使用lambda表达式提供实例 当满足一定条件下, 可以使用方法引用or构造器引用替换lambda表达式 实质: 方法引用作为函数式接口的实例 (注: 需要熟悉…...
C语言学习书籍推荐
C语言学习书籍推荐如下: 《C程序设计语言》(The C Programming language):这本书由C语言创始人Brian W. Kernighan和Dennis M. Ritchie所写,是介绍标准C语言及其程序设计方法的权威性经典著作。《C陷阱与缺陷》&#…...

IntelliJ IDEA Maven加载超时问题
IDEA创建Maven项目遇到如下错误: Could not transfer artifact org.apache.maven.plugins:maven-compiler-plugin:pom:3.10.1 from/to central (Central Repository:): Connect to repo.maven.apache.org:443 [repo.maven.apache.org/146.75.112.215] failed: conn…...
Spring中事务失效的几种场景及解决办法
未抛出异常:如果在一个带有事务的方法中没有抛出异常,Spring无法检测到事务失败,从而无法回滚。解决方法是确保在事务中遇到错误时抛出异常。 异常被捕获:如果在一个带有事务的方法中抛出异常,但被捕获并处理了&#…...

第五届太原理工大学程序设计竞赛新生赛(初赛)题解
第五届太原理工大学程序设计竞赛新生赛(初赛)题解 时隔半年重做一次,还是有几道不会,,,,, ⭐️A.饿饿饭饭 题目: 🌟题解: 很简单,签…...

微信小程序开发之后台数据交互及wxs应用
目录 一、后端准备 1. 应用配置 2. 数据源配置 二、数据库 1. 创建 2. 数据表 3. 数据测试 三、前端 1. 请求方法整合 2. 数据请求 3. WXS的使用 4. 样式美化 5. 页面 一、后端准备 通过SpringMVC及mybatis的技术学习,还有前后端分离的技术应用&…...
Java进阶篇--并发容器之ThreadLocal内存泄漏
目录 ThreadLocal内存泄漏的原因? 改进和优化 cleanSomeSlots方法 expungeStaleEntry方法 replaceStaleEntry方法 为什么使用弱引用? Thread.exit() ThreadLocal内存泄漏最佳解决方案 在使用完毕后立即清理ThreadLocal 使用InheritableThreadL…...

js实现红包雨功能(canvas,react,ts),包括图片不规则旋转、大小、转速、掉落速度控制、屏幕最大红包数量控制等功能
介绍 本文功能由canvas实现红包雨功能(index.tsx)本文为react的ts版。如有其他版本需求可评论区观赏地址,需过墙 import React, { Component } from react; // import ./index.css; import moneyx from /assets/images/RedEnvelopeRain/bal…...

【数字IC设计/FPGA】FIFO与流控机制
流控,简单来说就是控制数据流停止发送。常见的流控机制分为带内流控和带外流控。 FIFO的流水反压机制 一般来说,每一个fifo都有一个将满阈值afull_value(almost full)。当fifo内的数据量达到或超过afull_value时,将满…...

C++笔记之遍历vector的所有方式
C笔记之遍历vector的所有方式 —— 2023年4月15日 上海 code review 文章目录 C笔记之遍历vector的所有方式1.普通for循环2.迭代器版3.const迭代器4.C11引入的范围for循环5.使用auto关键字和迭代器6.使用std::for_each算法7.使用std::for_each和lambda表达式8.普通版vector::at…...

OpenCV 笔记(2):图像的属性以及像素相关的操作
Part11. 图像的属性 11.1 Mat 的主要属性 在前文中,我们大致了解了 Mat 的基本结构以及它的创建与赋值。接下来我们通过一个例子,来看看 Mat 所包含的常用属性。 先创建一个 3*4 的四通道的矩阵,并打印出其相关的属性,稍后会详细…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
vscode里如何用git
打开vs终端执行如下: 1 初始化 Git 仓库(如果尚未初始化) git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例
使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件,常用于在两个集合之间进行数据转移,如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model:绑定右侧列表的值&…...

3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
基于matlab策略迭代和值迭代法的动态规划
经典的基于策略迭代和值迭代法的动态规划matlab代码,实现机器人的最优运输 Dynamic-Programming-master/Environment.pdf , 104724 Dynamic-Programming-master/README.md , 506 Dynamic-Programming-master/generalizedPolicyIteration.m , 1970 Dynamic-Programm…...

听写流程自动化实践,轻量级教育辅助
随着智能教育工具的发展,越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式,也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建,…...

MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...