IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Problème python feu de forêt.


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 3
    Par défaut Problème python feu de forêt.
    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)

  2. #2
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    Bonjour

    l'affectation n'est pas une copie. Après "foret = ini", foret et ini référencent la même chose.

  3. #3
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 3
    Par défaut
    Citation Envoyé par plxpy Voir le message
    Bonjour

    l'affectation n'est pas une copie. Après "foret = ini", foret et ini référencent la même chose.
    C'est ça que je ne comprends pas.

    Si je tape :
    a=1
    b=a
    b=2

    "a" ne sera pas égal à 2

    C'est ça que je ne comprends pas ... :/

  4. #4
    Membre éclairé

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    346
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 346
    Par défaut
    L'affectation remet juste une référence sur le même objet créé. Peu importe la référence utilisée vous modifiez l'objet sous-jacent.
    numpy.ndarray.copy devrait être un bon point d'entrée pour une copie des données.

  5. #5
    Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2018
    Messages : 3
    Par défaut
    Citation Envoyé par nicolas581 Voir le message
    L'affectation remet juste une référence sur le même objet créé. Peu importe la référence utilisée vous modifiez l'objet sous-jacent.
    numpy.ndarray.copy devrait être un bon point d'entrée pour une copie des données.
    Merci, mon souci est résolu ! Merci beaucoup !

  6. #6
    Membre Expert Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Par défaut
    cela dépend du type d'objet que tu manipules : mutable ou non mutable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> L = [1, 2, 3]
    >>> autre = L
    >>> 
    >>> autre.append(4)
    >>> autre
    [1, 2, 3, 4]
    >>> L
    [1, 2, 3, 4]
    Ici, tes objets (foret, ini) sont "mutables" alors que dans l'exemple fourni (a et b), ce sont de simples entiers

  7. #7
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Tout d'abord je vois l'inverse, c'est ini que tu modifies et foret que tu espères garder intacte.

    Mais peu importe, ini et foret ne sont que deux noms désignant le même objet, deux étiquettes collées sur la même boîte en sorte.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    >>> i = [[1 for i in range(3)] for j in range(3)]
    >>> i
    [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
    >>> f = i
    >>> f
    [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
    >>> i[0][1] = 5
    >>> i
    [[1, 5, 1], [1, 1, 1], [1, 1, 1]]
    >>> f
    [[1, 5, 1], [1, 1, 1], [1, 1, 1]]

Discussions similaires

  1. Problème python lancer un .exe dans son service windows python
    Par leyer dans le forum Général Python
    Réponses: 1
    Dernier message: 02/04/2010, 04h07
  2. [2 problèmes PYTHON] Interprétation IDLE + chaines
    Par devatt dans le forum Général Python
    Réponses: 9
    Dernier message: 25/02/2009, 19h37
  3. Problèmes python avec Internet explorer
    Par pascalcovolo dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 27/06/2008, 13h42
  4. problème pare feu sous XP
    Par bassol dans le forum Windows XP
    Réponses: 3
    Dernier message: 04/05/2006, 18h43
  5. Problème pare-feu sous Windows
    Par colomban dans le forum Sécurité
    Réponses: 3
    Dernier message: 30/09/2005, 09h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo