書籍サポート / Support

ゲームAIと深層学習―ニューロ進化と人間性

 「ゲームAIと深層学習―ニューロ進化と人間性」, 伊庭斉志著, (オーム社)
で解説されているソフトウェアのページです。

ソフトウェア等のご利用にあたって

  1. このソフトウェア等は伊庭研究室が作成し、無償で配布しているものです。出版社が提供するサービスではありません。
  2. このソフトウェア等の著作権は、伊庭研究室が保持しています。ダウンロードしたソフトウェア等を再配布することはできません。
  3. このソフトウェア等に起因するいかなる損害に対しても、伊庭研究室は何ら責任を負いません。
  4. 伊庭研究室は予告なくソフトウェア等の内容を更新したり、提供を中止することがあります。

配布ソフトウェア

8パズルの探索プログラム
(2章)
8パズル(深さ優先探索)
8パズル(広さ優先探索)
8パズル(A*探索)

倉庫番
(2.4節)
倉庫番のプログラム

 gcc *.c -lfreeglut -lglu32 -lopengl32 としてコンパイルする。
キー操作は以下の通り(詳しくはプログラム参照):
  • P…プレイする(矢印キーで操作、Aキーで元に戻す、Pキーではじめから)
  • W…広さ優先探索で解を探し、見つかればアニメーションで表示する。
  • D…反復深化深さ優先探索で解を探し、見つかればアニメーションで表示する。
  • H…ヒューリスティックスによる探索で解を探し、見つかればアニメーションで表示する。
  • T…アニメーションの停止/再開。
