Slide 1

Slide 1 text

東方ゲームAIとその歴史 2018/01/20 第3回東方発表会 @ide_an

Slide 2

Slide 2 text

自己紹介 • HN: ide_an (いで) • Twitter: @ide_an • Mastodon: [email protected] • 某社プログラマ • 東方界隈でツールを作ってます • 花映塚AI自作ツール 「花AI塚」 • http://usamimi.info/~ide/programe/touhouai/ • サークルチェックツール 「trivial-circlecheck」 • http://trivial-circlecheck.herokuapp.com/ • ダブルスポイラー リプレイずれ修正パッチ 「hanakopatch」 • https://bitbucket.org/ide_an/hanakopatch/src/

Slide 3

Slide 3 text

今回の主張 •東方ゲームAIというものがある! •しかも結構ある!!!

Slide 4

Slide 4 text

東方ゲームAIとは?

Slide 5

Slide 5 text

東方ゲームAIとは? • 東方のゲーム作品を対象としたゲームAI • 紅魔郷や文花帖などのSTG • 萃夢想や緋想天などの格闘ゲー • 今回の発表ではデフォルトCPUは対象外(花映塚など) • 実際に見た方が早い • デモ動画(拙作の地霊殿AI) • https://www.youtube.com/watch?v=tufZQTRX_WQ

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

ゲームAIの仕組み ・・・の前に、 まずは人間のゲームプレイを考えてみる

Slide 8

Slide 8 text

人間のゲームプレイ ゲーム状態の認識 次の行動の選択 ゲーム操作の入力 ゲーム状態の更新 自機はどこ? 敵弾は? 自機狙いだな 右にちょん避け しよう 自機位置、 敵、弾、 etc… 右に低速移動

Slide 9

Slide 9 text

ゲームAIの仕組み ゲーム状態の認識 次の行動の選択 ゲーム操作の入力 ゲーム状態の更新 いい感じに弾の位置 などを認識する いい感じに移動 経路などを考える キー入力を シミュレート プレイの各フェーズを プログラムで実現する

Slide 10

Slide 10 text

ゲームAIの仕組み ゲーム状態の認識 次の行動の選択 ゲーム操作の入力 ゲーム状態の更新 いい感じに弾の 位置などを認識する いい感じに移 動経路などを考える キー入力をシ ミュレート

Slide 11

Slide 11 text

ゲームAIの仕組み ゲーム状態の認識 次の行動の選択 ゲーム操作の入力 ゲーム状態の更新 いい感じに弾の位置 などを認識する いい感じに移動 経路などを考える キー入力を シミュレート

Slide 12

Slide 12 text

「ゲーム状態の認識」のアプローチ • 画像処理 • ゲーム画面から自機や弾などを 認識する • 内部情報へのアクセス • ゲームプログラムのメモリから自 機や弾などの情報を取り出す 例:画面から 弾っぽいやつ抽出 弾1: x=100,y=200,r=128 弾2: x=120,y=250,r=128 弾3: x=140,y=300,r=128 弾4: x=160,y=250,r=128 … 例:メモリから 弾情報抽出

Slide 13

Slide 13 text

ゲームAIの仕組み ゲーム状態の認識 次の行動の選択 ゲーム操作の入力 ゲーム状態の更新 いい感じに弾の位置 などを認識する いい感じに移動 経路などを考える キー入力を シミュレート 画像処理 内部情報へのアクセス

Slide 14

Slide 14 text

「次の行動の選択」のアプローチ • ルールベース • ゲームプレイでの思考を考察して、 アルゴリズムに落とし込む • 例:「弾が少ないところに移動する」、 「被弾しそうならボムる」 • 機械学習 • ゲームプレイのデータから 行動ポリシーを学習する • リプレイを正解として学習 (教師あり学習) • AI自身がゲームをプレイして学習 (強化学習)

Slide 15

Slide 15 text

ゲームAIの仕組み ゲーム状態の認識 次の行動の選択 ゲーム操作の入力 ゲーム状態の更新 いい感じに弾の位置 などを認識する いい感じに移動 経路などを考える キー入力を シミュレート 画像処理 内部情報へのアクセス ルールベース 機械学習

Slide 16

Slide 16 text

なぜ東方ゲームAIを作るのか? • 楽しい!!! • せやな。 • 良き対戦相手が欲しい • デフォルトCPUでは合わない • 強すぎる、弱すぎる、人間のプレイとの乖離 • オフライン対戦は手軽じゃない • 相手がいないなら「作れば」いいじゃない

Slide 17

Slide 17 text

東方ゲームAIの歴史

Slide 18

Slide 18 text

