利用者:Greek Fellows/sandbox

探索 > 最良優先探索 > Greek Fellows/sandbox
A*探索アルゴリズム

A*(A-star, エースター)探索アルゴリズムは、探索アルゴリズムの一つ。 スタートノードからゴールノードまでの経路を計算する、このとき求める経路が最良(最短)であることを保証しているアルゴリズムである。 最良優先探索において、評価関数を許容的な物に制限した物がA*である。

概要[編集]

A* アルゴリズムは、各頂点からゴールまでの距離の推定値を知っていた場合に対して最短経路問題(に帰着できる問題)を効率的に解くアルゴリズムである。 ただし、推定値は実際の距離と同じであるかないしそれより小さくなければならない。 例えば地図上を道路に沿って歩いたときの最短経路を求めたい場合、直線距離として用いる事ができる。

A* アルゴリズムは有名なアルゴリズムダイクストラ法を推定値つきの場合に一般化したもので、 大まかに言えば、ダイクストラ法を推定値が小さい方ものから順に探索するよう改良したものである。 推定値が恒等的に0である場合はもとのダイクストラ法に一致する。

A* アルゴリズムは1968年Peter E. HartNils J. NilssonBertram Raphael の三人が発表した論文[1]の中で最初に記述された。A* というこの一風変わった名前は、この論文でスタートからゴールまでの最短経路を確実に見つけるアルゴリズムを許容的 (: admissible) と呼び、論文の数式中に 許容的なアルゴリズムの集合 と表し、そのの中でも評価回数が最適になる物をと表記していたためである[2]

A* の内容は次の通り、スタートノードから、あるノードを通って、ゴールノードまでたどり着くときの最短経路を考える。このときこの最短経路のコストをとおくと、

と置くことが出来る。ここではスタートノードからまでの最小コスト、からゴールノードまでの最小コストである。もしの値との値を知っていれば、全体の最短経路は容易に求まる。しかしながら実際にはをあらかじめ与えることは出来ないので、そこでを次のような推定値に置き換える。

ここではスタートノードからまでの最小コストの推定値、からゴールノードまでの最小コストの推定値である。この場合に関しては探索の過程で推定値を求めていくことができるが、を推定することはできない。そこでには適当な推定値を与えは探索しながら適宜更新することで経路を求めることを考える。このアルゴリズムを A探索アルゴリズムという。

このときのことをヒューリスティック関数という。このアルゴリズムはが以下の条件

を満たすとき、求まる経路がスタートからゴールまでの最短経路であることが保証されている。これを A* 探索アルゴリズムという。

このアルゴリズムはCPUの使用率、メモリの使用率など、計算負荷は高いが、ヒューリスティック関数のヒント項を用いることにより、問題に対しての最適化が可能である。

もし各ノード間の最小のコストが既知であるとするならば、をその最小コストを返す定数にすれば与えられた経路の状態に関係なく最短経路を求めることが可能になる。あるいは最小コストがわからないとしても上記の条件はとするならば、常に成り立つことになる。この方法はダイクストラ法と呼ばれており、汎用的にはこちらの方法が使われている。

ただし、

というヒューリスティック関数が存在する場合、構文解析に失敗 (構文エラー): {\displaystyle h_1^*(n)を用いるより<math>h_2^*(n)} を用いるほうが計算負荷は少なくてすむ。このため、そのようなヒューリスティックの存在がわかっている場合は A* アルゴリズムの方が有利になる。

アルゴリズムの流れ[編集]

