--15puzzle問題の探索方法--

-15puzzleの探索-

ここでは、15パズル問題の最短手を求める探索方法 について説明する。 最短手数については こちら。 8パズルでは、最も難しい状態であっても31回の移動ですむことから、 幅優先探索などを用いて解くことが可能かもしれない。 ただし、15パズルのように盤面がより多くなってくる場合は、 最長手がより長くなり(15パズルの場合は80)探索する状態が 指数関数的に増加する。

15puzzle_image

そのため一般的には、15パズル、その他のスライディングパズルを解く 際に用いられる探索方法はA*探索、またはそれを改良したアルゴリズムであることが多い。 以下に、これらのアルゴリズムについて紹介する。

-幅優先探索-

幅優先探索(BFS)は、特定のツリーデータ構造を検索するための アルゴリズムです。ルートから開始し、現在の深さのすべてのノードを 調べてから、次の深さレベルのノードに移動する。
この探索方法は深さを基準として探索をするため、 15パズル問題など、状態数が多い問題において非常に 大きな時間が掛かってしまう可能性があり、現実的な時間で 解けることはあまり期待できない。よって、以下に示すような探索方法を用いる事が多い。

-A*探索-

A*探索アルゴリズムは最短経路を見つけるアルゴリズムであり、 ヒューリスティック関数を用いて探索を行う。
ヒューリスティック関数とは,最も近いゴールノードまでのコストの推定値 を求める関数であり、このヒューリスティック関数によって探索の効率が大きく変わる。

-ヒューリスティック関数-

ヒューリスティック関数は以下のようなものがある。

・違うタイルの枚数
最も簡単に考えられるヒューリスティックとして、違うタイルの枚数が挙げられる。 しかし、これは違うタイルの枚数の情報のみであることから 効果はあまりでないことが考えられる。

・マンハッタン距離
マンハッタン距離は、現在位置と目標位置の差をそれぞれのタイルで計算し、 それを合計した値を用いる。これは、各タイルが目的の状態までに動かなければ ならない動きの最小の値であることが分かる。

・パターンデータベース
PDBテーブルを作成し、それを元に探索を行う方法。データベースには、それぞれの状態について ヒューリスティックコストが登録されていて、それを用いることで高速に探索することが可能。 80手の対極への最適解はそれぞれ数秒で可能だが、メモリを大量に消費するといった点もある。


戻る