本文へスキップ
モンテカルロシミュレーション
1. モンテカルロ法とシミュレーション

シミュレーションとは
 シミュレーションとは何でしょうか。子供の頃、何なにごっこという遊びをしました。本物ではなくまねごとですが、実際の大人になったつもりで、小さな世 界を作りだしていました。シミュレーションはまさにこの”ごっこ”なのです。実際に起るであろうさまざまな事象をコンピュータにまねをさせること、それが シミュレーションです。
 図1.1.1をご覧下さい。まず、現実の現象をモデル化します。そのモデルにしたがって、コンピュータにより、まねのための計算をし、実際の結果を推定 するものです。コンピュータによるシミュレーションによれば、実際の現象があまりに大規模であったり危険が伴うような場合でも、経済的に安全に実験ができ ます。またソフトウェアによって構成されるので、その条件を任意にかつ簡単に変更でき、融通性に富むという利点があります。シミュレーションの使い方は、 さまざまですが、システムの設計において事前にその特性を評価したり、施策の予測を行い、意志決定に反映させる場合などに用いられます。また最近では、シ ミュレーションを用いたゲームも、ポピュラーになってきました。

図1.1.1  コンピュータシミュレーション


連続変化モデルと離散変化モデル
 コンピュータ・シミュレーションでは、現実をモデル化し、それをコンピュータの上で計算をして結果を得ます。そのモデル化の方法として、シミュレーショ ンする対象により、連続変化モデルと、離散変化モデルに大きく分けられます。連続変化モデルは、時間経過に伴う事象を微分方程式によって記述します。この 微分方程式をコンピュータによって解くことが、連続変化モデルのシミュレーションです。たとえば、機械系の振動、電気回路の振舞いなどは、微分方程式で記 述できます。
 それにたいし、離散変化モデルは、確率的に不規則に起る現象を、コンピュータによって実験し、再現しようとするものです。例えば、放射性原子の寿命を調 べる、公衆電話の待行列の長さを予測する、電話のお話中である確率を調べる、高速道路の料金所でならぶ時間を調査する、コンピュータの内部処理の性能を解 析するなどの問題がこれにあたります。一般に、離散変化モデルのほうが連続変化モデルより、解析が困難な場合が多く、コンピュータ・シミュレーションのあ りがたみが大きいわけです。この本であつかうシミュレーションの範囲は、おもにこの離散変化モデルのシミュレーションです。

モンテカルロ法
 確率的に不規則な現象をコンピュータで再現するには、不規則な数、すなわち乱数を用います。乱数を用いたコンピュータ実験のことをモンテカルロ法という ことがあります。離散変化モデルのシミュレーションは、モンテカルロ法が基本となっています。モンテカルロ法の最初の例は、18世紀のスランスの自然科学 者 Comte de Buffon の実験に見られます。5.1節でそれを再現しますが、2本の平行線を引いた平面の上に針を落し、針と平行線の交わる回数を数えることにより、πの値を計算 できるというものです。
 また、モンテカルロ法が実用化されたのは、第2次大戦中の研究です。ロスアラモス科学研究所の John von Neumann らは、中性子が物質の中を動くさまを知るために、通常の方法では危険で時間がかかりすぎるため、ビュホンの珍奇と思われてきた方法(5.1参照)を、コン ピュータで再度採用したのです。そしてこのやり方の暗号名を、知的な賭遊びと同じ原理に基づいていることから、モンテカルロ法と呼びました。

離散シミュレーションをもっと手軽に
 離散シミュレーションのためには、通常大型コンピュータや、場合によっては、スーパコンピュータが用いられます。それは確率実験の場合、十分な計算時間 をかけないと、精度の高い、結果が得られないからです。後でのべるように、1桁の精度を上げるためには、それまでに要した計算の100倍の計算をしなけれ ばなりません。ですから手元にある、パーソナル・コンピュータや、ワーク・ステーションでは、とても手におえない範囲のこととされていました。また、離散 モデルをうまく記述するためのコンピュータ言語、例えばGPSS、SIMSCRIPTなどは、もっぱら大型コンピュータの上でのみしか、動けませんでし た。
 この本では、Web上で、極く簡単に離散シミュレーションをおこなおうとするものです。

Javaを用いる
 本書ではシミュレーション・プログラミングにJavaを用いることとしました。それはWebページから実行するためのアプレットと いうプログラムを書くことが出来るからです。Javaは1995年にSun Microsystems社から発表された言語で、オブジェクト指向で、実行 環境(ハードウェアやOS)に依存しないことを特徴としています。この実行環境に依存しないコードを実行するための環境をJava仮想マシン(JVM)と 呼びます。WindowsやUNIX用のJVMが用意されていますが、Webブラウザに組み込まれたJVMをつかうとアプレットが実行できます。ユーザ は、インターネットで、サーバに置かれたアプレットをいつでも使うことが出来ます。

簡易ウインドウシステム
 画面上のスクリーンにシミュレーションの結果を、グラフにして出力すると、全体が把握できたいへんわかりやすい。ところが、パーソナル・コンピュータや Javaのスクリーンは、一般に左上が原点で、右へあるいは、下へ行くほど座標の値が増える方向にあります。いっぽう、物理、数学などで用いるグラフは、 原点は左下で、増加方向は、右あるいは、上が通常です。また、一つの、スクリーン上に、二つ以上のグラフを同時に表示できるようにすると大変便利です。簡 易なウインドウシステムをつくり、座標変換をあわせて行なうように、スクリーン座標と論理座標を変換するclassを作りしました。これらの説明は付録にあります。