python的瘦maxflow包装器
thinmaxflow的Python项目详细描述
maxflow的薄包装
由yuri boykov和vladimir kolmogorov改进的maxflow算法的瘦python包装器。弗拉基米尔·科尔莫戈罗夫的原始源代码可以在http://pub.ist.ac.at/~vnk/software.html找到。这个包装器使用了一个经过修改的版本,它支持更大的图形和稍低的内存使用。有关详细信息,请参见submodule repository。
最大流量与QPBO之比
maxflow算法的一个更高级的替代方案是(二次伪布尔优化)QPBO,它还使用s-t图割。与maxflow不同,它允许使用非子模能量项,而maxflow不允许这样做(除非您以特定的方式构造图,这就是qpbo所做的)。除此之外,这使得qpbo可以用排除项来解决优化问题,这非常有用。QPBO使用更多内存,比MaxFlow稍慢。
安装
使用pip install thinmaxflow
安装包或克隆此存储库(包括submodule)。构建包需要cython。
图形类型
目前,有四种不同类型的图:GraphInt
、GraphShort
、GraphFloat
和GraphDouble
。唯一的区别是用于图中边缘容量的底层数据类型。为了保持稳定性,建议整数容量使用GraphInt
,浮点容量使用GraphDouble
。然而,在某些情况下,使用GraphShort
或GraphFloat
来减少内存消耗可能是有利的。
小例子
importthinmaxflowastf# Create graph object.graph=tf.GraphInt()# Number of nodes to add.nodes_to_add=2# Add two nodes.first_node_id=graph.add_node(nodes_to_add)# Add edges.graph.add_tweights(0,5,0)# s --5-> n(0)graph.add_tweights(0,0,1)# n(0) --1-> tgraph.add_tweights(1,0,3)# n(1) --3-> tgraph.add_edge(0,1,2,1)# n(0) --2-> n(1)# n(1) --1-> n(0)# Find maxflow/cut graph.flow=graph.maxflow()forninrange(nodes_to_add):segment=graph.what_segment(n)print('Node %d belongs to segment %d.'%(n,segment))# Node 0 belongs to segment 0.# Node 1 belongs to segment 1.print('Maximum flow: %s'%flow)# Maximum flow: 3
许可证
由于maxflow实现是在gplv3许可下分发的,所以这个包也是。