A* アルゴリズムの概要

ヒント: 記事作成後、## タイトルから目次を自動生成できます。生成方法は右のヘルプを参照してください。


1. A*アルゴリズムの起源と応用背景

ここに画像の説明を挿入します

2. A* アルゴリズムの基本原理

1. 基本的な数学的原理

A* アルゴリズムは、値 F を更新して検索するヒューリスティック検索アルゴリズムです。
F = G + H F=G+H F=G+H
F F F: 現在のノードの総コスト
G G G: 開始ノードから現在のノードまでの移動距離 (実際のコスト)
H H H: 現在のノードから終点までの推定移動距離 (推定コスト)

計算するGコスト は、開始点から現在のノードまでを通過するすべてのエッジの距離の合計です。
計算Hコストヒューリスティック関数 h には、マンハッタン距離、対角距離 (チェビシェフ距離)、およびユークリッド距離が含まれます。

注意:
1. H を計算するときは、経路上の障害物を無視します。これは実際の値ではなく残りの距離の推定値であるため、H コストが推定コストになります。

2. グローバル マップの経路計画を実行するとき、環境情報はグリッド マップに変換され、各グリッドは環境のエリアを表します。障害物のエリアは障害物グリッドとしてマークできるため、障害ノードは知られています。

3. A* アルゴリズムが最短パスを確実に見つけるための条件は、次の 2 つの条件を満たすことであることが知られています。
(1) ヒューリスティック関数h(n) は単調性を満たす必要があります (つまり、推定コストがノード n からターゲット ノードまでの実際のコストを超えない)。
(2) マップは実行可能でなければなりません。つまり、乗り越えられない障害物やアクセスできない領域はありません。

2. ヒューリスティック関数の選択

2.1マンハッタンの距離

曼哈顿距离: D = ∣ x 2 − x 1 ∣ + ∣ y 2 − y 1 ∣ D=|x_{2}-x_{1}|+|y_{2}-y_{1}| D=x2 バツ1 +y2 そして1 (以下に示すように):
粗い=マンハッタン距離
グラフで上下左右の 4 方向の移動のみが許可されている場合は、次のことができます。マンハッタン距離を使用します。ターゲットに到達するまでに現在のグリッドから水平または垂直に移動した正方形の数を計算します。
ここに画像の説明を挿入します
例えば、上図では中心ノードが上下左右に展開する場合がありますが、この場合はマンハッタン距離をヒューリスティック関数として使用するとより効果的です。拡張ノードに障害物がある場合:
ここに画像の説明を挿入します
A* アルゴリズムは、マップ内のグリッドに基づいて各ノードのステータス、つまり障害物ノードかどうかを判断します。アルゴリズムがノードを拡張するとき、そのノードが障害物ノードである場合、そのノードは拡張されるノードのセットに追加されないため、ノードに沿った検索を継続する必要がなく、障害物を効果的に回避できます。

2.2 対角距離(チェビシェフ距離)

対角距離 (チェビシェフ距離): D = m a x ( ∣ x 2 − x 1 ∣ + ∣ y 2 − y 1 ∣ ) D=max(|x_ {2} -x_{1}|+|y_{2}-y_{1}|) D=atx(x2 バツ1 +y2 そして1 )、以下に示すように:
対角距離
グラフで 8 方向の移動が許可されている場合、次のことができます。対角線の距離を使用します。対角距離は、斜めに移動する際の余分な距離を考慮して推定をより正確にするため、斜めの移動が許可されている状況を処理するのに適しています。
ここに画像の説明を挿入します
拡張ノードに障害物がある場合:
ここに画像の説明を挿入します

2.3 ユークリッド距離

ユークリッド距離: D = ( x 2 − x 1 ) 2 + ( y 2 − y 1 ) 2 D=\sqrt{(x_{2}- x_{1) })^2+(y_{2}-y_{1})^2} D=(x2 バツ1 )2+(y2 そして1 )2 (以下に示すように):
ユークリッド距離
どの方向への移動も許可されている場合は、ユークリッド距離を使用できます。ユークリッド距離は 2 点間の距離を直接計算するため、実際の状況とより一致します。

知らせ:
ヒューリスティック関数と展開方法の間には、特定の拘束関係はありませんが、上記は、どのヒューリスティック関数をどの方法でノードを展開するかについての単なる提案です。どのヒューリスティック関数を選択するかは、アプリケーション シナリオの具体的な状況に応じて異なります。実際の状況に基づいて選択することも、複数のヒューリスティック関数を組み合わせて総合的に検討することもできます。上記内容の一部はChatGPT-plus4.0から提供されておりますが、誤りがある場合はご自身で判断してください。

3. A*アルゴリズムのプログラム実装

1.アルゴリズムロジック

