• Aucun résultat trouvé

Chapitre I : Logistique distribuée avancée

I.9 Positionnement de la thèse

II.2.2 Heuristiques et métaheuristiques

Cette première approche consiste à utiliser des méthodes heuristiques visant à identifier rapidement de bonnes solutions. Une heuristique permet alors d’identifier au moins une solution réalisable pour un problème d’optimisation, mais sans garantir que cette solution soit optimale.

Il n'existe pas, à notre connaissance, de définition officielle. Cependant il est communément admis que :

- Une heuristique désigne un algorithme qui résout un problème d'optimisation donné, sans garantie d'optimalité mais dans des temps de calcul raisonnables (un exemple connu est l'algorithme glouton). Les méthodes heuristiques sont souvent classées en deux catégories : les méthodes constructives permettant de construire une solution réalisable et les méthodes d’amélioration permettant de visiter plusieurs solutions réalisables en tentant d’améliorer la valeur de l’objectif ;

- Une métaheuristique désigne un schéma algorithmique général qui peut s'appliquer à différents problèmes d'optimisation combinatoire. Plus précisément, elle utilise des stratégies qui guident la recherche dans l'espace des solutions, ces stratégies étant indépendantes du

54 Algorithme glouton In: S (séquence) Out: A 1: début 2: S= Ø

3: Tant que (S incomplète) faire

4: Construire la liste L des éléments insérables dans S ; 5: Si L 2 Ø alors

6: Evaluer le coût incrémental des éléments de L ; 7: Insérer l’élément avec le coût minimum ; 8: Return S

9: fin

problème auquel on les applique. Le but est d'explorer le plus efficacement possible l'espace des solutions afin de ne pas rester bloqué dans les minima locaux et de se diriger rapidement vers les régions les plus prometteuses. Il existe un grand nombre de métaheuristiques allant de schémas très simples (qui mettent en œuvre des processus de recherche basiques, comme la descente), à des schémas beaucoup plus complexes (avec des processus de recherche élaborés comme les colonies de fourmis).

II.2.2.1 Les algorithmes gloutons

Les algorithmes gloutons (greedy algorithms) sont parmi les schémas heuristiques les plus simples et les plus rapides. Ils construisent une solution de manière itérative sans jamais remettre en cause les décisions prises dans l'itération antérieure. Dans les cas où l'algorithme ne fournit pas systématiquement la solution optimale, il est appelé une heuristique gloutonne.

Les métaheuristiques que nous présentons dans les sections suivantes proposent des stratégies de recherche plus élaborées. Certaines de ces stratégies ont été conçues par analogie avec d'autres domaines, comme par exemple la physique (recuit simulé) ou la biologie (algorithmes évolutionnaires, colonies de fourmis). La plupart des métaheuristiques présentent l'inconvénient d'avoir de nombreux paramètres à régler dont dépend le compromis délicat entre efficacité et temps de calcul. Nous présentons les métaheuristiques les plus connues, à partir desquelles de nombreuses variantes peuvent être élaborées.

II.2.2.2 Le recuit simulé (Simulated Annealing - SA)

Cette métaheuristique est caractérisée par la présence d'une variable de contrôle appelée température (par analogie aux processus thermodynamiques dont elle s'inspire) qui fixe les conditions dans lesquelles une transformation dégradante est acceptée. Siarry (Siarry, 2002) explique le fonctionnement général de cette méthode qui s’appuie sur l’algorithme de

55

Metropolis (Metropolis et al., 1953). Disposant d’une configuration initiale, une certaine température T suit le procédé qui repose sur le fait de faire subir au système des modifications élémentaires. A chaque itération, si la modification en question arbore une amélioration qui converge vers l’objectif fixé (i.e. diminution de la fonction objectif (ou énergie)), la modification est acceptée. Par ailleurs, même si cette même modification provoque au contraire une détérioration 2E, il est envisageable qu’elle soit acceptée mais avec une certaine probabilité de exp(- 2E/T ). Cette démarche est ensuite renouvelée en gardant la température constante, jusqu’à ce que l’équilibre thermodynamique soit atteint. Toute la démarche ainsi décrite est alors renouvelée pour une nouvelle valeur de la température plus basse et une série de transformations est alors effectuée. La méthode du recuit simulé est souple vis-à-vis des évolutions du problème et facile à implémenter, elle est décrite génériquement dans la figure II.1.

Figure II. 1 Organigramme de la métaheuristique du Recuit Simulé (Siarry, 2002)

II.2.2.3 La recherche tabou (Tabu Search – TS)

La recherche tabou est également une des métaheuristiques les plus connues, elle a été introduite par Glover (Glover, 1986). Elle utilise un historique de manière à interdire à l'algorithme de revenir sur ses pas. Cet historique se traduit par la présence d'une liste dite tabou qui garde une trace des dernières solutions visitées. Ainsi l'algorithme ne pourra plus explorer ces solutions (du moins à court terme, tout dépend de la taille de la liste tabou).

56

L'algorithme fonctionne comme suit. Initialement la liste tabou est vide et on génère une solution S à l'aide d'une heuristique quelconque ; S devient la solution courante. A chaque itération, on choisit le meilleur voisin S’ de S qui n'est pas déjà dans la liste tabou, S’ devient la solution courante S et est ajoutée à la liste tabou. Si la taille de la liste tabou dépasse la taille maximale autorisée, on supprime de cette liste l'élément le plus ancien (stratégie FIFO -

First In First Out). Notons que la liste tabou permet d'éviter les cycles en interdisant de

choisir une solution dans le voisinage de la solution courante qui aurait déjà était explorée. En outre, en pratique, on ne stocke pas les solutions dans leur intégralité (trop coûteux en temps et en espace) mais seulement une signature de ces solutions.

Figure II. 2 Organigramme de l’algorithme Tabou (Siarry, 2002)

II.2.2.4 Les algorithmes évolutionnaires

Les algorithmes évolutionnaires sont inspirés du domaine de la biologie : ils ont été introduits dans les années 1950 (Fraser, 1957). Les techniques utilisées reproduisent le schéma d'évolution des espèces et en adoptent le vocabulaire. Les solutions sont appelées individus et l'algorithme traite simultanément plusieurs individus. L'ensemble de ces individus est appelé population et évolue à chaque itération de l'algorithme. La population relative à une itération donnée s'appelle génération, on obtient donc une nouvelle génération à chaque itération. Les individus qui servent à produire la nouvelle génération sont appelés parents et les individus résultants sont appelés enfants ou fils.

57

Le principe d’un algorithme évolutionnaire est simple. En effet, il s’agit de considérer un ensemble de N points, choisis à priori au hasard, dans un espace de recherche. Cet ensemble constitue la population initiale. Chaque individu x de la population ainsi définie possède une certaine performance, qui mesure son degré d’adaptation à l’objectif visé. Par exemple, dans le cas de la minimisation d’une fonction objectif f, l’individu x est d’autant plus performant que f(x) est plus petit. Le principe de base d’un algorithme évolutionnaire revient à faire évoluer de manière progressive, par générations successives d’individus, la composition de la population tout en maintenant sa taille constante. Au fil des générations, l’objectif principal visé consiste à améliorer la performance globale des individus (Siarry, 2002).

Plusieurs approches d'algorithmes évolutionnaires ont été étudiées:

- Les stratégies d'évolution (evolution strategies - ES), utilisées pour résoudre des problèmes d'optimisation continue ;

- La programmation évolutionnaire (evolutionary programming - EP), conçue pour faire évoluer des automates à états finis, l'idée étant de créer une « intelligence artificielle » ;

- Les algorithmes génétiques (genetic algorithms - GA), utilisés pour résoudre des problèmes d'optimisation combinatoire, ces derniers étant certainement les plus populaires.

Exemple : algorithme génétique

Figure II. 3 Résolution d’un problème par algorithme génétique (Siarry, 2002)