networkx.algorithms.flow.capacity_scaling
的用法。用法:
capacity_scaling(G, demand='demand', capacity='capacity', weight='weight', heap=<class 'networkx.utils.heaps.BinaryHeap'>)
在有向图 G 中找到满足所有需求的最小成本流。
这是一种容量扩展的连续最短增广路径算法。
G 是一个有边成本和容量的有向图,其中节点有需求,即它们想要发送或接收一定量的流量。负需求意味着节点想要发送流量,正需求意味着节点想要接收流量。如果流入每个节点的净流量等于该节点的需求,则有向图 G 上的流量满足所有需求。
- G:NetworkX 图
DiGraph 或 MultiDiGraph 可以找到满足所有需求的最小成本流。
- demand:string
图 G 的节点预计具有一个属性需求,该属性指示节点想要发送(负需求)或接收(正需求)多少流量。请注意,需求之和应为 0,否则问题不可行。如果此属性不存在,则认为节点的需求为 0。默认值:‘demand’。
- capacity:string
图 G 的边应该有一个属性容量,表示边可以支持多少流量。如果此属性不存在,则认为边具有无限容量。默认值:‘capacity’。
- weight:string
图 G 的边应该有一个属性权重,该属性权重指示在该边上发送一个单位的流量所产生的成本。如果不存在,则认为权重为 0。默认值:‘weight’。
- heap:类
算法中使用的堆类型。它应该是
MinHeap
的子类或实现兼容的接口。如果要使用库存堆实现,尽管渐近运行时间较慢,但对于没有优化属性访问的 Python 实现(例如 CPython),建议使用
BinaryHeap
而不是PairingHeap
。对于具有优化属性访问的 Python 实现(例如 PyPy),PairingHeap
提供更好的性能。默认值:BinaryHeap
。
- flowCost:整数
满足所有需求的最小成本流的成本。
- flowDict:字典
如果 G 是有向图,则由节点键入的 dict-of-dicts 使得 flowDict[u][v] 是边 (u, v) 上的流。如果 G 是 MultiDiGraph,则 dict-of-dicts-of-dicts 由节点键控,因此 flowDict[u][v][key] 是边上的流 (u, v, key)。
- NetworkXError
如果输入图不是定向的,未连接的,则会引发此异常。
- NetworkXUnfeasible
在以下情况下会引发此异常:
需求之和不为零。那么,就没有满足所有需求的流程。
没有满足所有需求的流量。
- NetworkXUnbounded
如果有向图 G 具有负成本和无限容量的循环,则会引发此异常。那么,满足所有需求的流程的成本在下面是无界的。
参数:
返回:
抛出:
注意:
如果边权重是浮点数,则此算法不起作用。
例子:
最小成本流问题的一个简单示例。
>>> G = nx.DiGraph() >>> G.add_node("a", demand=-5) >>> G.add_node("d", demand=5) >>> G.add_edge("a", "b", weight=3, capacity=4) >>> G.add_edge("a", "c", weight=6, capacity=10) >>> G.add_edge("b", "d", weight=1, capacity=9) >>> G.add_edge("c", "d", weight=2, capacity=5) >>> flowCost, flowDict = nx.capacity_scaling(G) >>> flowCost 24 >>> flowDict {'a': {'b': 4, 'c': 1}, 'd': {}, 'b': {'d': 4}, 'c': {'d': 1}}
可以更改用于算法的属性的名称。
>>> G = nx.DiGraph() >>> G.add_node("p", spam=-4) >>> G.add_node("q", spam=2) >>> G.add_node("a", spam=-2) >>> G.add_node("d", spam=-1) >>> G.add_node("t", spam=2) >>> G.add_node("w", spam=3) >>> G.add_edge("p", "q", cost=7, vacancies=5) >>> G.add_edge("p", "a", cost=1, vacancies=4) >>> G.add_edge("q", "d", cost=2, vacancies=3) >>> G.add_edge("t", "q", cost=1, vacancies=2) >>> G.add_edge("a", "t", cost=2, vacancies=4) >>> G.add_edge("d", "w", cost=3, vacancies=4) >>> G.add_edge("t", "w", cost=4, vacancies=1) >>> flowCost, flowDict = nx.capacity_scaling( ... G, demand="spam", capacity="vacancies", weight="cost" ... ) >>> flowCost 37 >>> flowDict {'p': {'q': 2, 'a': 2}, 'q': {'d': 1}, 'a': {'t': 4}, 'd': {'w': 2}, 't': {'q': 1, 'w': 1}, 'w': {}}
相关用法
- Python NetworkX categorical_edge_match用法及代码示例
- Python NetworkX categorical_node_match用法及代码示例
- Python NetworkX caveman_graph用法及代码示例
- Python NetworkX cartesian_product用法及代码示例
- Python NetworkX categorical_multiedge_match用法及代码示例
- Python NetworkX connected_double_edge_swap用法及代码示例
- Python NetworkX cn_soundarajan_hopcroft用法及代码示例
- Python NetworkX complete_multipartite_graph用法及代码示例
- Python NetworkX clustering用法及代码示例
- Python NetworkX contracted_edge用法及代码示例
- Python NetworkX circulant_graph用法及代码示例
- Python NetworkX contracted_nodes用法及代码示例
- Python NetworkX communicability_exp用法及代码示例
- Python NetworkX collaboration_weighted_projected_graph用法及代码示例
- Python NetworkX communicability用法及代码示例
- Python NetworkX circular_layout用法及代码示例
- Python NetworkX connected_caveman_graph用法及代码示例
- Python NetworkX connected_components用法及代码示例
- Python NetworkX cut_size用法及代码示例
- Python NetworkX configuration_model用法及代码示例
- Python NetworkX chordal_graph_treewidth用法及代码示例
- Python NetworkX complete_to_chordal_graph用法及代码示例
- Python NetworkX communicability_betweenness_centrality用法及代码示例
- Python NetworkX closeness_vitality用法及代码示例
- Python NetworkX chordal_graph_cliques用法及代码示例
注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.flow.capacity_scaling。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。