Vous êtes sur la page 1sur 59

Recherche Opérationnelle

Paul Feautrier

20 mai 2004
2

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


Table des matières

1 Optimisation sans contraintes 5


1.1 Principaux concepts . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Optimisation continue sans contrainte . . . . . . . . . . . . . . . 10
1.3 Programmation linéaire . . . . . . . . . . . . . . . . . . . . . . . 15

2 Optimisation sous contraintes 27


2.1 Conditions de Kuhn et Tucker . . . . . . . . . . . . . . . . . . . . 27
2.2 Une méthode directe . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3 Méthodes duales . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
2.4 Fonction de Lagrange, point-col . . . . . . . . . . . . . . . . . . . 32
2.5 Optimisation combinatoire . . . . . . . . . . . . . . . . . . . . . . 36
2.5.1 coque entière . . . . . . . . . . . . . . . . . . . . . . . . . 38
2.5.2 Algorithme de Gomory . . . . . . . . . . . . . . . . . . . 39
2.5.3 Techniques de codage . . . . . . . . . . . . . . . . . . . . 41

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

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


Chapitre 1

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é

1.1 Principaux concepts


Qu’est ce que la recherche opérationnelle ?
– Vocabulaire : Recherche opérationnelle = programmation mathématique
= optimisation (mais pas optimisation de programme).
– Recherche opérationnelle = modélisation mathématique des processus de
prise de décision.
– Inconnues : les variables de décision.
– Évaluation de la décision = fonction économique ou fonction «objectif».
– Trouver les valeurs des variables de décision qui minimisent (ou maxi-
misent) la fonction objectif.

Recherche opérationnelle

modélisation
optimisation action
6 Optimisation sans contraintes

– La modélisation est un art, l’optimisation est une science.


– Applications : planification du débarquement de Normandie, optimisation
d’un programme de calcul intensif, investissement en bourse.
– Investissement en bourse = optimisation avec information incomplète
ou aléatoire.
– Planification d’une opération militaire = il y a un adversaire = théorie
des jeux.
– Optimisation d’un programme = en principe, on a une information com-
plète.
– Le cours est essentiellement consacré à l’optimisation avec information
complète.

Informatique ou mathématique ?

Mathématique Informatique

Théorèmes d’existence Intelligence Algorithmes


Convergence Artificielle Preuves de terminaison

Recherche Opérationelle

Complexité

Vocabulaire

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


1.1 Principaux concepts 7

Forme canonique :
trouver x ∈ D qui mi- courbes de niveau de
nimise f . la fonction objectif

min f (x) optimum


x ∈ D

contraintes

Optimum local, global


– Minimum local : a est un minimum local de f s’il existe un voisinage V
de a tel que :
x ∈ V ⇒ f (x) > f (a).

– Minimum global : a est un minimum global de f dans D si et seulement


si :
x ∈ D ⇒ f (x) > f (a).

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


8 Optimisation sans contraintes

convexe convexe convexe non convexe

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é.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


1.1 Principaux concepts 9

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

f1 (x) 6 f1 (y), f2 (x) 6 f2 (y).

– La relation de domination est un ordre partiel. On ne peut donc pas prou-


ver l’unicité d’un minimum s’il existe.
– L’optimum de Pareto (ou le Pareto) du problème est l’ensemble des solu-
tions non dominées.

Pareto

prix

domination

latence

Que faire avec un Pareto ?

Pondération
On attribue un poids à chaque objectif et on minimise l’objectif pondéré.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


10 Optimisation sans contraintes

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

1.2 Optimisation continue sans contrainte


Optimisation continue sans contrainte
On considère une seule variable
min f (x)
x ∈ R
– Si on connaı̂t la dérivée f 0 de f , le problème se ramène à trouver les racines
de f 0 , puis à les tester une par une pour savoir si elles sont un minimum,
un maximum ou un point d’inflexion.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


1.2 Optimisation continue sans contrainte 11

– On peut utiliser pour cela des méthodes classiques : itération de Newton


(si on peut calculer la dérivée seconde), dichotomie, méthode de la sécante.
– Si on ne connaı̂t pas la dérivée, la première chose à faire est de trouver un
encadrement du minimum. Il n’y a pas de méthode générale, on utilise les
renseignements que l’on peut avoir sur f .

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.

Démonstration. Soit c le minimum de f , et x et y qui violent la condition


d’unimodalité, par exemple c 6 x 6 y et f (c) < f (y) < f (x). Soit 0 6 λ 6 1 tel
que x = λc + (1 − λ)y. Par convexité on doit avoir f (x) 6 λf (c) + (1 − λ)f (y)
mais aussi λf (c) + (1 − λ)f (y) 6 f (y) < f (x) une contradiction. 

Méthode par trichotomie

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


12 Optimisation sans contraintes

Méthodes par exploration


– Il est toujours indispensable de connaı̂tre une encadrement [a, b] du mini-
mum.
– On suppose toujours que f est unimodale. On choisit un pas d’explora-
tion d. On calcule f aux points xk = a + k.d jusqu’à trouver soit une
configuration f (xk ) 6 f (xk+1 ), soit jusqu’à atteindre le point b.
– On fait a := xk−1 , b := xk+1 , d := ξd et on recommence. ξ < 1 est le
facteur de convergence.
– On s’arrête quand d est devenu suffisamment petit.
– La méthode peut s’appliquer à une fonction non unimodale. On obtient
alors un optimum local sans garantie qu’il soit global.

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.

Optimisation à plusieurs variables


min f (x)
– Forme du problème :
x ∈ Rn
– Les inconnues sont les n composantes du vecteur x.
– La notion de fonction unimodale ne se généralise pas.

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.

Recherche suivant les axes


– On prend comme directions les vecteurs cano-
niques de la base. Ceci revient à fixer n−1 va-
riables de la fonction f , et à optimiser suivant
la ne . On passe ensuite à la variable suivante.
– La méthode est très lente et peut même ne
pas converger si les courbes de niveau sont à
peu près parallèles aux diagonales.
– On peut l’accélérer en effectuant N pas puis
en utilisant la direction aN − a0 .

Gradient
– On suppose que la fonction f a une dérivée.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


1.2 Optimisation continue sans contrainte 13

∂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.

Démonstration. Soit a le point de départ d’une re-


cherche unidimensionnelle suivant la direction ∇f (a)
et b son point d’arrivée. La dérivée de la fonction à
minimiser est :
df (a − x∇f (a)) a b
= −∇f (a).∇f (x).
dx
En b cette dérivée est nulle, d’où la propriété. 

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

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


14 Optimisation sans contraintes

– Les coordonnées de x(k) sont données par la formule :

k
X
x(k) = x(0) + λi di .
i=1

Preuve

Lemme 1.4. En tout point x(k) le gradient de f est orthogonal au sous-espace


engendré par d1 , . . . , dk .
Pk−1
Démonstration. Le gradient en x(k) est Ax(k) + b = Ax(0) + i=1 λi ADi + b.
Si on multiplie par di et qu’on remplace λi par sa valeur il vient :

dTi (Ax(0) + b) T
di Ax(0) − .(di Adi ) + b = 0.
dTi Adi

Théorème 1.5. Le point x(n) est le minimum de f .

Démonstration. En effet, le gradient en x(n) doit être conjugué de n vecteurs


linéairement indépendants, et donc doit être nul. 

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 .

– On montre que si f est quadratique définie positive, la méthode est iden-


tique à celle des directions conjugués et converge en n étapes.

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


1.3 Programmation linéaire 15

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.

