Steamでパラド社の一部タイトルが新型コロナ対策への寄付のためセール中です。

「Stellaris」開発日記#172――AIの見直し

「Stellaris」の開発日記#172が公開されていましたので、その内容をご紹介。今回はAIの見直しについて。Federations発売前の開発日記です。

前回:開発日記#170――パフォーマンスとその他の技術的問題


スポンサーリンク

開発日記

開発日記#172は、今回はAIの見直しについて。

AIの50の色調

  • Stellarisには複数のモジュールがあり、私たちはこれを「閣僚(ministers)」と呼んでいる。それぞれがAI帝国の特定の役割を担当するからだ。これには大きく3つの種類がある。
    • AI外務大臣は外交・連邦・銀河コミュニティ・和平交渉などを司る。
    • AI内務大臣は経済を担当する。彼は民間・軍事双方の予算と建設命令を握っている。
    • AI軍事大臣はすべての地上軍と軍事艦隊を指揮し、戦時の戦略計画策定を担当する。
  • 各省庁にはそれぞれ「閣僚」がおり、ゲーム中のすべての帝国が選択できる複数のオプションがある。こうしたものはすべて多かれ少なかれプレイヤーならそうするだろうという振る舞いをし、ほとんどのAI帝国で使用される汎用性がある。それから、宇宙のモンスター、没落帝国、危機、マローダーのような特殊なものもある。
  • 私たちの他のゲームと同様、AIはMod制作者がスクリプトで設定できる。

軍事AI

  • Stellarisの軍事AIは汎用のもの(ほとんどの「昔ながら」の帝国で使用される)が去年sidestep(注:パラド社スタッフ)によって作り直され、特殊なもの(危機や宇宙のモンスター)はリリースに近づいている。今日はいくつかの改善点についてご紹介する。
  • まず視覚化に取り組み、AIがどのように「考える」かをデバッグしやすいようにした。面白いことに、実際に動作を変更していなくても、見る人にとっては「改善した」ように見える。優れたAIがやっていることを伝えてくれて、より賢く見えるのだ。

  • ではコンソールに「debug_ai」とタイプしてAI帝国を観察してみよう。考えていることが見える。
  • 各星系の上部のドクロマークはAI(軍事大臣)が検討している軍事目標を示す。赤いドクロはAIが選定して艦隊を差し向けたもので、緑は現在は考えていない他の選択肢だ。最後に、個々の艦隊ごとに現在やっていることもわかる。
  • このスクリーンショットの例では、Tiralamがスコア4500でもっとも重要な目標となっており、ここを得るには11.2kの艦隊戦力が必要だと推計している。彼らはKilik Armada、Jinki-Ki-Ti Armada、Grekki Armadaをここに差し向けた。分散した隊形で攻撃するのは戦術的にあまり理にかなっていないため、AIは攻撃前にBroon’s Singularityで再編するよう命じている(今回のパッチで私たちが改善した部分だ)。

戦争の相手側から見たもの。

  • 便宜上、概要はアウトライナーでも見ることができる。
  • この変更だけでAIの弱点を確認することができ、生産AIの明らかなバグをただちに修正できた。面白いのは、場合によっては艦隊が2つの異なる艦隊グループに割り当てられ、二人の提督がひとつの艦隊の指揮権を争い、毎日矛盾した命令を出すのをうまくシミュレートしていたことだ。

