Algorithme évolutionniste
1300443
28912810
2008-04-23T10:46:11Z
Gresil
383046
orthographe
Les '''algorithmes évolutionnistes''' ou '''algorithmes évolutionnaires''' (''evolutionary computation'' en anglais), sont une famille d'algorithmes s'inspirant de la [[théorie de l'évolution]] pour résoudre des problèmes divers. Ils font ainsi évoluer un ensemble de solutions à un problème donné, dans l'optique de trouver les meilleurs résultats. Ce sont des algorithmes stochastiques, car ils utilisent itérativement des processus aléatoires.
La grande majorité de ces méthodes sont utilisées pour résoudre des problèmes d'[[optimisation]], elles sont en cela des [[métaheuristique]]s, bien que le cadre général ne soit pas nécessairement dédié aux algorithmes d'optimisation au sens strict<ref>K. A. DeJong, ''Are genetic algorithms function optimizers?'', Actes de PPSN 2, R. Manner, B. Manderick (éditeurs), pages 3 à 13, 1992.</ref>. On les classe également parmi les méthodes d'[[intelligence calculatoire]] (''Computational intelligence'' en anglais).
[[Image:Evolutionary algorithm.svg|thumb|300px|Un algorithme évolutionnaire utilise itérativement des opérateurs de sélections (en bleu) et de variation (en jaune). i : initialisation, f(X) : évaluation, ? : critère d'arrêt, Se : sélection, Cr : croisement, Mu : mutation, Re : remplacement, X* : optimum.]]
==Paradigme==
Ces algorithmes manipulent des populations de solutions.
[[Image:Darwin's tree of life.jpg|thumb|L'« arbre de la vie », tel que le représente [[Charles Darwin]] dans son ouvrage ''[[L'Origine des espèces]]'', où il présente ses théories sur l'évolution des êtres vivants.]]
Les algorithmes évolutionnaires s'inspirent de l'[[Évolution (biologie)|évolution]] des êtres vivants, en considérant que celle-ci tend à produire des organismes plus ''[[adaptation|adaptés]]'' à leur [[environnement]].
Selon la [[théorie de l'évolution]], plusieurs mécanismes sont à l'œuvre pour ce faire. Schématiquement :
* Les caractéristiques d'un organisme sont en grande partie codées dans ses [[gène]]s,
* chaque [[population]] d'organismes est composée d'individus tous différents,
* les différences entre individus leur confèrent une adaptation plus ou moins grande à leur environnement,
* les organismes transmettent une partie de leurs caractéristiques à leurs descendants,
* les individus les plus adaptés se reproduisent plus « efficacement », leurs caractéristiques ont donc tendance à davantage se répandre dans la population.
==Principes de bases==
===Terminologie===
Tous les algorithmes évolutionnaires font évoluer un ensemble (une « population ») de solutions (les « individus »). Les individus sont représentés par leur génotype, qui s'exprime sous la forme d'un phénotype, auxquels on associe une qualité (la « fitness »). Les algorithmes sont conçus de façon à ce que plus la fitness d'un individu est elevée, plus il doit avoir de chances de transmettre son génotype au sein de la population.
À chaque étape de l'algorithme est associé un « opérateur », qui décrit la façon de manipuler les individus.
On regroupe parfois les différents opérateurs sous des termes génériques :
* ''opérateurs de sélection'' pour la sélection et le remplacement,
* ''opérateurs de variation'' pour la mutation et le croisement.
===Algorithme===
Pour ce faire, on utilise l'algorithme général suivant :
construction et évaluation d'une '''population initiale''' ;
Jusqu'à atteindre un '''critère d'arrêt''' :
'''sélection''' d'une partie de la population,
'''reproduction''' des individus sélectionnés,
'''mutation''' de la descendance,
'''évaluation''' du degrés d'adaptation de chaque individu,
'''remplacement''' de la population initiale par une nouvelle population.
Après avoir initialisé une première population d'individus, on itère un nombre fini de fois, jusqu'à atteindre un critère d'arrêt (par exemple un nombre maximum de générations). La première étape de sélection permet de séparer les individus qui participeront à la reproduction de ce qui n'y participeront pas. Les individus sélectionnés (les « parents ») se reproduisent (on dit aussi que l'on effectue des ''croisements''), donnant un ensemble d'« enfants » partageant une partie des caractéristiques de leurs ascendants. Ces enfants subissent alors une étape de mutation, qui modifie aléatoirement leurs génotype. Les nouveaux individus sont alors évalués (on met à jour leur valeur en faisant appel à la fonction objectif). Enfin, on choisit un nombre d'individus déterminé parmi l'ensemble parents + enfants, pour former la génération suivante.
===Généralités===
[[Image:I&D frame FR.svg|thumb|230px|Les notions d'intensification (ou ''exploitation''), de diversification (ou ''exploration'') et de processus aléatoires sont au cœur du comportement des opérateurs utilisés par les algorithmes évolutionnaires.]]
Il existe toujours au moins un opérateur utilisant un processus aléatoire, au minimum pour la construction de la population initiale et pour la mutation, mais souvent pour la sélection et la reproduction également. Selon les méthodes, on met l'accent sur l'un ou l'autre des opérateurs.
Une pratique courante reste de maintenir suffisamment longtemps la « diversité génétique » de la population, afin d'éviter une convergence prématurée. Quand un algorithme évolutionnaire utilise une procédure de recherche locale à chaque individu, il est appelé « [[algorithme mémétique]] ».
Dans la terminologie historique, on cherche à ''maximiser'' la valeur de la fonction objectif, à l'aide d'opérateurs montrant des comportements d’''exploitations'' ou d’''exploration''. Ces termes correspondent aux notions d'intensification et à la diversification, plutôt utilisés dans le domaine des [[métaheuristique]]s, où l'on cherche par ailleurs à ''minimiser'' la valeur de la fonction objectif. Néanmoins, ces deux domaines sont tout à fait similaires, les algorithmes évolutionnaires ayant tendance à être classés parmi les métaheuristiques.
==Principales familles==
Historiquement, trois grandes familles d'algorithmes ont été développées indépendamment, entre la moitié des années 1960 et 70. Les premières méthodes furent les [[stratégies d'évolution]]<ref>Rechenberg, I., ''Cybernetic Solution Path of an Experimental Problem'', Royal Aircraft Establishment Library Translation, 1965</ref>., proposées par I. Rechenberg en 1965, pour résoudre des problèmes d'optimisations continus. L'année suivante, Fogel, Owens et Walsh concoivent la [[programmation évolutionnaire]]<ref>Fogel, L., Owens, A.J., Walsh, M.J., ''Artificial Intelligence through Simulated Evolution'', Wiley, 1966</ref> comme une méthode d'[[intelligence artificielle]] pour la conception d'[[Automate fini|automates à états finis]]. Enfin, en 1975, J. H. Holland propose les premiers [[algorithme génétique|algorithmes génétiques]]<ref>Holland, John H., ''Adaptation in Natural and Artificial Systems'', University of Michigan Press, Ann Arbor, 1975</ref>, pour l'optimisation combinatoire. La parution en 1989 du livre de D. E. Goldberg sur les algorithmes génétiques<ref>Goldberg, David E., ''Genetic Algorithms in Search, Optimization and Machine Learning'', Kluwer Academic Publishers, Boston, MA., 1989</ref> rendra ceux-ci particulièrements populaires.
Par la suite, ces différentes approches ont beaucoup évoluées et se sont rapprochées, pour finir par êtres regroupées sous le terme générique d'algorithmes évolutionnaires. Aujourd'hui, la littérature sur le sujet est extrêmement abondante, et ces algorithmes sont considérés comme un domaine de recherche très prolifique.
===Stratégies d'évolution===
Dans sa version de base, l'algorithme manipule itérativement un ensemble de vecteurs de variables réelles, à l'aide d'opérateurs de mutation et de sélection. La sélection s'effectue par un choix déterministe des meilleurs individus, selon l'échelle de valeur de la fonction objectif. L'étape de mutation est classiquement effectuée par l'ajout d'une valeur [[aléatoire]], tirée au sein d'une [[distribution normale]]. Une particularité caractéristique de ces algorithmes est l'auto-adaptation de la [[matrice de variance-covariance]] de la distribution normale.
{{Article détaillé|Stratégies d'évolution}}
Un algorithme représentatif des stratégies d'évolution est l'[[Algorithme à évolution différentielle|évolution différentielle]]. Dans cette classe de méthode, on utilise la différence pondérée entre sous-populations pour biaiser un opérateur de mutation ''différentiel''.
{{Article détaillé|Algorithme à évolution différentielle}}
===Programmation évolutionnaire===
Historiquement, ces algorithmes étaient conçus pour des problèmes d'[[apprentissage]] à partir d'automates à états finis et n'utilisaient que des opérateurs de mutation et de remplacement. Cependant, aujourd'hui ils ne se limitent plus à une représentation, mais n'utilisent toujours pas d'opérateur de croisement. Ils diffèrent des stratégies d'évolution en ce qu'ils privilégient des opérateurs de remplacement stochastiques.
{{Article détaillé|Programmation évolutionnaire}}
===Algorithmes génétiques===
Les algorithmes génétiques sont les plus populaires des algorithmes évolutionnaires. Ils différencient explicitement le génotype du phénotype, le génotype étant généralement codé de façon [[binaire]]. Le choix du codage du génotype (la façon dont il est relié au phénotype) est crucial pour un algorithme génétique. Classiquement, ils utilisent un opérateur de sélection proportionnel, un remplacement générationnel et l'opérateur de croisement est l'opérateur principal.
Des algorithmes évolutionnaires utilisant d'autres représentations et opérateurs sont souvent appelés ''algorithmes génétiques'', bien que les spécialistes évitent cet abus de langage.
{{Article détaillé|Algorithme génétique}}
===Programmation génétique===
Ces algorithmes utilisent une représentation en arbres d'expressions logiques, du fait qu'ils sont historiquement appliqués à l'apprentissage statistique et la modélisation. Ils utilisent pour ce faire le même algorithme de base que les algorithmes génétiques. Cependant, la programmation génétique s'intéresse spécifiquement à la construction automatique de [[programme]]s.
{{Article détaillé|Programmation génétique}}
===Algorithmes à estimation de distribution===
Contrairement aux algorithmes évolutionnaires « classiques », le cœur de ces méthodes consiste à estimer les relations entre les différentes variables d'un problème d'optimisation, grâce à l'estimation d'une distribution de probabilité, associée à chaque point de l'échantillon. Ils n'emploient donc pas d'opérateurs de croisement ou de mutation, l'échantillon étant directement construit à partir des paramètres de distribution, estimés à l'itération précédente.
{{Article détaillé|Algorithme à estimation de distribution}}
==Historique==
<div class="thumb tright" style="width:210px">
<div class="thumbcaption">
<div class="magnify" class="internal">
<timeline>
ImageSize = width:200 height:400
PlotArea = width:160 height:380 left:40 bottom:10
DateFormat = yyyy
Period = from:1960 till:2005
TimeAxis = orientation:vertical
ScaleMajor = unit:year increment:5 start:1960
Colors=
id:fond value:white #rgb(0.95,0.95,0.98)
id:marque value:rgb(1,0,0)
id:marque_fond value:rgb(1,0.9,0.9)
BackgroundColors = canvas:fond
Define $dx = 7 # décalage du texte à droite de la barre
Define $dy = -3 # décalage vertical
Define $dy2 = 4 # décalage vertical pour double texte
PlotData=
bar:Leaders color:marque_fond width:5 mark:(line,marque) align:left fontsize:S
from:1965 till:1965 shift:($dx,$dy) text:stratégies d'évolution (ES)
from:1966 till:1966 shift:($dx,$dy2) text:prog. évolutionnaire (EP)
from:1975 till:1975 shift:($dx,$dy) text:algorithmes génétiques (GA)
from:1980 till:1980 shift:($dx,$dy) text:programmation génétique (GP)
from:1986 till:1986 shift:($dx,-$dy2) text:sys. immunitaire artificiels (AIS)
from:1989 till:1989 shift:($dx,$dy) text:algorithmes mémétiques
from:1996 till:1996 shift:($dx,$dy) text:estimation de distribution (EDA)
from:1997 till:1997 shift:($dx,$dy2) text:évolution différentielle (DE)
from:2000 till:2000 shift:($dx,$dy) text:algorithmes interactifs
</timeline>
</div>
Chronologie des principales métaheuristiques, le nom est indiqué suivi de l’acronyme anglais entre parenthèses.
</div>
</div>
* 1952 : premiers travaux sur l’utilisation de méthodes stochastiques pour l’optimisation<ref>Robbins, H. and Monro, S., ''A Stochastic Approximation Method'', Annals of Mathematical Statistics, vol. 22, pp. 400-407, 1951</ref>.
* 1954 : Barricelli effectue les premières simulations du processus d’[[Évolution (biologie)|évolution]] et les utilise sur des problèmes d’optimisation généraux<ref>Barricelli, Nils Aall, ''Esempi numerici di processi di evoluzione'', Methodos, pp. 45-68, 1954</ref>.
* 1965 : Rechenberg conçoit le premier algorithme utilisant des '''[[stratégies d'évolution|stratégies d’évolution]]'''<ref>Rechenberg, I., ''Cybernetic Solution Path of an Experimental Problem'', Royal Aircraft Establishment Library Translation, 1965</ref>.
* 1966 : Fogel, Owens et Walsh proposent la '''[[programmation évolutionnaire]]'''<ref>Fogel, L., Owens, A.J., Walsh, M.J., ''Artificial Intelligence through Simulated Evolution'', Wiley, 1966</ref>.
* 1970 : [[John Horton Conway]] conçoit le [[jeu de la vie]], l’[[automate cellulaire]] le plus connu à ce jour.
* 1975 : travaillant sur les automates cellulaires, Holland propose les premiers '''[[algorithme génétique|algorithmes génétiques]]'''<ref>Holland, John H., ''Adaptation in Natural and Artificial Systems'', University of Michigan Press, Ann Arbor, 1975</ref>.
* 1980 : Smith utilise la '''[[programmation génétique]]''' <ref>Smith, S.F., ''A Learning System Based on Genetic Adaptive Algorithms'', PhD dissertation (University of Pittsburgh), 1980</ref>.
* 1986 : Farmer, Packard et Perelson travaillent sur les [[système immunitaire artificiel|systèmes immunitaire artificiels]]<ref>J.D. Farmer, N. Packard and A. Perelson, ''The immune system, adaptation and machine learning'', Physica D, vol. 22, pp. 187--204, 1986</ref>.
* 1988 : la première conférence sur les algorithmes génétiques est organisée à l’[[université de l'Illinois à Urbana-Champaign|université de l’Illinois à Urbana-Champaign]].
* 1988 : Koza dépose son premier brevet sur la programmation génétique<ref>Koza, John R. ''Non-Linear Genetic Algorithms for Solving Problems''. United States Patent 4,935,877. Filed May 20, 1988. Issued June 19, 1990</ref>.
* 1989 : Goldberg publie un des livres les plus connus sur les algorithmes génétiques<ref>Goldberg, David E., ''Genetic Algorithms in Search, Optimization and Machine Learning'', Kluwer Academic Publishers, Boston, MA., 1989</ref>.
* 1989 : ''Evolver'', le premier logiciel d’optimisation par algorithmes génétiques est publié par la société ''Axcelis''.
* 1989 : le terme ''[[algorithme mémétique]]'' apparait<ref>P. Moscato, ''On Evolution, Search, Optimization, Genetic Algorithms and Martial Arts : Towards Memetic Algorithms'', Caltech Concurrent Computation Program, C3P Report 826, 1989.</ref>.
* 1993 : le terme « '''Evolutionary Computation''' » (« calcul évolutionnaire » en français) se répand, avec la parution de la revue éponyme, publiée par le [[Massachusetts Institute of Technology]].
* 1996 : Mühlenbein et Paaß proposent les '''[[algorithme à estimation de distribution|algorithmes à estimation de distribution]]'''<ref>Mülhenbein, H., Paaß, G., ''From recombination of genes to the estimation of distribution I. Binary parameters'', Lectures Notes in Computer Science 1411: Parallel Problem Solving from Nature, tome PPSN IV, pages 178--187, 1996</ref>.
* 1997 : Storn et Price proposent un [[algorithme à évolution différentielle]]<ref>Rainer Storn, Kenneth Price, ''Differential Evolution – A Simple and Efficient Heuristic for global Optimization over Continuous Spaces'', Journal of Global Optimization, volume 11, {{numéro}}4, pages 341-359, 1997</ref>.
* 2000 : premiers algorithmes génétiques interactifs<ref>Takagi, H., ''Active user intervention in an EC Search'', Proceesings of the JCIS 2000</ref>.
==Références==
===Sources===
* {{fr}} Johann Dréo, Alain Petrowski, Éric Taillard, Patrick Siarry, [[Référence:Métaheuristiques pour l'optimisation difficile (Johann Dréo et al.)|Métaheuristiques pour l’optimisation difficile]], Français, Éd. Eyrolles, Paris, septembre 2003, Broché, 356 pages, ISBN 2-212-11368-4.
* {{en}} A. E. Eiben, M. Schoenauer, ''Evolutionary computing'', Information Processing Letters, {{numéro}}82, pages 1 à 6, 2002.
{{Références|colonnes = 2}}
===Voir aussi===
* Certains [[système immunitaire artificiel|systèmes immunitaires artificiels]] peuvent être vus comme des algorithmes évolutionnaires et des [[métaheuristique]] d'optimisation.
{{portail informatique}}
[[Catégorie : Métaheuristique]]
[[Catégorie:Algorithmique]]
[[ca:Computació evolutiva]]
[[en:Evolutionary computation]]
[[es:Computación evolutiva]]
[[ja:進化的計算]]
[[ko:진화 연산]]
[[pl:Obliczenia ewolucyjne]]
[[pt:Computação evolucionária]]