Kodama's home

2生物系のシミュレ−ション

生物系シミュレ−ション. Linux/x86 の libc5 環境でコンパイルしているから libc6 環境の人は注意だよ. libc5 ライブラリも入れなくちゃね. Windows や Mac の人はプログラムの方は無かったことにしてくれ. あんまり真面目には作っていないから細かい突っ込み無しね.

2生物系シミュレ−ション

捕食--被食関係の2生物系シミュレ−ションは, wator という名でよく知られている. この名は水系の生存競争のたとえからつけられたようなので, ここでもそのたとえで説明する. (エ−ト, 確か元ネタを 日経サイエンス誌 で読んだ覚えがあるんだけど, 誰か知らない?)

海に魚と鮫が生息し, 魚は適当な時間毎に子孫を残す. 鮫は魚を捕まえて食べないと餓えて死に, 魚を食べて生き残る事が出来れば子孫を残せる. 簡略化するために海は長方形の上下,左右を張り合わせたト−ラス形をしているとする.

wator

この生態系の個体数を ロトカ-ボルテラ微分方程式で表すことにする. 魚の個体数を x, 鮫の個体数を y とする. 単位を適当に取り個体密度と考えても良い. 個体数の変化を以下のよなモデルで表してみる.

dx/dt = a x - b x y
dy/dt = -c y + d x y 
a は魚の出生率に対応する. d は鮫の餓死による死亡率に対応する. 鮫が魚を探すことが出来る確率は (魚の密度)x(鮫の密度) に比例するので, 魚の死亡率と鮫の出生率もこれに比例すると考え その係数を各々 b と d とする.

上の式を以下のように因数分解してみる.

dx/dt = ( a - b y)x = (a/b - y) b x
dy/dt = (-c + d x)y = (x - c/d) d y
魚の個体数(x)の増減(dx/dt)は, (a/b-y) の符号で決まり, 鮫の個体数(y)の増減(dy/dt)は, (x-c/d) の符号で決まることがわかる. これから, この方程式の解曲線をx-y平面上に描くと, 大雑把に云って, 点(c/d, a/b) を中心にして反時計まわりにまわるような曲線となることがわかる. 曲線が螺旋にならずに閉じているっていうのは, 正確には特性行列をしらべるとか, 上の式がポテンシャルに対応するとかを考えなきゃならないけど省略. だから, まあ, 適当な時間周期で増えたり減ったりを繰り返して循環するわけ. wator の結果とも大体つじつまが合う.

魚--鮫 個体数グラフ 時刻--個体数 グラフ

生物系シミュレ−ション. を展開して, X 上で ecosystem を実行すると上のシミュレ−ションを見る事ができる. 具体的には kterm 上で

% ./ecosystem  (リタ−ン)
とすると良い. すると, wator の画面が現れるが, 小さい黒点は "魚" を, 赤点は "鮫" を表す. wator の画面上で "Q" キ−を叩くと終了する. "1" から "8" までの キ−を叩くと (時間--個体数) のグラフを表示する. "T" キ−を叩くと (魚の個体数--鮫の個体数) のグラフを表示する. 但し, 魚と鮫の個体数がかなり違うので, 適当にスケ−リングしている. "H" キ−を叩くと kterm に helpメッセ−ジを表示する. "スペ−ス"キ−を叩くと, グラフ表示から wator の表示に戻る.

拡散項つきのロトカ-ボルテラ系

上のロトカ-ボルテラ系に拡散項をつけてみる.

dx/dt = a x - b x y  + e △x 
dy/dt = -c y + d x y + f △y
最後の△x とかが拡散項ね. この意味合だけど, 広大な海を幾つかの区画に分けてみる事にする. この区画毎には, 前項で書いたような2生物系の状況になっているはずで, △ はこれらの区画間の群の移動を表すと考えると良い. △ の定義と上の解釈の関係が気になる人は教科書とかを読んでね.

画面上の1点が海の1区画の対応すると考えて, 個々の区画内での魚や鮫の個体数に応じて色分けすると, 海全体に模様が見えてくる. 時間がたつと個体数が変わるので, 模様の方もジワワ〜ッと変わってくる. なんか, BZ反応で模様ができるっていう話を思い出しちゃうね.

生物系シミュレ−ション. を展開して, X 上で diffusion を実行すると上のシミュレ−ションを見る事ができる. 具体的には kterm 上で

% ./diffusion  (リタ−ン)
とする.
$ ./diffusion 
d=0.3-2 : diffusion coefficient
 d-->

上のように何か表示されるけど細かいことは気にしないで,1 を入力する. 違った数値でやってみても良いけど.
$ ./diffusion 
d=0.3-2 : diffusion coefficient
 d-->1
拡散方程式の解を表示する画面が開いて, 表示がグニョグニョ動くから, 見て楽しんでね. "Q" キ−で終了. 表示領域は上下左右を張り合わせたト−ラス形になっていて, "H" "J" "K" "L" のキ−を押すと表示の中心をずらすことが出来る. "スペ−ス" で表示の再開. 表示色は 魚の多い(c/d 相当よりも多い)領域を黄色で, 鮫の多い(a/b 相当よりも多い)領域を水色, 重なった部分は緑で塗り分けているけど, X が256色モ−ドでパレットを取得出来ない場合には, 違う色になるかもね.
神戸大学理学部数学科のペ−ジへ.
児玉のホ−ムペ−ジへ.