Documente Academic
Documente Profesional
Documente Cultură
Paul Feautrier
20 mai 2004
2
3 Méta-heuristiques 43
3.1 Séparation et évaluation ou Branch-and-Bound . . . . . . . . . . 43
3.1.1 Algorithme . . . . . . . . . . . . . . . . . . . . . . . . . . 43
3.1.2 Évaluation . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.1.3 Stratégie et Tactiques . . . . . . . . . . . . . . . . . . . . 46
3.2 Programmation Dynamique . . . . . . . . . . . . . . . . . . . . . 48
3.3 Exploration aléatoire . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.3.1 Amélioration itérative . . . . . . . . . . . . . . . . . . . . 53
3.3.2 Recuit simulé . . . . . . . . . . . . . . . . . . . . . . . . . 54
3.3.3 La méthode Tabou . . . . . . . . . . . . . . . . . . . . . . 57
3.3.4 Algorithmes génétiques . . . . . . . . . . . . . . . . . . . 58
3.4 Conclusion générale . . . . . . . . . . . . . . . . . . . . . . . . . 59
4 Table des matières
Optimisation sans
contraintes
Plan
– Introduction et principaux concepts
– Optimisation continue sans contrainte
– Programmation linéaire
– Optimisation continue sous contrainte
– Optimisation combinatoire
– Programmation linéaire en nombres entiers.
– Exploration
– Métaheuristiques
– Programmation dynamique
– Éléments de Complexité
Recherche opérationnelle
modélisation
optimisation action
6 Optimisation sans contraintes
Informatique ou mathématique ?
Mathématique Informatique
Recherche Opérationelle
Complexité
Vocabulaire
Forme canonique :
trouver x ∈ D qui mi- courbes de niveau de
nimise f . la fonction objectif
contraintes
local
global
Convexité
Un ensemble S est convexe si, pour toute paire de points a, b de S, S contient
aussi le segment ab.
a, b ∈ S ⇒ (0 6 λ 6 1 ⇒ λa + (1 − λ)b ∈ S.
Fonction convexe
– f est convexe dans un ensemble convexe S si et seulement si :
x, y ∈ S, 0 6 λ 6 1 ⇒ f (λx + (1 − λ)y) 6 λf (x) + (1 − λ)f (y)
Intérêt de la convexité
Théorème 1.1. Si f est convexe dans un ensemble convexe S, alors tout mi-
nimum local de f est un minimum global.
Démonstration. Soit a un minimum local, et V l’ouvert contenant a dans lequel :
x ∈ V ⇒ f (x) > f (a).
Si on suppose qu’il existe un point b ∈ S tel que f (b) < f (a) alors on a :
f (λa + (1 − λ)b) 6 λf (a) + (1 − λ)f (b).
Il est possible de trouver un λ suffisamment proche de 1 pour que x =
λa + (1 − λ)b soit dans V . Contradiction en ce point :
f (x) 6 λf (a) + (1 − λ)f (b) 6 f (a),
Classification
– Selon la nature des variables de décision :
– Optimisation continue.
– Optimisation discrète ou optimisation combinatoire.
– Selon la nature des contraintes :
– Pas de contraintes ou contraintes faciles à satisfaire (un segment de la
droite réelle) : optimisation sans contraintes.
– Optimisation sous contraintes : il est difficile de trouver un point satis-
faisant les contraintes.
– Propriétés spéciales des éléments du problème : linéarité, convexité.
Optimisation multicritère
– Forme canonique : trouver x ∈ D qui minimise f1 , f2 , . . .
min f1 (x)
min f2 (x)
...
x ∈ D
– Le problème est évidemment mal posé. Quel sens peut on lui donner ?
– Exemple : on doit concevoir un équipement électronique qui doit exécuter
un algorithme donné le plus vite possible et pour le moindre prix.
– f1 est le temps d’exécution de l’algorithme.
– f2 est le prix de l’équipement.
Domination
– On se place dans le cas n = 2.
– La solution x domine la solution y si et seulement si
Pareto
prix
domination
latence
Pondération
On attribue un poids à chaque objectif et on minimise l’objectif pondéré.
prix
optimum
pondéré
latence
Transformation objectif/contrainte
On fixe la valeur de l’une des fonctions objectif et on optimise l’autre. Par
exemple, le marketing décide du prix maximum de l’équipement.
prix
borne du prix
optimum
latence
Fonctions unimodales
– Une fonction f est unimodale dans l’intervalle [a, b] s’il existe un point
a 6 c 6 b tel que si x 6 y 6 c alors f (x) > f (y) et si c 6 x 6 y alors
f (x) 6 f (y).
– Il est évident que si f est unimodale dans [a, b], alors c est un minimum
global.
Théorème 1.2. Si f est continue convexe dans [a, b], alors f est unimodale.
a c d b a c d b
– On divise l’intervalle [a, b] en trois parties égales à l’aide des points a <
c < d < b. On calcule f (c) et f (d).
– On détermine le minimum de f parmi les 4 points a, c, b, d.
– Le minimum continu appartient à l’intervalle encadrant le minimum dis-
cret.
– L’intervalle est réduit au moins par un facteur 2/3. On poursuit jusqu’à
la précision voulue.
Améliorations
n/2
– Vitesse de convergence : la taille de l’intervalle est multipliée par 23
après n évaluations de la fonction.
– La division en segment égaux n’est pas optimale. On a intérêt à agrandir
les segments extrêmes.
– On peut passer à un découpage en 4 parties égales. Il faut évaluer f trois
fois à chaque étape, mais l’intervalle est au moins divisé par 2. La conver-
n/3
gence est en 12 donc plus rapide.
L’algorithme converge
– Le nombre de pas d’exploration est au plus b−a b . L’exploration s’arrête en
un temps fini.
– Soit [an , bn ] le ne intervalle d’exploration et dn le ne pas d’exploration. On
a dn = dξ n et bn − an 6 2dn .
– Les [an , bn ] forment une suite d’intervalles emboı̂tés dont la longueur tend
vers 0. Ils convergent donc vers une limite c.
Recherche directionnelle
– On se ramène au cas à une seule variable. Pour cela on choisit un point
de départ a et une direction d.
– On minimise la fonction à une variable f (a + t.d) à l’aide de l’une des
méthodes vues plus haut.
– Si le déplacement t.d est suffisamment petit, on arrête.
– Sinon, on change de direction et on recommence.
– Le point important est le choix des directions.
Gradient
– On suppose que la fonction f a une dérivée.
∂f ∂f
– Le gradient de f au point a est le vecteur ( ∂x1
(a), . . . , ∂x n
(a))T . On le
note ∇f (a).
– On a le développement de Taylor :
f (a + h) = f (a) + h∇f (a) + . . . .
Ceci montre que −∇f (a) est la direction dans laquelle f décroı̂t le plus
rapidement (steepest descent).
– D’où l’algorithme :
1. Calculer le gradient ∇f (a).
2. Minimiser la fonction à une variable f (a − x∇f (a)).
3. Si le critère de convergence n’est pas vérifié, recommencer en 1.
Propriété
Théorème 1.3. Dans l’algorithme ci-dessus, les directions de recherche succes-
sives sont orthogonales.
Directions conjuguées
– Une matrice A de dimension n × n est définie positive si et seulement si :
∀x : xT Ax > 0.
Une matrice définie positive définit un produit scalaire.
– Deux vecteurs u, v sont conjugués par rapport à A si et seulement si :
uT Av = 0. C’est une généralisation de la notion d’orthogonalité.
– Soit n vecteurs d1 , . . . , dn mutuellement conjugués :
i 6= j ⇒ dTi .A.dj = 0.
– Soit la fonction f (x) = 1/2xT Ax + bT x + c. Si on la minimise successive-
ment suivant les directions d1 , . . . , dn , on atteint le minimum exact en n
étapes.
Notations
– Soit x(k) , k = 0, . . . les minima successifs.
– x(k+1) = x(k) + λk dk .
– Le gradient de f en x est Ax + b.
– D’après la propriété ci-dessus et la conjugaison des dk , on a :
dTk (Ax(0) + b)
λk = − .
dTk Adk
k
X
x(k) = x(0) + λi di .
i=1
Preuve
dTi (Ax(0) + b) T
di Ax(0) − .(di Adi ) + b = 0.
dTi Adi
Gradient conjugué
– C’est la transposition de la méthode ci-dessus au cas où la fonction f est
quelconque, mais où on sait calculer son gradient.
– On part d’un point a0 et on pose d0 = −∇f (a0 ).
– Supposons que l’on soit parvenu en un point ak avec la direction dk . On
minimise f (ak + λ.dk ). Soit λk la solution obtenue.
– On pose :
ak+1 = ak + λk .dk ,
||∇f (ak+1 )||2
βk = ,
||∇f (ak )||2
dk+1 = −∇f (ak+1 ) + βk dk .
Recherche aléatoire
– Au lieu de calculer la direction de recherche optimale pour une approxima-
tion quadratique de f , on peut la choisir aléatoirement en tirant n nombres
au hasard dans l’intervalle [0, 1].
– La méthode ne nécessite pas le calcul du gradient. Elle fonctionne même
si f n’est pas dérivable.
– Mais en général, sa convergence est beaucoup plus lente.
Test d’arrêt
– Le choix d’un test d’arrêt est difficile.
– Si f est dérivable, son gradient doit être nul à l’optimum. On peut donc
utiliser ||∇f (ak )|| < ε comme test d’arrêt.
– Sinon, on peut arrêter les itérations quand la solution ne change plus :
||ak+1 − ak || < ε.
– ε doit refléter la précision requise. Il ne doit pas être plus petit que la
précision des calculs sous peine de blocage.
– Il est prudent d’attendre que le test ait été satisfait plusieurs fois avant
d’arrêter.
– En général, la valeur du minimum est mieux définie que sa position.
min c.x
Ax + b > 0
Polyèdre Convexe
– L’ensemble P = {x | Ax + b > 0 } est convexe. On l’appelle un polyèdre
convexe ou simplement un polyèdre.
– La fonction c.x est trivialement convexe.
– Donc, si un programme linéaire a un minimum local, c’est un minimum
global.
Test de faisabilité
– Pour trouver un minimum, il faut que le polyèdre :
P = {x | ax = b > 0 }
soit non vide, ou encore qu’il existe au moins un point x0 qui satisfasse
toute les inégalités Ax + b > 0.
– On peut vérifier cette condition à l’aide du test de Fourier-Motzkin.
– On élimine successivement toutes les inconnues de x jusqu’à trouver un
système sans inconnues, dont la faisabilité se teste par inspection.
– Notations : x(n) le vecteur x amputé de ses n premières composantes.
x(0) = x.
– A(n) x(n) + b(n) > 0 le système obtenu après l’élimination de n variables.
Test de Fourier-Motzkin
– Soit à éliminer x1 . On réparti les contraintes en trois classes :
– k ∈ I0 ssi ak1 = 0.
– k ∈ I+ ssi ak1 > 0.
– k ∈ I− ssi ak1 < 0.
– Dans une contrainte de I0 , l’inconnue x1 est déjà éliminée.
– Une contrainte k ∈ I+ donne une borne inférieure de x1 :
bk + ak,2 x2 + . . .
x1 > − ;
ak1
– Une contrainte k ∈ I− donne une borne supérieure de x1 :
bk + ak,2 x2 + . . .
x1 6 ;
−ak1
– Pour éliminer x1 , il suffit d’écrire que chaque borne inférieure est inférieure
à chaque borne supérieure.
– On poursuit jusqu’à élimination de toutes les variables. Au bout de n
étapes, le système est de la forme : b(n) > 0, qu’il suffit d’inspecter.
Correction
On dit que le test réussit si b(n) > 0, et qu’il échoue dans le cas contraire.
Théorème 1.6. Si le test échoue, alors le système initial est infaisable.
Démonstration. Supposons a contrario que le système initial a une solution u.
Les transformations effectuées sur les contraintes sont de simples manipulations
algébriques valides ; on en conclu que les intervalles obtenus en comparant une
borne inférieure et une borne supérieure sont non vides, et donc que le système
A(1) x(1) + b(1) > 0 est faisable.
En poursuivant l’élimination, on en arrive au système d’ordre n − 1, qui n’a
plus qu’une seule inconnue xn et qui est également faisable. Mais le fait que l’un
des b(n) < 0 indique que l’un des intervalles de variation de xn est vide, une
contradiction.
Complétude
Théorème 1.7. Si le test réussit, le système initial est faisable.
Démonstration. On exhibe une solution du système initial en la construisant de
proche en proche à partir de sa dernière composante. On part du système
Le fait que les b(n) > 0 garantit que l’intervalle des valeurs possibles de xn
est non vide. On en choisit une arbitrairement et on la reporte dans le système
d’ordre n − 2. Ce système n’a plus qu’une inconnue, xn−1 , dont l’intervalle des
valeurs possibles est non vide. On poursuit ainsi jusqu’à avoir donné une valeur
à toutes les composantes de x.
Remarques
– Si on s’astreint à choisir à chaque pas la solution la plus petite, i.e. la
borne inférieure de l’intervalle de variation, on obtient le minimum lexico-
graphique de P, les inconnues étant prises dans l’ordre xn , . . . , x1 .
– Il n’est pas obligatoire de poursuive l’élimination jusqu’à la fin. Si on
s’arrête à l’étape p, les variables de x(p) deviennent des paramètres. Les
conditions b(p) > 0 délimitent les valeurs des paramètres pour lesquelles
le système est faisable. Enfin, le procédé de sélection ci-dessus donne la
valeur paramétrique de la solution.
– L’algorithme peut s’exécuter sans division. La combinaison de la contrainte
j ∈ I+ et de la contrainte k ∈ I− se fait en multipliant la première par
−ak1 > 0 et l’autre par aj1 > 0 et en additionnant.
Complexité
– On évalue d’abord une borne du nombre de contraintes à l’étape p, mp ,
soit mp = x0 + x+ × x+ .
– Comme x0 + x+ + x− = mp−1 , mp prend sa valeur maximum pour x0 = 0
et x+ = x− = mp−1 , à condition que mp−1 > 4.
m 2
– Pour le cas le pire, on a donc la récurrence mp = ( p−1
2 ) dont la solution
n
m 2
est mn = ( 2 ) . C’est aussi une borne du travail à effectuer.
– La complexité est donc énorme sauf pour les petits systèmes. Mais la
redondance est également énorme, surtout si le système est creux (a beau-
coup de coefficients nuls).
– Enfin, il est possible que l’algorithme se termine prématurément.
– L’algorithme de Fourier-Motzkin est très simple à programmer, mais il
doit être réservé à de petits problèmes.
Un exemple
– Soit le code :
for(j=i+1; j<n; j++)
for(k=i+1; k<n; k++)
a[j][k] -= a[j][i]*a[i][k]/a[i][i];
– L’exécution de ces deux boucles modifie-t-elle le terme a[i][i] (le pivot) ?
– Réponse : le système :
i + 1 6 j < n,
i + 1 6 k < n,
i = j,
i = k,
est il faisable ?
+ j−i−1 > 0,
− n−j−1 > 0, + k−i−1 > 0,
0 k−i−1 > 0, − n−k−1 > 0,
0 n−k−1 > 0, − i−k > 0,
− i−j > 0, 0 n−i−2 > 0,
0 i−k > 0, 0 −1 > 0.
+ j + k − 2i > 0.
Bingo !
Lemme de Farkas
Théorème 1.8.
Programmation linéaire
– On adjoint au système Ax + b > 0 la contrainte z > c.x, où z est une
nouvelle variable.
– On exécute l’algorithme de Fourier-Motzkin en prenant soin d’éliminer z
en dernier.
– Si l’algorithme échoue, le problème n’est pas faisable.
– Sinon, la valeur de z dans la solution donne la valeur minimum de c.x.
– Le reste de la solution caractérise un point ou ce minimum est atteint.
Cônes
– Un cône C est un polyèdre convexe dont les contraintes sont de la forme
Ax > 0.
– Propriété fondamentale : u, v ∈ C, λ, µ > 0 ⇒ λu + µv ∈ C.
P
Théorème 1.10. L’objet { i λi ui | λi > 0 } est un cône.
Démonstration. Il suffit de considérer le système :
X
x− λi ui = 0,
i
λi > 0.
et d’utiliser la méthode de Fourier-Motzkin pour éliminer les λi . Ce qui reste est
un système de contraintes linéaires en x, qui définissent bien un polyèdre.
Réciproque
Théorème 1.11. Tout cône C = {x | Ax > 0 } est engendré par un système
fini de rayons u1 , . . . , up .
Démonstration. On considère l’objet C ∗ = {yA | y > 0 }. C ∗ est un cône dont
on peut déterminer les contraintes comme ci-dessus :
C ∗ = {c | cB > 0 } .
Quelque soit y > 0, yA appartient à C ∗ , donc yAB > 0. Comme on peut
prendre pour y les m vecteurs unitaires, on en déduit AB > 0 ce qui signifie que
les vecteurs colonnes de B appartiennent à C.
Soit maintenant x un vecteur quelconque de C. Pour tout y > 0 on a yA.x =
y.Ax > 0. En d’autre termes, pour tout c tel que cB > 0, on a cx > 0. On peut
donc appliquer le lemme de Farkas affine : il existe λ > 0 tel que x = λB. C est
donc engendré par les vecteurs colonnes de B.
Théorème de Minkovsky
Théorème 1.12. Tout polyèdre P peut être mis sous la forme : P = Q ⊕ C ⊕ H,
où Q est un polytope (polyèdre borné), C est un cône et H un sous espace linéaire.
Démonstration. Soit P = {x | Ax + b > 0 }. On considère le cône D = {x, z | Ax + zb > 0 }
où z est une nouvelle variable. Il est clair que P est l’ intersection de D avec
l’hyperplan {z = 1}. On construit les rayons de D. Ceux dont la coordonnées z
n’est pas nulle engendrent Q. Les rayons dont l’opposé est également un rayon
engendrent H. Enfin, ceux qui restent engendrent C.
On peut écrire :
nX X X X o
P= λ.u + µ.v + ν.w λ = 1, λ > 0, µ > 0
Les u sont les sommets, les v les rayons et les w les lignes.
Puisque ν n’est pas contraint, on peut faire décroı̂tre c.x a volonté s’il
existe un w. Il en est de même s’il existe un v tel que c.v < 0, puisque
µ > 0. Si H est vide, le dernier terme n’existe pas, et si c ∈ C, on minimise
c.x en prenant µ = 0.
Soit u0 un sommet où c.x est minimum, et u1 un sommet où c.u1 > c.u0 .
Supposons que dans l’expression de x, u1 ait un coefficient λ1 non nul. Le
point x − λ1 (u1 − u0 ) est dans P et sa fonction objectif a diminué. On
en déduit que la solution d’un programme linéaire est l’un quelconque des
sommets de Q où c.x atteint son minimum.
Critique
– La méthode ci-dessus est inefficace car il faut utiliser Fourier-Motzkin pour
trouver la décomposition de P, et aussi parce que le nombre de sommets
n
peut être très grand (de l’ordre de Cm , le coefficient du binôme).
– Il existe un algorithme plus efficaces que Fourier-Motzkin pour décomposer
un polyèdre, l’algorithme de Chernikova, mais le nombre de sommets ne
change pas.
Dualité
Théorème 1.13. Si les deux ensembles {x | Ax 6 b } et {y | y > 0, yA = c }
sont non vides, on a :
` = max {cx | Ax 6 b } = min {yb | y > 0, yA = c } = r.
Soit par exemple x∗ (resp. y ∗ ) un point de l’ensemble de gauche (resp. de
droite). On a :
c.x∗ = y ∗ Ax∗ 6 y ∗ .b.
Il en résulte que ` et r existent et que ` 6 r.
On peut supposer que x∗ (resp. y ∗ ) est le point où le maximum (resp. le
minimum) est atteint. En tout point x tel que b−Ax > 0 on sait que c.x∗ −c.x >
0, on peut donc appliquer le lemme de Farkas affine :
∃λ0 , λ > 0 : ∀x : c.x∗ − c.x = λ0 + λ(b − Ax).
On en déduit c.x∗ = λ0 + λb et c = λA. Il en résulte que λ fait partie de
l’ensemble de droite :
r 6 λb = c.x∗ − λ0 6 `.
On en déduit ` = r.
Analyse de sensibilité
– Variation de ω(b) = max {cx | Ax 6 b } avec b ?
– Par dualité, ω(b) = min {yb | y > 0, yA = c }. Or
ce polyèdre ne dépend pas de b. Interprétation
géométrique : aussi longtemps que b reste dans le
cône des directions admissibles, l’optimum y ∗ ne
change pas. Donc :
Complémentarité
Théorème 1.14.
∀j : yj .(bj − A•j .x) = 0.
Démonstration.
y ∗ .(b − A.x∗ ) = y ∗ .b − y ∗ .A.x∗ =
= c.x∗ − y ∗ .A.x∗ = (c − y ∗ A).x∗ = 0.
Mais chaque terme du produit scalaire y ∗ .(b−A.x∗ ) est positif, donc si la somme
est nulle chaque terme est nul.
Dualité généralisée
Il existe une très grande variété de théorèmes de dualité, suivant la nature
des contraintes et le signe des variables. En première approximation, on peut
utiliser le tableau suivant :
Primal Dual
objectif (Min) second membre
second membre objectif (Max)
A AT
Contrainte i : > variable ui > 0
variable
Contrainte i : =
non contrainte en signe
Variable xj > 0 contrainte j : 6
Variable xj
contrainte j : =
non contrainte en signe
Algorithme du Simplexe
optimum
Ordre lexicographique
– Définition :
Résoudre : Généralisation :
min x min x
x > 0 y = Sz + t > 0
Ax + b > 0 z > 0
Tailles : x : n, A : m × n, b : m.
Au commencement,
I 0
z = x, S = , t= .
A b
Invariants
– Les vecteurs colonnes de S sont lexicopositifs au démarrage et le restent
tout au long de l’algorithme.
– z est un sous-ensemble de x, y. La condition z > 0 est donc toujours
vérifiée.
– D’une étape à l’autre, t croı̂t dans l’ordre lexicographique.
– Ces invariants sont vérifiés au début de l’algorithme.
Cas de base
– Si t > 0, on a trouvé la solution. Il suffit de faire z = 0, ce qui satisfait les
contraintes. On a x = t1,··· ,n .
– De plus, c’est le minimum lexicographique : toute autre valeur positive de
z ajoute à x un vecteur lexicopositif.
– Soit ti < 0. Si ∀j : Sij 6 0, le problème n’a pas de solution.
Changement de variable
– Soit ti < 0 et Sij > 0 (le pivot). On élimine zj en faveur de yi :
X
zj = yi /Sij − Si` /Sij z` − ti /Si` .
`6=j
X
yk = (Sk` − Skj Si` /Sij )z` + Skj /Sij zj + tk − Skj ti /Sij .
`6=j
– Remarquer que −ti /Sij est positif, et que Skj est lexicopositif. Donc, t
croı̂t selon l’ordre lexicographique.
– Comme Sij > 0, le vecteur colonne j reste lexicopositif.
– Il reste à garantir que le vecteur colonne ` reste lexicopositif.
Choix du pivot
– Si Si` est négatif, il n’y a pas de problème.
– Sinon le nouveau vecteur colonne est égal, à un coefficient positif près, à :
S•` /Si` − S•j /Sij .
– Il faut donc choisir j pour que Sij > 0 et que le «vecteur réduit» S•j /Sij
soit le plus petit possible.
– Un tel choix est toujours possible sauf si on est dans le cas d’un système
infaisable.
Convergence
– Observer que l’état de l’algorithme est entièrement déterminé quand on
sait quelles sont les composantes de y qui sont dans z (les variables en
base).
n
– Or y est de taille m+n et z de taille n, il n’y a donc que Cm+n combinaisons
possibles.
– L’algorithme ne peut pas boucler, car t croı̂t dans l’ordre lexicographique.
n
– Comme Cm+n n’est pas un polynôme en n et m, l’algorithme n’est pas
polynomial.
– On peut construire des cas pathologiques qui demandent un temps expo-
nentiel.
– Mais en pratique (et en probabilité) le nombre d’opérations est en O(n2 (n+
m)).
Questions numériques
– Du point de vue numérique, l’algorithme du Simplexe est analogue à la
méthode de Gauss, avec une règle particulière pour le choix du pivot.
– Si l’on connaı̂t la matrice des inconnues de base, l’algorithme ne fait qu’in-
verser celle-ci, tout en appliquant les mêmes transformations aux incon-
nues hors base.
– Les résultats sont donc donnés par des formules de Cramer.
– On peut faire les calculs en virgule flottante. Il y a alors accumulation d’er-
reurs d’arrondi, qui peuvent faire que la solution finale n’est pas faisable
(en particulier pour les contraintes saturées).
– Il faut alors développer des méthodes de correction. En général la solution
est faisable, mais l’optimalité n’est pas garantie.
– On peut rendre la matrice des contraintes entières, et essayer de mener les
calculs exactement (algorithmes «tout entiers»).
– Les nombres à manipuler sont des déterminants de Cramer. On peut donc
les borner à l’aide de l’inégalité de Hadamard :
|det(A)| 6 |A1 | . . . |An |,
où les Ai sont les vecteurs colonnes (ou les vecteurs lignes) de A.
– Il en résulte que la taille des nombres à manipuler est bornée par n fois la
taille du plus grand élément de A. Cette borne est rarement atteinte.
– Il faut utiliser des arithmétiques en précision arbitraire, telle la librairie
GMP.
Algorithme primal
– On prend le problème sous la forme équivalente suivante :
min f (x) = c.x
Ax = b
x > 0
– On peut supposer que les lignes de la matrice des contraintes A sont li-
néairement indépendantes : on peut éliminer les lignes redondantes.
– A est de dimension m × n avec nécessairement m < n.
Dans le cas contraire, le système Ax = b aurait au plus une
solution et le problème serait trivial.
Base
– Une «base» est une matrice carrée n × n extraite de A inversible. On
partitionne A en deux blocs B, la base, et N le reste de la matrice. On
partitionne de même x en xB , xN et c en cB , cN .
– La solution associée à une base B est le vecteur (B −1 b, 0)T . Il satisfait
évidemment à la contrainte Ax = b.
– La base B est réalisable si et seulement si la solution correspondante sa-
tisfait également à la contrainte x > 0, c’est-à-dire si x = B −1 b > 0.
– A une base réalisable correspond une valeur de l’objectif, cB .B −1 b.
– Est-il possible d’améliorer cet objectif en faisant varier xN ?
Recherche de l’optimum
– Si xN n’est plus nul, on a :
xB = B −1 (b − N xn )
f (x) = cB .B −1 b + (cN − cB .B −1 N )xn
min 1.y
x > 0
y > 0
Ax + y > b
Optimisation sous
contraintes
Généralisation
– Certaines contraintes peuvent être difficiles à mettre sous la forme
gi (x) 6 0.
– Exemple : on veut que x soit entier (i.e. à coordonnées entières).
– On remplace la dernière contrainte par :
x ∈ S ⊆ Rn .
C = {d | d.∇gi (x∗ ) 6 0, i ∈ I } ,
avec I = {i | gi (x∗ ) = 0 }.
– La réciproque est fausse, sauf dans quelques cas particuliers :
– Les fonctions gi sont linéaires ou convexes ;
– Les gradients sont linéairement indépendants.
– Si C est l’ensemble des directions admissibles, alors une condition néces-
saire d’optimalité est :
∃λi > 0 ,
i = 1, . . . , n
Xn
∇f (x∗ ) − ∇gi (x∗ ) = 0,
i=1
λi .gi (x∗ ) = 0.
Conditions de Lagrange
– Un contrainte d’égalité gi = 0 peut se représenter par deux contraintes
d’inégalité gi > 0 et gi 6 0.
−
– Il lui correspond deux multiplicateurs de Kuhn-Tucker, λ+ i et λi positifs.
– On peut les regrouper en un seul dont le signe est quelconque. À une
contrainte d’égalité correspond un multiplicateur non contraint en signe.
– Si toutes les contraintes sont des égalités, les multiplicateurs peuvent être
de signe arbitraire. Ils prennent le nom de multiplicateurs de Lagrange.
– Dans ce cas particulier, toutes les contraintes doivent être saturées.
et on recommence.
Lemme 2.1. Si f est convexe, alors f (x) > f (a) + ∇f (a)T .(x − a).
Démonstration. Pour simplifier on va supposer que x est un scalaire. Soit par
exemple b > a. Par définition, f (x)−f (a) 6 (x−a) f (b)−f
b−a
(a)
. En faisant tendre x
vers a on en déduit f 0 (a) 6 f (b)−f
b−a
(a)
, ce qui n’est autre que le résultat cherché.
La démonstration est analogue pour b < a.
Théorème 2.5. Si F est borné, tout point d’accumulation de la suite x(k) est
un optimum.
– Deux variétés :
– La fonction de pénalité est nulle dans le domaine faisable. L’optimum
pénalisé n’est pas faisable. C’est une méthode extérieure.
– La fonction de pénalité devient infinie quand on sort du domaine fai-
sable. L’optimum est faisable, mais la méthode a besoin d’un point
faisable initial.
Méthodes extérieures
– On considère la fonction h(x) égale à 0 si x 6 0 et à x2 sinon. Il est facile
de voir qu’elle est continue et à dérivé continue.
– On remplace le problème :
P : min f (x),
gi (x) 6 0, i = 1, . . . , n
x ∈ Rn
par la suite de problèmes :
n
X
Pk : min f (x) + Sk h(gi (x)).
i=1
Convergence
Théorème 2.6. Si f est continue, si l’ensemble des points faisables est fermé
et si soit f (x) soit H(x) tend vers l’infini quand x tend vers l’infini, alors tout
point d’accumulation de la suite xk est une solution de P .
On note ϕk = f (xk ) + Sk H(xk ), et x∗ une solution de P .
Lemme 2.7. Les ϕk forment une suite décroissante.
Démonstration. On a f (xk+1 ) + Sk+1 H(xk+1 ) > f (xk+1 ) + Sk H(xk+1 ) parce
que Sk+1 > Sk et f (xk+1 ) + Sk H(xk+1 ) > f (xk ) + Sk H(xk ) puisque xk est la
solution de Pk .
De plus, ϕk 6 f (x∗ ) + Sk H(x∗ ). Mais comme x∗ est faisable, la pénalité est
nulle. On a donc l’encadrement
f (xk ) 6 ϕk 6 f (x∗ ).
Lemme 2.8. Les H(xk ) forment une suite décroissante.
Démonstration. Comme chaque xk est la solution d’un problème de minimum,
on a :
f (xk ) + Sk H(xk ) 6 f (xk+1 ) + Sk H(xk+1 ),
f (xk+1 ) + Sk+1 6 f (xk ) + Sk+1 H(xk ).
En additionnant et simplifiant :
(Sk − Sk+1 )(H(xk+1 ) − H(xk )) > 0.
Comme le premier terme est négatif, l’autre l’est aussi.
Méthodes intérieures
– On prend comme fonction de pénalité une fonction qui tend vers l’infini
au voisinage de 0, par exemple
Pn h(x) = −1/x.
– On minimise f (x) + R i=1 h(gi (x)).
– Dans les mêmes conditions que ci-dessus, on montre que l’optimum du
problème PR tend vers l’optimum de P quand R tend vers 0.
– Toutes les solutions intermédiaires sont faisables, mais il faut disposer d’un
point faisable pour commencer les calculs.
Exemple
– Le problème du cas le pire de Fourier-Motzkin :
max xy + z,
x+y+z = n
min f (x),
gi (x) 6 0, i = 1, . . . , n
x ∈ S ⊆ Rn
Point-col
– (x∗ , λ∗ ) est un point-col si et seulement si :
x∗ ∈ S, λ∗ > 0.
∀x ∈ S : L(x∗ , λ∗ ) 6 L(x, λ∗ ),
∀λ > 0 : L(x∗ , λ∗ ) 6 L(x∗ , λ).
– Caractérisation d’un point-col :
Preuve
Soit (x∗ , λ∗ ) un point-col. La première propriété est une conséquence directe
de la définition.
La deuxième propriété entraı̂ne :
(λ − λ∗ ).g(x∗ ) 6 0.
S’il existait un gi (x∗ ) positif, il suffirait de prendre le λi correspondant suffisam-
ment grand pour violer cette inégalité. Donc ∀i : gi (x∗ ) 6 0.
Pour λ = 0 on trouve :
−λ∗ .g(x∗ ) 6 0.
Mais les deux termes du produit sont non négatifs, donc le produit est nul.
Preuve, réciproque
La première caractéristique entraı̂ne directement la première propriété du
point-col.
On déduit de la troisième caractéristique que L(x∗ , λ∗ ) = f (x∗ ).
Enfin :
Intérêt
Théorème 2.9. Si (x∗ , λ∗ ) est un point-col, alors x∗ est un minimum global.
Démonstration. D’après la définition, x∗ ∈ S et g(x∗ ) 6 0, donc x∗ est faisable.
D’autre part :
– En effet, dans la région infaisable, g(x) > 0, donc le second terme augmente
la valeur de L, alors qu’on recherche un minimum.
– Toutefois, ce terme est négatif dans la région faisable, ce qui diminuerai
artificiellement la valeur du minimum, si l’on n’avait pas la contrainte
∀i : λi .gi (x∗ ) = 0.
– Comme les méthodes de pénalité, l’emploi de la fonction de Lagrange
permet de remplacer un problème avec contraintes par un problème sans
contrainte.
min c.x,
Ax − b > 0,
x > 0.
– Il est facile de voir que si c−λA−µ n’est pas nul, la valeur du minimum est
−∞. Sinon, c’est λb. Comme c − λA − µ = 0 est équivalent à c − λA > 0,
on voit que l’on est amené à résoudre :
max λ.b,
c − λA > 0,
λ > 0.
Génération de colonnes
– Si l’ensemble S = {x1 , . . . , xn } est fini, le problème s’écrit :
n
max min f (xi ) + λg(xi )
λ>0 i=1
P (n) : max z
z 6 f (xi ) + λg(xi ), i = 1, . . . , n
λ > 0.
Convergence
– On a l’encadrement w(λn ) 6 f (x∗ ) 6 z n .
– Comme la suite z n est décroissante, elle converge.
– Mais la convergence de w(λn ) vers f (x∗ ) impliquerait que le saut de dualité
est nul, ce qui n’est pas toujours le cas.
min f (x)
x ∈ S
Exemple
– On considère un ordinateur sur lequel on doit exécuter t algorithmes en-
chaı̂nés Ai , i = 1, . . . , t. Chaque algorithme a pour données les résultats
de l’algorithme précédent.
– Pour implémenter chaque algorithme, on doit choisir une structure pour
ses données. On suppose qu’il y a s structures possibles, Sk , k = 1, . . . , s
et que le temps d’exécution de l’algorithme dépend de la structure choisie.
Par exemple, une matrice peut être rangée par ligne ou par colonne, et, par
suite des effets de cache, le temps d’exécution du produit matriciel varie
suivant la structure choisie. On supposera qu’un algorithme ne modifie
pas la structure des ses données. On note Tik le temps d’exécution de
l’algorithme i quand les données on la structure Sk .
– On suppose qu’il est possible de modifier les structure de données (par
exemple, de transposer une matrice). On note θk` le temps nécessaire pour
passer de la structure Sk à la structure S` . Remarquer que θkk = 0.
– On peut calculer toutes les valeurs de Ωnk à l’aide de cette récurrence, lire
la valeur de Ωt (kt+1 ) et reconstituer le chemin à suivre par retour arrière.
– Codage en variables 0-1. On pose Xik = 1 si la distribution des données à
l’étape i est la distribution Sk , et 0 sinon.
– A chaque étape, il y a une et une seule distribution :
s
X
Xik = 1. (2.1)
k=1
Pt Ps
– Le temps de calcul total est : Tc = i=1 k=1 Tik Xik .
– Le temps de redistribution de l’étape i à i + 1 est donné par θk` tel que
Xik = 1 et X(i+1)` = 1, ce qui peut s’écrire :
t X
X s X
s
Tr = Xik X(i+1)` θk` .
i=0 k=1 `=1
min x,
Ax + b > 0,
x ∈ N.
x ∈ Zn ∩ S ⇒ x ∈ Ŝ,
x, y ∈ Ŝ, λ, µ > 0, λ + µ = 1 ⇒ λx + µy ∈ Ŝ.
Théorème 2.18. La coque entière d’un polyèdre défini par Ax + b > 0, avec A
entière, est un polyèdre.
Lemme 2.19. P̂ ⊆ Q
\ + B + C.
Lemme 2.20. Q
\ + B + C ⊆ P̂ .
Démonstration. Puisque Q + B ⊆ P , Q
\ + B + C ⊆ P̂ + C = P̂ + Ĉ = P\
+C =
P̂ .
Minimum entier
Lemme 2.21. Le minimum entier d’un polyèdre est le minimum rationnel de
sa coque entière.
Démonstration. Le minimum entier x∗ appartient à la coque entière. Supposons
qu’il existe dans la coque entière un point x0 x∗ . Ce point est nécessairement
à coordonnées non entières (puisque la coque entière est contenue dans le po-
lyèdre). x0 est donc combinaison convexe de points entiers qui lui sont tous
supérieurs dans l’ordre lexicographique, ce qui est impossible.
– Le problème sera résolu si on sait construire la coque entière.
– Mais la complexité de la coque entière peut être énorme (Chvatal).
– Heureusement, on peut se contenter de construire quelques coupes (et non
toute la coque) : des contraintes affines qui excluent une partie de P mais
aucun point de P̂ .
Algorithme de Gomory
– On a mis le problème sous la forme :
min x
y = Sz + t > 0
z > 0
où la matrice S et le vecteur t sont entiers, ainsi que les variables y et z. z
est un extrait de y, et les n premières composantes de y sont les variables
originales.
– On procède comme dans l’algorithme du Simplexe jusqu’à obtenir t > 0.
Si l’algorithme échoue, il n’y a pas de solution entière.
– Si les composantes 1 à n de t sont entières, c’est la solution.
– Sinon, on choisit le premier ti non entier, on construit une coupe comme
ci-dessus à l’aide de la contrainte Si z + ti > 0, et on l’ajoute au tableau.
– Le nouveau tableau n’est pas faisable : le terme constant de la coupe est
négatif. On reprend l’algorithme jusqu’à terminaison.
Preuve
min u, x
u + Ax + b > 0,
u > 0,
x > 0
Il est clair que ce problème a toujours une solution : il suffit de prendre x nul et
u très grand. Si le problème initial a un minimum x∗ , alors 0, x∗ est le minimum
du problème étendu. Inversement, si le problème initial n’a pas de solution, alors
u ne peut être nul dans la solution du problème étendu. Les deux problèmes sont
donc équivalents.
Lemme 2.24. Les minima successifs xn forment une suite croissante dans
l’ordre lexicographique.
t0 t sj −t mod D D t −t mod D
= + 6 + .
D D D D sj mod D D D
Lemme 2.26. La première ligne ne peut être active qu’un nombre fini de fois.
Démonstration. Nous avons vu que la première ligne ne peut être active qu’un
nombre fini de fois. Après la dernière modification, tout se passe comme si le
problème à résoudre avait une contrainte et une inconnue de moins (méthode
de déflation). On peut donc prouver que la deuxième ligne n’est active qu’un
nombre fini de fois. De proche en proche, on voit que l’algorithme se termine.
Complexité
– Comme il faut pouvoir distinguer entre nombres entiers et nombres frac-
tionnaires, les calculs doivent être menés en arithmétique exacte.
– Les nombres à manipuler sont des déterminants de sous-matrices n × n de
la matrice des contraintes. Leur taille (nombre de bits) est donc bornée
par n fois le nombre de bits du plus grand coefficient.
– Le nombre maximum de coupes est borné par le nombre de coupes né-
cessaires pour caractériser la coque entière de l’ensemble des solutions.
Résultat de Chvatal.
Z ≡ X ∨ Y :: Z > X, Z > Y, Z 6 X + Y,
Z ≡ X ∧ Y :: Z 6 X, Z 6 Y, Z > X + Y − 1,
Z ≡ ¬X :: Z = 1 − X.
Problèmes de graphe
– On peut représenter un graphe de nombreuses façons : matrice d’incidence,
matrice de connexion, Zij = 1 si et seulement si il existe un arc i → j.
– Chemin : Xij = 1 si et seulement si le chemin emprunte l’arc i → j.
Contrainte : Xij 6PZij . P
– Loi de Kirchoff : i Xij = k Xjk , pour tout j excepté le début et la fin
du chemin. P
– Chemin simple P : ne passe qu’une fois par chaque
P sommet. i Xij 6 1.
– Pour le début, j XijP = 1, et pour la fin i Xij = 1.
– Minimiser la somme ij Xij assure que le chemin n’a pas de boucles
isolées.
Méta-heuristiques
min f (x)
gi (x) 6 0, i = 1, . . . , n
Variables bivalentes
– La méthode est particulièrement bien adaptée à la résolution de problèmes
linéaires en variables bivalentes : les inconnues ne peuvent prendre que les
valeurs 0 ou 1.
– Pour séparer un problème en deux, on choisit l’une des inconnues, par
exemple x1 , et on impose les contraintes x1 = 0 ou x1 = 1.
– Pour obtenir une borne supérieure, on résout le problème en continu.
– Un sous-problèmes est résolu si toutes les variables sont fixées ou si la
solution continue est entière.
44 Méta-heuristiques
Résolution
On value les inconnues dans l’ordre x1 , . . . , x4 .
x4=1 x4=0
13/3
x3=1 x3=0
x1=1 x1=0
x2=1
23/3 x2=1
25/4
x2=1 x2=0
x2=0
x3=1
7 7 x2=0
x1=0
x4=1 x4=0
5 1 7
Méta-algorithme
On doit d’abord définir une représentation des problèmes à résoudre. Par
exemple, dans le cas du sac-à-dos, on notera le tableau du problème et celles
des inconnues qui sont déjà valuées, dans une variable de type pb.
Fonctions de spécialisation :
– is_trivial : pb → bool permet de savoir si le problème peut être résolu
facilement (i.e. si toutes les inconnues, ou toutes les inconnues sauf une
sont valuées).
– trivial_solve : pb → int résout un problème trivial. Doit rendre +∞ si
le problème trivial n’est pas faisable.
– bound : pb → int donne une borne inférieure de la solution.
– branch : pb → (pb, pb) découpe un problème en deux sous-problèmes.
best pb:= . . .
best:= MAXINT
Algorithme : BandB(pb0 )
if is_trivial (pb0 ) then
local best := trivial_solve(pb0 )
if local best < best then
best = local best
best pb = pb0
else
local best := bound(pb0 )
if local best < best then
(pb1, pb2 ) := best pb(pb0)
BandB(pb1 )
BandB(pb2 )
3.1.2 Évaluation
– La qualité de la fonction d’évaluation conditionne directement l’efficacité
de la méthode.
– Exemple du sac à dos. On prend comme borne supérieure y1 + 2y2 + 3y3 +
4y4 où yi = xi si xi est valuée et yi = 1 sinon. Il est clair que cette fonction
donne bien une borne supérieure de l’utilité.
x4=1 x4=0
x2=1 3
6
7
x1=1 7 6
6
7
Relaxation continue
– Si le problème est linéaire et en nombres entiers, on obtient une borne (in-
férieure ou supérieure) à partir de la solution continue. La méthode fournit
une alternative à la méthode des coupes, à condition que le problème soit
borné.
– Relaxation Lagrangienne. On a vu plus haut que si on sait calculer :
23/3
x1=1 x1=0
5
23/3
x2=1 x2=0
7 7
x3=1 x3=0
Implémentation parallèle
– L’algorithme par séparation et évaluation se prête bien à une implémen-
tation parallèle, parce que le développement de chaque problème est indé-
pendant des autres problèmes.
– La seule dépendance est celle sur la meilleure solution, best. Mais on peut
accepter que cette valeur soit ajustée avec retard, la seule incidence étant
un élagage moins efficace.
– Paradoxe : l’élagage peut être plus efficace si le parallélisme permet d’at-
teindre plus vite la région de l’arbre où se trouve le minimum.
Exemple du sac-à-dos
Soit à résoudre :
n
X
min ci xi ,
i=1
n
X
wi xi 6 W,
i=1
xi ∈ {0, 1}
Équations de récurrence
– Soit à calculer V1 (W ). Il y a deux choix possibles : x1 = 0, x1 = 1.
– Un fois la valeur de x1 fixée, on doit résoudre un autre problème de sac-
à-dos.
– Si x1 = 0, la capacité disponible est toujours W , on doit calculer V2 (W ).
– Si x1 = 1, il ne reste plus que W − w1 unités de capacité, mais on a déjà
obtenu c1 unités de valeur.
– Dans le cas général, on a la récurrence :
Vk (W ) = max{Vk+1 (W ), Vk+1 (W − wk ) + ck }.
– De plus, Vk (W ) = 0 si W 6 0. Pn
– Méthode de résolutions. On remarque que 0 6 W 6 B = i=1 wi .
– Il suffit donc de calculer Vk (W ) pour les B valeurs [1, . . . B] et pour k =
n, . . . 1.
Algorithme
#define N ...
#define B ...
int w[N+1];
int c[N+1];
void main(void){
int V[N+1][B+1];
int W, k, c1, c2;
for(W=1; W <= B; W++)
if(w[N] <= W)
V[N][W] = c[N];
else V[N][W] = 0;
for(k=N-1; k >= 1; k--)
for(W = 1; W <= B; W++){
c1 = V[k+1][W];
if(W - w[k] > 0)
c2 = V[k+1][W - w[k]] + c[k];
else c2 = 0;
V[k][W] = c1 > c2 ? c1 : c2;}}
Remarques
– On lit directement la valeur du problème original dans V1W .
– Noter que l’on a résolu non seulement le problème original, mais le pro-
blème pour toutes les valeurs possibles de W . En effet, Vk (W ) = Vk (B) si
W > B.
Exemple
HH k
H
1 2 3 4
W HH
11 10 9 7 4
10 9 9 7 4
9 9 9 7 4
8 9 9 7 4
max x1 + 2x2 + 3x3 + 4x4
7 9 9 7 4
4x1 + 3x2 + 3x3 + x4 6 5
6 7 7 7 4
x1 , x2 , x3 , x4 ∈ {0, 1}
5 7 7 7 4
4 7 7 7 4
3 4 4 4 4
2 4 4 4 4
1 4 4 4 4
0 0 0 0 0
Complexité
– Il est facile de voir que la complexité est O(n.B).
– On dit que le problème est pseudo-polynomial. En effet, n.B est bien un
polynôme, mais B est exponentiel en la taille des wk (nombre de bits).
– L’ensemble [0, B] est «l’ensemble des états» de l’algorithme. Il peut être
à plusieurs dimensions. Dans ce cas, la complexité devient prohibitive.
Reconstituer la solution
– Il suffit d’introduire un nouveau tableau x[N][B+1].
– On modifie l’algorithme comme suit :
if(W - w[k] > 0){
c2 = V[k+1][W - w[k]] + c[k];
else c2 = 0;
if(c1 > c2){
V[k][W] = c1; X[k][W] = 1;
} else {
V[k][W] = c2; X[k][W] = 0;
}
– On reconstitue la valeur des xi par la règle :
W = W_0;
for(k=1; k<=N; k++){
x[k] = X[k][W];
W = W - x[k]*w[k];
}
Économiser la mémoire
– Si l’on n’est intéressé que par la valeur de l’optimum, il est facile de voir
que l’on n’a besoin que de deux lignes du tableau V, V[k] et V[k+1].
Généralisation
– Soit à résoudre :
minx∈Ωn fn (x),
gn (x) 6 0.
– Il est évident que la méthode ne marche que parce que la fonction objectif
et les contraintes ont des propriétés spéciales.
– La fonction objectif doit être séparable. Soit x un vecteur. On note xhd
(head) la première composante de x et xtl (tail) le vecteur des autres
composantes.
– Une fonction fn à n variables est séparable s’il existe une fonction hn et
une fonction fn−1 telles que :
fn (x) = hn (xhd , fn−1 (xtl )),
∂hn (x, y)
> 0
∂y
Théorème 3.1.
min fn (x) = min hn (xhd , min fn−1 (xtl ))
gn (x)60 xhd ∈Ω gn (xhd ,xtl )60
Algorithme
– On suppose que l’ensemble des valeurs possibles de x, Ω et celui des valeurs
possible de S, S sont finis.
Application au sac-à-dos
– La fonction objectif se met bien sous la forme :
n
X n
X
ci xi = c1 x1 + ci xi .
i=1 i=2
Autres exemples
– On peut envisager d’autres formes de la fonction objectif, comme :
n
Y
xci i .
i=1
– Ici la fonction de combinaison est la multiplication, qui est bien non dé-
croissante en son deuxième argument à condition que le premier argument
soit non négatif.
Le voyageur de commerce
– On se donne n villes et une matrice des «distances» {dij | 1 6 i 6 n, 1 6 j 6 n }.
Certaines distances peuvent être infinies.
– On demande de trouver une tournée de longueur minimale.
– Une tournée est un circuit hamiltonien, i.e. qui passe une fois et une seule
par chaque ville.
– Le problème est très difficile, parce que le nombre de circuits (hamilto-
niens) est très élevé.
Équation de récurrence
– On peut choisir une ville arbitraire, par exemple la ville 1, comme point
de départ de la tournée.
– Soit S un sous ensemble de [1, n] contenant 1. On considère les chemins
hamiltoniens de S, c’est-à-dire les chemins partant de 1 et passant une fois
et une seule par chaque ville de S.
– On note P red(k) l’ensemble des prédécesseurs de k, c’est-à-dire l’ensemble :
Relaxation
– On peut simplifier le problème en demandant que le chemin passe par |S|
villes sans exiger qu’il soit hamiltonien.
– On peut alors traiter en une seule fois tous les sous-ensembles de même
cardinal.
– On obtient une borne inférieure de la longueur de la tournée, qui peut être
utilisée, par exemple, dans un algorithme branch and bound.
Amélioration itérative
Algorithme : Hill-Climbing
x best := random(S)
best := f (x best)
for i = 1 to n do
x := random(S)
repeat
z := x
foreach y ∈ V (x) do
if f (y) > f (x) then
x := y
break
until z = x
if f (x) > best then
best := f (x)
x best := x
Bassin d’attraction
– Autour de chaque maximum local a il existe un bassin d’attraction A défini
par :
a ∈ A,
(∀y ∈ V (x) : f (y) > f (x) ⇒ y ∈ A) ⇒ x ∈ A.
Algorithme : Simulated-Annealing
T := . . .
x := xbest := random(S)
best = f (x)
for i := 1 to n do
for j := 1 to m do
y := random(V (x))
if f(y) > f(x) then
x := y
if f(x) > best then
best := f(x)
xbest := x
else v = random([0, 1])
f (y)−f (x)
if v < e T then x := y
T := 0.99T
Chaı̂ne de Markov
– Une chaı̂ne de Markov uniforme, discrète et à temps discret est un système
qui peut exister dans plusieurs états formant un ensemble S. Soit xn l’état
du système à l’état n. La chaı̂ne ne change d’état qu’aux instants de valeur
entière.
– La probabilité de transition de l’état x à l’état y ne dépend que de x et
de y. Elle ne dépend ni du temps, ni des états antérieurs occupés par le
système. Soit PP xy la probabilité de transition de l’état x à l’état y.
– On doit avoir y∈S Pxy = 1. La matrice pxy est une «matrice stochas-
tique».
– Il est clair qu’un algorithme de recuit simulé fonctionne comme une chaı̂ne
de Markov.
Distribution limite
pn = pn−1 .P
Exemple, Sac-à-dos
– L’ensemble des états est celui des suites binaires de taille n qui vérifient
la contrainte.
– Voisinage : deux suites qui diffèrent par un seul bit.
– Sur un petit exemple, le résultat n’est pas très satisfaisant.
Algorithme : Tabou
essais := ∅
for i := 1 to n do
tabou := ∅ ; x := . . .
continue:= true
while continue do
add_FIFO(tabou, x)
if V (x) r tabou 6= ∅
then x := argmin {f (y) | y ∈ V (x) r tabou }
else continue:= f alse
essais ∪= x
return best(essais)
Évaluation
– Contrairement au recuit simulé, il n’y a pas de théorie de la méthode
Tabou.
– Elle est cependant réputée plus efficace et fiable que le recuit simulé.
– Le choix de la longueur de la liste Tabou (NB- qui est cachée dans la
fonction add_FIFO) est le plus important.
– L’autre paramètre est le nombre d’essais (n ci-dessus) qui ne peut guère
être choisi que de façon expérimentale.
Evaluation
Algorithme : Genetic(P, N, L, Q)
for i := 1 to P do x[i] := random(S)
for k := 1 to N do
sort(x, P, f )
l := m := p/5
for q = 1 to Q do
i := random(J1, mK)
x[l + 1] := mutate(x[i]); l += 1
while l < P do
i = random(J1, mK)
j = random(J1, mK)
if i 6= j then
cut := random(J2, L − 1K])
(u, v) := crossover(x[i], x[j], cut)
x[l] := u; x[l + 1] := v; l := l + 2