Unityで感染シミュレーションを作った話
2022-04-13
azblob://2022/11/11/eyecatch/2022-04-07-Infection-simulation-000.jpg

こんにちは、2022年入社のうみのです。

今回は学生時代の研究テーマだった感染シミュレーションについて説明します。

突然ですが、この式なんだか分かりますか?

この式は感染症流行モデルの基本となるSIRモデルです。

この式に値を代入することで、感染症が蔓延する期間を求めることができます。

この式の簡単な解説

このSIRモデルは対象とする集団を、S、I、Rの3種類の個体群に分類し、感染推移はS→I→Rの順番に変化します。

式の中で使われている文字は以下のような意味になっています。

  • S(susceptible):未感染者
  • I(infectious):感染者
  • R(recovered):免疫獲得者
  • t:時刻を表しており、S(t)、I(t)、R(t) は時刻 t における人数
  • N:S, I, R の人数を足した合計人数
  • β:感染率を表し、感染する可能性がどの程度高いかを表す確率
  • γ:回復率を表し、感染者が回復する確率

実際に上記の式を計算した結果

これで0日目から約60日目に感染症は収束することが分かります。

計算式の初期条件は以下の通りです。

  • N:5601(八王子市の人口100分の1)​
  • S:5600人(未感染者数)
  • I:1人​(感染者数)
  • R:0人(免疫獲得者)
  • β:感染率50%(感染者になる確率)​
  • γ:回復率20%(免疫保持者になる増加量)​
  • t:0~100日(シミュレーション期間)

SIRモデルの問題点

この式で簡単な感染症の計算はできるのですが、未感染者がマスクを着用している場合や人の動きを止めた時の人数の増減を考慮することができません。

そのような機能を実現できる感染シミュレーションの作成を研究で行いました。

感染シミュレーションをUnityで作成

これは八王子市の地域メッシュデータをもとに生成した地形に八王子市の人口を100分の1にした時の画像です。

白、緑、青色の点々があると思うんですけど、これは白色が未感染者、緑色が感染者、青色が免疫獲得者になります。

感染シミュレーションの結果

2次元空間内の八王子市で感染シミュレーションをした結果になります。

初期条件は以下の通りです。

  • 八王子市の人口を100分の1にした人数(5601人)​
  • 初期感染者1人
  • 感染率は50パーセント​
  • 人の一日に移動する距離は約3840m​
  • 潜伏・発症期間はそれぞれ5日(10日)​
  • 1日の計測時間は24分 (現実時間の24分)​
  • 人は0〜8分就寝していることを仮定して動きを止める​
  • 人の動きは一定として、1分ごとに動く方向がランダムで変更される ​
  • シミュレーション期間は1~101日​
  • 感染者が非感染者に接触した場合に感染の有無が行われる ​
  • 感染した場合は、潜伏・発症期間後に、免疫保持者に変化する 

感染シミュレーションを作成しての感想

研究の第一目標だったUnityを使用した感染シミュレーションは作成できたので、研究としては成功しました。

ただ、八王子の人口を100分の1にしているように、Unityで大量のデータを同時に動かしながらの実験には限界あり、上記のような結果を出すのに毎回1時間ぐらいかかっていました。

ですが、計算式ではない方法で感染シミュレーションができるものが形になったので良かったです。