05.森林火災模型


"""
森林火災模型:
"森林"最初只是一個空的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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM