魔法少女まどか☆マギカにおける魔法少女と魔女の個体群動態

 この記事は、Population dynamics - Puella Magi Wiki の日本語訳です。第8話や、第10話などのネタバレを一部に含みます。基本的には、19 March 2011, at 14:13 時点での版を翻訳したものですが、一部の記述は、後の版をもとに校勘して置き換えています。(たとえば、原版の "Refined model" の節における "t=350" の数値をこの日本語訳では、後の版をもとに "t=300" になど)

 この記事の原著作者は、Homerun-chan さんや、Prima さんたちです。この記事は、Attribution-NonCommercial-ShareAlike 3.0 Unported の元で利用できます。(Content is available under Attribution-NonCommercial-ShareAlike 3.0 Unported.)

食物連鎖って知ってる? 学校で習ったよね? 弱い人間を魔女が食う。その魔女を私たちが食う。これがあたりまえのルールでしょ。そういう強さの順番なんだから。

 –––佐倉杏子 魔法少女まどか☆マギカ 第5話 より。

 佐倉杏子が言ったように、魔法少女と、魔女と、人間たちのこの三者の関係は、自然界における食物連鎖に似ている。しかしこの三者の関係のなかで、魔法少女と魔女の関係は、自然界における捕食者と被捕食者の関係とは異なる点がある。(第8話であきらかになったように)魔法少女のソウルジェムが完全ににごると、魔法少女は魔女に変化してしまう点である。このために、魔法少女と魔女、この両者の個体数の関係式は、より複雑になるし、標準的な人口モデルを用いたのでは、彼ら三者の個体数の動的モデルを構築することはできない。よって、彼ら三者の個体数の動的モデルを構築するためには、魔法少女-魔女の関係に特化した新たな個体群動態モデルを開発する必要がある。

モデルの仮定

 まず魔法少女と魔女を合計した個体数は、人間の個体数から彼女たちの個体数を減算することで求められる。つぎに計算を簡単にするために、我々は以下の二つの前提条件を導入し、その仮定のもとにモデルを構築することにした。まず一つに、魔法少女と魔女をあわせた全個体数は、人間の全個体数と比較すると、とても小さいであろうということ。そして二つに、魔女の活動による人間の個体数の減少も、少々ならばこの比率にとくに大きな変化をもたらさないであろうということ。

 魔法少女の個体数は、キュゥべえが契約した少女の人数分だけ増大し、逆に、魔法少女が死ぬか魔女になった件数分だけ減少する。魔女の個体数は、魔女の使い魔が成熟した件数と、魔法少女が魔女に変化した件数の合計分だけ増大し、逆に、魔法少女によって狩られた分だけ減少する。以上の仮定を要約すると、以下の変数で表すことができる。

M(t)
時間 t における魔法少女の個体数 (自然数)
W(t)
時間 t における魔女の個体数 (自然数)
C
時間 t の値が1増えるごとに、キュゥべえが契約を獲得する少女の件数 (自然数)
D
時間 t の値が1増えるごとに、魔法少女が死亡する確率 (百分率)
B
時間 t の値が1増えるごとに、魔法少女が魔女になる確率 (百分率)
K
時間 t の値が1増えるごとに、魔法少女1個体が魔女1個体を倒す確率 (百分率)
F
時間 t の値が1増えるごとに、(魔女1個体あたりの)使い魔が成熟して魔女に変化する件数 (正の有理数)

シンプルモデル

 まず我々は、簡略なモデルを構築し、これをもとにしてより洗練されたモデルを完成させた。(洗練されたモデルについては、次節の「より精巧なモデル」を参照) まず、シンプルなモデルにおいては、魔法少女の死亡率、魔法少女が魔女になる確率、そして魔女が殺される確率の三つの変数は、時間 t における魔女の個体数との間に関連性がないものとして構築を試みた。これによって、式を単純化することができるし、またこの微分方程式を閉形式解として求めることが可能になる。この仮定においては、時間 t における魔法少女と魔女の個体数の変化量は、以下の式によって求めることができる。

{\begin{align}\Delta M(t) &= C-D \times M(t)-B \times M(t)\\ &= C-(D+B) \times M(t) \\\end{align}}

{\begin{align}\Delta W(t) &= B \times M(t) + F \times W(t)-K \times M(t)\\ &= F \times W(t) +(B-K) \times M(t) \\\end{align}}

シミュレーション

 各変数に妥当と思われる値を代入し、シンプルモデルの式を Matlab を用いて100回繰り返した。

グラフは、各回ごとの魔法少女の個体数の変化
グラフの縦軸は、魔法少女 及び 魔女 の個体数を表し、グラフの横軸は、回数を表す。緑色の線が魔法少女の個体数の増減。赤色の線が魔女の個体数の増減。

 このシミュレーションで用いた値は、以下の通り。

  • C = 100;
  • D = 0.25;
  • B = 0.125;
  • F = 0.015;
  • K = 0.12;
  • M(1) = 0;
  • W(1) = 0;
  • C/(D+B) = 267;

 おそらく実際には、これらの値は不正確なものであると思われるが、これらの値を変更したとしても、上記のグラフはだいたい似通ったカーブを描くものと思われる。(基本的に、数値をいじった場合、そのカーブのするどさは異なってくるが、そのだいたいの形状には変化は現れない)

