Kermit, manuel d'utilisation.

1. compilation

dsarchiver kermit.tar.gz par:
$ tar -zxf kermit.tar.gz
ou bien:
$ gunzip -c kermit.tar.gz | tar -xf -

aller dans le rpertoire Kermit nouvellement cr, ventuellement
diter les fichiers Makefile dans projet/ projet/ga/, projet/gen/ et
projet/kermit/(par dfaut prvus pour compiler avec g++/X11) et lancer
les compilations.
$ cd Kermit/
$ make

puis:
$ make install

dans le rpertoire se trouvent trois excutables:
- genkermit, le programme d'volution gntique
- kermit, le programme de visualisation en console
- xkermit, le programme de visualisation sous X.

il est aussi possible de compiler des programmes de test dans gen/ et
kermit/.

2. Utilisation

2.1 kermit

kermit ncessite deux fichiers : un fichier ressource pour
l'environnement qui doit s'appeler .kermitrc, et un fichier ressource
pour le rseau de neurnes, qui doit avoir imprativement 2 sorties.

si on donne deux noms de fichiers en argument  Kermit, le premier
sera pris comme fichier ressource pour l'environnement, et le second
pour le rseau. avec un seul fichier en argument, Kermit cherchera
poru l'environnement un fichier dans le rpertoire courant s'appelant
".kermit". et sans arguments, le fichier rseau par dfaut s'appelle
".reseaurc".

les structures de ces fichiers ressources sont trs simples et explicites.

en supposant qu'on utilise un fichier ressource pour l'environnement
appel "ressource.env" et pour le rseau "ressource.reseau", on
lancera donc:

$ kermit ressource.env ressource.reseau

ensuite appuyer sur entre pour passer  l'tape suivante, ou sur 'q'
(puis entre) pour quitter.

2.1.1 .kermitrc : exemple comment

# fichier ressource pour l'environnement
# les lignes commenant par un dise ne sont pas prises en compte

# graine pour le "hasard" (positionnement des prdateurs et de la
# nourriture  et de l'animat au dpart; dplacement des prdateurs)
kermit : graine = 467

# largeur du monde
monde : largeur = 125

# longueur du monde
monde : longueur = 200

# abscisse de la rive gauche
monde : rive gauche = 20

# abscisse de la rive droite
monde : rive droite = 180

# nombre de prdateurs
monde : nbr predateurs = 15

# abscisse de la nourriture
nourriture : abscisse = 190

# ordonne de la nourriture
nourriture : ordonnee = 50

# gradient  la source. il vaut mieux que la gradient en tout point du 
# monde soit positif;le gradient diminue comme la distance  la source 
# augmente.
nourriture : gradient max. = 700

# sensibilit  la proie par les prdateurs ; en d de ce rayon ils
# se dirigent directement dessus (sinon ils se dplavent au hasard)
predateurs : sensibilite = 5

# rayon des prdateurs
predateurs : taille = 3

# vitesse maximum des prdateurs
predateurs : vitesse max. = 0.75

# abscisse de dpart de l'animat
animat : abscisse = 15

# ordonne de dpart de l'animat
animat : ordonnee = 5

# vitesse maximum de l'animat
animat : vitesse max. = 1.5

# rayon de l'animat
animat : taille = 1

# sensibilit aux prdateurs de l'animat
animat : sensibilite = 9

# fin du fichier

2.1.2 .reseaurc : exemple comment

# fichier ressource pour le rseau
# les lignes commenant par un dise ne sont pas prises en compte
# nombre de couches du seau de neurones
Nombre de couches = 1

# nombre de neurones par couches ; la dernire DOIT avoir 2 neurones.
# par exemple pour 3 couches de 5, 4, puis 2 neurones : 
# Nombre de neurones = 5 4 2
Nombre de neurones = 2

# poids des connexions, par couche puis par neurone
Poids = -0.2002 0.2002 0.1 0.1 0.1 0.1 -0.1 -0.1 -0.1 -0.1 0.1 0.1 0.1
0.1 0.1 0 .1 0.1 0.1 0.1 0.1
# fin du fichier

2.2 xkermit

xkermit ncessite les mmes fichiers de configuration que Kermit, et
ncessite aussi un terminal X. la politique d'interprtation des noms
de fichiers pass en argument est la mme que pour Kermit

 la fin de l'animation, appuyer sur 'q', ou 'Esc' permet de sortir de
