第3章:確率的モデルのシミュレーション

こんにちは!ここでは「モデル化とシミュレーション」の中でも、特に「確率的モデル」について学んでいきます。前の章で学んだ「確定的モデル」は「決まった入力に対して、必ず同じ結果が出る」ものでしたが、今回の主役は「やってみるまで結果がわからない(偶然に左右される)」現象です。

「確率は苦手だな…」と思う人もいるかもしれませんが、大丈夫です!コンピュータにサイコロを振らせるイメージで、楽しく理解していきましょう。

1. 確率的モデルとは?

私たちの身の回りには、計算だけでは100%予測できないことがたくさんあります。例えば、レジに並ぶ人数、明日の天気、サイコロの目などです。このように、「偶然(確率)」の要素を含んだモデルを「確率的モデル」と呼びます。

【ポイント】
・確定的モデル:法則に従い、結果が一つに決まる(例:自由落下、一定速度の移動)。
・確率的モデル:偶然の要素が入り、結果が毎回変わる(例:待ち行列、感染症の広がり)。

豆知識:
「シミュレーション」という言葉の語源は、ラテン語の「simul(似せる)」です。現実の複雑な動きを、コンピュータの中で「似せて」再現するんですね。

2. 乱数(らんすう)の役割

確率的モデルのシミュレーションで欠かせないのが「乱数」です。乱数とは、次に何が出るか予測できないバラバラな数字のことです。

共通テストのプログラム表記などでは、よく次のような形で登場します:
\(R = 乱数(1, 6)\)
これは、「1から6までの整数を、同じ確率で1つ取り出す(サイコロを振るのと同じ)」という意味です。

例えば、降水確率 \(30%\) を再現したい場合は、次のように考えます。
もし \(乱数(1, 100) \le 30\) ならば:
| 雨が降る
実行:
このように、乱数を使うことで「確率」をシミュレーションの中で表現できるのです。

3. 代表的な例:待ち行列(まちぎょうれつ)

確率的モデルの最も有名な例が、銀行やコンビニのレジの列を分析する「待ち行列」のシミュレーションです。

レジに人が来るタイミングはバラバラですし、一人ひとりの会計にかかる時間も違います。これらを「平均」だけで計算すると、実際には大行列ができてしまうことがあります。

シミュレーションの流れ:
(1) 客が来る間隔を乱数で決める。
(2) 一人の客の処理時間を乱数で決める。
(3) これを何百回、何千回と繰り返して、「平均の待ち時間」や「最大の列の長さ」を調べます。

よくある間違い:
「平均 \(3\) 分に \(1\) 人客が来て、処理に \(2\) 分かかるなら、行列は絶対にできない」と考えてしまうのは間違いです!たまたま \(2\) 人同時に客が来ると、行列は発生します。確率的モデルは、この「たまたま」を評価するために重要なのです。

4. 試行回数と結果の安定

確率的モデルのシミュレーションでは、「たった \(1\) 回」の結果だけで判断してはいけません。

例えば、サイコロを \(1\) 回振って \(1\) が出たからといって、「このサイコロは \(1\) が出る確率が \(100%\) だ!」とは言えませんよね。何度も何度も繰り返し(試行といいます)、その平均値分布を見ることが大切です。

【ポイント】
・試行回数(シミュレーションの回数)を増やすほど、結果は理論上の数値に近づき、安定します。
・\(1\) 回の結果は偶然に左右されますが、\(1000\) 回、\(10000\) 回と繰り返すことで、信頼できるデータになります。

豆知識:モンテカルロ法
たくさんの乱数を使って、何度もシミュレーションを繰り返すことで正解を導き出す手法を「モンテカルロ法」と呼びます。カジノで有名な地名が由来なんですよ!

5. シミュレーション結果の評価

シミュレーションが終わったら、その結果をどう使うかが重要です。
待ち時間が長すぎる場合:レジの台数を増やす、あるいはセルフレジを導入するなどの改善策を考えます。
在庫が余りすぎる場合:仕入れのルールを変更します。

このように、「もし〜を変えたら、結果はどう変わるか?」という「What-if分析」をコンピュータ上で行えるのが、シミュレーションの最大のメリットです。

まとめクイックレビュー:
確率的モデルは「偶然」の要素を含む。
・偶然を再現するために乱数を使う。
待ち行列などは、平均値だけでは見えない「混雑」を予測できる。
・正しい判断をするためには、十分な試行回数が必要である。

最初は難しく感じるかもしれませんが、「コンピュータにたくさんの実験を代わりに行ってもらっている」と思えば、少し身近に感じられませんか?共通テストでも、プログラムの穴埋め問題として出やすい分野なので、しっかりと仕組みを理解しておきましょう!