• Aucun résultat trouvé

Dans cette dernière partie de l’introduction, je propose une revue d’algorithmes ou de techniques existantes pour certains problèmes présentés dans le bestiaire.

1.4. État de l’art

1.4.1 Algorithmes exacts

Nous considérons ici des algorithmes exacts pour résoudre des problèmes NP-difficile. Pour un aperçu plus détaillé, je renvoie au livre de Fomin et Kratsch ([58]).

Recherche exhaustive

La première méthode, la plus générale, est de considérer toutes les solutions pour un problème donné. D’après la définition d’un problème d’optimisation combinatoire vue section 1.2.1 (page 15). Il y a encore des problèmes pour lesquels on ne connait pas d’algorithme exact plus rapide, par exempleMAX SAT

(voir page 25).

Les algorithmes de ce genre sont faciles à mettre en pratique, et assez rapides sur des très petites instances : en ce sens ils sont parfois la meilleure solution pour résoudre des problèmes complexes sur des instances très petites.

Branchement

Les algorithmes de branchement consistent à « réduire » une instance de taille n à deux ou plusieurs instances de taille inférieure à n. Ici, « réduire » s’entend dans le sens où la solution sur les sous-instances permet de trouver en temps polynomial une solution sur l’instance de départ. Un formalisme plus précis est proposé de ce qu’est une règle de branchement dans le chapitre 3.

Les algorithmes de branchement sont la solution naturelle pour implémenter des recherches exhaustives : considérons par exemple le problèmeMAX IS. Si on considère une instance G(X,E) du problème MAX IS, on peut choisir un sommet v au hasard, et considérer deux sous-instances21 G1 = G[X\v] et G2= G[X\N[v]]. Ces deux sous-instances correspondent à la situation naturelle si on choisit de prendre le sommet v dans la solution, ou de l’en exclure. Elles sont alors résolues récursivement, donnant les solutions S1et S2; la solution finale est le maximum entre |S1| et |S2| + 1.

Précisons également que si un branchement aboutit à k instances dont la taille est réduite de a1, . . . , ak, alors la complexité du branchement T (n) doit vérifier T (n) > k X i=1 T (n− ai) (1.1)

Cela conduit à une complexité On), où Γ est la solution minimale de l’in-équation 1 > k X i=1 Γ−ai (1.2)

Des techniques pour améliorer les algorithmes de branchement ou leur analyse sont connues. Nous les détaillons ici.

1. Étude de cas

Cette technique consiste à étudier différents cas possibles au moment du bran-chement. Elle est spécifique à chaque problème, on en trouvera un exemple dans [27] pourMAX SAT. Ainsi, pour ce dernier problème, considéré du point de vue du nombre m de clauses dans l’instance, on passe progressivement de T (m) > T (m− 1) + T (m − 1) (branchement naïf) de complexité O(2m) au branchement T (m) > T (m −1)+T (m−2) (branchement naïf après élimination des littéraux de fréquence 2) de complexité O(1.7m). L’article cité propose une décomposition en 17 cas dont le pire conduit à une complexité en moins de O(1.32m).

2. Programmation dynamique et mémorisation

La programmation dynamique est apparue dans les années 1940, et consiste à calculer les solutions sur des petites sous-instances, puis à mémoriser les solu-tions pour ne plus réeffectuer ces calculs. Les solusolu-tions sont donc calculées « du bas vers le haut ». Cette technique est utilisée dans des algorithmes polynomiaux aussi bien que des algorithmes exponentiels.

Par exemple, l’algorithme de Levenshtein ([74]) permet de calculer la distance d’édition entre deux chaines de caractère en temps polynomial (quadratique en la taille de la chaine la plus longue).

Dans la partie exponentielle, on peut citer l’algorithme qui permet de résoudre le problèmeMIN TSPavec une complexité O(2n), alors que le nombre de chemins possibles est n!. Pour cela, l’algorithme considère tous les sous-ensembles de sommets à visiter, ordonnés par taille croissante, et calcule pour chacun les chemin les plus court passant par ces sommets, et se terminant par un sommet choisi. Le nombre de telles sous-solutions est exponentiel (borné par n × 2n), mais le calcul de chaque solution est polynomial.

L’inconvénient d’une telle méthode est qu’elle nécessite beaucoup d’espace de calcul : tous les résultats intermédiaires doivent être stockés. Il y a des exemples d’algorithmes pour lesquels un compromis peut être ajusté entre temps de calcul et mémoire nécessaire.

