Submit Search
Upload
Up ai wolfプレゼン資料
•
Download as PPTX, PDF
•
0 likes
•
63 views
T
Takanori Fukui
Follow
How to make AIWolf Agent
Read less
Read more
Presentations & Public Speaking
Report
Share
Report
Share
1 of 75
Download now
Recommended
はじめての JFrog Platform
はじめての JFrog Platform
Tsuyoshi Miyake
Hello. Continuous Integration
Hello. Continuous Integration
Yuki Matsumura
UnitTest
UnitTest
Yuki Matsumura
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
Isao Ebisujima
CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成
CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成
Rakuten Group, Inc.
Scalaコーディングの準備
Scalaコーディングの準備
Yusuke Arakaki
Android Studioの魅力
Android Studioの魅力
Keiji Ariyama
Jjug ccc 2016_fall_blue_green_deployment
Jjug ccc 2016_fall_blue_green_deployment
Hiroyuki Onaka
Recommended
はじめての JFrog Platform
はじめての JFrog Platform
Tsuyoshi Miyake
Hello. Continuous Integration
Hello. Continuous Integration
Yuki Matsumura
UnitTest
UnitTest
Yuki Matsumura
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
LaravelとNuxt.jsを業務で取り入れる際に得た知見 Laravel/Vue.js勉強会#4 2018/04/25
Isao Ebisujima
CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成
CIサーバを制圧せよ! - プロジェクトメトリクスと自動化技術の活用よる混乱の収拾と「最強」の組織の育成
Rakuten Group, Inc.
Scalaコーディングの準備
Scalaコーディングの準備
Yusuke Arakaki
Android Studioの魅力
Android Studioの魅力
Keiji Ariyama
Jjug ccc 2016_fall_blue_green_deployment
Jjug ccc 2016_fall_blue_green_deployment
Hiroyuki Onaka
デブサミ2015「実践!クロスプラットフォーム モバイルアプリ開発」
デブサミ2015「実践!クロスプラットフォーム モバイルアプリ開発」
アシアル株式会社
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
Yosuke HASEGAWA
OSC福岡 20111203
OSC福岡 20111203
Hiroshi Bunya
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
Hideaki Miyake
さわってみよう Firefox OS in 大阪
さわってみよう Firefox OS in 大阪
Honma Masashi
Idea+groovy on ubuntu
Idea+groovy on ubuntu
kyon mm
Setup jsWaffle
Setup jsWaffle
kujirahand kujira
Androidアプリ解析の基礎 公開用
Androidアプリ解析の基礎 公開用
Lumin Hacker
Wagby on Cloud Foundry
Wagby on Cloud Foundry
Tomohiro Ichimura
kintone プラグインハンズオン資料
kintone プラグインハンズオン資料
安隆 沖
Firefox os hackathon
Firefox os hackathon
dynamis
Secret of Firefox
Secret of Firefox
dynamis
Heroku Inside
Heroku Inside
Ayumu Aizawa
DLL読み込みの問題を読み解く
DLL読み込みの問題を読み解く
JPCERT Coordination Center
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
20170809 AWS code series
20170809 AWS code series
Atsushi Fukui
thymeleafさいしょの一歩
thymeleafさいしょの一歩
Yuichi Hasegawa
Nseg20120929
Nseg20120929
hiro345
Oracle PGXの可視化ツールを作ってみた
Oracle PGXの可視化ツールを作ってみた
nozomu-onuma
2018人工知能学会合同研究会発表資料
2018人工知能学会合同研究会発表資料
Takanori Fukui
著者:結城 浩-『プログラマの数学』の第8章をスライド資料にしたもの
著者:結城 浩-『プログラマの数学』の第8章をスライド資料にしたもの
Takanori Fukui
More Related Content
Similar to Up ai wolfプレゼン資料
デブサミ2015「実践!クロスプラットフォーム モバイルアプリ開発」
デブサミ2015「実践!クロスプラットフォーム モバイルアプリ開発」
アシアル株式会社
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
Yosuke HASEGAWA
OSC福岡 20111203
OSC福岡 20111203
Hiroshi Bunya
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
Hideaki Miyake
さわってみよう Firefox OS in 大阪
さわってみよう Firefox OS in 大阪
Honma Masashi
Idea+groovy on ubuntu
Idea+groovy on ubuntu
kyon mm
Setup jsWaffle
Setup jsWaffle
kujirahand kujira
Androidアプリ解析の基礎 公開用
Androidアプリ解析の基礎 公開用
Lumin Hacker
Wagby on Cloud Foundry
Wagby on Cloud Foundry
Tomohiro Ichimura
kintone プラグインハンズオン資料
kintone プラグインハンズオン資料
安隆 沖
Firefox os hackathon
Firefox os hackathon
dynamis
Secret of Firefox
Secret of Firefox
dynamis
Heroku Inside
Heroku Inside
Ayumu Aizawa
DLL読み込みの問題を読み解く
DLL読み込みの問題を読み解く
JPCERT Coordination Center
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Toru Yamaguchi
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
Shogo Kawahara
20170809 AWS code series
20170809 AWS code series
Atsushi Fukui
thymeleafさいしょの一歩
thymeleafさいしょの一歩
Yuichi Hasegawa
Nseg20120929
Nseg20120929
hiro345
Oracle PGXの可視化ツールを作ってみた
Oracle PGXの可視化ツールを作ってみた
nozomu-onuma
Similar to Up ai wolfプレゼン資料
(20)
デブサミ2015「実践!クロスプラットフォーム モバイルアプリ開発」
デブサミ2015「実践!クロスプラットフォーム モバイルアプリ開発」
[デブサミ2012]趣味と実益の脆弱性発見
[デブサミ2012]趣味と実益の脆弱性発見
OSC福岡 20111203
OSC福岡 20111203
Scala 初めての人が Heroku で Web アプリを公開するまで
Scala 初めての人が Heroku で Web アプリを公開するまで
さわってみよう Firefox OS in 大阪
さわってみよう Firefox OS in 大阪
Idea+groovy on ubuntu
Idea+groovy on ubuntu
Setup jsWaffle
Setup jsWaffle
Androidアプリ解析の基礎 公開用
Androidアプリ解析の基礎 公開用
Wagby on Cloud Foundry
Wagby on Cloud Foundry
kintone プラグインハンズオン資料
kintone プラグインハンズオン資料
Firefox os hackathon
Firefox os hackathon
Secret of Firefox
Secret of Firefox
Heroku Inside
Heroku Inside
DLL読み込みの問題を読み解く
DLL読み込みの問題を読み解く
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
Composer による依存管理 と Packagist によるライブラリの公開
Composer による依存管理 と Packagist によるライブラリの公開
20170809 AWS code series
20170809 AWS code series
thymeleafさいしょの一歩
thymeleafさいしょの一歩
Nseg20120929
Nseg20120929
Oracle PGXの可視化ツールを作ってみた
Oracle PGXの可視化ツールを作ってみた
More from Takanori Fukui
2018人工知能学会合同研究会発表資料
2018人工知能学会合同研究会発表資料
Takanori Fukui
著者:結城 浩-『プログラマの数学』の第8章をスライド資料にしたもの
著者:結城 浩-『プログラマの数学』の第8章をスライド資料にしたもの
Takanori Fukui
論文の書き方(研究室用)
論文の書き方(研究室用)
Takanori Fukui
著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの
著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの
Takanori Fukui
人狼BBSにおける発話の自動分類
人狼BBSにおける発話の自動分類
Takanori Fukui
Gat2017-AITWolfアルゴリズム紹介
Gat2017-AITWolfアルゴリズム紹介
Takanori Fukui
Automatic classification of remarks in Werewolf BBS
Automatic classification of remarks in Werewolf BBS
Takanori Fukui
More from Takanori Fukui
(7)
2018人工知能学会合同研究会発表資料
2018人工知能学会合同研究会発表資料
著者:結城 浩-『プログラマの数学』の第8章をスライド資料にしたもの
著者:結城 浩-『プログラマの数学』の第8章をスライド資料にしたもの
論文の書き方(研究室用)
論文の書き方(研究室用)
著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの
著者:結城 浩-『プログラマの数学』の第1章をスライド資料にしたもの
人狼BBSにおける発話の自動分類
人狼BBSにおける発話の自動分類
Gat2017-AITWolfアルゴリズム紹介
Gat2017-AITWolfアルゴリズム紹介
Automatic classification of remarks in Werewolf BBS
Automatic classification of remarks in Werewolf BBS
Up ai wolfプレゼン資料
1.
人狼知能エージェント作成 2017年5月
2.
①セットアップ 開発環境を整える
3.
プラットフォームの ダウンロード 1. 人狼知能プロジェクトの HPへアクセスする 2. 開発関連をクリック 3.
人狼知能プラットフォー ムをクリック 4. aiwolf-ver0.4.6と (JavaDocのDL)をク リックし,ダウンロード 5. aiwolf-ver0.4.6を解凍 http://aiwolf.org
4.
プラットフォームの ダウンロード 1. 人狼知能プロジェクトの HPへアクセスする 2. 開発関連をクリック 3.
人狼知能プラットフォー ムをクリック 4. aiwolf-ver0.4.6と (JavaDocのDL)をク リックし,ダウンロード 5. aiwolf-ver0.4.6を解凍 http://aiwolf.org
5.
プラットフォームの ダウンロード 1. 人狼知能プロジェクトの HPへアクセスする 2. 開発関連をクリック 3.
人狼知能プラットフォー ムをクリック 4. aiwolf-ver0.4.6と (JavaDocのDL)をク リックし,ダウンロード 5. aiwolf-ver0.4.6を解凍 http://aiwolf.org
6.
プラットフォームの ダウンロード 1. 人狼知能プロジェクトの HPへアクセスする 2. 開発関連をクリック 3.
人狼知能プラットフォー ムをクリック 4. aiwolf-ver0.4.6と (JavaDocのDL)をク リックし,ダウンロード 5. aiwolf-ver0.4.6を解凍 http://aiwolf.org 解凍したフォルダーの内容については 補助資料 1.2を参照
7.
プロジェクトの 作成 1.Eclipseを起動 2.左上のマークをクリック 3.適当なプロジェクト名を 入れる (ここではDemoAgent) 4.完了ボタンを押す
8.
プロジェクトの 作成 1.Eclipseを起動 2.左上のマークをクリック 3.適当なプロジェクト名を 入れる (ここではDemoAgent) 4.完了ボタンを押す
9.
プロジェクトの 作成 1.Eclipseを起動 2.左上のマークをクリック 3.適当なプロジェクト名を 入れる (ここではDemoAgent) 4.完了ボタンを押す
10.
フォルダー作成 1. プロジェクトを右クリッ ク 2. 新規>フォルダー 3.
フォルダー名に「lib」 を入力し完了
11.
フォルダー作成 1. プロジェクトを右クリッ ク 2. 新規>フォルダー 3.
フォルダー名に「lib」 を入力し完了
12.
プラットフォーム (ライブラリ)の導入 1. 作成したフォルダに次の ファイルをドラック&ド ロップ • aiwolf-client.jar •
aiwolf-common.jar 2. 「ファイルをコピー」を 選択しOKを押す 3. 同様にダウンロードした 「JavaDoc」をzipのま ま「lib」へドラック&ド ロップ
13.
プラットフォーム (ライブラリ)の導入 1. 作成したフォルダに次の ファイルをドラック&ド ロップ • aiwolf-client.jar •
aiwolf-common.jar 2. 「ファイルをコピー」を 選択しOKを押す 3. 同様にダウンロードした 「JavaDoc」をzipのま ま「lib」へドラック&ド ロップ
14.
ビルド・パスの 構成 1. プロジェクトを右クリッ ク 2. ビルド・パス>ビルド・ パスの構成 3.
JARの追加をクリック 4. .jarの2つのファイルをク リックしOKを押す
15.
ビルド・パスの 構成 1. プロジェクトを右クリッ ク 2. ビルド・パス>ビルド・ パスの構成 3.
JARの追加をクリック 4. .jarの2つのファイルをク リックしOKを押す
16.
ビルド・パスの 構成 1. プロジェクトを右クリッ ク 2. ビルド・パス>ビルド・ パスの構成 3.
JARの追加をクリック 4. .jarの2つのファイルをク リックしOKを押す
17.
JavaDocの適用(1/4) 1. aiwolf-client.jarの 左の三角をクリック 2. 「Javadoc
ロケー ション」を選択 3. 「編集」を押す アーカイブ・パス :DemoAgent/lib/docs.zip アーカイブ内のパス:docs
18.
JavaDocの適用(2/4) 1. 「アーカイブ内の Javadoc」を選択 2. 「ワークスペース・ ファイル」を選択 3.
「アーカイブパス」 と「アーカイブ内の パス」を入力 4. 検証を押し,ロケー ションがあっている か確認する アーカイブ・パス :DemoAgent/lib/docs.zip アーカイブ内のパス:docs
19.
JavaDocの適用(2/4) 1. 「アーカイブ内の Javadoc」を選択 2. 「ワークスペース・ ファイル」を選択 3.
「アーカイブパス」 と「アーカイブ内の パス」を入力 4. 検証を押し,ロケー ションがあっている か確認する アーカイブ・パス :DemoAgent/lib/docs.zip アーカイブ内のパス:docs
20.
JavaDocの適用(3/4) 1. aiwolf-common.jar の左の三角をクリッ ク 2. 「Javadoc
ロケー ション」を選択 3. 「編集」を押す アーカイブ・パス :DemoAgent/lib/docs.zip アーカイブ内のパス:docs
21.
JavaDocの適用(4/4) 1. 「アーカイブ内の Javadoc」を選択 2. 「ワークスペース・ ファイル」を選択 3.
「アーカイブパス」 と「アーカイブ内の パス」を入力 4. 検証を押し,ロケー ションがあっている か確認する アーカイブ・パス :DemoAgent/lib/docs.zip アーカイブ内のパス:docs
22.
JavaDocの適用(4/4) 1. 「アーカイブ内の Javadoc」を選択 2. 「ワークスペース・ ファイル」を選択 3.
「アーカイブパス」 と「アーカイブ内の パス」を入力 4. 検証を押し,ロケー ションがあっている か確認する アーカイブ・パス :DemoAgent/lib/docs.zip アーカイブ内のパス:docs
23.
③エージェント作成 実行可能なエージェントの作成
24.
新規クラス作成(1/3) 1. プロジェクトを右クリッ ク 2. 新規>クラス
25.
新規クラス作成(2/3) 1. パッケージ名を入力 2. クラス名を入れる(ここ では DemoRoleAssignPlayer ) 3.
スーパークラスの横の参 照をクリック パッケージ名は自分のアドレスを逆から入力 demo@aiwolf.org → org.aiwolf.demo
26.
新規クラス作成(3/3) 1. 上の欄に「ARAP」とう ちこむ 2. 「AbstractRoleAssignPl ayer」を選択 3.
OKを押す
27.
対戦 自分のパソコンでサンプルエージェントと対戦
28.
クライアント・サーバ方式 1つのサーバに複数のクライアントを接続し,ゲームを実行 サンプル エージェントあなた
29.
JARファイル作成 1. プロジェクトを右クリッ ク>エクスポート 2. JAVA>JARファイル 3.
エクスポート先は AIWolf-ver0.4.6フォル ダー 4. JARのファイル名を demoAgent.jarとする
30.
JARファイル作成 1. プロジェクトを右クリッ ク>エクスポート 2. JAVA>JARファイル 3.
エクスポート先は AIWolf-ver0.4.6フォル ダー 4. JARのファイル名を demoAgent.jarとする
31.
JARファイル作成 1. プロジェクトを右クリッ ク>エクスポート 2. JAVA>JARファイル 3.
エクスポート先は AIWolf-ver0.4.6フォル ダー 4. JARのファイル名を demoAgent.jarとする
32.
設定ファイルの 書き換え 1. AIWolf-ver0.4.6内の 「AutoStater.ini」を編 集 2. 最後の行にある Sample5,org.ai…の文の 先頭に#を入れる(コメ ントアウト) 3.
最後の行に次の文を追加 [任意の名前(例ではDemoAgent)],[パッケージ名].[作成したクラス名] 補助資料 2.1章
33.
設定ファイルの 書き換え 1. AIWolf-ver0.4.6内の 「AutoStater.ini」を編 集 2. 最後の行にある Sample5,org.ai…の文の 先頭に#を入れる(コメ ントアウト) 3.
最後の行に次の文を追加 [任意の名前(例ではDemoAgent)],[パッケージ名].[作成したクラス名] DemoAgent, org.aiwolf.demo.DemoRoleAssignPlayer 補助資料 2.1章
34.
ゲームを実行 (Mac) 1. ターミナルを開き AutoStarter.shを実 行する ゲームを実行 (Windows) 1. コマンドプロンプト を開き AutoStarter.batを実 行する
35.
GUIの操作説明 • Nextで次へ進む • Autoで自動的に1日進む •
SKIP ALLで1日スキップ
36.
占い師の実装 人狼知能のプログラミング
37.
プレイヤーの実装 • 各役職ごとにプレイヤーの振る舞いをプログラミ ングする必要がある • 5人対戦では5つの役職を設定する •
15人対戦では6つの役職を設定する • 設定していない役職はサンプルエージェントが代 わりにプレイする • 全ての役職を実装する必要はない
38.
占い師クラスの 作成 1. 新規クラスを作成 2. クラス名: 「DemoSeer」と設定 3.
スーパークラスの横の参 照をクリック 4. AbstractSeerを選択し OKを押す 5. クラスを作成する
39.
占い師クラスの 作成 1. 新規クラスを作成 2. クラス名: 「DemoSeer」と設定 3.
スーパークラスの横の参 照をクリック 4. AbstractSeerを選択し OKを押す 5. クラスを作成する
40.
占い師クラスの 作成 1. 新規クラスを作成 2. クラス名: 「DemoSeer」と設定 3.
スーパークラスの横の参 照をクリック 4. AbstractSeerを選択し OKを押す 5. クラスを作成する
41.
プログラミング手順 ①大まかな処 理の流れ ②作業 ③プログラム の詳細説明 ①処理の流れ ②作業 ③プログラム の説明
42.
DemoRoleAssignPlayerの役割 DemoRole AssignPlayer 占い師 クラス 霊能者 クラス 人狼 クラス 村人 クラス 役職ごとにプログラムを作成 ①処理の流れ ②作業 ③プログラム の説明
43.
DemoSeerのプログラミング前に • フィールドとユーティリティメソッドを定義 • フィールド •
クラス全体で共有する変数 • ユーティリティメソッド • クラス全体で共有するメソッド ①処理の流れ ②作業 ③プログラム の説明
44.
RoleAssignPlayerの定義と DemoSeerのフィールド,メソッドの追加 • 役職として占い師を振り分けられた時に 「DemoSeer」を呼び出す • 他の役職が振り分けられた時はサンプルプレイヤーが呼び出される 補助資料
3.1~3.2 ①処理の流れ ②作業 ③プログラム の説明
45.
DemoRoleAssignPlayerの定義 ①処理の流れ ②作業 ③プログラム の説明 • setBodyguardPlayer(Player) • 狩人を設定 •
setWerewolfPlayer(Player) • 人狼を設定
46.
フィールドの定義 ①処理の流れ ②作業 ③プログラム の説明
47.
ユーティリティメソッドの定義 ①処理の流れ ②作業 ③プログラム の説明
48.
DemoSeerに自動生成されたメソッド紹介 dayStart() divine() finish() getName() initialize(GameInfo,GemeSetting) talk() update(GameInfo) vote() • サーバが必要に応じてこれらのメソッドを呼び出す • これらのメソッドを定義しておく必要がある •
呼び出されるタイミングは補助資料 3.3を参照 ①処理の流れ ②作業 ③プログラム の説明
49.
4つのメソッドの実装 • getName() • エージェント名を返す •
update(GameInfo) • initialize()以外のメソッドの直前に呼ばれる • サーバから送られるゲーム情報を取得する • initialize(GameInfo, GameSetting) • 初期化処理をおこなう • dayStart() • 1日の始まりに呼ばれるメソッド ①処理の流れ ②作業 ③プログラム の説明
50.
4つのメソッドの実装 • getName()では「自分自身のエージェント名」を返す • initialize()では前のゲーム情報が残ったままにならない ように初期化をする 補助資料
3.4 ①処理の流れ ②作業 ③プログラム の説明
51.
getName(), update()の実装 ①処理の流れ ②作業 ③プログラム の説明
52.
initialize()の実装 ①処理の流れ ②作業 ③プログラム の説明
53.
dayStart()の実装 ①処理の流れ ②作業 ③プログラム の説明 • Judgeクラス • 占った人 •
占い結果 • HUMAN • WEREWOLF
54.
vote()の実装 • 投票処理をするメソッド • 1日の終わりに呼び出される •
ブラックリスト⇨灰色リスト⇨ホワイトリストの 順に投票させる ①処理の流れ ②作業 ③プログラム の説明
55.
vote()の実装 • 人狼だと思う人(黒リスト)から投票 • 人狼かもしれないと思う人(灰色リスト)から投票 補助資料
3.5 ①処理の流れ ②作業 ③プログラム の説明
56.
vote()の実装 ①処理の流れ ②作業 ③プログラム の説明
57.
divine()の実装 • 占い先を決定するメソッド • 占いたい人のエージェントを返す •
占っていない人からランダムに占っていく ①処理の流れ ②作業 ③プログラム の説明
58.
divine()の実装 • まだ占っていない自分以外の生存プレイヤーからラン ダムに選択 補助資料 3.6 ①処理の流れ ②作業 ③プログラム の説明
59.
divine()の実装 ①処理の流れ ②作業 ③プログラム の説明
60.
エージェント同士の会話 • サーバがtalk()メソッドを順番に呼び出す Turn 1
~ 20 ①処理の流れ ②作業 ③プログラム の説明
61.
発話生成の仕方 • プロトコル部門の発話は次の2つから作成する • Contentクラス •
ContentBuilderクラス • 発話生成は次の手順で行う 1. ContnetBuilder builder = 発話の種類に応じたContentBuilder; 2. Content content = new Content(builder); 3. String text = content.getText(); ①処理の流れ ②作業 ③プログラム の説明 COMINGOUT Agent[05] SEER
62.
ContentBuilderクラス • ContentBuilderクラスには全部で14種類存在する • 今回利用するクラスは •
DivinedResultContentBuilder(target, result) • その他のクラスは補助資料 3.7を参照 ①処理の流れ ②作業 ③プログラム の説明
63.
talk()の実装 • 占いで人狼を見つけたらカミングアウト • カミングアウトした後は占い結果を報告する •
話すことがないときはOVERを返す ①処理の流れ ②作業 ③プログラム の説明 Turn 1 ~ 20
64.
talk()の実装 • 占いで人狼を見つけたらカミングアウト • その後占い結果を報告 補助資料
3.8 ①処理の流れ ②作業 ③プログラム の説明
65.
talk()の実装 ①処理の流れ ②作業 ③プログラム の説明
66.
会話内容の取り込み • 会話のリストはGameInfoからTalk型として取得 • Talk型クラス •
発話ID • 発言者 • 発話内容 • Talk型クラスとして取得したテキストをContentクラ スへ変換 ①処理の流れ ②作業 ③プログラム の説明
67.
会話内容を取り込む(update()の修正) • フィールドの追加 • dayStart()の修正 •
update()の修正 補助資料 3.9 ①処理の流れ ②作業 ③プログラム の説明
68.
フィールドの追加とdayStart()の修正 ①処理の流れ ②作業 ③プログラム の説明
69.
update()の修正 ①処理の流れ ②作業 ③プログラム の説明
70.
talkListHeadの役割 • 会話情報をどこまで読み込んだか覚えておく「し おり」 • 会話情報を取得する際,talkListHeadがないと一 日文を毎回読み込むことになる ①処理の流れ ②作業 ③プログラム の説明
71.
カミングアウト情報の取り込み • 他のプレイヤーのカミングアウト情報を保持 ①処理の流れ ②作業 ③プログラム の説明
72.
カミングアウト情報の取り込み 補助資料 3.10 ①処理の流れ ②作業 ③プログラム の説明
73.
カミングアウト情報の取り込み ①処理の流れ ②作業 ③プログラム の説明
74.
チュートリアル終了
75.
今後の展開 • 偽の占い師が現れたら • ブラックリストへ入れる •
偽物だ!と発言する • 霊媒結果を取得したら • 灰色リストから除外する • 自分が疑われたら • 君は怪しいと反論する • ブラックリストへ入れる
Editor's Notes
では開発環境を整えましょう. 1スライドずつみなさんの進行を見ながらすすめていきます. 今日は同じ研究室からサポートとして3名に来てもらっています. 生徒数に対してサポート数が多いので,わからないことこがあったら,積極的に聞いてください.
プラットフォームをダウンロードしましょう. 人狼知能プロジェクトへアクセスしてください. URLはこれです. HPから開発関連をクリックします.
Resourceの下にある人狼知能プラットフォームをクリックします
ダウンロードするのはaiwolf-ver0.4.6です. そのとなりの(JavaDocのDL)もダウンロードしてください.
ダウンロードするのはaiwolf-ver0.4.6です. そのとなりの(JavaDocのDL)もダウンロードしてください.
Eclipseを起動し,
プロジェクトの作成は左上のマークをクリックします. 右の小さい下三角形です 出て来た項目の上にあるJavaプロジェクトをクリックしてください.
作成するプロジェクト名を決めます. プロジェクト名の欄に適当なプロジェクト名を入れてください. ここではDemoAgentと名付けておきます その後完了をおし,プロジェクトを作成してください.
プラットフォームを入れておくフォルダーを作成しましょう. プロジェクトを右クリックし,新規>フォルダーを選択します.
フォルダー名の欄にlibと入力し完了をおします.
作成したフォルダーにプラットフォームを導入しましよう. 少し前に解凍したAiwolf-ver0.4.6の中にあるaiwolf-client.jarとaiwolf-common.jarをドラックアンドドロップします.
ファイル操作のウィンドウが立ち上がってくるので, ファイルをコピーを選択し,OKをおします.
フォルダーにコピーしただけでは,利用できないので,ビルドパスという作業が必要になります. プロジェクトを右クリックし,ビルドパス>ビルドパスの構成をクリックします.
ライブラリの項目にあるJARの追加をクリックします.
追加したJARファイルを選択し,OKを押します.
JavaDocを適用しましょう. 手順が面倒なので,一度聞いていてください まず初めに,二つのJARファイルのうちの一つのaiwolf-client.jarの左の三角をクリックします javadocロケーションを選択します. その後,右にあるボタンの中から編集を押します.
ウィンドウが立ち上がってくるので, アーカイブ内のJavadocをクリックし, アーカイブぱすに「プロジェクト名/lib/docs.zip」を アーカイブ内のパスにdocsを入力します.
検証をクリックし,ロケーションが有効であるかを確認します.
同じことをaiwolf-common.jarにも適用します. aiwolf-commonの左の三角をクリックし,javadocロケーション,編集を押します
アーカイブ内のJavaDocを選択し, ワークススペース・ファイルを選択します アーカイブぱすには「プロジェクト名/lib/docs.zip」を入力, アーカイブ内パスにはdocsを入力します
検証をクリックし,ロケーションがあっているかを確認します その後,OKをおしてJavaDocの適用を終えてください. ここがセットアップの山場ですから,不明点は手を上げてサポートを呼んでください.
何もしない,実行可能なエージェントを作成しましょう. その後,対戦の説明をし,対戦の実行の仕方を確認した後,具体的なプログラミングをしていきます.
新規クラスを作成します プロジェクトを右クリックし,項目から新規>クラスを選択します.
パッケージ名を入力します 一般的には自分のアドレスを逆から入力するのが慣例となっています. 例えば,demo@aiwolf.orgの場合は逆から読んで,org.aiwolf.demoとします. 次に作成するクラス名ですが,なんとかRoleAssignPlayerとしましょう. その後,スーパークラスの欄の横にある参照をクリックしましょう
上の欄はフィルターになってるので,ここにARAPと打ち込んで, 項目の中からAbstractRoleAssignPlayerを選択しましょう. この時二つ同じ名前が出てくると思います. 利用するのはorg.aiwolf.sample.libのクラスを使いますから,気をつけてください
自分のパソコン内でサンプルエージェントと対戦をする仕方を勉強しましよう
対戦する際の実行の構成はクライアントサーバ方式です. 1つのサーバに複数のクライアントを接続し,ゲームを実行します. [ENTER] 今回は自分のパソコン上にサーバとクライアントを立ててゲームを実行します 先ほど作ったエージェントをクライアントとして,ゲームに接続し実行します. [ENTER] 今回は5人で人狼を行いますが,不足している4人はサンプルエージェントが担当します.
対戦するため,今まで作ったプロジェクトをJARファイルにまとめます. プロジェクトを右クリックし,エクスポートを選択します.
上の欄はフィルターになってるので,ここに,Javaを入力し,Jaca>jarファイルを選択し,次へをおします
Jarファイルの欄にエクスポートする場所を入力します. 出力先は,aiwolf-ver0.4.6にして,ファイル名はなんとかAgentとしてください. その後,完了ボタンを押してください.
自分の作ったエージェントをJARファイルにまとめたので,次はサーバの設定を行います. aiwolf-ver0.4.6のフォルダの中にあるAutoStarter.iniを編集します.
最後の行にあるSample5.org,,,の文の先頭に#を入れてコメントアウトにし, 次の文を追加します 任意の名前,カンマ パッケージ名 ピリオド 作成したクラス名 の文を追加します. 例えば,DemoAgent, org.aiwolf.demo.DemoRoleAssignPlayerとします. よくわからないと思いますので,手元の補助資料を参照してください
それでは対戦をしてみましょう. MacOSの人はターミナルを,windowsの人はコマンドプロンプトを開き,aiwolf-ver0.4.6の中にあるAutoStarterを実行してください.
起動するとGUIが立ち上がってきます. しばらく動かしてみましょう,
エージェントを作成しただけで,今は何もしません, 人狼知能のプログラミングをしましょう
エージェントの作成は,各役職ごとに行います. 現在のプロトコル部門では5人対戦と15人対戦が行われているため,全部で7種類の役職を実装する必要があります. ただし,設定していない役職が割り当てられた場合には,サンプルエージェントが代わりにプレイするため,一つの役職だけを実装しても対戦することができます.
それでは占い師を作成していきましょう. プロジェクトを右クリックし,新規クラスを作成, クラス名にはなんとか Seerと設定します.ここではDemoSeerとします スーパークラスの横の参照ボタンをクリックしましょう
上のフィルターの欄にASと入力し,AbstractSeerを選択します. この時にも2つ同じ名前が出てくると思うので,org.aiwolf.sampleの方を選択しましょう,
完了ボタンを押してクラスを作成しましょう.
ここからプログラミングの作業をしていきます. まず,大まかな処理の流れを説明した後,作業の時間を設けます. 一通りプログラミングが終わったら,プログラムの詳細説明をします.
少し前に作成したクラスであるDemoRoleAssignPlayerの役割は,サーバとの最初のやりとりです. サーバから役職が割り振られた時に,どのクラスを実行するのかを指示します. 役職ごとにクラスを作成する必要があります.全部で6役職 今回のセミナーでは占い師を作成するため,DemoRoleAssignPlayerに占い師クラスを設定します
DemoSeerに必要なメソッドを実装する前に いくつかのフィールドとメソッドを追加しておきましょう.
それでは補助資料の ページの . 節まで進めてください
コンストラクタを作成し,setSeerPlayerの引数に作成したクラスを渡します. 今回は占い師だけですが,狩人の場合には,setBodyguardPlayerを,人狼の場合にはsetWerewolfPlayerというメソッドを使います.
Agent me は自分自身を示すオブジェクトを取得します. 今後多用するので,フィールドとして定義しておきます currentGameInfoはサーバから受け取ったゲーム情報を格納しておく変数です. myDivinationQueueは占い結果が入る行列です. whiteList, blackList, grayListはそれぞれ,人間だと確信している人を格納しておくリスト,人狼だと確信している人を格納しておくリスト,判断がつかない人を格納しておくリストです 最後は自分自身の役職をカミングアウトしたかを保持しておくフラグです.
二つのメソッドを定義してもらいました. 一つ目は引数にtargetを渡して生きているかを返すメソッドです. ゲーム情報からgetAliveAgentList()で現在生きているエージェントのリストを取得し,containsでリストにtarget がいるかbooleanで返してもらいます 2つ目は引数にリストを渡して,その中からランダムに一つ要素を返すメソッドです. この際,リストが空の場合にはnullを返します.
それではDemoSeerのプログラミングをしましょう, クラスを作成した時にいくつか自動生成されたかと思います. これらのメソッドを一つずつ定義していきます.
それでは,メソッドを3つ実装しましょう, 一つ目はgetName()です. これは,サーバ側のエージェント名取得の際に利用するメソッドです 2つ目はupdateです プログラム実行中は高頻度で呼ばれ続けるメソッドです. サーバーからおくられるゲーム情報の取得や,状況に応じてフィールドを書き換える,メソッドを実行するなどを書き込みます. 3つ目はinitializeです プログラムの最初に1度だけ実行されます. 初期化処理などはここに書きます,
それではプログラミングをしましょう. 補助資料 ページです
getName()は自分自身のエージェント名を返しましょう update()はサーバからゲーム情報を引数で受け取るので,クラスのフィールドに格納しておきましょう.
initialize()ではフィールドの初期化処理を行います. 自分自身のAgent情報は,ゲーム情報から,getAgentで取得します. grayListは,現在参加しているエージェントのリストをそのまま入れます. 参加しているエージェントの中には自分自身も含まれるため,リストから除外します. ホワイトリストとブラックリスト,占い結果を保持しておくキューは,試合を繰り返すと,前の試合の情報が残っている可能性があるため,クリアで初期化しておきます.
実装する処理は占い結果の取り込みと,リストのアップデートです. 占い結果の読み込みは,ゲーム情報からgetDivineResult()で取得します. このメソッドで返ってくるのはJudge型です. このJudgeは占った人と結果,HUMANかWEREWOLFを保持しているクラスです, 注意点がひとつあります. このメソッドは0日目でも呼ばれるため,占い結果を取り込んでもnullが返ってくることがあります. そのため,37行目で,nullが帰ってきた場合に処理をスキップしてください, この占い結果をキューの最後にofferで追加します. 占い結果から占った人を灰色リストから移します. 結果を取得し,結果がHUMANの時はホワイトリストへ, 結果がWEREWOLFの時はブラックリストへ移します.
それではVote()の実装をしましょう 投票処理をするメソッドです. 投票するエージェントを返します. 1日の終わりに呼び出されます. 基本的にはブラックリストに入れたエージェントに対して投票します. ブラックリストがいなければ灰色リスト,ホワイトリストの順に投票します.
それではVoteを実装しましょう,補助資料 ページです
まず,候補者リストを用意し,ブラックリストに名前があれば,候補者リストに加えます, 192行目にとび,投票を返します ブラックリストに名前がない場合には,177行目から184行目の処理で,灰色リストの名前を候補者リストに加え,192行目で投票を返します. 両方のリストに名前がない場合には,自分以外の生存プレイヤーからランダムに投票をさせます. この部分が186行目から189行目です. 返す値をnullにすると,デフォルトの設定である,生存プレイヤーからランダムに投票が適用されます.
占い先を決定するメソッドです. 占いたい人を返します. 占っていない人からランダムに占っていくようにプログラミングします
補助資料 ページを参考に進めてください
vote()と同様に候補者リストを作成しておきます. 現在は占われていない人は全員,灰色リストに入るため,灰色リストに入っている人を候補者リストへ加えます. もし,候補者が誰もいない場合はnullを返します,
エージェント同士の会話はトークンリングという伝送方式に似ています. 一人ずつ,話したいことがあるかサーバが確認する作業をしています. 一周すると1ターン,2周すると2ターンとなり,全員がもう話すことはないという信号を送るか,20ターンたつと会話が終了します.
占い結果の報告をするために発話を生成する必要があります 発話の生成にはContentクラスとContentBuilderクラスの二つから作成します. ContentBuilderクラスで発話を生成した後に,Contentクラスに渡した後,String型に加工されたものを取得します.
発話の種類によって利用するContentBuilderを変えます. 占い結果を報告する発話生成にはDivinedResultContentBuilderを使います. そのほかのContentBuilderクラスについては補助資料の ページを参照してください
talkメソッドの実装です, talkメソッドは20回呼び出されます. ここでは占いで人狼を見つけたらカミングアウトの発言をし,その後,占い結果を報告します. もし,話すことが何もない場合にはOVERを返しておきます
補助資料 ページを参考に進めて行ってください
108行目の処理で自分の役職をカミングアウトしておらず,人狼を見つけた場合にはカミングアウトをします この条件が108行目と109行目です. キューに対してpeekLast()メソッドを利用することでキューの最後の要素を取り出さずに取得することができます. 111行目でComingoutContentBuilderを使って発話生成します. 第一引数に自分のAgent情報,第二引数に役職です. Roleというのは列挙型です. SEER以外にWEREWOLFやBODYGURADなどがあります. ContentBuilder型をContent型にした後,getTextでString型にし,返します
フィールドにtalkListHeadを定義します. これは一日たつと0にリセットさせたいので,dayStart()メソッドで毎日0にリセットします.
update()で会話情報を取得します. ゲーム情報からgetTalkList で会話リストを取得します. Talk型は主に発言者と発話内容を保持しています. 発言者はgetTalk() で,発話内容はgetText()で取得します. 発話内容はそのままだとString型で扱いにくいのでContent型に渡して,利用しやすくします. contentにあるgetTopicで話題を取得します. 具体的にはTopicの列挙型で取得します.swich case 文でそれぞれの話題に対して処理を書き加えていきます. 最後に,今まで読み込んだリスト番号を保持しておきます
フィールドにカミングアウトを保存するMapを宣言します. initializeで他のリストと同様に初期化をします update()関数内のカミングアウト発話の処理で,マップにputし,comingoutしたプレイヤーと役職を格納します.
Download now