• Aucun résultat trouvé

Algorithmes d’exploration d’arbres

Dans le document Optimisation des flux de trafic aérien (Page 34-38)

3.5.1 Séparation & évaluation (Branch & bound)

Principe du B&B

Le principe de l’algorithme de Séparation & évaluation, plus connu sous son appellation anglaise Branch & bound(BB, ou B&B), est assez simple.

Considérons un arbre d’états, avec des noeuds, et des feuilles représentant des états solutions. Dotons-nous d’une fonction de coût ayant la propriété suivante : le coût d’un noeud est un minorant des coûts des solutions pouvant être atteintes à partir de ce noeud. Le principe, si l’on cherche une solution de coût minimal, consiste à mémoriser la solution de plus bas coût rencontrée durant l’ex- ploration, et à comparer le coût de chaque noeud parcouru à celui de la meilleure solution. Si le coût du noeud considéré est plus élevé que le meilleur coût, on arrête l’exploration de la branche : toutes les solutions de cette branche seront nécessairement de coût plus élevé que la meilleure solution déjà trouvée. Best_C := C({1,2,3,4} {5} ) {1,2,3,4} {1,2,3,4,5} {1,2,3,4} {5} {1,2,3,5} {4} {1,2,3} {4,5} {1,2,3} {4} {5} {1,2,3} {4} {1,2} {3} {1} {1,2} {1} {2} {1,2,3}

Si C(noeud) > Best_C alors couper la branche Sinon continuer l’exploration

FIG. 3.14 – Exemple de parcours d’arbre par un Branch & bound.

La figure 3.14 illustre ce mécanisme sur un arbre permettant d’explorer toutes les partitions pos- sibles d’un ensemble d’éléments, que nous avons déjà vu en section 3.3. Sur cette figure, C est la fonction de coût, et Best_C le meilleur coût trouvé pour une solution. Pour rendre cet exemple plus concret, on peut s’imaginer que les éléments sont des secteurs de contrôle, et les partitions des confi- gurations de regroupements, et que l’on cherche à équilibrer la charge de travail entre les groupes de secteurs. Nous verrons au chapitre 4 qu’il faut bien choisir la fonction de côut, afin que le coût d’un noeud minore celui de n’importe quelle solution atteignable à partir du noeud...

Illustration du B&B sur un exemple

Illustrons le fonctionnement du Branch & bound sur un exemple plus simple. Considérons un réseau routier reliant un certain nombre de villes, et supposons que l’on cherche le parcours le plus direct entre une ville de départ et une destination.

Un noeud sera ici un chemin dans le réseau, dont une extrémité sera la ville de départ. On saura que l’on a atteint une feuille de l’arbre (un état solution) lorsque l’autre extrêmité du chemin sera la

3.5. ALGORITHMES D’EXPLORATION D’ARBRES 33 ville de destination. La racine de l’arbre est un chemin de longueur nulle, ne contenant que la ville de départ. Les noeuds fils sont simplement les chemins obtenus en considérant les villes voisines de la dernière ville atteinte, comme illustré sur la figure 3.15. On choisit comme fonction de coût la distance parcourue. A B E3 E2 E1

FIG. 3.15 – Choix des noeuds fils.

A

B

Chemin 1

FIG. 3.16 – Premier chemin trouvé avec une recherche en profondeur.

Supposons qu’en explorant l’arbre en profondeur, on ait trouvé le chemin 1, décrit en figure 3.16. Cette solution est mémorisée, puis on remonte dans l’arbre d’états en revenant à la ville précédant la ville d’arrivée dans ce chemin, avant d’essayer un autre noeud fils, comme illustré sur la figure 3.17. Le nouveau chemin testé, qui se termine par la ville C, est plus long que la solution déjà trouvée. Ce n’est donc pas la peine de continuer à chercher à joindre la ville B en considérant les villes voisines de C, et on arrête l’exploration de cette branche de l’arbre d’états.

3.5.2 L’algorithme A

Principe de l’A∗

Le principe de l’A∗(cf [Pea84]) consiste à rechercher le meilleur parcours dans un arbre de possi-

bilités, en repartant à chaque étape du meilleur noeud possible. Alors que le Branch & bound parcou- rait l’arbre en profondeur (stratégie depth-first) en mémorisant la meilleure solution, l’algorithme A∗

parcours l’arbre selon une stratégie de type meilleur noeud en premier, ce qui implique de mémoriser chaque noeud parcouru, en ordonnant les noeuds selon un critère d’évaluation.

34 CHAPITRE 3. DESCRIPTION DES ALGORITHMES A B C ? Chemin 2

FIG. 3.17 – Essai d’un autre noeud fils. L’algorithme A∗opère sur deux structures de données :

– un arbre d’états. La racine est l’état initial, les noeuds de l’arbre correspondent à des états intermédiaires, et les feuilles de l’arbre sont des états solutions.

– une file d’attente à priorités (priority queue), qui est une structure d’arbre binaire permettant de mémoriser des états et d’y accéder en fonction d’une priorité : l’état en tête de la file (on devrait dire la racine de l’arbre binaire) est celui de plus haute priorité (dans notre cas, de plus bas coût). On peut insérer ou extraire des états de la file d’attente, avec la propriété suivante : c’est toujours l’état de plus haute priorité qui est extrait.

Tant que l’on n’a pas atteint une feuille, ou terminé l’exploration

de l’arbre :

1. Prendre le noeud P en tête de la file d’attente à priorités

(priority queue)

2. Calculer les états suivants (les noeuds fils)

3. Pour chaque noeud fils Fj :

- calculer le coût C(P, Fj) de la transition de l’état père à

l’état fils,

- calculer l’heuristique H(Fj),

- insérer le noeud fils dans la file d’attente, avec une priorité dépendant de la somme des coûts des transitions

passées et de C(P, Fj) + H(Fj) (la valeur la plus basse se

retrouve en tête de la file à priorités).

FIG. 3.18 – Algorithme A∗. En plus de ces structures de données, il faut définir trois fonctions : – une fonction évaluant le coût de transition entre deux états,

– une fonction heuristique, qui calcule une estimation minorante du coût des transitions restant à parcourir pour atteindre un état solution, à partir d’un état donné,

– une fonction déterminant si un état donné est un état solution ou non.

L’algorithme lui-même consiste à itérer les opérations décrites sur la figure 3.18, jusqu’à ce que l’on trouve un état solution (une feuille de l’arbre), ou bien jusqu’à ce que l’on soit sûr qu’il n’y ait

3.5. ALGORITHMES D’EXPLORATION D’ARBRES 35 A B E3 E2 E1 C(E3,Fj) Hj Fj

FIG. 3.19 – Coût de transition et heuristique. pas de solution.

Illustration de l’A∗ sur un exemple

Reprenons le même exemple que pour le Branch & bound, c’est-à-dire la recherche d’un plus court chemin sur un réseau routier.

Le coût d’une transition entre le noeud père et un noeud fils est alors simplement la distance entre la dernière ville du noeud père et la nouvelle ville ajoutée dans le noeud fils. Choisissons comme heuristique la distance à vol d’oiseau jusqu’à la ville d’arrivée. C’est bien une borne inférieure de tous les chemins terrestres menant à destination.

Pour chaque noeud fils, on peut donc calculer la somme des distances parcourues pour arriver à la dernière ville étape, et y ajouter la distance à vol d’oiseau entre cette ville et la destination. Le noeud est ajouté dans la file d’attente avec une priorité qui est fonction de cette valeur (on prend l’opposé par exemple).

Lorsqu’un des noeuds fils est la ville de destination, la recherche est terminée. On a alors trouvé le chemin le plus court entre la ville de départ et la ville d’arrivée.

Quelques commentaires sur l’A∗

L’algorithme A∗est tout à fait adapté à des problèmes de recherche de plus court chemin dans un

espace encombré d’obstacles. Imaginons dans notre exemple précédent qu’un certain nombre de villes aient leur périphérique bloqué par des bouchons, ou des travaux, que l’on souhaite éviter. Il suffit dans ce cas d’interdire les étapes passant par ces villes lors du calcul des noeuds fils.

Les difficultés éventuelles que l’on peut rencontrer en utilisant cet algorithme sont de plusieurs types. Tout d’abord, il peut ne pas y avoir de solution : il peut n’exister aucun chemin évitant les bouchons. La modélisation choisie dans notre exemple conduit donc à des choix du type tout ou rien : soit l’A∗ trouve un chemin, et c’est alors le plus court possible en fonction des contraintes, soit il ne trouve pas de chemin, et notre automobiliste reste chez lui. Si l’on souhaite faire en sorte qu’il parte tout de même, on peut chercher à minimiser son temps de parcours, bouchons éventuels compris, plutôt que la distance parcourue. Il faut alors changer de modélisation, et tenir compte dans les coûts de transition et dans l’heuristique des temps de parcours entre villes et du temps d’embouteillage prévu dans chaque ville.

Une autre difficulté, liée à la fois à la taille de l’arbre d’états et au choix de l’heuristique, est le backtracking, c’est-à-dire le retour-arrière dans l’arbre d’états. Supposons qu’au lieu de la distance

36 CHAPITRE 3. DESCRIPTION DES ALGORITHMES à vol d’oiseau, on ait choisi une heuristique nulle. Dans ce cas, l’état représentant le cheminement (A, E1, E2, E3, Fj) de la figure 3.19 sera inséré dans la file d’attente avec une priorité moindre que

n’importe quel chemin plus court, et donc avec une priorité inférieure à la plupart des noeuds parcou- rus précédemment. Par exemple, sur le schéma 3.19, n’importe quel noeud (A, E1, X), avec X 6= E2,

est un chemin plus court que le noeud que l’on vient d’insérer. Cela se traduit par de nombreux retours en arrière dans l’arbre d’états, afin d’explorer des sous-arbres paraissant plus prometteurs. Lorsque l’arbre d’états est de grande taille et lorsque l’heuristique choisie est trop minorante, le retour-arrière (backtracking) peut induire des temps de calcul trop importants pour espérer obtenir un résultat dans un délai raisonnable.

A l’inverse, le fait de choisir une heuristique qui n’est pas minorante peut conduire à trouver des solutions plus rapidement, mais qui ne sont pas optimales. Cela peut d’ailleurs être une stratégie pour éviter le backtracking lorsque l’on peut se contenter d’une solution non-optimale. Il suffit de définir une nouvelle heuristique en multipliant l’ancienne (minorante, elle) par un facteur légèrement supérieur à 1. Pour l’exemple de la section précédente, si l’on prend comme heuristique 1, 05×ddirecte,

on trouvera plus rapidement un chemin qui ne sera peut-être pas le plus direct, mais dont la longueur n’excédera pas de plus de 5% celle du chemin le plus court.

L’efficacité de l’algorithme dépend donc en grande partie du choix judicieux de la modélisation et de l’heuristique.

Dans le document Optimisation des flux de trafic aérien (Page 34-38)