• Aucun résultat trouvé

2.3 Méthode CUS

2.3.1 Principe

La procédure Classic Unidimensional Search (CUS) [Gardeux 09c] [Gardeux 10] est très simple à implémenter et reprend les principes énoncés précédemment. Elle utilise une méthode de relaxation, qui consiste à relâcher des contraintes sur le problème, an de rendre sa résolution plus aisée. Ici, la méthode de relaxation se traduit par le fait que nous optimisons les dimensions séparément. Si nous notons (e1, e2, ..., en) les vecteurs unitaires de l'espace de recherche, on obtient un ensemble den directions de recherche. Avec cette formalisation, nous utilisons une méthode d'optimisation unidimensionnelle qui s'applique sur chaque directionei. Elle optimise la fonction objectif le long de la première direction, jusqu'à ce qu'elle atteigne un optimum. Puis réitère avec la seconde direction, et de la même manière parcourt toutes les directions. Nous pouvons voir le principe général de cette méthode dans le pseudo-code de la gure 2.4. Dans la suite, on note h = h1, ..., hn un vecteur de "pas". Chaque composante de ce vecteur sera initialisée comme la diérence entre la borne supérieure et la borne inférieure de l'espace de recherche. On aura donc hi = Ui −Li,∀i [1,n], avec U = U1, ..., Un la borne supérieure etL=L1, ..., Lnla borne inférieure de l'espace de recherche. Chaque composante pouvant être bornée diéremment, les variablesU etL seront considérées comme des vecteurs.

Élaboration d'algorithmes d'optimisation adaptés aux problèmes de grande dimension

Initialiser la solution x= (x1,...,xn) aléatoirement répéter

pour i= 1 à n faire

Utiliser un algorithme unidimensionnel pour optimiserf(x)sur chaque direction ei

n pour

jusqu'à ce que x ne puisse plus être amélioré

Figure 2.4 Méthode de relaxation : principe général.

Ensuite, à chaque itération, CUS parcourt toutes les dimensions dans l'ordre. Pour optimiser

f sur chaque dimension i, on considère deux nouvelles solutions "x up" (notéexu) et "x down" (notéexd), construites à partir de la solution courante x :

xu =x+hiei = (x1, x2, ..., xi +hi, ..., xn) (2.3.1a)

xd=x−hiei = (x1, x2, ..., xi−hi, ..., xn) (2.3.1b) Si une solution est générée en dehors de l'espace de recherche, elle est corrigée et placée sur le bord le plus proche. Étant donnée l'initialisation du vecteurh lors de la première itération, l'algorithme commencera donc par tester les bords de l'espace de recherche.

L'algorithme évalue ensuite la valeur de la fonction objectif pour ces deux nouvelles solutions. Dans la suite, on considérera qu'une solutionx est meilleure qu'une solution x0 sif(x)< f(x0) dans le cas d'une minimisation, ouf(x)> f(x0) dans le cas d'une maximisation.

Trois cas possibles peuvent alors se présenter :

x est meilleur que xu et xd. Dans ce cas, on ne fait rien et on passe à la dimension suivante ; xd est meilleur quexetxu. Dans ce cas on pose s=−1, cela nous permettra de continuer la

recherche dans cette direction ;

xu est meilleur quex et xd. Dans ce cas on pose s= 1.

Si l'on est dans un des deux derniers cas, on posex=x+s∗hi∗ei. Puis on évalue la valeur de la fonction objectif pour la nouvelle solution x+s∗hi∗ei. Si elle est meilleure quex, alors on pose à nouveaux=x+s∗hi∗ei. On continue ainsi à parcourir cette direction, jusqu'à ce que l'on arrive sur un bord de l'espace de recherche, ou bien que l'on ne parvienne plus à améliorer la solution courante. Le principe de parcours est illustré par les courbes de la gure 2.5.

Figure 2.5 Optimisation d'une fonction unidimensionnelle par la méthode de line search utilisée par CUS.

On remarque que, lorsquehest petit, l'algorithme converge vers l'optimum local le plus proche. En revanche, si h est grand, il pourra "sauter" certains optimums locaux.

Lorsque le parcours d'une composante est terminé, on passe à la composante suivante, et ainsi de suite, jusqu'à ce que toutes les dimensions aient été parcourues. Le parcours successif de toutes les composantes du vecteur solution constitue une itération de l'algorithme. À ce moment, avant de commencer l'itération suivante, on augmente la granularité (ou la précision) de la recherche, en diminuant la valeur deh(h=h∗r). La variable rest l'un des paramètres de cet algorithme. Plus r sera grand, et plus l'algorithme convergera lentement, parcourant l'espace de recherche de manière plus approfondie. Nous xons ce paramètre à 0,5 par défaut.