ナンバーリンク
(2.3節)
ナンバーリンクの探索プログラム
GNU makeがインストールされている環境でmakeとすると実行ファイル(a.exe)が生成される。
箱入り娘パズル
(2.4節)
箱入り娘の探索プログラム
ruby random.rbのようにして実行する。
algorithmというgenパッケージが必要であり、その インストール方法はこれを参照。
ペグソリティア
(2.5節)
縦型探索プログラム
横型探索プログラム
A*探索プログラム
gccでコンパイルできる。
数独(その1)
(2.6節)
数独の探索プログラム
python3 sudoku.py のようにして実行する。
手掛かりのない数独
(2.6節)
手掛かりのない数独+アルファ
以下のようにコンパイルする。
g++ -std=c++11 main.cpp NoClueSudoku2.cpp HakoiriMusume.cpp PuzzleSearch.cpp SlidePuzzle.cpp
実行すると、他にも変形スライドパズルや箱入り娘の 解法も得られる。
数独(その2)
(2.6節)
数独(shidoku)の代数的な探索プログラム
数式処理システム sage notebookから動作する。 実行のイメージは ここにある。
N-queen
(3.2節)
バックトラックのプログラム(N-queen)
gcc common.c minmax.c -lm としてコンパイルする。
線画解釈
(3.3節)
線画解釈のサンプルプログラム

 プログラムはJavascript で実装されており、 適当なWebブラウザでai.html を開くと実行できる。
  • 使用方法と実験例はここにある。
  • ATMSによる解法(4色問題)
    (3.4節)
    4色問題を解くプログラムと地図データ
    g++ -o solver 4color.cppとしてコンパイルする。
    ./solver < data1.txt > ans1.txt として実行する。
    ATMSによる解法(覆面算)
    (3.4節)
    覆面算のプログラム
    以下のようにして実行する。
    • ruby main.rb "SEND+MORE=MONEY"
    • ruby main.rb "*BOC+ABAC=1A7CC"
    詳細は本文の図を参照せよ。
    チェスパズル(その1)
    (3.5節)
    チェスパズルを解くプログラム
    ポーンをできるだけ多く配置する。一直線にならばないようにする。
    gccでコンパイルして実行する。

    チェスパズル(その2)
    (3.5節)
    チェスパズルを解くプログラム
    互いに攻撃しない駒の最大配置を求める。gccでコンパイルする。 引数は次の意味である
    • 1:ナイト
    • 2:ビショップ
    • 3:キング
    クヌースのヒップパズル
    (3.6節)
    ヒップパズルを解くプログラム
    以下でコンパイルして実行する。
    • g++ -o viewer.exe viewer.cpp -std=c++11 -O3
    • g++ -o main.exe main.cpp -std=c++11 -O3
    • main.exe | viewer.exe
    三目並べ(Tit-tac-toe)
    (4.2節)
    alpha-betaカットのプログラム(Tit-tac-toe)
    gcc common.c ab.c -lm としてコンパイルする。
    三目並べ(Tit-tac-toe)
    (4.2節)
    min-maxのプログラム(Tit-tac-toe)
    gcc common.c ab.c -lm としてコンパイルする。

    チェス
    (4章)
    チェスのプログラム

     cygwin用の実行コードがある。Windowsを大きくするとよい。
    gcc chessnew.c -lm -lcurses としてコンパイルする。
    指し手の表現は国際式表記であり、例えば、E2E4となる。 キャッスリングはE1G1、アンパサンはE5F6である。
    キー操作は以下の通り(詳しくはプログラム参照):
    • CTRL+E サイドチェンジ
    • CTRL+H バックスペース
    • CTRL+U レベル変更
    • CTRL+Y 1手前にもどる

    マリオAI


    (4.4節)
    マリオのA*探索プログラム
    以下の手順でインストール、実行する。実行にはjava環境が必要である。
    • Mario AI Competitionからプログラムをダウンロード
    • GithumのページからA*探索を用いたマリオのコードを取得し、marioai/classes/competition/cig/robinbaumgarten/ 下に置く。
    • marioai/classesに移動し、javac competition/cig/robinbaumgarten/AStarAgent.javaでコンパイル。
    • java ch.idsia.scenarios.Play competition.cig.robinbaumgarten.AStarAgent を実行。
    この詳細や、ヒューリスティック部の書き換えは本書の記述を参考にしてほしい。
    パックマン(small world)
    (4.9節)
    パックマンのプログラム

    makeでコンパイルできる。
    main.cの
    • int initFood[] = …
    • bool initWall[] = …
    を変更すると、mapを交換できる。
    パックマン(モンテカルロ木探索)
    (4.9節)
    パックマンのプログラム

    htmlファイルを開き、コンソール(F12キー)から makeRouteMap(map); を入力すると実行できる。
    ダイクストラ法で各地点同士の最短距離を計算するのにしばらく時間がかかる。
    jsonデータをロードしているので ローカルファイルに対してXMLHttpRequestが実行可能なブラウザでのみ 動作する(Firefox, Edgeでの動作確認)。
    mapの変更方法はここに書かれている。
    画面の右では探索方法や各キャラクタのパラメータを変更できる。
    オセロ
    (4.7節)
    オセロのプログラム

    binの下の実行ファイルはそのまま実行可能(Linux, Windows)。
    ビルドには、Visual Studio2017の環境下でOpenGLとGLUTが必要。
    オセロとfool's mate
    (4.7節)
    オセロのプログラム(fool's play)

    $python play.py -g foolsmate でfool's playを実行する。
    詳細は本文の説明を参照。また実行環境については、 これこれ を参照してほしい。オプションの説明は以下の通り。
    • -g AIにプレイさせるゲームを選択。defaultはオセロ。tictactoeも指定可能。
    • -l ログを出力するファイル指定。
    3次元Tit-for-tat(4x4x4)(その1)
    (4.6節)
    3次元Tit-for-tat(4x4x4)のプログラム(その1)

    UTC法との対戦を行う。 コマンドライン引数によってオプションが指定できる。
    ./main [先手:0, 後手:その他(default:0)] [UCTの総playout回数(default:10000)]
    例) ./main 0 10000
    3次元Tit-for-tat(4x4x4)(その2)
    (4.6節)
    3次元Tit-for-tat(4x4x4)のプログラム(その2)

    UTC法 v.s. min-max(α・βカット)の対戦を行う。
    実行には引数にplayout数を入れる。
    評価関数は単純に隅や真ん中が強くなるようにするだけである。
    DQNによるアタリ
    シミュレーション
    (5.2節)
    [cppソースコード(.zip, 1.2M)]
    CUDA required for GPU mode
    進化するマリオ
    (5.3節)
    基本部分は「マリオのA*探索プログラム」に従ってインストールする。
    GAマリオのプログラムはここから 入手できる。
    詳細は本書の記述を参考にしてほしい。

    ご利用の前に