森林大火

之前读了方舟子的科普文章《野火烧不尽》,一直觉得很受启发,最近趁着假期空闲,我也用计算机模拟了一下文中介绍的森林大火的实验,见这个链接

实验是这样的:在一片空地上,随机地种上一些树,随着时间的推移,这些树会向周围扩张(周围长出新的树木),也有一定的概率枯死,而枯死的树有一定概率会发生自燃,或者你也可以通过点击地面的某一点丢下一个火种,火焰周围8个格子中的树木(包括枯树和还在生长的树)会被引燃,于是大火便蔓延开来,如果火种周围没有树木,则火焰熄灭。实验就是观察在不同的参数下,枯树自燃或人为引发的森林大火会达到什么样的规模。

当然,我的实验和方舟子文中介绍的原始实验细节上有一些不同,不过基本思想是一致的。运行的效果如下图,绿色的点代表生长中的树木,黄褐色的点代表枯树,红色的点是火焰,黑色及灰色的点是刚被烧过的地方。

森林大火

根据《野火烧不尽》的介绍,野火的发生遵循幂律,野火的规模越大,发生的频率就越低。在我的实验中,野火发生的概率是均匀分布的,不过这个概率是一个可调的参数。类似地,我发现,野火发生的概率越高,每次野火的规模就越小,虽然野火总数增加了,但总的来说造成的损失并不大,野火发生的概率越低,每次野火的规模就越大,甚至一次野火就能烧毁整个森林。

这个结论很容易解释,因为森林中的树木在不断地生长、死亡,如果没有野火,它们将慢慢地密集地布满整个地表,渐渐达到“自组织的临界状态(自身逐渐形成的高度敏感的不稳定状态)”,树木越密集,发生野火时火势就越容易蔓延,造成的损失就会越大。而如果不时地有野火发生,烧掉一些枯树及及密集的地方,使森林保持一定的空隙,这倒反而不会造成太大的损失。

我们大多数人的观念中,或许都认为森林大火是一件不好的事情,因此一旦发生森林大火,我们就会组织人员前去灭火。但森林大火真的有百害而无一利吗?不是的。事实上,在人类文明出现之前,森林与野火已经共存了几亿年,每年都有无数次森林野火发生,但森林从未被野火完全毁灭,地球上依旧绿意盎然,森林与野火早就已经形成了一种共存的关系。

原始实验论文中还谈到一个例子:在 1972 年之前,美国黄石公园对野火采取零容忍政策,一旦发现野火就尽量将其扑灭。这就像是模拟程序中超低的点火频率,也出现了类似的后果:1988 年黄石公园突发大火,烧掉了 32 万公顷的森林,占黄石公园面积的 36%。所以据说后来美国林业部门对自然因素引起的野火不再扑灭,只要它不威胁到生命、财产的安全就任其燃烧,林务员还时不时地在严格控制下有选择地放火烧掉一部分森林。

这一种看似矛盾的共存关系在很多地方都能看得到,比如草原上狼与羊之间的关系。要知道,矛盾总是存在,并且无法避免,迟早总会发生的,与其人为地压制矛盾造成一种表面的和谐,不如尊重一下自然规律,让矛盾不时地小规模地出现、消化。

另外,方舟子的另一篇科普文章《生物大灭绝为什么反复发生》中提到:“生物灭绝和地震、森林大火、沙堆坍塌一样,发生的频率也遵循幂律”,许多看似复杂的事情背后都有一个简单的幂律,我之前也曾注意到软件的下载量与排名之间也存在幂函数关系,看起来幂律出场的地方之多真是超乎想象。

最后,再贴一下我做的网页版的森林大火实验的地址:https://oldj.net/static/forest-fire/1.html。这个程序基于 HTML5 ,只能在比较新的浏览器(如 Firefox、Chrome 等)上运行,建议使用 Chrome 。

分类:文章标签:混沌HTML5数学JavaScript

相关文章:

评论:

myxiaoniao

哇 不错 我尝试了很小的自燃率 果然出现大火

Digu

老乡……搞不好还是大学校友……

zhiqiang

好玩不过我觉得有点不合理的地方在于,火一旦发生,应该是马上把相关的森林全烧光,而不是火边烧森林边长。因为火烧是一个很快的过程,而森林的生长是一个很长期的过程

oldj

我也想过这个问题,现在森林生长的速度和火烧的速度差不多,不是很合理,如果把树木生长率调低一点看起来就比较合理了,不过那样一来要等上很久森林才能达到一定规模,观察上就需要花更多的时间。目前默认的参数是我多次尝试之后取的一个平衡值,或许还有更好的组合或者模拟方法...

HWHO

老杰你好,你这个网页做得很有意思,我发现在生长速度较快的前提下,如果自燃率高,反而没有大型火灾,只有小火灾,而我肉眼看,只有小火灾的森林覆盖率反而高,如果能有一个数据栏能显示出当前的森林覆盖率就好了

理想

IE 可以用 excanvas.js 来支持

小明明

森林初始覆盖率1,一下子全部烧光,一点都不剩 -_-

myxiaoniao

能不能得到最大平均覆盖率啊,跟这些因子的关系是啥

xxx

恋爱也是如此

依云

+2718 ^_^

duyt

火烧的速度问题,能不能把火烧调成即时,然后加一定几率自然停止呢?

Denis

厉害!强大!

oldj

过奖了,呵呵,如果你来写的话能写得更好!:-)

斩梦人天天

小时候用QBASIC写过差不多的程序,也是模拟森林失火:)

LY

博主 你好 我写论文需要一点森林成长率(扩散率)的资料, 你知道森林成长率大概一年能长多少么?谢谢

oldj

抱歉,我不清楚。你看一看文中说的原始论文(http://www.somasimple.com/pdf_files/forest_fires.pdf)里面有没有提到呢?

LY

呵呵 早看了额 没有 不过还是谢谢啊

老帆

很好的实习,这样的模拟能用在很多地方。我还在学习博主的代码,我有一些股市模拟方面的想法,想通过对已知的交易数据进行函数拟合,看看这样的话会不会有短期或者长期的预测能力。。

oldj

我也曾有过类似的想法,不过貌似实现起来挺难的,没有太深入。:-)

发表评论: