当サイトではアフィリエイトプログラムを利用して商品を紹介しています。

【VBA】ランダムウォークで平面格子点上を動き回ります

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 列を選択し、グラフウィザードから [散布図 (直線)] を選択して、軸の目盛などを適当に調整してください。次のような図が表示されるはずです。

VBAランダムウォーク試行1
Random_Walk() を実行するたびに、異なったグラフが表示されます。

VBAランダムウォーク試行2
もっと複雑な法則を組込んで動かすこともできますので、基本アルゴリズムをベースに皆さんで工夫して色々な ランダムウォーク を作ってみてください。面白いものができたら、コメントしてくださいね。ついでにコードも教えてください(← 図々しい)。

エクセルや数学に関するコメントをお寄せください