meta.kimura

感情の率直と、思索の明澄と、語と文との簡潔とです。

続:感染シミュレーション遊び

f:id:meta-kimura:20200510231030j:plain

 まだ感染シミュレーションで遊んでいる(まだやってる)。
 前回の記事はコチラ。

 この前回の記事をあげたあとで思いついたことが2つあった。1つは移動再開を考慮したシミュレーションにしたらよかったということ。時勢を掴めておらなんだな、と、ゴールデンウィークがあけてから思ったのだ。遅い。
 もうひとつが、終息するターンの平均値を取れるんじゃないか、ってこと。シミュレーション自体はつくれたので、そいつを繰り返せば終息時(感染者がゼロになった時点)のターン数の平均値を求めることもできる、はずだ。
 せっかくつくったんだから、思いついたことはやってみるべきである。

●◯。。。...

 と、いうことで、前回のプログラムにあった問題点を修正して、移動再開のシミュレーションをつくってみた。あんまり時間がないので、今回は静止画にしている。感染者率が3%になったときに移動制限が変化するようにして、200ターンまで動かすと以下の結果となる。

f:id:meta-kimura:20200510223840j:plain

 設定については、プログラム上のミスを修正したり、試行錯誤を経て以下のようにした。もちろん、まだどこかで間違ってるかもしれないので、その辺はご勘弁を。

  • フィールドは50✕50のセルでつくられている
  • 隣接するセル(斜め含む)に感染者がいると20%の確率で感染する
  • 感染者は14ターン経過以降、10%の確率で免疫を獲得する
  • 感染者は14ターン経過以降、20%の確率で健康な人になる(再感染あり)
  • 感染者は14ターン経過以降、1%の確率で死亡する
  • 死亡した人はいなくなる(障害物などにはならない)
  • 人は1ターンごとにランダムで隣接する空きセルに動く
  • 感染者率が3%となった時点で移動制限が変化する

 上記の他に、シミュレーションにかかる時間の問題から、人口密度を9%に変更している。前回は10%だったので、色付きのセルの数が減っているハズだ。
 シミュレーションの結果は見ての通り。80%の移動制限が20%に切り替わると、やっぱり感染者率は跳ね返る。何度かシミュレーションを動かしていると、免疫の壁で囲めるかどうかが完全な終息のポイントかなぁ、といった感じだった。壁に穴があくと、どの段階からでも拡大するときは拡大する。
 それともうひとつ。上にあげたのは左右どちらも80%→20%のもので、初期配置だけ変えている。そうすると、既におわかりのように結果が大きく違う。やっぱりランダムの神様によって、大きくブレるのである。
 平均をとらねばっ。

●◯。。。...

 てなわけで、平均をとってグラフ化してみた。上記の条件のまま、80%→x%として、xに20%から79%までを入れて、それぞれで30回シミュレーションを動かして感染者がゼロになるターン数の平均値をとった。ついでに30回のシミュレーションの中で最もターン数が多くなったものと、最も少なく済んだもの、あと死者数の平均もとってみた。その結果がこちらである。

f:id:meta-kimura:20200510225850j:plain

 なんとなく、運がよければどんな移動制限でもわりと早い段階で終息するような感じなんだなぁ、という印象。あと、どっかに閾値みたいなのがあるんやないかと思っていたのだけれど、そんなのはなさそうだった。単純化したモデルだから、だらだらとした下り坂になるのは当然なのかもしれぬ。

●◯。。。...

 ちなみに、1%刻みで30回ずつシミュレーションをしたので、相当な時間がかかった。たぶん3時間くらいはつけっぱなしにしていた。「何を目指してんの?」と問われたけれど、答えは見つからなかった。
 でも、楽しかったのでOKとしよう。まる。


m(_ _)m