以前 ポケモンの強化学習 AI(1) という記事で、初代ポケモンを今プレイすることの面白さを書いた。ただ、面白さの解説で熱が入ってしまい、本題である技術的なことや、これまで強化学習で勉強したことは書けなかったので、本記事に残しておこうと思う。
ちなみに、現在(2022-08-14)に RBY Cup VIII というものが行われており、本日 2 回戦で勝利した。400 人くらい参加していたので、100 人くらいまで絞られたことになる。初参加ではなんとかやっているなと我ながら思う。
個人的に面白かった試合は これ で、「あやしいひかり」ゲンガーが貢献してくれたなと思う。「ParaFuse」と呼ばれる手法で、相手を麻痺 + 混乱 状態にすることで、 62.5% の確率で相手が行動できなくなることを利用し、 有利な行動を取り続けるというものだ。
ただこのチームはいくつか問題があるので、3 回戦目に向けて調整した方が良さそう。
- ゲンガーには「だいばくはつ」を覚えさせるべき
- 「あやしいひかり」か「ナイトヘッド」を削る
- パルシェン対策として「10 まんボルト」は残しておいた方が良い
- 「10 まんボルト」人員が多すぎた
- チームは予め作っていたが、実戦投入は今回が初だった
- 宮古島の海を泳いだ後にちょろっと確認しただけだったので、ラッキー、スターミー、ゲンガーの 3 体が 「10 まんボルト」を覚えているという稀有な事態に
- 結果的に良かったけど、仮にサイドンやサンドパンが入ってたら苦戦した気がするので、少なくともラッキーは「ちきゅうなげ」もしくは「カウンター」が良かった気がする
プレイングの点では、ルージュラは「ねむる」を覚えていたので、相手にナッシーがいる以上、優先的に生存させる戦略を選んだ方が良かった気がする。眠り要因としての役目を果たしたあと、スターミーが麻痺で行動できない確率 25%に賭け、結果的に死んでしまったが、早めに「ねむる」を発動し、相手のラッキーやスターミーの交代タイミングを読んで目覚めれば良かったと思う。
ただ、相手としても「10 まんボルト」そんなに覚えてるポケモンはいないんじゃね?と思っただろうから、そういう意味では戦略的に裏をついたとも言えなくはないが、まあ偶然のような気もする。
ポケモンの強化学習
本題に入ると、私は初代ポケモンの最適解を知りたいので強化学習を勉強している。強化学習とは、 AI の 1 つの分野で、「報酬」に従って動的に行動パターンを調整していくプログラムを開発することを指す。 Alpha Go が有名で、他にも自動運転やロボットの自律制御の分野で使われていたりするらしい。
私は AI に関して全く門外漢で、新卒で入った会社で中途半端に AI 分野にトライして失敗した経験があるので、あまり AI に関わることに積極的ではなかった1。 UI/UX や DX をまずは進めるべきだと考えて、 Web 系のエンジニアをやったきた。が、 ある医療系で AI 技術に強いスタートアップで業務委託の仕事をさせてもらっている中で、 AI の可能性を再確認し、勉強してみたいなと思った。勉強するには題材が必要なので、好きなポケモンを AI で学習できたら面白そうなので、仕事の合間を塗って勉強している。
これまで、下記の神記事を読みつつ、素朴な Q 学習で迷路を解く AI を自分で実装してみた。 AI と言えるかは分からないが、一応最適な迷路の解は出せた。
https://qiita.com/botany/items/f0ddd54a2d0aa89c5324
が、ここ 1 週間はあまり進んでいない。ある本を買ってみたのだが、 Atari 2600 とか出てきて、ゲームを攻略するのは理解できたが、ポケモンのようにグラフィカルな要素が重要ではないゲームに対してどうアプローチすれば良いかが分かっていない。
みんな大好き「守破離」でやればよいのではないか??
- 本の通りにまずはやってみる。ポケモンは関係なく、一旦は Atari でもなんでも 良いから、本の通りにやる。
- Rails Tutotrial やってた時と同じ、初心に帰る
- まずは独自性とかいらないから、 Python で忠実にやろう。
一応、一橋経済で数学や統計学をやったので抵抗は無いが、実務となると難しい。 ↩︎