Rediffusion d’un article publié en 2017

« Rien ne sert de courir, il faut pointer à part », dit la tortue Logo

Piste bleue Le 7 novembre 2021  - Ecrit par  Alain Busser Voir les commentaires

Lorsque Seymour Papert et son équipe sont passés de la tortue réelle à sa version virtuelle sur écran (l’ancêtre des lutins), ils se sont livrés à une activité de modélisation. Dans cet article on va explorer la modélisation inverse : simuler les imperfections d’une tortue réelle, à l’aide de sa version virtuelle.

À la fin des années 1960, Seymour Papert explorait une nouvelle façon d’enseigner les maths : faire programmer par des enfants, des robots dessinateurs. Ces robots [1] étaient grosso modo des tortues de Bristol auxquelles Papert et son équipe avaient rajouté des bras munis de stylos qui laissaient des traces sur le papier [2]. Puis Papert a porté sur ordinateur une version virtuelle de ces « tortues » et les enfants, depuis ce jour, dessinent des carrés et autres polygones réguliers, à l’aide de ce qui est devenu Logo, puis Scratch. Mais si on essaye de faire parcourir un carré avec un des descendants modernes des tortues matérielles, que sont le Thymio, le Sphero etc, on constate que même sur terrain plat, le trajet s’arrête souvent assez loin du point de départ. Pour rendre le phénomène plus visible, on a exagéré les erreurs de parcours sur cette simulation [3] (bouger le point de départ pour voir d’autres réalisations du trajet aléatoire ; la distance finale est affichée en rouge) :

Les buts de cet article sont

  • de proposer des activités inédites en programmation (pour le cours de maths ou au sein d’un EPI maths/techno) dès le collège ;
  • d’introduire graphiquement au théorème central limite et aux vecteurs gaussiens (ça par contre ce n’est pas pour le collège !) ;
  • de proposer des pistes pour une étude statistique de la distance dont la tortue a « raté sa cible » après avoir dessiné un polygone régulier ;
  • Mais surtout et avant tout, de montrer des images, que l’on espère suffisamment belles pour rendre agréable la lecture de l’article. En particulier, la programmation graphique permet de faire en sorte que même des algorithmes peuvent être traduits par des images.

Dans une première partie, on va ajouter des petites perturbations aux petits mouvements successifs que fait la tortue au cours de son parcours et voir comment le parcours est modifié, avec exploration statistique de la position finale. Ensuite dans une seconde partie, on ne va garder que les perturbations aléatoires et simuler ainsi un mouvement brownien.

Voici certaines choses que peut faire une tortue de Papert :

  • Pour la faire avancer (ici de 200 pixels), on fait tourner les deux moteurs jusqu’à ce qu’elle ait avancé (théoriquement tout droit) d’une distance (théorique) de 200 pixels.
  • Pour la faire tourner (ici de 90°) on fait tourner ses deux roues motrices en sens inverse jusqu’à ce qu’elle ait tourné (théoriquement autour du milieu de son essieu) d’un angle (théorique) de 90° ;
  • Pour qu’elle laisse une trace écrite de son parcours, on actionne le moteur guidant le stylo pour que celui-ci touche le papier. Théoriquement le stylo est au milieu de l’essieu et ne dessine pas de traits pendant les rotations.

Choix du logiciel

Pour refaire rigoureusement à l’identique les expériences décrites dans cet article, on peut tester les scripts sur le site de Sofus ; après avoir fabriqué le programme en plaçant les bons blocs aux bons endroits, cliquer sur le bouton « lancer » [4] puis regarder en bas de la page, le dessin obtenu.

Une autre option consiste à aller sur le site SofusPy qui possède un export automatique vers Python (en cliquant sur le bouton Éditeur). Cette option permet de voir le mouvement de la tortue sous forme d’une animation, la tortue étant ralentie à cet effet.

D’autres options sont de refaire les manipulations avec d’autres logiciels permettant de programmer une tortue, comme Python (langage), Xcas, Scratch, Blockly games, Snap !, CaRMetal, DGPad etc.

