Quels sont exactement les algorithmes génétiques et à quels types de problèmes sont-ils bons?

16

J'ai remarqué que quelques questions sur ce site mentionnent des algorithmes génétiques et cela m'a fait réaliser que je n'en sais pas grand-chose.

J'ai déjà entendu le terme, mais ce n'est pas quelque chose que j'ai jamais utilisé, donc je n'ai pas beaucoup d'idée sur leur fonctionnement et leur utilité. Tout ce que je sais, c'est qu'ils impliquent une sorte d'évolution et des valeurs changeantes au hasard.

Pouvez-vous me donner une brève explication, y compris de préférence une sorte d'exemple pratique qui illustre les principes de base?

Rôdeur désenchanté
la source

Réponses:

11

Les algorithmes évolutionnaires sont une famille d'algorithmes d'optimisation basés sur le principe de la sélection naturelle darwinienne . Dans le cadre de la sélection naturelle, un environnement donné a une population d'individus qui se disputent la survie et la reproduction. La capacité de chaque individu à atteindre ces objectifs détermine sa chance d'avoir des enfants, c'est-à-dire de transmettre ses gènes à la prochaine génération d'individus qui, pour des raisons génétiques, auront plus de chances de bien, voire mieux, de réaliser ces objectifs. deux objectifs.

Ce principe d'amélioration continue au fil des générations est repris par des algorithmes évolutifs pour optimiser les solutions à un problème. Dans la génération initiale , une population composée de différents individus est générée aléatoirement ou par d'autres méthodes. Un individu est une solution au problème, plus ou moins bonne: la qualité de l'individu par rapport au problème est appelée fitness , ce qui reflète l'adéquation de la solution au problème à résoudre. Plus la condition physique d'un individu est élevée, plus il est probable qu'il transmettra tout ou partie de son génotype aux individus de la génération suivante.

Un individu est codé comme un génotype , qui peut avoir n'importe quelle forme, comme un vecteur ** bit ( algorithmes génétiques ) ou un vecteur de réel (stratégies d'évolution). Chaque génotype est transformé en phénotype lors de l'évaluation de l'individu, c'est-à-dire lorsque son aptitude est calculée. Dans certains cas, le phénotype est identique au génotype: il est appelé codage direct . Sinon, le codage est appelé indirect. Par exemple, supposons que vous souhaitiez optimiser la taille d'un parallélépipède rectangulaire défini par sa longueur, sa hauteur et sa largeur. Pour simplifier l'exemple, supposons que ces trois quantités sont des entiers compris entre 0 et 15. Nous pouvons ensuite décrire chacune d'elles à l'aide d'un nombre binaire de 4 bits. Un exemple de solution potentielle peut être le génotype 0001 0111 01010. Le phénotype correspondant est un parallélépipède de longueur 1, hauteur 7 et largeur 10.

Lors de la transition de l'ancienne à la nouvelle génération, on appelle les opérateurs de variation , dont le but est de manipuler les individus. Il existe deux types distincts d'opérateurs de variation:

  • les opérateurs de mutation , qui sont utilisés pour introduire des variations au sein d'un même individu, comme les mutations génétiques;
  • les opérateurs de croisement , qui sont utilisés pour croiser au moins deux génotypes différents, comme croisements génétiques issus de la sélection.

Les algorithmes évolutifs ont fait leurs preuves dans divers domaines tels que la recherche opérationnelle, la robotique, la biologie, les nuances ou la cryptographie. De plus, ils peuvent optimiser plusieurs objectifs simultanément et peuvent être utilisés comme des boîtes noires car ils n'assument aucune propriété du modèle mathématique à optimiser. Leur seule véritable limitation est la complexité de calcul.

entrez la description de l'image ici

Franck Dernoncourt
la source
Merci d'avoir répondu à cette question ici! Bien que je pense personnellement que c'est une question idéale pour AI SE, car elle est basique et "de haut niveau", n'hésitez pas à diriger l'OP et les lecteurs vers Cross Validated pour des questions plus avancées sur le sujet, adaptées à cette pile .
DukeZhou
8

Un algorithme génétique est un algorithme qui génère de manière aléatoire un certain nombre de solutions tentées pour un problème. Cet ensemble de solutions tentées est appelé la "population".

Il essaie ensuite de voir dans quelle mesure ces solutions résolvent le problème, en utilisant une fonction de fitness donnée . Les solutions tentées avec la meilleure valeur de fitness sont utilisées pour générer une nouvelle population. Cela peut être fait en apportant de petites modifications aux solutions tentées (mutation) ou en combinant les solutions existantes tentées (crossover).

L'idée est qu'au fil du temps, une tentative de solution émerge qui a une valeur de fitness suffisamment élevée pour résoudre le problème.

L'inspiration pour cela est venue de la théorie de l'évolution; les solutions les plus adaptées survivent et procréent.