Le pseudo-code d'une itération de la méthode CUS est détaillé dans la gure 2.6. Procédure CUS

début

pour i= 1 à n faire

xu =x+hiei xd=x−hiei

(on met à jourx comme la meilleure des 3 solutions)

x=arg min(f(x), f(xu), f(xd)) tant que l'on améliore la solution x

x=x±hiei dans la direction de la meilleure solution n

n pour

h=h∗r

n

Figure 2.6 Une itération de l'algorithme CUS.

À chacune de ces itérations, on améliore la solutionxd'une précision xée parh. Pour simplier, on peut dire qu'à la n de chaque itération, on a trouvé un optimum local restreint à la précision

h.

Le critère d'arrêt de cet algorithme est atteint lorsqu'une certaine précision (notée hmin) est atteinte par les composantes de h. Par défaut, nous xerons cette valeur à 1015. Ce critère peut évidemment être modié en fonction de la précision que l'on cherche à atteindre. En eet, dans le cadre de l'algorithmique théorique, nous ne sommes pas limités et nous pouvons donc atteindre une précision quelconque ; cependant, ce n'est jamais le cas en pratique. Le choix de 1015provient de raisonnements purement techniques que l'on peut aborder du point de vue de la représentation des nombres sur la machine. En eet, dans la plupart des langages de program-mation, lorsque la diérence de deux nombres atteint une précision susamment importante, le programme ne sait plus les diérencier. Par exemple, les valeurs 10,000000000000001 et 10 seront considérées égales, même si en réalité elles diérent de1015. Ce genre de problème sur-vient souvent lorsque l'on arrive à des précisions inférieures à1012; d'où le choix de ce critère d'arrêt nous permettant de conserver une petite marge.

L'algorithme CUS, tel qu'il est déni jusqu'ici, est une méthode de recherche locale. Il converge donc vers l'optimum local le plus proche, et s'arrête. Pour eectuer l'exploration de l'espace

Élaboration d'algorithmes d'optimisation adaptés aux problèmes de grande dimension de recherche, il nous a fallu trouver une méthode permettant de conserver cette vitesse de convergence, nous avons donc opté pour un redémarrage "intelligent". En eet, la méthode la plus simple serait de réinitialiser une solution aléatoirement dans l'espace de recherche et de recommencer la recherche depuis ce point. Or, cette méthode ne ferait aucune utilisation des optimums locaux déjà trouvés, ce qui serait une perte d'information. Nous avons donc opté pour une méthode générant une solution aléatoirement dans l'espace de recherche, mais de telle sorte que la nouvelle solution soit créée assez "loin" des optimums locaux déjà trouvés.

À cet eet, nous utilisons une listeL, vide au début de notre algorithme. Lorsqu'une première recherche locale est terminée (c'est-à-dire quand la précisionhmin a été atteinte), nous ajoutons la solution courante x dans la liste L. Nous redémarrons ensuite l'algorithme en créant une nouvelle solutionx, de façon qu'elle soit éloignée des solutions dansL. À cet eet, nous utilisons un algorithme de dispersion inspiré de la méthode Scatter Search [Marti 06] :

1. On ajoute l'optimum local xque l'on vient de trouver dans la liste L. 2. On génère aléatoirement 1000 solutions dans l'espace de recherche. 3. Pour chaque solution x0 parmi les 1000, on calcule la distance dist(x0,L).

4. On prend comme nouvelle solution x, celle qui maximise cette distance, parmi les 1000. La mesure de distance distpermet de déterminer la distance d'un point x à un ensembleS :

dist(x,S) = inf{distanceEuclidienne(x,s), s∈S} (2.3.2) Il est à noter que cette procédure de redémarrage n'utilise aucune évaluation de la fonction objectif, et donc ne "coûte" rien, en termes d'ecacité de l'algorithme de recherche. Cette procédure peut s'activer des nombres de fois diérents, en fonction de la valeur de hmin. En eet, plus hmin est grand, et plus l'algorithme de redémarrage sera appelé, améliorant ainsi l'exploration de l'espace de recherche, en détériorant la précision des solutions (et inversement). Contrairement aux méthodes à mémoire adaptative, telle que la recherche tabou, la mémoire de CUS n'a pas de taille limitée. En eet, dans notre cas, il n'y a aucun intérêt pratique à vider cette mémoire. De plus, sa taille ne pourra jamais atteindre des dimensions trop importantes. L'algorithme CUS est maintenant complètement déni, il regroupe donc :

une procédure de recherche locale, permettant de converger rapidement vers un optimum local ;

une mémoire, stockant les optimums locaux trouvés tout au long de la recherche ;

une procédure de redémarrage, exploitant la mémoire, an de créer de nouvelles solutions ; deux paramètres :hmin et r, que nous verrons plus en détail par la suite.

Documents relatifs