2010-12-16 18 views
0

こんにちは、 私はTSPの問題を解決する必要があるプロジェクトに取り組んでいます。私がここで必要とするのは、グラフのハミルトニアン回路をどのように見つけることができるかということです。実際に私は現実世界でこれを行う方法を知っています。しかし、実装とソースコードでは、これをどのように行うことができるのかわかりません。私はいくつかのネストされたループを使用するインターネット上の記事を読んだが、私はそれぞれが何をしているのか、どのように全体の話が進むのか分からなかった。誰かが私を助けることができたら、私は感謝しています。そして、これを実装する方法の簡単な例を私に教えてください。私は実用的なモデルは必要ありません。ちょうど私たちが頂点の配列とパスの配列を持っていると仮定します(パスによって、パスの開始と終了の頂点を意味します)。この問題をどのように解決できるかTSP問題のハミルトニアン回路を見つける際の問題

+0

私はあなたが望むものを理解するのではなく、最寄りの隣人、2-opt、3-opt、antアルゴリズムなど、異なるアルゴリズムを組み合わせる必要がある最速の方法でTSPを解決することはできません。プログラミングの最善の方法でそれらを組み合わせることです。 – Pietro

+0

私の問題は、速い方法を見つけることができません、それはちょうどそれの実装についてです。私はどのステップでグラフを見ることができますか?次に、サイクルを比較して、どのノードがすべてのノードにアクセスしているかを確認し、最小ツアーを探したいとします。私はそれが良いアルゴリズムではないことを知っているが、私はちょうどこれを実装したい。そして、私はどのようにグラフでサイクルを見つけるためのプログラミングアルゴリズムがわかりません。 – user435245

+0

グラフライブラリは物事を少し簡単にするので、生の頂点/エッジ/サブグラフ/パス表現を混乱させる必要はありません。私はhttp://jgrapht.org/を使用します。 – andersoj

答えて

1

TSPの正確な解を見つけるより効率的な方法の1つは、O(n^2 * 2^n)で実行される動的プログラミングアルゴリズムを使用することです。これは、線形プログラミングの選択肢のいくつかと比較してむしろ単純です。 「TSP動的プログラミング」を検索すれば、多くの例が見つかります。

O(n!)で実行されるブルートフォースのようなもっと単純なアプローチがあります。あなたがforループをたくさん見た場合(つまり、2つ以上の場合)、これはおそらくあなたが以前見たアルゴリズムのタイプでしょう。これらは仕事を完了します(グラフのサイズに応じて、この生涯ではないかもしれません)。

+0

彼はコンピュータサイエンスのNP困難な問題を(おそらく最も有名な)解決しようとしています。O(n³) – Pietro

+0

@Pietro私はあなたがO(n^3)以上で動くべきではないかと考えています。 @Ian Bishop。 –

+0

DPはTSP(NP Hard問題)を解く一つの方法かもしれません。私は、他のアプローチよりも "最高(最も効率的)"なものを確立するための研究が行われているかどうか疑問に思っています...私はサブトラクション排除のためのブランチ・アンド・バウンド/ – Tryer

関連する問題