如何在NetLogo社区火灾模型中统计新烧毁树斑块数量及绿转红速率
在NetLogo火灾模型中统计新烧毁树木斑块的方法
要测量绿色斑块变为红色(新烧毁)的速率,核心是跟踪每一步模拟中从绿色转为红色的斑块数量,以下是两种可行实现方式:
方法一:全局计数对比法
通过记录火灾扩散前后的红色斑块数量差值,得到新增烧毁的斑块数:
- 新增全局变量存储统计结果:
globals [ new-burned-patches ]
- 在模拟主循环中加入统计逻辑:
to go ; 记录火灾扩散前的红色斑块数量 let pre-fire-red count patches with [pcolor = red] ; 执行原有火灾扩散逻辑(如社区模型中的spread-fire过程) spread-fire ; 计算新增烧毁的斑块数 set new-burned-patches (count patches with [pcolor = red]) - pre-fire-red ; 可输出数值或用于后续速率计算 print (word "本次新增烧毁斑块数: " new-burned-patches) tick end
方法二:斑块状态跟踪法
给每个斑块添加变量记录上一步的颜色,直接对比颜色变化,精准捕捉绿色→红色的斑块:
- 新增斑块变量存储上一步颜色:
patches-own [ last-color ]
- 初始化时同步斑块初始颜色:
to setup ; 原有初始化逻辑(如设置树木、火种等) ask patches [ set last-color pcolor ] reset-ticks end
- 在模拟循环中跟踪颜色变化并统计:
to go ; 让斑块记录当前颜色作为上一步状态 ask patches [ set last-color pcolor ] ; 执行火灾扩散操作 spread-fire ; 统计刚从绿色变为红色的斑块数量 set new-burned-patches count patches with [pcolor = red and last-color = green] print (word "本次新增烧毁斑块数: " new-burned-patches) tick end
注意事项
- 若模型中红色代表“着火”、黑色代表“完全烧毁”,需调整判断逻辑(比如统计从绿色→红色的斑块即为新着火/烧毁的个体)。
- 统计得到的
new-burned-patches可结合tick值计算变化速率(如每tick烧毁的斑块数)。
内容的提问来源于stack exchange,提问作者Helpie114
相关产品推荐
相关产品推荐