On peut aussi combiner l’approche dynamique avec l’approche par arbre de branchement de la façon suivante : on commence par résoudre (et mémoriser)

1.4. État de l’art un problème donné sur toutes les sous-instances de taille inférieure à un k

donné, puis on effectue l’algorithme de branchement sur le graphe initial. L’algorithme de branchement s’arrête plus tôt grâce aux résultats mémorisés, et complète en fouillant dans sa base de solutions. Une application de ce principe se trouve dans [57], où les auteurs fournissent un algorithme de complexité O(1.5263n) en espace polynomial, mais peuvent descendre à O(1.5137n) en espace exponentiel, en mémorisant les résultats au fur et à mesure.

3. Branchements multiples

Pour certains problèmes, on dispose de plusieurs cas de branchement, et le plus mauvais donne une complexité médiocre. Il est parfois possible d’améliorer l’analyse si le pire des cas ne peut pas se produire plusieurs fois de suite. On choisit alors de regarder la complexité sur plusieurs branchements de suite, et on garde à nouveau la pire.

Comme exemple simple, on propose la situation suivante : le problème Π amène deux situations de branchement. La première a deux alternatives, diminuant chacune la taille de l’instance de 1. La deuxième a deux alternatives, diminuant la taille respectivement de 1 et de 2. Les deux branchements ont une complexité respective (d’après 1.2) de O(2n) et O(1.618n). Le pire cas est donc le pre-mier. Cependant, si on sait qu’après un « pire » branchement, une au moins des branches conduira immédiatement au meilleur branchement, on pourra améliorer l’analyse (voir figure 1.9) : le pire branchement possède alors trois branches : l’une dans laquelle la taille diminue de 1, la deuxième dans laquelle la taille diminue de deux, et la troisième dans laquelle la taille a diminué de 3. La complexité est alors O(1.839n).

n n− 1 n− 1 O(2n) n n− 2 n− 1 O(1.618n)

(a) Deux branchements sont possibles.

n

n− 1

O(1.839n)

n− 1

n− 2 n− 3

(b) Si on enchaine les deux branchements, on a une meilleure complexité.

Cette technique a par exemple été mise en œuvre sous le nom de complexité amortie dans [29].

4. Measure and Conquer

La méthode du Measure and Conquer est introduite en 2005 dans [57]. Les auteurs constatent que l’analyse des algorithmes (en particulier des algorithmes de branchement) s’effectue toujours vis-à-vis de mesures simples (typiquement, la taille de l’instance). Ils proposent alors une mesure différente, qui dépend de caractéristiques locales des éléments de l’instance (typiquement, le degré d’un sommet, ou la taille d’un ensemble, . . .).

L’analyse des branchements est alors raffinée, et conduit parfois à de larges amé-liorations dans la complexité. Cela peut se comprendre intuitivement parce que cette nouvelle mesure prend en compte un sommet dont le degré diminuerait (respectivement d’un ensemble dont la taille décroit) après un branchement, choses impossible à prendre en compte si la seule mesure est le nombre de sommets (respectivement le nombre d’ensembles).

Dans l’article cité, cela diminue la complexité pour résoudre le problème MINIMUMINDEPENDENTDOMINATINGSET(MIN IDS) de O(20.850n) à O(20.598n). Cette méthode a par la suite été fructueusement appliquée (voir [55] ou [90] par exemple) à d’autres problèmes.

5. Bottom-up

La méthode du bottom up a été utilisée pour améliorer l’analyse d’un algorithme pourMAX IS. Dans ce problème, l’analyse était confrontée à un paradoxe : s’il existe un sommet de degré élevé, on peut brancher avantageusement sur lui (quand on ajoute un sommet, on supprime tous ses voisins, ce qui diminue beaucoup la taille de l’instance).

Inversement, si tous les degrés sont faibles, on dispose d’algorithmes efficaces. Dans [20], les auteurs proposent de tirer avantage de cette situation pour obtenir de meilleurs complexités pour des instances de degré moyen croissant.

1.4.2 Algorithmes approchés

Exigence de garantie

Comme on l’a vu page 9, les algorithmes approchés n’offrent pas tous la garantie de qualité que l’on peut souhaiter. La spécificité de notre approche est de pouvoir borner l’erreur commise par notre algorithme.

La manière classique de le faire est de mesurer le ratio d’approximation, à savoir le pire rapport entre une solution proposée par un algorithme donné et la solution optimale pour cette instance.

1.4. État de l’art On notera I ∈ P une instance du problème P , OPTI la valeur de sa solution

