森林火災と疫病

モデルを作る

確率を使ったセルオートマトンを用いた"森林火災"のモデルを考える。ここでは、簡略版として、以下の 規則を使おう。
  1. 森林は格子状の二次元空間で、格子の上に適当な密度で木が生えている
  2. 空き地からは、各ステップごとに確率pで新たな木が生える
  3. 木は落雷などによって、各ステップごとに確率qで燃えはじめる
  4. 燃えていない木の周囲に一本でも燃えている木があれば、確率rで燃え移る
  5. 燃えている木は、1ステップ後に燃えつきて、その場所は空き地になる
本当の森林火災に近い状況は、pとqが極めて小さく、それに比べてrが大きいような状況だろう。 このモデルでは、それ以外に、あまり現実的ではない状況も考えることができる。

関連するものとして、"疫病伝播"のモデルがある。 ここでは、やはり簡略版として、次の規則を使おう
  1. 格子状の二次元空間を考え、全ての格子点の上に居住者がいる
  2. 隣に感染者がいれば、免疫のないものは各ステップで確率pで感染する
  3. 感染者は感染後nステップで回復する。これも確率で決めてもいいが、ここでは簡単のため、 必ずnステップで回復するとしよう。回復したものは、免疫保持者となる。
  4. 免疫保持者は回復後mステップで免疫を失う。これも簡単のため、必ずmステップとしよう
  5. 初期状態では、居住者のうち確率qで感染者が、確率rで免疫保持者がいる
このモデルは居住者が動き回らないので、人間というよりは、畑の作物のようなものの疫病伝播モデルと いえるかもしれない。 プログラムの例と解説はここをクリック

はじめに

準備

以下のURLから、forest.tarepidemics.tarというファイルをダウンロードしてください。

http://www.cp.cmc.osaka-u.ac.jp/~kikuchi/kougi/simulation/forest.tar

http://www.cp.cmc.osaka-u.ac.jp/~kikuchi/kougi/simulation/epidemics.tar

例によって、これを適当なディレクトリで展開すると、 実行プログラムと、入力データファイルのサンプルができます。

入力データファイル

森林火災の入力データファイルは2行からなり、
0.001 0.00001 0.1 0.8 12345
5000 10
のようなものです。
一行めは、
p q r 初期密度 乱数初期値
二行めは
シミュレーションするステップ数 何ステップごとに画面を表示するか
です。毎ステップ画面を表示すると、実行時間がかさみます。

疫病伝播の入力データファイルは2行からなり、
0.03 10 10 0.01 0 12345
5000 10
のようなものです。
一行めは、
p n m q r 乱数初期値
二行めは
シミュレーションするステップ数 何ステップごとに画面を表示するか
です。毎ステップ画面を表示すると、実行時間がかさみます。

実行

森林火災は、入力データファイルをfo.inとすれば
$./forest fo.in
で実行します。 実行すると、数値も出力されますが、これは
ステップ数 燃えていない木の数 燃えている木の数
の順です。

この出力をfo.outというファイルに格納したければ
$./forest fo.in >fo.out
としてください。

疫病も同様で、入力ファイルをepi.inとすれば
$./epidemics epi.in
で実行します。 数値される数値は
ステップ数 感染者数 免疫保持者数
の順です。