私は解決するのが非常に難しい問題を抱えており、最速のルートを見つけるためにどのアルゴリズムを使用できるのか疑問に思っています。無向グラフは正と負の調整で構成され、これらの調整は迷路をナビゲートするボットまたは物に影響を与えます。私が抱えている問題は、+または-のループを含む迷路です。例が役立つかもしれません:-
ノードAはオブジェクトに10ポイントを与えます
ノードBはオブジェクトから15を取得します
ノードCはオブジェクトに20ポイントを与えます
route = ""
開始ノードはAで、終了ノードはCです。
グラフ構造を次のように与えます:-
a(+10)-----b(-15)-----c+20
node() means the node loops to itself - and + are the adjustments
ループのないノードはc+20であるため、ノードcの正の調整は20ですが、ループはありません。
ボットまたはオブジェクトのリソースに10ポイントがある場合、最適なパスは次のようになります:-
a > b > c the object would have 25 points when it arrives at c
route = "a、b、c"
これは実装が非常に簡単です。次の課題は、適切なノードに戻る方法を知ることです。各ノードで、隣接するノードとその調整レベルのいずれかを見つけることができると仮定します。これが次の例です:-
ボットが5ポイントのみで開始した場合、最適なパスは次のようになります。
a > a > b > c the bot would have 25 points when arriving at c
route = "a、a、b、c"
これは非常に単純なグラフでしたが、ノードがたくさんある場合、ボットは、可能なルートを追跡しながら、適切なノードでループするか、ある適切なノードから別のノードに移動するかを判断するのが非常に困難になります。
そのようなルートはバックトラックキューになります。
より難しい例では、多くの行き来が発生します
ボットには10ポイントあります
a(+10)-----b(-5)-----c-30
a> b> a> b> a> b> a> b> a>b>c残り5ポイント。
ボットがそれを行うことができる別の方法は次のとおりです:-
a> a> a> b> c
これはより効率的な方法ですが、これをどのようにプログラムできるかは、部分的に私の質問です。
これを解決するための優れたアルゴリズムを知っている人はいますか。iveはすでにベルマンフォード法とダイクストラ法を調べましたが、これらはループパスではなく単純なパスを提供するだけです。
何らかの形で、または何らかの形のヒューリスティックで再帰的になる可能性がありますか?
あなたのアナロジーを参照してください:-
私はあなたが言っていることを理解していると思います、これまでのところ、少し疑似がより明確になるでしょうroute()
q.add(v)
best=v
hash visited(v,true)
while(q is not empty)
q.remove(v)
for each u of v in G
if u not visited before
visited(u,true)
best=u=>v.dist
else
best=v=>u.dist