「指示厨」を実装した — CPUに横から口を出させる
対戦ゲームを人が遊んでいる横から「そこ違う」「それ拾って」と口を出してくる人種のことを、指示厨と呼びます。その役をCPUにやらせました。というのは名前が後付けなだけで、実装したのはよくあるヒント表示機能です。
盤面に、次に入れ替えるべき2枚が光ります。緑が「けす」(すぐ消える手)、シアンが「しこみ」(今は消えないが後につながる手)、赤が「れんさ」。色は手の意味に使ってしまったので、順位の方は線の太さと番号バッジで示しています。
そもそも、なぜ作ったのか
ここまでの開発日記を読んでいただくと分かる通り、我々はひたすらCPU側を鍛えてきました。最終目標は最強のパネポンAIを作ることです。
ところが途中で、材料が足りないことに気付きます。自己対戦だけでは辿り着けない手を学ばせるために、強い人間の対戦ログが必要になったのです。詳しくはまねっこの日記に書きましたが、AI同士の対局に出てこない手は、いくら回しても永遠に学べません。
さて、強い人間のログが欲しい。しかし人間は都合よく供給されません。ここで発想が反転しました。
……人間の方を強くなるように誘導すれば良いんじゃね?
そういうわけで生まれたのが指示厨です。プレイヤーの上達支援機能、という顔をしていますが、動機は教材の品質改善です。上手くなった皆さんが出すログで、CPUがさらに強くなる。目的のためなら手段を選ばない、実に清々しい機能だと思います。
手加減した助言に価値はない(価値あるものが実装できたとは言っていない)
指示厨の頭脳は、対戦相手のCPU「きたえる」と同じものです。ただし呼び方が違います。
対戦相手としてのきたえるは、レートに応じてわざと弱く振る舞います。手の選び方にゆらぎを入れて最善手以外を選ばせたり、良い手を見つけていながら見送らせたり(要するにミス)しています。ちょうどいい強さの相手であるために必要な演技です。
しかし助言となると話は逆で、指示厨は常に全力の判断を出します。内部的には「レート100=ゆらぎゼロ・ミス率ゼロ」で固定してあります。手加減した助言というのは、控えめに言って有害だからです。教える側が下手なふりをしても、誰も得をしません。
ところが困ったことに、全力を出させたはずの指示厨は、対戦相手のきたえるより浅く考えています。対戦中のCPUは2手先まで読んでから手を決めるのに対し、指示厨は今の盤面だけを見て即答する1手読みです。人間がプレイしている裏で毎フレーム口を出す都合上、重い思考を回せませんでした。全力ではあるが、深くはない。おまけに実際のCPUは人間より遥かに速く指します。表示された通りに操作しても強くならないのは、だいたいこのあたりが理由です。
そしてもう一つ。指示厨は普通に間違えます。原因は追っていません。現実の指示厨も間違えるので、仕様ということにしました。
1つだけだと賑やかさが足りない!
最初は最善手を1つだけ出していました。しかし、これではせっかく鍛えたCPUを使い倒せていません。あれだけ手間をかけて育てた脳なのだから、絞れるだけ絞りたいところです。
ほぼ同時に、異なる手を指示する…。複数人の指示厨を、CPUなら1人で兼任できます。そこで、最善手と僅差の手も一緒に出すことにしました。
そもそも対戦中のCPUは、最善手TOP8までを見比べてから手を決めています。あちらがそれだけ見ているのに、こちらがたくさん見ないのはもったいないですよね。というわけで、たくさん表示するようにしました。ところが多すぎると画面が常にどこか光っている状態になって意味不明だったので、最大3つに落ち着きました!
正直に言うと、盤面のにぎやかしです
ここまで動機と設計を語っておいて申し訳ないのですが、正直あまり役には立ちません。賑やかさが足りないと言って3つに増やした結果、本当にただの賑やかしになりました。
ただ、ひとつだけ確かな効能があります。自分が気付いていなかった「れんさ」が、たまに見つかるのです。
けす・しこみは正直どうでもよくて、赤い「れんさ」が突然出たときの「えっ、そこ繋がってたの?」という体験。これが指示厨の全てだと思っています。自分の目には見えていなかった形が盤面に確かにあった、と教えてくれる。人間が上手くなるのは、たぶんこういう瞬間です。
なお、助言の計算は盤面のコピーに対して行っているので、指示厨をONにしても対戦ログは1ビットも変わりません。遠慮なく使ってください。そして上手くなった皆さんのログが、CPUの教材になります。気付かなかった連鎖に気付いてください。そして、そのログをください。これが今回の作戦です。