危機のAI

  • 次のステップはさまざまな危機を書き直して汎用AIを使用し、これまでの改善が恩恵をもたらすようにすることだった。パッチ2.6では、大ハーン、プレスリン、異次元からの侵略者、コンティンジェンシーが「通常の」帝国と同じAIを使用し、これにひねりを加えて個性を保っている。
  • ネタバレはなしで、以下のようなアイディアがある。
    • 大ハーンは防御に頼らず、最寄りの星系を打ち負かして屈服させようとする。
    • プレスリンは可能な全方向に広がる。
    • コンティンジェンシーは銀河最大の脅威がなくなるまでシステマティックに止めようとする。
    • 異次元からの侵略者は予想しにくいが、彼らの異様な行動の背後には理由がある。
  • 私たちが直面した特に大きな問題のひとつが、艦隊の目標への割り当てだった。艦隊XをZ個の目標の中のYに割り当てるのは簡単ではない。あまりにも薄く広がりすぎたり、価値のない目標を達成しようとするリスクを覚悟でできるだけ多くの目標を達成しようとしているだろうか? 逆にもっとも価値ある目標に集中して、避けられる大きな戦いにつながる可能性があるのでは? どのくらいの頻度で選択肢を再考すべきか?
  • 現在のバージョンでは、すべての目標に艦隊戦力値を設定し、その後目標を達成するのに充分な戦力まで優先順位に従って艦隊を割り当てるか、次の目標に移ることでこれを解決している。このアプローチは利用可能な艦隊のサイズに大きく依存しているため、危機のAIに使ったときに限界を示した(これは艦隊の分割の仕方がわからず、合流しかさせられない)。

私たちはこの知識でなにをすべきか?

  • AIに艦隊を分割する方法を教えるのは非常に興味深いことだ。AIはあまりにも細かく分割しようとする(敵主力艦隊と戦っている場合を除き、ほとんどの目標はそれほど多くの艦隊戦力を必要としない)ため、いいバランスを探すのに何度かやり直しが必要だった。
  • 達成された目標の統計をとってそこから適切な目標数を導き出すなどの複雑な戦略をいくつか試した後、最終的にはより単純なアプローチがより効率的だとわかった。すなわち、帝国の全攻撃艦隊戦力をひとつにし、その後は敵と戦う軍事力にAIがどの程度自信を持っているかによって2個か3個、あるいはそれ以上に分割するか考えるというものだ。

  • AIを改造するのが好きな人がいることは知っているので、リリースされ次第遊んでみたくなるような新たなdefinesを置いておく。
  • こうした変更のほとんどは「Federations」リリースと同時リリースのパッチ(2.6.0)で提供されるが、すべてではない。ご想像のとおり、軍事AIの変更は影響が非常に大きく、十分なテストなしにリリースしたくないため、一部はサポートパッチ(2.6.1)で提供される。

経済AIとはなにか? どこで買えるの?

  • 経済AIとはなにか? そしてStellarisではどのように機能しているのか? 手短に言うと、経済AIはAIがいつ、どのように資源を使うか、そしてそうした資源をもっと得るにはどうすればいいかを決めている。Stellarisでは特に貿易、採掘基地、星系基地のモジュール、政策、布告、職業の優先などをこのAIが扱う。しかしおそらくもっとも重要なのは、経済AIがプレイヤーの惑星でなにを建設するかを扱う点だ!
  • 建設はStellaris経済の中核であり、建造物と区域は経済を活性化し、さらなるPopの成長を促し、さらに多くの資源をもたらす。これまでは経済AIは惑星ごとに建設を行い、長期的な目標は考えられていなかった。定期的な間隔で経済AIは所有するすべての惑星を調べ、スクリプトされた重み付けを使って建設するのに「適した」ものを見つけ、これを建設キューに入れ、次の惑星でも同じことをする。しかしこの方法は建設に本質的な問題を抱えている。

問題

  • 第一に非常にスクリプト集約型であり、大量のスクリプトのメンテナンスとバランス取りを必要とする。建造物の機能の仕方や基本的にゲーム中の経済バランスを変えるあらゆるものを変更すると、大量のスクリプトを書き換えなければならなくなる。
  • 私たちが行き着いたのは、巨大で複雑で、非常に系統立てられた静的なスクリプトだ。これはそれぞれの建造物についてさまざまな重み付けを持つ、if/else文が非常に追跡しにくい(かつ計算も多い)もので、最終的には誰も動作を追跡できなくなった。