optimale et SI la valeur de la solution apportée par l’algorithme. On définit alors le ratio d’approximation ρ pour un problème P de minimisation par :

ρ = max I∈P

SI

OPTI (ρ > 1) et inversement pour un problème de maximisation :

ρ = min I∈P

SI

OPTI (ρ 6 1)

Pour donner un exemple, nous proposons ici un exemple avec l’algorithme 1.4, qui résoudMIN VCavec un ratio d’approximation 2.

ALGORITHME1.4 – Algorithme approché à 50% pourMIN VC Entrées: un grapheG(V,E)

Sorties: une couverture minimale (ratio 2)

1 S ←− ∅ 2 for(i,j)∈ E do 3 ifi6∈ S and j 6∈ S then 4 S ←− S ∪ {i,j} 5 end 6 end 7 Renvoyer S

Par construction, cet algorithme renvoie bien une solution au problème posé. Il se trouve qu’il rajoute des sommets d’arêtes non adjacentes dans le graphe (et il en rajoute deux par arête). Il est facile de montrer que pour chacune de ces arêtes, il était nécessaire d’avoir au moins une de ces extrémités dans la solution. On a donc rajouté, dans le pire des cas, deux fois trop d’arêtes. Par conséquent,MIN VCest approximable en temps polynomial avec un ratio 2.

Dans certaines situations, on veut un ratio d’approximation qui dépende de paramètres de l’instance (typiquement, la taille). Ainsi, l’algorithme 1.5 réalise une approximation pour MAX IS avec un ratio√n : s’il existe un stable dont la taille est comprise entre√n et n, alors l’algorithme renvoie un stable de taillen (ce qui assure le bon ratio). Sinon, il renvoie un stable de taille 1, ce qui assure ici encore le ratio demandé. Le nombre de sous-ensembles à estimer est

n n



ALGORITHME1.5 – Algorithme approché avec ratio√n pour

MAX IS Entrées: un grapheG(V,E)

Sorties: un stable maximum (ration)

1 forS sous-ensemble de taillen de V do

2 ifS est stable then

3 Renvoyer S

4 end

5 end

6 Renvoyer un ensemble avec un unique sommet.

Approximation polynomiale et limites

Dans le domaine de l’approximation à ratio fixé, les algorithmes capables de tourner en temps polynomial par rapport à la taille de l’instance (comme l’algorithme 1.4) forment un ensemble très étudié. On dit qu’un problème est

APX s’il existe un tel algorithme, et on trouve pour certains problèmes des

améliorations régulières dans les ratios d’approximation. Je donne la table 1.4, largement inspirée de [4], comme indication des améliorations régulières qu’on obtient dans ce domaine.

TABLE 1.4 – Amélioration des ratios d’approximation pour la résolution de

MAX SAT

Année Ratio Référence

1974 0.5 [68] 1981 0.618 [76] 1989 0.666 [73] 1992 0.75 [92] 1995 0.7584 [63] 1996 0.765 [6] 1997 0.77 [5] 2002 0.7846 [4]

Cependant, ce domaine connait aussi des résultats négatifs. Pour certains problèmes, en effet, même une résolution approchée à ratio constant est un résultat NP-difficile : c’est le cas de MIN TSP, auquel se réduit le problème de

1.4. État de l’art trouver un chemin hamiltonien dans un graphe (il suffit de rendre le graphe

complet, en mettant un poids très élevé aux arêtes qu’on rajoute : la résolution duMIN TSPne peut pas emprunter de telle arête s’il existe un chemin qui s’en prive, c’est-à-dire un chemin hamiltonien).

En 2001, un prix Gödel a été décerné à 9 chercheur-se-s, pour leur travail sur le théorème PCP. Ce théorème, qui donne une égalité entre deux classes de complexité, a permis de montrer la difficulté à approcher un grand nombre de problèmes d’optimisation combinatoire. En particulier, sous réserve que P 6= NP, on peut par exemple montrer queMAX ISest inapproximable à ratio constant (et mieux : on ne peut pas l’approcher pour des ratios variables de la forme 1/n1−ε, voir [93]). Une autre conséquence classique est l’inapproximabilité d’une variante de MAXIMUM3-SATISFIABILITY(MAX 3-SAT) (où toutes les clauses ont exactement trois littéraux) avec un ratio strictement meilleur que 7/8.

Approximation exponentielle

