ナチュラルスタイル(IchigoJamの製造・販売元)の松田さんが作ったシミュレーションプログラム
https://yrm006.github.io/sars2.html
がとても興味深かったので、私もIchigoJamで作ってみました。
IchigoJamボードやweb版ではかなり遅いので、アプリ版やRaspberry Pi版で動かすことをお勧めします。
動かし方
- 最初に、人間の人数、初期感染者数、感染確率、移動確率を入力します。
- スペースキーを押すと、シミュレーションを開始します。スペースキーを押すごとに1日ずつ進みます。
- 人=未感染者
- ネコ=感染者(発症していない)
- 宝箱=発症して入院中
- イチゴ=快復して免疫を獲得した人
- 十字架=死亡者
未感染者は設定した確率で移動し、感染者に出会うと設定した確率で感染します。
入院中の人は移動せず、感染も広げません。(院内感染は考えない)
快復時期になると、一定の確率(デフォルトは80%、1行目の変数F)で免疫を獲得して退院し、以降は感染しません。また、一定の確率(デフォルトは3%、1行目の変数G)で死亡者が出ます。
なお、感染してから発症するまでは14日、入院期間は10日で固定です。
設定パラメータをいろいろ変えて試してみると興味深いです。だいたい50日くらいで免疫獲得者ばかりになって収束しますが、それまでの感染者・入院者の数がだいぶ変わります。
テレビなどで「感染者○人」という数字だけ見ているとよくわからないのですが、こうしたシミュレータを動かしてみると、子ども達でもイメージがつかみやすいかもしれません。
プログラム
日本語版
1 CLV:CLS:F=80:G=3 2 INPUT "ニンズウ(1-100) N=",N 3 INPUT "カンセンシャスウ(1-N) E=",E 4 INPUT "カンセンカクリツ(0-100)A=",A 5 INPUT "イドウカクリツ(0-100)M=",M 6 ?:?"PUSH SPACE" 7 IF !BTN(32) CONT 8 WAIT 30 9 CLS 10 LC 10,23:?"N=";N;" E=";E;" A=";A;" M=";M; 11 FOR I=1 TO N 12 X=RND(31):Y=RND(23) 13 Z=0:IF I<=E Z=1 14 GSB 43 15 [I]=X+Y*32+Z*1024 16 NEXT 17 CLK:D=D+1:LC 0,23:?"DAY=";D; 18 FOR I=1 TO N 19 X=[I]&31:Y=[I]/32&31:Z=[I]/1024 20 IF Z>0 && Z<25 GSB 26 21 IF RND(100)<=M GSB 30 22 [I]=X+Y*32+Z*1024 23 NEXT 24 IF INKEY()!=32 CONT 25 GOTO 17 26 Z=Z+1:IF Z<25 RTN 27 R=RND(100):IF R>F Z=0 28 IF R>99-G Z=26 29 RTN 30 IF Z>=15 && Z<=24 || Z=26 GSB 43:RTN 31 U=X+RND(3)-1 32 V=Y+RND(3)-1 33 IF U<0 U=30 34 IF U>30 U=0 35 IF V<0 V=22 36 IF V>22 V=0 37 H=SCR(U,V) 38 IF H=236 && Z=0 && RND(100)<A Z=1 39 LC X,Y:?CHR$(0) 40 X=U:Y=V 41 GSB 43 42 RTN 43 LC X,Y 44 IF Z=0 C=249 45 IF Z>=1 && Z<=14 C=236 46 IF Z>=15 && Z<=24 C=246 47 IF Z=25 C=255 48 IF Z=26 C=43 49 ?CHR$(C) 50 RTN
英語版
パラメータ入力時のメッセージを変えただけで、その他は同じです。
1 CLV:CLS:F=80:G=3 2 INPUT "People(1-100) N=",N 3 INPUT "Carrior(1-N) E=",E 4 INPUT "Infect rate(0-100)A=",A 5 INPUT "Move rate(0-100) M=",M 6 ?:?"PUSH SPACE" 7 IF !BTN(32) CONT 8 WAIT 30 9 CLS 10 LC 10,23:?"N=";N;" E=";E;" A=";A;" M=";M; 11 FOR I=1 TO N 12 X=RND(31):Y=RND(23) 13 Z=0:IF I<=E Z=1 14 GSB 43 15 [I]=X+Y*32+Z*1024 16 NEXT 17 CLK:D=D+1:LC 0,23:?"DAY=";D; 18 FOR I=1 TO N 19 X=[I]&31:Y=[I]/32&31:Z=[I]/1024 20 IF Z>0 && Z<25 GSB 26 21 IF RND(100)<=M GSB 30 22 [I]=X+Y*32+Z*1024 23 NEXT 24 IF INKEY()!=32 CONT 25 GOTO 17 26 Z=Z+1:IF Z<25 RTN 27 R=RND(100):IF R>F Z=0 28 IF R>99-G Z=26 29 RTN 30 IF Z>=15 && Z<=24 || Z=26 GSB 43:RTN 31 U=X+RND(3)-1 32 V=Y+RND(3)-1 33 IF U<0 U=30 34 IF U>30 U=0 35 IF V<0 V=22 36 IF V>22 V=0 37 H=SCR(U,V) 38 IF H=236 && Z=0 && RND(100)<A Z=1 39 LC X,Y:?CHR$(0) 40 X=U:Y=V 41 GSB 43 42 RTN 43 LC X,Y 44 IF Z=0 C=249 45 IF Z>=1 && Z<=14 C=236 46 IF Z>=15 && Z<=24 C=246 47 IF Z=25 C=255 48 IF Z=26 C=43 49 ?CHR$(C) 50 RTN