2018/10/02:パラドゲーの過去バージョンの利用方法についてはこちらの記事をご覧ください。

「Hearts of Iron IV」開発日記2018年2月21日――パフォーマンスとAI

「Hearts of Iron IV」開発日記2018年2月21日分が公開されていましたので、その内容をご紹介。今回はAIとパフォーマンスについて。

前回:開発日記2018年2月14日――国家形成と実績


スポンサーリンク

概要

開発日記2018年2月21日は、AIとパフォーマンスについて。

  • 私(注:パラド社スタッフのGroogy氏)はEU4チームから1か月間HoI4チームと同じ塹壕で戦うべく召集され、AIとパフォーマンスをサポートすることになった。今日はこれらのことについて述べる。

AI

  • 私は発生しうる本当にあてにならないケースを解決するため、守備命令の改良にほとんどの時間を費やしてきた。あてにならないケースというのは、2ユニットをベルリンではなくマグデブルクに配置すると、首都が完全にがら空きになるというようなものだ。だが、命令を出したすべてのポイントに配置するだけのユニットがない場合でも、守備命令がずっとよく機能することを重視した。

プロヴィンスのウェイト

ステートのウェイト

  • まずユニットコントローラーがしようとしていることをプログラマーが視覚的に検査することができる新たなツールをHoI4に実装した。この大変な仕事の後、守備命令を書き換えてどのようにユニットを配置するかを変更した。ここには多くの問題があり、みなさんもときどき体験したことだろう。例えばユニットがあちこちに移動したり、ユニットが間違ったステートやプロヴィンスを優先したりということだ。
  • では私がやった新しいこととはなにか。ユニットがどこに行くべきかというルールを決めている古いロジックの代わりに私が大嫌いなものを使った。すなわち数学だ。主な違いとして、ステートごとに今ユニットを取り除くことがどれほど「痛みを伴う」ものかを計算する。それぞれのステートでこれを計算することで、守備命令を実行するにあたってもっとも痛みの少ない方法を探し、最終的に均衡点のようなものに落ち着く。
  • これによってユニットが守備隊としてどこに行くべきかをコントロールすることが非常に容易になり、またユニットが最終的にどこにいるかは上の画像でわかるようなウェイトの形にずっとよくマッチするようになった。
  • 私たちが長い間計画し、最終的に実行したものは、AIの行動の制御をより柔軟なものとすることだ。そのために、私たちは「AI戦略計画」と呼ぶシステムを使っている。これはAIがスクリプトされた条件に基づいて国家方針や優先づけを行うときに特定の方法で行動するようAIに伝達するというのが本質だ。これを英語にするのはBratyn(注:パラド社スタッフ)の以下のいくつかの例示に譲る。
  • 戦略計画が役に立つのは「史実でないドイツ」のようなケースにおける「互換性のある」AIの振る舞いを確保するときだ。ヨーロッパの列強についてのAIの振る舞いの多くは、ドイツがファシストのままであり、ヨーロッパにおいて戦争を引き起こすということを前提としていた。これはつまりAIイタリアは通常はドイツと同盟しようとし、AIフランスも(史実モードがオンなら)イギリスと同盟しようとするが、一方で計画され予測された非史実シナリオが予期しないことは問題が多かった。
  • 戦略計画を使うことで、私たちはこうしたAI国家に世界情勢の変化に合わせてある程度までロジカルに行動させることができるようになり、ゲーム全体を通して常にチャレンジングなものとなった。ドイツで民主化したらプレイヤーは唯一の敵(ソ連)を得て最終的には連合国とともに戦争になるだけだが、これでは満足なゲームとはとても言えない。新たな戦略計画はドイツの国家方針「ヒトラーへの反抗(Oppose Hitler)」完了をもってフランスがロードする。これはどのような政治的な方向性を取るのか、ドイツのプレイヤーからさらなる情報を得るまで遅延し、「待機状態」となる。
    • ドイツがドイツ帝国を復興し、「真の敵の重視(Focus on the True Enemy)」を選ぶと、フランスは待機状態を解除してイギリスに接近し、ドイツの植民地主義への対策を進める。本質的には、この場合のゲームはドイツがファシストではなく中立主義であること以上の変化はない。戦争も同様に行われ(同じような歴史の流れではないにもかかわらず)、一方では連合国、もう一方ではソ連と戦争をする。
    • ドイツがドイツ帝国を復興し、「共産主義者の国外追放(Expatriate the Communists)」を選択した場合、こうした共産主義者はフランスに移って共産主義に移行する国民精神となる。フランスは待機状態を解除して共産主義国となり、英独同盟に対抗するためにソ連に接近する。
    • ドイツが民主化すると、フランスは待機状態を解除して「ヴェルサイユ条約の見直し(Revise Versailles)」を選択する。いくらか予測不可能性を持たせるために、次にどの方向に行くかはAIによって決まる。共産主義国となって自分の陣営を立ち上げるかもしれないし、あるいはコミンテルンに入って独ソ戦が始まったら二正面戦争を強いるかもしれない。代わりにフランスがファシストになるかもしれない。その場合は「イタリアの支持を求める(Woo Italy)」に進んで南西ヨーロッパで新たにある程度強力なファシスト陣営を立ち上げることになる。似たような戦略計画はイタリアにもあり(AI戦略のリベラルな適用も……(?))、この同盟は安定したものとなる。フランスの新たな方針である「民主主義国の解体(Dismantle the Democracies)」はドイツが民主制であるときに選択可能で、AIはドイツがソ連と戦争しているときに高い確率でこれを取る。これはゲームをよりダイナミックにし、ドイツが民主主義を選んだ場合でも大きな敵との戦争があるようになっている。
  • 戦略計画は中国のAIにも使用しており、インフレのメカニクスをどのように扱うかや、政治闘争で平和的に政権を奪取しようとするときに中国共産党AIが中国で平和を保つようにすることなどを行う。全体的に見て、私とArchangel85(注:パラド社スタッフ)にとって、これはゲームプレイのリアリティと、なによりも重要なことだが、非史実ルートでの面白さを確保する上でかけがえのないツールだった(そしてこれからもそうだろう)。私たちはこの基礎の上で作業を続け、国家が史実でない状況や、プレイ全体を通して世界に起こり得る一般的な変事に対応することについて「より賢く」なることを望んでいる。

