[アルゴリズム]パスプランニングにおけるダイクストラとスターアルゴリズム

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

  • ダイクストラのアルゴリズムは、単一ソースの最短経路問題を見つけるためのアルゴリズムであり、開始点から終了点までのパスの重みの合計最小のパスを見つけるために使用できます
  • ダイクストラの主な特徴は、始点を中心とした外層(幅優先探索のアイデアに、終点まで拡大することです。
  • 単一のソース:頂点から開始して、ダイクストラのアルゴリズムは、頂点から他のポイントまでの最短距離のみを検出でき、2つのポイントは検出できません。

ここで、次の図があると仮定して、始点Aから終点Gまでの最短経路を見つけます。エッジの上のデータは重みを表します。最初は、開始点Aから開始して、Aの頂点値は0であり、他の頂点は無限大(∞)です。

現在の頂点から直接到達でき、検索されていない頂点を探します。ここに頂点Bと頂点Cがあり、それらを次のステップの候補頂点として設定します。そして、候補となる頂点の重みを計算します。たとえば、開始点Aの重みが0の場合、頂点Bの重みは0 + 2 = 2になります。同じ方法を使用して頂点Cを計算すると、結果は0 + 5 = 5になります。

計算結果が候補頂点の値よりも小さい場合、この値が更新されます。頂点Bと頂点Cの現在の重みは両方とも無限であり、計算結果よりも大きいため、これら2つの頂点の値が更新されます。更新手順は次のとおりです。

重みが最小の頂点が候補頂点から選択され、最小の頂点に移動されます。ここで、Bの重みが最小である場合、パスABは開始点Aから頂点Bまでの最短パスです。別のパスを使用する場合は、頂点Cを通過する必要があり、その重みはパスABよりも大きくなければならないためです。

前の手順と同様に、頂点Bの候補頂点を更新します。その候補頂点はC、D、およびEです。DとEは両方とも最初は無限であるため、更新できます。BからCへの重みは2+ 6 = 8であり、これはCの現在の重みより5大きいため、この値は更新されません。C、D、Eの中で重みが最も小さい頂点、つまりDを選択します。手順は次のとおりです。

終点Gに到達するまで同じ操作を繰り返します。頂点Dに移動した後、Eの重みが計算されますが、更新する必要はありません(3 + 4 = 7のため)。これで、2つの候補頂点CとEの重みは両方とも5になるため、どちらかを選択できます。ここではCを選択するので、開始点Aから頂点Cまでの最短経路が決定されます。次に、点Cに移動した後、Fが新しい候補頂点になります。

このとき、頂点の補集合では、Eは5(前のステップでCを選択したため、Eはまだ候補頂点です)、Fは13なので、重みが小さく、からの最短経路がEを選択します。頂点Eへの開始点Aも確認されます。このとき、相補的な頂点はGとFです。

候補頂点はGが14、Fが13なので、Fに移動します。以下に示すように。

Fに移動した後、終点Gである候補頂点Gは1つだけです。頂点Gの重み計算結果は13 + 7 = 20であり、現在の値14よりも大きいため、更新されません。また、AからGへの最短経路も見つかりました。これは、下の図の赤い頂点でマークされた位置ABEGです。

2.スターアルゴリズム

A *(A-Star)アルゴリズムは、ダイクストラアルゴリズムから開発された、グラフ内の最短経路問題を解くためのアルゴリズムでもあります。ダイクストラのアルゴリズムは、開始点に近い頂点から開始し、開始点から各頂点までの最短経路を順番に見つけます。つまり、終点から遠い頂点の最短経路も計算されますが、この部分は実際には役に立ちません対照的に、A *は事前に値を見積もり、この値を使用して無駄な計算を節約します。

最初にダイクストラのアルゴリズムを使用して、下の図の始点から終点までの最短経路を解きます。各正方形は頂点と見なすことができ、頂点間の距離は1です。グラフを更新した結果を下図に示します。

ダイクストラのアルゴリズムは、開始点から候補頂点までの距離に基づいて次の頂点のみを決定します。したがって、青い矢印で示された2つのパスが実際に目的地からどんどん遠ざかっていることを見つけることができず、検索を続行します。
ここに画像の説明を挿入
A *アルゴリズムは、開始点から候補頂点までの距離だけでなく、現在の頂点から終了点までの推定距離も考慮します(ヒューリスティック)。推定距離は自由に設定できます。ここでは、下図のように、頂点から終点までの直線距離を丸め後の値を使用します。
ここに画像の説明を挿入
A *アルゴリズムの手順を以下に説明します。

まず、開始点を検索完了状態に設定します。検索されたポイントはすべて青色で示されます。開始点の周りの各頂点の重みを計算します。計算方法は、「始点から頂点までの距離」(ボックスの左下)と「距離の推定値」(ボックスの右下)です。

オレンジ色で示されている重みが最小の頂点を選択し、選択した頂点を検索完了状態に設定します。

検索された頂点から次の頂点までの重みを計算します。距離が最も短い頂点を選択します。

選択した頂点を検索完了状態に設定します。その後、終点に到達するまで上記の操作を繰り返します。
ここに画像の説明を挿入

検索が完了しました。効率はダイクストラのアルゴリズムよりもはるかに高いです。
ここに画像の説明を挿入
推定距離値が現在の頂点から終点までの実際の値に近いほど、A *アルゴリズムの検索効率が高くなります。逆に、距離推定値が実際の値と異なる場合、アルゴリズムの効率は高くなります。ディクスターよりも優れている可能性がありますプルアルゴリズムはさらに低くなります。ギャップが大きいと、正しい答えが得られない場合もあります。ただし、推定距離が実際の距離よりも短い場合は、正解が得られます(ただし、適切な距離推定が設定されていないと、効率が低下します)。

A *アルゴリズムは、敵がプレイヤーを追いかけているときなどのアクションルートを計算するためにゲームプログラミングでよく使用されます。ただし、このアルゴリズムの計算量が多いため、ゲームの全体的な実行速度が低下する可能性があります。 。したがって、実際のプログラミングでは、他のアルゴリズムの組み合わせを検討するか、特定のアプリケーションシナリオに従って対応する調整を行う必要があります。


参照:「私の最初のアルゴリズムの本」

おすすめ

転載: blog.csdn.net/QLeelq/article/details/113862917