ランダムウォークという確率モデルが存在する.

このモデルを実験するシミュレーションコードを作成したので共有したい.想定環境は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()

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です