MOD制作者向けのスクリプトは省略します。

パフォーマンス

  • ゲーム終盤のパフォーマンスは私たちのゲームで常に扱いにくい難問であり続けてきた。コーンフレークでは私たちができる最善を尽くしてコードを改良した。

  • パフォーマンスを計測し、ゲームの遅延を引き起こしているものをピンポイントで改善するために悪いところが明らかになるように、私は素晴らしいグラフを生成する小さなスクリプトを書いた。
  • パフォーマンス改善のため、私たちは多くの小さな改善を施した。AIが経路探索することは大きく減った。ゲームは時間ごとのアップデートに1か国あたりどれほどの長さがあるかに応じて、コア間で自動的にワークロードのバランスをとるようにした。フロントシステムはパフォーマンスを独り占めしないように大幅に合理化された。

  • 私たちは非常によくやった。これが今週の私たちのハードワークの結果だ。
  • より効率的にする方法を見つけることとCPUのコアをよりよく利用することにより、私たちはゲーム終盤の全体的な改善を行った。だがここで終わりというわけではなく、ゲーム終盤をより楽しめるようにするために私達ができることはまだたくさんある。

質疑応答

Q1:柔軟な戦略はフランスにだけ?

A1:今のところフランスとイタリアだ。もちろん他の国にも作るつもりでいる。これは戦略計画を作るのにどれだけの時間がかかるかという問題だ。フランスとイタリアは史実でないドイツではまったく機能せず、ゲーム全体を台なしにしてしまうため、明らかに優先度が高かった。

