• Aucun résultat trouvé

A LGORITHME DE RECHERCHE COMBINATOIRE BASE SUR LE RECUIT SIMULE

Application au domaine du tourisme

3.3 A LGORITHME DE RECHERCHE COMBINATOIRE BASE SUR LE RECUIT SIMULE

La faible proportion appliquée à la tolérance de dispersion entre le deuxième restaurant de chaque jour et l'hébergement est justifiée par le fait qu'il est souhaitable que le système de recommandation propose un restaurant proche de l'hébergement pour la soirée. Cette notion de proximité est subjective, c'est pourquoi elle dépend de la tolérance de dispersion de l'utilisateur.

3.3 ALGORITHME DE RECHERCHE COMBINATOIRE BASE SUR LE RECUIT

SIMULE

En se basant sur le pattern (le terme pattern générique englobe le pattern de combinaison et les sous-patterns) et les tolérances de dispersion, une métaheuristique peut alors se charger de rechercher la combinaison optimale d'items du domaine, par maximisation de la fonction de pertinence.

Nous utilisons un algorithme basé sur le recuit simulé pour chercher la combinaison optimale. Cet algorithme a la capacité de converger vers une bonne solution, ou la meilleure solution en un temps raisonnable pour une application quasi temps réel. Il a été prouvé dans (Geman & Geman, 1984) que le recuit simulé convergeait vers l'optimum global si le refroidissement était suffisamment lent (voir le Chapitre 4 pour plus de détail). L'algorithme du recuit simulé possède de grandes similitudes avec l'algorithme Hill-Climbing. Voici un rappel de ce en quoi consiste ce dernier :

- On commence tout d’abord par trouver une solution au problème, une première combinaison, on calcule alors son énergie (inverse de la fonction de pertinence).

- Ensuite, on transforme légèrement la solution et on calcule la nouvelle énergie. Si cette dernière est inférieure à la précédente alors on prend cette nouvelle combinaison comme solution courante, sinon on garde l’ancienne.

- On continue ainsi jusqu’à ne plus pouvoir générer de nouvelle combinaison ayant une énergie inférieure à la combinaison courante.

Le principal problème de cette méthode réside dans le fait qu’il y a une grande probabilité pour tomber dans un minimum local, c’est-à-dire une combinaison qui, tout en n’ayant pas l’énergie minimale, sera telle qu’aucune légère transformation ne permettra d’obtenir une combinaison avec une meilleure énergie.

C’est à ce niveau que la technique du recuit simulé se distingue, elle permet en effet de sortir de certains minima locaux. La méthode consiste à introduire une erreur volontaire pour sortir de ces minima en acceptant, de temps en temps (avec une certaine probabilité), une combinaison de moins bonne qualité. Son acceptation sera déterminée aléatoirement en tenant compte de la différence entre les énergies et d'un paramètre appelé température. Ce dernier permet de prendre en compte le fait que plus le processus d’optimisation est avancé, moins il est prêt à accepter une solution plus coûteuse. L'algorithme fonctionne comme suit. Au départ, il choisit une combinaison initiale aléatoire d'items suivant le pattern défini précédemment. Cette combinaison a une énergie , appelée énergie initiale.

L'énergie d'une combinaison valide est l'inverse de la fonction de pertinence appliquée à cette combinaison:

Il s'agit alors de minimiser l'énergie. Plus l'énergie est basse, meilleure est la combinaison. Une variable T, appelée température, décroît par palier au cours du temps. A chaque niveau de température, un certain nombre de modifications aléatoires sont testées sur la combinaison courante. Lorsque ce nombre de modifications est atteint, on dit que le système est à l'état d'équilibre. Un coût est associé à chaque modification; il est défini comme la différence entre l'énergie de la combinaison après et avant la modification. Un coût négatif signifie que l'énergie courante a une énergie plus petite que la précédente (qui est donc meilleure par définition), elle est alors gardée. Au contraire, un coût positif représente une « mauvaise » modification. Néanmoins, elle peut être gardée à une certaine probabilité (taux d'acceptation ) qui dépend du niveau de température courante et du coût. Plus la température est grande, plus la probabilité l'est aussi. Ainsi, au cours du temps, le nombre de changements autorisé diminue dû à la décroissance de la température, jusqu'à ce qu'il n'y ait plus aucune modification acceptable. Au final, on dit que le système est gelé, et la combinaison courante devient la combinaison finale à présenter à l'utilisateur. Le taux d'acceptation est défini comme ceci:

