运筹说 第80期 | 最小费用最大流问题

前面我们学习了图与网络分析的基础知识及经典问题,大家是否已经学会了呢?接下来小编和大家学习最后一个经典问题——最小费用最大流问题

最小费用最大流问题是经济学和管理学中的一类典型问题。在一个网络中每段路径都有“容量”和“费用”两个限制的条件下,此类问题的研究试图寻找出:流量从A到B,如何选择路径、分配经过路径的流量,可以达到所用的费用最小的要求。

如n辆卡车要运送物品,从A地到B地。由于每条路段都有不同的路费要缴纳,每条路能容纳的车的数量有限制,最小费用最大流问题指如何分配卡车的出发路径可以达到费用最低,物品又能全部送到。

下面,让我们从实际问题出发,学习如何解决最小费用最大流问题吧!

一、问题描述及求解原理

01 问题描述

网络G=(V,E,C),每一弧(vi,vj)∈E,给出(vi,vj)上单位流的费用d(vi,vj)≥0(简记dij),记G=(V,E,C,d)。

最小费用最大流问题:

求一个最大流f,使流的总费用取最小值。

02 求解原理

设对可行流f存在增广链𝜇,当沿𝜇以θ=1调整f,得新的可行流f'时,显然V(f')=V(f)+1,两流的费用之差d(f)-d(fx27;):

称为增广链𝜇的费用。

原理依据:

若f是流值为V(f)的所有可行流中费用最小者,而𝜇是关于f的所有增广链中费用最小的增广链,则沿𝜇以θ去调整f,得可行流f',f'就是流量为V(f)+θ的所有可行流中费用最小的可行流。这样,当f'是最大流时,f'就是所求的最小费用最大流。

如果已知f是流量为V(f)的最小费用流→求出关于f的最小费用增广链。

在构造最小费用增广链时,会将网络中的每一条条弧(vi,vj)都变成一对方向相反的弧,以形成四通八达的“路”,因此对于有向边(vi,vj)权wij按如下方法取值:

取值说明如下图所示:

构造赋权有向图W(f),它的顶点是G的顶点,W(f)中弧及其权wij按弧(vi,vj)在G中的情形分为:

新网络W(f)成为流f的(费用)长度网络。

由增广链费用的概念及网络W(f)的定义,知在网络G中寻求关于可行流f的最小费用增广链,等价于在网络W(f)中寻求从vs到vt的最短路。

03 算法步骤

(1)根据网络中的费用首先确定费用最小的长度网络,将该长度网络确定为初始可行流f0=0,令k=0;

(2)应用流量网络对增广链进行调整,记经k次调整得到的最小费用流为fk,构造增量网络W(fk);

(3)在W(fk)中,寻找vs到vt的最短路。若不存在最短路(即最短路路长是∞),则fk就是最小费用最大流;若存在最短路,则此最短路即为原网络G中相应的可增广链𝜇,转入第4步。

(4)在增广链𝜇上fk按下式进行调整,调整量θ为:

得新的可行流fk+1,返回第2步

二、实例应用

01 例题求解

例1:求下图所示网络的最小费用最大流。弧旁数字为(dij,cij)。

解:

(1)取初始可行流f^{0}=0

(2)按算法要求构造长度网络 (f^{0})=0

(3)在原网络G中,与这条最短路对应的增广链为\mu=(\nu_{s},\nu_{2},\nu_{1},\nu_{t})

(4)在原网络D中,与这条最短路对应的增广链为 \mu=(\nu_{s},\nu_{2},\nu_{1},\nu_{t})

按照上述算法依次得 f^{1},f^{2},f^{3},f^{4} ,流量依次为 v(f^{1})=5,v(f^{2})=7,v(f^{3})=10,v(f^{4})=11,构造相应的增量网络为 W(f^{1}),W(f^{2}),W(f^{3}),W(f^{4}),如图(a),(e),(g),(i)所示。

图(i)中,不存在从 v_{s}v_{t}的最短路,所以 f^{4} 为最小费用最大流。

02 拓展延伸

最小费用最大流问题还可以使用线性规划方法进行求解,思路如下:

(1)通过运筹说第78期相关介绍可以求出最大流量

