立体四目並べAIの実装と戦略
目次
はじめに
今回は、立体四目並べAIの実装についてまとめます。これは通常の四目並べにZ軸を追加した拡張版であり、駒を縦・横・奥行きに積み上げるルールで構築しています。この記事では、基本的な実装から、単純な勝ち手や防御の戦略までを解説し、今後の改良点についても触れます。
この記事を読めば、ルールベースでの立体四目並べAIの基本実装と、その戦略ロジックをサクッと理解できるようになります
AI戦略の選定理由
今回、実装したAIは機械学習ではなく、自分の頭を整理する目的と処理の軽さ、実用化しやすさ、短期間でも安定した結果を残しやすいルールベースを採用しました。
ゲームの基本ルール
ルールの概要
- 盤面サイズ: 4x4x4
- 勝利条件: 任意の方向に同じ色(駒)が4つ連続で並ぶこと
- 駒の積み方: 各列においてZ軸方向に積み上げていく
勝利の判定
- 横・縦・奥行き方向
- 対角線
- 3次元の斜め
初期実装と基本戦略
基本アルゴリズム
実装したAIは、以下のような基本戦略に基づいています。
今回は、長くなるのでソースコードは省いています
最後に、添付してあるGithubのページからソースコードの飛べるのでそこから確認してみてください
-
勝ちの一手
- 自分が3連続している場合、4目を揃える手を優先。方向ベクトルをもちいて盤面を調べて、そろうところがあれば置きます
-
相手の勝ちを防ぐ手
- 相手が3連続している場合、それを阻止する手を優先。上記の逆です
-
必勝形を防ぐ
- 作れば勝ちの形である必勝形を相手が作るのを防ぐ
-
四隅一番下優先
- 四隅の一番下に配置します。基本的に最初における場所の中で一番優先度が高い気がします。
-
リーチ作成
- 自分がリーチを作れるよう、自分の駒のみが2つある列に置く。これは次の相手の行動を強制できます。
-
中央優先
- 最大7方向の4目が狙える非常に価値の高い場所や必勝系にもかかわってくる
-
四隅一番上優先
- ここも7方向の4目が狙える位置です
-
リーチ阻害
- 相手がリーチを作ないよう、相手の駒のみが2つある列に置く。これでダブルリーチなども防げます
-
ランダムな手
- 見つからない場合は妥協で、空いている位置にランダムに配置。
基本的な考え方は、
3マス揃っている状態や、必勝の形ができる寸前など次の一手で勝ち負けが決まる際の行動を優先度を一番高くしています。
他は、序盤で意識する手や勝つことにも、相手の勝ちを防ぐことにもつながる高い価値の、位置を防いだりする手もなども意識して優先順位を付けました。
正直、ここら辺は自分でも迷うところなので実践で調整した部分もあります
問題点と改善案
-
必勝パターンの検出
- 今回はそろった寸前しか検知しないので、攻撃面での検討が難しかったです。また、攻撃に使用するためには、どこら辺のタイミングでどこの位置で必勝形を作成しようかのルールを定義できなかったので難しかったです。
-
攻撃パターンの強化
- 単なる勝ち手の発見だけでなく、より積極的な攻撃手を考慮するアルゴリズムに進化させたい。攻撃は防御よりも計画性が必要なため、今回のような、今の盤面だけを見て、決めるようなルールでは難しかったです
今後の展望(次に取り組みたいこと)
- ターン数に応じた戦略の導入
- 序盤・中盤・終盤で優先すべき着手を切り替える仕組み。
- ログ記録 → 新勝ち筋ルール定義 & 強化学習
- 自動生成したゲームログから有効パターンを抽出してAIを強化。
- 勝利パターンの優先度設定
- 価値の高い連結線をスコア化し、AIの評価関数に組み込む。
- 人間の直感に近い判断ルール導入
- “コーナーは安全地帯”などヒューリスティックを追加。
- 強化学習モデルの組み込み
- ルールベース+学習ベースのハイブリッドAIへの発展。
おわりに
本記事では“行き当たりばったり”のルールベースAIを実装しましたが、初心者〜中級者相手なら十分勝負できます。
次のステップとして、ターン数による戦略分岐や強化学習を組み込んだハイブリッドAIの開発を目指していきます。
ご意見・ご質問はコメントでお待ちしています!
参考リンク
- Reactで作成したコードが書かれているサイト
-
一応こちらで遊べます
今回は、ルールベースのAIを実装することが目的だったのでUIはかなり適当で、このUIのおかげで人間の勝率はかなり低いです