1.3 Programmation linéaire


Programmation linéaire

min c.x
Ax + b > 0

– x est le vecteur des inconnues, de dimension n.


– A est la matrice des contraintes, de dimension m × n.
– b est le terme constant, de dimension m.
– c de dimension n est le gradient de la fonction objectif.

Autres formes d’un programme linéaire


– Un programme linéaire peut se mettre sous de multiples formes, toutes
équivalentes.
– On peut changer le sens de l’inégalité, ou passer le terme constant de
gauche à droite.
– On peut remplacer les inégalités par des égalités en introduisant des va-
riables d’écart toutes positives :
Ax + b > 0 ≡ Ax + b − y = 0, y > 0

– On peut imposer que toutes les variables soient positives, en posant


x := x+ − x− , x+ , x− > 0
– On peut enfin transposer le programme : Ax + b > 0 ≡ xT At + bt > 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 }

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


16 Optimisation sans contraintes

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

A(n−1) x(n−1) + b(n−1) > 0.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


1.3 Programmation linéaire 17

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 ?

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


18 Optimisation sans contraintes

+ 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 !

Algorithme de Fourier-Motzkin étendu


– On peut au cours de l’exécution du test, garder la trace des combinaisons
effectuées. On voit alors que chaque contrainte du système d’ordre p est
une combinaison linéaire à coefficients positifs d’au plus deux contraintes
du système d’ordre p − 1.
– En généralisant, toute contrainte figurant dans l’algorithme est combi-
naison linéaire positive de lignes de Ax + b. Soit y > 0 le vecteur des
coefficients.
– Comme dans le système d’ordre n toutes les variables ont été éliminées,
on en déduit yA = 0.

Lemme de Farkas

Théorème 1.8.

(∃x : Ax + b > 0) ⇔ (∀y : y > 0, yA = 0 ⇒ yb > 0).

Démonstration. De gauche à droite soit u tel que Au + b > 0 . Soit un y quel-


conque tel que y > 0 et yA = 0. On a y(Ax + b) > 0. Mais

y(Ax + b) = yAx + yb = yb.

De droite à gauche, on exécute l’algorithme de Fourier-Motzkin étendu. On


en tire un y > 0 tel que yA = 0. On en déduit que yb > 0, ce qui veut dire que
le test a réussi et qu’il est possible de construire un u tel que Au + b > 0. 

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.

Lemme de Farkas affine

Théorème 1.9. Si le système Ax + b > 0 est faisable, alors :

(∀x : Ax + b > 0 ⇒ cx + d > 0) ⇔ (∃λ0 , λ > 0 : (∀x : cx + d = λ0 + λ(Ax + b))).

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


1.3 Programmation linéaire 19

Démonstration. L’implication de droite à gauche est évidente. De gauche à


droite, l’hypothèse revient à dire que le système Ax + b > 0, cx + d < 0 n’a pas
de solution. D’après le lemme de Farkas, ceci implique l’existence de y0 , λ > 0
tel que λA − y0 c = 0 et λb − y0 d < 0. De plus, y0 ne peut être nul car cela
impliquerait que Ax + b > 0 n’a pas de solution. On peut donc prendre y0 = 1.
On pose λb − d = −λ0 , λ0 > 0 et il vient :
λ(Ax + b) − cx − d = λb − d = −λ0 ,
d’où la conclusion du théorème. 

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. 

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


20 Optimisation sans contraintes

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.

Programmation linéaire, bis


– Le minimum de c.x sous la contrainte x ∈ P = Q + C + H est atteint en
l’un des sommets de Q à condition que H soit vide et que c ∈ C.
– En effet on peut écrire :
X X X
c.x = λc.u + µc.v + νc.w.

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


1.3 Programmation linéaire 21

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 :

optimum ω(b) = y ∗ .b.


cone des
directions
admissibles – Pour en savoir plus, il faut faire de la program-
mation linéaire paramétrique.

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

On trouvera dans Schrijver une formulation plus précise.

Algorithme du Simplexe

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


22 Optimisation sans contraintes

– «Trouver le point le plus bas d’un vase».


Fourier, 1828.
– Formalisation par Danzig, 1950.

Méthodes externes, méthodes internes

optimum

– Méthodes internes : il faut connaı̂tre un point faisable. On peut arrêter la


recherche avant l’optimum.
– Méthodes externes : il n’y a pas besoin de connaı̂tre un point faisable.

Ordre lexicographique
– Définition :

x  y = ∃k : x1,··· ,k−1 = y1,··· ,k−1 , xk < yk .

–  est un ordre total.


– L’ordre par composantes n’est pas total.
– c.x < c.y n’est pas un ordre.
– D’où l’intérêt de remplacer min c.x par min .
– On peut toujours ajouter une nouvelle variable u et la contrainte u > c.x
à condition que u soit la première inconnue.
– Cette technique évite les problèmes bien connus de dégénérescence.

Algorithme du simplexe externe ou dual

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


1.3 Programmation linéaire 23

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


24 Optimisation sans contraintes

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


1.3 Programmation linéaire 25

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

Le vecteur c = cN − cB .B −1 N est le vecteur des coûts réduits.


– Si xi fait partie de xn , comme il est nul on ne peut que l’augmenter pour
que la solution reste faisable. Ceci fait décroı̂tre f (x) à condition que
ci < 0.
– Si tous les coûts réduits sont positifs, on a trouvé l’optimum.
– Sinon, on choisit un xi dont le coût réduit est négatif (par exemple celui
dont le coût réduit est minimum).
– Puisque on fait croı̂tre xi et que les autres composantes de xN restent
nulles, la seule contrainte sur la valeur de xi est B −1 (b − N xn ) > 0. Il y
a deux cas possibles :
– Toutes les composantes de la colonne i de B = B −1 N sont négatives. Alors
xi n’est pas borné, et le minimum est −∞.
– Sinon, à chaque composante B ik > 0 correspond la borne xi 6 xk /B ik .
Soit j l’indice de la plus petite de ces bornes.
– Le point correspondant à xk = 0 sauf pour k = j : xj = xj /B ij est faisable
et la valeur de f (x) est inférieure à celle du point de départ.
– La base qui correspond au nouveau point courant s’obtient en remplaçant
dans b le colonne i par la colonne j.
– On poursuit l’algorithme en inversant la nouvelle base et en calculant la
nouvelle solution et les nouveaux coûts réduits.
– L’algorithme se termine si à chaque pas la valeur de l’objectif décroı̂t
strictement.
En effet il n’y a que Cnm bases possibles et la condition de dé-
croissance stricte empêche tout bouclage.
– Cependant l’algorithme peut boucler en cas de dégénérescence (il semble
que ce soit très rare).
– Comme pour l’algorithme dual, on peut mener les calculs de façon incré-
mentale (il suffit d’un seul pivot de Gauss pour inverser la nouvelle base).

Recherche du point faisable initial


– Il s’agit de trouver un point dans le polyèdre P = {x | x > 0, Ax > b }.
Soit 1 le vecteur dont tous les éléments sont égaux à 1, et soit y un nouveau

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


26 Optimisation sans contraintes

vecteur de même taille que x. On considère le problème :

min 1.y
x > 0
y > 0
Ax + y > b

– Il est facile de voir que le point x = 0, y = max(b, 0) est faisable. On peut


donc appliquer l’algorithme précédent.
– Si y ∗ = 0, il est facile de voir que le point x∗ ∈ P .
– Réciproquement, si x∗ ∈ P , alors (0, x∗ ) est faisable pour le problème
augmenté, donc le minimum est nul. Si inversement le minimum n’est pas
nul, P est vide.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


