On a représenté sur la figure 2.1 (à droite) l'évolution de la valeur de f2 en fonction du nombre d'évaluations effectuées par l'algorithme génétique avec mutation adaptative et sans mutation adaptative, ainsi que du recuit simulé (VFSR), d'un algorithme de simplex (Nelder-Mead), de la méthode BFGS et d'une arithmétique des intervalles. L'échelle est logarithmique sur les deux axes. On a utilisé un croisement barycentrique et une mutation sous forme de bruit gaussien pour l'algorithme génétique. On constate que l'algorithme génétique utilisant la mutation adaptative obtient des résultats bien supérieurs à ceux de l'algorithme génétique standard. Les paramètres de VFSR ont été ``adaptés'' de façon à donner un résultat aussi bon que possible.![]()
|
La convergence est réalisé en moyenne en 1500 évaluations de fonctions avec le clustering. Les résultats sont très proches de ceux obtenus par VFSR [IR92b].![]()
|
La figure 2.3 représente la fonction pour N=2. Il faut noter que pour les deux algorithmes concernés, la convergence ne présente aucune difficulté pour N=4 et N=8. A partir de N=12, le problème devient plus difficile. Les paramètres par défaut de VFSR ne permettent pas de faire converger l'algorithme simplement.![]()
Figure 2.3: Fonction de Corana représenté pour N=2 (à gauche). Résultats de convergence pour N=12 (à droite)
|
Les résultats sont présentés sur le tableau 2.1. On remarque que l'on ne peut trouver de solution pour N>6, en raison de l'occupation mémoire. En fait, la fonction de Corana est très mal adaptée à la programmation par intervalles, car elle présente de nombreux plateaux. Ces plateaux peuvent être subdivisés en de nombreux intervalles pour lesquels les bornes de la fonction sont les mêmes. Cela provoque une explosion du nombre d'intervalles que l'estimateur ne parvient pas à ``couper''.
Appels à f Appels à F N=1 31 63 N=2 440 881 N=3 1755 3511 N=4 4979 9959 N=5 38994 77989 N=6 525193 1050387
|
Nous allons montrer sur cet exemple combien l'utilisation d'une fitness locale peut être utile, bien que la fonction ne soit pas complètement séparable. On définit la fitness locale comme suit :![]()
Figure 2.4: F(x+y,x+y,...x+y) pour x Î [-P,P] et yÎ[-20,20] et valeur moyenne de la meilleure fitness en fonction de la génération courante
|
Les résultats ci-dessus montrent que la convergence de l'algorithme est 2 fois plus rapide avec le croisement adapté qu'avec un croisement classique. On observe également que le sharing ralentit légèrement la convergence de l'algorithme quel que soit le croisement utilisé. Ainsi, l'intérêt de l'opérateur de sharing n'est pas évident dans ce cas. Cependant, les performances de l'algorithme ne sont pas dégradées par l'opérateur de sharing lorsque le croisement adapté est utilisé. On observe même que l'opérateur de sharing permet d'obtenir une solution après convergence proche de 0 alors que sans l'opérateur de sharing, la meilleure solution après convergence reste éloignée de 0.
type de croisement min max moy s dist à 0 classique 76 294 179.44 178.47 0.00 adapté 42 204 92.33 91.81 2.03 classique avec sharing 79 357 248.87 247.32 0.06 adapté avec sharing 42 186 96.57 95.95 0.01
On observe sur les 4 figures que lorsque l'algorithme génère des solutions optimales, il génère également des solution rejetées (tellement mauvaises que l'opérateur de sélection ne les conserve pas). C'est la difficulté de ce problème (les solutions optimales sont proches de solutions très mauvaises). On observe sur la figure que l'opérateur de croisement adapté génère un nombre très important de solutions rejetées. Il est intéressant de constater que l'opérateur de sharing permet d'atténuer cet effet.![]()
![]()
La programmation par intervalle, en revanche, parvient à résoudre le problème avec une précision de 10-5 en 180026 évaluation de fonction pour f(x) et 360053 évaluations pour F(X). Il faut noter qu'il n'y a là aucun besoin d'appliquer une méthode locale en fin de convergence. Les résultats sont donc réellement intéressants.![]()
Pour construire le deuxième fils, on effectue la même opération en prenant un point de départ différent.![]()
| n |
| 5 |
Les résultats sont très bons pour des problèmes de l'ordre de 100 villes et tout à fait encourageants pour 200 villes. Ils montrent l'intérêt de cette approche locale utilisée pour le croisement. Cependant, l'algorithme génétique reste loin des méthodes les plus efficaces connues actuellement dans ce domaine.
Pb considéré lin105 kroa100 kroa200 Taille du problème 105 100 200 Taille de la pop 50 50 100 Valeur du minimum 14379 21282 29368 Nb min de gens 2 2 40 Nb moy de gens 14 6 110 Nb max de gens 30 43 268 Temps min (en sec) 1 2 130 Temps moy (en sec) 6 3 441 Temps max (en sec) 12 17 1418
Pour chaque disque sur le tableau de jeu, on additionne la valeur de la case correspondante si le disque est de la couleur du programme, ou on retranche cette valeur si le disque appartient à l'adversaire. Cette table, en raison des symétries, comporte 10 paramètres.
500 -150 30 10 10 30 -150 500 -150 -250 0 0 0 0 -250 -150 30 0 1 2 2 1 0 30 10 0 2 16 16 2 0 10 10 0 2 16 16 2 0 10 30 0 1 2 2 1 0 30 -150 -250 0 0 0 0 -250 -150 500 -150 30 10 10 30 -150 500
Enfin, le troisième partie de la fonction d'évaluation est le facteur de mobilité ; on calcule pour chaque disque le nombre de libertés : il s'agit du nombre de cases libres autour de ce disque. On additionne ensuite les libertés de chaque disque pour un joueur donné (par exemple, sur la figure 2.10, le joueur noir a 8 libertés). Le score de mobilité est la différence des libertés des deux joueurs. Ce score est multiplié par un coefficient avant d'être ajouté à la valeur de la fonction d'évaluation.![]()
| f= |
|
| ó õ |
| p(m,n)dp= |
|
Cette valeur f sera utilisée pour calculer l'adaptation de l'élément concerné ; mathématiquement, l'adaptation sera donc telle que :![]()
| ó õ |
| (n+1) | ( | Cnm pm (1-p)n-m | ) | dp=0.95 |
Il est remarquable de constater que, bien que l'apprentissage ne soit fait qu'aux profondeurs 0, 1 et 2, les ``nouveaux'' programmes battent les anciens de façon impressionnante jusqu'à la profondeur 6.
Prof G P N G P N G P N 0 282 98 20 188 194 18 274 107 19 1 252 101 47 285 82 33 266 82 41 2 278 78 44 303 55 42 243 120 37 3 281 75 44 298 50 52 292 61 47 4 280 75 45 320 46 34 320 46 41 5 286 68 46 329 40 31 6 72 20 8
Nous pensons cependant que l'on peut retenir un certain nombre d'enseignements du travail que nous avons effectué au cours des dernières années ; les algorithmes génétiques sont efficaces lorsque :
Méthodes locales Recuit AG Prog. Inter. Optimum trouvé oui non non oui Parallélisme difficile difficile Intrinsèque Facile Optima multiple non non oui oui Optimisation globale non oui oui oui Nombreuses variables efficace efficace efficace inefficace