Bonjour !

Si aujourd'hui je viens vers vous c'est que je suis littéralement en train de me tirer les cheveux.

Je vous explique, je suis en train de faire un programme simulant un feu de forêt.

Après avoir défini le programme qui simule le feu et celui qui créé la foret, je créé ma boucle pour avoir les données de sorties.

Ce que je ne comprends absolument pas, c'est que du coup, j'utilise la variable "ini" pour créer ma forêt d'une taille donné et ensuite, je dis que ma "foret = ini" comme ça, je n'ai pas à recréer de forêt à chaque début de boucle.

Ma question est, du coup, on voit dans le programme que je mets le feu à foret, du coup, ça change les valeurs de ma variable foret ce qui est normal.

Mais, pourquoi AU GRAND DIEU, cela change les valeurs de "ini" ?? Je suis en train de méchamment péter un cable ...

Je dis bien que "foret = ini" mais après je ne touche plus jamais à ini et là, PAF, j'ai ini qui change aussi.

Quelqu'un peut m'aider ?


Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
import sys
import numpy as np
import matplotlib.pyplot as plt
from numpy import exp 
from matplotlib import colors
from scipy.optimize import curve_fit
from numpy import linspace
 
# Pour s'épargner des "RuntimeError"
sys.setrecursionlimit(50000000)
# Paramètres
taille = [(5,5),(10,10),(20,20),(50,50)]
 
# Constantes
CENDRE = 0
ARBRE = 1
 
# ALLUUUMEEEEEEER LE FEU !
def allumer_le_feu(foretjpp, position, probabilite_embrasement):
   foretjpp[position] = CENDRE
   decalages = [( 0,-1), ( 1, 0), ( 0, 1), (-1, 0)]
   coord_voisins = [(position[0]+x, position[1]+y) for x, y in decalages]
   for v in coord_voisins:
       if (v[0] > 0 and v[0] < taille_zone[0] -1
      and v[1] > 0 and v[1] < taille_zone[1] -1         
      and foret[v] == ARBRE         
      and np.random.rand(1) < probabilite_embrasement):
           allumer_le_feu(foretjpp,v,probabilite_embrasement)
 
 
 
def planter_foret():
   foretlol = np.zeros(taille_zone,dtype='int_')
   foretlol.fill(ARBRE)
   return foretlol
 
 
# Calcul point
 
nb_echantillons =25
proba_embrasement = [i/100 for i in range(100)]
differentes_tailles=[]
liste = 0
res_ratio_fin_simple=[]
res_proba_simple=[]
res_ratio_simple=[]
for taille_zone in [(50,50)]:
    print(taille_zone)
    for proba in proba_embrasement:
        ini=planter_foret()
        print(proba)
        for i in range(2):
            foret = ini
            nb_arbres_total = np.count_nonzero(foret == ARBRE)
            position_foyer = np.random.randint(0,taille_zone[0]), np.random.randint(0,taille_zone[1])
            allumer_le_feu(foret, position_foyer, proba)
            nb_arbres_restant = np.count_nonzero(foret == ARBRE)
            a=(nb_arbres_total-nb_arbres_restant)/nb_arbres_total
            res_proba_simple.append(proba)
            res_ratio_simple.append(a)