0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

初心者向け:アルゴリズムとヒューリスティック探索の最適化

Posted at

初心者向け:アルゴリズムとヒューリスティック探索の最適化

以下の動画の、内容を要約しました。
https://youtu.be/5NgNicANyqM?si=Qc3Dzaw6gf3x5qmd

この記事では、特にプログラミング初心者に向けて、探索アルゴリズムの進化についてわかりやすく解説します。今回は、「グリーディ最良優先探索」から「A*(エースター)探索」への改良について取り上げます。これらは、問題を効率的に解決するための重要な手法です。


グリーディ最良優先探索とは?

概要

グリーディ最良優先探索(Greedy Best-First Search)は、「ゴールまでの推定距離が最も短いノードを優先的に探索する」 アルゴリズムです。この「推定距離」は「ヒューリスティック関数(heuristic)」を使って計算されます。

特徴

  • 長所: 探索範囲を狭め、効率よくゴールに近づく。
  • 短所: 最適解(最短経路)を保証しない。

問題点の例

グリーディ最良優先探索は、局所的には最良の選択をするものの、全体的に最適でない解を導く場合があります。

例として、以下のような迷路を考えてみましょう:

  • 現在地 A から ゴール B へ進むときに、ヒューリスティックに基づいて「ゴールまでの距離が短い」と見えるルートを選びます。
  • しかし、実際には、遠回りのように見えるルートのほうが少ないステップでゴールに到達できる場合があります。

A*(エースター)探索の登場

グリーディ最良優先探索の課題を解決するために、「A探索」という改良版アルゴリズムが登場します。A探索では、ゴールまでの推定距離(ヒューリスティック)だけでなく、**現在の位置に到達するまでのコスト(実際にかかった距離)**も考慮します。

A*探索の基本原理

  • 評価関数: A*探索では、次の式を使います:
    [
    f(n) = g(n) + h(n)
    ]
    • ( g(n) ): 現在の位置に到達するまでのコスト(過去のコスト)。
    • ( h(n) ): ゴールまでの推定距離(ヒューリスティック値)。

迷路の各ノードに以下のような値が付与されているとします:

  • 現在の位置 ( A ) までのコスト ( g(A) = 5 )。
  • ゴールまでの推定距離 ( h(A) = 10 )。
  • この場合、評価値 ( f(A) = g(A) + h(A) = 15 )。

A*探索の利点

  1. 最適性

    • A*探索は「ヒューリスティック関数」が正しく設計されていれば、最適解(最短経路)を保証します。
    • これを実現するには、ヒューリスティックが以下の条件を満たす必要があります:
      • 許容性(Admissibility): ヒューリスティック値が常に「実際のコスト」を過大評価しない。
      • 一貫性(Consistency): ヒューリスティック値が状態間で矛盾しない。
  2. 効率性

    • 不要な探索を減らし、ゴールに向かう最適なルートに集中します。

プログラムの実装概要

以下は、PythonでのA*探索アルゴリズムの基本的な流れです:

  1. 初期化

    • ( g ): 各ノードのコストを無限大に設定。
    • ( f ): 評価値を計算するための辞書を用意。
    • 開始地点の ( g ) 値を 0 に設定し、( f ) を計算。
  2. 探索ループ

    • 開始地点からスタート。
    • 未探索のノードから評価値 ( f ) が最小のノードを選択。
    • ゴールに到達したら終了。
  3. ノードの更新

    • 隣接ノードを調べ、( g ) 値と ( f ) 値を更新。
    • 必要に応じて優先度付きキューに追加。

A*探索の課題と改良の可能性

  • ヒューリスティックの設計

    • 問題に適したヒューリスティックを作ることが鍵となります。例えば、迷路の場合、「マンハッタン距離」や「ユークリッド距離」がよく使われます。
    • より複雑な問題では、問題の特性を深く理解する必要があります。
  • メモリ使用量

    • A*探索は多数のノードを記録するため、メモリ消費が大きくなることがあります。
    • この課題に対処するため、メモリ効率を改善したバリエーション(例:IDA*探索)が提案されています。

まとめ

A探索は、グリーディ最良優先探索を改良したアルゴリズムであり、ゴールまでの最短経路を見つける能力に優れています。しかし、その性能はヒューリスティック関数の質に大きく依存します。初心者の方も、まずは迷路の問題など簡単なシナリオでA探索を試してみると、その効果を体感できるでしょう。

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?