1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
| import random
import numpy
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import matplotlib.colors as color
Taille = 100
ProportionArbre = 0.70
Clairiere = int(0)
Flamme = int(1)
Cendre = int(2)
Arbre = int(3)
random.seed(5)
#question 1 Fonction à prouver
def ArbreAuHasard (p):
if random.random() < p:
return Arbre
else:
return Clairiere
# question 2 Fonction à écrire
def InitialiserForetAuHasard( taille , p):
foret=numpy.zeros(shape=(taille,taille),dtype=int)
for i in range(taille):
for j in range(taille):
foret[i,j]=ArbreAuHasard(p)
return(foret)
# questions 3 et 4 fonction à écrire
def Propagation( foret ):
foret2=numpy.zeros((Taille+2,Taille+2),dtype=int)
for i in range(1,Taille+1):
for j in range(1,Taille+1):
foret2[i,j]=foret[i-1,j-1]
for i in range(1,Taille+1):
for j in range(1,Taille+1):
if foret2[i,j]==Flamme:
foret2[i,j]=Cendre
for i in range(1,Taille+1):
for j in range(1,Taille+1):
if foret2[i,j]==Cendre and foret2[i,j-1]==Arbre:
foret2[i,j-1]=Flamme
elif foret2[i,j]==Cendre and foret2[i,j+1]==Arbre:
foret2[i,j+1]=Flamme
elif foret2[i,j]==Cendre and foret2[i+1,j]==Arbre:
foret2[i+1,j]=Flamme
elif foret2[i,j]==Cendre and foret2[i-1,j]==Arbre:
foret2[i-1,j]=Flamme
for i in range(1,Taille+1):
for j in range(1,Taille+1):
foret[i-1,j-1]=foret2[i,j]
return(foret)
# question 5 Code à executer
def code(taille,p):
foret=InitialiserForetAuHasard( taille , p)
print(foret)
foret[int(Taille/2) , int(Taille/2)] = Flamme
fig = plt.figure()
im = []
listeCouleurs = [[0,0,0]] * 4
listeCouleurs[Clairiere] = [1,1,1] # Les clairières sont representées en blanc
listeCouleurs[Flamme] = [1,0,0] # Les Flammes sont en rouge
listeCouleurs[Arbre] = [0,1,0] # Les arbres sont de couleur verte
listeCouleurs[Cendre] = [0.5,0.5,0.5] # Les cendres sont grises
couleurs = color.ListedColormap(listeCouleurs)
for n in range(2*Taille):
im.append([plt.imshow(foret,interpolation='none',cmap=couleurs)])
foret = Propagation(foret)
ani = animation.ArtistAnimation(fig,im,interval=50,blit=True,repeat_delay=100)
#plt.show()
c=0
a=0
for i in range(taille):
for j in range(taille):
if foret[i,j]==Cendre:
c=c+1
elif foret[i,j]==Arbre:
a=a+1
print("Sur {} arbres, {} ont ete brules et il n'en reste plus que {}, ce qui fait {}% d'arbres brules".format(a+c,c,a,c/(a+c)*100))
return(ani)
#
#
#
#
# question 6 remplacer pass
def PropagationRapide(foret, positionFlamme):
foret2=numpy.zeros((Taille+2,Taille+2),dtype=int)
for i in range(Taille):
for j in range(Taille):
foret2[i+1,j+1]=foret[i,j]
for i in positionFlamme:
foret[i]=Flamme
for i in range(1,Taille+1):
for j in range(1,Taille+1):
foret[i-1,j-1]=foret2[i,j]
return(foret)
# question 7
def comptageArbre(foret):
a=0
for i in range(Taille):
for j in range(Taille):
if foret[i,j]==Arbre:
a=a+1
return a
#
# question 8
def comptageArbresRestants( tailleForet , probabiliteArbre):
foret = InitialiserForetAuHasard(taille = tailleForet , probabiliteArbre = probabiliteArbre)
positionFlammes = [[Taille//2 , Taille//2]]
foret[Taille//2 , Taille//2] = Flamme
compteur = 0
while (compteur < tailleForet) and (len(positionFlammes) > 0):
compteur += 1
foret , positionFlammes = PropagationRapide(foret , positionFlammes)
return comptageArbre(foret)
def moyenneArbreRestants( tailleForet , probabiliteArbre , tailleEchantillon):
s = 0
for i in range(1,tailleEchantillon+1):
s += comptageArbresRestants(tailleForet , probabiliteArbre)
return s/float(i) |
Partager