例が挙げられていますが省略します。

  • もうひとつの問題は、こうして動作するAIがあまりにも受動的で、先を見越したものではないという点だ。なにか獲得量が少ないものがあり、スクリプトがこれによって特定の建造物を非常に高く評価し、これを建設する。これはけっこうなことだ。
  • しかしうまく行っているならどうだろうか? 次に建設するものをどうやって選ぶ? さらに以下のようなスクリプトを追加する必要がある。すなわち「こうした資源がすべて問題ないなら、これを建設すべきだが、補助資源が必要かもしれないのであまり高く評価しすぎてはならない」という内容だ。これがスクリプトしにくく、簡単に他のスクリプトと衝突することがわかるだろう。
  • これは建造物ごとの各スクリプトにおいて手動でメンテナンスとアップデートをやらなければならないという点でも問題だ。
  • さらに別の問題として、スクリプトでは惑星ごとにこれをやることで、他の惑星でなにが、なぜ建設されたのかがわからないというのがある。つまり、ある惑星ではエネルギーが不足しているためにエネルギー生産区域が必要だと評価し、建設キューに入れている場合、評価スクリプトには状況はまったく同じに見えるため、同じ区域を建設キューに入れる可能性が高い。すると最初の区域の建設が完了して満足しても、2つ目の区域が不必要な余剰分を追加することになる。
  • これは小さな問題のように感じるかもしれないが、これが12の惑星で起こった場合、AIの経済は完全におかしな方向に振らされ、結果は巨大で長期的なものになる。AIは別のものを建設する余裕を作るために一部の区域を破壊しなければならないことになり、努力を完全に無駄にしてしまう。
  • 他にも小さな問題があったが、私(注:パラド社スタッフのsidestep氏)が対処したいのは以下の問題だった。
    • 複雑でなくメンテナンスも難しくないスクリプト
    • より先を見越したAIの計画立案
    • 惑星ごとに孤立していない建設
    • 全体的な経済AIのパフォーマンス向上

解決策、またの名を計画

  • 素晴らしいStellarisのQAは、AIがある時点で達成すべき経済指標のリストをまとめた。ゲーム序盤のものとゲーム終盤のものだ。私はどのようにこの見直しを行うかについて、AIは経済的に起こったことに反応するだけでなく、実際に長期の計画を持つ必要があると結論づけた。
  • これはQAがまとめた経済指標とうまく噛み合っていたため、「ゲーム内で実際に目標を立てればいいんじゃないか?」と考えた。こうしてAIの経済計画は生まれた。
  • この経済計画は新たな経済AIの中核であり、計画からAIが計画の目標を達成するために必要なものを正確に導き出し、長期において実行する方法を決定する。
  • 計画は完全にスクリプト可能で、単にAIが目指す目標とその時期を設定するだけだ。計画はゲーム序盤・中盤・終盤にそれぞれ存在し得る。こうした計画にはpotentialトリガーやAIのウェイトがあり、誰が、いつ、なぜAIは特定の計画を選択するのかを正確にスクリプトできる(計画は達成されるか、もはや有効でなくなったときにのみ置き換えられる)。

  • これは通常帝国が使用するデフォルトの序盤の経済計画だ。potentialトリガーは例えば集合意識がこの計画を使用しないようにする。というのは、これは彼らが必要としない消費財を生産する状態でスタートするからだ。
  • 以下は計画例でスクリプト可能なフィールドの説明だ。
    • type = early
      • typeフィールドはゲームのどの部分でこの計画が有効であると見なされるかを決定する。上記の例ではゲーム序盤に有効になり、ゲーム設定でゲーム中盤設定された年まででのみ考慮される。
    • income = {}
      • incomeフィールドはAIがこの計画を持っているときに達成しようとする主な経済計画の目標が含まれる。ここではすべての戦略資源もスクリプト可能で、それにAIが必要とする純収入が続き、これがAIが資源の目標を達成したとみなすものとなる。ここにスクリプトされていない資源は、AIがその資源を生み出すものを積極的に建設しようとしないことを意味する。
    • focus = {}
      • focusフィールドはAIが特に獲得しようとすべき資源について特別な集中目標(純収入)を設定するのに使用する。このフィールドはAIが一定の純収入値を下回らないようにし、赤字でなくても早期に特定の資源を確保しようとさせるのに最適だ。鉱物や合金は、AIが競争的であるには大量の生産を必要とするため、ゲーム序盤に注力する資源のいい例だ。ゼロ以上であるだけでは充分でない。
    • pops = 500
      • popsフィールドはAIが達成しようとするPopの数だ。この数に達してもPopの増加を止めはしないが、目標に到達するとPopの成長と建造物の建設は重み付けがずっと低くなり、より多く資源を生産をするようになる。
    • empire_size = 1.25
      • empire_sizeフィールドはAIが帝国膨張度を維持しようとするしきい値を割合で示す。この例ではAIがゲーム序盤には帝国膨張度をキャパシティの125%に保つべきであることを意味し、これによってペナルティが多くなりすぎず、しかしある程度は許容できるようになる。
    • potential = {}
      • potentialフィールドは標準的なトリガーフィールドで、AI国家をスコープとし、この計画を使用できる国家の種類をスクリプトできる。基本的な計画のpotentialは様々な種類の帝国が必要な資源を生産するようにするだけだが、戦争中や連邦にいる場合の特別な経済計画をスクリプトすることもできる。
    • ai_weight = {}
      • ai_weightフィールドはAIが特定の計画をどれほど使用するかをスクリプトできる標準的な重み付けのフィールドだ。現在はひとつの国家種別・時代あたりにひとつの計画しかないため、すべてのウェイトは1にしているが、さまざまな計画をスクリプトして、例えば帝国のパーソナリティ、志向、その他のAIプロパティに基づいて異なる重み付けをすることもできる。