Première partie : polygones approximatifs

Pour faire tracer un carré par la tortue, on lui demande d’avancer de 200 pixels puis de tourner de 90°, ceci, 4 fois de suite :

Ci-dessus les blocs « repliés » (en mauve) sont des fonctions définies plus bas, et pour l’instant cachées afin de laisser le regard se concentrer sur l’essentiel (en vert) : pour dessiner un carré, la tortue doit avancer de 200 pixels puis tourner de 90° vers la gauche, ceci, 4 fois.

Mais lorsque la tortue matérielle avance, ce n’est pas exactement de 200 pixels, et lorsqu’elle tourne, ce n’est pas exactement de 90° [5].

Le modèle choisi ici est un peu arbitraire : On imagine que tous les 10 pixels, la tortue s’est trompée d’au maximum 1 pixel sur la distance parcourue (laquelle suit alors une loi $\mathcal{U}(9;11)$) et qu’en plus elle ne continue pas à aller tout droit : Elle subit (toujours tous les 10 pixels) une rotation suivant une loi $\mathcal{U}(-1°,1°)$. Le caractère arbitraire de ces choix est justifié par les faits suivants :

  • Une modélisation plus fine nécessiterait d’en savoir plus sur les dimensions du robot, la rugosité des pneus etc.
  • Le choix de Sofus incite à l’expérimentation, en modifiant les paramètres pour voir l’effet des modifications.
  • La superposition d’erreurs multiples et indépendantes entre elles amène en général à l’apparition de lois normales dont les paramètres sont de toute manière choisis assez arbitrairement. En général...

Ci-dessous on va donc approcher l’erreur angulaire par une loi uniforme entre -1° et 1°, et l’erreur de distance par une loi uniforme entre -1 pixel et 1 pixel ; mais ces erreurs seront rajoutées tous les 10 pixels et il est difficile de prévoir a priori l’effet obtenu au final.

En remplaçant l’instruction standard avancer de 200 par une boucle dans laquelle on avance 20 fois de 10, mais avec introduction d’erreurs, on simule un robot plus réaliste que les tortues virtuelles de Papert. Pour se faciliter la tâche, on a créé préalablement une variable aléatoire e uniforme entre -1 et 1, et on l’additionne à la longueur et à l’angle après chaque parcours de 10 pixels :

Le tracé obtenu a cette allure :

La position finale de la tortue n’est pas très éloignée de son point de départ (qui est le début de la courbe) mais c’est seulement en moyenne qu’elle est exactement le point de départ. Ce script permet de chercher la répartition statistique des abscisses de ce point. La suite du programme pouvant être une modélisation probabiliste des erreurs sur la position et la distance finale de la tortue.

Mais avant cela, puisque ce site est à vocation visuelle, voici une étoile pentagonale dessinée avec un procédé similaire :

algorithme

Au lieu d’avancer de 200 pixels à chaque fois, on a avancé de 300 pixels, en répétant 30 fois et non 20, le pas aléatoire de 10 pixels. Et bien entendu il fallait tourner de 144° au lieu de 90° pour avoir cette étoile :

  • M’sieur, une étoile à 5 branches, ça a 5 branches non ?
  • Oui.
  • Donc pour tracer une étoile à 5 branches, on doit tourner 5 fois non ?
  • Oui, évidemment.
  • Ben 360°, divisé par 5, ça fait 72°, pas 144°.
  • Essaye alors de faire tourner la tortue de seulement 72°, et regarde le résultat. Ça te fera travailler la compétence « induire » :-)
  • Ah oui ça ne donne pas la bonne partie du pentagramme. Donc 72° ça marche pas.
  • Et non !
  • Mais comment vous avez trouvé 144° ?
  • Essaye de tracer un pentagramme, en comptant le nombre de tours que tu fais sur toi-même durant le tracé.
  • Ah oui je fais deux tours complets pour dessiner l’étoile.
  • Deux tours, en degrés, ça fait 2×360°=720° : Et 720°, divisés par 5, ça fait combien ?

