DLA, 伝染病モデルにおける臨界現象

目次 解答例(ないかも)

最後の更新は次の時刻以降のはず.Time-stamp: "2003/01/08 Wed 14:35 hig"

2003/01/15 の実習には空のフロッピーディスク1枚持ってきてね

課題26_01(ta138) DLA

ラグランジュ表示のランダムウォーカーと, オイラー表示の健康/不健康な村人の両方がでてくるモデルを考えよう.

xsize × ysize の升目(セルという)を考える. ただし, 今回は正方形 xsize=ysize だとする. 各々のサイトに住む個体は, 健康=OFF, 不健康=ON のいずれかの状態をとる. 最初の時刻には, (xsize/2, ysize/2) の一人だけが不健康で, 残りはすべて健康だとする.

ランダムウォーカー(1人だけ)の初期位置を, ( (0.5 + 0.4*cos(r))*xsize, (0.5+0.4*sin(r))*ysize) (を int と見なしたもの) とする. ただし, rは, [0,2PI) に値をとる一様乱数である.

1タイムステップごとに次のことが起こる.

  1. ウォーカーは, 上下左右のいずれかに, 確率 1/4 ずつで移動する.
  2. ウォーカーの移動先セル (x,y)の, まわり8セルのいずれかが不健康であるなら, (x,y) も不健康となる. そして, ウォーカーは, 新しい乱数 r を求めて, 新しい初期位置に置き直される
  3. ウォーカーがxsize × ysize 個のセルの外にでてしまった場合も, 新しい乱数 r を求めて, 新しい初期位置に置き直される
  4. 発病(不健康となること) が, (xsize/2,ysize/2) から 0.4*xsize より離れたところで起きるようになったら, このモデルには意味がなくなるので, 画面をポーズする(変化を止める)か, 終りです, と printf する.
  5. 上で説明した以外には発病は起らない
  6. 治癒は全く起らない

プログラム dla1.c を完成させ, ウォーカーを白の球, 不健康を赤の球, 健康を緑の板のまま, として, アニメーションしよう.

完成例: ~hig/cs2/cp/dla1

課題26_02(ta139) DLA

上の課題で, 画面の更新を1タイムステップごとには行わず, どこかで発病が起るごとに行う プログラム dla2.c を完成させよう. ランダムウォーカーは描かなくてよい.

完成例: ~hig/cs2/cp/dla2

課題26_03(ta140) 伝染病モデルにおける臨界現象

感染力がどのくらいの強さになったときに爆発的流行が起きるかを調べよう.

この課題では プログラムを多くの回数繰り返して実行しなければならない. 講義で説明する, シェルスクリプト, リダイレクション, バックグラウンドでの実行などを利用しよう.

サンプル epidemic2.c は, 伝染病モデルで, グラフィックス表示は行わずに, tmax タイムステップの経過後に, 全員が健康であれば 1, 不健康な者が残っていれば 0 を表示するプログラムである. 次のようなコマンドラインオプションを受け付ける.

s1609h017% epidemic2 -s seed -x xsize -l lambda -t tmax

seed   乱数の seed
xsize  土地の大きさ. xsize=ysize でいつでも正方形
lambda 感染率と治癒率の比
tmax   観察するタイムステップ数

サンプル epidemic3.c は, epidemic2 を, ntrial 試行 × nset セット実行し, 生存したものの比率と, 予想される誤差を表示するプログラムである. 上にあげたものに加えて, 次のようなコマンドラインオプションを受け付ける.
s1609h017% epidemic3 -n ntrial -N nset 
ntrial 試行回数
nset   セットの個数

このプログラムを繰り返し実行して, 横軸 λ , 縦軸生存確率 p のグラフを描こう. 全員が健康に戻っている確率が 0 から 1 に変化しているのはどのあたりだろう. また, 土地の大きさを, xsize=10,20,30 と変化させて, それぞれグラフを描こう.

グラフを描くには, gnuplot を思い出して使おう. "1.dat" というファイルが,

#x y    yerror
0.1 10.8 1.2
0.2 9.2  3.1
0.3 15.2 1.1
..
などという内容のとき,
gnuplot> plot "1.dat" with errorbars
とすると, 図のように, 点(x,y) に, 縦方向に長さ 2yerror のエラーバー付の点を 描いてくれる.


Saburo HIGUCHI, hig mail address