使用igraph的“write_dimacs”方法的问题

时间:2016-04-06 22:44:53

标签: python igraph

我在使用igraph python库的方法write_dimacs时遇到问题:

由于某些我不理解的原因,当我尝试使用它时,我收到错误:KeyError: 'Attribute does not exist'(请参阅下面的完整输出)。

下面是一个示例代码片段,它在我的系统上重现错误(mac os x 10.10.5,python 3.5.1,python-igraph-0.7.1.post6):

from igraph import *

g = Graph.Read_Edgelist("graph3.txt")

print(g)

# This works fine
g.write_adjacency("graph4.txt")

# This gives the error
g.write_dimacs("graph5.txt")

如果我明确地将其他参数传递给方法,我也会得到相同的错误,例如:g.write_dimacs("graph5.txt", 1)

输出:

IGRAPH D--- 15 22 --
+ edges:
1->2 1->8 1->11 1->14 2->3 2->6 3->4 4->5 5->4 5->1 6->4 6->7 7->4 8->9 8->11
8->12 9->10 10->9 10->5 11->12 12->13 13->10
Traceback (most recent call last):
  File "test.py", line 10, in <module>
    g.write_dimacs("graph5.txt")
  File "build/bdist.macosx-10.10-intel/egg/igraph/__init__.py", line 1676, in write_dimacs
KeyError: 'Attribute does not exist'

有人知道发生了什么吗?

提前致谢。

1 个答案:

答案 0 :(得分:1)

write_dimacs方法用于在DIMACS maximum flow problem format中编写igraph图。此格式要求您:

  • 指定最大流量问题的source顶点
  • 指定最大流量问题的target顶点
  • 指定边的容量

源和目标顶点是从图的sourcetarget属性定义的。假设容量来自capacity边缘属性。 igraph的文档有一个错误:文档说如果缺少capacity属性,它将简单地假设所有容量都等于1,但事实并非如此 - 你需要明确地传递容量,或提供指定边缘容量的边缘属性的名称。

在您的情况下,最简单的方法是:

g.write_dimacs("graph5.txt", source=0, target=1, capacity=[1]*g.ecount())

我只是将两个任意顶点定义为源和目标。