我试图在 ubuntu 系统上设置图形工具 BFS 搜索。由于一个错误,我被迫graph_tools.bfs_search()
使用graph_tools.bfs_iterator
.
所以我确实设置了一个最小类,如继承自graph_tools.BFSVisitor
.
这样做的目的是跟踪从图中的特定节点可到达的所有边缘源节点和边缘动作值对,并将它们存储在一个 numpy 数组中,这样该数组将具有以下维度(num_nodes, num_actions)
:num_actions
图中的出度。
该函数完成其工作,但访问self.edge_action[edge]
图形的边缘 PropertyMap 以检索边缘动作是一个巨大的瓶颈,并且显着减慢了我的代码。但由于我一开始只是为了提高速度而尝试使用图形工具,所以我现在有点卡住了。
我是否缺少有关图形工具库的某些内容,或者没有办法加快速度?否则我还不如回到networkx并尝试在那里找到最快的方式。我根本想不出一种方法来避免使用这个 pythonic 循环来访问边缘操作,以便使用图形工具的 c++ 功能。
这是我的简单课程:
class SetIterator(gt.BFSVisitor):
def __init__(self, action, safe_set):
"""
action: gt.PropertyMap
edge property representing edge action
safe_set: np.array
array used to store safe node, action pairs
"""
self.edge_action = action
self.ea = self.edge_action
self.safe_set = safe_set
def discover_vertex(self, u):
"""
Invoked on first encounter of vertex.
Parameters
----------
u: gt.Vertex
"""
self.safe_set[int(u), 0] = True
def examine_edge(self, e):
"""
Called when edge is checked
Parameters
----------
e: gt.Edge
"""
# TODO This one line is bottleneck of code
self.safe_set[int(e.source()), self.ea[e]] = True