J.D. Zucker jdzucker "chez" gmail "point" com
Pendant le cours j'utilise cette applet http://www.obitko.com/tutorials/genetic-algorithms/example-function-minimum.php
Chargé aussi le fichier zip td-algogen.zip et lancer le programme MaxofFunction.
Pendant le cours j'utilise aussi cette seconde applet http://alphard.ethz.ch/gerber/approx/default.htm
Pour cet exercice, bootez de préférence sous Linux (en théorie, tout peut s'effectuer indifféremment sous Linux ou Windows, mais l'exercice nécessitant de lancer java depuis un terminal, Linux sera probablement plus commode que Windows...).
Pour démarrer, exécutez le fichier demo-GA-labyrExit.jar (double-cliquez dessus, ou bien faire java -jar demo-GA-labyrExit.jar dans un "terminal"). Dans ce problème, un "robot" se déplace dans un labyrinthe (comme dans le TP sur l'apprentissage par renforcement), et s'arrête dès qu'il se cogne contre un mur, revient sur un emplacement qu'il a déjàvisité, ou a atteint la sortie. Le but est de trouver un parcours menant àla sortie (marquée par une croix verte). On va donc utiliser une population dans laquelle chaque individu correspond àun ensemble de décisions de direction àprendre (et sera représenté uniquement par sa trajectoire dans le labyrinthe). Vous voyer le lien avec le TP 1 et l'apprentissage par renforcement.
Testez les fonctions d'évaluation présentées ci-dessus et comparez leurs efficacités respectives àfaire émerger un individu trouvant la sortie du labyrinthe.
Remarque 1 : On pourra constater que si tout se passe bien, l'algorithme génétique est capable de trouver un chemin jusqu'àla sortie en environ 150 générations (voire moins) de taille égale àenviron 200 individus (voire moins), ce qui implique qu'on a réellement testé au maximum 150x200~30000 hypothèses avant de trouver une solution convenable, alors que le cardinal total de l'espace exploré est 298~1031 (il y a 2 bits pour chacune des 49 cases, donc 98 bits) : ceci illustre la très grande capacité des algorithmes génétiques à"trouver une aiguille dans une botte de foin"...
Â
Remarque 2: cette démonstration reste toutefois àbut essentiellement illustratif et pédagogique, puisqu'il existe des algorithmes "classiques" capables de trouver la sortie de tout labyrinthe, et ce de façon plus efficace que les algorithmes génétiques c'est par exemple le cas des algorithmes par renforcement (cf. TP 1).
Pour démarrer, exécutez le fichier demo-GA-maxFonc.jar (double-cliquez dessus, ou bien faire java -jar demo-GA-maxFonc.jar dans un "terminal").
NOTE : si le double-clic sur le fichier jar ne fonctionne pas, il suffit, dans l'explorateur de fichier, de faire clic-droit àla souris sur un fichier .jar, d'aller dans l'onglet "Ouvrir avec", puis d'appuyer sur le bouton "Ajouter", et enfin de mettre àl'endroit prévu la commande "java -jar %s" (ceci définira pour la suite l'action que l'ordinateur effectuera quand on double-clique sur un fichier de type .jar).
Dans ce problème, une fonction présentant plusieurs maxima locaux (ce qui rend inapplicables les algorithmes les plus simples de recherche de maximum) est définie sur un certain intervalle et le but est de déterminer àl'aide des algorithmes génétiques l'abscisse du maximum global (sur l'intervalle) de la fonction. On va donc utiliser une population dans laquelle chaque individu correspond àune abscisse située dans l'intervalle (et sera représenté par un trait vertical allant du bas de la fenêtre jusqu'àla valeur de la fonction en ce point).
Remarque : cette démonstration a un but uniquement pédagogique et illustratif, puisque vous constaterez que le nombre total d'abscisses testées avant d'atteindre le maximum global (égal au nombre de générations multiplié par la taille de la population) est généralement tel qu'on aurait un aussi bon résultat en répartissant simplement ce nombre d'abscisses uniformément sur l'intervalle puis en cherchant Max(f(Xi)). L'intérêt des algorithmes génétiques pour la recherche de maximum de fonction n'est en pratique réel que dans le cas d'une fonction àbeaucoup de variables, car alors toute exploration systématique de l'espace des n-uplets possibles devient prohibitive, tandis qu'un algorithme génétique peut rester efficace. Malheureusement, la visualisation de la recherche du maximum d'une fonction àn variables est problématique pour n=2, et devient carrément impossible (ou en tout cas incompréhensible) pour n>=3...
Pour commencer, visualisez l'environnement dans lequel évolue le "robot", et voyez le comportement inefficace du robot quand son "cerveau" neuronal est inadapté :
dans un "terminal", faire java -jar demo-GA-testAnimat.jar ratherStupidBrain.dat, puis appuyez sur le bouton start.
Le but serait que le robot explore l'espace pour y trouver et "manger" la "nourriture" (les F, comme Food, disséminés aléatoirement sur la grille), tout en ne consommant pas le "poison" (les P disposés eux-aussi aléatoirement) s'il vient àpasser dessus.
Le comportement du robot est déterminé par un petit réseau neuronal totalement bouclé(donc ayant un "état" interne) dont les sorties décident de son action (tourner, avancer, manger) en fonction de ce qu'il perçoit (présence de murs, de nourriture ou de "poison" juste en face, en face àgauche ou en face àdroite). Ce réseau, illustré ci-dessus àdroite, possède 5 entrées correspondant à5 "senseurs" locaux (présence ou non de "quelque chose" làoÃ1 il se trouve et sur les 3 cases adjacentes face/gauche/droite, "odeur" ou non de nourriture) et 10 neurones totalement connectés entre eux, dont 4 servent de sorties déterminant le comportement du robot : une sortie détermine s'il faut avancer, une autre s'il faut pivoter àdroite, une troisième s'il faut pivoter àgauche, et la dernière sortie décide si le robot tente de "manger" ce qui serait éventuellement présent làoÃ1 il se trouve. Le réseau contient donc 160 poids de connexions et biais pour lesquels il s'agit de trouver une combinaison de valeurs telle que le comportement résultant du robot soit le plus proche possible de celui recherché (ie trouver et manger tous les F, mais ne manger aucun P).
Il s'agit donc d'un problème d'apprentissage par renforcement, au sens où on n'indiquera pas au réseau quelle décision prendre (donc quelles sorties produire) en fonction de ses entrées, et où ce qu'on cherche àoptimiser n'est donc pas une simple erreur entre sorties désirées et sorties obtenues, mais un critère autre, en l'occurence la proportion de F "mangés" (diminuée du nombre de P consommés). On va effectuer cet apprentissage en utilisant des algorithmes génétiques, avec comme fonction d'évaluation ("fitness") la mesure (nbFood-nbPoison)/maxFood, où nbFood et nbPoison sont les quantités respectives de F et P "mangés" et maxFood la quantité totale de F disponibles ; pour que le comportement appris soit "général", cette mesure de fitness est moyennée sur N (=5) simulations du même robot dans des environnements aléatoires différents (seules les positions des F et des P variant), avec àchaque fois une position initiale et orientation initiale aléatoires pour le robot. Le codage employé pour le génome est ici directement la représentation binaire des 160 valeurs des poids et biais (autrement dit, une mutation appliquée correspond àinverser 1 bit de l'encodage IEEE-754 d'un de ces double).
Pour démarrer l'apprentissage par algorithmes génétiques, exécutez le fichier demo-GA-animat.jar (double-cliquez dessus, ou bien faire java -jar demo-GA-animat.jar dans un "terminal").
|
Finite State Automata -- GA Ants
|
Ants is a program to explore genetic programming and learning. When Ants starts, you'll see a large green "food area" in the center of the screen. Across the top of the screen, will be some "ants" aimlessly milling about. In the title bar is the pro
|
|
|
Sample Genetic Algorithm Applet:
|
This applet is designed to be a tool by which interested people can learn some of the basics of genetic algorithms (GAs) while being able to experiment with a real GA. Users can select values for the GA's search parameters and can modify the paramete
|
|
|
Food, Bugs, Evolution
|
Among interactive artificial life simulations, Manna Mouse is uniquely simple: A creature's genome is only an encoding of its position on the screen. With your Mouse you paint Manna--the reward function. By visualizing the fitness landscape, and you
|
|
|
TSP interactive applet
|
This program utilises a genetic algorithm to find solutions for the Travelling Salesman Problem. Briefly, a random route is created, mutated offspring routes are produced, and the best of these (in terms of total length of route) is selected as the n
|
|
|
A GP Interactive Truck Applet
|
A GP Interactive Truck Applet
|
|
|
Evolving bugs in Delphi
|
The program simulates the history and life of a small population of small "bugs" that move according to a simple genetic code
|
|
|
Floys evolving by Genetic Algorithm
|
eFloys (evolving Floys), are social, territorial, evolving artificial life creatures, implemented in Java. They belong to the flocking Alife creatures variety, sharing with them the social tendency to stick together, and the lifelike emergent behavio
|
|
|
A Fast TSP Solver using GA
|
This JAVA applet is based on the algorithm proposed in `A Fast TSP Solution using Genetic Algorithm' (Information Processing Society of Japan 46th Nat'l Conv., 1993).
|
|
|
GA Tutorial
|
The following is an updated excerpt from my books Genetic Algorithms in C++ (M&T Books, 1995) and Active Visual J++ (Microsoft Press, 1997). Note: This page is long. You may want to print or download it for reading offline.
|
|
|
A Java TSP applet
|
TSPbyGA is a Java applet that lets you experiment with optimizing a Traveling Salesman (TSP problem using a genetic algorithm.
|
|
|
A configurable GA Java maze solver
|
Maze solver is a configurable genetic algorithm It does not find the optimal path,but usually finds a path to the target.
|
|
|
a general purpose package for Excel
|
Genetic Algorithm Software Products: GENERATOR a general purpose package for solving a variety of problems. GENERATOR-TFV a financial version of Generator. CHEMSOLVER a version of Generator for solving problems in chemistry. Downloadable Sample Probl
|
|
|
Catalog of GA software (various platforms)
|
Catalog of GA software (various platforms)
|
|
|
TSP Using Evolutionary Programming
|
This is an applet I decided to write after seeing how evolutionary programming could be used to solve hard problems. This applet works by taking the best city path and multiplying it by the population size. In the process the strings are mutated to
|
|
|
Gamelan GA Java Resources
|
Gamelan GA Java Resources
|
|
|
GA-oriented ecology system
|
GA-oriented ecology system
|
|
|
The travelling salesman problem
|
The travelling salesman problem
|
|
|
Interactive Biomorph Applet
|
Interactive Biomorph Applet
|
|
|
GA-oriented ecology system
|
Echo is a simulation tool developed to investigate mechanisms which regulate diversity and information-processing in systems comprised of many interacting adaptive agents, or complex adaptive systems (CAS). Echo agents interact via combat, mating and
|
|
|
Memetic Algorithms' Home Page
|
Memetic Algorithms is a population-based approach for heuristic search in optimization problems. They have shown that they are orders of magnitude faster than traditional Genetic Algorithms for some problem domains. Basically, they combine local sear
|