個体数の均衡

 もし、魔法少女と魔女の個体数が、双方ともに均衡するとすれば、両者の個体数は変化しない [ΔM(t) = 0 & ΔW(t) = 0] 。つまりそのためには、その回において、キュゥべえと契約して新たに魔法少女になる少女の人数と、その同じ回において死ぬか魔女になる魔法少女の人数が等しくなければならないし [C = (D + B) M(t)] 、また使い魔から魔女になる個体数と、魔法少女が倒す魔女及び魔女に変化する魔法少女の数が釣り合っていなければならない。[F * W(t) = (K - B) M(t)] 。

  • 魔法少女の個体数が均衡するならば、その状態においての魔法少女の個体数 M(t) は、C / (D + B) という式によって求まる。
  • 魔女の個体数が均衡するならば、その状態においての魔女の個体数 W(t) は、(B - K) M(t) という式によって求まる。またもし、このとき魔法少女の個体数 M(t) も均衡であるならば M(t) = C / (D + B) であるので、このときの魔女の個体数は、以下の式によって求まる。

{\begin{align} W(t) &= (B - K) \times M(t)\\ &= (B - K) \times \frac{C}{(D + B)}\\ &= C \left( \frac{B - K}{D + B} \right) \\\end{align}}

一般解

 魔女と魔法少女の個体数の一般解は、以下の通り。

  • { M(t) = \alpha e^{-(D+B)t} + \frac{C}{D+B} }
  • { W(t) = C \frac{B-K}{D+B}(\frac{1}{D+B+F}e^{-(D+B)t} + \beta e^{Ft} - \frac{1}{F}) }

 αとβは定数。もし、魔女と魔法少女が、キュゥべえによってもたらされたものだと仮定するならば、魔女及び魔法少女の t = 0 における個体数は、ともにゼロとなる [M(0)=0 W(0)=0] 。そして、W(t) 及び M(t) の値は、以下のようになる。

  • { M(t) = ( 1-e^{-(D+B)t} ) \frac{C}{D+B} }
  • { W(t) = C \frac{B-K}{D+B}(\frac{1}{D+B+F}e^{-(D+B)t} - ( \frac{1}{D+B+F} - \frac{1}{F} ) e^{Ft} - \frac{1}{F} ) }
結論と所見
  • 死亡した魔法少女は、魔女にならない。キュゥべえの目的は、魔法少女が魔女に変化するときに解放されるエネルギーを回収することである。よって魔女になることなく死んでしまう魔法少女などは、キュゥべえからみれば、契約獲得に要したコストの無意味な浪費でしかない。であるから、魔法少女の死亡率を下げるために、魔女を魔法少女より弱くなるようこのシステムを設計することが、彼にとっては重要となる [B > D] 。
  • また、魔法少女が魔女より強ければ、大部分の魔法少女は、魔女に変化するまでに、複数の魔女を倒すことになる [K - B > 0] 。であるから、魔女の供給源として、(魔法少女以外に)使い魔という存在が必要になってくる。本来なら、キュゥべえの目的は、魔法少女から魔女を生成することのみであるにもかかわらず、魔女のもう一つの生成源として、わざわざ使い魔というものをこのシステムに導入したのも、以上のことが理由であると考えられる。
  • 魔法少女の個体数の初期値や、C, D, B といった各値に、どのような数値を代入したとしても、魔法少女の個体数は、つねに C / (D + B) の均衡に到達するだろう。周囲に魔法少女が少ない理由は、おそらくキュゥべえの契約獲得能力の制限によるものだろう。
  • たとえ、魔法少女の個体数の初期値に、極めて大きな数値を設定したとしても、彼女たちの個体数は急速に減少し、その個体数を維持できるレベル C/ (D + B) に達して均衡するだろう。これは別段、個体数を極めて多くしたことからくる魔法少女個々体へのストレスや、環境への過大なストレスなどのせいではない。線形増加率から導かれる当然の帰結である。
  • 一方、魔女の個体数はけして均衡に達しない。まずこのシステムを稼働した初期においては、魔女の個体数はきわめて短時間に、不規則に変化していくだろう。しかし必然的に、使い魔の増殖 [eFt] が、他のあらゆる変数を追い越し、やがて魔女の個体数を指数関数的に増加させることになる。魔女の爆発的な増殖は、人間の個体数の減少をもたらし、おそらくはその人間の減少によってのみ、魔女の増殖は抑制されることになるだろう。だが、人間の個体数がそこまで減少すれば、我々がこのモデルに対して最初に導入した前提条件もまた、くずれさる。
  • 以上のことから、この魔法少女-魔女のシステムが導入された惑星は、必然的に死滅すると結論づけることができる。もはや人間の滅亡は回避できない。魔女及び魔法少女を一体残らず滅ぼせば話は別であるが。おそらく、キュゥべえが地球において持続可能なやりかたでエネルギーの回収を行おうとせずに、エネルギーを回収できるだけ回収した時点で、あっさりと地球から去っていこうとしたのも、以上のことから説明がつく。

