python 邻接矩阵_讲解 最大流问题+最小花费问题+python(ortool库)实现

50a9b8eea1737dabbce748d84f9ff05e.png

1 基本概念

1.1 图

定义: 图G(V,E)是指一个二元组(V(G),E(G)),其中:

1. V(G)={v1,v2,…, vn}是非空有限集,称为顶点集,

2. E(G)是V(G)中的元素对(vi,vj)组成的集合称为边集。


举例:

af4bc4e88fa16b9afbfb73192eb55b56.png

其中,V(G)={v1,v2,v3,v4}

E(G)= {e1,e2,e3,e4,e5,e6}


  • 若图G的边是有方向的,称G是**有向图**,有向图的边称为**有向边或弧**
  • 与同一条边关联的两个端点称为**相邻的顶点**
  • 与同一个顶点关联的两条边称为**相邻的边**
  • 端点重合为一点的边称为**环**
  • 若一对顶点之间有两条以上的边联结,则这些边称为**重边**
  • 既没有环也没有重边的图,称为**简单图**
  • 若图G的每一条边e 都赋以一个实数w(e),称w(e)为边e的**权**, G连同边上的权称为**赋权图** ,
  • 图G的中顶点的个数, 称为**图G的阶**
  • 图中与某个顶点相关联的边的数目,称为该**顶点的度**
  • **完全图**:若无向图的任意两个顶点之间都存在着一条边,称此图为完全图。

1.2 邻接矩阵

  • 以下均假设图为简单图,没有重边和环
  • 图G的邻接矩阵是表示顶点之间相邻关系的矩阵

864523e1543e73bcb46cfbe7bf37ae66.png

举个例子:

fbc8d7b94f6aaedd9c79e6996ddc6c1f.png

e6d4d8ddce0f9b1b0be5bf7b0f98a484.png

1.3 最大流问题

  • 设G(V,E)为有向图,若在每条边e上定义一个非负权c, 则称图G为一个网络,称c为边e的**容量函数**,记为c(e)。
  • 若在有向图G(V,E)中有两个不同的顶点vs与vt ,
  • 若顶点vs只有出度没有入度,称vs为图G的**源**
  • 若顶点vt只有入度没有出度, 称vt为G的**汇**
  • 若顶点v 既不是源也不是汇, 称为v**中间顶点**

b0eafa39af85f43e553638309aec6edc.png

如图,就是从v1到v9怎么流动,在受每一个有向边的流动最大限制下,才是最大流。大学考试的内容一般都是用手算的,这里我们还是用python来解决最大流问题。

如图,就是从v1到v9怎么流动,在受每一个有向边的流动最大限制下,才是最大流。大学考试的内容一般都是用手算的,这里我们还是用python来解决最大流问题。

2 python解决最大流问题

8fa6e767cf9507cc9767b1794d0dbc96.png
from ortools.graph import pywrapgraph
start_nodes = [0, 0, 0, 1, 1, 2, 2, 3, 3]
end_nodes = [1, 2, 3, 2, 4, 3, 4, 2, 4]
capacities = [20, 30, 10, 40, 30, 10, 20, 5, 20]
max_flow = pywrapgraph.SimpleMaxFlow()
for i in range(0, len(start_nodes)):
    max_flow.AddArcWithCapacity(start_nodes[i], end_nodes[i], capacities[i])
# Find the maximum flow between node 0 and node 4.
if max_flow.Solve(0, 4) == max_flow.OPTIMAL:
    print('Max flow:', max_flow.OptimalFlow())
    print('')
    print('  Arc    Flow / Capacity')
    for i in range(max_flow.NumArcs()):
        print('%1s -> %1s   %3s  / %3s' % (
          max_flow.Tail(i),
          max_flow.Head(i),
          max_flow.Flow(i),
          max_flow.Capacity(i)))
    print('Source side min-cut:', max_flow.GetSourceSideMinCut())
    print('Sink side min-cut:', max_flow.GetSinkSideMinCut())
else:
    print('There was an issue with the max flow input.')

运行结果如下

c93bc5a0473b034f2523e8ab25819e8a.png

3 python解决最大流最小费用问题

跟最大流问题类似,但是每一条边多了一个费用的概念