On peut aussi essayer d’autres étoiles, par exemple à 8 branches :

algorithme

La seule différence par rapport à l’étoile à 5 branches, c’est l’angle de 135° ; la longueur (moyenne) est la même :

L’angle de rotation de la tortue doit être le supplémentaire de l’angle que fait une branche de l’étoile. Pour le pentagramme les angles font 36° et le supplémentaire de 36° est 144° ; ici on veut, à l’évidence, des angles de 45°, et donc on tourne de 135° pour chaque branche, ce qui fait 3 tours complets de la tortue (8×135°=1080°) pour clore l’étoile.

Dans la partie suivante, on va essayer de faire dessiner des cercles aux tortues erratiques, d’une part parce que c’est beau, d’autre part parce que l’abondance de mouvements « élémentaires » laisse prévoir une meilleure approximation gaussienne.

approximation polygonale

Pour dessiner un cercle avec la tortue, la méthode classique consiste à tracer un polygone régulier à 360 côtés, en tournant d’1° après avoir tracé chaque côté.

Selon ce paradigme, le cercle est défini comme une courbe à courbure constante : Ceci permet de reconnaître un cercle localement, sans avoir besoin de chercher où est son centre : Il suffit que chaque fois qu’on a avancé d’un pixel, on tourne du même angle (1°). Dès lors que la courbure est constante, il suffit de la connaître en un endroit donné pour tout connaître du cercle (rayon, centre). Mais ici, on introduit des erreurs dans la courbure, ce qui donne une courbe ressemblant localement à un cercle, mais qui n’est pas un cercle puisqu’elle ne se referme pas.

Pour ne pas alourdir à l’excès les temps de calcul, on va se contenter ici d’un polygone à 60 côtés : Un hexacontagone régulier convexe ; il ressemble beaucoup à un cercle, même en l’aléatoirisant un peu : Chaque côté est de longueur aléatoire entre 9 et 11, et chaque angle de rotation est aléatoire entre 5° et 7° :

Le cercle est bien rond, mais ne se ferme pas :

Un bon moyen de voir la répartition des points d’arrivée, est d’utiliser plusieurs tortues en même temps :

Les scripts

Pour faire tracer 10 cercles approximatifs par 10 tortues, on commence par les créer en les numérotant (de 1 à 10), puis on s’adresse à chacune d’entre elles en lui donnant comme message, les instructions de tracé du cercle approximatif :

Des améliorations sont proposées maintenant :

  • Cacher les tortues ;
  • lever leur stylo pour qu’elles parcourent le cercle sans le dessiner ;
  • leur demander de tracer un point à leur arrivée.

Ce script permet de tracer un nuage de points (ici, 200 points) :

Les positions finales des tortues donnent un nuage de points qui semble suivre approximativement une loi normale multidimensionnelle (en dimension 2) ; en voici quelques exemplaires :

1

2

3

4

Mais le nuage de points est allongé : L’écart-type des abscisses (à peu près 80 [6] ici) est plus grand que celui des ordonnées :

Cela se confirme sur les histogrammes superposés des abscisses (en bleu) et des ordonnées (en rouge) ; la superposition permet d’estimer le rapport des écarts-types à environ 1,5 [7] :

à qui la faute ?

Aux angles !

On peut le vérifier expérimentalement en comparant ces deux simplifications :

  • Celle-ci, ne distribuant les erreurs aléatoires que sur les angles, donne le même genre de nuage de points allongé :

  • et celle-ci, ne distribuant des erreurs aléatoires que sur les parcours de distances, donne un nuage de points bien rond :