Devant les résultats négatifs précédents, deux idées naturelles font surface. La première consiste à abandonner l’idée de ratio garanti, et de fournir des algorithmes polynomiaux approchés. Souvent, la qualité de ces algorithmes est mesurée via des expérimentations sur des problèmes concrets, le pire des cas étant soit très mauvais, soit trop difficile à évaluer précisément.

L’idée que nous avons suivie et à laquelle cette partie est consacrée consiste à conserver la garantie exigée, mais à renoncer à avoir des algorithmes poly-nomiaux. À la place, des algorithmes exponentiels sont utilisés, mais avec une complexité asymptotique meilleure que celle de la résolution exacte.

Un premier résultat dans ce domaine est donné dans [37], sur le problème

MAX SAT. Par la suite, cette thématique a été explorée et appliquée à des pro-blèmes variés pendant la thèse de Nicolas Bourgeois (MAX IS,MIN VC,SET COVER, voir [18], [17] or [16]).

Un algorithme est alors présenté comme un couple (ρ,γ), signifiant qu’on sait obtenir un ratio d’approximation ρ avec une complexité On). Il est souvent pratique de présenter ces couples sous forme d’un graphique, comme on en trouvera dans les pages suivantes.

Propriétés héréditaires

Un des résultats d’approximabilité modérément exponentielle est la notion de splitting, qu’on peut utiliser sur des problèmes concernant des ensembles avec des propriétés héréditaires.

Définition 1.3 (Propriété héréditaire). Une propriétéπ est héréditaire si tout sous-ensemble d’un ensemble vérifiant π vérifie également π.

Ainsi, la propriété d’être indépendant pour un ensemble de sommets d’un graphe est bien héréditaire : tout sous-ensemble d’un ensemble indépendant est lui-même indépendant. On a alors le théorème suivant, dans [19] :

Théorème 1.4. Soit le problèmeP , qui consiste à trouver un sous-ensemble maximum vérifiant une propriété héréditaire π, et A un algorithme qui fonc-tionne en On) pour résoudre ce problème.

Pour tout ρ ∈ Q, ρ 6 1, on peut trouver un algorithme donnant une solution ρ-approchée, avec une complexité Oρn).

Démonstration. La preuve est constructive : une analyse de l’algorithme 1.6 montre qu’il répond à la question pour un ratio 1/2. Le détail de la preuve ainsi que sa généralisation sont donnés dans le chapitre 2.

ALGORITHME1.6 – Algorithme approché (ratio 1/2) pour le problème P

Entrées: un ensembleE de taille n

Sorties: un sous-ensemble maximum deE vérifiant π (ratio 1/2)

1 Partager E en deux ensembles E1et E2de taille identique.

2 Appliquer l’algorithme A sur E1et stocker la solution S1.

3 Appliquer l’algorithme A sur E2et stocker la solution S2.

4 Renvoyer la plus grande solution entre S1et S2.

On peut représenter ce résultat sous forme de graphique, comme sur la figure 1.10

Notion de schémas

Dans le cas précédent, on a la chance d’avoir affaire à un problème pour lequel on peut facilement ajuster la complexité permise dans l’algorithme pour obtenir le ratio d’approximation voulu. On définit ainsi la notion de schéma exponentiel d’approximation :

Définition 1.5. Un problème de maximisation admet un schéma exponentiel

d’approximation si, pour chaque ratio d’approximation ρ, on peut trouver un algorithme ρ-approché avec une complexité asymptotique meilleure que la complexité d’un algorithme exact (y compris à polynome près).

1.4. État de l’art

γ

1 Complexité

0 1 Ratio

FIGURE1.10 – Analyse de la méthode de splitting pour un problème pour lequel on dispose d’un algorithme exact de complexité On).

Cette définition s’inspire de la complexité polynomiale, et en particulier de la classe PTAS. Formellement, l’existence d’un schéma assure de gagner en complexité dès qu’on relâche le ratio d’approximation. Dans la pratique, on peut parfois espérer « relier » de manière continue un algorithme exact exponentiel à un algorithme polynomial approché à ratio garanti.

Un mot sur les tests pratiques

Contrairement à une grande partie des publications en approximation sans garantie, les articles constituant cette thèse ne contiennent pas de tests pratiques des algorithmes proposés, mais uniquement des démonstrations formelles de leur efficacité. Il y a principalement deux raisons à ça :

a) Tout d’abord, on pourrait envisager d’utiliser de tels résultats expéri-mentaux pour améliorer l’analyse des algorithmes. Ainsi, on pourrait imaginer disposer d’une courbe de complexité d’un de nos algorithmes, constater qu’elle « ressemble » à une courbe de la forme On), et se servir de cette intuition pour améliorer notre analyse de l’algorithme. Malheureusement, ce serait uto-pique : il est difficile d’obtenir un jeu de données suffisant pour des tailles très variées, parce que les tailles critiques des problèmes qu’on peut considérer sont