A* のアルゴリズムの実装を以下に示す。

  1. ゴールノードとスタートノードを作成する。また計算中のノードを格納しておくためのリスト(Open リスト)と、計算済みのノードを格納しておくリスト(Close リスト)を用意する。
  2. スタートノードを Open リストに追加する、このときでありとなる。また Close リストは空にする。
  3. Open リストが空なら探索は失敗とする(スタートからゴールにたどり着くような経路が存在しなかったことになる)。
  4. Open リストに格納されているノードの内、最小のを持つノードを取り出す。
  5. であるなら探索を終了する。それ以外の場合はを Close リストに移す。
  6. に隣接している全てのノード(ここでは隣接ノードをとおく)に対して以下の操作を行う
    1. を計算する、ここではノードからへ移動するときのコストである。またで求めることができる。
    2. の状態に応じて以下の操作を行う:
      • が Open リストにも Close リストにも含まれていない場合としを Open リストに追加する。このときの親をとして記録する。
      • が Open リストにある場合、であるならに置き換える。このとき記録してあるの親を に置き換える。
      • が Close リストにある場合、であるならとしてを Open リストに移動する。また記録してあるの親をに置き換える。
  7. 3 以降を繰り返す。
  8. 探索終了後から親を順次たどっていくとからまでの最短経路が得られる。

部分問題に分割する場合[編集]

分割統治法のように、部分問題に分割したうえで全体問題を解いた方が効率的な問題もある。A* 同様の通常の状態遷移はどれかがゴールに到達すれば良いので OR と呼び、部分問題に分割する場合は全ての部分問題が解けないといけないので AND と呼ぶと、探索木が AND/OR 木になる。AND で状態を分割する際、ゴールも分割する必要がある。

同じ状態が2度出現した場合に1つのノードにまとめると AND/OR グラフになる。閉路のない AND/OR グラフに対する A* アルゴリズムに対応する物が1968年に開発され[3]1980年AO* アルゴリズム と命名された[2]。閉路のある AND/OR グラフに対する A* アルゴリズムに対応する A0アルゴリズム1976年に開発された[4]。AND ノードのコストを「辺のコスト+部分問題のコストの最大値」や「辺のコスト+部分問題のコストの総和」などの単調非減少関数で定義すると[5]、ヒューリスティック関数が許容的であれば、A* 同様、最適解が求まる。なお、閉路のない AND/OR グラフは文脈自由文法(タイプ-2 文法)[6]、閉路のある AND/OR グラフは制限のない文法(タイプ-0 文法)に 1 対 1 対応することが証明されている。

関連項目[編集]

参照[編集]

  1. ^ Peter E. Hart; Nils J. Nilsson; Bertram Raphael (July 1968). “A Formal Basis for the Heuristic Determination of Minimal Cost Paths”. IEEE Transactions on Systems Science and Cybernetics 4 (2): 100-107. doi:10.1109/TSSC.1968.300136. ISSN 0536-1567. http://ai.stanford.edu/~nilsson/OnlinePubs-Nils/PublishedPapers/astar.pdf. 
  2. ^ a b Nils J. Nilsson 著、白井良明, 辻井潤一, 佐藤泰介 訳『人工知能の原理』日本コンピュータ協会、1983年1月15日(原著1980年)。ISBN 4-88917-026-X 
  3. ^ Nils J. Nilsson (August 1968). “Searching problem-solving and game-playing trees for minimal cost solutions”. Information Processing 68 : proceedings of IFIP Congress 1968 (Amsterdam : North-Holland) 2: 1556-1562. 
  4. ^ Giorgio Levi; Franco Sirovich (January 1976). “Generalized and/or graphs”. Artificial Intelligence 7 (3): 243-259. doi:10.1016/0004-3702(76)90006-0. http://www.sciencedirect.com/science/article/pii/0004370276900060. 
  5. ^ Vipin Kumar; Dana S. Nau; Laveen N. Kanal (August 1985). A General Paradigm for AND/OR Graph and Game Tree Search. http://www.cs.utexas.edu/ftp/AI-Lab/tech-reports/UT-AI-TR-85-9.pdf. 
  6. ^ Patrick A. V. Hall (July 1973). “Equivalence between AND/OR graphs and context-free grammars”. Communications of the ACM 16 (7): 444-445. doi:10.1145/362280.362302. http://dl.acm.org/citation.cfm?id=362302. 

[[Category:検索アルゴリズム]] [[Category:数学に関する記事]]