目录

森林火灾模拟

1.to setup:建立一个森林和起火线

2.to go:燃烧

模型改进

改进(一):考虑树木的可燃性

改进(二):考虑风的影响

改进(三):考虑火苗的远距离传播


森林火灾模拟

森林火灾模拟来自netlogo模型库。主要思路是通过让turtles随机改变周围turtles的颜色模拟火灾发生,并探索森林密度与烧毁比例之间的关系。

1.to setup:建立一个森林和起火线

代码如下:

globals [initial-trees   ;; 声明新的全局变量:原本的树burned-trees    ;; 被烧毁的树
]breed [fires fire]    ;; 声明新的海龟种类:fires fire(火)
breed [embers ember]  ;; embers ember(余烬)to setupclear-allset-default-shape turtles "square";; 将海龟默认形状设置为方形ask patches with [(random-float 100) < density][ set pcolor green ];; 用random-float命令让patch生成<100的随机数,该数字若小于density,则patch变绿ask patches with [pxcor = min-pxcor][ ignite ];; 让坐标系中最左边的一条线点燃set initial-trees count patches with [pcolor = green];;设置变量原本的树为:绿色patch的数量set burned-trees 0reset-ticks
end

注意点:

(1)在最前面声明新的全局变量:initial-trees、burned-trees和新的海龟种类:fire、fires、ember、embers;

(2)用random-float的命令使得patch与森林密度density关联起来,即:使patch生成随机数,若设置density为30(界面已设置density滑块),则随机数<30的patch变为绿色;

(3)用count命令使initial-trees取值等于绿色patch的数量。,

设置完毕如下图:

森林模拟(密度:33%)

森林模拟(密度:60%)

2.to go:燃烧

令fires随机点燃4个邻居,点燃即:使fire变红,之后pcolor变黑,烧毁数量加1。点燃后生成灰烬,最后灰烬死亡。

代码如下:

to goif not any? turtles  ;; 条件语句not any?,若为真,则停止[ stop ]ask fires[ ask neighbors4 with [pcolor = green] ;;随机选择上下左右的绿色patch点燃[ ignite ] ;;嵌套命令igniteset breed embers ] ;;设置种类embersfade-embers ;;嵌套命令fade-emberstick
endto ignite sprout-fires 1 ;;使fires涌现,数量为1[ set color red ] ;;颜色变为红色set pcolor black ;;瓦片颜色变为黑色set burned-trees burned-trees + 1 ;;烧毁的数数量加1
endto fade-embers ask embers[ set color color - 0.3  ;; embers颜色变为暗红if color < red - 3.5     ;; 如果颜色<red-3.5,则pcolor和color都消失[ set pcolor colordie ] ]
end

注意点:

(1)嵌套了两个命令:ignite和fade-embers,让fire涌现(红色),瓦片变黑;然后再生成ember,再让ember变暗至die。我尝试不加入ember,直接让fires变暗至die,这样做的后果是火线ignite后就die了,火苗没法传播出去。(p.s.:不知道解释的对不对);

(2)之所以在ignite中要让pcolor变黑,是因为如果不变黑,红色就会以绿色为背景出现,视觉效果不好。

效果如图:

森林火灾燃烧模拟

模型改进

改进(一):考虑树木的可燃性

在现实的森林大火中,出于各种原因(下雨、天气湿度、树木本身特性),树木也许并不都是可燃的,所以火苗的传播可能不是畅通无阻的。可以在模型中增加变量:probability-of-spread。原代码变为:

ask fires[ ask neighbors4 with [pcolor = green][ if random 100 < probability-of-spread[ ignite ] ]set breed embers ]

注意点:

与命令random-float不同,random命令生成的是整数,random-float生成的是floating point number(浮点数,即小数)。

效果如图

改进(一):考虑树木可燃性的森林火灾

改进(二):考虑风的影响

风可能是影响火势的重要因素。因此,在模型中继续加入风速。考虑风的方向,主要把风分解为:南风速度、西风速度这两个变量。在火苗传播的过程中,如果没点燃的patch位于上风向,则令probability-of-spread减去风速;如果位于下风向,则令probability-of-spread加上风速,以计算总的被点燃可能性。原代码变为:

ask fires [ask neighbors4 with [pcolor = green] [let probability probability-of-spreadlet direction towards myselfif direction = 0 [set probability probability - south-wind-speed]if direction = 90 [set probability probability - west-wind-speed]if direction = 180 [set probability probability + south-wind-speed]if direction = 270 [set probability probability + west-wind-speed]if random 100 < probability [ ignite ] ]set breed embers ]

注意点:

(1)myself指的是命令的发出者(netlogo词典官方解释:"the turtle, patch or link who asked me to do what I'm doing right now"),此句命令的发出者是:fire,所以指的是:令direction等于neighbors4和fire之间的角度。

(2)这里的probability和direction都是局部变量,不需要像全局变量那样在命令的最开始提前声明,但局部变量只在所属的这一段代码中有用。

效果如图:

改进(二):考虑树木可燃性、风的森林火灾

改进(三):考虑火苗的远距离传播

在真实的森林火灾中,火苗不止仅燃烧到neighbor的patch,还有可能会进行远距离的传播。因此加上big-jumps开关。原代码变为:

if random 100 < probability [ ignite ] ]if big-jumps? [let target patch-at (west-wind-speed / 5) (south-wind-speed / 5)if target != nobody and [ pcolor ] of target = green [ask target [ignite ]]]set breed embers ]

注意点:

(1)开关名为big-jumps?,if big-jumps?(如果打开);

(2)target为局部变量,只在该命令行有效;

