無限三目並べの必勝法
無限三目並べと言うゲームがあります。三目並べ(マルバツゲーム)に似たルールで、自分のコマの4つ目を打つ時に自分の一番古いコマが消えるというゲームです。
このゲームのQ学習をJavaScriptで作っていました。Q学習した結果を対戦相手として遊べるようにしているので、やってみてください。だんだん強くなるようにしています。
https://akiyah.github.io/3x3/public/?type=ThreeState
(最初は弱いですが、ある程度経つと強くなってきます。)
この実装を応用して、無限三目並べの必勝法を計算させて記述しました。(Q学習があんまりうまくいかなくて、原因を探すためにも必勝法を知りたかったのです)(必勝法を探すロジックは、全盤面のパターンを内部的に持ち、どちらかの勝利が確定している盤面から、打つ手を逆に辿って計算しています)
先手必勝です。先手の最初の手は上、下、右、左のどれかで、それ以外では必勝ではありません。対称性を除いて、必勝法の画像では「上」を選択しています。
後手の最初の手は対称性を除けば5通りあります。結果的には、どのパターンでも先手が勝てます。後手が最も長く生き残るのは、左下か右下を選択したときで、先手が勝つまで13手かかります。
決着がつく最後の盤面は、どれも似ていますね。後手の一番古いコマが消えたところに先手が打って勝利ですね。
必勝法を見つけたのはいいですが、覚えるのはちょっと大変ですね。一本道のところもあるのですが、正しく選択しないと負けてしまう箇所もあります。
3x3のマス目を使った対戦ゲームはまだ他にもありそうなので、今後は別のルールでQ学習と必勝法探しを続けていきたいです。