LoginSignup
3
2

More than 5 years have passed since last update.

ねずみ算をPythonでシミュレートしてみた。

Last updated at Posted at 2019-01-13

animal_stand_nezumi.png

はじめに

何を思ったのか、「ねずみ算的に増えるってどんな感じに増えるんやろ」と暇な正月休みに思い、
適当に条件与えて計算してみたので、その記録を書きます。
ただの記録です。

計算をする前に、「ねずみ算って数式で書けるかな?」って少々考えてみたのですが、僕にそんな頭はありませんでした。
Pythonでコード書いた方が早いわ、ってなりました。

結論

指数関数的に増える。
そりゃ前提条件やら初期条件にも依存しますが、オス・メス1匹ずつから1年間で2万匹弱まで増えた(笑)。

計算

仮定

ネットで調べて、下記のようなパラメータ、仮定を置きました。

  • 「ハツカネズミ」に近いパラメータを想定
    • 妊娠期間:3週間
    • 1度の出産で生まれる子の数:6匹
    • 性成熟期間(子が繁殖活動が可能になるまでの期間):8週間(2ヶ月)
  • 計算条件
    • 初期状態として、大人のオス・メスが1匹ずつから繁殖していく。
    • 大人のオス・メスは必ずつがいを作り、1度の出産でオス3匹、メス3匹を産む。
    • 子を産んだら、すぐにまたメスは妊娠するとする。
    • 性成熟期間を過ごした子ネズミは、大人になって子を出産していく。
    • 計算対象期間は1年間(4*12=48週間)。ネズミの寿命は1年以上とする(1年未満ではネズミは死なない)。
    • 計算の簡略化のため、ねずみのオス・メスつがいの数を週単位で求め、ねずみの合計数を出す。

計算の流れ

大人のネズミつがいは妊娠週を、子供のネズミつがいは性成熟するまでの週を、それぞれ別々の配列で管理するようにしました。
1週間経つごとに、矢印の方向へセルの数が移動していきます。これを繰り返します。

名称未設定.001.jpeg

コード

割と短く書けて良かった。

multiplying_like_rats.py
import numpy

# constants
number_of_birth_pairs = 3
period = 48 # weeks 
pregnancy_weeks = 3
sexual_maturation_weeks = 8

# variables
parent_pairs = numpy.zeros(pregnancy_weeks, dtype=numpy.float)
child_pairs = numpy.zeros(sexual_maturation_weeks, dtype=numpy.float)

# Initial condition
parent_pairs[0] = 1

# calculate
for i in range(1, period+1):
    child_pairs_to_be_born = parent_pairs[-1] * number_of_birth_pairs
    child_pairs_to_be_parents = child_pairs[-1]

    # update parent pairs
    parent_pairs = numpy.roll(parent_pairs, 1)
    parent_pairs[0] += child_pairs_to_be_parents
    # update child pairs
    child_pairs = numpy.roll(child_pairs, 1)
    child_pairs[0] = child_pairs_to_be_born

    rats_sum = (parent_pairs.sum() + child_pairs.sum()) * 2
    print(f"{i} week(s): {rats_sum}")

結果

計算結果をグラフ化してみました。
まずは縦軸が線形の場合。
image.png
次に縦軸が対数の場合。
image.png
指数関数的に増えた。

感想

ねずみの繁殖力ってすごいんですねー。
(ゴブリンの場合はどうなんだろうか)

参考

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2