マルサス成長モデル:理想的な集団成長
モデル
$$ \dot{N} = rN $$
変数
- $N(t)$: $t$ 時点での集団の個体数を示している。
パラメータ
- $r \in \mathbb{R}$ : 固有増加率intrinsic Rate of Increaseで、$0$ より大きければ成長し、$0$ より小さければ衰退する。出生率birth rate $b$ と 死亡率death rate $d$ の差 $r:=b-d$ で定義されることもある。
説明
人口動態は、数学生物学へと続く動力学の最初の通路であり、集団の個体数や種の共存などのテーマに対する数学的アプローチである。マルサス成長モデルはそのような成長モデルの中でも最もシンプルなもので、理想的に(何の障害もなく)繁殖できる種の個体数は、単純な常微分方程式で表すことができる。与えられた方程式は分離可能な1次微分方程式なので、その解は初期人口 $N_{0}$ に対して
$$ N(t) = N_{0} e^{rt} $$
のように求められ、式に指数関数が登場するため、指数成長モデルと呼ばれることがある。マルサス成長モデルという名前は、人口論の著者であるトーマス・ロバート・マルサスの名前に由来する。
一見すると、個体数モデルがどこで役立つのか疑問に思うかもしれないが、より進化したモデルは実際にバイオ分野で使われており、菌やウイルス、特定の塩基配列の数に関連し、個体数という意味を超えて「動く量的変数」そのものとしてアプローチし、多くの応用モデルの基礎となっている。たとえば、インテルの共同創設者であるゴードン・ムーアは、「半導体集積回路の性能は2年ごとに倍増する」と述べたが、これはまさに指数的成長を意味し、現在はムーアの法則と呼ばれている。ムーアがマルサス成長モデルを適用したわけではないが、成長という現象が一般的にこのように説明されるため重要であるということである。バイオ分野以外にも、この成長は経済・経営においてサービスを使用する顧客や無リスク資産の元本合計に適用されることもあり、逆に原子核の放射性崩壊を原子核数の逆成長と見ることもできる。
導出
集団の成長をモデリングするには、二分裂で繁殖する細菌を想像するとよい。個体数の増加速度は、各自の成長速度に加えて、全体の個体数自体にも比例する。たとえば、細菌が$10$匹いるペトリ皿$A$と、$20$匹いるペトリ皿$B$を考えると、ある時点で個体数が2倍に増加した場合、$A$には$20$匹、$B$には$40$匹がいることになる。つまり、
$$ (N = 10 \text{일 때의 증가량}) = 10 \\ (N = 20 \text{일 때의 증가량}) = 20 $$
変数$N$を使って表すと、
$$ (N \text{의 증가량}) = N $$
成長速度を考慮できるように式を修正すると、ある実数$r \in \mathbb{R}$に対して
$$ (N \text{의 변화량}) = rN $$
のように表すことができる。$r>0$ならば人口の変化量が正で、個体数が増加し、$r<0$ならば変化量が負で、時間と共に個体数が減少することになる。この変化量を言葉ではなく数式で表現するには、微分が必要である。$t$時点で$N$が変化する度合いは$dN / dt$であるので、左辺を修正すると次のようになる。
$$ {{dN} \over {dt}} = r N $$
■
限界
微分方程式という言葉が、方程式が怖いかもしれないが、一つ一つを紐解いてみると、すべてが常識的な前提から始まる導出であることに共感できるだろう。しかしながら、常識的な前提という説明に反して、このモデルの最大の問題点は、現実を全く反映できないことである。簡単でシンプルなため、教科書の最初の例としては適切かもしれないが、これだけでは実質的な応用は全くできない。
実際の集団の成長は、いわゆるマルサスの罠に直面する。ペトリ皿に入れた細菌の例を続けて考えると、ペトリ皿という限られた環境では、彼らが永遠に成長し、繁殖するのに十分な栄養が提供されることはなく、その空間自体も有限である。結局、ある時点を迎えると成長が鈍化し、理想的な成長は停止する。
このモデルは最も単純であるため、実際の個体数に直接適用されることはほとんどなく、それ自体で1次項としての意味を持つか、非現実性を克服するために様々なモデルが用いられる。たとえば、死を反映させたり、複数の種が互いに競争するような方法が考えられるだろう。
視覚的理解
マルサス成長モデルをエージェントベース シミュレーションで実装して、視覚적に理解しよう。
アクション
(すべてのエージェントが、毎ターン)
- 繁殖:
b
の確率で自分の位置に新しいエージェントを作る。 - 死亡:
d
の確率でシミュレーションから除外される。
b # 번식률
d # 사망률
replicated = (rand(N) .< b) # 번식 판정
new\_coordinate = coordinate[replicated,:]
coordinate = coordinate[rand(N) .> d,:] # 사망 판정
coordinate = cat(coordinate, new\_coordinate, dims = 1);
エージェントの繁殖と死亡という単純なアクションだけを使用しており、システム独自の固有増加率パラメータ$r$が変わるとシステムがどのように変化するかをチェックするだけで十分である。
シミュレーションで使用される繁殖確率 b
とシステムの出生率 $b$、死亡確率 d
とシステムの死亡率 $d$ は、一般的に同じではないことに注意する必要がある。自律システムによって記述される微分方程式に正確に一致するように、直感的にまあまあ適切なパラメータを見つける形でシミュレーションのフィットが行われた。
$r>0$ の場合
N0 = 50 # 초기 인구수
b = 0.05 # 번식률
d = 0.02 # 사망률
シミュレーションなので最初は少し遠慮があるかもしれないが、出生率が死亡率を上回るため、最終的には爆発的な成長が起こる。
$r<0$ の場合
N0 = 50 # 초기 인구수
b = 0.04 # 번식률
d = 0.05 # 사망률
![malthusian_growth_integration2.gif](malthus