17b154da6e5fcd65dc49fda30ae642ec.png
  • 从图中可以看到,0点生产了20个货物,然后要送5个到3,15个到4
  • 一条边(15,4)意味着这个最多可以运输15个货物,每运输一个货物就要支付4点费用
from ortools.graph import pywrapgraph
#between each pair. For instance, the arc from node 0 to node 1 has acapacity of 15 and a unit cost of 4.
start_nodes = [ 0, 0,  1, 1,  1,  2, 2,  3, 4]
end_nodes   = [ 1, 2,  2, 3,  4,  3, 4,  4, 2]
capacities  = [15, 8, 20, 4, 10, 15, 4, 20, 5]
unit_costs  = [ 4, 4,  2, 2,  6,  1, 3,  2, 3]
# Define an array of supplies at each node.
supplies = [20, 0, 0, -5, -15]
# Instantiate a SimpleMinCostFlow solver.
min_cost_flow = pywrapgraph.SimpleMinCostFlow()
# Add each arc.
for i in range(0, len(start_nodes)):
    min_cost_flow.AddArcWithCapacityAndUnitCost(start_nodes[i], end_nodes[i],
                                                capacities[i], unit_costs[i])
# Add node supplies.
for i in range(0, len(supplies)):
    min_cost_flow.SetNodeSupply(i, supplies[i])
 # Find the minimum cost flow between node 0 and node 4.
if min_cost_flow.Solve() == min_cost_flow.OPTIMAL:
    print('Minimum cost:', min_cost_flow.OptimalCost())
    print('')
    print('  Arc    Flow / Capacity  Cost')
    for i in range(min_cost_flow.NumArcs()):
      cost = min_cost_flow.Flow(i) * min_cost_flow.UnitCost(i)
      print('%1s -> %1s   %3s  / %3s       %3s' % (
          min_cost_flow.Tail(i),
          min_cost_flow.Head(i),
          min_cost_flow.Flow(i),
          min_cost_flow.Capacity(i),
          cost))
else:
    print('There was an issue with the min cost flow input.')

运行结果:

32f364060dd25bca3ac771c670f2a269.png

参考:

ortool 官网

18a5d5c5400abef084ff23b79a25d68c.png

觉得本文有用的小伙伴,点个喜欢再走呗~微信公众号:【机器学习炼丹术】,也可以加作者好友交流:cyx645016617,记得备注【学校+姓名+方向】哦~

  • 强烈推荐 | “深度学习零基础视频教程”,“机器学习零基础视频教程”,"python零基础入门基础视频教程"等,公众号回复【视频教程】或者【白嫖】免费获取~
  • 关注公众号,回复【下载】有免费的杂七杂八的机器学习相关的PDF学习资料,持续更新哦!
