ランダムウォークという確率モデルが存在する.
このモデルを実験するシミュレーションコードを作成したので共有したい.想定環境はColab.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import random
# 初期設定
num_agents = 20 # エージェントの数
num_steps = 200 # シミュレーションのステップ数
grid_size = 50 # グリッドのサイズ
# エージェントの初期位置をランダムに初期化
positions = np.random.rand(num_agents, 2) * grid_size
# ランダムウォークの関数
def random_walk(positions):
new_positions = positions.copy()
for i in range(len(positions)):
step = np.random.choice([-1, 0, 1], size=2) # -1, 0, 1のランダムなステップ
new_positions[i] += step
new_positions[i] = np.clip(new_positions[i], 0, grid_size - 1) # グリッドの範囲内に制限
return new_positions
# 各ステップでプロットを更新する関数
def update(frame):
global positions
positions = random_walk(positions) # ランダムウォークを実行
scat.set_offsets(positions) # 散布図の位置を更新
return scat,
# プロットの設定
fig, ax = plt.subplots()
scat = ax.scatter(positions[:, 0], positions[:, 1], color='blue')
ax.set_xlim(0, grid_size)
ax.set_ylim(0, grid_size)
ax.set_title("Random Walk Simulation")
ax.grid(True)
# アニメーションを作成
ani = FuncAnimation(fig, update, frames=num_steps, blit=True, repeat=False)
# アニメーションをGIFとして保存
ani.save('random_walk_simulation.gif', writer='imagemagick', fps=10)
plt.show()