assez faibles. Pour ces tailles, les facteurs polynomiaux que nous masquons en complexité asymptotique ne sont pas du tout négligeables, et brouilleraient ces mesures.

b) Ensuite, on serait tenté d’obtenir de tels résultats expérimentaux pour confronter nos algorithmes approchés à d’autres algorithmes existants, pour montrer que les nôtres sont plus rapides. Malheureusement, ici aussi, nous n’espérons pas grand chose d’une telle mise en pratique : les algorithmes que nous produisons sont très simplifiés pour permettre une analyse efficace. Il faudrait leur ajouter des heuristiques, des coupes, des améliorations pour les rendre compétitifs, et cela demanderait un travail complet (voir par exemple [3] comme exemple de tel travail sur leMIN VC). Bien que très utile, cette approche sortait du cadre de cette thèse, et nous avons choisi, pour leur lisibilité, de réduire les algorithmes à leur plus simple expression.

1.4.3 Algorithmes paramétriques

Paramétrisation et classe FPT

Un dernier aspect pour conclure cette introduction concerne les algorithmes paramétriques. Comme leur nom l’indique, dans ce domaine, on considère des instances d’un problème avec un paramètre particulier. Celui-ci peut-être le degré maximum, ou minimum des sommets d’un graphe, ou bien la taille de la solution espérée (on parle alors de paramètre standard), ou même la taille de la solution à un autre problème d’optimisation (on parlera en particulier du treewidthd’un graphe, ou de la taille d’une couverture comme paramètre).

Le but est alors d’exprimer la complexité d’un algorithme non plus sim-plement en fonction de la taille de l’instance n (complexité classique), mais également en fonction du paramètre k. On espère ainsi avoir une complexité meilleure, au moins pour certaines valeurs de k.

Illustrons cela avec un exemple. Considérons le problème MAX ISavec le paramètre standard. Il s’agit alors d’un problème de décision : « Peut-on, dans un graphe donné de taille n, trouver un ensemble indépendant de taille k ? ». Un algorithme naïf qui consiste à énumérer tous les sous-ensembles de taille k, soit

k n 

sous-ensembles. On peut majorer grossièrement ce nombre et obtenir une complexité O(nk), ce qui donne une complexité qui peut être plus intéressante que le O(2n) de l’algorithme en complexité classique. On dit en l’occurence que le problèmeMAX ISmuni du paramètre standard est dans la classe XP.

Définition 1.6 (XP). Un problème paramétriqueP est dans XP s’il existe un algorithme polynomial résolvant P en temps polynomial pour toute valeur fixée

1.4. État de l’art du paramètre.

Un grand nombre de problèmes paramétriques sont dans XP, c’est le cas de bien des problèmes à cardinalité fixée munis de leur cardinal comme paramètre (par exemple,MAX K-COVERAGEmuni de k).

À l’inverse, le problème de coloration d’un graphe n’est pas dans XP : détecter une coloration, même à trois couleurs, est NP-difficile dans le cas général (et on ne dispose donc pas d’algorithme polynomial). De même, en se servant du fait queMAX ISest NP-difficile même dans des graphes de degré 3, on en conclut queMAX IS, muni du degré du graphe n’est pas dans XP.

Dans [44], les auteurs introduisent une autre classe essentielle à la com-plexité paramétrique :

Définition 1.7 (FPT). Un problème paramétrique est dans FPT (pour Fixed

Parameter Tractable) s’il existe un algorithme résolvant une instance de taille n avec un paramètre k en temps O(f (k)p(n)), où p est une fonction polynomiale. Cette définition est donc plus restreinte que XP : le degré du polynôme ne peut pas varier en fonction du paramètre. On peut donner comme exemple l’al-gorithme 1.7 pour le problèmeMIN VC. L’analyse de cet algorithme est simple : il cherche une couverture minimale en procédant arête par arête. La décroissance du paramètre impose de relancer l’étape 3 au plus 2k fois, ce qui assure un temps de calcul en O(2k) au total (le reste des opérations est polynomial).

Plus généralement, l’intuition qui se trouve souvent derrière l’appartenance à la classe FPT, c’est l’existence d’un algorithme de branchement tel que chaque nœud a un nombre borné de branches, et chaque branche assure une

Documents relatifs