ALGORITHMES GÉNÉTIQUES

Voir:
cours sur l´evolutionnisme
genetic

PRINCIPE
LES GÉNÉTIQUES
GÉNÉRATION

















































PRINCIPE

         Les objets de type génétique d´anyflo permettent de définir des populations gérées par les algorithmes génétiques.
         Chaque génétique est composée d´individus, appelés particles, construits a partir d´un certain alphabet.
         Chaque génétique peut recevoir une fonction d´évaluation.
         Une nouvelle population peut être générée par sélection, croisement et mutation (en privilégiant les individus d´évaluation maximum).

LES GÉNÉTIQUES

Objet de type génétique
Alphabet
Les individus
fonction d´évaluation
Édition
Suppression

Objet de type génétique

genetic(id);
         Définit la génétique id.
Exemples:
genetic(1);
         Définit la génétique numéro 1
genetic "G");
         Définit la génétique de nom G

Alphabet

         Les individus d´une population sont construits à partir d´un alphabet, qui est par défaut réduit aux deux caractères 0 et 1.
alphabet genetic(id)="ABC"
         Définit l´alphabet "ABC" sur la génétique id.

Les individus

Une population initiale peut se definir aléatoirement:
Exemple:
generate alea particle(100,12)genetic(1);
         Génère aléatoirement 100 individus de taille 12 à partir de l´alphabet de la génétique 1.
ou individuellement:
particle(0) genetic(1)="00011";
         Définit un nouvel individu.
particle(p) genetic(id)="10110";
         Redéfinit l´individu p de la génétique id.
Tous les individus d´une même génétique doivent être des chaines de caracteres de la même dimension.

Fonction d´évaluation

Une population évolue par:
         1) Sélection d´individus destinés à se reproduire. Ils sont choisis optimaux en ce sens qu´ils maximalisent une certaine fonction d´évaluation
         2) Croisement de deux tels individus en les coupant aléatoirement et en construisant un nouvel individu en prenant la 1ère partie du 1er et la 2ème partie du 2ème.
         3) Mutation (de faible probabilité) modifiant arbitrairement un ou plusieurs éléments.

L´évaluation peut se faire de différentes façons:
         1) Par une fonction f() écrite en langage anyflo:
func genetic(id)="f";
Cette fonction doit être de la forme:
f(id,num,p)
         {
         x=evaluation normee de la particule p (entre 0.0 et 1.0)
         return(x);
         }

g = numéro de la génétique evaluée.
num = numéro de l´individu evalué.
p = valeur de cet individu.

         2) Par une fonction écrite en langage C:
func genetic(id)=num;
num est le numéro passe a la fonction func_genetic_utilisateur (du fichier utilb.c dans le directory de l´environnement), qu´il faudra modifier, puis il faudra relinker anyflo.

validate genetic(id);
         Évalue la génétique id, c´est à dire calcule les retours de la fonction d´évaluation ´func genetic(g)´ pour chaque individu de la population id.
scale particle genetic(id);
         Retourne ces valeurs

Les croisements sont mémorisés dans cut genetic sous la forme:
ind,p1,p2 avec ind=indice de cut, p1 et p2 = numéros des particules croisées.
cut(n) genetic(id)
Retourne ind,p1,p2 pour l´individu n. (Cette commande est a but purement didactique).
c=cut(1)genetic(1);
Retourne le 1er élément de la cut.

Édition

edit genetic(id);
         Édite la génétique id.
edit particle genetic(id);
         Édite les individus de la génétique id.

Suppression

rem genetic num;
         Supprime la génétique num
ini genetic;
         Supprime toutes les génétiques

GÉNÉRATION

Regénération d´une population
Validation

Regénération d´une population

generate genetic(id);
         Regénère la génétique id par sélection, croisement et mutation de ses individus, en privilégiant les individus d´évaluation maximum
generate(n) genetic(id);
         Regénère n fois la génétique id.
         La population s´améliore à mesure qu´on la regénère
         Les valeurs d´évaluation des individus sont stockées dans:
         scale particle genetic;
Exemples:
edit scale particle genetic(1);
         Édite les évaluations
$scale particle(1) genetic(1);
         Imprime l´évaluation de l´individu 1
scale particle(1) genetic(1)=0.1;
         Modifie l´évaluation de l´individu 1

Validation

validate genetic(1);
         Recalcule les évaluations des individus de la génétique 1
validate genetic;
         Recalcule les évaluations des individus de toutes les génétiques
validate particle(2) genetic(1);
         Recalcule l´évaluation de l´individu 2 de la génétique 1
Pour un exemple simple montrant la resolution d´un probleme par un algorithme genetic voir demo1_genetic.func: