[PR]当サイトはアフィリエイト広告を利用しています。
今回はシミュレーションの話です。
微分方程式の入門書にはよく以下の数式があります。
このグラフは以下のようになります。
時間経過でどんどん増えていくモデルですね。
野生動物の繁殖とか微生物の増殖とかで出てくるモデルです。
参考にした微分方程式の入門書は以下。
佐藤実(2016)『ぷち マンガでわかる微分方程式』オーム社.
もう少し現実的なモデルというのがロジスティックモデル。
今回は生物の増殖をPythonでシミュレーションしてみてこのどちらかのモデルを再現できるのかということに挑戦してみます。
対象とする生物はリスとします。
リスは一度に4匹くらいの子を産むとのこと。
やね. “シマリスの繁殖|出産・発情・交尾・妊娠期間は?”. ペットブログ. 2016-09-04.(参照2021-06-12)
アルゴリズムは以下のように考えます。
①マス目を設定
②二つのマス目に2匹のリスを設置。
③リスはマス目上で食物を一定量消費する。
④マス目上では食物が常に一定量再生される。
⑤マス目上の食物の量がリスの消費量を下回ったらリスが移動する。
⑥移動できなかったらリスは死亡とする。
⑦リスは寿命を迎えると死亡する。
⑧リスは年一回総数の半分がそれぞれ4匹のリスを産む。
⑨ ③から⑧までを指定した年月繰り返す。
今回はマス目のクラスを作成するところまでを載せます。
マス目のクラスは以下。
class cell:
def __init__(self, wall):
self.wall = wall
self.r = 1.04
self.f = 3
self.re = 1
self.fmax = 3
self.active = False
self.recoveryTime = False
def consumption(self):
self.f = self.f - self.r
if(self.f < self.r):
self.recoveryTime = True
def recov(self):
if(self.f <= self.fmax):
self.f = self.f + self.re
if(self.f > self.fmax):
self.f = self.fmax
if(self.f >= self.r):
self.recoveryTime = False
wallが壁を意味します。マス目の周りを壁に設定します。
rがリスの消費量、fが食料の残量、reがマス目の回復量、fmaxが最大食糧、activeが現在のセルの稼働状況(リスがいるとTrue、いないとFalse)、recoveryTimeが回復タイム(リスの消費量より食料が少ない時にTrue、多いとFalse)となっています。
関数consumptionがリスの消費をする関数、関数recovがセルの食料を回復する関数です。
続きはまた次回。