見出し画像

3分間感染シミュレーション ~「みんなの・みんなによる・みんなのためのシミュレーション」へ

昔、昔、その昔の1990年代、私は計算機シミュレーションの研究者を10年間やっていました。その後ライティングに転じ、今は「生活保護と社会保障のヒト」と思われてしまっています。

しかし、科学・技術に関するライティング歴の方が長いし、著書もそちらの方が多いのです(Amazon著者ページ)。感染シミュレーションの話を聞くと、あああ若いころの血がうずく。「アマビエ」ならぬアマエビをつまみにコロナビールを飲んでいるのではガマンできない!

「みんなの感染シミュレーション」が必要なのでは?

現在、新型コロナウイルスの感染拡大に際して、日本の概ね全員が「専門家会議がああ言った」「政府方針がこうなった」という結果を受け止めて、是非を云々したり、受容したり反発したりしています。まるで「雨だから傘をさす」、あるいは「このくらいの雨なら傘はいらない」と判断するかのように。
この現状は、あまりにも惜しい。日本は識字率が高く、リテラシーの基盤が充実している国の一つです。スマホをはじめとする情報機器も普及しています。誰もが、本格的な感染シミュレーションを出来るようになれないかなあ?

「みんなによる感染シミュレーション」は可能か?

そんなわけで、就学前の子どもでも扱えることで評判のプログラミング環境「Viscuit(ビスケット)」で、サクっとプログラミングしてみました。
「Viscuit」は、スマホで充分に動きます。「プログラミング、開発環境がなくて手が出せない」という問題も少ないはず。

まずは小さな世界で、単純なモデルで

まずは小さな世界と単純なモデルで、出来るかどうかを検討。これは、シミュレーションのプロがフツーに行う仕事の一部です。
同じ現象でも登場人物数が10人から1億人になると、「人数が多すぎるのでコンピュータで扱えない」という場面はあります。
いずれにしても、どこかに計算能力の限界があります。まだまだ限界まで余裕ありまくりの規模で、何がやれそうか見てみることには、その計算自体はごく小規模でも意味があるのです。

今回の前提は?(ちょっと単純化の度が過ぎるけど)

今回は、以下の前提をおきました。

・最初から最後まで、合計10人がいる
・10人のうち9人は感染していない人(緑の●)、1人は感染者(赤い●)
・最大1回または2回まで感染させることができる。感染させる能力を失ったら緑の○になり動きを止める
・1人の感染者が生み出す感染者数は、1回目と2回目の感染で変わらない(R0=R1)

この前提のもと、プログラミングしてみました。
身体障害で指先の運動能力がトロい私には、5分近くかかるものもありましたけど、指先の運動能力が健常な方は3分以下でできそうです。

下の画像は、最初の状態です。

画像4

これら10個の点がそれぞれ画面上を動き回り、赤と緑が出会ったら緑が赤になり(感染)、赤は外枠だけの緑となり動きを止めます。これが、「感染者1人は1人の感染者を産み出す」ということの表現です。

Rが1.0を超える場合、感染者1人が2人以上の感染者を産み出すことがありえます。「感染者1人が2人の感染者を生み出す」ということは、感染者を「生み出した感染者が0人の感染者(橙色)」「生み出した感染者が1人の感染者(赤色)」の2通り用意すれば、表現できます。

実際には、Rは「感染者が生み出す新たな感染者数の分布」から導かれる数値です。たとえば R1=2.0 の場合、「4人の感染者のうち3人は新たな感染者を産み出さなかったけれど、残る1人は8人に感染させるスーパースプレッダーだった」というケースも考えられます。そういう可能性をViscuitでのプログラミングに持ち込むことは出来ますが、今回はできる限りの単純化を追求しました。

結果はどうなる?

