事例311
技術に寄せないシミュレーション:
現実により近い感染症シミュレーションを作りパラメータを変えて考察した1学期の試み
相模女子大学中学部・高等部 堺和貴子先生
今回は、今年度実施した「モデル化とシミュレーション」の授業内容をご報告します。
今年度の「モデル化とシミュレーション」は、1学期に3時間ほどで、Scratchを使って、より現実に近い感染症シミュレーションを作り、パラメータを変えて考察する課題に挑む、という流れで行いました。
プログラミングをまだ学んでいない状態で、どんなことをしたのか、どのような振り返りがあったのかをご紹介します。
発表の流れと主な内容がこちらです。
1.どんな構想だったか~ブログラムの中身は細かく扱わず、パラメータを変えて考えることに重点
まず、授業を実施するに当たっての背景をご紹介します。
私が初めてモデル化とシミュレーションを実施したのは「情報B」の時代でした。このときは、モンテカルロ法のシミュレーションをExcelを使って行いました。
当時は全くの手探りで、「シミュレーションをやるのであれば、RAND関数やINT関数といったものを最初に扱っておかないとできない」と思っていたので、とにかくその説明に重点を置いていました。
その結果、生徒は本題に入る前に息切れすることになってしまい、いざ本題のモンテカルロ法のシミュレーションの表示ができたところで、「これは一体何?」という感想しか残らないような状態になってしまいました。
そんな経験から、「私、シミュレーションが苦手かも…」と思うようになっていました。
そんな原風景もあり、改めて「情報Ⅰ」でシミュレーションを扱うに当たって、例えばプログラミングでシミュレーションをするなら、本当にプログラミングの中身をきっちり伝えておかなければいけないのかな、と当初は悩んでいました。
しかし、ここ数年、「データ活用」でアンケート分析や相関分析を扱う際には、表計算の実習にはあまり時間を割かず、どちらかというと、「仮説を立てて実証する」ということを重視した授業を行っていて、それで手応えを感じていました。ですので、「モデル化とシミュレーション」でも同じことができるのではないか、とも考えるようになっていました。
つまり、シミュレーションにおいても、細かなプログラミングの中身に触れるよりも、パラメータを変えて、出てきた結果について考える活動を重視することができるのかなと、何となく感じていたわけです。
それを受けての、今年度の構想です。
授業時間数の関係で、「シミュレーション」を1学期に置かざるを得ず、扱う時間も3コマほど。その中で、「プログラムの中身は細かく見ない」「パラメータを変えて、現実とのつながりを考える活動を取り入れる」「シミュレーションを使って考えることは、特別なことではなくて身近であることを実感させる」という授業にしたいと考えました。
では、題材は何にしようか。過去の実践事例をいくつか調べて、今の高校生たちはコロナ禍を経験しているので身近に感じられるかなということで、感染症のシミュレーションを扱うことにしました。
素材は、2022年度の全高情研で谷川佳隆先生が発表された事例(※1)のベースとなっているもので、『子供の科学』のWebサイトに掲載されているものです。
※2 「子供の科学」感染症拡散シミュレーションを応用してみよう
シミュレーションの実施例を紹介します。このシミュレーションは、初期の人数と感染者数を決めて実行し、全員が感染したら終了する、というものになっています。
この例は、初期の人数が50人、感染者を5人に設定しています。青玉が非感染、赤玉が感染状態で、赤玉が青玉にぶつかると、青玉の色が赤に変わって、感染した状態となります。シミュレーションが終わるまでの感染者数、感染回数、経過時間が表示されるようになっています。
このシミュレーションは感染率が100%だったり、一度感染するとずっと感染状態になって治ることがない、といった、あまり現実的ではない点がいくつかあります。このシミュレーションを変えて、より現実的なものにしていき、完成版を使って、自分でパラメータを操作してシミュレーションしてみよう、という授業を考えました。
2.やってみました~コードの改変は「ブロックを置き替えるだけ」。「シミュレーションで考える」課題の紹介
単元計画がこちらです。
1コマ目は単元の導入です。「モデル化とは」「シミュレーションとは」という内容を教科書に沿って説明しました。
人間の手では手間のかかるものを、コンピュータに任せられる、という一例として、表計算ソフトでサイコロの出目のシミュレーションをする、ということをやってみました。
続く2、3コマ目で、感染症シミュレーションを扱いました。今回の発表では、その部分についてご説明します。
まず、感染症シミュレーションの冒頭の内容です。
授業の最初に、感染症が蔓延する原因を考えてみます。
生徒に「インフルエンザなどの感染症は、どんな理由で流行してしまうだろうか」という質問を投げ掛けると、「手を洗わない」「密着する」「ワクチンを打たない」といった回答が出てきました。
では、これが本当にそうなのか考えようということで、感染症シミュレーションの作成に入っていきます。
生徒には、先ほどご紹介したシミュレーションを渡して、はじめの人数や感染者数を変化させると結果が変わることを確認させました。
ここで、「例えば人数を増やすと密な状況になるから、そうなると感染のスピードは変わるね」といった補足説明をしていきます。
ただし、このシミュレーションには現実的ではない部分があります。先ほど述べたように、ここでは感染率が100%なので、感染率を操作できるようにプログラムを変えていこう、ということにしました。
感染率が操作できるようになったシミュレーションの例を紹介します。
プログラムの変更は、既に作ってあるブロックを置き換えるだけにとどめました。
この例では、初期の人数50人、感染者5人、感染率を10%にしています。感染率は、1から100の間で設定ができます。感染率を操作すると、経過時間が長くなることが確認できます。
そして、このプログラムは、まだまだ改善の余地があります。それは、一度感染すると、治らずに感染したままになるという点です。授業では、さらに感染期間を設定したプログラムへと変化させていきます。
感染期間が操作できるようになったシミュレーションの例を紹介します。
人数50人、感染者5人、感染率10%、感染期間3で設定しています。感染期間は、1以上の数値を入力できるようになっていて、全員感染(または非感染)となった時点で終了しますが、そうでない条件下でも、30秒で終了するようになっています。
このプログラムで、パラメータは人数、感染者数、感染率、感染期間の4つになりました。この4つのパラメータを自由に操作させて、どのような結果になるかを確認させます。
単元計画の2時間目はここまでで、次の時間で、「シミュレーションを使って考察する」という課題に入っていきます。
課題の手続きはこちらです。
実習ワークシートは、下記のリンクからご覧ください。
※3 https://ws-portfolio.page/wp-content/uploads/2023/12/simulation_worksheet.pdf
最初に初期の状態を設定します。ここでは、「密な状態で感染症が流行している」という場面を想定し、人数を100人に設定します。それ以外の3つのパラメータは生徒が自由に決めます。
その条件で5回シミュレーションを行ってシミュレーションが終わったかどうか、シミュレーション終了時の感染者数や感染回数、経過時間を記録します。
※クリックすると拡大します。
次に、パラメータのうち、1つの数値を変更して、また5回シミュレーションを行います。
ここでは、人数を100人から50人に減らしています。ここまでで得られたシミュレーションから、パラメータを変える前と後の結果の比較をして、パラメータを変えた後の結果は、現実世界ではどのようなことが起きたときなのか、どのような手立てをしたときにあたるのかを考えさせます。
※クリックすると拡大します。
この回答例では、人数を100人から50人に減らした場合については、「感染者数や感染回数が少なくなった」と回答しています。また、現実世界の状態としては、「外出制限を行ったときはこうなるのではないか」という考察をしています。
※クリックすると拡大します。
他の回答例として、感染率を変化させたものを紹介します。
最初の状況では、シミュレーションが終わらなかったものの、感染率を上げたところ、30秒以内に全て玉が赤玉、つまり全員が感染する結果になりました。
経過時間は1で、あっという間に感染が広まったことになります。これについては、「感染力がとても強いウイルスが現れた上に、感染者が人に接触しやすい状況である」という考察がされていました。
※クリックすると拡大します。
3.生徒の振り返り~現実とのつながりから多くのことに気づく
このような授業を行った後の、生徒の振り返りをご紹介します。
まず、現実とのつながりを考えた振り返りが多く見られました。「密を回避することの意味が分かった」「現実で起こったことについて想像しやすくなった」といった、自分の生活と結び付いた意見がありました。シミュレーションを身近に感じるという点では、この課題を扱ってよかったと思います。
また、シミュレーションの中で乱数を扱うことで、結果が毎回変わることへの面白さや、結果が人によって違うこと、またパラメータを一つ変えるだけでも、結果が変わるというところに興味を持った生徒もいました。
自分の出したそれぞれの結果について、考察する活動ができたので、一方的に授業を受けるだけでは得られないような興味の持ち方をしてくれたのかなとも思います。
「シミュレーションに新たな要因を加えたらどうか」とか「他の場面に応用することはできないか」というコメントもありました。自分が出した結果について考察することで、新たな視点を発見することもできたのかなと思います。
さらに一歩踏み込んで、シミュレーションをする意義について考えてくれたコメントもありました。
「結果の分析が新たな発見につながる」、「シミュレーションをすることで、これからのことを考えられるのではないか」といった、この先へと視野を広げているコメントもあって、改めて、この方向性で授業をやってみてよかったなと感じました。
また、「ただシミュレーションをするよりも、考えながらやることが大事ではないか」というコメントもありました。確かに日常生活ではシミュレーションの結果を知ることのほうが多いかもしれませんが、自分がシミュレーションをする側になると、特定の場面を想定しながら、パラメータを設定することになります。
これを発展させて、問題解決との接点をさらに深く考えられる授業もできるのではないかと感じました。
5.これから発展できそうなこと~技術に寄せなくても実施は可能。仮説検証的な扱い方やデータの活用とのリンクもできそう
最後に、今回の授業を行っての、私自身の振り返りを紹介します。
3時間目の課題の部分では、「今回はパラメータを変えて『探索的に』シミュレーションを行っている」と記載しているとおり「まずやってみよう」と、パラメータを変えてどんな変化が起きるかをシミュレーションをさせる流れとなりました。
現実とどのようにリンクしているかについては、シミュレーションを行った後に考えさせていますが、この順番を逆にして、仮説検証的な扱い方もできるのではないでしょうか。問題解決的なストーリー立てが可能なのではないかと思っています。
シミュレーションの結果を比較する部分の所見では、今回はシミュレーション結果の表を眺めて記述させることにとどめましたが、この部分も、例えば平均値を算出したり、指標のグラフ化したり、といった工夫ができる部分もあるかと思います。
また、シミュレーションの赤玉と青玉の動きに注目していた生徒もいました。「シミュレーションの結果だけ比較するのではなく、調べているときの状況に着目することも大切だ」というコメントもあって、シミュレーションの動き自体に注目する方法もあるのではないかと思います。
そういった意味では、「データの活用」を見据えた授業も考えられそうです。
さらに、「モデル化とシミュレーション」の単元をいつ行うか、という点については、いつでもできそうだと考えます。
今回、プログラムの中身について、深掘りはしませんでしたが、プログラミングがよく分からないから、あるいは、Scratchがよく分からないからシミュレーションができない、という事態は起きていません。
問題解決ということを軸にして考えるのであれば、プログラミングを待たずとも、いつでも実施可能なのではないでしょうか。
最後にまとめです。
今回の授業を通して、シミュレーションの授業では、何よりも現実感を持たせることは大事であると思いました。また、パラメータを操作して、その結果について考えさせる学習活動は、人によって、結果が変わるからこその面白さというのもあるので、来年度も取り入れていきたいと思っています。
また、「スキル的な部分をきっちり固めないとシミュレーションに進めないというわけではない」ということも実感しました。技術に寄せなくても、今回のような授業を行うことができたことで、単独で早い時期に授業をすることも可能であることを改めて感じています。
まだまだ、さらにブラッシュアップの余地はあるかと思います。「こんな方法があるよ」「こうするともっといいよ」といったご指摘がありましたら、ぜひ教えていただけると嬉しいです。
神奈川県情報部会実践事例報告会2023オンライン オンデマンド発表より