2016-10-19 6 views
0

私は、起点ノードと宛先ノード(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からすべての違法なエッジを含むタプルのリストを作成し、順列に入るとあれば探​​しているということであればそのようなエッジが存在し、その順列などを削除する。それは良い戦略ですか?もしそうでなければ、他に何をお勧めしますか?

ありがとうございました。

+0

申し訳ありませんが、私はODペア間occuringすべてのノードを訪問しなければならないと言うことを忘れていました。 – Achter

+0

私はあなたの例を本当に理解していませんが、置換タプルは何を意味し、そのタプルで何をしようとしていますか? – TurtleIzzy

+0

実際に私はこのコードに従っています: http://codereview.stackexchange.com/questions/81865/travelling-salesman-using-brute-force-and-heuristics ここでは、各ノードが接続されていることがわかります他のすべてのものと多くの順列が存在するが、道路網では多くのノードが互いに直接接続されていない。 パーミュテーションタプルは可能なパスです。最初のパスでは、ノード1からパスが開始され、2 - 3 - 4に行き、5で終了します。しかし、ノード2と3はネットワークに直接接続されていません組み合わせは違法であり、削除する必要があります。 – Achter

答えて

0

一般的なTSPの正確な解は非多項式として認識されます。最も単純なアプローチであるすべての並べ替えを列挙することは、その複雑さがO(n!)であるにもかかわらず有効です。詳細は、wikipedia page of TSPを参照してください。

具体的な問題については、depth-first searchをグラフに使用して有効な順列を生成することができます。このアルゴリズムを示す

Pythonのような擬似コードは以下の通りである:

def dfs(vertex, visited): 
    if vertex == target_vertex: 
     visited.append(target_vertex) 
     if visited != graph.vertices: 
      return 
     do_it(visited)  # visited is a valid permutation 
    for i in graph.vertices: 
     if not i in visited and graph.has_edge(vertex, i): 
      dfs(i, visited + [i]) 

dfs(start_vertex, [start_vertex]) 
+0

私はこの問題を回避する方法を見つけ、それを行うことができました。しかし、今私は別の質問があります:http:// stackoverflow。com/questions/40221199 /最短パスの訪問中の特定のノード ありがとう – Achter

関連する問題