• Aucun résultat trouvé

Les solutions xk obtenues successivement en résolvant les problèmes P( ˆX\ ˆY , ˆf ) et ajoutées dans l’ensemble ˆY sont ordonnées selon ˆf dans un ordre non décroissant. En choisissant ˆf linéaire et identique à chaque itération de l’algorithme 2.1, on peut tirer profit de la littérature existante sur les algorithmes de k-best. Murty (1968) a proposé un algorithme de k-best pour le problème d’affectation. Cet algorithme a ensuite été généralisé par Lawler (1972) pour les problèmes d’optimisation en variables binaires.

L’algorithme de Murty-Lawler est un Branch and Bound particulier puisque l’objectif visé n’est pas la recherche d’une solution optimale, mais de retourner les k meilleures solutions réalisables d’un problème d’optimisation combinatoire, rangées dans un ordre non décroissant.

Grâce à un mode de séparation original, les feuilles de l’arborescence de l’algorithme de Murty-Lawler contiennent des sous-ensembles de solutions réalisables qui forment une partition de l’ensemble ˆX\ ˆY . On notera L l’ensemble des feuilles de l’arborescence.

Chaque nœud feuille v ∈ L contient le sous-ensemble de solutions réalisables ˆX(v) dé-finissant ainsi le sous-problème P( ˆX(v), ˆf ) qu’on notera aussiP(v). Un nœud v contient aussi la solution optimale du problème P(v) qui est notée indifféremment x( ˆX(v), ˆf ) ou x(v).

Initialement l’ensemble des feuilles L contient le nœud racine , qu’on notera vr, tel que ˆX(vr) est l’ensemble de toutes les solutions réalisables du problème relâché, i.e. ˆX(vr) = ˆX. La -première- meilleure solution est la solution optimale x(vr). De manière générale, lorsque les k − 1 meilleures solutions sont connues et stockées dans l’ensemble ˆY , la kème meilleure solution xk est obtenue parmi les solutions optimales des parties de l’ensemble ˆX\ ˆY , i.e. xk∈ arg min

v∈L

ˆ f (x(v)).

Notons vk−1 le nœud qui contient la k − 1ème meilleure solution xk−1 = (xk−11 , . . . , xk−1n ). Une partition de ˆX(vk−1) en O(n) sous-ensembles est construite en ajoutant des contraintes à la description de ˆX(vk−1). Sans perte de généralité, on peut supposer que

le sous-ensemble de solutions ˆX(vk−1) est défini en fixant les s premières variables du problème x1, . . . , xs à 0 ou à 1, avec s < n. Notons Cte(vk−1) l’ensemble des contraintes associées au nœud vk−1. Les nœuds vk−1

l , avec l = 1, . . . , n − s, engendrés par la sépa-ration du nœud vk−1 héritent de ses contraintes, i.e. les variables x1, . . . , xs sont fixées respectivement aux valeurs xk−1

1 , . . . , xk−1s . Les n − s nouveaux nœuds sont définis en fixant les variables xs+1, . . . , xn comme suit :

Cte(v1k−1) : Cte(vk)∪ {xs+1 = 1− xk s+1} Cte(v2k−1) : Cte(vk)∪ {xs+2 = 1− xks+2 ; xs+1= xks+1} Cte(v3k−1) : Cte(vk)∪ {xs+3 = 1− xk s+3 ; xs+1= xk s+1, xs+2 = xk s+2} ... ... ... Cte(vn−sk−1) : Cte(vk)∪ {xn= 1− xk n ; xs+1= xk s+1, . . . , xn−1= xk n−1} Les sous-ensembles X(vk−1

1 ), . . . , X(vk−1n−s) et le singleton{xk−1} forment une partition de X(vk−1), et c’est là la particularité de la séparation de Murty-Lawler, à savoir, la k− 1èmemeilleure solution peut être isolée dans un singleton de la partition de X(vk−1). Ainsi en remplaçant le nœud vk−1 par ses fils vk−1

1 , . . . , vn−sk−1 dans L et en insérant la k− 1ème meilleure solution xk−1 dans ˆY , l’ensemble des nœuds L engendre toujours une partition de ˆX \ ˆY . La difficulté des sous-problèmes P( ˆX(vlk−1), ˆf ) obtenus n’est pas accrue grâce à la nature des contraintes ajoutées lors de la séparation.

Dans les description des algorithmes qui suivent, nous désignons par ML le schéma de Murty-Lawler que nous venons de décrire.

Nous présentons dans l’algorithme 2.2 les opérations réalisées à l’étape 4 de l’algo-rithme 2.1 pour la recherche d’une kème solution xk.

Algorithme 2.2 : kème solution selon Murty-Lawler