En fait, si on essaye avec cette dernière version, de dessiner un côté seulement, et du fait qu’il n’y a, toujours dans cette version, aucune rotation, la distance parcourue est la somme de variables aléatoires indépendantes entre elles. Dans le cas du carré, ce sont 20 variables aléatoires uniformes entre 9 et 11. La distance totale parcourue est comprise entre 180 et 220 pixels, et ne peut donc être normale. Mais sa loi est proche de celle d’une variable aléatoire normale, en vertu du théorème central limite. De plus, on peut [8] calculer

  • son espérance qui est la somme des espérances, soit $20\times10=200$ pixels ;
  • sa variance qui est la somme des variances soit $\frac{20}{3}$ pixels² ;
  • son écart-type qui est $\sqrt{\frac{20}{3}} \approx 2,582$ pixels.

Alors l’extrémité du premier côté du carré a pour coordonnées $(X,0)$ où X est une variable aléatoire normale de paramètres 200 et 2,582 : On appelle cela un vecteur gaussien dégénéré (au sens où le nuage de points est aplati). La différence entre ce vecteur et son espérance (200,0) est décrite par la matrice de covariance, dont le premier terme est la variance des abscisses $\frac{20}{3}$, le dernier terme est la variance des ordonnées 0, et les deux termes diagonaux sont égaux à la covariance des abscisses et des ordonnées, qui est nulle. La matrice de covariance de l’extrémité du premier côté est donc $\begin{pmatrix}\frac{20}{3} & 0 \\ 0 & 0 \end{pmatrix}$

Ensuite la tortue tourne de 90° puis avance d’une nouvelle distance aléatoire approximativement normale mais cette fois-ci parallèlement à l’axe des ordonnées. sa nouvelle position est un vecteur aléatoire $(X,Y)$ où $X$ suit une $\mathcal{N}(200 \; ; \; 2,582)$ et $Y$ aussi : Le vecteur gaussien $(X,Y)$ n’est plus dégénéré et maintenant la variance des ordonnées est aussi égale à $\frac{20}{3}$. En fait on obtient la nouvelle matrice de covariance $C$ en additionnant l’ancienne matrice de covariance et $P$, matrice de covariance du trajet vertical, laquelle est égale à $\begin{pmatrix} 0 & 0 \\ 0 & \frac{20}{3}\end{pmatrix}$. La matrice de covariance du troisième sommet du carré est donc $\begin{pmatrix} \frac{20}{3} & 0 \\ 0 & \frac{20}{3}\end{pmatrix}$ : C’est le produit de $\frac{20}{3}$ par la matrice identité, ce qui signifie qu’à ce stade le nuage de points est rond.

La troisième partie du trajet a pour matrice de covariance, la même que celle du premier côté, et la matrice de covariance du quatrième sommet est donc $C = \begin{pmatrix} \frac{40}{3} & 0 \\ 0 & \frac{20}{3}\end{pmatrix}$ : Cette matrice est toujours diagonale mais, la variance des abscisses valant $\frac{40}{3}$ et celle des ordonnées, $\frac{20}{3}$, le nuage de points est allongé.

Enfin, lors de la supposée fermeture du carré, la matrice $P$ à additionner à $C$ est à nouveau celle du second côté, et l’égalité $C=\begin{pmatrix} \frac{40}{3} & 0 \\ 0 & \frac{40}{3}\end{pmatrix}$ peut être vérifiée par ce script :

En effet la rotation $R$ a pour effet de transformer la matrice de covariance $P$ par un changement de coordonnées ce qui se fait en multipliant $P$, à gauche par $R$, et à droite par la transposée de $R$ (conjugaison de matrices).

Cette variante permet de calculer rapidement la matrice de covariance d’un hexagone régulier approximatif :

Le résultat est que la covariance des coordonnées est toujours nulle et qu’elles ont toutes les deux la même variance 20 (donc le même écart-type $\sqrt{20}$).

Le même genre de programme de calcul matriciel indique que

  • Pour le tracé de l’étoile à 5 branches, le nuage de points est gaussien, de covariance nulle, les deux coordonnées ayant pour écart-type 5.
  • Pour l’étoile à 8 branches les covariances sont toujours nulles et les deux variances valent 40 ;
  • Pour le cercle approché, l’abscisse et l’ordonnée sont décorrélées et ont même variance 10 : On a un nuage gaussien avec le même écart-type $\sqrt{10} \approx 3,16$ pour les abscisses et pour les ordonnées.

