人工知能を組み込んだパズルゲームを作ってみた
現在私が通っている大学で人工知能についての授業をうけました。 この授業をうけて探索の面白さを知りました(小並感)。 ということで、この楽しさを皆さんに分かち合ってもらいたいとおもい人工知能【探索】を組み込んだ8パズルゲームを作ってみました。
実装した探索
幅優先探索
幅優先探索(はばゆうせんたんさく、英: breadth first search)はグラフ理論(Graph theory)において木構造(tree structure)やグラフ(graph)の探索に用いられるアルゴリズムである。
アルゴリズムの流れ
- 初期状態、目的状態にフラグを設定
- 空欄と隣接するパネルと入れ替える
- その状態を記憶
- 目的状態であるかを見る
- 目的状態ではない場合次の状態を比較する
双方向探索【幅優先探索】
双方向探索(英: bidirectional search)とは、グラフ探索アルゴリズムの一種で、同時に2つの方向から探索を行う
アルゴリズムの流れ
- 初期状態、目的状態から交互に比較する
- 同じ状態に遷移したら計算を終了する。
A*探索
A*(A-star, エースター)探索アルゴリズムは、探索アルゴリズムの一つ。 スタートノードからゴールノードまでの経路を計算する、このとき求める経路が最良(最短)であることを保証しているアルゴリズムである
アルゴリズムの流れ
- ヒューリスティックを目的状態からのタイルの距離とする
- openにルートノードを加える
- openから銭湯のノードNを取り出す
- ヒューリスティックが0の場合終了する
- ノードの全ての子ノードをopenに追加、open内のノードをヒューリスティックの小さい順に並べ替える
深さ優先探索
深さ優先探索(ふかさゆうせんたんさく、英: depth-first search, DFS、バックトラック法ともいう)は、木やグラフを探索するためのアルゴリズムである。
アルゴリズムの流れ
- openにルートノードを加える
- openから1つのノードNを取り出す
- 取り出したノードNが目標状態の場合終了する
- ノードNの全ての子ノードをopenに追加
結果
上記のような感じで探索を8パズルゲームに実装してみました。 またこの探索の早さを比較するため以下の様に定義をしました。
- Time 探索アルゴリズムが始まり終わるまでの時間
- Step 状態が目的状態であるかの比較回数
実際に動かしてみるとこのようになりました。
幅優先探索は圧倒的にStep数が多いですが、双方向から探索することによってStep数を減っています。 またA*探索、深さ優先探索はStep数は多くないですが、TimeがStep数が最も多い幅優先探索より多くなっています。 みなさんもお持ちのAndroidで試してみてはいかがでしょうか?
人工知能は人間を超えるか ディープラーニングの先にあるもの (角川EPUB選書)
- 作者: 松尾豊
- 出版社/メーカー: KADOKAWA/中経出版
- 発売日: 2015/03/11
- メディア: 単行本
- この商品を含むブログ (3件) を見る
- 作者: 中島秀之
- 出版社/メーカー: 公立はこだて未来大学出版会
- 発売日: 2015/05/27
- メディア: ムック
- この商品を含むブログを見る
人工知能の基礎 (Computer Science Library)
- 作者: 小林一郎
- 出版社/メーカー: サイエンス社
- 発売日: 2008/11
- メディア: 単行本
- クリック: 3回
- この商品を含むブログ (2件) を見る