(3)nobody指的是一个主体都没有(netlogo词典:no agent was found),与not any有所不同。any?指主体集合(netlogo词典:the given agentset is non-empty),not any?指没有agentset;

(4)嵌套的命令较多,注意结尾方括号。

效果如图

改进(三):考虑树木可燃性、风、火苗远距离传播的森林火灾

加入以上这些变量以后,可以用行动空间模拟不同参数设置下,森林火灾的燃烧情况。实验数据可以用来进一步研究变量与森林火灾燃烧的关系。

(2022.3.31)

netlogo笔记(4):森林火灾模拟与模型改进相关推荐

  1. 元胞自动机-森林火灾模拟

    引入: 元胞自动机,英文名及缩写:cellular automata,CA.最初是由冯诺依曼在二十世纪五十年代为模拟生物自保的自我复制而提出的,但是当时并未受到重视.后来才逐渐发展起来,著名的&quo ...

  2. 元胞自动机:森林火灾模拟(Matlab:heatmap、colormap)

    目录 1.元胞自动机(Cellular Automation,CA) 2.森林火灾 3.伪代码 4.元胞自动机模拟森林火灾(Matlab实现) (1)定义森林火灾函数 ①空位生长树木 (0 --> ...

  3. MTL-FFDET:基于多任务学习的森林火灾探测模型

    1.文章信息 本次介绍的文章是2022年南京林业大学和国外团队共同发表的一篇基于计算机视觉的火灾检测文章.文章的题目为<MTL-FFDET: A Multi-Task Learning-Base ...

  4. 【元胞自动机】基于元胞自动机模拟3D森林火灾模型含Matlab源码

    1 简介 森林火灾威胁森林安全,导致生命财产与环境损失,动态模拟森林火灾对于预判森林火灾发展趋势,减少森林火灾危害,科学开展森林火灾灭火工作具有重要理论与现实意义.为更加形象,直观地展示林火三维可视化 ...

  5. FSOS森林模拟优化模型学习笔记

    森林模拟优化模型 (forest simulation and optimization system,FSOS) FSOS 采用模拟退火算法安排森林经营作业,通过参数协调控制多项资源,充分考虑森林复 ...

  6. 【论文笔记:场景】边缘计算中分布式协作的动态卸载模型:森林火灾管理的一个用例

    [摘要]:随着物联网(IoT)的发展,数据量不断增长并变得更加多样化.将数据传输到云端时存在几个问题,例如网络带宽和延迟的限制.这引起了人们对边缘计算研究的极大兴趣,边缘计算处理和分析数据导致的网络终 ...

  7. 元胞自动机模拟森林火灾--matlab实现

    因为建模需要,学习了元胞自动机,并尝试了用其模拟森林火灾,相对于退火和遗传,元胞自动机更容易理解,并且其广泛应用于交通问题,在以往的建模比赛中占了很大的比重. 一.元胞自动机定义和适用范围 不同于一般 ...

  8. 【元胞自动机】基于matlab元胞自动机3D森林火灾模型【含Matlab源码 656期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  9. 【元胞自动机】元胞自动机3D森林火灾模型【含Matlab源码 656期】

    ⛄一.元胞自动机简介 1 元胞自动机发展历程 最初的元胞自动机是由冯 · 诺依曼在 1950 年代为模拟生物 细胞的自我复制而提出的. 但是并未受到学术界重视. 1970 年, 剑桥大学的约翰 · 何 ...

  10. 基于Detectron2模型和深度学习方法的改进森林火灾检测方法

     1.文章信息 本次介绍的文章是来自韩国科研团队的一篇2023年火灾检测文章,文章立足于森林火灾检测,题目为<An Improved Forest Fire Detection Method B ...

最新文章

  1. openssl、x509、crt、cer、key、csr、ssl、tls
  2. 创建与SharePoint 2010风格一致的下拉菜单 (续) 整合Feature Custom Action框架
  3. 优秀logo设计解析_优秀Logo设计!汽车类标志表现手法
  4. 什么是分布式锁?redis、zookeeper、etcd实现分布式锁有什么不同之处?
  5. 中小学教育培训类织梦模板
  6. php 显示ip所属地 (qq版)
  7. exe电子书转换txt 下载_网站能经常看到的主流电子书格式
  8. X86逆向教程12:内存补丁的制作
  9. [数据库事务与锁]详解四: 数据库的锁机制
  10. BT种子文件 bencoding编码详细解析
  11. 从产品角度看人口政策和生育减少问题
  12. SUMO交通仿真软件从0到1使用【亲测有用】有疑问评论区可解答
  13. “DOU出晋采”山西旅游数据发布会在太原举行,山西文旅牵手巨量引擎!
  14. 转载:Docker入门只需看这一篇就够了
  15. 使用jquery validate结合zui作表单验证
  16. java图片合成视频
  17. 影视后期制作课题报告
  18. 【转】最全前端面试问题及答案总结
  19. 国家历史文化名城(zz)
  20. 【Spring Boot实战】源码解析Spring Boot自动配置原理

热门文章

  1. 微信小程序 循环展示
  2. 【Modern Robotics】 Mechanics, Planning and Control现代机器人学:机构、规划与控制
  3. 基于WordNet的英文同义词、近义词相似度评估及代码实现
  4. Excel·VBA数组冒泡排序函数
  5. 使用OFFICE自带控件在EXCEL中批量插入二维码以及条码
  6. Python三种设计模式
  7. syslog工具_INAV:一款专用的日志审查导航工具
  8. 第十届泰迪杯数据挖掘B题电力系统负荷预测分析
  9. html字体样式(有中文兼英文实例)
  10. SPSS数据分析之多选题定义