Avec perturbations aléatoires sur les distances et les angles, on trouvait des écarts-types à la fois beaucoup plus grands (respectivement 9 et 6) que ces 3,16, et surtout différents entre eux. Si le nuage de points est allongé, c’est donc bien la faute des angles ! En fait, comme la matrice de covariance de chaque côté d’un polygone régulier est la même que celle du tracé du côté qui est en face de lui, la somme de vecteurs gaussiens (un par côté) devrait avoir une matrice de covariance du même type que celles au-dessus si le théorème central limite s’applique : On n’est clairement pas dans les conditions d’application de ce théorème, et on constate donc expérimentalement que la présence des rotations aléatoires a pour effet de créer une dépendance entre les vecteurs tracés par la tortue au cours de l’exécution du programme de dessin.

 

Voici, enfin, l’histogramme des distances :

distances aléatoires

Cet histogramme ressemble à celui d’une loi de Rayleigh comme on pouvait s’y attendre sous hypothèse normale. De plus

  • le mode (environ 8) suggère un paramètre de 8 ;
  • la moyenne (environ 10) est conforme à ce paramètre 8 ;
  • l’écart-type (environ 5) est lui aussi conforme à ce paramètre valant 8.

Bien que la loi de Rayleigh s’applique à un vecteur gaussien dont les coordonnées ont même écart-type (ce qui, on l’a vu, n’est pas le cas ici), on constate que la moyenne géométrique des écarts-types de $x$ et $y$ est $\sqrt{6 \times 9} \approx 7,35$ qui n’est pas loin des 8 estimés ci-dessus.

 

 

Deuxième partie : Le mouvement brownien

Si maintenant, à chaque fois qu’elle a avancé de 5 pixels, la tortue commet une erreur angulaire de 360° (soyons fous !) la tortue va carrément effectuer une marche aléatoire, qui simule efficacement un mouvement brownien :

Scripts

Pour dessiner une trajectoire brownienne, le script suivant convient :

On voit que pour simplifier le script, il a été fait le choix que la tortue n’avance que de 5 pixels à la fois ; un mouvement brownien plus réaliste serait obtenu en avançant d’une distance aléatoire.

Pour faire un mouvement brownien de plusieurs tortues (un gaz de tortues !), on utilise le script suivant :

Avec 100 tortues faisant la danse folle de Monsieur Brown en même temps, la chorégraphie donne rapidement lieu à un nuage gaussien de tortues :

En répétant l’expérience, on peut constater que l’écart-type des abscisses (par exemple) grandit comme la racine carrée du nombre de pas effectués. Ce phénomène décrit la propagation de la chaleur.

Quand les tortues browniennes rayent le parquet

Voici les 100 tortues, stylo baissé, après avoir follement dansé toute la nuit (celle-ci ayant duré 100 pas pour chaque tortue) :

Ces images très mathématiques sont issues du travail commencé en 2016 pour un atelier de l’IREM de La Réunion, dont une des composantes est le développement du logiciel Sofus : Il était alors prévu d’interfacer un robot de type Thymio en plus de la tortue virtuelle de Sofus. Cet interfaçage n’a pas (encore) été réalisé [9], mais l’idée reste intéressante à explorer en EPI maths/techno au collège [10].

En attendant, la répétition d’avancées aléatoires de la tortue a déjà donné lieu à des introductions au cours en terminale et en BTS, avec les constatations suivantes :

  • En avançant un nombre prédéterminé de fois d’une distance uniforme, la tortue parcourt une distance approximativement normale : Non seulement ça permet d’introduire la loi normale, mais c’est même la façon de faire qui est préconisée en STI2D/STL et en BTS ;
  • En avançant de distances suivant une loi exponentielle jusqu’à avoir dépassé une certaine distance, le nombre de pas suit une loi de Poisson de même paramètre que la loi exponentielle.

