元胞自动机:森林火灾模拟(Python:numpy、seaborn)

本文介绍使用元胞自动机方法模拟森林火灾的过程,包括Python代码实现、关键步骤解析及可视化展示。
该文章已生成可运行项目,

目录

1.元胞自动机(Cellular Automation,CA)

2.森林火灾

3.伪代码

4.元胞自动机模拟森林火灾(Python实现)

(1)导入相关的库

(2)定义森林火灾函数(Forest_Fire函数)

①空位生长树木 (0 --> 1)

②周围树木燃烧 (1 --> -1)

③烧树木清除 (-1 --> 0)

④雷电击中正常树木 (1 --> -1)

(3)定义主函数(main函数)

(4)执行命令

5.森林火灾可视化呈现

(1)森林火灾各成分曲线图(趋势图)

(2)稳态分布图

(3)前置阶段演化图

第1时刻

第2时刻

第3时刻

第4时刻

第5时刻

第6时刻


1.元胞自动机(Cellular Automation,CA)

        元胞自动机(Cellular Automation,简称CA)是一个时间和空间都离散的动力系统,是一种常用的仿真方法。

        散布在规则格网中的每一元胞(cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新。大量元胞通过简单的相互作用而构成系统的演化。由冯诺依曼在20世纪50年代发明。

        元胞自动机不是由严格定义的物理方程或函数确定,而是由一系列规则构成凡是满足这些规则的模型都可以算作是元胞自动机模型。因此,元胞自动机是一类模型的总称,或者说是一个方法框架。其特点是时间、空间、状态都离散,每个变量只取有限多个状态,且其状态改变的规则在时间和空间上都是局部的。

元胞自动机的核心:状态和状态随时间演变的规则


2.森林火灾

<参考程序>

(1)正在燃烧的树变成空格位

(2)如果绿树格位最近邻居中有一个树在燃烧,则它变成正在燃烧的树

(3)在空格位,树以概率 p 生长;

(4)在最近的邻居中没有正在燃烧的树的情况下树以概率 f (闪电)变为正在燃烧的树

 


3.伪代码

 


4.元胞自动机模拟森林火灾(Python实现)

(1)导入相关的库

# 元胞自动机模拟森林火灾
import numpy as np
import random
import seaborn as sbn
import matplotlib.pyplot as plt

numpy库为科学计算库,用来处理多维数组(矩阵);

random库为Python标准库,用来生成随机数,描述森林火灾的随机性;

matplotlib库是最常用的绘图工具库,与seaborn库结合操作。

seaborn库底层是基于Matplotlib的,在此用来绘制热力图,使矩阵可视化(森林火灾可视化);


(2)定义森林火灾函数(Forest_Fire函数)

Forest_Fire函数如下,共有4个操作部分:

# 森林火灾函数
# 传入参数为:(1)当前的燃烧矩阵;(2)空格位 树的生长概率p;(3)正常位 树的燃烧概率f

# 假定:空格位 --> 0  正常位 --> 1   燃烧位 --> -1
# 总量:空格位 --> C  正常位 --> G   燃烧位 --> R

def Forest_Fire(current_matrix,p,f):
    matrix=current_matrix

    # (1)空位生长树木 (0 --> 1)   储存位置
    i_C_indexes = []
    j_C_indexes = []
    for i in range(area):   # 行循环
        for j in range(area):   # 列循环
            if matrix[i, j] == 0 and random.random()<p:
                i_C_indexes.append(i)
                j_C_indexes.append(j)
            else:
                pass


    # (2)周围树木燃烧 &  (1 --> -1)   储存位置,并存储上
本文章已经生成可运行项目
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值