Civ4戦略情報:生産の「あふれ」補正
公開:2006年01月03日CivFanaticsの戦略記事フォーラムに、karmina氏がProduction overflow explained and the return of MMというタイトルの記事を投稿しています。Civ4では、都市の生産物の完成時に、「あふれた」ハンマーが次のアイテムに引き継がれるようになっていますが、そのあふれ分に対する「補正」("correction") がどのようにおこなわれているかを解説した記事です。
この記事はv1.52パッチ以前に書かれたものです。v1.52パッチで補正の計算式が改められ、karmina氏が記事のなかで提案していた方式に書き換えられました。
はじめに
この記事の目的は、Civ4の生産の背後にある数式を分析することにある。さらに、もともとのバグとFiraxisによるあまり素晴らしいとは言えない回避策を説明し、最後に、その回避策を悪用する方法、そしてこの誤った数式が文明の経済にあたえる影響を最小にする方法を概説する。──その答えは、我々全員が消滅を祝ったはずの、都市群の細かい管理にあった。私としては、Firaxisができるかぎり早期にこの数式を修正してくれることを望む。
定義
BP := 都市の基本生産力(タイルから産出されるハンマーと専門家、森林伐採の合計) NP := このターンに生産物を完成させるために必要なハンマー量 P := 総ハンマー生産量 g := 一般的なボーナス乗数の合計(例:鍛冶場からの +25% ボーナス) s := 特殊なボーナス乗数の合計(例:ストーンヘンジに対する石材の +100% ボーナス) TO := 「あふれ」の総計 (= P - NP) C := 「あふれ」に対する補正。生産物の完成時に TO から引かれるハンマー数 O := 実際に適用される「あふれ」 (= TO - C)
都市画面に表示されている生産量の値は、 P - C に等しい。この数字は実際にはどこでも使用されておらず、まったく意味がない。
NP, TO, O の値は引き算で計算できる。ほかのすべての値は、都市画面で生産バーの左側にあるハンマーアイコンにマウスを乗せると、ポップアップで表示される。(重要:ここに表示される値は基本的に P - C である。ゲーム内の数字は概して丸められるので、表示される値はいくぶん異なる場合がある)
森林伐採で得られるハンマー量に関しては、こちらのグラフを参照のこと。
数式
上の変数は、以下の数式のように関係しあう。
P = BP * (1 + g + s) TO = P - NP = C + O
(注記:より厳密に言うと、ひとつ前の生産物からの「あふれ」分が P に追加されるが、単純化のために省いてある。「あふれ」を含むあたらしいプロジェクトが1ターンで完成する場合、上の数式とはいくらか異なる結果が出る)
C は、次の生産物には適用されない、特殊なボーナス乗数の効果を持ち越さないために必要とされる。あきらかに、C を導くための正確な数式は、
C = TO * s / (1 + g + s)
であり、
O = TO * (1 + g) / (1 + g + s) = TO - C C/O = s / (1 + g)
であるべきである。(私の意見では、あふれ分は次のターンに、あたらしい特殊ボーナス乗数の影響を受けるべきだと思う。だが、このような効果は一切ない。これについては後述)
訳注:v1.52パッチで、あふれ補正の方法として上の数式が導入されました。v1.52以降のバージョンを使用している場合、以下の部分を読む必要はありません。
だが不幸にも、Firaxisは計算を誤り、以下の数式を使用している。
C = TO * s / (1 + s) O = TO * 1 / (1 + s) C/O = s / 1
これは一見正しい式であるように見えるが、はっきりと間違っており、sと g の両方が 0 でない場合、奇妙なバグが発生する。
たとえば、特殊ボーナスが無い場合よりも有る場合のほうが、総生産力が小さくなる場合があり得る。上の式を見れば、NP < g * BPである場合、この現象が発生することがわかるだろう。(誤った)あふれ補正による損失分が、通常であればあふれを大きく増加させるはずのボーナス生産力を上回ってしまうからだ。これは稀な出来事ではない。ゲーム後半では、g はしばしば 100% に到達し、あふれがまったく発生しないターンのあいだの損失は、警察国家 (Police State) の 25% ボーナスがわずかに埋めるに過ぎない。
Firaxisは間違いなくこの現象を認識していると私は信じる──が、彼らはバグを調査して小さな数式を修正するかわりに、巨大な回避策を導入してしまった。この回避策により、上で説明された問題は解決されたかに見えるが──じつは別の問題を呼び込んでいる。
Firaxisの回避策
Firaxisはあふれ補正の計算を分割して、「手動で」損失を減少させることにした。どうやら、特殊ボーナスを持つ都市のあふれが、同じ都市がまったく特殊ボーナスを持たない場合のあふれを下回らないようにすることだけが、彼らの目的であったらしい。
リリース版のCiv4で使用されているあふれ補正の完全な公式は、次のようになる:
C = MIN[ TO * s / (1 + s), BP * s^2 / (s + 1) ]
言い換えると、あふれ補正は、f * BP で頭打ちになるように設定されている。(f は f := s^2 / (s + 1) であらわされる)
ここで、頭打ちされた補正値が、特殊ボーナスを持たない場合の値よりも小さくなる場合を考えてみる。これは以下の場合に相当する:
BP * (1 + g) - NP > BP * (1 + g + s - s^2 / (s + 1)) - NP <=> s < s^2 / (s +1) <=> s^2 + s < s^2
これは s が正の場合決して真にならない。
次に、どこが分岐点になるかを計算してみよう:
TO * s / (s + 1) > BP * s^2 / (s + 1) <=> ((1 + g + s) - NP/BP) * s / (s + 1) > s^2 / (s + 1) <=> 1 + g > NP/BP
つまり、補正は NP < (1 + g) * BP である場合に頭打ちされ、これは同じ都市が特殊ボーナスがあふれを起こすのとまったく同じ条件である! さらに、この条件は NP < g * BP よりも弱いので、上で言及したような奇妙な状況は決して発生しない。
もちろん、これは「適切でない」やりかたであり、g > 0 かつ s > 0 である場合は、やはり誤った結果が出る。
戦略的影響
- 分岐点以下の場合、つねに適正以上の生産物が浪費されることになる。というのは、間違った補正因数、
- 分岐点を越えた場合、補正上限により、非常識な額のハンマーが特殊ボーナスなしの次の生産物に受け継がれることになる。これは起こるべきでない結果であり、奇妙な回避策によって導入された明白な悪用点である。
あふれ分は BP ではなく、P に適用されることに注意してほしい。BP と比較するために、ここで「あふれ基本生産」 OBP を導入する。
OBP := BP - NP / (1 + g + s)
悪用可能なハンマー量は、
O - OBP * (1 + g) = (BP * (1 + g + s - s^2 / (s + 1)) - NP) - (BP * (1 + g) - NP * (1 + g) / (1 + g + s)) = BP * s / (s + 1) - NP * s / (1 + g + s)
ここで、このルールを悪用したい場合は、あふれ分を最大化するために細かい管理をおこない、
NP / BP < (1 + g + s) / (1 + s)
となるように設定する。あふれ分は NP = 1 の場合最大となり、BP * s / (s + 1) 分のシールドを勝ち取れることになる。
この条件は分岐点よりもさらに強い条件であることに注意してほしい。というのは、(1 + g + s) / (1 + s) < (1 + g) がつねに成り立つからだ。
- あふれ補正は、まったく同じ生産物を連続で生産する場合を含め、どんな場合であっても失われる。さらに、特殊ボーナスがつかない生産物から生じた通常のあふれであっても、次のターンに特殊ボーナスの影響を受けることはない。
これはおそらく故意の決定であろう。というのは、超過分の──しかしある意味ではすでに「完成した」──生産に特殊ボーナスが適用されるのはおかしな状況ではあるからだ。しかし、これは「補正上限」回避策によって導入された、ただでさえ重大な悪用点を最小限に留めるための決定ではないかと私は想像する。
どちらにせよ、このルールにより──市民の再配置を使うか、または建設順を賢く組み立てるなどの──細かい管理を使って、あふれを最小にすることが推奨される。
s / (1 + s) > s / (1 + g + s)
が使用されるからだ。
したがって、プレイヤーは特殊ボーナスのつく生産物からのあふれを最小化するために、細かい管理を迫られることになる。
浪費分は、
BP * g * s / (s + 1) - NP * g * s / (1 + s)(1 + g + s)
に等しく、NP=1 の場合に最大となる。このとき、BP * g * s / (s + 1) 分のハンマーが誤って失われる。