計画の実行

  • AIは定期的に現在の経済状況(収入、赤字、予算など)を調べ、現在アクティブな計画で設定されている目標と比較する。ここから目標を達成するために必要なものを正確に導き出し、建設計画を作る。建設計画は基本的にはAIがさまざまな惑星で建設したい建造物(または区域)の優先順位のリストだ。

  • 建設計画は(注:コンソールから?)「debugtooltip」を有効にして建造物スロットにマウスオーバーすると表示できる(数値はAIが計算したスコア)。AIは妥当でない古い計画に固執することがないよう、定期的にこの計画を再計算する。
  • AIは、建設できるもの、建設時にその建造物が生み出すもの(職業枠からの資源を含む)を正確に調査することで建設計画を作る。そして経済計画から認識される目標をできるだけ効果的に達成するように建造物を組み合わせる。もちろん、これには建物の維持費や現在の技術的な制限が考慮される。
  • このシステムの利点は、AIが特定の建造物を建設するタイミングを明示的にスクリプトする必要がなくなり、コードで各建造物が生み出すものを動的に算定できることだ。これはつまり、AIがどのようにさまざまな資源を生み出す新たな建造物を扱えばいいのかを手動でスクリプトする必要がなくなるため、そうした建造物を素早く追加できるということだ。
  • さらに、この建設計画は建造物がもっとも多くのものを生み出す惑星を考慮してそこにその建造物を建設しようとするため、AIが「精錬惑星」のような資源生産に特化した惑星を作りやすくなる。また、既に無料の職業枠がある惑星にはなにも建設しない。こうしたことは惑星ごとではなく帝国全体で行われるため、AIは惑星を個別に考慮するのではなく、全体的な目標を念頭に置き、これに向かって動くことができる。
  • AIは依然としてすべての惑星を調べ、住居、快適度、その他の惑星固有の資源の不足がないかを監視する。しかしこうした建造物も経済計画の一部であるため、本当に別の資源が必要ならば、しばらくの間は惑星を快適度がマイナスの状態にしておかなければならないかもしれない。
  • AIがどのようにして建造物に優先順位をつけているかを説明するには、AIが建造物や区域をどのようにスコアリングするかを見ていく必要がある。スコアリング機能は以下のようなパラメーターを考慮する。すなわち計画の目標達成に必要な収入、集中目標達成に必要な収入、現在の収入と不足分、生産された資源、生産されたその他の資源(快適度、犯罪、住居など)、最後にそれがPopの成長や製造に寄与するかどうかだ。
  • ある建造物はこうしたパラメーターからそれぞれスコアを獲得し、このスコアは現在そのカテゴリーでどれだけ不足があるかと、この建造物がそれをどれほど改善するかについて、定義されている乗数と合わせて計算される。これが現在不足している資源を生み出す場合や、集中目標達成に近づくことになる場合、さらにスコアを追加する。
  • このシステムは建設キューに入れた建造物をすべて記憶しているため、4つの鉱物区域をキューに入れ、それが鉱物の不足を補う場合、5つ目の鉱物区域は赤字による追加のスコアを獲得しない。

  • これはスコアリングされたパラメーターそれぞれに適用される乗数で、改造可能だ。
  • 簡単な例で説明しよう。Blorgは現在純収入が-1の鉱物を除いてすべての資源が安定して得られており、鉱物収入の目標が200、鉱物の集中目標が30の上で示したようなデフォルトの計画を使っている場合、アルゴリズムは鉱物区域をスコアリングする。
    1. 現在、Blorgには目標達成のために鉱物の純収入が200不足しており、収入の不足分が相対的に大きいために鉱物区域に高い基礎スコアを与える。
    2. 鉱物区域は集中目標に必要な資源を生み出すため、スコアに定義された係数をかける。
    3. Blorgは現在鉱物が赤字のため、さらにスコアに定義された係数をかける。
  • その後、アルゴリズムは建設計画に建造物の優先付けに使うスコアを送り、Blorgはすぐに鉱物区域を建設する。
  • これはどの建造物でも同様に機能する。重要なのは目標からどれだけ不足しているのかを相対的に評価し、この目標からすべての計画された建造物の資源を差し引くことだ。つまり、鉱物の不足が2だけならスコアはあまり高くならず、鉱物を生み出す建造物をひとつキューに入れたらAIはもうそうした建造物を考えなくなる。

計画の評価

  • では、このシステムは私が着手したすべての問題に対処できるか? できる!建造物ごとに複雑なスクリプトを書く必要はなくなり、かわりに全体的な計画を調整してAIがある資源をどれほど重要に考えるかに影響を与えられるようになった。計画によって、AIが赤字やできごとに対応するだけでなく、常に先を見越すようになった。AIは惑星ごとに考えるのではなく、全体の一部として考え、すべてが計画によって結びついている。
  • これはすべて素晴らしい回答に見えるが、では経済AIのパフォーマンスは改善したか? まあそうだろう! 私たちのテストでは、はるかに堅牢なAI経済と、経済全体のよりよい管理を確認した。これには本当に満足している!
  • もちろんこれは私だけの手柄ではなく、QAや他の開発者からも多くの助けを得た。彼らがいなければこんなにうまく行かなかったと思うし、非常に感謝している。もちろん、「Federations」リリースが迫る中で、私はコミュニティのみなさんがこれをどう扱い、どのようにこれを改造するのかを見てみたいと思っている。
  • 最後に、私はもちろんみなさんがModに費やした大変な努力を忘れていない。古いスタイルの建造物スクリプトやウェイトは、AIが使う経済計画が存在しない場合は依然として機能する。つまり、すべての計画を削除するか、AIが利用できるすべての計画を達成した場合、惑星ごとに建設する古いシステムに立ち返り、以前の建造物のウェイトを使用するということだ。

スレッド内からの追記

この専門家の職人は行政官になる可能性があるが、職人は現時点では彼らにもっとも適した専門職階級の職だ。労働者階級の職は下の階級のため考慮されない。

  • 経済AIを支援するために行ったもうひとつの小さな、しかし重要で素晴らしい変更は、デバッグツールチップを使用して職の重み付けについてPopが度の職を好むか見えるようにしたことだ。この情報をはるかに見やすくすることで、採掘ロボットが自動的に採掘職を優先しなかったような多くのバグを修正できた。

質疑応答

Q1:危機の拡大がゆっくりであることについて、なにか修正された?

A1:先に述べたように、新しい軍事AIはこのパッチの継続的な着目点であり、おそらく次のパッチになる。これまでは主に小さなスケールで着目していたが、今は手を出さずにデータを集め、長期的にどうなるかを確認し、それに応じて調整しようと計画している。さらに改善する方法について多くのアイディアがあるが、さらなる変更の前にもう少し具体化しようと思っている。

