Archives Mensuelles: janvier 2013

Les premiers tests sur la nouvelle experience montrent que dans cet environnement plus complexe les mebius n’arrivent pas a converger (ils n’arrivent pas a utiliser leur moyen de deplacement pour atteindre la cible). Ces tests m’ont cependant donne matiere a reflechir a ce qu’il se passe dans le cas d’un environnement plus complexe que la premiere experience. Dans la deuxieme experience, la principale difficulte vient du fait que le mebius ne controle plus son deplacement mais sa vitesse. Cela induit un decalage entre l’acte et son resultat qui oblige le mebius a pouvoir deduire plusieurs iterations a l’avance d’une part, et a etre capable de comprendre qu’un acte qui dans l’instant peut etre juge ‘mauvais’ se revele plusieurs iterations apres le ‘bon’ choix (par ex. accepter un mouvement qui eloigne de la cible temporairement pour pouvoir ensuite l’atteindre). Comme je savais que je finirai par buter sur ces problemes j’y avais deja reflechi, et le mois dernier j’avais eu une idee susceptible de les surmonter. Cependant je n’arrivais pas a faire la connection entre cette idee et le fonctionnement actuel des mebius. De plus elle pose un autre probleme : elle necessite enorment de memoire. Au passage, j’ai cherche un peu sur internet des estimations de la quantite de « memoire » que represente un cerveau humain (la il faudrait que je precise ce que j’entend par la mais ca sera pour plus tard). C’est tellement enorme compare aux capacites de nos machines que supposer qu’un modele est mauvais parce qu’il necessite des quantites inaccessibles de memoire pour fonctionner est indeniablement faux. Alors aujourd’hui je me suis attele a faire la connection entre les mebius et l’idee en question, et a trouver un moyen efficace de gerer ce besoin de memoire qui, meme s’il doit etre accepte, doit neanmoins etre musele afin que les mebius puissent tourner sur ma machine (il me parait raisonnable de penser que le probleme auquel je les confronte ne doit pas necessiter plus de memoire que ce dont je dispose actuellement alors que le ‘cerveau’ d’un moustique semble suffisant !). J’ai reussi a trouver quelque chose qui semble fonctionner sur le papier. Il me faut maintenant le coder et le tester, ce qui va me prendre un petit bout de temps car ca implique pas mal de modifications.

J’ai fini la mise en place de la nouvelle experience. Cette fois ci le mebius ressent sa vitesse de deplacement dans le plan, sa vitesse de rotation, la distance a la cible et la position de la cible par rapport a lui meme grace a 4 capteurs (devant, derriere, droite, gauche). Il peut controler son mouvement via a 4 canaux (moteurs/propulseurs/…) qui agissent a la fois sur la rotation et le deplacement. L’effet de ces 4 canaux est configurable pour pouvoir simuler different types de hardware, et pour tester la capacite de reconfiguration (panne/bugs/erreur de cablage/…) comme dans l’experience precedente. Trois exemples de hardware simulable : le joujou a la mode en ce moment, le quadropter, en utilisant un canal pour la vitesse de rotation de chaque helice; un helicoptere, en utilisant deux canaux pour l’inclinaison de l’helice, un canal pour la vitesse de l’helice, et le dernier canal pour le sens et la vitesse de rotation du rotor arriere; un vehicule spatiale, en associant chaque canal a la poussee d’un mecanisme de propulsion place autour du vehicule. Au passage, je simule dans cette experience le cas du vehicule spatiale, dans un plan, mais avec les deux autres exemples on voit que c’est directement applicable a un espace 3D. On peux aussi imaginer tout autre sorte de vehicule, roulant par exemple, avec un canal par vitesse et sens de rotation de chaque roue. Bref, 4 canaux ouvrent la porte a enormement de possibilite. Aussi, j’ai ajoute un coefficient de frottement dans la simulation. Si les Mebius passent cette experience avec succes, ca sera deja une grosse victoire. 

Petit test pour voir si les mebius arrivent a converger en partant de cognits non initialises et en utilisants un mecanisme de SRM (selection/reproduction/mutation).

Screenshot from 2013-01-13 11:56:49

 

