Programmation d’expressions génétiques

Programmation d’expressions génétiques

La programmation d’expressions génétiques s’inspire de la réplication et de l’expression de la molécule d’ADN, en particulier au niveau du gène. L’expression d’un gène implique la transcription de son ADN en ARN qui à son tour forme des acides aminés qui constituent des protéines dans le phénotype d’un organisme. Les éléments constitutifs de l’ADN sont soumis à des mécanismes de variation (mutations telles que des erreurs d’adaptation) ainsi qu’à une recombinaison lors de la reproduction sexuelle.

La programmation d’expressions génétiques utilise un génome linéaire comme base pour les opérateurs génétiques tels que la mutation, la recombinaison, l’inversion et la transposition. Le génome est composé de chromosomes et chaque chromosome est composé de gènes qui sont traduits dans un arbre d’expression pour résoudre un problème donné. La définition génique robuste signifie que les opérateurs génétiques peuvent être appliqués à la représentation sous-symbolique sans se soucier de la structure de l’expression génique résultante, assurant la séparation du génotype et du phénotype.

L’objectif de l’algorithme de programmation d’expressions génétiques est d’améliorer l’ajustement adaptatif d’un programme exprimé dans le contexte d’une fonction de coût spécifique au problème. Ceci est réalisé grâce à l’utilisation d’un processus évolutif qui fonctionne sur une représentation sous-symbolique des solutions candidates en utilisant des substituts pour les processus (descente avec modification) et les mécanismes (recombinaison génétique, mutation, inversion, transposition et expression des gènes) de l’évolution .

Une solution candidate est représentée par une chaîne linéaire de symboles appelée notation Karva ou expression K, où chaque symbole correspond à une fonction ou à un nœud terminal. La représentation linéaire est mappée à un arbre d’expression d’une manière étendue. Une expression K a une longueur fixe et comprend une ou plusieurs sous-expressions (gènes), qui sont également définies avec une longueur fixe. 

Un gène est composé de deux sections, une tête qui peut contenir n’importe quelle fonction ou symboles terminaux, et une section de queue qui ne peut contenir que des symboles terminaux. Chaque gène se traduira toujours par un arbre d’expression syntaxiquement correct, où la partie queue du gène fournit un tampon génétique qui assure la fermeture de l’expression.

La longueur d’un chromosome de la programmation d’expressions génétiques est définie par le nombre de gènes, où une longueur de gène est définie par h + t. Le h est un paramètre défini par l’utilisateur (tel que 10), et t est défini comme t = h (n-1) +1, où le n représente l’arité maximale des nœuds fonctionnels dans l’expression (comme 2 si le des fonctions arithmétiques *; /; -; + sont utilisées).

L’opérateur de mutation de la programmation d’expressions génétiques substitue des expressions le long du génome, bien qu’il doive respecter les règles génétiques telles que la fonction et les nœuds terminaux sont mutés dans la tête des gènes, alors que seuls les nœuds terminaux sont substitués dans la queue des gènes.

Le croisement se produit entre deux parents sélectionnés de la population et peut se produire sur la base d’un croisement à un point, d’un croisement à deux points ou d’une approche basée sur les gènes où les gènes sont sélectionnés parmi les parents avec une probabilité uniforme.

Un opérateur d’inversion peut être utilisé avec une faible probabilité qui inverse une petite séquence de symboles (1-3) dans une section d’un gène (queue ou tête). Un opérateur de transposition peut être utilisé avec un certain nombre de modes différents, y compris: dupliquer une petite séquence (1-3) de quelque part sur un gène à la tête, de petites séquences sur un gène à la racine du gène, et se déplacer un gène dans le chromosome. Dans le cas de transpositions intragéniques, la séquence dans la tête du gène est déplacée vers le bas pour accueillir la séquence copiée et la longueur de la tête est tronquée pour maintenir des tailles de gène cohérentes.

Lors de  la programmation d’expressions génétiques, un ? peut être inclus dans l’ensemble terminal et il représente une constante numérique à partir d’un vecteur qui a évolué à la fin du génome. Les constantes sont lues à partir de la fin du génome et remplacent les ? lorsque l’arbre d’expression est créé (dans le premier ordre de largeur).

On peut utiliser plusieurs sous-expressions liées entre elles sur des problèmes difficiles lorsqu’un seul gène n’est pas suffisant pour résoudre le problème. Les sous-expressions sont liées à l’aide d’expressions de liens qui sont des nœuds de fonction qui sont soit définis statiquement (comme une conjonction), soit évolués sur le génome avec les gènes.

Voici l’algorithme de programmation d’expressions génétiques :

programmation d'expressions génétiques