モデル化とシミュレーション
コンピュータを用いて問題解決を図る際の一つの手法として、「モデル化」と「シミュレーション」があります。
「モデル化」:物事の本質的な部分だけを残して、単純化・抽象化すること。単純化・抽象化されたものを「モデル」と呼びます。
「シミュレーション」:「モデル」を用いて行う実験のこと
モデルの種類
モデルには様々な種類があります。
「物理モデル」:実物を模したモデル。実際の形を目にしたり利用することで、問題解決の一助とします。
(例)
・モデルルーム(実物モデル):実物そのものを作成するモデル。実物大の模型と考えると理解しやすいかもしれません。
・分子模型(拡大モデル):実物を拡大したモデル。
・ミニカー(縮小モデル):実物を小さく表現したモデル。
「論理モデル」:数式や論理式、さらには図などで現象や手続き等を表現したモデル。
(例)
・数式モデル:理想気体の状態方程式 PV = nRT など事象を数式で表したモデル。
・図的モデル: 列車の路線図など、要素の関係を図で表したモデル。
さらに、時間に対しての関係性で以下の分類もできます。
「静的モデル」:時間の経過がほかの要素に影響を与えないモデル
(例)列車の路線図など
「動的モデル」:時間の経過がほかの要素に影響を与えるモデル
(例)放物運動など
そして、確率的な要素が関係するかどうかで、以下のような分類もあります。
「確定的モデル」:変動する要素がなく、結果が1つになるモデル
(例)例えば、金融において預金金利が5%である場合の、5年後の預金額など
「確率的モデル」:変動する要素があり、結果が複数得られる可能性があるモデル
(例)複数回サイコロを振って、出る目の数の回数など
シミュレーション
上述のような、色々なモデルを用いて行う実験が「シミュレーション」です。
その、「シミュレーション」では「乱数」とよばれるものを使用することがあります。
「乱数」:値が一定の範囲内で、不規則かつ、等確率で出現する数字の列
この乱数は、多くのプログラミング言語では専用の命令分を持っています。例えば python では、
random.randint(1, 6)
のように記述すれば、1から6までの範囲から、数値を1つ返してくれます。
一定の範囲内であるということが特徴で、例えばサイコロの出目をシミュレートする際、一般的には、1から6の値に収まって欲しいですよね。
よって、コンピュータで使用する「乱数」は「疑似乱数」と呼ばれたりします。
この「乱数」を用いたシミュレーションは、サイコロの出目の出現率のように、まさに確率をシミュレートする例は直感的に分かりやすいかと思います。その他に「乱数」を用いるシミュレーションの例として、円周率を求めるものを以下に紹介します。
下の図のように、半径 r の円と、その円に外接する1辺 2r の正方形があるとします。
その正方形の中に入る範囲で、無数に点を打っていくと「打った点の数(= 正方形の中に打った点の数)」と「円の中に打たれた点の数」はそれぞれの面積に比例すると考えられるので、
「円の中に打たれた点の数」/「正方形の中に打った点の数」 = πr2 / ( 2r x 2r ) = π / 4
となります。
その式より、「円の中に打たれた点の数」 と「正方形の中に打った点の数」をそれぞれ数え、その比をとり、4倍すれば 円周率π(の近似値)が計算できることになりますね。このような手法を「モンテカルロ法」と呼びます。
その他に、例えば数式を使用しないシミュレーションの例としては、
家の部屋の平面図に対して、サイズが既知の家具を配置してみるもの、などがありますね。