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
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
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: