AIの進歩は留まるところを知らない。GoogleのDeepMindによって生み出されたコンピュータ囲碁プログラムAlphaGOは進化を続けており、昨年にはストラテジーゲーム『StarCraft II』内でも研究が始まったことが告知されている。そして最近ではそのDeepMindのフレームワークを担っている人工知能のライブラリ「TensorFlow」が注目を集めている。そんなTensorFlowを使い、NINTENDO 64にて発売され爆発的なヒットを記録した『マリオカート64』内で実験を始める男が現れた。

今回、実験をおこなったのはカナダのEコマース企業「Shopify」で働くエンジニアKevin Hughes氏。氏は冬季の休みを使って機械学習の勉強をしたいと思い立ち、TensorFlowを使った新たな実験を始めた。それが『マリオカート64』内で動く運転AIプログラムの作成だ。

Hughes氏はまず、AIに基本的な動作を覚えさせるために、Xboxコントローラーの入力にあわせて『マリオカート64』上のスクリーンショットを記録するプログラムを生成。エミュレーター上で動く『マリオカート64』をプレイしている最中に入力をおこなえば、画面の状況と入力を紐付けて学習するという仕組みだ。Hughes氏はこのプログラムのために何度も『マリオカート64』をプレイし、AIに画面と入力の組み合わせを学習させていく。このAIはデータベースを構築していった。

さまざまな手段でAIを訓練させていく上でHughes氏は「訓練したAIをどのようにゲーム上で動かすか」という根本的な課題を解決しなければならなかった。まず「Python-uinput」と呼ばれるモジュールを試したがこれはエミュレーター「mupen64plus」との相性が悪く断念。しかし同エミュレーター内にあるプラグイン「mupen64plus-input-sdl」の構造を把握した氏は、今回のプログラムに合わせてプラグインを自分自身で作ってしまった。幾度もの試行錯誤を繰り返しながら、氏は最終的に、AIのプログラムをエミュレーター内にアウトプットすることに成功した。

ついにベースとなるAIを作り上げた氏は、「ルイージサーキット」にてマリオを使い、AIの運用を始める。しかし、AIは曲がることをしようとせず、かたくなに直進を続けた。原因を探ったところ、ふたつの問題が確認できた。ひとつめは、スクリーンショットがたびたびゲーム画面ではなくPCのデスクトップを映していたこと。ふたつめは、『マリオカート64』の、カーブを曲がる時のアニメーションのぎこちなさが問題を発生させていることだ。最近のレースゲームはコーナーに差しかかった際にはなめらかなカーブを描くが、マリオカート64』では、「ドリフト」を使用しなければキャラクターはぎこちなく曲がる。つまるところ、マリオが曲がっている状態であるか否かをAIが識別できていなかったということだ。このふたつの問題に修正を加え、ふたたびHughes氏は『マリオカート64』をプレイしAIに動きを学習させていった。そしてついに『マリオカート64』上で全自動走行をおこなうAIが誕生した。

映像をみると、ほぼすべての動作がAIの学習によって生まれたコードでおこなわれているが、キャラやコースを選ぶメニュー画面と、急旋回が必要な部分なトンネル近辺でのみ、マニュアルでのコードの修正がおこなわれている。Hughes氏は「問題が生まれた部分のコードを上書きした」と述べており、おそらくこういった部分が修正されているのだろう。そうして最終的にAIによって操縦されたマリオはコースを3周走りきる。3周ともタイムが異なるのは興味深い結果だと言えるだろう。

もっともビギナー向けのコース「ルイージサーキット」だけでなく、「マリオサーキット」にも適応させられることが確認されており、Hughes氏は「データさえ集まれば『マリオカート64』内ならばどんなコースでも全自動で走らせることができるだろう」と自信を見せている。

ゲーム内での全自動運転といえば、『Grand Theft Auto V』でも運転AIの研究が続けられている。TensorFlowと同様にGoogleのオープンソースを使用したものから、Modder達が独自に開発しているものまで、さまざまなAI開発がおこなわれている。同じコースを周回し続ける『マリオカート64』のAIは『Grand Theft Auto V』のものほど大規模ではないものの、ひとりのエンジニアが短期間で運転AIを生み出すことができるのは興味深い。今回作られたAIプログラムは「TensorKart」と名付けられ、GitHubで公開されているので、ソースの内部に興味があるかたはチェックしてみてもいいだろう。