(2)在保证总流量等于最大流量的条件下,以最小化总费用为目标求出每条弧上的流量。

例2:某公司有一个管道网络如下图所示,使用这个网络可以将石油从产地v1送到销地v7,给出了每一段管道的容量cij(单位为:万加仑/小时),此外还给出了每段弧上的单位流量的费用dij(单位为:百元/万加仑),(cij,dij)在图的弧上已标出,如果使用这个网络从产地v1向销地v7运送石油,问怎样运送才能运送最多的石油且使总运费最小?

通过标号算法可以求出最大流量为10。然后,在保证总流量等于10的条件下,以最小化总费用为目标求出每条弧上的流量,如下所示:

后续步骤使用线性规划求解方法如单纯形法求解即可。

以上就是最小费用最大流问题的全部内容了,通过本节学习大家是否对该问题有了一个初步的认识呢,是否可以求解最小费用最大流问题呢?下一次小编将带大家学习第九章——网络计划,敬请关注!

作者 | 张宇 齐鹏

责编 | 刘文志

审核 | 徐小峰

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

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

相关文章

MOS管驱动电流计算以及分立器件驱动电路

自记: 1.先根据mos数据手册查找参数,计算电流; 2.分立器件驱动电路图; 3.分立器件选择 仔细学,能看懂! 1.计算电流: 2.分立器件驱动电流:两种,第一种反向&#xff0c…

什么是TestNG以及如何创建testng.xml文件?

目录 什么是TestNG? 如何创建testng.xml文件 手动创建testng.xml 通过testng.xml运行整个包 通过testng.xml运行类 使用Eclipse创建testng.xml 本文将讨论TestNG以及如何通过执行testng.xml文件在TestNG中运行第一个测试用例。 什么是TestNG? Te…

线性表小结

线性表小结 单链表、循环链表和双向链表的时间效率比较 顺序表和链表的比较

强化学习11——DQN算法

DQN算法的全称为,Deep Q-Network,即在Q-learning算法的基础上引用深度神经网络来近似动作函数 Q ( s , a ) Q(s,a) Q(s,a) 。对于传统的Q-learning,当状态或动作数量特别大的时候,如处理一张图片,假设为 210 160 3 …

加密经济学:Web3时代的新经济模型

随着Web3技术的迅猛发展,我们正迈入一个全新的数字经济时代。加密经济学作为这一时代的核心,不仅在数字货币领域崭露头角,更是重新定义了传统经济模型,为我们开启了一个充满创新和机遇的新纪元。 1. 去中心化的经济体系 Web3时代…

7.3 CONSTANT MEMORY AND CACHING

掩模数组M在卷积中的使用方式有三个有趣的属性。首先,M阵列的大小通常很小。大多数卷积掩模在每个维度上都少于10个元素。即使在3D卷积的情况下,掩码通常也只包含少于1000个元素。其次,在内核执行过程中,M的内容不会改变。第三&am…

启动Vue项目,报错:‘vue-cli-service‘ 不是内部或外部命令,也不是可运行的程序

前言: 最近在打开一个Vue项目的时候,打开之后输入命令行:npm run serve之后发现,报错:vue-cli-service 不是内部或外部命令,也不是可运行的程序,以下是解决方案: 报错图片截图&…

HNU-算法设计与分析-实验3

算法设计与分析实验3 计科210X 甘晴void 202108010XXX 目录 文章目录 算法设计与分析<br>实验31 用Dijkstra贪心算法求解单源最短路径问题问题重述证明模板&#xff1a;Dijkstra算法代码验证算法分析 1【扩展】 使用堆优化的Dijkstra原因代码算法分析验证 2 回溯法求解…

运筹说 第98期|无约束极值问题

上一期我们一起学习了关于非线性规划问题的一维搜索方法的相关内容&#xff0c;本期小编将带大家学习非线性规划的无约束极值问题。 下面&#xff0c;让我们从实际问题出发&#xff0c;学习无约束极值问题吧&#xff01; 一、问题描述及求解原理 1 无约束极值问题的定义 无约…

ArkUI-X跨平台已至,何需其它!

