Que faire face à un problème difficile ?

publicité
Que faire face à un problème difficile ?
Frédéric Meunier
23 novembre 2016
Ecole des Ponts, France
Contexte
Soit le problème suivant, avec X fini.
Min
f (x)
s.c. x ∈ X .
Exemples
1. X est l’ensemble des s-t chemins d’un graphe avec une
longueur ≥ 0 associée à chaque arc, et f (x) est la
longueur du chemin x.
2. X est l’ensemble des couplages parfaits d’un graphe
biparti, dont les arêtes sont pondérées, et f (x) est le poids
total d’un couplage x.
3. X est l’ensemble des cycles hamiltoniens d’un graphe
pondéré, et f (x) est le poids d’un cycle hamiltonien x.
Résoudre ?
Pour le moment, nous avons vu le cas des problèmes
polynomiaux, et nous avons donné des algorithmes qui les
résolvent.
C’est le cas des deux premiers problèmes, mais pas du
troisième.
Les problèmes industriels sont souvent NP-difficiles.
Que fait-on dans ces cas là ?
Quelques méthodes
Si on veut un algorithme rapide, mais ne donnant pas
forcément la solution optimale :
heuristique ou métaheuristique
(algorithme approché)
Si on veut un algorithme donnant la solution optimale, mais
sans être nécessairement rapide
algorithme exact
Branch-and-Bound
Description Branch-and-Bound
On dispose d’une “borne inférieure” λ : P(X ) → R qui a toute
partie Y de X , associe
λ(Y ) ≤ min f (x).
x∈Y
On suppose que λ se calcule “facilement” (par exemple, en
temps polynomial).
L’algorithme maintient
I
une collection Y de parties de X telle que
minimum de f (x) sur X
I
la meilleure solution courante x̃.
S
Y contient un
Idée principale. On peut se débarrasser de Y ∈ Y si
λ(Y ) ≥ f (x̃).
Itération
On part d’une solution réalisable quelconque x̃. Une itération
est
1. Choisir une partie Y de Y.
2. Partitionner Y en parties Y10 , Y20 , . . . , Ys0 .
3. Supprimer Y de Y.
4. Faire pour i = 1, . . . , s :
• si l’on trouve directement y ∈ Yi0 minimisant f (y) et si
f (y) < f (x̃), poser x̃ := y
• si λ(Yi0 ) < f (x̃), poser Y := Y ∪ {Yi0 }.
Calcul d’une solution réalisable
On trouve directement y ∈ Yi0 minimisant f (y) par exemple
• quand Yi0 est un singleton, ou
• quand par chance le calcul de λ(Yi0 ) fournit une solution
dans Yi0 (cas de la PLNE et de la relaxation linéaire
ci-après).
Schéma en arbre
probl eme de minimisation
de f sur X
X
λ(Y ) ≤ minx∈Y f (x) pour
tout Y ⊆ X
Y1
Y2
Y3
Y4
Y20
Y10
x̃
si λ(Y10 ) ≥ f (x̃), il ne sert a rien d’explorer cette région.
Y5
Y30
meilleure solution courante
Performances
Les perfomrances seront d’autant plus grandes que la borne
est de bonne qualité : pour un problème de minimsation, plus
elle grande, plus elle permettra de “couper”.
La façon de choisir et partitionner Y (le branchement) est
également d’une grande importance.
Exemple : programmation linéaire en nombres entiers
La programmation linéaire en nombre entiers (PLNE) se
modélise, avec A une matrice m × n à coefficients rationnels,
et b ∈ Qm et c ∈ Qn
Min
s.c.
c·x
Ax ≤ b
x ∈ Zn .
Contrairement à la programmation linéaire usuelle, ce
problème est NP-difficile.
Application du branch-and-bound pour la PLNE
Une borne inférieure à la valeur optimale vplne d’un PLNE
s’obtient en relâchant la contrainte d’intégrité :
Min
s.c.
c·x
Ax ≤ b
x ∈ Rn ,
et notons vpl sa valeur optimale.
On a
vplne ≥ vpl .
Exemple
Min
s.c.
x1 + 5x2
4x1 − 2x2 ≤ 13
2x1 + 8x2 ≥ 11
x1 , x2 ∈ Z.
On commence par résoudre ce programme en ne demandant
que x1 , x2 ∈ R (on relâche la contrainte d’intégrité).
On obtient : x1 = 3, 5; x2 = 0, 5; v = 6.
On “branche alors sur x1 ” :
Min
s.c.
x1 + 5x2
4x1 − 2x2 ≤ 13
2x1 + 8x2 ≥ 11
x1 ≤ 3
x1 , x2 ∈ Z.
Min
s.c.
x1 + 5x2
4x1 − 2x2 ≤ 13
2x1 + 8x2 ≥ 11
x1 ≥ 4
x1 , x2 ∈ Z.
Tout l’algorithme
En commençant toujours par la branche de gauche.
x1 = 3, 5
x2 = 0, 5
v=6
x1 ≤ 3
x1 ≥ 4
x1 = 3
x2 = 0, 625
v = 6, 125
x2 ≥ 1
x1 = 1, 5
x2 = 1
v = 6, 5
x1 ≥ 2
x2 ≤ 0
Non réalisable
x1 ≤ 1
x1 = 1
x2 = 1, 125
v = 6, 625
x1 = 2
x2 = 1
v=7
x2 ≥ 2
x1 = −2, 5
x2 = 2
v = 7, 5
abandon
x2 ≤ 1
Non réalisable
x1 = 4
x2 = 1, 5
v = 11, 5
abandon
Remarques sur la PLNE
Pour la PLNE, on choisit souvent de brancher sur la variable la
“moins” entière, en partant du nœud de l’arbre pour lequel la
relaxation est la meilleure.
En pratique : ne jamais reprogrammer un branch-and-bound
pour la PLNE. Il existe de nombreux solvers – libres ou payants
– extrêmement performants.
Exemple de solver libre : GLPK.
Heuristiques et métaheuristiques
Heuristiques
Heuristique = algorithme ad hoc pour un problème donné, qui
donne en général de bonnes solutions pour le problème.
On demande souvent aux heuristiques d’être rapide.
Il n’y a pas de méthode générale pour les concevoir.
Exemple : plus proche voisin pour le voyageur de commerce.
Métaheuristiques
Métaheuristique = méthode générique qui peut s’appliquer à la
plupart des problèmes.
On distingue deux grandes familles : les recherches locales et
les métaheuristiques à population.
Recherche locale
On part d’une bonne solution réalisable de départ (trouvée par
heuristique par exemple).
On essaie d’améliorer la solution courante en procédant à des
“modifications” locales.
Exemple : coloration de graphe
Soit G = (V , E) un graphe, k un entier. Trouver la coloration
c : V → [k ] telle que le nombre d’arêtes uv avec c(u) = c(v)
soit minimal.
I
I
Colorer arbitrairement G avec k couleurs.
Répéter :
• Chercher une arête monochromatique dont la modification
de couleur d’une de ses extrémités conduit à diminuer le
nombre total d’arêtes monochromatiques ;
• Si une telle arête existe, faire cette modification.
• Sinon, c’est fini.
Recherche locale : version naïve
I
Partir d’une solution réalisable x.
I
Répéter : S’il existe une modification locale qui permette
d’améliorer x, exécuter cette modification locale et appeler
x cette nouvelle solution.
Problème. Minimum local !
Méthode tabou
Objectif. Éviter de plonger trop vite vers un minimum local.
Idée. Maintenir une liste L de solutions réalisables tabous de
taille constante.
I
I
Partir d’une solution réalisable x.
Répéter : S’il existe une modification locale qui permette
d’améliorer x sans générer une solution dans L :
I
I
I
I
mettre x à la fin de L
exécuter cette modification locale,
appeler x cette nouvelle solution
retirer le premier élément de la liste L
On retourne la meilleure solution visitée.
Problème. Minimum local ! (mais meilleur)
Recuit simulé
Objectif. Éviter de plonger trop vite vers un minimum local.
Idée. Tirer au hasard la modification locale ; accepter une
solution moins bonne, avec une probabilité qui décroît au cours
du temps
I
I
Partir d’une solution réalisable x.
Répéter :
I
I
I
Tirer au hasard la modification locale. Soit y la solution
obtenue par celle-ci.
Si y est meilleure : exécuter cette modification locale et
appeler x cette nouvelle solution.
Sinon, exécuter cette modification locale avec une certaine
probabilité et appeler x cette nouvelle solution.
On retourne la meilleure solution visitée.
Problème. Minimum local ! (mais meilleur)
Exemple de probabilité
On veut une probabilité décroissante en fonction du temps et
de |f (x) − f (y)|.
f est la fonction objectif.
Exemple typique : à la ième itération, accepter y quand
f (y) > f (x) avec probabilité
e
avec Ti de la forme
−
f (y)−f (x)
Ti
Ti = T0 β i
ou
Tk :=
1
α + si
.
Autres métaheuristiques
Algorithmes évolutionnaires :
• solution réalisable = chromosome.
• on maintient une population de chromosomes.
• on autorise les chromosomes à se croiser avec une
probabilité d’autant plus grande que les chromosomes
sont de qualité.
• les chromosomes peuvent muter.
• les plus mauvais chromosomes meurent, laissant la taille
de la population constante
Crucial : codage d’une solution réalisable sur un chromosome,
nature du croisement (qui doit maintenir les avantages
compétitifs de ses parents).
Autres métaheuristiques
Colonie de fourmis :
• une population de fourmis explore l’espace des solutions.
• une fourmi dépose d’autant plus de phéromones qu’elle a
visité récemment une bonne solution.
• une fourmi va privilégier des explorations dans des régions
plus marquées par les phéromones.
• les phéromones s’évaporent au bout d’un moment.
Evaluation
Ces métaheuristiques ne dispensent pas d’évaluation
scientifique de la qualité de la solution. En particulier,
I
par le calcul de bornes.
I
par l’expérimentation sur des familles d’instances.
Téléchargement