1. 開始ノード S、最終ノード G、初期化リストを開いて閉じる、グローバル マップ (グリッド マップ) を初期化する
2. 開始ノードから開始するS、S をチェック対象の正方形として使用し、開いているリストに入れます
3. 開始ノード S の周囲の到達可能な正方形 (最大 8 つ) を見つけ、それらを開いているリストに入れます。親を設定します。 ノードは S
です。 4. 開始ノード S を「開いたリスト」から削除し、S を閉じたリストに入れます。
5. 周囲の各ノードを計算します。正方形 グリッドの F 値 F=G+H
6. 開いたリストから最小の F 値を持つ正方形 a を選択し、開いたリストから閉じたリストに入れます。 9. 終了判定: ターゲットブロック G がオープンリストに現れたら、それをクローズリストに追加し、周囲の到達可能なブロックを探し続ける。はパスが見つかったことを意味し、開いているリストにデータがない場合は、適切なパスが存在しないことを意味します。 8. 開いたリストから最小の F 値を探し続け、開いたリストから削除します。このサイクル に設定します。 3) 隣接する正方形 c がすでに開いているリストにある場合新しいパスは S から正方形 c に到達します (つまり、a を通過するパス)。親ノードと F 値を更新する必要があるかどうかを判断します。新しいノード c の G 値が低い場合は、親の正方形を変更します。 a を 2 乗して F 値を再計算する場合、H 値を変更する必要はありません (グリッドからターゲット点に到達する推定コストが固定されているため) 新しいノード c の G 値が比較的高い場合、それは次のことを意味します。新しいパス コストの方が高く、値は変わりません (G 値は変更されず、更新されません) 2) これらのマスが開いているリストにない、それらを開いているリストに追加し、これらの正方形の F 値を計算し、親ノードを a 1) 障害物とクローズ リスト内のマスは考慮されません
7. a の隣接するすべてのマスをチェックします




2.実験結果

20 ∗ 20 20*20 2020 のラスター マップでは、障害物が自動的に生成されます。ヒューリスティック関数 h には、それぞれマンハッタン距離とユークリッド距離が採用されています。各ノードは 4 方向に展開できます。結果として得られるパス プランを左側に示します。影付きの領域は、リストに追加された (または検索された) 四角形です。

ここに画像の説明を挿入しますグリッド マップを増やし、パス プランニングに A を使用すると、
ここに画像の説明を挿入します結果はどうなりますか> 200 ∗ 200 200*200 200200 のラスター マップでは、障害物がランダムに生成され、障害物範囲はマップの 20% を占めます。ヒューリスティック関数 h はそれぞれマンハッタン距離とユークリッド距離を使用します。結果として得られるパス プランを左側に示します。
A
アルゴリズムのヒューリスティック探索プロセスでは、ヒューリスティック関数の推定値が真の値に近いほど計画効率が高くなります。
グリッド マップでは、各ノードは 8 方向に拡張でき、マンハッタン距離は 2 つのノード間の距離をより正確に反映できます。それに比べて、ユークリッド距離で計算される H 値は比較的小さく、平方根演算が必要となり、時間がかかります。

ここに画像の説明を挿入しますプログラムが必要な方がいらっしゃいましたら、私にPMしてください。


4. A*アルゴリズムの概要

A* アルゴリズムの長所と短所

アドバンテージ:
1. 最適性: 特定の条件下では、A アルゴリズムは最短パスを見つけることを保証します。
2. 速度: 他の検索アルゴリズムと比較して、A
アルゴリズムはヒューリスティック関数によって検索パスの数を減らすことができるため、検索速度が速くなります。これにより、大規模な検索問題を扱う場合、 A アルゴリズムが非常に効率的になります。
3. 幅広い適用性:
アルゴリズムは、コンピューター ゲームやロボット ナビゲーションでの最適なパスの検索など、さまざまなパス検索の問題を解決するために使用できます。最短経路など。

欠点:
1. ヒューリスティック関数の設計は簡単ではありません。 アルゴリズムでは、各ノードからターゲット ノードまでの距離を推定するためにヒューリスティック関数を使用する必要がありますが、ヒューリスティック関数 2. 簡単なこと。ヒューリスティック関数の設計が適切でないと、検索効率に大きな影響が生じます。
大量のストレージ スペースを占有します:
アルゴリズムは、検索プロセス中にノード情報を保存する必要があるため、検索の状態空間が大きい場合、大量の保管スペースを占有する必要がある。
3. 局所最適解に陥る可能性があります: A アルゴリズムは最短パスを見つけることを保証できますが、ヒューリスティック関数が十分ではない場合、A アルゴリズムは局所的な最適解に陥り、全体的な最適解を見つけることができない場合があります。

おすすめ

転載: blog.csdn.net/m0_51951660/article/details/129794499