Chapitre 2

Optimisation sous
contraintes

Optimisation sous contraintes


– Résoudre :
min f (x),
courbes de niveau de
gi (x) 6 0, i = 1, . . . , n
la fonction objectif
x ∈ Rn
optimum

– L’ensemble des points faisables est


{x ∈ Rn | gi (x) 6 0, i = 1, . . . n }. Les fonctions g
sont les contraintes.
– La programmation linéaire est le cas particulier
où f et les gi sont linéaires. On obtient des pro-
contraintes
blèmes plus ou moins difficiles suivant que l’un
ou l’autre ou les deux de ces éléments sont non
linéaires (resp. non convexes).

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 .

2.1 Conditions de Kuhn et Tucker


Caractérisation de l’optimum
– On suppose les fonctions f et gi continues et à dérivées continues.
– L’optimum x∗ peut être à l’intérieur de F . Dans ce cas ∇f (x∗ ) = 0 .
– L’optimum peut être sur les frontières de F . Dans ce cas gi (x∗ ) = 0 pour un
certain nombres de contraintes (les contraintes saturées) et ∇f (x∗ ) n’est
pas nécessairement nul. On note I ⊆ {1, . . . , n} l’ensemble des indices des
contraintes saturées.
28 Optimisation sous contraintes

– En particulier, si les contraintes sont toutes des contraintes d’égalité, l’in-


térieur de F est vide et l’on est toujours dans le dernier cas (dit de La-
grange).
– En programmation linéaire, f (x) = c.x, ∇f = c n’est jamais nul (ou bien
le problème est trivial), donc l’optimum est sur la frontière de F .
– Une direction d est admissible en un point x∗ ∈ F si il existe η > 0 tel que
λ < η ⇒ x∗ + λd ∈ F .
– x∗ est un minimum si, pour toute direction admissible d,

λ < η ⇒ f (x∗ + λd) > f (x∗ ).

– La condition d’admissibilité peut s’écrire :

gi (x∗ + λd) = gi (x∗ ) + λd.∇gi (x∗ ) 6 0, i ∈ I,

soit encore d.∇gi (x∗ ) 6 0, i ∈ I.


– Les directions admissibles en x∗ appartiennent au cône

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 :

d ∈ C ⇒ f (x∗ + λd) − f (x∗ ) > 0,

d ∈ C ⇒ d.∇f (x∗ ) > 0.

Conditions de Kuhn et Tucker


– D’après le lemme de Farkas, il existe des λi > 0, i ∈ I tels que :
X
∀d : −d. λi .∇gi (x) = d.∇f (x∗ ),
i∈I
X

∇f (x ) − λi ∇gi (x) = 0.
i∈I

– Si on pose λi = 0 pour les contraintes non saturées, on peut étendre la


sommation à toutes les valeurs de i. Une condition nécessaire pour que x∗
soit un minimum est donc :

∃λi > 0 ,
i = 1, . . . , n
Xn
∇f (x∗ ) − ∇gi (x∗ ) = 0,
i=1
λi .gi (x∗ ) = 0.

– Les λi sont les multiplicateurs de Kuhn-Tucker.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


2.2 Une méthode directe 29

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.

2.2 Une méthode directe


Méthode des plans sécants
– Soit à calculer :
min f (x),
gi (x) 6 0, i = 1, . . . , n
x ∈ Rn
où on suppose que les fonctions f et gi sont convexes.
– On remarque que l’on peut supposer f linéaire. Sinon, on peut remplacer
le problème ci-dessus par le problème équivalent :
min z,
z − f (x) > 0,
gi (x) 6 0, i = 1, . . . , n
x ∈ Rn
– On procède de façon itérative. A l’étape k, on suppose que l’on connaı̂t
un polyèdre convexe Q(k) tel que :
Q(k) ⊆ F = {x | g(x) 6 0 } .
– On résout le programme linéaire :
min f (x),
x ∈ Q(k) .
Soit x(k) le point obtenu.
– Si x(k) ∈ F , c’est le minimum cherché. Sinon, il existe i tel que gi (x(k) ) < 0.
On forme :
\ n o
Q(k+1) = Q(k) x gi (x(k) ) + ∇gi (x(k) )T .(x − x(k) ) 6 0 ,

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. 

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


30 Optimisation sous contraintes

Lemme 2.2. Q(k+1) ⊆ F .

Démonstration. Soit en effet x un point de F . Puisque gi est convexe, on a


gi (x) > gi (x(k) ) + ∇gi (x(k) )T .(x − x(k) ). Or gi (x) 6 0, donc x ∈ Q(k+1) . 
0
Lemme 2.3. x(k) 6∈ Q(k ) , k 0 > k

Démonstration. Il suffit d’observer que x(k) ne satisfait pas la contrainte gi (x(k) )+


∇gi (x(k) )T .(x − x(k) ) 6 0. 

Lemme 2.4. Si x(k) ∈ F , c’est le minimum cherché.

Démonstration. En effet, d’une part x(k) ∈ F , et d’autre part,

x ∈ F ⇒ x ∈ Q(k) ⇒ f (x) > f (x(k) ).

Théorème 2.5. Si F est borné, tout point d’accumulation de la suite x(k) est
un optimum.

Démonstration. Soit y ∗ un point d’accumulation, et soit y (k) une suite extraite


de x∗ et convergeant vers y ∗ . Montrons d’abord que y ∗ ∈ F . On supposera pour
fixer les idées que à chaque pas, la contrainte utilisée pour construire une coupe
est celle qui est la moins satisfaite, c’est à dire celle pour laquelle gi (x( k)) > 0
est maximum. Supposons que y ∗ ne soit pas dans F , et soit gi la contrainte
la moins satisfaite. Puisque y (k) converge vers y il existe un k ∗ suffisamment
grand pour que gi soit la contrainte la moins satisfaite en y (k) . On ajoute la
contrainte :
gi (y (k) ) + ∇gi (y (k) )T .(x − y (k) ) 6 0.

