A *は、ダイクストラを使用するよりも高速であり、最良優先探索を使用して処理を高速化します。
A *は、基本的にダイクストラの情報に基づいたバリエーションです。
A *は、 [ ]
の値に応じて、次に探索する頂点を貪欲に選択するため、「最良優先探索」と見なされます。ここで、はヒューリスティックであり、はこれまでのコストです。f(v)
f(v) = h(v) + g(v)
h
g
非有益なヒューリスティック関数を使用する場合:h(v) = 0
それぞれについて:A *は、ダイクストラのアルゴリズムと同じv
ように、「これまでのコスト」()のみに従って次に開発する頂点を選択することに注意してください。したがって、A*はデフォルトでダイクストラのアルゴリズムになります。アルゴリズム。g(v)
h(v) = 0
アルゴリズムをミリ秒単位で実行する必要がある場合、A*が最も目立つ選択肢になるのはいつですか。
完全ではありませんが、それは多くのことに依存します。私の個人的な経験から、降下ヒューリスティック関数を使用している場合、最初に貪欲な最良優先(ヒューリスティック関数のみに従って選択)は、通常、A *よりも大幅に高速です(ただし、最適に近いわけではありません)。
私が理解していることから、それは必ずしも最良の結果を返すとは限りません。
A *は、 Admissibleヒューリスティック関数を使用する場合、完全(パスが存在する場合はパスを検索)と最適(常に最短パスを検索)の両方です。あなたの機能が許容されない場合-すべての賭けはオフです。
迅速な結果が必要な場合は、パスを事前に計算する方がよいですか?それらを保存するには、メガバイトのスペースが必要になる場合があります。
これは、 15パズルの問題など、一部の問題で行われる一般的な最適化ですが、より高度です。ポイントAからポイントBへのパスはマクロと呼ばれます。一部のパスは非常に便利であり、覚えておく必要があります。これらのマクロを記憶することで処理を高速化するために、機械学習コンポーネントがアルゴリズムに追加されています。
ここでのポイントAからポイントBへのパスは、通常、状態グラフではなく、問題自体にあることに注意してください(たとえば、正方形を一番下の線から上の線に移動する方法...)
物事をスピードアップする
には:ヒューリスティックがあり、それが遅すぎると感じ、最適ではない場合でもより迅速なソリューションが必要な場合-A *Epsilonは通常A*よりも高速ですが、パスの最適性に限界があります(最適にどれだけ近いか)。