生命を模倣するゲーム


ジョン・コンウェイというイギリスの数学者が考案したライフゲームというものがある.

これをコンピュータで実行するとシンプルなルールであるにもかかわらず,複雑なパターンを示すことができる.

参考コードを提示する.

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

def initialize_grid(size, density=0.2):
    return np.random.choice([0, 1], size*size, p=[1-density, density]).reshape(size, size)

def update(frameNum, img, grid, size):
    newGrid = grid.copy()
    for i in range(size):
        for j in range(size):
            total = int((
                grid[i, (j-1)%size] + grid[i, (j+1)%size] +
                grid[(i-1)%size, j] + grid[(i+1)%size, j] +
                grid[(i-1)%size, (j-1)%size] + grid[(i-1)%size, (j+1)%size] +
                grid[(i+1)%size, (j-1)%size] + grid[(i+1)%size, (j+1)%size]
            ))
            if grid[i, j] == 1:
                if (total < 2) or (total > 3):
                    newGrid[i, j] = 0
            else:
                if total == 3:
                    newGrid[i, j] = 1
    img.set_data(newGrid)
    grid[:] = newGrid[:]
    return img,

def main():
    size = 100
    grid = initialize_grid(size)
    fig, ax = plt.subplots()
    img = ax.imshow(grid, interpolation='nearest', cmap='binary')
    ani = animation.FuncAnimation(fig, update, fargs=(img, grid, size), frames=200, interval=50, save_count=50)
    plt.show()

if __name__ == '__main__':
    main()

参考文献

コメントを残す

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