私は、起点ノードと宛先ノード(ODペア)の間の最短経路を見つけるためにbrute-forceメソッドを適用しようとしています。私はnetworkXを使用してネットワークを作成し、その後にブルートフォースを適用した順列を呼び出します。
ネットワーク内のすべてのノードが他のすべてのノードと接続されている場合、これは問題ありません。しかし、いくつかのまたは多くのエッジがそこにない場合、この方法はうまくいかないでしょう。 それを正しくするには、私は違法なエッジを含むすべてのパーミュテーションを削除する必要があります。例えばパーミッションセット(python)から不正なエッジを削除
2つの置換タプルが
[(1,2,3,4,5)、(1,2,4,3,5)]
とにある場合私のネットワークはノード2と3の間にエッジが存在しないので、上記のリストの最初のタプルは削除する必要があります。
最初の質問:最初に順列を作成してそこに入り、不正なエッジを含むものを削除するのは効率的な方法ですか?もし私が何をすればいいのですか?
2番目の質問:はい、私の戦略は、私が最初に「G.has_edge(U、V)」コマンドnetworkxからすべての違法なエッジを含むタプルのリストを作成し、順列に入るとあれば探しているということであればそのようなエッジが存在し、その順列などを削除する。それは良い戦略ですか?もしそうでなければ、他に何をお勧めしますか?
ありがとうございました。
申し訳ありませんが、私はODペア間occuringすべてのノードを訪問しなければならないと言うことを忘れていました。 – Achter
私はあなたの例を本当に理解していませんが、置換タプルは何を意味し、そのタプルで何をしようとしていますか? – TurtleIzzy
実際に私はこのコードに従っています: http://codereview.stackexchange.com/questions/81865/travelling-salesman-using-brute-force-and-heuristics ここでは、各ノードが接続されていることがわかります他のすべてのものと多くの順列が存在するが、道路網では多くのノードが互いに直接接続されていない。 パーミュテーションタプルは可能なパスです。最初のパスでは、ノード1からパスが開始され、2 - 3 - 4に行き、5で終了します。しかし、ノード2と3はネットワークに直接接続されていません組み合わせは違法であり、削除する必要があります。 – Achter