Mais avec l’introduction de Python en Seconde, ce genre d’activité, en dehors de l’intérêt esthétique, permet de combiner géométrie repérée et statistiques, ce qui n’est pas rien !

Post-scriptum :

Dire que, sans les nombreuses remarques des relecteurs, cet article n’existerait pas sous cette forme, n’est pas des paroles en l’air : la proportion du texte de cet article ayant survécu aux suggestions de modification par les relecteurs est in fine très faible. Qu’ils en soient ici, vivement, remerciés : Michele Triestino, Vincent Beck, Romain Bondil, Jean Aymes, Christian Mercat et Yassine Ghalem mériteraient presque d’être considérés comme co-auteurs de cet article, tant par leurs suggestions d’amélioration que par les réflexions qu’ils ont suscitées chez l’auteur initial de l’article. Mention spéciale pour Nicolas Chatal qui est à l’origine du titre actuel de l’article.

Article édité par Christian Mercat

Notes

[1capables d’avancer ou reculer d’une longueur donnée, ou de tourner sur eux-mêmes d’un angle donné

[2par programmation : une fois le bras en position basse, la tortue laissait une trace d’encre sur le terrain ; si le bras était en position haute, le stylo ne laissait aucune trace et la tortue avançait simplement.

[3faite avec la tortue de DGPad.

[4on peut aussi télécharger le source et l’utiliser en local ; pour cela cliquer sur clone or download pour télécharger le logiciel, sous la forme d’un dossier zippé contenant tout le site, en particulier la page Sofus.html qui permet de programmer

[5les tortues de Bristol, une fois qu’on a enlevé leur carapace, révèlent un chassis électronique monté sur trois roues dont deux motrices. Et ces deux roues motrices n’ont pas exactement le même rayon, elles ne sont pas parfaitement circulaires, leurs pneus sont rugueux etc.

[6on a agrandi l’image d’un facteur 10 pour mieux voir le nuage de points ; l’écart-type estimé par lecture du nuage de points est donc plus grand que celui calculé sur la série des abscisses, lequel est environ 9 ; et l’écart-type des ordonnées est environ 6

[7En statistiques, on ne se contente pas de constater l’allure « en cloche » d’un histogramme pour inférer une loi normale : Il faudrait un test de normalité comme un test de Shapiro-Wilk ou l’usage de la droite de Henry. Mais est-il besoin de rappeler que ces notions dépassent largement le cadre de l’enseignement des maths au secondaire ?

[8Pour une loi uniforme entre 9 et 11, l’espérance est 10 et la variance est $\frac{1}{3}$

[9Un collège acceptant de financer un EPI maths/techno, et la présence simultanée dans ce collège, d’un prof de maths qui accepte de travailler en EPI maths/techno, et d’un prof de techno ayant la même intention, et d’un crédit pour acheter les robots, c’est, disons, rare (euphémisme)...

[10le Thymio est conseillé parce que, muni d’un trou pour placer un stylo, on n’a pas à se préoccuper de la trace graphique ; de toute manière il est intéressant de répéter un assez grand nombre de fois l’expérience consistant à programmer le Thymio pour qu’il aille tout droit vers une cible et mesurer la position finale. Après une phase de collecte de données, qui peut avoir été faite avec un télémètre, on passe à l’étude statistique des erreurs avec un tableur par exemple.

Partager cet article

Pour citer cet article :

Alain Busser — «« Rien ne sert de courir, il faut pointer à part », dit la tortue Logo» — Images des Mathématiques, CNRS, 2021

Commentaire sur l'article

Laisser un commentaire

Forum sur abonnement

Pour participer à ce forum, vous devez vous enregistrer au préalable. Merci d’indiquer ci-dessous l’identifiant personnel qui vous a été fourni. Si vous n’êtes pas enregistré, vous devez vous inscrire.

Connexions’inscriremot de passe oublié ?