人狼知能で学ぶAIプログラミング 欺瞞・推理・会話で不完全情報ゲームを戦う人工知能の作り方
- 著作者名:狩野芳伸、 大槻恭士、 園田亜斗夢、 中田洋平、 箕輪 峻、 鳥海不二夫
- 監修者名:人狼知能プロジェクト
-
- 書籍:4,048円
- 電子版:4,048円
- B5変型判:416ページ
- ISBN:978-4-8399-6058-2
- 発売日:2017年05月31日
- 備考:中級
内容紹介
コミュニケーションゲームにおける人工知能の最先端がここにある!
将棋と囲碁の次に人工知能が取り組むゲームは人狼です。
――松原 仁氏(はこだて未来大学 副理事長・システム情報科学部教授/人工知能学会 前会長)
人を知り、人と遊び、人を出し抜く、人狼知能!
――三宅陽一郎 氏(日本デジタルゲーム学会理事/ゲームAI開発者)
「人狼ゲーム」とは、村に紛れ込んだ人食い人狼を、お互いに自分自身の正体がばれないようにほかのプレイヤーと話し合いながら、村人チームと人狼チームの生き残りを競うゲームです。与えられる情報に限りがあり、さらにプレイヤーごとに情報量に偏りがあるという「不完全情報ゲーム」で、騙す、嘘を見抜く、揺さぶるなど、「心理的な」駆け引きが重要になってきます。将棋や囲碁のように、お互いの情報が開示されている「完全情報ゲーム」における人工知能の研究は進んでおり、次のフロンティアは不完全情報ゲームであると目されています。
本書では、AI同士で人狼ゲームを行う「人狼知能」を通してAIプログラミングを学んでいきます。人狼ゲームを戦うプレイヤープログラム「人狼知能エージェント」の概要、機械学習入門とそれを活用したエージェントの作成方法、さらには自然言語処理の基礎とそれを組み込んだエージェントの作成方法まで、人狼知能エージェントを作成するための知識が網羅されています。
AIプログラミングの解説は数多くありますが、サンプルの実装ではなく、ここまで明確な目的を見据えた実装は多くはありません。本書を参考にして、強い人狼知能の開発や人狼知能大会への参加、さらには、推論や自然言語によるコミュニケーションが可能なAIといった応用へと踏み出してください。また、人狼知能エージェント同士を戦わせる「人狼知能大会(プロトコル部門)」を連覇中の最強エージェントのアルゴリズム解説も掲載されているため、脅威の人狼発見率を誇るプログラムの実際を知り、自分のエージェントに組み込むことも可能です。
付録として、コマンドラインやツールの基本、Javaプログラミングの基礎やツールの活用、デバックの手法などが収められており、プログラミング初心者であっても、人狼知能エージェントの作成が学べる内容になっています。
本書は「人狼知能エージェントの作成」をテーマに、「機械学習や自然言語処理の入門的内容」を学んで「プログラミングする」という構成になっており、学習者に合わせて内容の一部を選ぶことで、大学などでのプログラミング教材となるようにも構成されています。
第1章 人狼知能とは
第2章 人狼知能エージェントの基礎知識
第3章 人狼知能エージェントプログラミング
第4章 機械学習入門
第5章 機械学習を活用した人狼知能エージェント
第6章 自然言語処理入門
第7章 自然言語処理を利用した人狼知能エージェント
付録A コマンドライン利用の基礎
付録B Javaプログラミングの基礎
付録C オブジェクト指向の基礎と効率的なプログラミング
付録 D Java標準ライブラリの利用
続きを読む
充実のラインナップに加え、割引セールも定期的に実施中!
商品を選択する
フォーマット | 価格 | 備考 | |
---|---|---|---|
書籍 | 4,048円 | ||
4,048円 | ※ご購入後、「マイページ」からファイルをダウンロードしてください。 ※ご購入された電子書籍には、購入者情報、および暗号化したコードが埋め込まれております。 ※購入者の個人的な利用目的以外での電子書籍の複製を禁じております。無断で複製・掲載および販売を行った場合、法律により罰せられる可能性もございますので、ご遠慮ください。 |
備考
狩野芳伸/静岡大学 准教授
大槻恭士/山形大学 准教授
鳥海不二夫/東京大学 准教授
ほか
目次
はじめに本書の読み方
第1章 人狼知能とは
1.1 人狼ゲームとは
1.1.1 人狼ゲームの概要
1.1.2 人狼ゲームの基本ルール
1.1.3 役職
1.1.4 人狼ゲームにおける基本戦略とゲームの流れ
1.1.5 人狼ゲームでよく使われる用語
1.2 人狼知能
1.2.1 人狼知能プロジェクトとは
1.2.2 人狼知能の実現に必要な技術
1.2.3 人狼知能大会
1.2.4 自然言語部門と人狼知能大会のこれから
1.2.5 おわりに
第2章 人狼知能エージェントの基礎知識
2.1 人狼知能エージェント
2.2 人狼知能プラットフォーム
2.2.1 人狼知能プラットフォームのダウンロード
2.3 サンプルエージェントをプレイさせてみよう
2.3.1 StartServerとStartClientを利用したゲームの実行
2.3.2 AutoStarterを利用したゲームの実行
2.3.3 ゲーム構成の変更
2.3.4 ログビューワ
2.3.5 コンソールログとゲームログファイル
2.4 ゲームログを読んでゲームの進行を理解する
2.4.1 0日目
2.4.2 1日目
2.4.3 2日目以降
2.5 人狼知能プロトコル
2.5.1 単語
2.5.2 文
2.5.3 演算子
2.5.4 発話例
2.6 人狼知能APIリファレンスマニュアル
2.6.1 org.aiwolf.common.data.Species列挙型
2.6.2 org.aiwolf.common.data.Team列挙型
2.6.3 org.aiwolf.common.data.Role列挙型
2.6.4 org.aiwolf.common.data.Status列挙型
2.6.5 org.aiwolf.client.lib.TalkType列挙型
2.6.6 org.aiwolf.client.lib.Topic列挙型
2.6.7 org.aiwolf.client.lib.Operator列挙型
2.6.8 org.aiwolf.common.data.Agentクラス
2.6.9 org.aiwolf.common.data.Talkクラス
2.6.10 org.aiwolf.common.data.Voteクラス
2.6.11 org.aiwolf.common.data.Judgeクラス
2.6.12 org.aiwolf.common.net.GameInfoクラス
2.6.13 org.aiwolf.common.net.GameSettingクラス
2.6.14 org.aiwolf.common.data.Playerインターフェース
2.6.15 org.aiwolf.client.lib.Contentクラス
2.6.16 org.aiwolf.client.lib.ContentBuilderのサブクラス群
第3章 人狼知能エージェントプログラミング
3.1 人狼知能エージェントの作成
3.1.1 エージェント作成をサポートするクラス
3.1.2 自分のRoleAssignPlayerを作る
3.1.3 すべての役職のベースとなるクラス
3.1.4 村人エージェント
3.1.5 狩人エージェント
3.1.6 霊媒師エージェント
3.1.7 占い師エージェント
3.1.8 裏切り者エージェント
3.1.9 人狼エージェント
3.1.10 自分のエージェントをゲームに参加させよう
3.1.11 エージェントを強くするためには
3.2 最強人狼知能「チーム饂飩」のエージェントのアルゴリズム
3.2.1 チーム饂飩のエージェントの概要
3.2.2 「内訳」の表現方法
3.2.3 情報整理の仕方
3.2.4 推理の仕方
3.2.5 進行の基本的な方針
3.2.6 行動の実装
3.2.7 発話の実装
3.2.8 役職騙りの仕方
第4章 機械学習入門
4.1 機械学習とは
4.2 教師付き機械学習と教師なし機械学習
4.3 分類の基本
4.3.1 山登り法による最適化
4.3.2 収束と過学習
4.3.3 問題設計の重要性
4.4 libSVM を試してみよう
4.4.1 libSVM の利用
4.4.2 libSVM のフォーマット
4.4.3 libSVM の移植版
4.5 評価とデータセット
4.5.1 いろいろな評価尺度
4.5.2 訓練と評価のデータセット
4.6 サポートベクトルマシンとは
4.6.1 サポートベクトルとマージン
4.6.2 損失関数と正則化
4.6.3 カーネルトリック
4.6.4 サポートベクトル回帰(SVR)
4.7 SVM のハイパーパラメータとlibSVMのパラメータチューニング
4.7.1 SVM の種類
4.7.2 カーネル
4.7.3 カーネルのパラメータ
4.7.4 SVR のハイパーパラメータ
4.7.5 キャッシュサイズ
4.7.6 収束条件
4.7.7 確率値の推定
4.7.8 クラスごとのC値
4.7.9 libSVMの付属ツール
4.8 そのほかの機械学習手法
4.8.1 系列学習
4.8.2 さまざまな機械学習手法
4.9 さらなる学習のために
第5章 機械学習を活用した人狼知能エージェント
5.1 SVMを使った人狼知能エージェント
5.2 SVMを使った人狼知能エージェント作成の準備
5.2.1 プロジェクトの作成
5.3 SVM を使った人狼知能エージェントの作成
5.3.1 どうやって人狼を見つける?
5.3.2 ゲームログからの教師データの抽出
5.3.4 教師データの取得
5.3.5 教師データの作成
5.3.6 ログデータの読み込み
5.4 libSVMにより人狼判定を行うエージェントの作成
5.5 さらに強いエージェントを目指して
5.6 エラーへの対応
5.6.1 キャッシュサイズ
5.6.2 判別エラー
5.6.3 logdata成形時
第6章 自然言語処理入門
6.1 自然言語処理とツール
6.2 コーパスとアノテーション
6.2.1 コーパスのフォーマット
6.2.2 主なコーパスと言語資源
6.2.3 アノテーション基準と機械学習
6.3 さまざまなレイヤの自然言語処理
6.3.1 文境界解析
6.3.2 形態素解析
6.3.3 固有表現抽出
6.3.4 品詞解析
6.3.5 係り受け解析
6.3.6 句構造解析と木構造、文脈自由文法
6.3.7 述語項構造と格解析
6.3.8 照応解析と共参照解析
6.3.9 検索エンジン
6.3.10 言語モデル
6.3.11 対話システム
6.4 さらなる学習のために
第7章 自然言語処理を利用した人狼知能エージェント
7.1 自然言語の利用
7.1.1 プロトコルエージェントと自然言語エージェント
7.1.2 事前準備
7.2 自然言語エージェントの作成
7.2.1 概要
7.2.2 プロトコル一覧の作成と読み込み
7.2.3 自然言語からプロトコルへの変換
7.2.4 自然言語への変換
7.3 より自然なエージェントにするために
付録A コマンドライン利用の基礎
A.1 コマンドラインとは
A.2 Cygwinのインストール
A.2.1 Cygwinとは
A.2.2 インストール
A.2.3 コマンドの追加
A.3 コマンドラインの基本
A.3.1 コマンドライン
A.3.2 履歴と補完
A.3.3 ファイルシステム
A.3.4 絶対パス
A.3.5 相対パス
A.3.6 別名
A.3.7 ディレクトリ移動
A.3.8 コマンド引数を自分に合わせて指定する
A.3.9 ファイル操作の主なコマンド
A.4 オープンソースツールのコンパイルとインストール
A.4.1 ダウンロード
A.4.2 アーカイブ、圧縮、展開
A.4.3 展開
A.4.4 configure(自動設定)
A.4.5 make
A.4.6 make install(インストール)
A.4.7 実行テスト
A.5 プロセスとシェル
A.5.1 プロセスの強制停止(Ctrl+C)、フォアグラウンドとバックグラウンド
A.5.2 プロセスの一覧と停止
A.5.3 kill コマンド
A.5.4 top コマンド
A.5.5 標準入出力
A.5.6 シェル
A.5.7 ログインとログアウト
A.5.8 リダイレクト
A.5.9 パイプ
A.5.10 ワイルドカード
A.5.11 引用符
A.6 環境変数とパス
A.6.1 カレントディレクトリの扱い
A.6.2 環境変数
A.6.3 よくあるディレクトリ名
A.6.4 シェルスクリプト
A.7 ファイル
A.7.1 パーミッション
A.7.2 パーミッションを変更する
A.7.3 特権ユーザー
A.7.4 よく使うコマンド集
付録B Javaプログラミングの基礎
B.1 Eclipseの使い方
B.1.1 Eclipseのインストール
B.1.2 プロジェクトの作成
B.1.3 プロジェクトの実体
B.1.4 プロジェクトの設定
B.1.5 クラスの作成
B.1.6 ビューとパースペクティブ
B.1.7 プログラムの実行
B.1.8 検索
B.1.9 いろいろな設定
B.2 クラスの利用とクラスパス
B.2.1 クラス
B.2.2 パッケージとimport文
B.2.3 クラスパスとクラスローダ
B.2.4 クラスロードが起きるとき
B.2.5 mainメソッドと中カッコ{}
B.3 変数
B.3.1 変数
B.3.2 演算子
B.3.3 式の評価とプログラムの実行
B.3.4 コンストラクタとnew
B.3.5 Stringクラス
B.3.6 メソッドの返り値
B.3.7 ラッパー型
B.3.8 命名規則とコーディング規則
B.3.9 コメント
B.4 制御構文と配列
B.4.1 制御構文
B.4.2 配列
B.5 メソッドとライブラリ
B.5.1 メソッド
B.5.2 メソッドの利点
B.5.3 メソッドの宣言
B.5.4 ライブラリ
付録C オブジェクト指向の基礎と効率的なプログラミング
C.1 オブジェクト指向とクラスの作成
C.1.1 オブジェクト指向の概念
C.1.2 クラスの構成とコンストラクタ、new
C.1.3 メンバの参照
C.1.4 シグネチャ、オーバーロード
C.1.5 this参照
C.1.6 継承、オーバーライド・隠蔽、super参照
C.1.7 final修飾子
C.1.8 変数のスコープ(有効範囲)とstatic
C.1.9 アクセス修飾子
C.1.10 カプセル化
C.1.11 abstract(抽象クラス)、インターフェース
C.1.12 キャストと多態性(ポリモーフィズム)
C.1.13 何をクラスにしたらよいのか
C.2 例外処理(try, catch)
C.2.1 try-catch節
C.2.2 Exception の階層関係
C.2.3 finally文
C.2.4 throw文とthrows節
C.2.5 メソッドから処理の失敗を伝える
C.2.6 Error とRuntimeException
C.2.7 よく遭遇する例外
C.3 Java 仮想マシン(JVM)の基本
C.3.1 JVMとは
C.3.2 VM引数
C.3.3 Javaのバージョンと互換性
C.4 効率的なプログラミングの考え方
C.4.1 Java のデバッグ
C.4.2 効率的なデバッグ作業
C.4.3 並列処理による高速化(スレッドプログラミングの基礎)
C.4.4 Javaオープンソースライブラリの利用
C.5 追加されたJava言語仕様
付録 D Java標準ライブラリの利用
D.1 Collections フレームワーク
D.1.1 コレクション
D.2 入出力関連のAPI
D.2.1 File クラス
D.2.2 BufferedReaderクラス
D.2.3 BufferedWriterクラス
D.2.4 エスケープシーケンス
D.2.5 文字コード
D.2.6 標準出力と標準エラー出力
D.2.7 外部プロセスの利用
D.3 文字列処理と正規表現
D.3.1 split()メソッド
D.3.2 replace()メソッド、replaceAll()メソッド
D.3.3 matches()メソッド
D.3.4 その他のメソッド
D.4 正規表現
D.4.1 正規表現とは
D.4.2 正規表現API
D.4.3 正規表現の記法
D.5 XMLとXMLパーサー、リスナー
D.5.1 XMLとは
D.5.2 SAXパーサー
D.6 その他のAPI
D.6.1 リフレクション
D.6.2 Webとネットワーク
著者プロフィール
おわりに