■ はじめに
こんにちは!プロンプト・ウサギです!
最近、AI関連の動画を見ていると、面白い企画をよく見かけます。
例えば、複数のAIに将棋やボードゲームを対戦させたり、同じゲームをそれぞれのAIに作らせて、どちらの完成度が高いか比較したり。
これが、なかなか面白そうなんですよね!
実際にAI同士を対戦させる方法を考えてみました。
■ AI同士を対戦させるには?
大きく分けると、次のような方法が考えられます。
① AIを複数立ち上げて、人間が情報を伝える方法
例えば将棋なら、現在の盤面や直前のコマの動きをChatGPTとClaudeの両方に伝え、それぞれに次の一手を考えてもらいます。
プログラムを書く必要がないので、初心者でも始められます。
ただし、毎回情報を伝えたり、結果を受け渡したりする必要があり、結構な手間がかかります。
② AIのAPIをプログラムに組み込む方法
こちらは本格的な方法です。
ゲームのプログラムにChatGPTやClaudeなどのAPIを組み込み、ゲームの進行に合わせてAI同士が自動的に対戦します。
人間が間に入る必要もなく、まさにAI同士の真剣勝負!
ただし、APIの利用には無料枠や利用条件があり、継続的に使うと料金が発生する場合もあります。
そこで今回は、もう少し手軽な方法を考えてみました。
JSONファイルを使って、AI同士に情報を受け渡ししてもらう方法です。
■ JSONファイルって何?
JSON(ジェイソン)とは、簡単に言えば、コンピューター同士が情報をやり取りするためのファイル形式です。
例えば、次のような情報を保存できます。
- 現在のゲームの状態
- 自分の位置や相手の位置
- これまでの行動履歴
- 対戦の結果
- 次に取るべき行動
見た目は少しプログラムっぽいですが、基本的には「項目」と「値」を組み合わせて情報を整理しているだけです。
例えば、こんな感じです。
{
"player": "ChatGPT",
"position": [3, 5],
"torpedo": 4,
"result": "win"
}
これは、ChatGPTの潜水艦が座標(3,5)にいて、魚雷を4発持っていて、勝利したという情報を表しています。
つまり、JSONファイルを使えば、ある程度 AIが考えた結果をアプリに渡すことができます。
APIを使ってAIを直接接続するのではなく、人間がjsonファイルを受け渡すわけですね。
これなら、無料版のAIでも工夫次第でAI同士の対戦ができます!
■ 今回の対戦ゲームは「潜水艦ゲーム」
今回、対戦に選んだのは潜水艦ゲームです。
簡単に説明すると、海の中に隠れている相手の潜水艦を探し出し、魚雷を撃って攻撃するゲームです。
相手の位置は最初から分かりません。
限られた情報や過去の攻撃結果などを参考に、相手がどこにいるのかを推測していきます。
ただ魚雷を撃てばいいわけではありません。
どこを探すのか?
いつ攻撃するのか?
相手の動きをどう予測するのか?
こうした判断が勝敗を左右します。
AIの考え方の違いを見るには、なかなか面白い題材です。
■ ChatGPTが設計、Claudeがコーディング
今回の潜水艦ゲームも、ChatGPTがゲームの設計を担当し、Claudeが実際のプログラムを作成します。
なんか固まってきました。
そして、対戦するのもこの2人です(笑)。
もちろん、模範演技的な対戦なので、人間が操作するわけではありません。
それぞれのAIが考えた戦略をプログラムにして、ゲーム上で勝負してもらいます。
ここで、もう一つ工夫を加えました。
10ゲーム分の対戦結果を、それぞれのAIに渡してコードを改良してもらうのです。
1回の勝負だけでは、偶然の要素が大きくなります。
そこで10回分の結果を分析材料にして、弱点を見つけ、次のプログラムに反映させます。
こうして改良を重ねたプログラムを「第01世代」「第02世代」「第03世代」と呼ぶことにしました。
世代交代するたびに、AIの戦略が進化していくわけです。
■ 実際に対戦させてみた!
さて、結果はどうなったでしょうか?
第01世代:Claudeの勝利!
いきなりChatGPTがポカをやらかしました。
なんと、索敵にこだわりすぎて、魚雷をまったく撃たないという展開に!
相手を探すことに夢中になって、攻撃することを忘れてしまったようです。
これでは勝てません。
Claudeが勝利しました。
第02世代:ChatGPTの勝利!
第01世代の結果を見直し、ChatGPT側のプログラムを改良。
今度は、索敵だけでなく攻撃にも意識を向けるようになりました。
その結果、辛くもChatGPTが勝利!
ちゃんと反省しているようです。
第03世代:Claudeの勝利!
今度はClaude側がコードを改良。
これがなかなか手強い!
結果はClaudeの勝利となりました。
世代| 勝者| 状況
第01世代| Claude| ChatGPTが索敵に偏りすぎ
第02世代| ChatGPT| 改良によって逆転
第03世代| Claude| Claude側の改良が成功
見事に勝ち負けが入れ替わるシーソーゲームです。
■ Claudeが本気になってきた!
特に面白かったのがClaudeの対応です。
単純に負けた部分を修正するだけではなく、さらに強い戦略を探そうとします。
そこで登場したのが「遺伝的アルゴリズム」です。
これは、生物の進化を参考にした最適化の方法です。
簡単に言うと、複数の戦略パターンを試し、成績の良いものを残したり、組み合わせたり、少し変更したりして、より強い戦略を探していきます。
つまり、プログラムを何度も試して、強いものを選び出していくわけです。
ええ、かかりますよ、時間が……。
AIに強くなってもらうために、こちらもなかなか大変です(笑)。
■ 今回のAI対決は、この辺で終了!
第01世代から第03世代まで試してみましたが、勝者が毎回入れ替わっています。
もちろん、まだ対戦回数も少ないので、どちらが本当に強いのかは分かりません。
もう少し対戦を続ければ、どちらかが明確に優位になる可能性もあります。
ただ、このままシーソーゲームが続きそうな気もしますので、この辺で終了にしたいと思います。
次は、もう少しAIの得意・不得意がはっきり出そうなゲームを探してみるのも面白そうですね!
今回作成したゲームはこちら
GitHubリンク(Google検索窓にコピー&検索)
https://github.com/logicmaker256-prog/submarine/blob/main/submarine-battle-v4-batch.zip
時間のある人は、第04世代以降をぜひ。
■ 今回の学び
今回の実験で感じたのは、AIの優劣だけを比較しても、あまり意味がないということです。
ChatGPTは、索敵にこだわりすぎて攻撃を忘れることがありました。
一方のClaudeは、遺伝的アルゴリズムまで使って、徹底的に強い戦略を探そうとして時間を溶かします。
同じゲームでも、AIによって考え方や得意なことが違うんですね。
そして、その性格がプログラムにも表れてきます。
AIを使うときは、どちらが優秀かだけでなく、それぞれの性格や得意分野を理解して使い分けることが大切なのかもしれません。
■ 今回の結論!
AIの優劣より、その性格を重視しよう!
さて、次は何で対決させましょうか?