运行环境 DevEco Studio&#xff1a;4.0Release OpenHarmony SDK API10 开发板&#xff1a;润和DAYU200 自从写了一篇ArkUI-X跨平台的文章之后&#xff0c;好多人都说对这个项目十分关注。 那么今天我们就来完整的梳理一下这个项目。 1、ArkUI-X 我们之前可能更多接触的…

登录验证

目录 会话技术 Cookie Session JWT JWT生成 JWT校验 会话技术 会话 打开浏览器&#xff0c;访问web服务器的资源&#xff0c;会话建立&#xff0c;直到有一方断开连接&#xff0c;会话结束。在一次会话中可以包含多次请求与响应 会话跟踪 一种维护浏览器的方法 服务器需要…

性能测试jmeter

选的这些怎么添加 在一个列表里面 方法调用${__time(YMD)} 两个下划线&#xff0c;后跟函数名&#xff0c;小括号内是输入参数&#xff0c;整个用大括号包裹。 注意POST一定要在消息体数据里面写,不能再参数里面 否则报错:loginOut,没cookie等

VueCli-自定义创建项目

参考 1.安装脚手架 (已安装可以跳过) npm i vue/cli -g2.创建项目 vue create 项目名 // 如&#xff1a; vue create dn-demo键盘上下键 - 选择自定义选型 Vue CLI v5.0.8 ? Please pick a preset:Default ([Vue 3] babel, eslint)Default ([Vue 2] babel, eslint) > M…

小迪安全第二天

文章目录 一、Web应用&#xff0c;架构搭建二、web应用环境架构类三、web应用安全漏洞分类总结 一、Web应用&#xff0c;架构搭建 #网站搭建前置知识 域名&#xff0c;子域名&#xff0c;dns,http/https,证书等 二、web应用环境架构类 理解不同web应用组成角色功能架构 开发…

显示CPU架构的有关信息 lscpu

文章目录 显示CPU架构的有关信息 lscpu默认实例更多信息 显示CPU架构的有关信息 lscpu Linux的CPU设备查看器。lscpu命令用来显示cpu的相关信息。 lscpu从sysfs和/proc/cpuinfo收集cpu体系结构信息&#xff0c;命令的输出比较易读 。 命令输出的信息包含cpu数量&#xff0c;线…

tensorflow报错: DNN library is no found

错误描述 如上图在执行程序的时候&#xff0c;会出现 DNN library is no found 的报错 解决办法 这个错误基本上说明你安装的 cudnn有问题&#xff0c;或者没有安装这个工具。 首先检测一下你是否安装了 cudnn 进入CUDA_HOME下&#xff0c;也就是进入你的cuda的驱动的安装目…

个人数据备份方案分享(源自一次悲惨经历)

文章目录 1 起源2 备份架构2.1 生活照片2.2 生活录音2.3 微信文件2.4 工作文件2.5 笔记、影视音乐、书籍 3 使用工具介绍3.1 小米云服务3.2 中国移动云盘3.3 小米移动硬盘&#xff08;1T&#xff09;3.4 FreeFileSync 4 总结 1 起源 本文的灵感源于我个人的一次不幸遭遇&#…

领域驱动设计——DDD领域驱动设计进阶

摘要 进阶篇主要讲解领域事件、DDD 分层架构、几种常见的微服务架构模型以及中台设计思想等内容。如何通过领域事件实现微服务解耦&#xff1f;、怎样进行微服务分层设计&#xff1f;、如何实现层与层之间的服务协作&#xff1f;、通过几种微服务架构模型的对比分析&#xff0…

记一个有关 Vuetify 组件遇到的一些问题

Vuetify 官网地址 所有Vuetify 组件 — Vuetify 1、Combobox使用对象数组 Combobox 组合框 — Vuetify items数据使用对象数组时&#xff0c;默认选中的是整个对象&#xff0c;要对数据进行处理 <v-comboboxv-model"defaultInfo.variableKey":rules"rules…

基于springboot体育场馆运营管理系统源码

基于springboot体育场馆运营管理系统源码330 -- MySQL dump 10.13 Distrib 5.7.31, for Linux (x86_64) -- -- Host: localhost Database: springboot3cprm -- ------------------------------------------------------ -- Server version 5.7.31/*!40101 SET OLD_CHARACT…