0

ubuntuシステムでgraph-tools BFS検索をセットアップしようとしました。バグのため、 のgraph_tools.bfs_search()代わりにを使用せざるを得なくなりgraph_tools.bfs_iteratorました。

から継承する例で述べたように、最小限のクラスを設定しましたgraph_tools.BFSVisitor

(num_nodes, num_actions)これの目的は、グラフ内の特定のノードから到達可能なすべてのエッジ ソース ノードとエッジ アクション値のペアを追跡し、それらを numpy 配列に格納して、配列が次の次元を持つようにすることですnum_actions。グラフの出次数。

関数はその役割を果たしますが、エッジ アクションを取得するためにグラフのエッジ PropertyMapself.edge_action[edge]にアクセスすることは大きなボトルネックであり、コードの速度が大幅に低下します。しかし、そもそもグラフツールを速度のためだけに使用しようとしたので、今は少し行き詰まっています。

グラフツールライブラリについて何か不足していますか、それともこれを高速化する方法はありませんか? それ以外の場合は、networkx に戻って、そこで最速の方法を見つけようとすることもできます。グラフ ツールの C++ パワーを使用するために、この pythonic ループを使用してエッジ アクションにアクセスすることを避ける方法は考えられません。

ここで私の単純なクラス:

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
4

0 に答える 0