Civ4 AI

Civ4 BtS の AI を作ってます。まだ弱いです。でも AI 同士でもう普通に1試合打てるところまで来ていて、それがブラウザで観られます。

観られるもの

AI 同士のタイマンが3試合入っています。デュエル・迅速・貴族、蛮族と小屋あり、50T まで戦争なし、T80 で判定。

AI がなんでその手を打ったか(「斧で殴る、勝率 78%」みたいな)も見えます。

ツッコんでほしい

観てると「いやそこ建てる?」「その斧なんで突っ込んだ」みたいな所がたぶん山ほどあります。各試合、片方の文明(右上の 💬 の横の名前)の師匠になったつもりで、教えてください。

  1. 気になったマスをクリック(のろしが上がります)。全体の話ならクリックなしで OK
  2. 一言書いて Enter

例:「この牛に牧場」「労働者がここに道を引くのはおかしい」「全体的に開拓者を作りすぎ」。送ったツッコミは地図に印が残って、全部こっちに届きます。名前はなくて大丈夫です。

ガチの指摘でも、好みの話でも、ただの文句でも大歓迎です。

一番ほしいのは、昔のセーブデータ

昔のマルチのセーブ(オートセーブも)が残っていたら、フォルダごともらえるとめちゃくちゃ助かります。ほんとに出すだけで大丈夫です。

場所はだいたい ドキュメント\My Games\Beyond the Sword\Saves の中です(multi と auto あたり)。

ここまでできてる

  1. 本物の Civ4 だと遅すぎるAI が強くなるには何千・何万試合の経験が要るけど、本物は1試合に何時間もかかる
  2. なので「練習用の Civ4」を作ったルールを丸ごと作り直した物。本物で打った試合を流し込むと、金・研究・生産まで本物と同じに進む。中身はほぼ本物
  3. その中で AI 同士が打ちまくる1試合が数秒、一晩で何千試合。勝った打ち方を残して強くしていく。上の観戦席の試合もここから

1と2はできました。3は回し始めたところで、正直まだ全然うまくいってません。そこが一番面白いところです。

目指してるもの

ここから先はオタク情報(中身のはなし)

どうやって作ってるか

  • 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%くらい)に埋もれるのと、「伸ばす⇔殴る」みたいな一番大きな方針がまだ数字になっていないのが原因っぽい
  • 次は、そういう大きな方針から先に探す → 盤面から「勝つまであと何ターンか」を予想する仕組みを試合のデータで覚えさせる、の順でやる予定です