ARE - Maths/Info - MIPI 26

11 mai 2014

Projet "Wireworld" - Vacances

Etant donné que nous n'avions pas terminé notre projet lors des séances d'ateliers, nous l'avions travaillé et terminé pendant les vacances.

  • Nous avions finalisé les circuits logiques que nous avions commencé en atelier.

 

  • Nous avons entamé le projet de ville. En effet, chacun a proposé un plan de ville, au brouillon. Ce fut finalement le mien qui fut retenu. Celle-ci se présente en 3 parties principales :
  1. Un parc paisible avec un lac et un jardin (Partie Nord/Ouest)
  2. Des logements et une école (Partie Nord/Est)
  3. Des attractions fortes en sensations (Partie Sud)

Ces différentes parties de la ville sont reliées entre elles par une route principale.

J'ai produit les matrices matérialisant les différentes parties de la ville, ce qui m'amena à modifier nos fonctions de bases. En effet, les fonctions de bases étaient conçues pour manipuler uniquement des matrices carrées. Cela s'est très vite révélé extrêmement ennuyeux lorsque l'on avait à faire à des matrices de grande dimension  (la matrice finale de dimensions 70 x 67 !!) : y faire des manipulations, en plus en connexion ssh, apportait énormément de lags et de bugs. J'ai donc pensé à optimiser nos fonctions et y intégrer partout 2 paramètres (longueur, largeur) au lieu d'un seul (taille). Les modifications à faire dans les conditions des fonctions "voisins", "changementsdetats" etc se sont révélées assez simple, d'autant plus que j'ai bénéficié de l'aide de mes camarades.

Concernant les immeubles de la Partie Nord/Ouest, j'ai voulu y mettre en place un système d'éclairage dynamique : les pièces "allumées" au temps "t" s'éteignent au bout d'une certaine période "x", et inversement, les pièces sombres s'éclairent au bout de "t+x" temps. En écrivant une fonction que j'ai souhaité intégré dans les conditions de la fonction "changementsdetats", j'ai malheureusement rencontré une erreur de compilation à cause d'une variable globale non prise en compte. J'ai du donc abandonner l'idée.

Pour la route principale, nous avions eu l'idée d'intégrer un ou des circuits logiques afin de mettre en place une situation de carambolage ou pour éviter la division d'un électron lors d'une intersection, mais ce fut une nouvelle fois un échec.

Néanmoins, nous avons pu faire fonctionner correctement notre Grande Roue et notre Montagnes Russes, ainsi que d'aranger, à notre guise, le parc dans la Partie Nord/Est.

 

  • Nous avons, chacun notre tour, rédigé une partie du rapport final. Nous nous sommes ensuite répartis les tâches pour la soutenance à l'orale. Chacun m'envoya son contenu afin que je puisse m'occuper des transparents.