Q2:史実モードがオンのときに史実と違うことが起こったらどうなるの?

A2:例えばドイツが非史実ルートを進んで史実モードがオンだった場合、戦略計画は史実の方針リストを上書きする。その結果、史実モードを選ばなかった場合とまったく同じ振る舞いをする。プレイヤーが非史実ルートを行くときに史実モードのままでいる必要性がないからだ。

Q3:これを読むと民主主義ドイツがフランス・イギリスと手を組んで共産主義国と戦うルートがないみたいだけど、そういうことはなくなるの?

A3:そのとおり。内部テストで得た最大のフィードバックは、民主主義ドイツが退屈だということだ。なぜならすべてのヨーロッパの小国が自陣営に統合され、それにイギリスもフランスもアメリカも加わって(ソ連が連合国に入っているポーランドに宣戦布告すると全員が参戦する)ソ連との一正面戦争になる。これは非常に一方的で早く終わってしまう戦争であり、すべての大国が味方なので戦後にやることがなにもなくなってしまう。

Q4:チベットと中国の国境についてはもう一度尋ねたい。西康省の西半分はチベットの一部で、現在のチベット族自治州とほぼ同じだ。リンクを見てもらえばわかるけど、戦争時にチベットによって占領されたのは西康省の東半分で、チャムドなどの西半分は既にチベットの一部だったと考えられる。HoI4の今のマップは国民党政府の行政区画案に基いているように見える。「案」と私が言うのは、1936年時点でチベットやチャムドは事実上中国の一部ではなかったからだ。WtTは中国のDLCだから直らないんじゃないかと思ったけど、やっぱり直さないつもりのように見える。これが微妙な問題だというのはわかるけど、これについて書くのはもう3回目なので、もし変えるつもりがないなら少なくとも私にはどういう考えなのか聞かせてほしい。

A4:(podcat氏)もちろん詳しく調査する価値があるだろうとは思っている。しかしアジアのマップをこれ以上いじくり回すのはタイミング的にリスキーだ。

(Archangel85氏)チベットの国境についての主張は承知しているが、この国境は最初にゲームがリリースされたとき(私が参加する前だ)に選ばれた国境なのでさらなる調査をする必要があるし、それはこれについてやる価値があると考えられる以上の努力でなされたものだ(「HoI3でこうなっているのはHoI2でこうだったからだ」という話題と「AIに問題がある」という話題が出る確率は通常は半々だ)。私はこれについてメモを取っていたし、リリース時や現在作業中のフォローアップパッチで見直すつもりだ。

(質問者)回答してもらえてとても感謝している。気づいてくれていたと知って安心したよ。

Q5:戦略計画のスクリプトが全部の国家に付与されるのは無理そう?

A5:これを思いつくのがちょっと遅かった。だから少数の国家だけが持つものになるだろう。でもさらにこれを開発して追加していくことを予定している。

Q6:アジアでは日本向けにこれが実装されたりしないの? あとイギリスとかアメリカのスクリプトは?

A6:新たな方針ツリー向けのAIを作るときの一部として他国のリアクションスクリプトを追加することになると思う。


来週はすべての内容や変更点の要約とその他の細かな点について。

次回:開発日記2018年2月28日――1.5とWaking the Tigerのまとめ

コメント

  1. 戦略計画いいね!
    あとゲーム後半のパフォーマンス改善もグッジョブ!
    どちらもHoI4の問題点として挙げられていた大きな要素だと思うのでこの調子でどんどんパワーアップしてくれると嬉しいなあ

  2. AI戦略計画そのものは良いですが、少数の国しか持たない仕様というのは何とも残念ですね……

  3. ドイツが「世界大戦」を引き起こすだけの国家でなくなったことを評価したい。

  4. これからはいろいろな国家が空気を読んでくれるようになんだな

  5. パフォーマンスの改善が割とマジでうれしいな

  6. 原文では戦力計画はmodderが弄れる部分となっているのでしょうか?
    であれば本家の対応をまたず様々なif史modが登場しそうですね