戦闘の残存率は強さの比で決まる?

戦闘モデル与ダメージ1兵種部隊の強さ

はじめに

戦闘の結果は「総力」だけで決まるのかな? 私はこの戦闘の仕組みに興味を持ちました。

この記事では非常にシンプルな1対1戦闘を題材に、総力ではない強さの指標を定義し、その比λ\lambdaで、勝者の残りの兵士数を推定します!

モデルの定義

まず、何を仮定するかをはっきりさせます。

2つの陣営(1と2)がいて、各パラメータは:

戦闘中の変化を次のようにモデル化します:

陣営2の攻撃で陣営1の兵士数が減少する速さは、A2D1Y2\displaystyle \frac{A_2}{D_1}\sqrt{Y_2} に比例する 攻撃力・防御力という用語は、いろいろな使われ方があるのでどちらかというと数式の定義の方を見た方が良い

数式で書くと:

ΔY1=−A2D1Y2\Delta Y_1 = - \frac{A_2}{D_1}\sqrt{Y_2}

同様に陣営2も:

ΔY2=−A1D2Y1\Delta Y_2 = - \frac{A_1}{D_2}\sqrt{Y_1}

Y\sqrt{Y} を使っているのは、「兵士数が多いほどダメージも増えるが、1人あたりの効率は落ちる」という状況を表していてこのシステムに興味を持った最初のポイントでした。

不変量を見つける

ここから少し数学が難しいですが、コツは「両辺を上手く掛けて整理する」だけです!

ΔY1\Delta Y_1 と ΔY2\Delta Y_2 の定義式の両辺にそれぞれ A1D1Y1A_1 D_1 \sqrt{Y_1} と A2D2Y2A_2 D_2 \sqrt{Y_2} を掛けてみます。

A1D1Y1⋅ΔY1=−A1D1Y1⋅A2D1Y2=−A1A2Y1Y2A_1 D_1 \sqrt{Y_1} \cdot \Delta Y_1 = - A_1 D_1 \sqrt{Y_1} \cdot \frac{A_2}{D_1}\sqrt{Y_2} = - A_1 A_2 \sqrt{Y_1 Y_2} A2D2Y2⋅ΔY2=−A2D2Y2⋅A1D2Y1=−A1A2Y1Y2A_2 D_2 \sqrt{Y_2} \cdot \Delta Y_2 = - A_2 D_2 \sqrt{Y_2} \cdot \frac{A_1}{D_2}\sqrt{Y_1} = - A_1 A_2 \sqrt{Y_1 Y_2}

右辺が完全に一致しました。だから:

A1D1Y1⋅ΔY1=A2D2Y2⋅ΔY2A_1 D_1 \sqrt{Y_1} \cdot \Delta Y_1 = A_2 D_2 \sqrt{Y_2} \cdot \Delta Y_2

これは戦闘中ずっと成り立つ等式です。

ΔY\Delta Y を微分に近似して不定積分すると:

A1D1Y132=A2D2Y232+CA_1 D_1 Y_1^{\frac{3}{2}} = A_2 D_2 Y_2^{\frac{3}{2}} + C

(∫Y dY=23Y32\int \sqrt{Y}\,dY = \frac{2}{3}Y^{\frac{3}{2}} を使って、23\frac{2}{3} は両辺で打ち消しました)

初期条件 Y1=Z1Y_1 = Z_1, Y2=Z2Y_2 = Z_2 で定数 CC を決めて:

A1D1Y132−A2D2Y232=A1D1Z132−A2D2Z232A_1 D_1 Y_1^{\frac{3}{2}} - A_2 D_2 Y_2^{\frac{3}{2}} = A_1 D_1 Z_1^{\frac{3}{2}} - A_2 D_2 Z_2^{\frac{3}{2}}

この左辺は戦闘中ずっと一定です。

強さの比 λ\lambda

ここで Si=AiDiZi32S_i = A_i D_i Z_i^{\frac{3}{2}} と定義すると、戦闘の結果を左右するのはこの SS の比だけになります。

この S=ADZ32S = A D Z^{\frac{3}{2}} という形は、シミュレータでの実測でもほぼ合うことを確認しています。ただし確認は英雄スキルを入れない条件下で、偏ったバフをかけた場合は未確認です。実測面からの整理は総力と実際の強さにあります。

λ=S2S1=A2D2Z232A1D1Z132\lambda = \frac{S_2}{S_1} = \frac{A_2 D_2 Z_2^{\frac{3}{2}}}{A_1 D_1 Z_1^{\frac{3}{2}}}

λ>1\lambda > 1 なら陣営2が強く、陣営1が負けます。λ<1\lambda < 1 なら陣営1が勝ちます。

残存率の公式

陣営1が全滅(Y1=0Y_1 = 0)したとき、不変量から:

−A2D2Y232=A1D1Z132−A2D2Z232=S1−S2- A_2 D_2 Y_2^{\frac{3}{2}} = A_1 D_1 Z_1^{\frac{3}{2}} - A_2 D_2 Z_2^{\frac{3}{2}} = S_1 - S_2 A2D2Y232=S2−S1A_2 D_2 Y_2^{\frac{3}{2}} = S_2 - S_1

両辺を S2=A2D2Z232S_2 = A_2 D_2 Z_2^{\frac{3}{2}} で割ると:

(Y2Z2)32=S2−S1S2=1−S1S2=1−λ−1\left(\frac{Y_2}{Z_2}\right)^{\frac{3}{2}} = \frac{S_2 - S_1}{S_2} = 1 - \frac{S_1}{S_2} = 1 - \lambda^{-1}

32\frac{3}{2} 乗を外すために 23\frac{2}{3} 乗をすると:

Y2Z2=(1−λ−1)23\frac{Y_2}{Z_2} = \left(1 - \lambda^{-1}\right)^{\frac{2}{3}}

綺麗な形になりましたね。これで強さの比λ\lambdaが分かれば、残る兵士数の割合が全部計算できます。

具体例

λ\lambda の値ごとの残存率を計算しました:

λ\lambda(強さの比)1.11.52.03.05.0
Y2/Z2Y_2/Z_2(残存率)20.22%48.07%63.00%76.31%86.18%

例えば λ=1.1\lambda = 1.1(1.1倍強いだけ)は残存率は約20%と思ったより小さいと思います。 λ=1.55\lambda = 1.55で半分ぐらいの残りです。 ほとんど削れない!というのはλ=5.0\lambda = 5.0と非常に大きな差があることを意味しています。

要確認: これは攻撃力を持つ兵が減っていくときの現象なので、盾をタンクとする兵種混在の場合とは異なります

まとめ

要確認: この記事は1兵種のモデルです。実際の戦闘(兵種の相性)にはそのまま適用できません。