où est la température au niveau , . Ce choix de l'exponentiel pour le taux d'acceptation s'appelle règle de Metropolis.

Cet algorithme est décrit par le diagramme fonctionnel de la Figure 28.

FIGURE 28.DIAGRAMME FONCTIONNEL DE L'ALGORITHME DU RECUIT SIMULE UTILISE

La Figure 29 montre un exemple de variation de l'énergie de la combinaison courante au cours du temps. Au début, l'amplitude des variations de l'énergie est grande, car de nombreuses solutions sont acceptées étant donné la température du système. Puis, cette amplitude diminue au fil du temps, dû au refroidissement du

système (baisse de la température). Enfin, lorsqu'il n'y a plus de variation de cette énergie, le système est gelé et la meilleure solution trouvée (qui est généralement celle pour laquelle le système est gelé) est renvoyée.

FIGURE 29.EXEMPLE DE VARIATION DE L'ENERGIE DE LA COMBINAISON COURANTE PAR ALGORITHME DE RECUIT SIMULE

Une décroissance géométrique de la température à chaque palier a été choisie :

Si nous voulions privilégier la qualité de la solution finale, nous lui donnerions une décroissance logarithmique, en sacrifiant le temps d'exécution. Néanmoins, étant donné l'application temps réel que l'on souhaite en avoir et du fait qu'une « bonne » solution qui n'est pas l'optimum est tout à fait acceptable, cette décroissance exponentielle est pertinente.

Il est possible de jouer sur de nombreux paramètres du recuit simulé pour modifier la pertinence des solutions et le temps de réponse.

Tout d'abord, il faut déterminer la température initiale qui va décroître au cours du temps. Cette température peut être choisie empiriquement, mais la difficulté est que si elle est trop grande à l'initialisation, toutes les modifications au départ seront acceptées quel que soit le coût associé, ce qui est une perte de temps non négligeable. Si elle est trop faible au départ, le parcours de l'espace des solutions sera trop limité. Il faut trouver le juste milieu.

Une façon de trouver cette valeur consiste à générer un certain nombre de transformations coûteuses et à calculer la variation moyenne (coût moyen) . Un taux d'acceptation à respecter au départ est choisi, nous le fixons à . Ainsi, la valeur de est :

(car ).

Ensuite, il convient de définir le coefficient de décroissance de la température entre les paliers et le nombre d’itérations des modifications par palier. Le coefficient de décroissance est compris entre 0 et 1. Plus il est grand, plus la décroissance est lente et plus l’algorithme met du temps à converger vers une solution. En contrepartie, cela lui permet de ne pas se bloquer trop tôt dans un minimum local. Une valeur de a été choisie suite à de nombreux tests, il permet d’obtenir de bons résultats en un temps raisonnable.

Le nombre d’itérations par palier définit le nombre de modifications réalisées par palier de température. Lorsque ce nombre est atteint, on dit que le système est en équilibre statistique. C'est alors que le changement de palier (décroissance de température) se fait. Ce nombre d'itérations est fixé à 2000.

Enfin, le critère d'arrêt de l'algorithme est important. On dit que le système est gelé lorsque plus aucune modification n'est acceptable. En pratique, certains arrêtent l'algorithme lorsqu'un certain seuil de température est atteint ou lorsque le nombre de paliers maximaux de température a été dépassé. Une autre méthode consiste à arrêter l'algorithme lorsqu'aucun changement n'a été autorisé sur un nombre donné d'itérations. C'est cette dernière méthode que nous utilisons, elle garantit quasiment que nous nous trouvons dans un minimum (local ou global). Le nombre maximal d'itérations autorisé sans que cela ne génère de modification avant de stopper l'algorithme est égal au nombre maximal d'itérations par palier défini précédemment.

La définition arbitraire de certains paramètres du recuit simulé est vue comme le principal inconvénient de cet algorithme. Nous proposons une méthode pour définir ces paramètres sans tâtonnement dans le chapitre 7 (travaux futurs).

De plus, un autre inconvénient est qu'il est possible (même si c’est très rare) que l'algorithme rencontre une meilleure solution que la solution finale durant sa recherche. Néanmoins, c'est cette dernière qui est normalement renvoyée dans l'algorithme originel. Pour parer à ce problème, dans notre système, la meilleure solution rencontrée au cours du temps est gardée en mémoire.

Pour avoir un ordre d'idée des résultats fournis par cet algorithme, une comparaison avec l'algorithme du Hill-Climbing est réalisée dans la partie suivante.