4

私の問題は次のとおりです。

無向グラフがあります。各エッジにはコスト(または重量)があります。ノードの1つにSというラベルが付いています。Sから始めて、すべてのノードに少なくとも1回はアクセスしたいと思います。ノードに複数回アクセスすることは許可されています。エッジに沿って複数回移動することは許可されていますが、ソリューションのコストが高くなります。3のコストでエッジを2回移動すると、パス全体のコストに6が追加されます。グラフにはいくつかの「行き止まり」ノードがあるため、エッジを複数回移動する必要がある場合があります。

これを行うための高速アルゴリズムとは何ですか?これはよく知られている問題ですか?

私が探しているもの:

適度に速い-ここで話しているグラフの相対的なサイズは、40〜50ノードのオーダーです。したがって、アルゴリズムが10〜15秒以上かかることはないでしょう。

合理的に最適-私は絶対的な最適性を探していません。解がほぼ最適になるように検索をガイドするための興味深いヒューリスティックは十分です。

私はこれをPythonで書きます。したがって、アルゴリズムのPython実装を知っている場合は、それが最適です。

助けてくれてありがとう。

4

5 に答える 5

3

これは巡回セールスマン問題のバージョンであり、ウィキペディアの記事にはさまざまなヒューリスティックの概要がよくまとめられています。

標準の TSP と独自のアルゴリズムの大きな違いは、TSP は通常、ノードごとに 1 回の訪問のみを強制するのに対して、複数の訪問を許可していることです。その問題は、このSOの質問でうまく答えられました。

この男は彼の Python TSP ソリューションを文書化しました。これは、Python でグラフを実装する一般的な方法についての非常に役立つ議論です。

于 2012-09-05T22:10:22.863 に答える
2

シングルソース-最短パス

ノード$s$があり、ノード$t$への最短経路を見つけたい場合。

グラフに負でないエッジの重みがある場合、ダイクストラのアルゴリズムは時間$ O(| E | + | V | \ log | V |)$で最適な答えを見つけます。

ただし、グラフに負のエッジの重みが含まれている場合、ベルマンフォードのアルゴリズムは、グラフに負の重みのサイクルが含まれていないという制約に従って、$ O(| V || E |)$時間で最適な答えを見つけます。

オールペア-最短経路

これは、グラフ内の任意の2つのノード$ u、v$間の最短経路を見つけるためのものです。これは、時間$ O(| V | ^ 3)。$でFloyd-Warshallのアルゴリズムによって解くことができます。Bellman -Fordアプローチと同様に、グラフには負の重みのサイクルが含まれていてはなりません。

負の重みのサイクル制約の理由は、最短パスが継続的にサイクルを取り、その重みを減らす可能性があるためです(以下に示すように)。

ここに画像の説明を入力してください

于 2012-09-21T20:44:27.023 に答える
1

反復限定深さ優先検索を使用する

見る

http://en.wikipedia.org/wiki/Depth-limited_search

于 2012-09-05T18:07:56.357 に答える
1

簡単なアプローチは、グラフの最小スパニング ツリーを構築し、それを (深さ優先) ウォークして、既にアクセスしたノードをスキップすることです。

これは、最適な TSP パスの長さの 2 倍以下であることが証明されています。ヒューリスティックを使えば確実に改善できますが、これはスターターです (そして実装も簡単です)。

于 2012-09-05T18:13:55.497 に答える
0

編集3:いいえ、まだ探しています


編集2:

ここで私たちはdarkskyに行きます、私がこのハハをしたのでそれはあまりにも長いです

ダイクストラのアルゴリズム

Dのアルゴリズムは、グラフ内の開始ノードと他のすべてのノードからの最短距離を検出します。

これは、コードで動作するように変更するのが妥当と思われるPythonの実装です。

Pythonの実装


編集:コメントで正しく指摘されているように、A *は(1回の反復で)単一のパスに使用されます。そのため、各ノードに1回アクセスするという要件は満たされていません。TSPは、1回を超えるノードにアクセスできるため、直面する問題よりもはるかに複雑な問題だと思います。

オリジナル:A *

A*Wiki記事

私は大学に戻ってこの問題を解決するのが大好きでした、楽しんでください!

于 2012-09-05T16:30:53.340 に答える