Civ4 AI
Civ4 BtS の AI を作ってます。まだ弱いです。でも AI 同士でもう普通に1試合打てるところまで来ていて、それがブラウザで観られます。
↑ 本物です。▶ 再生 か スライダーでターンを動かせます全画面で観る
観られるもの WATCH
AI 同士のタイマンが3試合入っています。デュエル・迅速・貴族、蛮族と小屋あり、50T まで戦争なし、T80 で判定。
- 左上の「判断の理由」に、AI がなんでその手を打ったかが出ます(「斧で殴る、勝率 78%」みたいな)
- 研究の進み・スコア・軍事力の推移も横に出ます
- 地図はホイールで拡大、ドラッグで移動
ツッコんでほしい TSUKKOMI
観てると「いやそこ建てる?」「その斧なんで突っ込んだ」みたいな所がたぶん山ほどあります。それを教えてほしいです。
- 変だと思ったマスをクリック
- 右の欄に一言(「ここは丘に建てる」くらいで十分)
- 「ツッコミをコピー」を押して、チャットに貼る
何試合目の何ターンのどこか、が自動で付きます。
【Civ4 AI ツッコミ】#0184 T59 (12,8) [直して] この斧は突っ込むんじゃなくて丘で見張り
ガチの指摘でも、好みの話でも、ただの文句でも大歓迎です。
一番ほしいのは、昔のセーブデータ SAVES
昔のマルチのセーブ(オートセーブも)が残っていたら、フォルダごともらえるとめちゃくちゃ助かります。ほんとに出すだけで大丈夫です。
- 上手い人が実際にどう打ったかが何千ターン分もあれば、AI はまずそのまねから始められます
- 今は1試合ずつ自分で遊んで記録しているので、年単位のセーブがあると量が桁違いになります
- 名前は消してから使います。BUG などの Mod 入りでも、たぶん何とかします
場所はだいたい ドキュメント\My Games\Beyond the Sword\Saves の中です(multi と auto あたり)。
ここまでできてる STATUS
49 / 50
自分の試合を中で再生して、本物と金・ビーカー・ハンマーまでぴったり合ったターン
数秒
1試合80ターンが終わる時間。一晩で AI 同士が何千試合も打てる
練習中
その自己対戦で勝手に強くなる仕組みを回し始めたところ
正直、強くなる方はまだ全然うまくいってなくて、そこが一番面白いところです。
目指してるもの GOAL
- 人が足りない日に1〜2席入れても、ちゃんとゲームになる AI(隣の人のおやつにならない強さ)
- 初心者がいつでも練習できる、人間っぽい相手
- AI 同士の殴り合いから、誰も知らない筋が出てきたら最高
ここから先は暇なオタク向け(中身の話)
どうやって作ってるか
- Civ4 本体のソース(SDK)と XML を読んで、ルールを Python で書き直したシミュレーターを作りました。戦闘の勝率、国境、交易路が更新されるタイミング、無政府中の研究まで本物に合わせてあります
- 本物のゲームには記録用の Mod を入れて、毎ターンの状態を書き出します。それをシミュで再生して答え合わせ
- 上の観戦席は、そのシミュの試合をそのまま再生しているだけです
Civ4 が AI にとってしんどいところ
- 1ターンにやることが多すぎる(全都市の生産・市民・労働者・兵・研究・税率を同時に決める)
- 結果が出るのが遅い。T10 の首都の場所や、人口いくつで開拓者を出すかの答えが T60 とかにやっと出る
- 霧で相手が見えないし、戦闘も小屋も運
- 上手い人の判断は「この盤面ならこっち」という感覚で、言葉のルールにすると互いにぶつかる。上手い人の指摘を100個以上ルールにしてみたら、1個直すと前のが崩れる、が起きまくりました
ほかの研究だと
全部は追えてないけど、だいたいこんな感じっぽいです。
- 囲碁・将棋(AlphaZero)は自己対戦だけで人間を超えた。ただ、盤面が全部見えて1手が小さいゲームの話
- StarCraft II(AlphaStar)は、まず人間のリプレイのまねから入って、そこから自己対戦で伸ばしてグランドマスター級まで行った。セーブデータが欲しいのはこれと同じ理由
- Civ 系だと、Freeciv を使った CivRealm という研究用の環境があって、強化学習も ChatGPT 系の AI もかなり苦戦しているらしい
- Civ4 だと Better BTS AI や K-Mod が内蔵 AI をすごく賢くしたけど、それでも上手い人には届かない。ルールを書き足すだけだと限界があるっぽい
今の学習
- AI の中の数字(いつ攻めるか、何倍で攻めるか、蛮族の見張りを何体置くか…など25個)を少しずつずらして、元の自分と40試合ずつ戦わせ、勝った方を残す、を繰り返しています
- 今のところ、まだ元の自分に勝ち越す組は出ていません。勝ち負けの運のブレ(±8%くらい)に埋もれるのと、「伸ばす⇔殴る」みたいな一番大きな方針がまだ数字になっていないのが原因っぽい
- 次は、そういう大きな方針から先に探す → 盤面から「勝つまであと何ターンか」を予想する仕組みを試合のデータで覚えさせる、の順でやる予定です