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