より精巧なモデル

 上記のシンプルモデルの欠陥は、魔女の個体数がいくら増減しても、魔法少女が倒せる魔女の個体数に変化が生じないと仮定したことにある。この仮定のために、シンプルモデルを用いたシミュレーションは、実際の状況とは異なるふるまいをみせることになるだろう。よって我々は、シンプルモデルを以下のように変更することにした。

  • まず、魔法少女は魔女と1対1で戦うと仮定する。
  • つぎに、魔法少女の個体数が魔女の個体数より圧倒的に少ない場合は、魔法少女たちの大部分は毎回、魔女との戦いにおもむくことになるだろうし、それ以外の状況下では、彼女たちは休息するか、前回の戦いで受けた傷の治療に専念するか、あるいはごく普通に日常生活を送るだろうと仮定した。
  • つまり魔法少女の個体数が魔女の個体数より多ければ、一部の魔法少女のみが魔女と戦うので、その回における魔法少女の死亡確率 D や、魔法少女が魔女に変化する確率 B は低下する。つまり、D 及び B の値は、魔女の個体数に応じて変化する。
  • 魔法少女が魔女に変化するのは、魔法を使ったときのみであると仮定する。(つまり魔法を使わないかぎり、ソウルジェムは濁らないと仮定する) また、魔法少女が魔法を使うのは、魔女と戦うときのみであると仮定する。(つまり、魔法少女どうしで戦いあったりはしないと仮定する)
  • 時間 t = 0 のとき(第0回)にも、最低でも魔女が一体は存在するものとしてシミュレーションを行なった。これは、そのように設定しなければ、上記の仮定からなるこの精巧モデルにおいては t がいくら増大しようと、魔法少女がいつまでも魔女に変化しないためである。もし魔女の個体数を0でシミュレーションを行えば、W(t) は常に0であるし、M(t) がグラフに示すカーブは直線になる。
モデル

 さて、あとは以上のことがらを数式に置き換えるだけである。

  • 定数の値は、前回のシンプルモデルと同じものを使うことにする。
  • 魔女との戦いにおもむく魔法少女の比率をあらわすために P という定数を導入する。(具体的に説明すると、たとえば P=0.8 と設定するならば、毎回、20% の魔法少女は戦いにおもむかずに休息をとることになる)
  • このシステムは以下のようになる。
    • { \Delta M(t) = C - P \times (D + B) \times \min{(W(t), M(t))} }
    • { \Delta W(t) = F \times W(t) + (B - K) \times P \times \min{(W(t), M(t))} }
シミュレーション

 この式を Matlab にて実行した結果が、以下のグラフである。

 グラフは、「より精巧なモデル」における個体数の増減。

 このシミュレーションで用いた値は、以下の通り。

  • C = 100
  • D = 0.25
  • B = 0.125
  • F = 0.015
  • K = 0.12
  • P = 0.8

 前節のシンプルモデルと同じく、実際には、これらの値は不正確なものであると思われるが、これらの値を変更したとしても、出力されるグラフは似通った形状になるだろう。

二つのモデルの比較。

 このより精巧なモデルにおいては、個体数の増減は、以下の二つの特徴的な期間をたどることになる。

  • まずはじめの頃は、魔法少女の個体数が、ほぼ直線的に増大する。この時期には、ほとんど魔女が存在しないために、魔法少女の死亡率も、ほぼゼロである。そしてキュゥべえは一定のペースで少女たちと契約し魔法少女を生産していく。ゆえに、魔法少女の個体数は、ほぼ直線の一定の率で増加することになる。戦いもほとんど発生しないので、ソウルジェムもゆっくりとにごるし、魔女化する魔法少女も同じく少ない。それゆえに、魔女の個体数の増加も、シンプルモデルにくらべると、ゆっくりと進行する。
  • しかし、ある時期(このシミュレーションにおいては t=300 )を迎えると、この状況は大きくかわる。魔女の個体数が、システムにとって、きわめて重要な要素へと変化する。つまり、魔女との交戦機会が増えることによって、魔法少女はさまざまな影響を受けることになる。このために魔法少女の個体数の増加は緩慢になり、やがて減少に転じる。逆に、魔女の個体数は、加速度的に増加していく。つまり、最終的に魔法少女の個体数は C/(D+B) の均衡状態に向かい、魔女の個体数は、指数関数的な増大へと向かうことになる。

 はじめに示したシンプルモデルでは、このより精巧なモデルによって示されたような二段階からなる増減の過程を明らかにすることはできなかったし、魔法少女の個体数も、精巧なモデルより早い時期に均衡状態に達することになった。しかしながら、シンプルモデルの回数をどんどん進めていくと、やがては、より精巧なモデルでの第二段階にみられる魔女と魔法少女の増減グラフと一致した結果が得られる。したがって、シンプルモデルによって得られた結論は、以上の精巧モデルからみても妥当なものであると判断される。ただしその時期は、シンプルモデルで予測されるよりも未来に、おとずれることになるが。

Matlab Scripts

 上記、二つのモデルで用いた Matlab スクリプトは、以下で入手できる。