ELEC 2311 - Projet 27-11-08 v.1 Tutoriel Algorithme Génétique Dest.: Etudiants Auteur : JD Introduction : L’objectif de ce tutoriel est de se familiariser avec les méthodes d’optimisation de type méta-heuristique et particulièrement avec la famille des algorithmes génétiques. Les deux avantages principaux de ces algorithmes sont la possibilité de travailler en multi-objectifs et la particularité d’être un algorithme de type global, c'est-à-dire qu’en partant de solutions initiales différentes, il est capable de retrouver la même solution finale. Cette particularité lui donne la capacité de retrouver les minima globaux. Définition du problème : Le problème proposé concerne le design de deux barres attachées au plafond par une extrémité et reliées entre-elles en leur seconde extrémité. A cette liaison s’ajoute une force verticale de 100kN. Les trois paramètres de design sont x1, x2 et y. Les variables x1 et x2 représentent les sections (en m²) des barres et la variable y représente la hauteur du point d’intersection (en m). Le schéma ci-dessous représente le problème à étudier. Le problème consiste à minimiser deux fonctions d’évaluations, le volume des barres et les contraintes en traction dans celles-ci : r f1 ( x , y ) = x1 16 + y 2 + x2 1 + y 2 , r f 2 ( x , y ) = max(σ AC , σ BC ) où σAC et σBC, les contraintes normales dans chacune des deux barres, sont données par les relations : σ AC = 20 16 + y 2 y ⋅ x1 σ BC = 80 1 + y 2 y ⋅ x2 Les paramètres de design sont contraints par les relations suivantes : 0 ≤ x1 , x2 ≤ Amax , 1≤ y ≤ 3 A cela s’ajoute également une contrainte relevant de la résistance des matériaux en traction : max(σ AC ,σ BC ) ≤ S max Les valeurs choisies pour Smax et pour Amax sont respectivement 105 kPa et 0.01 m2. 1 Structure de l’algorithme génétique : L’algorithme génétique proposé se base sur un concept classique. Il travail à partir d’une population composée de N individus sur qui des opérations mathématiques élémentaires de croisement et de mutation sont appliquées. Chaque individu représente un jeu de paramètre variant entre 0 et 1, x1, x2 et y sous la forme normalisée dans notre cas, qui sera utilisé dans les fonctions d’évaluation pour estimer l’adaptation de l’individu à son milieu. Le schéma suivant représente les principales étapes et actions de l’algorithme : Population Initiale : La population sera définie par un nombre de N individus la composant et qui sera constant. Croisement : Cette opération mathématique permettra d’utiliser les qualités de chaque individu lors de la période de reproduction. Mutation : Cette opération mathématique représente l’opérateur d’exploration en permettant aux paramètres de se balader dans le domaine de définition [0 ;1]. Population Enfant : La population est définie comme possédant N individus provenant de N opérations de reproduction. Le choix des parents peut être répétitif. Sélection : On regroupe la population Enfant et Initiale pour former un groupe de 2N individus. On ne sélectionne que les meilleurs individus selon certains critères. Population Elite : Représente les N meilleurs individus sortant de la sélection. En fin de processus d’optimisation, c’est la population de solution optimale. L’opération de création d’un individu enfant est la combinaison d’une opération de croisement afin d’obtenir un résultat provenant des parents et d’une opération de mutation afin d’obtenir une diversification possible selon une certaine probabilité de mutation. Croisement L’opération de croisement se base sur la moyenne arithmétique des 2 individus parents sur chacun des paramètres de design. Dans notre cas, cela donnera : 2 r r x p1 + x p 2 r xenf = 2 y p1 + y p 2 y enf = 2 Mutation L’opération de mutation permet à l’algorithme de générer des solutions originales dans le domaine des solutions. Afin de ne pas provoquer une convergence trop lente, l’opération de mutation ne s’effectue sur un paramètre qu’avec une probabilité fixée à Pmut. La mutation s’effectue simplement en utilisant une variable aléatoire ε comprise entre -1 et 1. X mut = X + ε , avec ε ∈ [− 1,1] Cependant cette méthode permet au paramètre d’avoir des valeurs inférieures ou supérieures aux bornes [0,1]. Pour éviter ce désagrément, le coefficient ε sera multiplié par un facteur de distance α variant entre 0 et 1. Ce facteur de distance est calculé selon la distance minimale qui existe avec l’une des bornes : d = min( X − B1 , B2 − X ) Dans le cas de l’algorithme, les bornes étant fixées à 0 et 1 : d = min( X ,1 − X ) La valeur maximale ou minimale que peut avoir ε est d, ce qui amène à dire que α = d. Sélection La sélection des individus va se baser selon deux principes : − − Récupérer les meilleurs individus Diversifier au maximum les solutions Lorsque l’on travaille avec plusieurs fonctions d’évaluation proposant un compromis entre-elles, il n’existe pas de solution optimale répondant à toutes les fonctions d’évaluation (voir T.42 du cours). Afin de récupérer les meilleurs individus, un classement par rang de non-dominance est nécessaire. La récupération des individus se fait rang par rang de manière à recomposer une nouvelle population de N individus. Cependant, arrivé au dernier rang à ajouter, il arrive souvent que celui-ci soit trop grand pour terminer la composition de la population finale. Un nouveau facteur de décision intervient pour obtenir les individus les plus intéressants, c'est-à-dire ceux qui permettent de diversifier les solutions. La méthode permettant d’évaluer cette diversification consiste à calculer la distance qui existe entre les individus voisins dans le rang de non-dominance au sein du domaine des solutions. Il ne reste alors qu’à récupérer les individus avec les distances les plus élevées. Implémentation sur Matlab de l’algorithme génétique : Structure du programme Le programme est écrit sur Matlab et composé par une série de fichiers. Seuls deux de ces fichiers, c'est-à-dire GA.m et evaluationFonction.m sont à modifier pour une simple utilisation du programme, mais rien n’empêche une modification des autres fichiers pour améliorer les performances de l’algorithme. Celui-ci n’est qu’une version non optimale au niveau du code, mais permet déjà d’obtenir de très bons résultats en des temps raisonnables. Le schéma ci-dessous regroupe les fichiers utilisés ainsi que les liaisons entre-eux. 3 L’algorithme en temps que tel nécessite deux types d’intervention de la part de l’utilisateur. Le premier type est la configuration des paramètres tels que les probabilités de mutation, le nombre de génération à effectuer etc. Ces modifications sont à faire dans le fichier GA.m qui est le fichier à exécuter pour lancer l’algorithme. Le deuxième type de modification est l’adaptation au problème. L’algorithme ne connait pas le problème à analyser, il faut donc le lui soumettre. Pour cela, il suffit simplement de rentrer les fonctions d’évaluation et les contraintes dans le fichier evaluationFonction.m. Le schéma de droite représente finalement le fonctionnement de l’algorithme en considérant les fichiers non-modifiables comme étant une boite noire. Il existe un transfert d’information important entre les différentes boîtes, mais plus particulièrement entre l’algorithme génétique et le fichier d’évaluation. Au cours de chaque génération, l’algorithme fait appel N fois au fichier d’évaluation pour évaluer chaque individu à la fois. Les valeurs transmises au fichier d’évaluation sont sous la forme vectorielle dont la taille dépend du nombre de variable réelle utilisée. Les valeurs retournées par la fonction d’évaluation Matlab sont au nombre de deux vecteurs, un premier pour les évaluations et un deuxième pour les contraintes. Leur dimension dépendant du nombre de fonction d’évaluation et du nombre de contrainte nécessaire. 4 GA.m Les lignes de code suivantes se retrouvent dans le fichier GA.m. Elles permettent de configurer le nombre d’individus, le nombre de générations, la probabilité de muter, le nombre de paramètres réels, le nombre de fonctions d’évaluation et le nombre de contraintes. % Nombre d'individu nb_ind = 200; % Nombre de génération (itération à effectuer) nb_generation = 600; % Probabilité de mutation p_mut = 0.1; % ->10% de chance de muter % Nombre de variables réelles nb_xReal = 3; % Nombre de fonction d'évaluation nb_fitness = 2; % Nombre de contrainte nb_cstr = 1; Tous ces paramètres sont envoyés dans la routine principale du programme : % on appel le code principal pop = main_GA(nb_ind, nb_generation, p_mut, nb_xReal, ... nb_fitness, nb_cstr); La solution finale est retournée par l’intermédiaire de la variable pop dont la structure est représentée ci-dessous. 5 evolutionFonction.m Ce fichier permet d’évaluer un individu à la fois. Les paramètres d’entrées sont regroupés dans le vecteur X. La première étape avant d’exploiter tel quel les informations provenant de ce vecteur, il convient de redimensionner les valeurs sachant que les éléments X(1), X(2), … varient de 0 à 1. Dans le cas du problème à étudier, il faut considérer que les paramètres x1 et x2 varient entre 0 et Amax qui vaut 0.01 [m²] et que le paramètre y varie entre 1 et 3. x1 = X(1) * 0.01; x2 = X(2) * 0.01; y = X(3) * 2 + 1; Il ne reste plus qu’à introduire les équations du problème. C'est-à-dire, d’abord définir les constantes Amax et Smax, ensuite calculer les valeurs de σAC et σBC, ensuite calculer les fonctions d’évaluation et terminer par le calcul de la contrainte. La valeur de 1000 pour le non respect de la contrainte est simplement une valeur choisit aléatoirement servant de pénalité. Amax = 0.01; % [m²] Smax = 1e5; % [kPa] sigmaAC = 20 * sqrt(16+y*y) / (y*x1); sigmaBC = 80 * sqrt(1+y*y) / (y*x2); fitness(1) = x1 * sqrt(16+y*y) + x2* sqrt(1+y*y); fitness(2) = max(sigmaAC, sigmaBC); cstr = 0; if (max(sigmaAC, sigmaBC)>Smax) cstr = 1000; end Résultats : Les graphiques ci-dessous représentent les résultats. Celui de gauche est le front de Pareto obtenu. Les points verts sont les populations enfants de la dernière génération, les points bleus sont les populations de parents de la dernière génération et tous les individus sélectionnés sont mis en évidence par un cercle rouge. Les ordonnées représentent la deuxième fonction d’évaluation et les abscisses représentent la première fonction d’évaluation. En considérant le ratio suivant représentant le rapport entre le nombre de parent sélectionné et le nombre d’enfant sélectionné : 6 r= S parent S enfant , on peut dire que lorsque l’algorithme débute ses générations, la valeur de r tendra plus vers 0 alors qu’en fin de processus, il tendra vers l’infini. Cela montre l’importance en début de processus d’avoir une diversification de la population, obtenue grâce aux enfants et à leur mutation. Alors qu’en fin de processus, il est seulement nécessaire de faire que des recherches locales obtenues grâces aux croisements. Le graphique de droite représente les valeurs du couple (X(1) ; X(2)) des paramètres pour toutes les solutions appartenant au front. Le tableau suivant donne les résultats pour la meilleure solution de la première fonction d’évaluation et la meilleure solution pour la deuxième fonction d’évaluation, ce qui représente en fait les deux points extrêmes du graphique de gauche ci-dessus. 7