凡例とおことわり • 凡例 • 画: 画像処理 • 内: 内部情報へのアクセス • ル: ルールベース • 学: 機械学習 • ツ: AI作成ツール • おことわり • AI作成ツールで作成した個々のAIは記載していません • そもそも追跡できてない

Slide 19

Slide 19 text

原作 STG AI 黄昏フロ作品 AI 2002 紅魔郷 2003 妖々夢 2004 萃夢想、永夜抄 2005 花映塚、文花帖 th075Booster (yK8Yp05c) 内学ツ 2006 2007 風神録 2008 緋想天、地霊殿 th105_ai (sweetie) 内ルツ 2009 星蓮船、非想天則 永夜抄AI (sizukuisi) 内ル th123_ai (sweetie) 内ルツ 2010 ダブルスポイラー、 妖精大戦争 永夜抄AI (Gandalph) 画ル 花映塚AI (K.Sakai et al.) 画ル 2011 神霊廟 Touhoubot Project 内ル ダブルスポイラーAI (trial-run) 画ル 2012 地霊殿AI (ide_an) 内ル 2013 心綺楼、輝針城 TouhouPlayer (feinomenon) 画ル th135_ai (sweetie) 内ルツ 2014 弾幕アマノジャク 紅魔郷AI (aki33524) 内ル 花AI塚 (ide_an) 内ルツ 2015 深秘録、紺珠伝 AI_touhou (nobu-knellfox) 画ル 2016 紺珠伝AI (imenurok) 画学 紅魔郷AI (td2sk) 画学 紺珠伝AI( ntddk) 画学 TouhouCV (Netdex) 画ル 2017 天空璋、憑依華 Twinject (Netdex) 内ル 画: 画像処理、 内: 内部情報へのアクセス、 ル: ルールベース、 学: 機械学習、 ツ: AI作成ツール

Slide 20

Slide 20 text

原作 STG AI 黄昏フロ作品 AI 2002 紅魔郷 2003 妖々夢 2004 萃夢想、永夜抄 2005 花映塚、文花帖 th075Booster (yK8Yp05c) 内学ツ 2006 2007 風神録 2008 緋想天、地霊殿 th105_ai (sweetie) 内ルツ 2009 星蓮船、非想天則 永夜抄AI (sizukuisi) 内ル th123_ai (sweetie) 内ルツ 2010 ダブルスポイラー、 妖精大戦争 永夜抄AI (Gandalph) 画ル 花映塚AI (K.Sakai et al.) 画ル 2011 神霊廟 Touhoubot Project 内ル ダブルスポイラーAI (trial-run) 画ル 2012 地霊殿AI (ide_an) 内ル 2013 心綺楼、輝針城 TouhouPlayer (feinomenon) 画ル th135_ai (sweetie) 内ルツ 2014 弾幕アマノジャク 紅魔郷AI (aki33524) 内ル 花AI塚 (ide_an) 内ルツ 2015 深秘録、紺珠伝 AI_touhou (nobu-knellfox) 画ル 2016 紺珠伝AI (imenurok) 画学 紅魔郷AI (td2sk) 画学 紺珠伝AI( ntddk) 画学 TouhouCV (Netdex) 画ル 2017 天空璋、憑依華 Twinject (Netdex) 内ル 画: 画像処理、 内: 内部情報へのアクセス、 ル: ルールベース、 学: 機械学習、 ツ: AI作成ツール ~2008 STG AI 登場以前 2009~2010 STG AI 登場 2010~2015 知見の公開化 2016~ Deep Learning

Slide 21

Slide 21 text

~2008 STG AI登場以前 • 東方ゲームAIは、まず黄昏フロ作品で登場 • th075Booster • 萃夢想AI作成ツール • 作者: yK8Yp05c 氏 • 萃夢想ネット対戦パッチ作者でもある • 確認できる限り最初の東方ゲームAI • リプレイから学習する • 次に学習型AIが登場したのは2016年 • オーパーツ • th105_ai • 緋想天AI作成ツール • 作者: sweetie 氏 • 非想天則、心綺楼AIツールも作っている • スクリプトで自由にルールを組める 原作 STG AI 黄昏フロ作品 AI 2002 紅魔郷 2003 妖々夢 2004 萃夢想、 永夜抄 2005 花映塚、 文花帖 th075Booster (yK8Yp05c) 内学ツ 2006 2007 風神録 2008 緋想天、 地霊殿 th105_ai (sweetie) 内ルツ

Slide 22

Slide 22 text

なぜSTG AIが生まれなかったか? • A. STGは対戦ゲームじゃないから • 対戦ゲームではAIのニーズが強い • 「良き対戦相手が欲しい」というニーズがある • AIと戦う、AI同士で戦わせるなど、AIの楽しみ方が多様 • 一人プレイのSTGではAIのニーズが弱い • AIのプレイを眺める以外に、AIの楽しみ方がない • (花映塚は対戦ゲーじゃんと思った人はあとで質問してください)

