AI。人工知能。ファジー理論なんてのもあったっけ。
「人工」の「知能」っていう響きや、たまーに話題になるシンギュラリティ、さらにはワトソンやAlfaGOなどの最近の現実世界での動きから、AIがふたたび昨今の流行りワードになっている、個人的にそんな風に感じてます。
でも、ことビデオゲームに関して言えば、AIは古くから取り入れられてきました。パックマンのモンスターとかね。
そんなビデオゲームの世界で、AIを使ってとんがったゲームを作っている人がいます。
がんばれ森川君2号やアストロノーカ、くまうたなどを作っている、森川幸人さんです。
先日俺のメールボックスに、その森川さんの名前のあるメールが入ってきたんですね。
『プランナー・プログラマのための、ゲームAI入門勉強会 Vol.1』という勉強会の案内でした。
せっかくなので話を聞いてみようと思い、参加してきましたよ!
丸の内に行ってきたよ!
やー、ええとこやね…
早く着いたから八重洲ブックセンターのカフェでサンドイッチ食べたりして。
パネラーはモリカトロンの成沢さん、本城さん、そして森川さん。
ゲストとしてスクウェア・エニックスでゲームAIを開発している三宅さんがいらしてました。
モリカトロンは今年8月に立ち上げられた、日本初のゲーム専用AI開発会社ということで、モリカトロンの紹介も兼ねた勉強会でした。
今回はVol.1ということもあり、概要のお話がメインでしたね。ざっと挙げると…
- ゲームの中のAI、外のAI
- 先生が要るAI、要らないAI
- その他用語(機械学習、強化学習、群知能などなど)
といったことを解説していました。
ゲームの中のAI、外のAI
スライドを見て納得。「中のAI」とはゲームコンテンツ内のAI、「外のAI」とはゲームコンテンツの外のAIということだったんですね。
たとえばゲームのバランス調整をAIに任せたり、広大なマップに不具合がないかなどの検証を任せたりというのを外のAIと呼んでいるようです。
スマホゲームが広まっている昨今、ゲームは作って完成したら終わり…とはなかなかいかず、継続開発や運営がとても大事になってきています。
とくにパラメータ系のバランス調整なんかは、言ってしまえば正解のない作業とも言えます。
正解はないけど、目標はある…それでもって、時間を節約したい。そんな加速実験めいた手法にAIは向いているのではないか、とおっしゃっていました。もちろんそれぞれの処理(たとえば戦闘シーンならモーションとか)を時間短縮できるように作っておかないといけませんね!
先生がいるAI、いらないAI、強化学習
まずAIの中に機械学習というくくりがあり、その中で、
- 人間がAIの出力に対して評価してあげて調整していく「先生がいるAI」
- AI同士が競争して調整していく「先生がいないAI」
- 評価基準があらかじめ決められていて、できるだけ高い評価を得るために調整していく「強化学習」
があるとのことでした。
とくに「先生がいるAI」「先生がいないAI」についてはAlfaGOとAlfaGO ZEROの例を挙げて、「人間の教師がいたことがかえって足かせになっていたのではないか」という見解を述べていて印象的でした。
そのほか、AIの歴史や群知能などの解説をしていました。
講演を聞いてみて
今回はVol.1ということで、AIについて浅く広く触れられていた印象です。
ゲームの中と外のAIというくくりが興味深かったですね。
中と外…サワーかな?俺は寶よりキンミヤ派だよ!
やはりモリカトロン立ち上げの周知という意味合いもある勉強会なので、ゲームの外のAIについて濃いめに語られていました。やはり蓄積したノウハウを生かしやすい分野だし、逆にゲームの中のAIとなると開発会社以外のところからは手を出しにくいともおっしゃってました。
継続開発や運営にかかる人員コスト、時間コスト節約はゲーム会社の命題です。そこにどうAIが活かされていくのか、興味のわくお話でした。
とはいえその一方で。
やっぱり個人的にはゲーム本編の制作に活かしたいので、ゲームの中のAIを勉強していきたいな…という思いが深まりましたね。
講演のなかで森川さんのアストロノーカを例に遺伝的アルゴリズム(genetic algorithm)が紹介されていました。
これや!と思いましたね。2018年勉強したいやつリストに入れましたよ!
なぜ遺伝的アルゴリズムに興味がわいたか
俺は基本的に1人でゲームを作っています。
他の人と協力して作ったらいいんじゃないのーという問いは今は置いておいて、1人で作るので、ゲームの規模も限られます。
でも、一つのゲームを長い時間遊んでほしいという欲求もあります。
どうやったら自分が作るゲームを長い時間遊んでもらえるか?という問いには、いくつか解決法が考えられます。
ひとつは、時間をかけて規模を大きくする。
もうひとつは、リプレイ性を高める。
前者は、例えば事前に作品世界を描くことで、そこから登場人物や環境を盛り込み、さらには会話(ダイアローグ)やクエストのシステムを実装し、あるいは広大なマップを用意したりすることで、より複雑に、より長い時間楽しめるゲームになります。
ただ俺、世界観を作るのが苦手なんだよね…
なので、文鳥ゲームズではゲームのリプレイ性を高める方向を模索しています。
遺伝的アルゴリズムはそこに活かせそうだと感じました。
リプレイ性を求めて
例えばリスタートするときに長いロードが入らないようにとか、ゲームオーバーになるときにネガティブな表現にならないようにするとかの工夫はしています。
作ったゲームに対して、よく「リプレイするときのテンポがいい」という感想をもらうんだけど、まさに気を使っている部分なんです。どうもありがとう!!
そんな感じでリプレイ時のストレスを下げるという、いってみれば「守備表示」的な工夫はしています。
では「攻撃表示」としてのリプレイ性はどうしようか?
俺は「次はもっといいことが起こる」という期待を持たせる要素が大事なんじゃないかと考えています。
次はもっといいことが起こる
「次はもっといいことが起こる」と思わせるために、考えられる方向性は2つ。
一つ目は、ハイスコア更新です。
1人用のビデオゲームはもともとハイスコアを更新することが究極の目的でした。
そのためにプレイヤーは23発目のビームをUFOにぶち当てたり(インベーダー)一瞬ギアをローに入れてすぐにハイに戻したり(アウトラン)していたんです。
次のプレイでは10点でも多く点数を獲得しよう、1秒でもタイムを縮めよう…そんなプレイヤーの向上心がリプレイ性につながります。
もう一つは、予想外のことが起こること。
プレイヤーが思い描いていない(しかも、楽しい、面白い)結果を起こして楽しませるといことでね。
この方向の楽しませ方にはこれから目指そうとしている遺伝的アルゴリズムの他に、物理演算が当てはまると思います。
物理演算は見た目以上に複雑な動きをして、数値的に同じ挙動がそうそう起きません。これにより、プレイヤーが意図しない形で敵のブタをやっつけたり(アングリーバード)動物の足が足場に偶然引っかかる(動物タワーバトル)ことになります。
プレイヤーの向上心を満たすことと、
プレイヤーの予想外のことを起こすこと。
個人的には、この二つを両立するのはとても難しいと思っています。なぜなら、向上心に基づいたゲームプレーでは、プレイヤーのミスを除いては、予想外のことは起きてほしくないからです。
ゲームの世界を支配(コントロール)したいのか、ゲームの世界に支配されたいのか、の二律背反とも言えます。
その中で、遺伝的アルゴリズムを使って、キャラクターに予想外のことを起こさせて、プレイヤーを楽しませる。
今回の勉強会に参加して、そんなゲームを今後作りたいなと思いました。
どうやって作ろうか?
で、今回の勉強会はほぼ概要の説明だけだったので、そのあと自分で調べ始めています。
そもそもある程度自律的にキャラクターが動くように作ること、そのときの各パラメータを詳細に調整できるようにしておくことが大事なんだろうなと思っています。
こんなサイトを見つけました。
HTML5 Genetic Algorithm Car thingy
八角形の車体に車輪をつけて、どこまで遠くまで行けるかを延々を続けるプログラムです。
たまにめっちゃ走れる車体が誕生するので、永遠に見ていられるw
この八角形と車輪をパラメータでどう作るのか、次の世代(次のプレイ)に残すのかのノウハウを貯めることが大事なんやろなと思っています。