def simulate_fire(grid_size, prob_tree, prob_burning, prob_lightning, prob_immune, t): grids = [] grid = init_grid(grid_size, prob_tree, prob_burning) grids.append(grid) for i in range(t): new_grid = np.zeros_like(grid) ndimage.generic_filter(grids[-1], spread, size=3, mode="constant", output=new_grid, # these are passed to spread extra_arguments=(prob_immune, prob_lightning)) grids.append(new_grid.copy()) return grids
return padded_grid if __name__ == "__main__": grid_size = 50 prob_tree = .8 prob_burning = .0005 prob_immune = .25 prob_lightning = .00001 # Optionally, set a *seed* to make the random numbers reproducible. np.random.seed(123) grid = init_grid(grid_size, prob_tree, prob_burning) # Run the simulation t = 50 grids = [grid.copy()] for i in range(t): padded_grid = pad_grid(grids[-1], grid_size) new_grid = np.zeros_like(grid) for j in range(1, grid_size + 1): for k in range(1, grid_size + 1): new_grid[j-1, k-1] = spread(padded_grid[j-1:j+2, k-1:k+2].flatten(), prob_immune, prob_lightning)