Je reprend la meme experience que dans l’article precedent avec une puissance qui ne varie pas (courbe bleue) et une puissance qui varie aleatoirement toutes 4000 iterations, et je trace l’age du plus vieux mebius parmi une population de 10 mebius. Quand la puissance ne varie pas, il suffit que les cognits actor convergent vers la reponse adaptee a cette puissance. Quand la puissance varie, il faut egalement que les cognits teacher convergent vers une reponse permettant au mebius de se reorganiser a chaque variation de puissance, sans quoi les cognits actors ne peuvent evoluer que par mutation, autrement dit en mourant, ce qui limite la duree de vie maximale a a peu pres la duree entre deux variations de puissance. J’ai fait plusieurs runs d’au maximum 1.000.000 iterations mais il donne tous des resultats similaires a celui du graphe ci dessus. Si la puissance ne varie pas (courbe bleue) on converge rapidement vers deux cognits actors optimaux qui donnent des resultats equivalent au mebius configure a la main de l’article precedent. Si la puissance varie (courbe rouge), les mebius convergent vers la duree de vie maximale pour la vitesse de variation de l’experience mais a partir de la ils stagnent (la courbe s’arrete vers 30.000 iterations, signifiant qu’aucun mebius plus performant n’est apparu durant les 970.000 iterations suivantes). Avec une population plus importante, un nombre d’iteration beaucoup plus eleve, un algorithme SRM plus evolue on verrait sans doute apparaitre a un moment ou a un autre des mebius capables de s’adapter a une puissance variante. Mais ce n’est pas mon but ici (au moins pour l’instant), je preferre continuer a configurer a la main mes cognits et voir ce que les mebius sont capables de faire dans l’absolu. Plus tard je reflechirai a une solution ne necessitant pas d’algo SRM, et en fait j’ai deja pas mal d’idee pour ca. Disons que ce sera la 3e generation !
Je commence maintenant une nouvelle experience, toujours dans l’idee trackage de cible, mais en 2d et en simulant un systeme de deplacement plus complexe et surtout plus realiste.

Au passage, j’ai decouvert il y a quelques jours l’arduino et je suis tres emballe. Ca serait assez immediat de porter mes mebius dessus et les confronter au monde reel 🙂

http://arduino.cc/

 

Alors pour faire court sur les derniers problemes, il s’agissait d’un bug dans la simulation de l’environnement, d’une erreur dans le fichier de configuration et un probleme de sequencement dans l’algorithme d’apprentissage. Avec tout ca ca risquait pas de donner les resultats esperes ! Mais maintenant c’est repare et ca marche :

Screenshot from 2013-01-11 22:54:36Je rappelle la premiere experience de test : un segment sur lequel se deplacent le mebius et une cible, le mebius a un capteur de distance a la cible a droite et a gauche, et deux « muscles » lui permettant de se deplacer vers la droite ou vers la gauche. La cible se deplace aleatoirement vers la droite et la gauche a une vitesse maximum bornee. La puissance des « muscles » du mebius est representee en jaune sur le graphique. Toute les 20000 iterations je la modifie aleatoirement et repositionne le mebius aleatoirement. En rouge, la distance moyenne du mebius a la cible sur 50 iterations. En bleu, la distance max pendant ses 50 iterations. Le mebius a 2 cognits actors qui commandent les muscles et 4 cognits teachers configures pour que le mebius cherche a se tenir au plus pres de la cible. La precision des cognits est de 0.1. On observe tout d’abord que pour le 5e, 8e et 9e intervalle le mebius n’arrive pas a se maintenir a proximite de la cible. Cela vient de la puissance des muscles qui est telle que sur ses intervalles le mebius ne peut se deplacer aussi rapidement que la cible. Pour les autres intervalles, le mebius se maintient a une distance bien inferieure a sa precision, prouvant que les cognits on bien converge vers l’etat correspondant a ‘se maintenir au plus pres de la cible’. On constate qu’a chaque changement de la puissance des muscles les cognits se reconfigurent pour s’y adapter et converger vers le but fixer par les cognits teachers. On constate egalement que la distance moyenne evolue selon une courbe en U en fonction de la puissance des muscles. Plus le mebius est faible, moins il arrive a suivre la cible, plus la distance moyenne augmente. En prenant de la puissance il devient capable de suivre la cible plus precisement et la distance diminue. Finalement avec trop de puissance la distance augmentent a nouveau. Ca peut paraitre paradoxale a premiere vue mais l’explication est la suivante : Les valeurs en sortie du cognit etant discrete, plus la puissance est grande et plus l’ecart entre deux valeurs est grande, le cognit perd donc en precision. Il y a donc une puissance ideale, correspondant a une vitesse maximale du mebius un peu superieure a celle de la cible (4e intervalle du graphique). Si on fait un paralelle avec un animal, on peux imaginer que cette puissance correspond aux criteres physiques des parties du corps associees la fonction motrice, alors que les cognits sont le systeme nerveux commandant ces parties du corps et les organes sensoriels. Pour cette experience je pars de cognits actor vierges et de cognit teacher configures a la main, mais je pourrais aussi partir d’un groupe de mebius aux cognits tous vierges et par selection/reproduction/mutation attendre qu’ils convergent vers un mebius aux performances optimales. Contrairement a ce que j’ai ecrit dans un article precedent, je doute maintenant que meme avec ma nouvelle machine ca converge raisonnablement vite, mais je vais tout de meme essayer dans les prochains jours. Conclusion de ce premier graphique : ca converge, c’est stable, ca s’adapte… bref ca marche tres bien. Deuxieme graphique :

Screenshot from 2013-01-11 23:54:06

 

Meme experience, j’ai juste augmente la precision des cognits. On voit alors que l’influence de la puissance des muscles se reduit, et que les perfromances dans tout les cas s’ameliorent, c’est coherent. Troisieme graphique :

Screenshot from 2013-01-12 00:02:27

 

Ici pour illustrer ce que les mebius de deuxieme generation peuvent faire de mieux que les premiers je refais la meme experience avec le meme mebius mais en cours d’experience j’inverse artificiellement l’effet des deux muscles (celui de droite se met a pousser a gauche et inversement). Sur le graphique c’est l’intervalle ou la courbe jaune passe en negatif. On constate que meme dans ce cas les cognits arrivent a se reconfigurer et que l’evenement passe quasiment inappercu en terme de distance a la cible. D’un point de vue ingenierie je pense que ces trois graphiques illustrent bien l’interet des mebius. Quelque soient les valeurs des parametres externes, et quand bien meme ils evolueraient, le mebius s’adapte pour trouver une solution optimale. Si on imagine qu’on l’utilise dans un systeme de pilotage de vehicule par exemple, ca simplifie la mise en oeuvre car on peux se passer de chercher a parametrer un modele pour l’adapter au vehicule, et encore plus de chercher quel modele convient. Ensuite le mebius s’adapte en permanence donc si la reponse optimale a un signal d’entree evolue a cause de l’usure materiel du vehicule par ex, ou a cause d’une panne, il continuera a fonctionner « au mieux ». Enfin il peut reduire les problemes dus a des erreurs de mise en oeuvre : l’exemple du troisieme graphique correspondrait par exemple a une erreur au cablage/assemblage ou la commande pour tourner a droite a ete inversee avec celle pour tourner a gauche, et pourtant meme dans ce cas le mebius s’adapte et corrige.

Je vais maintenant faire d’autres exemples plus complexes pour illustrer toutes les possibilites des mebius, et je vais rajouter petit a petit quelques ameliorations que j’ai gardees sous le coude.

 

Il est trop tard pour detailler ce soir, mais j’ai trouve et resolu les derniers problemes et ca y est ca marche ! Pour l’instant ca fait ce que faisait les mebius de premiere generation, en plus efficace, et a partir de la j’espere pouvoir verifier que cette seconde generation est capable de choses beaucoup plus interressantes. Autant que possible j’essaye de presenter ici demain les resultats obtenus ce soir. Je me couche heureux… 🙂 

Bon j’ai ete silencieux durant un mois mais en fait j’ai un peu travaille, juste paresseux cote blog. Dans mon dernier post j’ecrivais que j’avais rencontre un probleme. Vers les fetes de fin d’annee, m’accordant une pause sur mes autres activites j’en ai profite pour me pencher dessus. Ca m’a permis d’une part de le resoudre, et d’autre part d’avoir d’autres idees. Meme si ces idees ne font pas avancer les choses maintenant, ce sont des petits bout d’algorithmes qui me seront surement utiles un peu plus tard, soit parce que j’en aurai forcement besoin soit parce que je ferai en sorte de les utiliser car je suis convaincu qu’ils apporteront quelque chose. Quand au probleme precedent, meme s’il est resolu et que les cognits teacher se comportent maintenant comme je le souhaite, je n’obtient pas les resultats que j’attendais. En y reflechissant un peu je pense avoir compris ce qu’il se passe et je suis maintenant en train d’y reflechir plus…