Exemple 1

Supposons que vous cherchiez le moyen le plus efficace de découper un certain nombre de formes dans un morceau de bois. Vous voulez gaspiller le moins de bois possible.

Vos solutions tentées seraient des dispositions aléatoires de ces formes sur votre morceau de bois. La forme physique serait déterminée par le peu de bois qui resterait après la coupe des formes suivant cet arrangement.
Moins il reste de bois, meilleure est la solution tentée.

Exemple 2

Supposons que vous essayiez de trouver un polynôme qui passe par un certain nombre de points. Vos solutions tentées seraient des polynômes aléatoires.
Pour déterminer l' adéquation de ces polynômes, vous déterminez dans quelle mesure ils correspondent aux points donnés. (Dans ce cas particulier, vous utiliseriez probablement la méthode des moindres carrés pour déterminer dans quelle mesure le polynôme correspond aux points). Au cours d'un certain nombre d'essais, vous obtiendrez des polynômes qui correspondent mieux aux points, jusqu'à ce que vous ayez un polynôme qui correspond suffisamment aux points.

SL Barth - Réintégrer Monica
la source
Mais qu'entend-on par solution ? Pouvez-vous me donner un exemple pratique avec un problème spécifique, afin que je puisse mieux imaginer à quoi il pourrait ressembler?
Désenchanté Lurker
@InquisitiveLurker J'ai ajouté des exemples. Faites-moi savoir s'ils ne sont pas assez clairs; Je serai heureux de mettre à jour ma réponse.
SL Barth - Rétablir Monica
6

Cette réponse demande un exemple pratique de la façon dont l'une pourrait être utilisée, que j'essaierai de fournir en plus des autres réponses. Ils semblent devoir expliquer très bien ce qu'est un algorithme génétique. Donc, cela donnera un exemple.

