(Python)Gurobi求解最大流问题

示例网络,箭头上的数字代表弧允许通过的最大流量

增加两个虚拟节点,节点0和节点7

import gurobipy as gpfrom gurobipy import GRB# Input the information of the networkdict_capacity = {(0, 1): 99999,                 (1, 2): 70, (1, 3): 100, (1, 4): 90,                 (2, 6): 80,                 (3, 4): 40, (3, 5): 70,                 (4, 5): 40, (4, 6): 100,                 (5, 6): 90,                 (6, 7): 99999                 }arc, capacity = gp.multidict(dict_capacity)# Construct the modelm = gp.Model("maxflow")# Decision variablesX = m.addVars(arc, name='X')# Add constraintsfor i, j in arc:    # The volume of flow cannot exceed the capacity of the arc    m.addConstr(X[i, j] <= capacity[i, j])    if i == 0 or j == 7:        continue    else:        # Flow balance constraint        m.addConstr(X.sum(i, '*') == X.sum('*', i))# Define the objective functionm.setObjective(X.sum(1, '*'), sense=GRB.MAXIMIZE)# Solve the modelm.optimize()# Output the resultsprint('*' * 60)print("The objective value is:", m.objVal)print('The flow in each arc is:')for i, j in arc:    print("Node %d --> Node %d: %d" % (i, j, X[i, j].x))

控制台输出结果

Using license file C:\Users\86158\gurobi.licGurobi Optimizer version 9.1.1 build v9.1.1rc0 (win64)Thread count: 4 physical cores, 8 logical processors, using up to 8 threadsOptimize a model with 20 rows, 11 columns and 42 nonzerosModel fingerprint: 0x43a077e0Coefficient statistics:  Matrix range     [1e 00, 1e 00]  Objective range  [1e 00, 1e 00]  Bounds range     [0e 00, 0e 00]  RHS range        [4e 01, 1e 05]Presolve removed 17 rows and 5 columnsPresolve time: 0.00sPresolved: 3 rows, 6 columns, 9 nonzerosIteration    Objective       Primal Inf.    Dual Inf.      Time       0    2.6000000e 02   3.125000e 01   0.000000e 00      0s       3    2.6000000e 02   0.000000e 00   0.000000e 00      0sSolved in 3 iterations and 0.00 secondsOptimal objective  2.600000000e 02************************************************************The objective value is: 260.0The flow in each arc is:Node 0 --> Node 1: 260Node 1 --> Node 2: 70Node 1 --> Node 3: 100Node 1 --> Node 4: 90Node 2 --> Node 6: 70Node 3 --> Node 4: 40Node 3 --> Node 5: 60Node 4 --> Node 5: 30Node 4 --> Node 6: 100Node 5 --> Node 6: 90Node 6 --> Node 7: 0Process finished with exit code 0

来源:https://www.icode9.com/content-1-855301.html

(0)

相关推荐

  • R语言最大流最小割定理和最短路径算法分析交通网络流量拥堵问题

    原文链接:http://tecdat.cn/?p=17635 我们根据一些论文中提到的示例,使用最大流最小割定理将流量拥塞降至最低, 并应用了最短路径分析了交通瓶颈. 我们可以在下面看到 map=op ...

  • 用Python的Numpy求解线性方程组

    原文链接:http://tecdat.cn/?p=8445 在本文中,您将看到如何使用Python的Numpy库解决线性方程组. 什么是线性方程组? 维基百科将线性方程组定义为: 在数学中,线性方程组 ...

  • Python| 函数中运用递归方式求解

    问题描述有一球从100米高度自由落下,每次落地后反跳回原高度的一半,再落下,求它在第10次落地时,共经过多少米?第10次反弹多高?解决方案首先对题目分析,根据题目可用数学等比数列将其值运算得出,由题目 ...

  • Python|完全平方的参数求解

    问题描述一个整数加上100后是一个完全平方数,完全平方数后加上168又是个完全平方数,请问该数是多少?解决方案利用while循环对未知数赋值,再使用if条件对未知数做出限制条件.用break跳出未满足 ...

  • Python|二叉树叶子结点问题解决方法

    问题描述键盘输入一颗二叉树,求解其叶子结点个数.示例: 输入:4,2,6,1,3,5输出:3解决方案一棵树当中没有子结点(即度为0)的结点称为叶子结点,简称"叶子".当二叉树为空时 ...

  • Python数据分析库有哪些?常见分类!

    众所周知,Python前景好.需求量大.薪资高.就业岗位多,除了基本的开发工作之外,还可以从事人工智能.数据分析.网络爬虫等岗位.那么说起数据分析,你知道Python常用数据分析库有哪些吗?我们一起来 ...

  • PyPy为什么能让Python比C还快?一文了解内在机制

    来自|机器之心 「如果想让代码运行得更快,您应该使用 PyPy.」 - Python 之父 Guido van Rossum 对于研究人员来说,迅速把想法代码化并查看其是否行得通至关重要.Python ...

  • 【Python爬虫】:使用高性能异步多进程爬虫获取豆瓣电影Top250

    在本篇博文当中,将会教会大家如何使用高性能爬虫,快速爬取并解析页面当中的信息.一般情况下,如果我们请求网页的次数太多,每次都要发出一次请求,进行串行执行的话,那么请求将会占用我们大量的时间,这样得不偿 ...

  • 【Python爬虫】:破解网站字体加密和反反爬虫

    前言:字体反爬,也是一种常见的反爬技术,例如58同城,猫眼电影票房,汽车之家,天眼查,实习僧等网站.这些网站采用了自定义的字体文件,在浏览器上正常显示,但是爬虫抓取下来的数据要么就是乱码,要么就是变成 ...

  • Python 内置函数最全汇总,现看现用

    今天,好好看看这些Python内置函数,也许你明天就能用到Python 内置函数最全汇总:1 abs()绝对值或复数的模In [1]: abs(-6)Out[1]: 62 all() 接受一个迭代器, ...