VBA 数学マクロ入門講座です。今回は平面上にジグザグな痕跡を描く ランダムウォーク を VBA で実装します。
[VBA] ランダムウォーク
方角を無作為に決定しながら移動するアルゴリズムのことを ランダムウォーク (random walk) とよびます。ひと口にランダムウォークといっても色々あるのですが、今回はその中で一番単純な平面格子点上を動き回るアルゴリズムを VBA で実装してみましょう。具体的には動点が座標 (x, y) にあるときに、その隣(東西南北)にある格子点
(x + 1, y), (x – 1, y), (x, y + 1), (x, y – 1)
のいずれかを 1/4 の確率で選択して移動するというものです。
空白のワークシートを開いた状態で、以下のマクロを実行してください。
'[VBA] 平面格子点ランダムウォーク Sub Random_Walk() Dim x As Integer, y As Integer Dim i As Integer, rd As Integer '乱数を初期化します Randomize '出発点の座標を設定します x = 0 y = 0 '1000 ステップで実行 For i = 1 To 1000 '1 から 4 までの乱数を得ます rd = Int(4 * RND + 1) '乱数にもとづいて点を移動させます Select Case rd Case 1 x = x + 1 Case 2 x = x - 1 Case 3 y = y + 1 Case 4 y = y - 1 End Select Cells(i, 1).Value = x Cells(i, 2).Value = y Next i End Sub
Random_Walk() を実行すると、ワークシートの A 列と B 列にデータが入力されるので、 A 列と B 列を選択し、グラフウィザードから [散布図 (直線)] を選択して、軸の目盛などを適当に調整してください。次のような図が表示されるはずです。
Random_Walk() を実行するたびに、異なったグラフが表示されます。
もっと複雑な法則を組込んで動かすこともできますので、基本アルゴリズムをベースに皆さんで工夫して色々な ランダムウォーク を作ってみてください。面白いものができたら、コメントしてくださいね。ついでにコードも教えてください(← 図々しい)。
【次の記事】≫ AddChartメソッドでグラフを作成します
エクセルや数学に関するコメントをお寄せください