-- Introduction au Python scientifique --

TP n°1

La fourmis de Langton

simon.marie@lecnam.net

La fourmis de Langton est une très bonne illustration de ce que l'on apelle l'emmergence. Parfois une règle simple ou en ensemble de règles simples peut donner naissance à un algorithme simple entrainant l'emmergence de phénomènes complexes. Ainsi la fourmis de Langton est un cas très simple à implémenter et permet de se familiariser avec l'utilisation concrète du langage Python.

On se propose dans ce TP de coder dans une fonction le déplacement de la fourmis de Langton sur une grille bidimensionelle de $(150,150)$ points. La fourmis sera initialement au centre de la grille avec la tête vers le haut. Le déplacement de la fourmis obéit au 3 étapes suivantes:

  1. Si la fourmis est sur une case blanche elle effectue 1/4 de tour vers la gauche, si elle est sur une case noir elle effectue 1/4 de tour vers la droite.
  2. Elle se déplace ensuite d'une case dans la direction ou elle se retrouve.
  3. Lorsuqe la fourmis quitte une case, celle-ci change de couleur (Blanc devient noir et Noir devient blanc).

Proposer une fonction step(n) qui calcul les n pas suivant de la fourmis de Longton.

On pourra suivra le caneva suivant:

In [100]:
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

f=np.zeros((150,150)) # On crée la grille avec toutes ses cases blanches initialement
c=np.array([[0,1],[1,0],[0,-1],[-1,0]]) # On crée le vecteur de toutes les orentations possibles de la fourmis
i,j=... # Condition initiale: La fourmis est au milieu de la grille
d=... # On crée un entier d qui représente l'index de l'orientation courante de la fourmis. Ainsi l'orientation de la 
# fourmis est c[d,:], 


def step(n):  
    global f,i,j,d,c
    for t in xrange(n):
        d=... # On calcul la nouvelle orientation
        i+=... # On avance dans
        j+=... # la direction correspondante
        f[i,j]=... # Et on change la couleur en partant !

Faites quelques pas puis d'autres puis beaucoup d'autre et commentez la trajectoire de la fourmis:

In [ ]:
step(6)
plt.pcolormesh(f)
plt.xlim(70,80);plt.ylim(70,80)
print i,j
In [ ]:
step(100)
In [ ]:
step(1000)
In [ ]:
step(10000)

Conclusion

Note: Vous pouvez télécharger ce notebook (fichier ipynb) et l'executer (modifier) à votre guise sur une machine disposant d'une version de Python (2.7) ou bien l'éxecuter sur le site try.jupyter

In [1]:
from IPython.core.display import HTML
style=open('notebooks.css', "r").read()
HTML(style)
Out[1]:
In [ ]: