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

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 1
    Points
    1
    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 expérimenté 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 : 59
    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
    Points : 1 481
    Points
    1 481
    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.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Membre averti

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

    Informations forums :
    Inscription : Avril 2004
    Messages : 346
    Points : 439
    Points
    439
    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.

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 1
    Points
    1
    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 ... :/

  5. #5
    Membre expérimenté 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 : 59
    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
    Points : 1 481
    Points
    1 481
    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
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    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]]

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Analyste d'exploitation
    Inscrit en
    Janvier 2018
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    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
    Points : 1
    Points
    1
    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 !

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