""" 森林火災模型: "森林"最初只是一個空的N×N網格。每個周期在網格上隨機選擇一個格點。 如果該格點為空,那么就以概率 g 在那里種上一棵樹。 如果該格點上已經有樹,那么閃電會以概率(1-g)擊中該格點。 如果該格點有一棵樹,那么樹會着火,火勢會蔓延到所有連接到該格點的有樹的格點。 """ import numpy as np from random import randint, uniform from collections import Counter import matplotlib.pyplot as plt def forest_fire_model(grid, g): i, j = randint(0, len(grid) - 1), randint(0, len(grid) - 1) p = uniform(0, 1) if not grid[i][j] and p <= g: grid[i][j] = 1 if grid[i][j] and p <= 1 - g: grid[i][j] = 0 if j >= 1: grid[i][j - 1] = 0 if i >= 1: grid[i - 1][j] = 0 if i <= len(grid) - 2: grid[i + 1][j] = 0 if j <= len(grid) - 2: grid[i][j + 1] = 0 return grid if __name__ == "__main__": grid = np.zeros((10, 10), dtype=np.int) # tree_num = [] for i in range(100000): grid = forest_fire_model(grid, 0.6) # 統計數組中某個元素的個數的兩種方法 # tree = Counter(grid.flat)[1] # tree = np.sum(grid == 1) # tree_num.append(tree) plt.imshow(grid) plt.show()