実行開始から1分後の様子のスクリーンショットを、下に示します。Rが1.0になると世界が変わり、2.0というのはもうトンデモナイことである様子が、一目瞭然です。
実行開始から1分間の様子のYouTube動画へのリンク、ぜひたどって、R(一人の感染者が生み出す感染者数)の違いが1分後の運命をどのように変えていくか、見てみてくださいね。
実行環境へのリンク(パソコンのWebブラウザから行けます)もあります。パソコンのWebブラウザ+Adobe Flash のある環境なら、実際に実行してみることができます。

以下、1分後のスクショです。

・R0 = R1 = 0.5(YouTube動画はこちら 実行はこちら ( Adobe Flash が必要) )

感染してない人(緑の●)多数。

画像3

・R0 = R1 = 1.0(YouTube動画はこちら 実行はこちら ( Adobe Flash が必要))

感染スピードが速くなってます。

画像3

・R0 = R1 = 2.0(YouTube動画はこちら  実行はこちら ( Adobe Flash が必要))

もう、ほぼ全員が感染。

画像3

R0・R1・R2……を別の値にすることも、それらに「0.7」とか「1.4」とか「4.2」とか任意の値を入れることも(若干、面倒くさいですけど)、隔離・免疫獲得・再陽性化など現実のもろもろを反映することも可能です。

「専門家会議」と同じことは出来るのか?

専門家会議の使っているモデルや計算やツールは、特に「国家秘密の何か」というわけではありません。R言語はじめ同じ環境をお使いになれる方には、「それそのもの」が再現できます。
Viscuitはフツーにプログラミング言語です。原理的には「同じことは、やってやれなくはない」のですが、ステップ数は多くなります。高級言語なら3行で言えることのために、時に10倍以上の行数(正確には「メガネ」数)が必要になります。
私自身は「式で書いたら3分、パラメータ代入したら3秒で済むのに。面倒くせー。ふつうのプログラミング言語に逃げ出したい。逃げちゃえ!」ということになっちゃいそうです。約45年前、中学生の私がプログラミングに最初にチャレンジして挫折した時には、アセンブリ言語のニーモニックしかなかったのよ。高校を卒業して再びチャレンジしたときも、ほぼ、ニーモニックでプログラミングするしかなかったのよ。パソコンでの高級言語だけでのプログラミングが実用に耐えるものになったのは、その数年後だったのよ。「そんな世代だから」ということで、許して~。

それでも Viscuit を選択する理由

自分自身が、想像だけで「タルい」とうんざりするのに、それでも「Viscuitで」と言っている理由の一つは、
「ステップを踏めば誰でも分かるし、真似てみることも容易」
だからです。
Viscuitがプログラミング教育に良いのかどうかに関しては、異論もあります。しかし「誰でも出来る」という点においては、群を抜いています。完全な初心者でも、開始から3分以内にプログラミングを開始できます。ここまで習得コストが低いプログラミング環境は、他にありません。

「みんなのためのシミュレーション」へ

日本にはプログラミング教育熱の盛り上がりがあります。今はそれどころじゃなくなってますけど。ICTリテラシーもそれなりに高く、スマホは普及しています。
井戸端会議や居酒屋談義で「ちょっとシミュレーションしてみよっか?」と盛り上がるのが当たり前になったら、きっと素敵です。そして、特別な投資は必要ないんです。みなさん、スマホお持ちなんですから。

みんなの・みんなによる・みんなのためのシミュレーション、やりましょ!

最後にちょっと宣伝:『いちばんやさしいアルゴリズムの本』(共著)

Viscuitでのプログラミングの特徴の一つは、アルゴリズムについて考える必要はないことにありますが、アルゴリズムを知っておいて損することはなくトクは多数です。

数学者・永島孝先生との共著『いちばんやさしいアルゴリズムの本』は、ひそかな自信作です。前提知識は小学校算数。
購入する決心がなかなかつかない方は、ぜひ、お近くの公共図書館にリクエストを。

ノンフィクション中心のフリーランスライターです。サポートは、取材・調査費用に充てさせていただきます。