Slide 23

Slide 23 text

2009~2010 STG AI登場 • 動画サイトを中心にSTG AIが現れる • 永夜抄AI • 作者: sizukuisi 氏 • ニコニコ動画上で公開 • 永夜抄Lunaクリアを達成 • 永夜抄AI • 作者: Gandalph 氏 • Youtube上で公開 • 最初の画像処理ベースAI • 弾の認識がうまくいってない? • STG AIが登場してきたが、動画のみで細かい仕組みが分からなかった 原作 STG AI 黄昏フロ作品 AI 2009 星、非 永夜抄AI (sizukuisi) 内ル th123_ai (sweetie) 内ルツ 2010 DS、 妖大 永夜抄AI (Gandalph) 画ル 花映塚AI (K.Sakai et al.) 画ル

Slide 24

Slide 24 text

2010~2015 知見の公開化 • STG AIの知見が同人誌やスライドなどでまとめられ始める • 花映塚AI (K. Sakai et al.) • ICAI2010 論文 • ダブルスポイラーAI (trial-run) • 同人誌 • 僕がAIを作り始めたきっかけの本 • 地霊殿AI (ide_an) • Webに記事公開 • 紅魔郷AI (aki33524) • IT系勉強会で発表 + ニコ動で公開 • 紅魔郷Exノーショットノーミスクリア • 花AI塚 (ide_an) • 記事公開 • AI作成ツール公開 原作 STG AI 黄昏フロ作品 AI 2010 DS、 妖大 永夜抄AI (Gandalph) 画ル 花映塚AI (K.Sakai et al.) 画ル 2011 神 Touhoubot Project 内ル ダブルスポイラーAI (trial-run) 画ル 2012 地霊殿AI (ide_an) 内ル 2013 心、輝 TouhouPlayer (feinomenon) 画ル th135_ai (sweetie) 内ルツ 2014 弾アマ 紅魔郷AI (aki33524) 内ル 花AI塚 (ide_an) 内ルツ 2015 深、紺 AI_touhou (nobu-knellfox) 画ル

Slide 25

Slide 25 text

2016~ Deep Learning • 2016年にDeep Learningを使ったAIが相次いで登場 • 紺珠伝AI • 作者: imenurok 氏 • Qiitaで公開 • 紺珠伝AI • 作者: ntddk 氏 • 同人誌で発表 • いずれも、画像処理 + 機械学習の組み合わせで実現している • STG AIにも機械学習の時代が来た 原作 STG AI 黄昏フロ作品 AI 2016 紺珠伝AI (imenurok) 画学 紅魔郷AI (td2sk) 画学 紺珠伝AI( ntddk) 画学 TouhouCV (Netdex) 画ル 2017 天、憑 Twinject (Netdex) 内ル

Slide 26

Slide 26 text

DQN (Deep Q-Network) • 先述のAIはいずれもDQNを採用 • DQN = 強化学習 + Deep Learning • 入力はゲーム画面のスクリーンショット • 行動ポリシーだけでなく、画像をどうやって 認識するかも学習する • Deep Learningは画像認識で特に成功している • 2015年にDQNのゲームAIデモがバズったのが背景 • https://wired.jp/2015/02/28/google-deepmind-atari/ ゲーム状態の認識 次の行動の選択 ゲーム操作の入力 両方まとめて 学習 スクショそのまま 突っ込む

Slide 27

Slide 27 text

まとめ • 東方ゲーム作品を対象としたゲームAIが有志によって作られている • STG AIは2009年以降、毎年作られている • ここ最近は画像処理 + 機械学習のアプローチが現れている • より人間に近いAIが出てくるかも? • こういう歴史をまとめてみるのも面白いよね

Slide 28

Slide 28 text

Reference / Appendix 会場で読ませる気がない細かさなので、あとで読んでくだしあ

Slide 29

Slide 29 text

花映塚AIはなぜ生まれなかった? A. ネット対戦に先を越されたから • ネット対戦はAIとシェアを奪い合う • ネット対戦も「良き対戦相手が欲し い」のソリューション • 萃夢想AIの登場は・・・ • 萃夢想ネット対戦パッチより前 • 花映塚ネット対戦対応より後 • もし萃夢想AIが2ヶ月早かったら、 花映塚AIも生まれていたかも? 花映塚関連 萃夢想関連 2004/12 萃夢想 ver 1.00 2005/8 花映塚 ver 1.00 2005/10 花映塚 ver 1.50で ネット対戦対応 2005/11 th075Booster (萃夢想AI)公開 2005/12 th075_net (AVC氏、 ネット対戦パッチ) 公 開 2006/2 th075Caster (yK8Yp05c氏、ネット 対戦パッチ) 公開

