La fourmi de Langton (python)
Répondre à la discussion
Affichage des résultats 1 à 13 sur 13

La fourmi de Langton (python)



  1. #1
    Azghar

    La fourmi de Langton (python)


    ------

    Bonjour,
    je ne parviens pas à afficher une image(grille) associée à une matrice constituée de 0 et de 1 ou les 0 seraient des cases blanches et les 1 les cases noires (j'essaye de faire la fourmi de Langton en python)
    Si quelqu'un a une idée, voici le code :
    Code:
    #La fourmi de Langton
    
    from math import*
    import numpy as np
    import matplotlib.pyplot as plt
    
    def fourmi(n):
        i=1001
        j=1001
        fourmi=[i,j]                            #emplacement initial de la fourmi
        k=0
        grille=np.zeros((2001,2001))
        while k<n:
            if grille[i,j]==0:                  #si la case est blanche
                fourmi=[i,j+1]                  #déplacement de la fourmi 
                grille[i,j]=1                   #la case se noircit après passage de la fourmi
            else:                               # si la case est noire
                fourmi=[i,j-1]                  #déplacement de la fourmi 
                grille[i,j]=0                   #la case devient blanche
            k+=1
        plt.imshow(grille)
        plt.show()
        
    fourmi(1000)

    -----
    Dobson 200/1200

  2. #2
    Loupsio

    Re : La fourmi de Langton (python)

    Si je ne m'abuse, tu essaie de faire quelque chose d'animé? ou la "fourmi" est censé se déplacer et changer des 0 en 1 et des 1 en 0?
    Parce que tel que je le comprend, la boucle s'effectue, "grille" et "fourmi" prennent plein de valeur, et a la fin quand tout est fini, tu lance un plot, c'est pas un peu trop tard?

    Et tel que c'est au moment tu plot de toute facon, l'integralité de "grille" vaut "zero"
    Dernière modification par Loupsio ; 12/12/2015 à 18h07.

  3. #3
    Azghar

    Re : La fourmi de Langton (python)

    Non tu as vu juste, je ne tente pas de faire une animation, je veux juste afficher les cases noircit par la fourmi à la fin de la boucle, pour mettre en évidence la fameuse autoroute.
    Dobson 200/1200

  4. #4
    Loupsio

    Re : La fourmi de Langton (python)

    Oui mais la j'ai bien l'impression qu'au moment d plot toute ta grille vaut zero (donc aucun tracé)
    il ne me l'affiche pas en entier quand je lui demande de print(grille) car c'est beaucoup trop long, il me montre le debut des valeurs et la fin, mais pas l'onbre d'un "1" quelque part a priori, surement pour ca qu'il n'y a pas de tracé si ta grille entiere vaut zero.

  5. A voir en vidéo sur Futura
  6. #5
    Azghar

    Re : La fourmi de Langton (python)

    oui le programme est complètement faux, je vais le revoir
    Dobson 200/1200

  7. #6
    Azghar

    Re : La fourmi de Langton (python)

    Voila maintenant ça marche mais il y a encore quelque chose qui me gêne, l'image est floutée.
    Savez vous comment éviter ça ?
    Code:
    #La fourmi de Langton
    
    from math import*
    import numpy as np
    import matplotlib.pyplot as plt
    
    def fourmi(n):
        i=51
        j=51
        orientation='A'  #La fourmi regarde vers le haut au départ
        k=0
        grille=np.zeros((101,101))
        while k<=n and j<101 and i<101:
            if grille[i,j]==0:  
                grille[i,j]=1                        
                if  orientation=='A':
                    j+=1
                    orientation='B'
                elif orientation=='B':
                    i-=1
                    orientation='C'
                elif orientation=='C':
                    j-=1
                    orientation='D'
                else:
                    i+=1
                    orientation='A'
                    
                                             
            else:                             
                grille[i,j]=0                   
                if  orientation=='A':
                    j-=1
                    orientation='D'
                elif orientation=='B':
                    i+=1
                    orientation='A'
                elif orientation=='C':
                    j+=1
                    orientation='B'
                else:
                    i-=1
                    orientation='C'                           
            k+=1
        plt.imshow(grille)
        plt.show()
    
        
    fourmi(11000)
    Dobson 200/1200

  8. #7
    Loupsio

    Re : La fourmi de Langton (python)

    Elle n'est pas floue, elle est pixelisée.
    Etant donné que chaque position représente un carré visible à l'oeil nu, le dessin est obligé de faire pixélisé

    C'est normal par contre que ton axe des ordonnés commence à 100 et aille en decroissant ? tu ne peux pas mettre le 0 au niveau de l'origine comme pour l'axe des abscisses?

  9. #8
    Azghar

    Re : La fourmi de Langton (python)

    Bah chez moi l'image est bien floue, ce que j'aimerais c'est justement une image pixelisée... Il y a un genre de dégradé qui gâche tout.

    Je n'ai pas bien compris la deuxième partie de ta réponse. J'ai fais en sorte que la fourmi commence au centre (en 51,51), et l'ordonnée ne décroit pas forcément. Si je l'avais fais démarré en 0,0, elle aurait été au bord du carré.
    Dobson 200/1200

  10. #9
    Azghar

    Re : La fourmi de Langton (python)

    voici l'image obtenue:
    Images attachées Images attachées  
    Dobson 200/1200

  11. #10
    Loupsio

    Re : La fourmi de Langton (python)

    voici l'image que j'obtiens, la meme que la tienne visiblement, mais je ne trouve pas que ca soit flou, pacontre il y à un genre d'effet 3D, le genre qu'on rajoute en mettant une ombre d'un coté (ici sur la droite et le bas des pixels) :
     Cliquez pour afficher

    Pour l'autre question, je parlais juste des conventions de plot, le zéro que j'ai entouré, ne devrait pas etre en bas?, et le 100 en haut ducoup? après c'est pas vraiment un plot normal avec abscisse et ordonné, c'est plutot un array donc c'est surement pour ca, mais ca fait juste bizarre d'avoir une ordonnée qui au lieu d'aller de 0 à 100, va de 100 à 0.


    Pour le flou (ou effet pseudo 3D) essai de voir si ya pas moyen de configurer ca du coté des paramètres acceptés par matplotlib
    http://matplotlib.org/api/pyplot_api.html

  12. #11
    Azghar

    Re : La fourmi de Langton (python)

    Ah oui tu as raison pour l'ordonnée. Tu as une idée de comment faire pour l'inverser ?
    Dobson 200/1200

  13. #12
    Loupsio

    Re : La fourmi de Langton (python)

    peut etre ploter ton array en inverse (mais ce n'est qu'une idée, j'ai pas essayé) en précisant les position, par exemple quand tu plot sans rien préciser, il va de :
    Code:
    [0:len(grille)]
    (donc de 0 jusqu'a la longueur de l'axe de grille), essai quelque chose du genre :
    Code:
     [len(grille) : 0]
    (en faisant gaffe a l'axe des X et des Y, là j'ai juste mis "len(grille)" mais il va de soi puisqu'il est à deux dimensions, qu'il faut lui préciser de laquelle tu parles

  14. #13
    polo974

    Re : La fourmi de Langton (python)

    Code:
        plt.imshow(grille, origin='lower', interpolation='none')
        plt.set_cmap("Greys")
        plt.show()
    origin et interpolation pour l'origine et l'interpolation (qui n'est pas bêtement 'none' quand c'est None)...
    set_cmap pour changer les couleurs.

    sinon une commande magique: help(plt) (après un import matplotlib.pyplot as plt) mais il faut décrypter...
    Jusqu'ici tout va bien...

Discussions similaires

  1. en python le multi tache n'est pas possible alors pourquoi les threads existent sur python?
    Par docEmmettBrown dans le forum Programmation et langages, Algorithmique
    Réponses: 5
    Dernier message: 10/06/2015, 16h47
  2. Prédation d'une fourmi par une fourmi...
    Par richardunord dans le forum Identification des espèces animales ou végétales
    Réponses: 3
    Dernier message: 23/05/2015, 11h03
  3. Fourmi
    Par invite45846b3c dans le forum Identification des espèces animales ou végétales
    Réponses: 7
    Dernier message: 27/10/2014, 17h17
  4. Fourmi?
    Par invite3a961ef5 dans le forum Identification des espèces animales ou végétales
    Réponses: 2
    Dernier message: 30/08/2008, 22h16