图形工具:具有多个权重约束的Dijkstra搜索

时间:2018-10-25 12:54:58

标签: python graph-tool

我正在使用python的graph-tool库来查找两个顶点之间的最短路径。我对边缘有多个权重,并根据某些条件为最短路径选择适当的权重值。例如:如果两个相邻边的名称属性相同,则第二个权重可见,否则默认权重应可见。 从图形工具的文档中,我无法理解是否可以在权重选项中定义某些条件。这是我的代码:

from graph_tool.all import *
g = Graph(directed=False)
v1 = g.add_vertex()
v2 = g.add_vertex()
v3 = g.add_vertex()
e = g.add_edge(v1, v2)
e1 = g.add_edge(v2, v3)

epropw = g.new_edge_property("int32_t")
epropw1 = g.new_edge_property("int32_t")
epropn = g.new_edge_property("string")

g.ep.weight = epropw
g.ep.weight1 = epropw1
g.ep['name'] = epropn
g.ep.weight[g.edge(v1, v2)] = 21
g.ep.weight1[g.edge(v1, v2)] = 20
g.ep['name'][g.edge(v1, v2)] = 'UniqueName'
dist, pred = dijkstra_search(g, weight=lambda g.ep.weight1, g.ep.weight: if 'UniqueName' in edge)

现在,我不明白如何定义权重的条件,即唯一名称的存在是边缘之间的属性,然后使用weight1,否则使用权重。

我以前使用的是networkX,但速度非常慢(我的节点介于1M到10M之间),并且发现graph-tool的速度相当快。在NetworkX中,很容易定义权重的函数:

weight=lambda u, v, d: d['weight1'] if 'weight1' in d else d['weight']

任何人都可以帮助我如何为图形工具使用相同的功能?

0 个答案:

没有答案