weixin_39753260
关注 关注
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 中的邻接矩阵
迹忆客
10-26 813
本文讨论在 Python实现邻接矩阵的两种方法。我们建议您使用 NumPy 模块实现邻接矩阵,因为它在存储要求方面更加高效。此外,在时间和内存需求方面,在 NumPy 数组上执行不同的操作更加高效。
Python结构--邻接矩阵
热门推荐
勇气与行动
06-05 2万+
的另一种常见表示法就是邻接矩阵了。 会将每个节点可能的邻居位置排成一行(也就是一个数组,用于对应中每一个节点),然后用某种值(如True或False)来表示相关节点是否为当前节点的邻居。 与之前一样,其最简单的形式也可以用嵌套list来实现。节点编号依然是从0到V-1。并且为了让矩阵具有更好的可读性,我们将会用1和0来充当所谓的真值(也可用True和False) >>> a,b,
python--数据结构--邻接矩阵
Chasing__Dreams的博客
08-21 4910
adj_matrix.py """ 邻接矩阵 :class VertexNode: 顶点结点类 :class ArcNode: 弧结点类 :class AdjMatrix: 邻接矩阵类 :method create_adj_matrix: 创建一个邻接矩阵对象 :method depth_first_search_recursion: 深度优先递归遍历 :method depth_first_search_nonrecursion: 深度优先非递归遍历 :method breadth_firs
最小费用最大流算法(SPFA邻接矩阵
QiaoRuoZhuo的专栏
06-16 2319
/* Name: 最小费用最大流算法(SPFA邻接矩阵) Copyright: Author: 巧若拙 Date: 16-06-17 22:08 Description: 每次以单位费用为权值,寻找src到des的最短增广路路径,然后对该路径进行增量修改, 先计算出最小增量,然后累计最小费用值,同时更新残流网络和费用网络。 再次用SPFA算法寻找src到d
python实现Bellman-Ford、Dijkstra算法--最小费用最大流问题
m0_62410163的博客
05-18 1203
Bellman-Ford、Dijkstra算法--最小费用最大流问题
SSC_邻接矩阵_KNN邻接矩阵_谱聚类_
10-03
而"SSC.py"很可能是SSC算法的Python实现代码,可能包含了邻接矩阵的计算、KNN邻接矩阵转换以及谱聚类的步骤。 总之,SSC结合了邻接矩阵、KNN邻接矩阵和谱聚类的思想,为高维数据的聚类提供了一种强大而灵活的方法...
python邻接矩阵输出成实现
01-02
利用networkx,numpy,matplotlib,将邻接矩阵输出为形。 1,自身确定一个邻接矩阵,然后通过循环的方式添加变,然后输出像 import networkx as nx import matplotlib.pyplot as plt import numpy as np G = nx...
python 邻接矩阵三种方法实现有向、无向,并绘显示
11-12
本文将详细介绍如何使用邻接矩阵实现这两种类型的,并通过`NetworkX`进行可视化显示。 首先,让我们理解邻接矩阵的概念。在邻接矩阵中,我们用一个二维数组来表示中的节点和它们之间的连接。对于无向,...
python使用邻接矩阵构造代码示例
09-21
### Python 使用邻接矩阵构造的知识点详解 #### 一、引言 在计算机科学领域,是一种常用的数据结构,用于表示对象之间的关系。由节点(也称为顶点)和连接这些节点的边组成。根据边是否具有方向性,可以...
数据结构之邻接矩阵Adjacency Matrix(Python版)
深度学习领域优质创作者,CSDN博客专家
12-01 2761
使用二维数组来表示顶点和它相邻节点的一种关系的
最小费用最大流(邻接矩阵和邻接表)
zz_ylolita
03-16 804
邻接矩阵: var t,ii,i,j,n,cost,top,tail,min,tt,ttf:longint; pre,d:array[1..1000]of longint; b:array[1..10000]of longint; flag:array[1..1000]of boolean; f,c:array[1..200,1..200]of longint;
网络流 最大流(dinic邻接矩阵) 手敲模板
Adolphrocs的博客
12-03 405
SAP + GAP 邻接表:https://blog.csdn.net/Adolphrocs/article/details/84779575 SAP + GAP 邻接矩阵:https://blog.csdn.net/Adolphrocs/article/details/84779661 dinic 邻接表:https://blog.csdn.net/Adolphrocs/article/de...
数据结构_优化-最小费用最大流MCMF(python解)
大道至简
03-08 1233
线性规划问题有一个有趣的特性,即所有求极大的问题都有一个与其匹配的求极小的线性规划问题。我们通过求解一个问题的对偶问题,再加以转化就可以得到原始问题的解。
min_cost_flow
dev blog of nolanjian
08-17 1101
#include #include #include #include using namespace std; struct edge { int to; //要到的点 int cap; //容量 int cost; //单位费用 int rev; //反向边 }; int V;
网络流问题求解及Gurobi+Python代码(最大流/最小成本网络流/多商品网络流)
weixin_45526117的博客
02-07 1966
最大流问题最小成本网络流,多商品网络流,Gurobi+python代码
邻接矩阵关联矩阵转换实现
hukai7190的博客
02-18 9953
关联矩阵邻接矩阵相互转换
Python加权的邻接表邻接矩阵转换
zorchp
03-24 2331
-
最小费用最大流
liwei的专栏
08-25 913
解释:每次在s-t之间找出费用最小的一条路径即单源最短路,如果t点不再被访问到,则算法终止。否则,按着最短路径找出最小剩余容量c,最大流量加上c,再更新最短路径上的边,前向弧减去c,反向弧加上c,并且造一条逆向的费用边,最小费用加上每条边的花销,每条边的花销=单位费用*c。 最小费用最大流既能求最小费用,又能得出最大流,是更为一般的模型。 模板: #define maxn 200
python邻接矩阵实现
最新发布
03-29
Python中可以使用邻接矩阵实现类。邻接矩阵是一个二维数组,用于表示中各个节点之间的连接关系。在邻接矩阵中,行和列分别代表中的节点,矩阵中的元素表示节点之间的连接情况。 下面是一个简单的Python代码...
164
原创
37
点赞
209
收藏
24
粉丝
关注
私信
写文章

热门文章

  • 三元一次方程组例题_50道三元一次方程组计算题及答案过程 10689
  • win10修改用户名_Win10开始菜单打不开解决方法汇总 8304
  • java爬虫与python爬虫的区别_Java爬虫(Jsoup与WebDriver)的使用 5162
  • 计算机软件和应用审稿可以加急吗,计算机类期刊审稿周期 5155
  • 威纶通触摸屏与仪表通讯_S7-200通过MODBUS RTU协议和威纶通触摸屏通讯 4955

最新文章

  • 多台服务器挂载gfs系统,基于Ubuntu和GFS的分布式文件服务器部署
  • dell服务器修改带外,DELL 服务器带外管理
  • 和平精英小程序服务器开小差,1个BUG存在了4年 光子通过小提示说出了无法修复的原因...
2021年146篇
2020年196篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

深圳SEO优化公司网站推广优化外链有效果的网站优化网站的关键词优化方法河南瓷砖行业网站优化推广技巧英德市网站seo优化排名网站首页排名SEO搜索优化女生适合做网站优化吗网站优化服务排名笋岗付费网站优化惠州网站建设优化诊断网站积分优化系统靠谱吗中方网站优化娄底网站搜索优化方案网站流量优化工具无锡江阴seo网站优化阳光同学.课时优化网站网站布局优化张槎网站优化方法平顶山网站推广优化费用情况厚街网站优化方法大全常州网站优化首页网站优化和爱采购哪个合适网站模块优化方案书如何良好的展现网站优化效果丽水网站优化价格黄石品牌网站优化要多少钱网站优化文档二七区网站优化推荐崇左网站优化哪家好亳州市网站seo优化歼20紧急升空逼退外机英媒称团队夜以继日筹划王妃复出草木蔓发 春山在望成都发生巨响 当地回应60岁老人炒菠菜未焯水致肾病恶化男子涉嫌走私被判11年却一天牢没坐劳斯莱斯右转逼停直行车网传落水者说“没让你救”系谣言广东通报13岁男孩性侵女童不予立案贵州小伙回应在美国卖三蹦子火了淀粉肠小王子日销售额涨超10倍有个姐真把千机伞做出来了近3万元金手镯仅含足金十克呼北高速交通事故已致14人死亡杨洋拄拐现身医院国产伟哥去年销售近13亿男子给前妻转账 现任妻子起诉要回新基金只募集到26元还是员工自购男孩疑遭霸凌 家长讨说法被踢出群充个话费竟沦为间接洗钱工具新的一天从800个哈欠开始单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#中国投资客涌入日本东京买房两大学生合买彩票中奖一人不认账新加坡主帅:唯一目标击败中国队月嫂回应掌掴婴儿是在赶虫子19岁小伙救下5人后溺亡 多方发声清明节放假3天调休1天张家界的山上“长”满了韩国人?开封王婆为何火了主播靠辱骂母亲走红被批捕封号代拍被何赛飞拿着魔杖追着打阿根廷将发行1万与2万面值的纸币库克现身上海为江西彩礼“减负”的“试婚人”因自嘲式简历走红的教授更新简介殡仪馆花卉高于市场价3倍还重复用网友称在豆瓣酱里吃出老鼠头315晚会后胖东来又人满为患了网友建议重庆地铁不准乘客携带菜筐特朗普谈“凯特王妃P图照”罗斯否认插足凯特王妃婚姻青海通报栏杆断裂小学生跌落住进ICU恒大被罚41.75亿到底怎么缴湖南一县政协主席疑涉刑案被控制茶百道就改标签日期致歉王树国3次鞠躬告别西交大师生张立群任西安交通大学校长杨倩无缘巴黎奥运

深圳SEO优化公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化