![]() 図1 ランダムウォークのグラフ |
Excel VBA 2007/2003/2002対応(できる大辞典) POD>乱数とモンテカルロ法POD版 入門ベイズ統計学 社会システム工学の考え方 確率と統計 コンピュータシミュレーション ビジネスマンのための「数字力」養成講座 (ディスカヴァー携書 20) 完全独習 統計学入門 |
ランダムウォークは酔っぱらいの運動です。 ある地点(原点)に酔っぱらいが立っており、任意の方向(ランダム)に1m移動します。 その地点からまた、任意の方向(ランダム)に1m移動します。 これを数回繰り返した後、酔っぱらいは最初の点(原点)からどれだけの距離にいるで しょう。 |
モンテカルロは言わずと知れたバクチの町です。 バクチ(サイコロ)を使ってシミュレーションを行うことをモンテカルロシミュレーションと いいます。 コンピュータの発達前、正20面体のサイコロを使い、シミュレーションが行われていた。 正20面体の場合、0〜9の数字を2箇所につくれば、10進数のサイコロが作れます。 コンピュータではサイコロの代わりに、(0〜1)の一様乱数が用意されています。 野球のコンピュータゲームを自動モードで実行すると、コンピュータ内で、選手個人の データ(打率など)に基づき、 乱数を使い、打球の方向などをきめ、ゲームが進行します。 短時間で何万試合でも行えるため、最適打順を決めるシミュレーションにも使えそうです。 EXCELの乱数(rand())はあまり性能が良くないようで、より良い乱数を組み込む必要が あるかもしれません。 |
図2のように、最初(N0. 1)の位置は原点(0,0)です。 2回目の方向(0〜360度)を乱数できめます。セル位置で =rand()*360 を入力します。 (randは0〜1の一様乱数のため、360倍すると0〜360の一様乱数となる) 角度の計算(sin,cos)はラジアンです。(1度=π/180ラジアン)セル位置で =(度のセル)*pi()/180を入力します。 移動量は三角関数を使います。 X方向移動量 = cos(方向) Y方向移動量 = sin(方向) 位置は前回の位置に移動量を加算します。 原点からの直線距離は位置から計算します。 = sqrt(X^2+Y^2) となります。 3回目以降は2回目をコピーするだけで、出来上がります。 ![]() 図2 モンテカルロシミュレーションによるランダムウォークの結果 |
図3のように、EXCELのグラフ機能を使い、ランダムウォークを図化します。 参考 :エクセル(EXCEL)でグラフを作ってみよう ![]() 図3 ランダムウォークのグラフ |
ランダムウォークによる酔っぱらいの位置の確立分布を求めます。1回目は必ず原点から1mの位置にいますが、2回目以降の確立分布関数を解析的に求めることは難しい。そこでモンテカルロシミュレーションによりこの確立分布を算出します。 図-4のように、原点からの距離の範囲を設定し、ランダムウォークを10000000回試行し、範囲に入った酔っぱらいの数をカウントします。試行回数を増やせば増やすほど、確立分布は理論解に近づきます。 ![]() 図-4 ランダムウォークを試行するエクセルシート ランダムウォークの試行は図-5のVBAを作成し、実行します。 ![]() 図-5 ランダムウォークを試行するVBA 算出された確立分布をグラフにしました。エクセルの乱数は性能が悪いようで、なめらかな曲線になっていないところもあります。 ![]() 図-6 ランダムウォークの確立分布グラフ |
