0

迅速な対応 chessofnerd と Joshua に感謝します。不明なログと不明な質問で申し訳ありません。言い換えさせてください。

Joshua: DB に体重を保存し、Transformer で DB から取得しています。

トポロジに 4 つのデバイスが接続されており、一部のデバイス間には複数の接続があり、2 つのデバイス間には以下に示すように単一の接続しかありません。

無向加重グラフを使用しています。

最初は、すべてのリンクに 0 の重みが割り当てられます。 D1 と D4 の間のパスを要求すると、各リンクの重みを 1 ずつ増やします。

別のパスに対する 2 番目のリクエストが来ると、Transformer を介してすべての重みを与えます。リクエストが 2 回目に来ると、リンク L1、L2、L3 には 1 の重みを、他のリンクには 0 を正しくフィードしています。

(L4,L5,L3) または (L6,L7,L3) または (L8,L9,L3) の重みは (L1,L2,L3) の重みよりも小さいため、これらのパスのいずれかを取得することを期待しています- (L4,L5,L3) または (L6,L7,L3) または (L8,L9,L3)。しかし、私は再び取得しています (L1,L2,L3)

D1---L1-->D2---L2--->D3--L3--->D4

D1---L4-->D2---L5--->D3--L3--->D4

D1---L6-->D2---L7--->D3--L3--->D4

D1---L8-->D2---L9--->D3--L3---->D4

トランスフォーマーは、以前にリンク用に保存された重みを単に返します。

グラフ トポロジ = new UndirectedSparseMultigraph()

DijkstraShortestPath pathCalculator = new DijkstraShortestPath(topology, wtTransformer);

リスト パス = pathCalculator.getPath(node1, node2);

プライベート最終トランスフォーマー wtTransformer = new Transformer() {

 public Integer transform(Link link) {
     int weight = getWeightForLink(link, true);
     return weight;
  }

}

4

1 に答える 1

0

DijkstraShortestPath結果をキャッシュするように作成しています。この動作を変更するには、コンストラクターに「false」パラメーターを追加します。

http://jung.sourceforge.net/doc/api/edu/uci/ics/jung/algorithms/shortestpath/DijkstraShortestPath.html

(いいえ、エッジの重みを変更してもキャッシュは汚染されません。その場合、新しい DSP インスタンスを作成するか、最初からキャッシュを使用しないようにする必要があります。)

于 2013-03-07T19:06:06.880 に答える