Posté par mtahir_patel à 22:36 - Commentaires [0] - Permalien [#]


09 mai 2014

Projet "Wireworld" - 4ème séance

Lors de cette dernière séance en atelier, nous tentions de finaliser la modélisation de notre automate. Nous y sommes parvenus après de nombreux essais, et pour ne pas perdre plus de temps, nous avons répartis les tâches : certains continuaient de perfectionner la fonction "animation" tandis que les autres réfléchissaient à la manière d'entreprendre un circuit logique, à la position de chaque cellule pour permettre les différents circuits "OU", "OU EXCLUSIF", "ET NON". Cette fois-ci, plus de matrices générées aléatoirement : nous devions saisir nos matrices à la main.

Arrivée la fin de la séance, nous n'avions pas terminé et nous avons décidé d'y réfléchir chacun de notre côté, de préparer les circuits mais également un projet de ville en vue d'un travail en commun pendant les vacances.

 

Posté par mtahir_patel à 01:48 - Commentaires [0] - Permalien [#]

Projet "Wireworld" - 3ème séance

Lors de cette séance, nous n'avons malheureusement pas énormément avancés du fait de certaines erreurs dans nos fonctions de bases qui provoquaient un dysfonctionnement de la fonction permettant l'animation de la matrice.

  • Afin de tester notre fonction "animation", nous tentions de mettre en paramètre la matrice carrée composée de chiffres aléatoires de la semaine précédente (cf. Article Projet "Wirewolrd" - 2ème séance), mais nous avons très vite rencontré un problème majeur : à chaque unité de temps, c'était carrément une nouvelle matrice, aléatoire elle aussi, qui apparaissait. Or, la matrice obtenue au bout d'une unité de temps doit répondre à certains critères (ceux de la fonction "changementdetats"). Après avoir longuement creusés nos méninges et grâce à une indication précieuse de l'enseignante, nous avons décidé de crééer une fonction "change" ayant pour but de stocker la matrice initiale, et ainsi y appliquer les différents changements.

 

  • Après avoir pu appliquer les différents changements à la matrice voulue, nous avons constaté une légère anomalie : certains changements d'états, aux extrémités, ne s'effectuaient pas correctement. Nous avons assez vite compris que cela était dut à un oubli de conditions dans la fonction "voisins". En effet, cette fonction que nous avions à la base créé pour des listes, devait correctement être adaptée ici pour pouoir manipuler des matrices, et donc, prendre en compte non seulement ses voisins de droite, de gauche, de haut, de bas, mais aussi et surtout les voisins diagonaux.

Ainsi, pour l'élément de coordonnées [0,0], la fonction "voisins" renvoie ceci :

 ---->  if i==0 and j==0:            # i représente les lignes, j les colonnes

    c=[ M[i][largeur-1] , M[i][j+1] , M[longueur-1][j] , M[i+1][j] , M[longueur-1][largeur-1] , M[longueur-1][j+1] , M[i+1][largeur-1] , M[i+1][j+1] ]

Posté par mtahir_patel à 01:24 - Commentaires [0] - Permalien [#]

Projet "Wireworld" - 2ème séance

Durant cette deuxième séance, le travail demandé consistait à s'initier à produire des animations en 2 dimensions. Pour cela, il nous a fallut commencer à manipuler des matrices. Ainsi, nous avons conçu deux fonctions :

  • La pemière fonction demandée devait générer une matrice carrée composée de nombres aléatoires compris entre 0 et 3 inclus. Ces 4 chiffres symbolisant les différents états de cellules évoqués dans l'article prédédent : 0 pour la cellule "vide", 1 pour la "tête", 2 la "queue" et 3 la cellule "conductrice".

 

  • La deuxième fonction est différente dans le sens où nous ne l'avons pas conçu nous-mêmes. En effet, la fonction "imshow" qui permet d'animer la matrice passée en paramètre et de renvoyer une matrice différente à chaque unité de temps, selon certains critères également passés en paramètres, est une fonction déja existante, et accessible en faisant appel à la bibliothèque "Matplotlib". Nous devions donc l'adapter à nos besoins, en utilisant les fonctions créées la semaine précédente, à savoir la fonction "changementdetats" principalement mais aussi la fonction "voisins". Il nous a néanmoins fallu quelques temps avant de comprendre compètement son mécanisme, de savoir quels devaient être les bons éléments à passer en paramètres etc.

Posté par mtahir_patel à 00:52 - Commentaires [0] - Permalien [#]

24 mars 2014

Projet "Wireworld" - 1ère séance

Durant la 1ère séance de l'atelier concernant le projet, nous devions concevoir des fonctions sur des listes  :

  • Une fonction qui prend un paramètre une chaine de caracères et qui renvoie la liste des caractères de la chaine. Nous l'avons ensuite optimiser pour qu'elle "nettoie" la chaîne de caractères (notée s) et renvoie une liste (notée c) de caractères d'éléments spécifiques (caractère noté b) : les caractères ">", ".", " ", "=".

---->  def etats(s):        

            c=[]

            for b in s:

                   if ((b==' ') or (b=='>')or(b=='.') or (b=='=')):

                   c.append(b)

            return c

 

  • Une fonction qui prend en paramètre une liste d'éléments (notée d), un élément de cette liste avec son indice et qui renvoie une liste (notée c) contenant les deux voisins de gauche de l'élément, l'élément, et ses deux voisins de droite. Pour cette fonction, nous avions du également traiter les cas partiuliers qui s'imposent aux différentes extrémités de la liste. Pour ce faire, nous avions utilisé des "if". Par exemple, si on choisit le premier élément de la liste en paramètre, avec donc l'indice (noté i) 0, nous devions procèder ainsi (la fonction "len" renvoie la longueur de la liste) :

---->   if i  == 0:                          

        c=[d[len (d)-2], d[len (d)-1], d[0], d[1], d[2]]      

 

  • Une fonction qui prend en paramètre l'indice d'un élément choisi, une liste initiale et un caractère symbolisant un des 4 états (les caractères spéciaux du 1er paragraphe). Elle fait appelle à la fonction précédente qui renvoie une liste des voisins d'un élément. La fonction compte le nombre d'occurrence du caractère choisi parmi la nouvelle liste créée. Nous avions, pour cela, utilisé un compteur.

 

  •  Une fonction intitulée "changementdetats" qui prend une liste d'éléments "spéciaux" (les 4 précédents) en paramètre. A ces éléments, nous appliquons les changements demandés en consigne, à savoir : l'élément vide reste vide (" " reste " "), l'élément tête devient l'élément queue (">" devient "="), l'élément queue devient conducteur ("=" devient "."), et l'élément conducteur, selon certaines conditions, devient tête ("." devient ">") ou reste conducteur.

 

Posté par mtahir_patel à 22:57 - Commentaires [0] - Permalien [#]

11 mars 2014

Les automates cellulaires

Qu’est-ce-que c’est ?

 

Un automate cellulaire est un objet mathématique, étudié aussi en informatique théorique, évoluant par étapes selon des règles très simples et imitant d’une certaine manière les capacités autoreproductrices des êtres vivants. Il est constitué d’une grille dont les cases sont appelées « cellules », pouvant prendre plusieurs états, le plus souvent deux, « mort » ou « vivant ». L’application la plus simple est le Jeu de la vie, proposé en 1970 par le mathématicien britannique John Horton Conway.

 

Qui les a créés ?

 

Dans les années 1940, Stanislaw Ulam étudiait la croissance des cristaux au Laboratoire national de Los Alamos, en la modélisant sur une grille. Dans le même temps, John von Neumann, collègue d'Ulam à Los Alamos, travaillait sur des systèmes auto-réplicatifs et rencontrait des difficultés pour expliciter son modèle initial d'un robot qui se copierait tout seul à partir d'un ensemble de pièces détachées. Ulam lui suggéra de s'inspirer de ses travaux, ce qui conduisit von Neumann à concevoir un modèle mathématique abstrait pour son problème. Le résultat fut le « copieur et constructeur universel » (universal copier and constructor en anglais), le premier automate cellulaire : il était basé sur une grille à deux dimensions où chaque cellule pouvait prendre 29 états. Von Neumann y construisit un motif particulier et démontra qu'il pouvait produire sans fin des copies de lui-même.

 

Quelques applications…

 

Les applications pratiques des automates cellulaires sont nombreuses et diverses.

Fondamentalement ils constituent des univers dont on fixe les lois. Notre Univers

est soumis aux lois de la Physique. Ces lois ne sont que partiellement connues et

apparaissent hautement complexes. Dans un automate cellulaire, les lois sont sim-

ples et complètement connues. On peut ainsi tester et analyser le comportement

global d'un univers simplifié. Voici quelques exemples d’application :

 

 

- Simulation du comportement d'un gaz. Un gaz est composé d'un ensem-

ble de molécules dont le comportement est fonction de celui des molécu-

les voisines.

-Étude des matériaux magnétiques selon le modèle d'Ising : ce modèle

(1925) représente le matériau à partir d'un réseau dont chaque noeud est

dans un état magnétique donné. Cet état — en l'occurrence l'une des

deux orientations du moment magnétique — dépend de l'état des noeuds

voisins.

- Simulation des processus de percolation.

- Dans un domaine différent, les automates cellulaires peuvent être utilisés

comme alternative aux équations différentielles

- Conception d'ordinateurs massivement parallèles.

- Simulation et étude du développement urbain

- Simulation des processus de cristallisation.

- Simulation de la propagation des feux de forêt

 

 

 

·           Sources

  • Wikipédia
  • Futura sciences
  • "Automates Cellulaires"   de Jean-Philippe Rennard  

 

Posté par mtahir_patel à 09:18 - Commentaires [0] - Permalien [#]

24 février 2014

Présentation

Ce blog est tenu par moi-même, Mohammad-Tâhir PATEL, étudiant à l'UPMC en MIPI 26.

Il a été créé pour l'UE d'ARE "Wireworld" Maths - Informatique.

Posté par mtahir_patel à 22:11 - - Commentaires [0] - Permalien [#]

17 février 2014

3 séances de Python

Durant les 3 dernières séances d'ARE, nous avons appris comment typer des variables, utiliser les fonctions "print", "input", les alternatives "if" et "else", et récemment, la fonction "turtle". Nous avons également appris à définir une fonction en python grâce au logiciel Spyder.

Posté par mtahir_patel à 17:03 - Commentaires [0] - Permalien [#]