Q2:AI計画は帝国種別に固有の「ビルド」はあるの? 例えば技術官僚制帝国なら合金への投資を強制しない限り科学に集中するとか。

A2:現在そのような特定の計画は存在しないが、システムは用意されているのでプレイヤーが作るのは簡単だ。例えば一般的な「科学重視」の計画を作って、技術官僚制帝国でのウェイトを高くすればいい。あるいはpotential = {}トリガーで技術官僚制限定の計画を作ることもできる。

Q3:AIに計画させるだと? 狂っているのか!? こんなことを許したらなにが起こるかわからない。StellarisのAIが私のコンピューターからインターネットに逃げ出したらどうなる? 私たちはここでこれを殺さなければならない。全人類の脅威になる前に。

A3:遅すぎる。計画は既に実施されている。*ブザー音*

Q4:AIは経済計画で潜在的な技術の改善も考慮するの? 例えば、鉱物の不足がある場合、より多くの区域を建設するのに加えて採掘技術の研究を優先する? あとゲームの進行に合わせて区域を破壊/再建設する?

A4:研究のAIにはタッチしていないが、それは素晴らしいことだ! 破壊/再建設については、AIは建造物を破壊するときにはdestroy = {}トリガーとai_weight = {}トリガー(記憶が正しければウェイトが0より小さいとき破壊する)を見るため、スクリプト経由でまずい建造物を破壊するはずだ。

Q5:経済的なパフォーマンスが優れていると言うけど、ゲーム中盤に人間の重大な敵になるくらいには強い?

A5:人間のプレイヤーは常にAIを打ち負かすだろう。私たちはAIができないようなことができる。目標はAIを(どのような意味にせよ)より「競争力のある」ものにすることだった。私たちが見てきた結果は、AI経済がずっとよく拡大し、以前のように停滞していなかった。また、高難易度では中盤以降は非常に危険な相手になり得る。

Q6:巨大構造物とかアセンションパークとかセクターAIについてはどうなったの?

A6:残念ながら、セクターAIや巨大構造物、アセンションパークについては今回の見直しの範囲外だった。期間が非常に限られていたため、中核的な経済AIをよりよく、より堅牢にすることに集中したかった。ゲーム終盤の「高パフォーマンス」や採掘ステーションを破壊して別のものを建設するような特別な修正は時間がなかった。

Q7:Stellarisで唯一賢明な戦略はドゥームスタックでは?

A7:それが問題だ。いつもプレイヤーを踏み潰すAIと戦ってどれほど面白いだろうか? 面白いAIよりも効率的なAIを作るほうが簡単なことがある(極端な例として三目並べを考えてほしい。隙のないものを作るのは簡単だ)。私たちがフィードバックを気にしているのはこういう理由だ。


次回:開発日記#173――Federationsはもうすぐ!(パッチノートつき)

コメント

  1. 内政のAI負担が大きいならAIは専用の簡易内政でいいと思うんだけどな

    • プレイヤーとAIが平等じゃないと怒る人も中にはいるので・・・

      • 怒るというか、AIの裏側があまり手をかけられてないと知らされると白ける人は多いな。
        実際には思考の柔軟複雑さで人間に叶うわけないのはわかりきっているとしても、例え実質接待プレイだとしても、白けないだけの納得感は大事だ。

    • 別の簡易経済システムを作るとなると、作る側からしてもAI以上に調整とデバッグが厄介だったりする
      PC負荷の軽減が目的なら有効だけど、Stellaris AIのPC負荷は比較的小さいから出番は無いだろう

  2. 大ボリュームの更新。翻訳お疲れ様です。

  3. リリースから数年かかってやっとそれらしい内政AIの核ができたね。
    動作が軽くてそこそこ合理的な建設ができるようになったなら、次はほかの改善にも着手できるだろう。
    軍事のデザインが単調でショボすぎるので、全面的な作り直しを期待したい。

  4. 長文翻訳ありがとうございます。開発の想定通りに動けば、ステラリスもまだまだ頑張れそうだ

  5. 質疑応答のQ3好こ

タイトルとURLをコピーしました