0
Démonstration. Il est facile de voir que la distance ||y [k ) − y (k) ||, k 0 > k ne peut
[k)
|gi (y | ∗
être inférieure à |∇g i (y
[k) | , ce qui contredit le fait que y est limite des y (k) .
Supposons maintenant qu’il existe dans F un autre point y 0 tel que f (y 0 ) <
f (y ∗ ). Comme y 0 ∈ Q(k) ∀k, il s’en suit que l’algorithme de programmation
linéaire devrait toujours construire un point x(k) tel que f (x(k) ) 6 f (y 0 ). Par
suite de la continuité de f , toute limite x∗ de la suite x(k) doit être telle que
f (x∗ ) 6 f (y 0 ) ce qui est contradictoire. 

2.3 Méthodes duales


Méthodes de pénalités
– Principe : au lieu d’exclure les points qui violent les contraintes, ajouter à
la fonction économique une pénalité d’autant plus élevée que la contrainte
est moins respectée. Si la fonction de pénalité est régulière, on peut utiliser
les méthodes d’optimisation sans contrainte.
– En général, la pénalité dépend d’un paramètre qui permet de régler son
importance. Quand la pénalité devient très grande devant la fonction ob-
jectif, on tend vers l’optimum sous contrainte. Mais la fonction à optimiser
devient de plus en plus mal conditionnée.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


2.3 Méthodes duales 31

– 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

où les Sk formentP


une suite croissante tendant vers l’infini.
n
– On note H(x) = i=1 h(gi (x)) et xk la solution de Pk .

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. 

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


32 Optimisation sous contraintes

– Les xk appartiennent à un ensemble borné, soit parce que f (xk ) 6 f (x∗ )


et que f tend vers l’infini à l’infini, soit parce que H(xk ) 6 H(1) et que
H tend vers l’infini à l’infini. On peut donc extraire de xk une sous-suite
x` , ` ∈ L qui converge vers x̂.
– Par continuité, f (x` ) tend vers f (x̂), et comme f (xk ) 6 f (x∗ ), f (x̂) 6
f (x).
– Comme ϕk 6 f (x∗ ), ϕk a une limite phi∗ 6 f (x∗ ).
– lim S` H(x` ) = ϕ∗ −f (x̂). Donc H(x` ) tend vers 0, et par continuité H(x̂) =
0.
– Donc x̂ est un point faisable, donc f (x̂) > f (x∗ ), donc f (x̂) = f (x∗ ) et x̂
est un optimum.

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

– On élimine z à l’aide de la dernière contrainte et on applique la méthode


des pénalités :

max xy + n − x − y + S(n − x − y)2 .

– On utilise un système de calcul algébrique pour achever les calculs.

2.4 Fonction de Lagrange, point-col


Fonction de Lagrange, point-col
– Soit à résoudre :

min f (x),
gi (x) 6 0, i = 1, . . . , n
x ∈ S ⊆ Rn

– La fonction de Lagrange associée est :

L(x, λ) = f (x) + λ.g(x), λ > 0.

– g est le vecteur dont les composantes sont les gi .

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


2.4 Fonction de Lagrange, point-col 33

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 :

L(x∗ , λ∗ ) = min L(x, λ∗ ),


x∈S
g(x∗ ) > 0,
λ∗ .g(x) = 0.

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 :

f (x∗ ) + λ∗ .g(x∗ ) > f (x∗ ) + λ.g(x∗ ),

(λ − λ∗ ).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 :

L(x∗ , λ) = f (x∗ ) + λ.g(x∗ ) 6 f (x∗ ) = L(x∗ , λ∗ ),


puisque g(x∗ ) 6 0.

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 :

∀x ∈ S, g(x) > 0 : f (x∗ ) = L(x∗ , λ∗ ) 6 L(x, λ∗ ) = f (x) + λ∗ g(x) 6 f (x).

puisque λ∗ > 0 et g(x) 6 0.


x∗ est donc bien minimum global. 
Mais il existe des problèmes qui n’ont pas de point-col.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


34 Optimisation sous contraintes

Fonction de Lagrange et pénalités


– La fonction de Lagrange est une fonction de pénalité.

L(x, λ) = f (x) + λ.g(x), λ > 0.

– 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.

Une mauvaise idée


– Maximiser L(x, λ) par rapport à λ > 0 pour x fixé. Soit g(x) le résultat.
Minimiser ensuite g(x) sans contraintes.
– Il est facile de trouver le maximum.
– Si gi (x) > 0, il suffit de faire tendre λi → ∞ pour obtenir un maximum
infini.
– Sinon, le maximum est égal à f (x).
– Ceci revient donc à étendre f en une fonction discontinue non dérivable,
ce qui ne se prête pas à l’optimisation.

Une bonne idée


– Minimiser w(λ) = min L(x, λ) sans contrainte. Maximiser w(λ) sous la
contrainte λ > 0.

Lemme 2.10. w(λ) est une fonction concave.

Démonstration. Soit λ1 , λ2 deux valeurs de λ, α et β deux nombres positifs tels


que α + β = 1, et x un point arbitraire. Par définition des minima :

f (x) + λ1 g(x) > w(λ1 ),


f (x) + λ2 g(x) > w(λ2 ),
f (x) + (αλ1 + βλ2 )g(x) > αw(λ1 ) + βw(λ2 ).

et cette propriété vraie partout s’étend au minimum w(αλ1 + βλ2 ). 

Application à la programmation linéaire


– Il ne faut cependant pas croire que l’optimisation de w est toujours sans
contrainte. Soit par exemple le programme linéaire :

min c.x,
Ax − b > 0,
x > 0.

– La fonction de Lagrange associée est :

L(x, λ) = c.x − λ(Ax − b) − µx = (c − λA − µ).x + λb.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


2.4 Fonction de Lagrange, point-col 35

– 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.

C’est le dual du problème original!

Et s’il n’y a pas de point col ?


Théorème 2.11. Soit x∗ la solution du problème avec contraintes. On a :
maxλ>0 w(λ) 6 f (x∗ ).
Démonstration. Comme x∗ est faisable, g(x∗ ) 6 0. Donc

L(x∗ , λ) = f (x∗ ) + λg(x∗ ) 6 f (x∗ ),


w(λ) = min L(x, λ) 6 L(x∗ , λ) 6 f (x∗ ).
x

Cette propriété vraie pour tout λ s’étend au maximum. 


– La solution du problème dual fournit une borne inférieure de la solution
du primal.
– Il y a «saut de dualité» quand les deux solutions ne sont pas égales.
– w est dérivable à l’optimum, si et seulement si le saut de dualité est nul.

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

se ramène à un problème de programmation linéaire :

P (n) : max z
z 6 f (xi ) + λg(xi ), i = 1, . . . , n
λ > 0.

– Soit xn , λn la solution de P (n).


– Si S est infini, on suppose que l’on a déjà construit les points {x1 , . . . , xn }.
– On résout le problème linéaire ci-dessus.
– On détermine le point xn+1 comme solution de :

min L(x, λn ) = f (x) + λn g(x)


x∈S

par une méthode d’optimisation sans contraintes.


– Soit w(λn ) le minimum obtenu.
– On recommence avec n + 1 points, jusqu’à convergence.
Lemme 2.12. Soit x∗ la solution du problème avec contrainte : w(λn ) 6 f (x∗ ).

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


36 Optimisation sous contraintes

Démonstration. Puisque x∗ ∈ S, w(λn ) 6 f (x∗ ) + λg(x∗ ) 6 f (x∗ ) puisque que


x∗ est faisable. 
Lemme 2.13. f (x∗ ) 6 z n .
Démonstration. Il est évident que hf (x∗ ), λn i est un point faisable pour P (n).

Lemme 2.14. z n+1 6 z n .
Démonstration. Tout point faisable pour P (n + 1) est faisable pour P (n). 

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.

2.5 Optimisation combinatoire


Optimisation combinatoire
– Problème d’optimisation sous contraintes où l’ensemble des points fai-
sables est non pas continu mais discret.
– Forme du problème :

min f (x)
x ∈ S

– Les inconnues sont les n composantes du vecteur x. S est l’ensemble discret


des points faisables.
– En général, S est produit cartésien d’ensembles plus petits, et sa taille est
le produit des tailles de ces petits ensembles (d’où le nom : optimisation
combinatoire).
– Chaque composant de S correspond à un choix ; il faut trouver la bonne
suite de choix, sachant que ceux-ci ne sont pas indépendants en général.

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


2.5 Optimisation combinatoire 37

– La structure du programme est alors :

Sk0 R0 Sk1 A1 Sk1 . . . At Skt Rt Skt+1

– On suppose que k0 et kt+1 sont fixés par le cahier des charges.


– Trouver la séquence de restructurations donnant le temps total minimum.

Quelques méthodes de solution


– Une heuristique gloutonne.
– On remarque que souvent θkl  Tik . Pour l’exemple matriciel, le temps
de transposition est O(n2 ) alors que le temps du produit est O(n3 ).
– On choisit donc Skj de façon que Tikj soit minimum, et on rajoute des
redistributions si nécessaire.
– Programmation dynamique. On remarque que le problème a une structure
analogue à celle d’un problème de plus court chemin.
– On note Pn (k) le problème d’optimiser le programme analogue au pro-
gramme initial, mais ou on s’arrête juste après la redistribution Rn avec
une structure de données Sk . Le problème initial est Pt (kt+1 ). Soit Ωn (k)
le meilleur temps d’exécution de Pn (k). On a la relation de récurrence :

Ωn (k) = min Ωn−1 (`) + Tn` + θ`k ,


`
Ω0 (k) = θ k0 k .

– 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

– Il s’agit de minimiser la somme Tc + Tr sous les contraintes (2.1) et Xik ∈


{0, 1}. C’est un problème de programmation quadratique en nombres en-
tiers.

Programmation linéaire en entiers


– Définition.

min x,
Ax + b > 0,
x ∈ N.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


38 Optimisation sous contraintes

– Noter que x ∈ N implique x > 0. Il s’agit donc de l’analogue exact du


problème résolu par l’algorithme dual, à ceci près qu’il y a une contrainte
d’intégrité en plus.
– On suppose en général que A et b ont des coefficients entiers.

2.5.1 coque entière


Coque entière
– Soit S un ensemble de Rn . La coque entière de S, notée Ŝ est la coque
convexe de l’ensemble des points entiers de S.

x ∈ Zn ∩ S ⇒ x ∈ Ŝ,
x, y ∈ Ŝ, λ, µ > 0, λ + µ = 1 ⇒ λx + µy ∈ Ŝ.

Propriétés de la coque entière

Lemme 2.15. Si A est convexe, Â ⊆ A.

Lemme 2.16. A ⊆ B ⇒ Â ⊆ B̂.

Lemme 2.17. Si Zn ∩ P ⊆ S convexe, alors P̂ ⊆ S.

Démonstration. Un point de P̂ est combinaison convexe d’un certains nombres


de points de Zn ∩ P , qui appartiennent par hypothèse à S. Or S contient toutes
les combinaisons convexes de ses points. 

Caractérisation de la solution entière

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.

Démonstration. Soit P = Q + C un polyèdre, où Q est borné et C un cône. On


peut supposer que les vecteurs générateurs vi de C sont entiers, et il est facile
de voir que Ĉ = PC.
Soit B = { i µi vi | 0 6 µi 6 1 }. Il est clair que B est un polyèdre borné
inclus dans C. Admettons que P̂ = Q \ + B + C (ce sera montré par les deux
lemmes suivants). Or Q + B est borné, et pour un polyèdre borné le théorème
est évident, puisque la conque entière est enveloppe convexe de ses points entiers
qui sont en nombre finis. 

Lemme 2.19. P̂ ⊆ Q
\ + B + C.

Démonstration. D’après un lemme ci-dessus, il suffit de considérerP un point x


. On peut l’écrire x = q+c, q ∈ Q, c ∈ C. Il en résulte c = i µi vi . On
entier de PP
pose c0 = i bµi c vi et b = c − c0 . Il est clair que b ∈ B, donc que q + b ∈ Q + B,
que c0 ∈ C est entier, et que q +b = x−c0 est entier, donc que q +b ∈ Q \ + B. 

Lemme 2.20. Q
\ + B + C ⊆ P̂ .

Démonstration. Puisque Q + B ⊆ P , Q
\ + B + C ⊆ P̂ + C = P̂ + Ĉ = P\
+C =
P̂ . 

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


2.5 Optimisation combinatoire 39

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̂ .

2.5.2 Algorithme de Gomory


Coupe de Gomory
– Construction d’une coupe : soit
a/D.x + b/D > 0
une des contraintes du problème. D est le dénominateur commun des co-
efficients de x et du terme constant.
– Par construction de l’algorithme dual, la valeur de cette contrainte est
l’une des variables d’écart du problème initial, qui doit être entière. Comme
les x sont entiers :
ax + b mod D = 0,
(a mod D)x ≡ (−b mod D)(modD),
(a mod D)x = (−b mod D) + kD,
– k est nécessairement positif, d’où :
(a mod D)x − (−b mod D) > 0.

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


40 Optimisation sous contraintes

Preuve

Théorème 2.22. Si l’algorithme se termine, ou bien on a trouvé la solution


entière, ou bien le problème n’a pas de solution.

Démonstration. Soit Pn le polyèdre obtenu après la ne coupe. Par construction,


tous les points entiers de P = P0 sont dans Pn . Si donc Pn est vide, P ne
contient aucun point entier. Sinon, soit x∗ le minimum lexicographique de Pn ,
et supposons qu’il est entier. Si P contenait un point entier plus petit, il serait
dans Pn ce qui serait une contradiction. 

Lemme 2.23. On peut toujours supposer qu’il existe une solution.

Démonstration. On considère le problème étendu

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.

Démonstration. Évident, puisque Pn+1 ⊆ Pn . 


sj
+ Dt > 0 la ligne qui
P
– A une certaine étape de l’algorithme, soit j D xj
va fournir la coupe.
– A l’étape qui suit, l’algorithme du Simplexe exécute un pivot. Soit xj la
variable
P éliminée.
s0 t0
– Soit : j Dj xj + D > 0 la ligne après l’exécution du pivot.
t0
Lemme 2.25. Il existe un nombre entier Q tel que Dt < Q 6 D.
P s mod D
Démonstration. La coupe est : j j D xj − −t mod
D
D
>0
Les formules de changement de base donnent :

t0 t sj −t mod D D t −t mod D
= + 6 + .
D D D D sj mod D D D

Soit q le quotient entier par défaut de t par D : t = qD + t mod D.

t0 t mod D + (−t mod D)


>q+ .
D D
Le deuxième terme est égal à 1, il suffit donc de prendre Q = q + 1. D’autre
part t/D = (q + 1) − (D − t mod D)/D < q + 1. L’inégalité est stricte puisque
t n’est pas entier. 

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


2.5 Optimisation combinatoire 41

– A un instant donné du déroulement de l’algorithme, on dit qu’une ligne est


active si lors d’une opération ultérieure, la valeur de son second membre
changera.

Lemme 2.26. La première ligne ne peut être active qu’un nombre fini de fois.

Démonstration. Soit τ1 = dt1 e. On a l’encadrement τ1 −1 < t1 6 τ1 . Considérons


l’évolution de τ1 après une coupe.
Si la source de la coupe est la ligne 1, après le changement de base qui suit,
τ1 augmente au moins d’une unité. Si la source est une autre ligne, c’est que
t1 est entier. Une autre ligne est source de la coupe, et si la première ligne est
active, c’est que S1j est non nul. La valeur de t1 augmente. Qu’elle prenne une
valeur entière ou fractionnaire, la valeur de τ1 augmente au moins d’une unité.
Or t1 donc τ1 sont bornés par la solution optimale x∗1 . 

Théorème 2.27. L’algorithme des coupes de Gomory converge.

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.

2.5.3 Techniques de codage


Variables booléennes
– On peut coder un choix entre n possibilités à l’aide de n variables 0-1,
X1 , . . . , Xn .
– Chaque variable entière nePpeut prendre que les valeurs 0 ou 1 : 0 6 x 6 1.
n
– Les choix sont exclusifs : i=1 Xi = 1.
– Si à chaque choixPest associé une quantité ai , la quantité associée à un jeu
n
de variables est i=1 Xi ti .
– On peut considérer les Xi comme des booléens et coder les opérateurs :

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


42 Optimisation sous contraintes

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.

Techniques de grands nombres


– Soit P = {x | Ax + b > 0 } et Q = {x | Cx + d > 0 } deux polyèdres dont
on doit explorer les points entiers. Soit z une nouvelle variable 0-1.
– Si P et Q sont bornés, alors pour M suffisamment grand, le polyèdre :

P ⊕ Q = {z, x | Ax + b + M z > 0, Cx + d + M (1 − z) > 0 }

est l’«union disjointe» de P et Q.


– On peut mener l’exploration sur P ⊕ Q en une seule fois.
– M doit être choisi de telle façon que x ∈ P entraı̂ne Cx + d + M > 0 et
réciproquement.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


Chapitre 3

Méta-heuristiques

3.1 Séparation et évaluation ou Branch-and-Bound


3.1.1 Algorithme
Séparation et évaluation
– Plus communément appelée branch and bound. Soit un problème de la
forme :

min f (x)
gi (x) 6 0, i = 1, . . . , n

– Principe. On construit une arbre de problèmes. Le problème initial est la


racine.
– On s’arrange pour diviser le problème en deux (ou plus) sous-problèmes,
par exemple en introduisant une contrainte supplémentaire, qui peut être
satisfaite ou non.
– Le minimum peut appartenir à l’un quelconque des sous-problèmes.
– Si l’on peut prouver que l’un des sous problèmes est infaisable, on l’élimine.
– Si l’un des sous-problèmes est tellement contraint que sa solution est évi-
dente, on note la valeur de sa solution.
– On cherche à obtenir une borne inférieure de la solution d’un sous-problème.
Si elle est supérieure à la meilleure solution déjà obtenue, on élimine le
sous-problème.
– Dans le cas restant, on subdivise de nouveau le sous-problème.

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

Exemple : le sac à dos

max x1 + 2x2 + 3x3 + 4x4


4x1 + 3x2 + 3x3 + x4 6 5
x1 , x2 , x3 , x4 ∈ {0, 1}

– On veut emporter dans un sac à dos de contenance 5 une sélection de 4


objets de volumes respectifs 4, 3, 3, 1.
– Les utilités de ces objets sont respectivement de 1, 2, 3 et 4.
– Trouver la combinaison d’utilité maximum.

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

x3=0 x3=1 x3=0


x1=1

x1=0
x4=1 x4=0

5 1 7

Si on value les inconnues dans l’ordre x4 , . . . , x1 , la résolution est plus rapide.

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


3.1 Séparation et évaluation ou Branch-and-Bound 45

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 )

– On utilise deux variables globales, best et best pb.


– Dans cette version, l’arbre des problèmes n’est pas représenté explicite-
ment. Il est codé dans la suite des appels récursifs.
– La recherche se fait en profondeur d’abord. L’objectif est de trouver une
solution le plus vite possible, pour pouvoir ensuite élaguer l’arbre.
– Dans le cas du sac-à-dos, on donne la priorité à la valeur x = 1 pour éviter
la solution triviale xi = 0.
– La mémoire utilisée par l’algorithme est proportionnelle à la hauteur de
l’arbre, i.e. au nombres de variables, n. D’autres versions utiliseraient une
mémoire de taille O(2n ).

Construction de l’arbre des problèmes


– Que faire si les variables ne sont pas bivalentes ?
– Borner chaque variable, a 6 x 6 b, puis écrire en binaire la valeur de x−a,
avec log2 (b − a) bits. Engendre log2 (b − a) variables équivalentes.
– De façon équivalente, partitionner à l’aide de contraintes x < (b + a)/2 et
x > (b + a)/2. Méthode plus générale, car on peut écrire des contraintes
portant sur plusieurs variables.
– Il est possible de partitionner en plus de deux sous-problèmes. S’applique
en particulier au cas où les variables ne sont pas numérisées.

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é.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


46 Méta-heuristiques

x4=1 x4=0

x3=1 x3=0 x3=1 x3=0

x2=1 3
6
7

x2=0 x2=1 x2=0

x1=1 7 6

x1=0 x1=1 x2=0

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 :

w(λ) = min L(x, λ),


x

f = max w(λ)
λ>0

alors f ∗ est une borne inférieure du minimum cherché.


– Exploitation des propriétés de la fonction objectif, quand il est possible
de calculer facilement son minimum en ne tenant compte que d’une partie
des contraintes.

Linéarisation de la fonction objectif


– Si les contraintes sont linéaires, on peut remplacer f par une minorante
linéaire.
– Soit à minimiser une fonction contenant le produit de deux inconnues x
et y dans un polyèdre (affectation quadratique).
– Si on sait d’après les contraintes que x > 0 et y > b, on en déduit xy > bx.
La solution du problème dont la fonction objectif est bx est un minorant
de la solution du problème initial.

Linéarisation des contraintes


– On suppose la fonction objectif linéaire. On détermine un polyèdre qui
contient l’ensemble des points entiers faisables. Si le domaine des points
faisables est convexe, cette représentation peut être aussi précise qu’on le
veut.
– La solution dans le polyèdre est un minorant de la solution du problème
original.
– Exemple : Minimiser une fonction linéaire dans un disque.

3.1.3 Stratégie et Tactiques


– L’efficacité de la recherche dépend fortement :

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


3.1 Séparation et évaluation ou Branch-and-Bound 47

– De la qualité de la fonction d’évaluation.


– De la disponibilité d’une première bonne solution. Noter qu’aucun éla-
gage ne se produit tant qu’une solution n’est disponible.
– De l’ordre de traitement des nœuds.
– Dans le méta-algorithme ci-dessus :
– La fonction d’évaluation est implantée dans la fonction bound.
– L’ordre de valuation des variables est implanté dans la fonction branch.
– L’ordre de traitement des nœuds est implanté dans l’algorithme. C’est
l’ordre en profondeur d’abord et de gauche à droite.
– Est-ce la meilleure stratégie ?
– La stratégie en profondeur d’abord fournit très vite (en n étapes) une
solution, et utilise peu de mémoire. Mais elle peut s’égarer dans une région
peu intéressante de l’arbre.
– Dans la stratégie en largeur d’abord, on construit l’arbre niveau par ni-
veau.

23/3
x1=1 x1=0

5
23/3

x2=1 x2=0

7 7

x3=1 x3=0

Méta-algorithme (largeur d’abord)


– Dans la stratégie «meilleur d’abord», on se base sur l’idée que la valeur
de la borne inférieure est une estimation de l’optimum dans le sous-arbre.
– On a donc intérêt à développer d’abord le nœud qui a la meilleure borne.
– Dans l’exemple du sac-à-dos, les deux stratégies coı̈ncident.
– Au niveau de l’implémentation, il suffit que les problèmes soient ordonnés
par valeur (borne) croissante. On modifie les procédures insert et pop.
– On peut utiliser une structure de données plus adaptée, un tas par exemple.

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


48 Méta-heuristiques

best pb := . . . ; best := MAXINT


queue := ∅; insert(queue, pb0 )
while queue 6= ∅ do
pbcurrent := pop(queue)
if is_trivial(pbcurrent ) then
local best := trivial_solve(pbcurrent )
if local best < best then
best := local best
best pb := pbcurrent
else
local best := bound(pbcurrent )
if local best < best then
(pblef t , pbright ) := branch(pbcurrent )
insert(queue, pblef t ) ; insert(queue, pbright )

3.2 Programmation Dynamique


Programmation dynamique
– Méthode inventée par R. Bellman en 1956.
– Conçue sur le modèle de l’algorithme du plus court chemin dans un graphe.
– On remplace la résolution d’un problème de taille n par celle d’un certain
nombre de problèmes de taille n − 1, dont on combine les résultats.
– Exemple : calcul du plus court chemin entre deux points d’un DAG, i et
j.
– Si i = j, alors la longueur du plus court chemin est 0. Sinon, ce chemin
passe nécessairement par l’un des successeurs de i.
– Soit lij la longueur du plus court chemin, et dij la distance de deux som-
mets adjacents. On a la récurrence :

lij = min dik + lkj = min lik + dkj .


k∈Succ(i) k∈P red(j)

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}

– On suppose les wi entiers.


– On considère la famille de problèmes obtenue en faisant varier W et en ne
prenant en compte que les variables xi , i = k, . . . , n. Soit Vk (W ) la valeur
d’un tel problème.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


3.2 Programmation Dynamique 49

É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 }.

Conditions aux limites


– Que vaut Vn (W ) ?
– On ne peut fixer que la valeur de xn , et on doit avoir wn 6 W si on veut
pouvoir faire xn = 1. On a donc :
(
cn si W > wn
Vn (W ) =
0 sinon

– 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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


50 Méta-heuristiques

– Dans ce cas particulier, comme Vk (W ) ne dépend que de Vk+1 (W 0 ) pour


W 0 6 W , on peut ne calculer les valeurs que pour les valeurs de W au
plus égale à la contrainte du problème original.

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].

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


3.2 Programmation Dynamique 51

– Il suffit donc de 2B cellules de mémoire. Les deux lignes sont permutées à


chaque itération.
– Ce cas se présente quand la programmation dynamique est composante
d’un autre algorithme, par exemple un branch-and-bound.
– Si on souhaite reconstituer la solution, il faut soit stocker le tableau x, de
taille N.B, soit effectuer des calculs redondants.

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

Démonstration. Soit x∗ la solution du problème de droite, et soit y ∗ (xhd ) le


point où fn−1 (y) atteint son minimum sous la contrainte gn (xhd , xtl ) 6 0. Par
construction, hx∗ , y ∗ (x∗ )i satisfait la contrainte, donc fn (x∗ , y ∗ ) > minx∈Ωn fn (x).
Réciproquement, soit x la solution du problème de gauche. On a ming(xhd ,xtl )60 fn−1 (xtl ) 6
fn−1 (xtl ), donc, par la monotonie de hn
hn (xhd , min fn−1 (xtl )) > hn (xhd , fn−1 (xtl )),
g(xhd ,xtl )60

et cette propriété s’étend au minimum. 


– Cette propriété ne suffit pas. Si la décomposition de fn peut être poursui-
vie, elle fournit une récurrence permettant de calculer le minimum, mais
sa complexité est du même ordre que celle d’une recherche exhaustive.
– Pour aller plus loin, il faut plonger le problème initial dans une famille de
problèmes où les contraintes dépendent d’une variable d’état S ∈ S.
Pn (S) : min fn (x),
gn (x, S) 6 0,

où gn a les deux propriétés :


– ∃Tn gn (x, S) = gn−1 (xtl , tn (xhd , S))
– ∀x ∈ Ω, S ∈ S : tn (x, S) ∈ S.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


52 Méta-heuristiques

Algorithme
– On suppose que l’ensemble des valeurs possibles de x, Ω et celui des valeurs
possible de S, S sont finis.

for S ∈ S do Vn (S) = mingn (x,S)60 fn (x)


for k = n − 1 downto 1 do
for S ∈ S do
Vk (S) = min hk (x, Vk+1 (tk (x, S))
x∈Ω

– L’efficacité de la méthode est entièrement conditionnée par la taille de S


qui doit être énuméré.
– Les problèmes d’optimisation à une dimension sur Ω peuvent être résolus
par énumération (si |Ω| est petit) ou par toute autre méthode.

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

– La fonction h est l’addition, qui est bien monotone croissante en son


deuxième argument.
– La contrainte se met sous la forme :
n
X
wi xi − W 6 0,
i=1
Pn
et on peut écrire : i=2 wi xi − (W − w1 x1 ) 6 0.
– La fonction de transition est tk (x, W ) = W −
Pw k x.
n
– L’espace des états est S = [0, B] avec B = i=1 wi , l’espace des valeurs
est Ω = [0, 1].

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.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


3.3 Exploration aléatoire 53

– 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 :

{i ∈ [1, n] | dik < ∞ } .

– On note F (S, k) la longueur du plus court chemin de 1 à k qui passe une


et une seule fois par toutes les villes de S.
– Considérons la ville k 0 qui précède k dans le plus court chemin cherché.
Cette ville fait évidemment partie de P red(k) ∩ S.
– D’autre part, le chemin de 1 à k 0 passe par toute les villes de S − {k}. Si
sa longueur est supérieure à F (S − {k}, k 0 ), il est possible de l’améliorer.
On a donc la récurrence :

F (S, k) = min F (S − {k}, k 0 ) + dk0 k .


k0 ∈P red(k)∩S

– On a d’autre part la condition initiale F ({1}, 1) = 0.


– On peut donc résoudre le problème en tabulant la fonction F pour tous
les ensembles ne contenant qu’une ville, puis pour tous les sous-ensembles
de villes à 2, 3, ... éléments.
– On lit le résultat en F ([1, n], 1).
– Mais la méthode n’est pas très efficace car il y a en tout 2n−1 sous-
ensembles.

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.

3.3 Exploration aléatoire


3.3.1 Amélioration itérative
Position du problème
Soit à résoudre :
max f (x).
x∈S

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


54 Méta-heuristiques

– L’ensemble S est l’ensemble des configurations, ou ensemble des états.


On suppose qu’il est trop grand pour être énuméré, mais qu’il existe un
procédé efficace pour tirer une configuration au hasard dans S.
– f est la fonction objectif.
– On suppose que tout point x de S a un ensemble fini de voisins, V (x). Étant
donné x, il existe un procédé efficace pour énumérer V (x). Enfin, l’espace
des configurations est connexe, i.e. on peut aller de x à y quelconque par
des déplacements de voisin à voisin.
– Un maximum global de f est un point x∗ de S tel que ∀x ∈ S : f (x) 6
f (x∗ ).
– Un maximum local est un point x tel que ∀x ∈ V (x) : f (x) 6 f (x).

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.

– Si le point initial est dans le bassin d’attraction du maximum global, l’al-


gorithme Hill-Climbing trouve le maximum global.
– La probabilité d’atteindre le minimum global tend donc vers 1 quand n →
∞.
– Mais il est impossible d’avoir une certitude.

3.3.2 Recuit simulé


– Algorithme de Métropolis, 1953.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


3.3 Exploration aléatoire 55

– Voir aussi P. J. M. van Larrhoven ans E.H. Aarts, Simulated Annealing,


Theory and Applications, Kluwer, 1987.
– Analogie avec la physique statistique. Lorsqu’un objet physique pouvant
exister dans plusieurs états atteint l’équilibre thermodynamique, la popu-
lation d’un état d’énergie E est donnée par la loi de Boltzmann :
1 −E
p(E) = e kT ,
Z
où k est la constante de Boltzmann, T la température, et Z un facteur de
normalisation, la fonction de partition.
– Cet équilibre est dynamique. Il résulte de multiples transitions qui se com-
pensent. Une transition faisant varier l’énergie de ∆E a une probabilité
∆E
proportionnelle à e− kT .
– On modélise un problème d’optimisation par un système thermodyna-
mique dont on simule l’évolution.
– Les éléments de S sont les divers états possibles du système. L’«énergie»
de l’état x est f (x).
– Si le système est dans l’état x, il peut passer aléatoirement dans l’un des
états de V (x).
– La probabilité pour le système de passer dans l’état y ∈ V (x) est :
– Z1 si f (y) > f (x) ;
f (y)−f (x)
– Z1 e T si f (y) < f (x).
– Z est le facteur de normalisation.
– T est une pseudo-température.
– Si le problème a des contraintes qui ne sont pas intégrées dans la définition
de S, il suffit de faire f (x) = −∞ quand x n’est pas faisable.
– Au bout d’un certain temps, le système se stabilise.
– On réduit la valeur de la «température» et on continue.
– La motivation est de permettre au système simulé de s’échapper du bassin
d’attraction d’un minimum local pour atteindre le minimum global.

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

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


56 Méta-heuristiques

Analyse du recuit simulé


– Quand doit-on baisser la température (i.e., quel est la valeur de m) ?
– Combien de fois doit on baisser la température (i.e. quelle est la valeur de
n) ?
– A quelle vitesse faire baisser la température (la valeur 0.99 est elle la
bonne) ?

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.

Calcul des probabilités de transition


– Chaque tirage peut avoir trois résultats :
– On tire un point y tel que f (y) > f (x).
– On tire un point y tel que f (y) < f (x) et un nombre v tel que v <
f (y)−f (x)
e T .
– Dans le cas restant, on recommence le tirage.
P P f (y)−f (x)
– Fonction de partition : Z = f (y)>f (x 1 + f (y)<f (x) e T .
– Probabilité de la transition x → y :
– Z1 si f (y) > f (x) ;
1 f (y)−f (x)
– Ze
T sinon.

Graphe d’une chaı̂ne de Markov


– Le graphe d’une chaı̂ne de Markov a pour sommets les états de la chaı̂ne.
Il y a un arc de x vers y si et seulement si la transition x → y est de
probabilité non nulle.
– On peut construire les composantes fortement connexes (cfc) de ce graphe
et le graphe réduit.
– En vertu du principe que tout évènement de probabilité non nulle finit
par se produire au bout d’un temps suffisamment long, l’état de la chaı̂ne
finit toujours par parvenir dans l’une des cfcs terminale.
– On dit que la chaı̂ne est simple s’il n’y a qu’une seule cfc terminale.
– Une chaı̂ne simple finit par atteindre sa cfc terminale. A partir du moment
où elle entre dans la cfc terminale, elle passe une infinité de fois par chaque
sommet de celle-ci.

Distribution limite

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


3.3 Exploration aléatoire 57

– Si p0x est la distribution de probabilité initiale sur la cfc terminale, la


distribution après n étapes est égale à :

pn = pn−1 .P

– Le comportement de pn dépend donc des valeurs propres de P T . On


montre :
– Que 1 est valeur propre de P T .
– Que les composantes de pn sont positives, que leur somme est égale à
1, et par conséquent, qu’elles sont comprises entre 0 et 1.
– En conséquence, P T ne peut avoir de valeur propre de module > 1.
– On est dans le cas régulier quand 1 est valeur propre simple de P T . Une
condition suffisante est que tous les coefficients de P soient non nuls.
– Dans ce cas, la distribution de probabilité converge vers le vecteur propre
de P T associé à 1.

Application au recuit simulé


– Dans le cas du recuit simulé, aucune probabilité de transition n’est nulle.
On est donc toujours dans le cas régulier.
– Quand la température décroı̂t, certaines probabilités de transition tendent
vers 0. A la limite, chaque cfc est un ensemble contigu de minimum locaux.
La ou les cfcs terminales sont associées à l’extremum global.
– Pour arrêter la recherche, on peut attendre que la distribution de proba-
bilité soit stable (par exemple en estimant l’espérance mathématique de
x, si cela à un sens, ou celle de f (x).)

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.

Exemple, Voyageur de Commerce


– On suppose que la matrice des distances est symétrique.
– Ensemble des états : ensemble des circuits hamiltoniens du graphe.
– Voisinage.
– On choisit deux villes a et b visitées dans l’ordre a → b. Soit a0 la ville
qui précède a et b0 celle qui suit b.
– On construit le circuit a0 → b → a → b0 → a0 .
– Les résultats expérimentaux sont excellents.

3.3.3 La méthode Tabou


– On conserve les notions d’espace de configuration et de voisinage.
– Pour éviter de rester bloqué autour d’un optimum local, on conserve la
liste des derniers points visités, la liste tabou.
– Quand on explore un voisinage, on choisit le meilleur voisin à l’exclusion
des points de la liste tabou.
– La liste tabou est gérée comme une FIFO.

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


58 Méta-heuristiques

– Sa longueur est un paramètre crucial. Folklore : la valeur L = 7 est presque


toujours suffisante !

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.

3.3.4 Algorithmes génétiques


– Principe : on cherche à imiter ce que l’ont sait du fonctionnement de
l’évolution biologique.
– Chaque configuration doit pouvoir être codée par une chaı̂ne de caractères.
– Pour le sac-à-dos, on prend la chaı̂ne 0-1 des valeurs des variables.
– Pour le voyageur de commerce, on prend la liste des villes dans l’ordre
de la tournée.
– On travaille non pas sur une configuration, mais sur une population de
configurations, que l’on tire au hasard au début.
– On évalue f pour tous les individus de la population (parallélisme) on
classe et on retient les meilleurs 20% (par exemple).
– On complète la population à l’aide de 2 mécanismes :
– Mutation : on choisit un individu au hasard et on modifie (avec une
probabilité très faible) l’une de ses lettres.
– Croisement : On choisit deux individus x et y, on sélectionne un point
de croisement x = a.b, y = c.d, et on forme les individus a.d et c.b (la
longueur de a et celle de c doivent être égales).
– On itère jusqu’à stabilisation de la population.

Evaluation

Distribué sous license Open-Content: http://opencontent.org/opl.shtml


3.4 Conclusion générale 59

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

– L’originalité essentielle est de travailler sur une population et non sur un


individu unique. Similaire à l’idée du redémarrage aléatoire, mais permet
une évaluation parallèle si c’est possible.
– L’idée des mutations est similaire à l’exploration aléatoire d’un voisinage.
– L’idée de recombinaison peut avoir du sens ou non.
– Elle repose sur l’idée que les gènes ont un effet cumulatif et non posi-
tionnel.
– C’est faux pour le sac-à-dos, pour le voyageur de commerce, et peut-être
aussi dans la nature.
– La méthode ne s’applique donc efficacement que dans des cas particuliers.

3.4 Conclusion générale


– Tout un ensemble de méthodes, des plus particulières (la programma-
tion linéaire et les méthodes de gradient) aux plus générales (les méta-
heuristiques).
– Les méthodes particulières sont plus difficiles à programmer, mais plus
efficaces.
– Les méthodes générales sont faciles à programmer et d’un champ d’appli-
cation plus vaste.
– Donc choisir toujours la méthode la plus spécialisée compatible avec la
définition du problème (il existe beaucoup de logiciels tout faits, libres et
commerciaux).
– La méthode Branch and Bound demande une étude préliminaire du pro-
blème. Elle est très générale et pas trop difficile à programmer. Elle justifie
à elle seule le principe de Minoux : «En optimisation combinatoire, la li-
néarité n’est pas importante».

Distribué sous license Open-Content: http://opencontent.org/opl.shtml