Slide 30

Slide 30 text

「ゲーム状態の認識」のアプローチ比較 • 画像処理 • メリット • 人間のプレイと同じ条件 • 作品をまたいで適用できる汎用性 • デメリット • 認識誤差が生じる • 処理時間がネック • 認識精度と処理時間のトレードオフ • 画像処理の知識が必要 • 内部情報へのアクセス • メリット • 情報が正確 • 高速 • デメリット • 対象ゲームごとに解析が必要 • 同じゲームでもバージョンアップの 度に解析と修正が必要 • 人間と同じ土俵じゃないズルさ • リバースエンジニアリングの知識が 必要

Slide 31

Slide 31 text

「次の行動の選択」のアプローチ比較 • ルールベース • メリット • ホワイトボックスである • 不具合の原因を特定しやすい • デメリット • 人間離れしがち • 花映塚CPUの「電動歯ブラシ」 • うまく言い表せない行動ポリシーは ルールベースに落とし込めない • 無意識にうまくやっていること • 機械学習 • メリット • うまく言い表せない行動ポリシーも 獲得できる(理想的には) • デメリット • ブラックボックスである • 「なぜ」が分からない • 学習のためのデータや環境の準備 が困難 • Deep LearningだとGPU必須

Slide 32

Slide 32 text

東方格闘ゲーAI • th075Booster (yK8Yp05c) • http://wiki.mizuumi.net/w/Immaterial_and_Missing_Power/th075booster • 初出 http://jbbs.shitaraba.net/bbs/read_archive.cgi/computer/6306/1127170527/#717 • 開発者回顧録 https://www26.atwiki.jp/th075c/pages/20.html • Archive http://web.archive.org/web/20090122055540/http://www.crystal.rm.st/njm4559/r_board/r_boa rd.cgi • 現在はrollCaster (mauve)に組み込まれている • th105_ai(のちにth123_ai) (sweetie) • http://resemblances.click3.org/product_list/index.cgi/detail/52 • th135_ai (sweetie) • http://resemblances.click3.org/product_list/index.cgi/detail/54 • 機械学習で緋想天AI構想 (作者不明) • その後実現したのかは不明。sweetie氏とは別人。 • http://jbbs.shitaraba.net/bbs/read_archive.cgi/game/44334/1211630896/#627

Slide 33

Slide 33 text

東方STG AI • 永夜抄AI (sizukuisi) • http://www.nicovideo.jp/watch/sm7270634 • 永夜抄AI (Gandalph) • https://www.youtube.com/watch?v=4wKmtWpcHnA • 花映塚AI (K. Sakai et al.) • Sakai, Kazuhiko & Okada, Yoshihiro & Muraoka, Yoichi. (2010). Developing AI for Playing Shooter Games - Touhou Kaeizuka.. Proceedings of the 2010 International Conference on Artificial Intelligence, ICAI 2010. 2. 748-752. • 国会図書館関西館にproceedings収蔵 • ダブルスポイラーAI (trial-run) • http://trial-run.net/archives/2235 • TouhoubotProject (Adephtand Tsar IoannXIII) • https://web.archive.org/web/20160812123435/http://thbot.kt15.ru/ • プレイ動画 https://www.youtube.com/watch?v=6xWvr-TAR1w • 地霊殿AI (ide_an) • http://usamimi.info/~ide/programe/touhouai/ • TouhouPlayer (feinomenon) • https://github.com/feinomenon/TouhouPlayer • 紅魔郷AI (aki33524) • http://www.kernelvm.org/ima-made-no-matome/kaneru-vm-tan-jian-dui- guan-xi-6hui-mu • https://www.dropbox.com/s/hy0tvgocxourltw/%E6%9D%B1%E6%96%B9AI .pdf?dl=0 • プレイ動画 http://www.nicovideo.jp/watch/sm23043946 • 花AI塚 (ide_an) • http://www.usamimi.info/~ide/programe/touhouai/ • AI_touhou (nobu-knellfox) • https://github.com/nobu-knellfox/AI_touhou • 紺珠伝AI (imenurok) • http://qiita.com/imenurok/items/c6aa868107091cfa509c • 紅魔郷AI (td2sk) • http://www.nicovideo.jp/watch/sm28442889 • 紺珠伝AI (ntddk) • https://ntddk.booth.pm/items/245254 • プレイ動画 https://www.youtube.com/watch?v=KcnvVepob2o • TouhouCV (Netdex) • https://github.com/Netdex/TouhouCV • Twinject (Netdex) • https://github.com/Netdex/twinject