Disons que vous avez un réseau de neurones (bien qu'ils ne soient pas la seule application de celui-ci), qui, à partir de certaines entrées données, produira des sorties. Un algorithme génétique peut créer une population de ceux-ci, et en voyant quelle sortie est la meilleure, reproduire et tuer des membres de la population. À terme, cela devrait optimiser le réseau neuronal s'il est suffisamment compliqué.

Voici une démonstration que j'ai faite, qui malgré son mauvais codage, pourrait vous aider à comprendre. http://khrabanas.github.io/projects/evo/evo.html Appuyez sur le bouton évoluer et dérangez-vous avec les objectifs.

Il utilise un algorithme génétique simple pour se reproduire, muter et décider entre les populations qui survivent. Selon la façon dont les variables d'entrée sont définies, le réseau pourra atteindre un certain niveau de proximité avec elles, de cette manière, la population deviendra probablement à terme un groupe homogène, dont les résultats ressemblent aux objectifs.

L'algorithme génétique essaie de créer un "réseau de neurones" qui, en absorbant le RVB, produira une couleur de sortie. Tout d'abord, il génère une population aléatoire. Il a ensuite en prenant 3 membres aléatoires de la population, en sélectionnant celui avec la forme physique la plus faible et en le retirant de la population. La forme physique est égale à la différence du but supérieur au carré + la différence du but inférieur au carré. Il élève ensuite les deux autres ensemble et ajoute l'enfant au même endroit dans la population que le membre décédé. Lors de l'accouplement, il y a une chance qu'une mutation se produise. Cette mutation modifiera l'une des valeurs de manière aléatoire.

En remarque, en raison de la façon dont il est configuré, il est impossible qu'il soit totalement correct dans de nombreux cas, même s'il atteindra une relative proximité.

Corbeau
la source
6

Il existe un certain nombre de bonnes réponses ici expliquant ce que sont les algorithmes génétiques et donnant des exemples d'applications. J'ajoute quelques conseils généraux sur ce à quoi ils sont bons, mais aussi les cas où vous ne devriez PAS les utiliser. Si mon ton semble dur, c'est parce que l'utilisation des AG dans l'un des cas de la section Non approprié entraînera le rejet instantané de votre article de toute revue de premier plan.

Tout d'abord, votre problème DOIT être un problème d'optimisation. Vous devez définir une "fonction fitness" que vous essayez d'optimiser et vous devez avoir un moyen de la mesurer.

Bien:

  • Les fonctions de croisement sont faciles à définir et naturelles : lorsqu'il s'agit de certains types de données, les fonctions de croisement / mutation peuvent être faciles à définir. Par exemple, des chaînes (par exemple, des séquences d'ADN ou de gènes) peuvent être mutées facilement en épissant deux chaînes candidates pour en obtenir une nouvelle (c'est pourquoi la nature utilise des algorithmes génétiques!). Les arbres (comme les arbres phylogénétiques ou les arbres d'analyse) peuvent également être épissés, en remplaçant une branche d'un arbre par une branche d'un autre. Les formes (comme les ailes d'avion ou les formes de bateaux) peuvent être mutées facilement en dessinant une grille sur la forme et en combinant différentes sections de grille des parents pour obtenir un enfant. Habituellement, cela signifie que votre problème est composé de différentes parties et assembler des parties de solutions distinctes est une solution candidate valide.
    • Cela signifie que si votre problème est défini dans un espace vectoriel où les coordonnées n'ont pas de signification particulière, les AG ne sont pas un bon choix. S'il est difficile de formuler votre problème en tant qu'AG, cela n'en vaut pas la peine.
  • Évaluation de la boîte noire : si pour un candidat, votre fonction de fitness est évaluée en dehors de l'ordinateur, les AG sont une bonne idée. Par exemple, si vous testez une forme d'aile dans un tunnel aérien, des algorithmes génétiques vous aideront à générer de bonnes formes candidates à essayer.
    • Exception: simulations . Si votre fonction de fitness mesure la performance d'une conception de buse et nécessite de simuler la dynamique des fluides pour chaque forme de buse, les GA peuvent bien fonctionner pour vous. Ils peuvent également fonctionner si vous simulez un système physique au fil du temps et que vous êtes intéressé par la performance de votre conception au cours de l'opération, par exemple. modélisation des modèles de locomotion . Cependant, des méthodes qui utilisent des équations différentielles partielles comme contraintes sont développées dans la littérature, par exemple. Optimisation contrainte PDE , donc cela peut changer à l'avenir.

Non approprié:

  • Vous pouvez calculer un gradient pour votre fonction: si vous avez accès au gradient de votre fonction, vous pouvez faire une descente de gradient, qui est en général beaucoup plus efficace que les GA. La descente en pente peut avoir des problèmes avec les minima locaux (comme le seront les AG), mais de nombreuses méthodes ont été étudiées pour atténuer cela.
  • Vous connaissez la fonction fitness sous forme fermée : Ensuite, vous pouvez probablement calculer le gradient. De nombreuses langues ont des bibliothèques prenant en charge la différenciation automatique , vous n'avez donc même pas besoin de le faire manuellement. Si votre fonction n'est pas différenciable, vous pouvez utiliser une descente de niveau inférieur .
  • Votre problème d'optimisation est d'une forme connue, comme un programme linéaire ou un programme quadratique : les AG (et les méthodes d'optimisation de la boîte noire en général) sont très inefficaces en termes de nombre de candidats qu'ils doivent évaluer, et il vaut mieux les éviter si possible.
  • Votre espace de solution est petit : si vous pouvez mailler efficacement votre espace de recherche, vous pouvez garantir que vous avez trouvé la meilleure solution et créer des courbes de contour de l'espace de solution pour voir s'il y a une région que vous devez explorer davantage.

Enfin, si vous envisagez une AG, envisagez des travaux plus récents sur les stratégies évolutives. Je suis partisan de CMA-ES , qui, à mon avis, est un bon algorithme simple qui capture la notion de gradient dans le paysage de la forme physique d'une manière que les GA traditionnels ne font pas.

Dur
la source
CMA-ES est bon pour les problèmes dans lesquels les solutions peuvent être représentées comme des vecteurs à valeur réelle.
NietzscheanAI
5

Comme observé dans une autre réponse, tout ce dont vous avez besoin pour appliquer des algorithmes génétiques (AG) est de représenter une solution potentielle à votre problème sous une forme qui est sujette au croisement et à la mutation. Idéalement, la fonction de remise en forme fournira une sorte de rétroaction fluide sur la qualité d'une solution, plutôt que d'être simplement une «aiguille dans une botte de foin».

Voici quelques caractéristiques des problèmes pour lesquels les algorithmes génétiques (et en fait la métaheuristique en général) sont bons pour:

  • NP-complete - Le nombre de solutions possibles au problème est exponentiel, mais vérifier l'adéquation d'une solution est relativement bon marché (techniquement, avec un polynôme temporel dans la taille d'entrée).
  • Boîte noire - Les AG fonctionnent assez bien même si vous ne disposez pas d'un modèle particulièrement informé du problème à résoudre. Cela signifie que ces approches sont également utiles comme approche de «prototypage rapide» pour résoudre des problèmes.

Cependant, malgré leur utilisation répandue à cet effet, notez que les GA ne sont en fait pas des optimiseurs de fonction - les mécanismes des GA ont tendance à ne pas explorer les régions «périphériques» de l'espace de recherche dans l'espoir de trouver une solution distante de haute qualité, mais plutôt à se regrouper autour de plus pics facilement atteignables dans le «paysage du fitness».

Plus de détails sur l'applicabilité des AG sont donnés dans un célèbre premier article "Qu'est-ce qui rend un problème difficile pour un algorithme génétique?"

NietzscheanAI
la source