l'application, sinon une nouvelle simulation est lance en replaant
les prdateurs au hasard et l'animat et la nourriture  la mme
distance l'un de l'autre qu'au dbut, au hasard.

2.3 genkermit

genkermit ncessite un fichier .kermitrc et deux fichiers de ressource 
pour la librairie GALib (.agrc) et pour son utilisation (.genkermit).

une argument numrique entier permet de donner un graine au gnrateur 
de nombres "alatoires" de la librairie GALib, qui supplante celle
donne dans le fichier .genkermitrc.

entres : genKermit ncessite l'architecture du rseau voulu et des
coefficients pour les calculs de fitness. 
exemple de session de dmarrage (entre crochets ce qui est tap, il ne faut pas
mettre les crochets  l'utilisation...)

$ genkermit 2345
genKermit par Samuel Landau <samuel.landau@poleia.lip6.fr> (1999)
Graine pour l'AG: 2345
Nombre de couches: [1]
Nombre de neurones par couche: [2]
Lambda (coeff. pour le gradient maximum atteint): [10]
Mu (Rcompense au cas o la cible est atteinte): [100]
Nu (coeff. pour l'nergie restante): [0]
Ksi (coeff. pour le nombre d'tapes): [0]
Chargement de l'environnement depuis .kermitrc...
Distance de dpart  la destination : 188.437
Chargement des paramtres pour l'AG depuis .genkermitrc...
Lancement de l'AG...
[etc.]

il est aussi simple d'crire un fichier parametres:
$ cat > parametres
1
2
10
100
0
0
^D
$ cat parametres | genkermit
[etc.]

sorties : genkermit gnre  la demande:
1/ les statistiques toutes les n gnrations (dans un fichier  prciser)
2/ met le "meilleur" gnome dans meilleur.dat, visualisable avec
xkermit par:
$ xkermit meilleur.dat
(pourvu qu'il y ait le fichier .kermitrc dans le rpertoire courant)
3/ sauve TOUS les gnomes et leur note ( la demande...)
4/ sauve les meilleurs gnmes toutes les n gnrations (dans un
fichier de nom le numro de la gnration),  la demande aussi.


2.3.1 .agrc : exemple comment

# fichier ressource pour genkermit
# ce fichiers initialise les variables de la GALib
# leslignes commenant par dise ne sont pas prises en compte
# pour plus d'informations voir la documentation de la galib

# si on veut fixer le nombre de gnrations
number_of_generations   500

# pourcentage de convergence 
# (pour la terminaison par convergence)
convergence_percentage  0.99

# nombr ede gnrations sur lesquelles valuer la convergence
generations_to_converge 20

# probabilit de crossover
crossover_probability   0.9

# probabilit de mutation
mutation_probability    0.001

# taille de la population
population_size         30

# nombre de populations 
# (dans le cas de l'algo avec migrations)
number_of_populations   10

# pourcentage de remplacement
replacement_percentage  0.25

# nombre de remplacements
# replacement_number    5

# nombre de meilleurs  conserver 
# (toutes gnrations confondues)
number_of_best          1

# frquence de sauvegarde des scores 
score_frequency         1

# frquence d'criture des scores sur disque
flush_frequency         50

# nom du fichier o mettre les scores
score_filename          genkermit.gnuplot

# quels scores conserver ; faire 
# la somme comme pour les droits sous Unix
# 1 moyenne par gnration
# 2 meilleur par gnration
# 4 pire par gnration
# 8 ? diversit par gnration
# 16 sais plus
select_scores           7

# utiliser ou non l'litisme dans la roue de la fortune
elitism                 1

# nombre d'enfants (algo incrmental) 1 ou 2
number_of_offspring     2

# enregistrer la diversit (a ralentit beaucoup...)
record_diversity        0

# pourcentage de migration
migration_percentage    0.1

# nombre de migrants
# migration_number      5

# fin du fichier

2.3.2 .genkermitrc : exemple comment

# fichier ressource pour genkermit
# les lignes commenant par un dise sont des commentaires

# graine pour le gnrateur de nombre "alatoires"
# la graine passe en argument prime
# [par dfaut 1]
graine = 1

# nombre d'essais par valuation [4 par dfaut] 
essais = 4

# nombre d'tapes maximum par essai, -1 signifiant pas de limite
# (ou plutt jusqu' la mort ou la russite) [-1 par dfaut] 
etapes = -1

# fichier o logger tous les gnmes et leur valuation
# [par dfaut ne pas le faire]
# log = genkermit.log

# fichier o charger un gnme de base [par dfaut ne pas le faire]
# base = meilleur.dat

# taux de mutation sur  la cration de la premire gnration,
# lorsque l'on dmarre avec un gnme de base [par dfaut 0.5]
bmut = 0.5

# sauver le meilleur gnme toutes les "cycle" gnrations, un nombre
# ngatif ou nul signifiant de ne pas le faire. le gnme sera sauv sous
# sa reprsentation en rseau de neurne, dans un fichier s'appelant
# "n de gnration".dat [par dfaut ne pas le faire
cycle = -1

# type d'algo gntique: 
# 0 algo simple (sans recouvrement)
# => elitisme ou non
# 1 algo avec recouvrements des gnrations
# => nombre ou pourcentage d'individus  remplacer
# 2 algo incrmental (recouvrement et 1 ou 2 enfants par gnration)
# => un ou deux enfants, qui remplacer
# 3 algo "deme"  (populations en parallle avec migrations)
# => nombre ou pourcentage d'individus  remplacer, nombre de migrants, nombre
# de populations
# [algo par dfaut : 0]
agtype = 0

# type de slection
# 0 roue de la fortune
# 1 tournoi
# 2 chantilon dterministe
# 4 chantillon avec reste stochastique
# [par dfaut roue de la fortune]
seltype = 0

# type de terminaison
# 0 nombre de gnrations
# => nombre de gnrations
# 1 convergence (des meilleurs)
# => sur quel nombre de gnration et quel pourcentage
# 2 convergence (de la population)
# => pourcentage de convergence envers le plsu adapt
# [par dfaut 0]
termtype = 0

# fin du fichier

3 Explication diverses sur le fonctionnement des simulations

pour les valutations de gnomes comme pour l'utilisation, au dpart,
l'animat est tourn  90 par rapport  la direction de la nourriture
pour qu'il fasse au moins l'effort de tourner. s'il recule par rapport
 sa position initiale (en abscisse), la simulation  est termine,
ainsi que s'il s'approche trop prs des parois droite, suprieure et
infrieure du monde. tout a pour abrger les simulations o l'animat
restait immobile, ou alors o il courait le long des parois.

au dpart d'une simulation, un distance est gnre au hasard, entre
la nourriture et l'animat. par la suite, lorsqu'il les replacera au
hasard, il ne placera au hasard que la nourriture, la position de
l'animat tant alors pratiquement dtermine (intersecetion de son
abscisse de dpart et du cercle de rayon la distance en question, et
de centre la nourriture).

les prdateurs bougent "au hasard" sauf quand la proie est dans leur
champ de perception, auquel cas il vont droit sur elle. "au hasard"
signifie qu'un premier nombre est dtermin au hasard, qui compte le
nombre d'tapes pendant lesquelles le prdateur ira dans la mme
direction. puis pour chacune de ces tapes, la norme du vecteur
vitesse est gnre au hasard, entre 0 et la vitesse maximum autorise 
pour les prdateurs.

le gradient varie de faon linaire, il dcroit comme la distance.

les fichiers de statistiques peuvent tre visualise avec gnuplot
failment,  l'aide d'une macro shell ;  supposer que l'on veuille
voir la troisime colonne, et que le fichier s'appelle genkermit.gnuplot:

$ cat > myplot
#!/bin/sh
echo "plot '$1' using 1:$2 smooth unique ; pause 60" | gnuplot &
exit 0
^D
$ chmod 755 myplot
$ myplot genkermit.gnuplot 3 


4 exemples de rsultats

le rpertoire resultats/ contient des archives .tar.bz2 de rsulats glans
lors d'expriences. le sous-rpertoire seul/ quand l'aniamt est seul,
et normal/ quand il y a des prdateurs. les noms sont explicites tant
que possibles.
on peu dsarchiver un exemple et lancer xkermit avec pour rseau l'un
des rseaux sauvs, par exemple avec le meilleur que j'ai obtenu en simple couche:

$ cd projet/resultats/normal
$ tar -Ixf bon.tar.bz2
$ ../../xkermit 000095.dat
[etc.]
