python的瘦qpbo包装器

thinqpbo的Python项目详细描述


QPBO的薄包装

Vladimir Kolmogorov改进的二次伪布尔优化(QPBO)算法的瘦Python包装器。弗拉基米尔·科尔莫戈罗夫的原始源代码可以在http://pub.ist.ac.at/~vnk/software.html找到。这个包装器使用了一个经过修改的版本,它支持更大的图形和稍低的内存使用。有关详细信息,请参见submodule repository

QPBO与最大流量

虽然qpbo算法执行类似于Maxflows-t图割,但它允许使用maxflow没有的非子模能量项。除其他外,这允许qpbo使用排除项解决优化问题,这非常有用。对于等价问题,qpbo实现所构造的图是maxflow图的两倍大。因此,qpbo使用更多的内存,并且比maxflow稍慢。

安装

使用pip install thinqpbo安装包或克隆此存储库(包括submodule)。构建包需要cython。

图形类型

目前,有三种不同类型的图:QPBOIntQPBOFloatQPBODouble。唯一的区别是用于图中边缘容量的底层数据类型。为了保持稳定性,建议整数容量使用QPBOInt,浮点容量使用QPBODouble。然而,在某些情况下,使用QPBOFloat来减少内存消耗可能是有利的。

高级功能(QPBO-P和QPBO-I)

QPBO实现有一些高级扩展,称为QPBO-P和QPBO-I。目前,并不是所有高级函数都已包装。如果您需要使用未被{{CD8}}包装的QPBO C++库的特性,请通过在GITHUB上创建一个问题来告诉我。

小例子

importthinqpboastq# Create graph object.graph=tq.QPBOInt()# 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_unary_term(0,0,5)# E1(0) = 5, s     --5->   n(0)graph.add_unary_term(0,1,0)# E0(0) = 1, n(0)  --1->   tgraph.add_unary_term(1,5,0)# E0(1) = 5, n(1)  --5->   tgraph.add_pairwise_term(0,1,0,7,0,4)# E01(0,1) = 7, n(0)  --7->   n(1)# E11(0,1) = 4, Not possible with standard Maxflow# Find maxflow/cut graph.graph.solve()graph.compute_weak_persistencies()twice_energy=graph.compute_twice_energy()forninrange(nodes_to_add):segment=graph.get_label(n)print('Node %d has label %d.'%(n,segment))# Node 0 has label 0.# Node 1 has label 0.print('Twice energy/flow: %s'%twice_energy)# Twice energy/flow: 12

许可证

由于qpbo实现是在gplv3许可下分发的,所以这个包也是。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
如何从Java调用AmazonAWSAPI?   Java中的渗流   java在dao端使用逻辑不是一个好的实践吗?   java Swing绘制网格。韦尔德结果   java如何设置PlusOneButton对话框的共享选项的默认文本   java如何在firebase存储中管理多个上载/下载?   java Wicket在多个位置显示相同的文本   java使用j2me通过蓝牙从一个手机向另一个手机发送短信   java为什么不让DialogWait框自动关闭?   java Visual Studio代码JDBC访问Derby数据库   在java中如何根据日期从文件夹中获取文件   java如何从数据库加载多个数据   java匿名类和同步以及“this”   java无法使用Selenium上载文件   java多线程JAXR调用parallelStream还是Futures?   获取要编译的Netbeans Java程序   java检查二叉树是否为有效BST的函数中的“min”和“max”是什么?   java有人能解释为什么这段代码只在构造函数中工作吗?   java如何将多种类型的用户重定向到各自的活动?