森林火災模擬

2021-10-10 18:53:05 字數 3397 閱讀 5012

森林火災模擬**

import numpy as np

import matplotlib.pyplot as plt

import random

import copy

class

forest

:def

__init__

(self)

: self.forest_size =

(100

,100

) self.forest = np.zeros(self.forest_size,

int)

self.forest_temp = copy.deepcopy(self.forest)

self.time=

0.001

self.forest_rate =

0.25

#樹木所佔比例

#0:空位 1:燃著 2:樹木

self.empty_grow =

0.0003

self.tree_get_fire =

0.0005

self.rec_forest =

0 self.rec_fired =

0 self.rec_turn =

0#self.search=[(1,1),(1,0),(1,-1),(0,1),(0,-1),(-1,1),(-1,0),(-1,-1)]

self.search=[(

1,0)

,(-1

,0),

(0,1

),(0

,-1)

] self.fire_color =[1

] self.empty_color =[0

]def

possibility

(self,p)

: use = random.random(

)return usedef

make_forest

(self)

:for x in

range

(self.forest_size[0]

):for y in

range

(self.forest_size[1]

):if self.possibility(self.forest_rate)

: self.forest_temp[x]

[y]=

2#變成樹木

self.rec_forest +=

1return

defshow

(self)

: self.forest = copy.deepcopy(self.forest_temp)

self.rec_turn +=

1 plt.imshow(self.forest)

plt.pause(self.time)

print

("回合數:"

,self.rec_turn)

print

("著火地點:"

,self.rec_fired,

"樹木數:"

,self.rec_forest)

return

defget_color_nearby

(self,use,x,y)

: rec =

0for

idin self.search:

new_x = x+id[

0]new_y = y+id[

1]if new_x<

0or new_x>=self.forest_size[0]

or new_y<

0or new_y>=self.forest_size[1]

:continue

rec += self.forest[new_x]

[new_y]

in use

return rec

defwork_empty

(self,x,y)

:#是空地 有概率生長成樹木

if self.possibility(self.empty_grow)

: self.rec_forest +=

1 self.forest_temp[x]

[y]=

2return

defwork_fire

(self,x,y)

:#下回合熄滅

self.rec_fired -=

1 self.forest_temp[x]

[y]=

0return

defwork_tree

(self,x,y)

: tot = self.get_color_nearby(self.fire_color,x, y)

#是樹木 如果周圍有火源 燃燒

if tot >0:

self.rec_fired +=

1 self.rec_forest -=

1 self.forest_temp[x]

[y]=

1else

:if self.possibility(self.tree_get_fire)

:#有概率自行著火

self.rec_fired +=

1 self.rec_forest -=

1 self.forest_temp[x]

[y]=

1return

defgo

(self)

: self.make_forest(

)while1:

self.show(

)for x in

range

(self.forest_size[0]

):for y in

range

(self.forest_size[1]

):if self.forest[x]

[y]==0:

self.work_empty(x, y)

if self.forest[x]

[y]==1:

self.work_fire(x, y)

if self.forest[x]

[y]==2:

self.work_tree(x, y)

return

if __name__ ==

"__main__"

: forest=forest(

) forest.go(

)

05 森林火災模型

森林火災模型 森林 最初只是乙個空的n n網格。每個週期在網格上隨機選擇乙個格點。如果該格點為空,那麼就以概率 g 在那裡種上一棵樹。如果該格點上已經有樹,那麼閃電會以概率 1 g 擊中該格點。如果該格點有一棵樹,那麼樹會著火,火勢會蔓延到所有連線到該格點的有樹的格點。import numpy as...

OpenCV 森林火災檢測 2

有關火災檢測的幾篇 的演算法小總結 thou ho chao ho chen,ping hsueh wu,and yung chuen chiou in proc.ieee internat.conf.on image processing,icip 04,pp.1707 1710.在 森林火災檢測...

森林火災預警系統

森林是人類賴以生存及社會發展最重要和不可缺少的資源之一,更是地球生態平衡的保護者。它不僅可以生產木材及其它林副產品,供人類從事生產和生活需要,成為國民經濟建設不可缺少的物質基礎,而且又是維持生態系統平衡,保護和美化環境,有利於農 牧 副等生產事業,造福於人類的一種偉大的力量。但是,由於人們在社會活動...