1 L ← L \ {vk−1}

2 X(vˆ k−1)← ˆX(vk−1)\ {xk−1}

3 tant que ˆX(vk−1)6= ∅ faire

4 Créer le nœud v fils de vk−1 suivant le schéma ML

5 X(vˆ k−1)← ˆX(vk−1)\ ˆX(v)

6 Déterminer x(v) la solution optimale du problème P( ˆX(v), ˆf )

7 L ← L ∪ {v}

8 xk∈ arg min

v∈L

ˆ f (x(v))

Il existe d’autres algorithmes de k-best. À titre d’exemple citons les travaux de Ha-macher dans (HaHa-macher et Queyranne, 1985), (Chegireddy et HaHa-macher, 1987) et (Ha-macher, 1995). Il s’agit d’algorithmes de Branch and Bound avec séparation binaire. Afin d’utiliser ces algorithmes, il est nécessaire de savoir trouver la solution optimale et la se-conde meilleure solution pour chacun des sous-problèmes définis par la séparation. Nous souhaitons maintenir un niveau de généralité que ces algorithmes ne permettent pas à cause de cette restriction. De plus et comme nous l’avons souligné dans la section 1.3.2.b,

l’algorithme de Murty (1968) pour le problème d’affectation est plus performant que les algorithmes de k-best proposés par Chegireddy et Hamacher (1987). Nous avons présenté plus de détails sur l’algorithme de Murty-Lawler et sur ces algorithmes alternatifs pour le problème d’affectation dans la section 1.3.2.

Remarques sur la complexité

Comme nous allons le voir, la complexité de l’algorithme 2.2 est en O(n(C(n) + n)), où O(C(n)) est la complexité des problèmes P( ˆX(v), ˆf ) et n la taille du pro-blème P( ˆX, ˆf ). Nous commentons également dans ce qui suit la structure de données dans laquelle nous stockons l’ensemble L, puis nous analysons de manière succincte la complexité de l’algorithme 2.2.

Il est pratique de stocker les nœuds de l’ensemble L dans un ordre non décroissant suivant la valeur de leurs solutions optimales selon la fonction ˆf . Une structure de données de type tas convient parfaitement à l’implémentation de l’ensemble L. Sans rentrer dans les détails de la mise en œuvre informatique, l’insertion d’un nouvel élément dans un tas ou l’extraction de l’élément minimal et la remise en état du tas se fait en O(log t), où t est la taille de ce tas. Or, la taille de l’ensemble L ne peut pas dépasser dans notre cas le nombre de solutions réalisables dans ˆX, qui est lui-même une partie de {0, 1}n, ainsi |L| vaut au plus 2n. Donc la complexité de l’insertion et de l’extraction d’un nœud de l’ensemble L est en O(n).

Le nœud vk−1 qui contient la k − 1ème

meilleure solution est extrait de L et le tas est arrangé avec une complexité en O(n). Puis le nœud vk−1 est séparé en O(n) nœuds fils. Chaque nouveau nœud fils v contient le problème P(v) qui est résolu avec un effort au plus en O(C(n)), et le nœud v est inséré dans l’ensemble L avec une complexité en O(n). La kème

meilleure solution est celle associée au premier nœud dans l’ensemble L.

La complexité de l’algorithme 2.2 est donc en O(n + n(C(n) + n)), qui vaut après simplification O(n(C(n) + n)).

Il est possible d’améliorer la complexité de l’algorithme 2.2 en réduisant soit la com-plexité du problème P(v), ou bien le nombre de nœuds fils engendrés par la séparation de vk−1. Prenons l’exemple de l’algorithme de k-best pour le problème de l’arbre cou-vrant de poids minimum (MST) dans un graphe valué non-orienté G = (V, U). L’arbre couvrant est un problème de sélection d’arêtes, aussi à chaque séparation à la manière de Murty-Lawler, O(|U|) fils sont créés. L’un des meilleurs algorithmes pour MST est une variation de l’algorithme de Prim proposée par Gabow et al. (1986). Sa complexité est de l’ordre de O(|U| log β(|V |, |U|)), où β(|V |, |U|) une fonction faiblement croissante. La complexité de la recherche du kème meilleur arbre couvrant devrait être alors de l’ordre de O(|U|(|U| log β(|V |, |U|) + |U|)). Or Katoh et al. (1981) calculent la kèmemeilleure so-lution en O(|U|) lorsque les (k − 1) meilleures soso-lutions sont connues. L’objectif ici n’est pas l’étude du problème de l’arbre couvrant mais l’illustration des possibilités d’amé-lioration de la complexité de l’algorithme 2.2 compte tenu des propriétés du problème

étudié.