Vous êtes sur la page 1sur 10

La programmation Iinaire en nombres entiers

Polycopi du cours de MOD du 18/02/2005


Alric Gradolatto


____________________

Sommaire

. ntroduction
. Les mthodes de recherches arborescentes par sparation et valuation
. Les mthodes de coupe
V. Conclusion

____________________


I. Introduction

La programmation linaire en nombres entiers est un domaine trs riche de la
programmation mathmatique. Les recherches dans ce domaine sont nombreuses et
ont vraiment commenc avec Gomory en 1958.
Nous allons en voir ici deux mthodes principales.

Considrons pour commencer le Programme Linaire suivant(PL) suivant :

=
=
0 x
b x . A
: s contrainte les Sous
x . c z Minimiser
(PL)

A est une matrice m x n et ses coefficients aij sont entiers, c est un vecteur de
longueur n et les cj sont entiers, b est un vecteur de longueur m et les bi sont entiers.
On considre le polytope suivant :
{ } 0 x b, A.x , R x/x
n
=
Dans toute la suite, nous considrerons ce polytope born et non vide (cette
hypothse d'tude n'est en fait pas restrictive)

Si l'on rsout ce PL tel quel, nous allons trouver gnralement une solution optimale
composante non entire. Mais voil, il arrive (et mme assez souvent) qu'une telle
mise en quation reprsente un problme bien concret, comme un problme
d'optimisation de production en fonction de produits ou de machines. On ne peut
alors pas parler d'une solution en huitime de machine.

On va donc introduire des nouvelles contraintes, celles d'intgrit. On obtient alors
un Programme linaire en Nombres Entiers (PNE) :

=
=
=
1...n) (j entier x 0 x
b x . A
: s contrainte les Sous
x . c z Minimiser
(PNE)
j


Comment rsoudre un PNE ? Une des premires ides que l'on pourrait avoir serait
de d'abord rsoudre le programme linaire continu, puis de prendre la valeur entire
la plus proche, un arrondi de la solution optimale non entire que l'on aurait trouv.
Malheureusement cette mthode est compltement fausse, comme on va le voir
dans l'exemple suivant.

Prenons un exemple de sac dos !

+
=
entiers , 0 x et x
59 x 12 x 10 : avec
x 11 x 10 z Minimiser

2 1
2 1
2 1

La solution optimale est x1=5,9 et x2=0.



exempIe du sac dos
0; 4,9
5,9; 0
1; 4
0
1
2
3
4
5
6
0 1 2 3 4 5 6 7
x1
x
2

Un arrondi de cette solution serait x1=6 et x2=0. Ce n'est en aucun cas une solution
du PNE, et pour deux raisons : premirement, cette solution ne satisfait pas les
contraintes ; deuximement ce n'est pas la solution entire au problme ! La solution
entire au problme est x1=1 et x2=4 (z=-54). On remarque mme qu'elle est trs
loigne de la solution optimale continue.

En fait, on peut mme construire des exemples du mme type o la solution optimale
entire est aussi loigne que l'on veut de la solution entire continue.

Donc on a bel et bien besoin de mthodes propres au PNE pour pouvoir les
rsoudre.

____________________

II. Les Mthodes de recherches arborescentes
par sparation et vaIuation
La premire grande famille de mthode que nous allons voir pour rsoudre les (PNE)
est celle des mthodes de recherches arborescentes par sparation et valuation
1. PrambuIe
Prenons un PNE (toujours le mme .) :

=
=
=
1...n) (j entier x 0 x
b x . A
: s contrainte les Sous
x . c z Minimiser
(PNE)
j


Comme on l'a dit, on considre que le polytope { } 0 x b, A.x , R x/x
n
= est born
(et non vide).
Ds lors on en dduit que chaque xj est born. Notons ceci :
j j j x
Comme xj est en plus valeur entire, on en dduit que xj ne peut prendre qu'un
nombre fini de valeurs.
Soit k+1 le nombre de valeurs que peut prendre xj. On peut alors transposer xj de la
faon suivante :
1 - 2 k que tel entier petit plus p et
1 ou 0 avec y y 2 ... y 2 y x
1 p
i p
p
1 0
+

= + + + =


Remarque : en pratique, on ne choisit pas forcment les coefficients 2^p. C'est un
peu ce qu'on prend dfaut de meilleure ide, car on peut trs bien trouver d'autre
coefficients astucieux qui rduisent le nombre de variables bivalentes yp utiliser.

Ainsi, on ramne donc le (PNE) initial Programme de variables Bivalentes (PB) :

= =
=
=
1...n) (j 1 ou 0 xj
b x . A
: s contrainte les Sous
x . c z Minimiser
(PB)

Ce problme a un nombre fini de n-vecteurs solutions (car x ne peut de toutes faons
prendre que 2^n valeurs possibles au plus).
Tout le problme est en fait de trouver parmi ces solutions possibles la solution
optimale. On peut penser faire une numration, mais pour donner un ordre d'ide,
ds que n>50 cela prend des sicles. D'autant qu'on peut remarquer en passant que
le passage de variables entires variables bivalentes peut trs facilement
augmenter d'un nombre considrable le nombre de variables du systme.

l nous faut donc trouver un moyen de pouvoir trouver la solution optimale parmi
toutes ces solutions sans avoir les examiner toutes.
C'est ce que nous apporte le concept de sparation et valuation
2. Le principe de sparation
On a donc un programme de variables Bivalentes xi.
Le principe de sparation est trs simple :
Soit S l'ensemble des n-vecteurs composantes 0 ou 1. On va construire un
arbre de sous-ensemble de S qui forment une partition de S.
A chaque itration de la construction de l'arbre, on va choisir une des
composantes xi du vecteur. Une des branches que l'on construira
correspondra au sous-ensemble de vecteurs o xi=1, et l'autre au cas o xi=0.

Exemple, pour n=3 :

Clairement 1 1 S et 0 1 S forment une partition deS.
Dans l'exemple on a arbitrairement choisi de sparer les sous-ensembles dans
l'ordre lexicographique des variables xi, mais rien ne nous y obligeait.
Passons maintenant au principe d'valuation.
3. La principe d'vaIuation
On va maintenant chercher ne pas parcourir tout l'arbre pour trouver la solution
optimale.

Supposons qu'on ait une fonction f dite fonction d'valuation, qui pour un sommet Sij
nous donne un minorant du cot z=c.x de la meilleure solution contenue dans Si:
{ } ij ij S x pour x . c Min ) S ( f
Pour chaque sommet de l'arbre, on a alors une minoration de ce que peut contenir
ce sous-ensemble comme solution!

Soit xs une solution du problme (qu'on dtermine par une mthode
heuristique/astucieuse/chanceuse quelconque, ou qu'au pire on met + ), et
zs=c.xs le cot associ.
Si quand on parcourt l'arbre, on a s z ) Sij ( f > , alors Sij ne peut pas contenir de
meilleure solution que xs, puisque f(Sij) tait dj un minorant de ce que pouvait
contenir Sij comme solution.
On ne parcourt donc les sommets de l'arbre que si on a s ij z ) S ( f , et on rduit ainsi
beaucoup le nombre de sommets examiner, ce qui est bien ce que l'on cherchait.
Petit exemple d'application avec l'arbre prcdent auquel on a rajout quelques
valuations :

Remarque : le parcours de l'arbre effectu est un parcours en meilleur d'abord. C'est
une des faons de procder mais il y en a d'autres. Justement.
4. En pratique
En pratique, il reste quelques petits dtails rgler pour pouvoir appliquer cette
mthode, en particulier :

- Comment choisit ou trouve t'on la fonction d'valuation f ? Une des possibilits
est de calculer la solution du PL continue restreinte au Sij, et le cot associ sera
alors la valeur de f en ce sommet. Cette mthode donnera une bonne valuation,
mais pourra tre coteuse et longue calculer. Suivant le problme, on pourra
essayer de trouver une mthode heuristique/astucieuse/chanceuse. Bien
souvent, il y aura un compromis faire entre vitesse d'obtention de la valeur
d'valuation et fiabilit de la valeur d'valuation.

- Quel sommet explore t'on chaque tape de la recherche de la solution
optimale? L il n'y a pas de bonne mthode, c'est suivant le problme en
question. Citons titre d'exemple la recherche en profondeur, en largeur ou en
meilleur d'abord

- Enfin suivant quel ordre des xi construit on l'arbre. Ce choix peut-tre dterminant
pour la rapidit d'obtention de la solution optimale. Dans le cas du problme du
sac dos par exemple, il est plus efficace de prendre l'ordre des xi par utilit
dcroissante. La dtermination de l'ordre des xi peut mme tre dynamis : on
dtermine le prochain xi sparer en fonction des valuations de la range
d'avant.

Voil les grandes lignes des mthodes de parcours d'arbre par sparation et
valuation. l en existe bien sur de multiples sophistications, plus adaptes chaque
fois tel ou tel type de cas.
Passons maintenant aux mthodes de coupes.
____________________


III. Les mthodes de coupe
1. Principe
Ce sont des mthodes bien souvent itratives. A chaque tour :
- On essaie de rsoudre le PL continu. Si on trouve une solution extrme continue,
on a gagn.
- Sinon on va chercher une (ou plusieurs d'ailleurs) contrainte supplmentaire qui va
liminer la solution extrme sans liminer de solution entire : cela s'appelle une
coupe. Avec cette contrainte supplmentaire, on obtient un PL augment , et on
recommence.

Exemple avec le problme du sac dos utilis dans l'introduction :


X1<=5 est une coupe : cette contrainte limine la solution optimale sans toucher aux
solutions entires. De mme toutes inquations du type + 2 x 1 x avec
9 , 5 5 est une coupe.

A force de coupes successives, on peut obtenir l'enveloppe convexe des solutions
entires, au moins au voisinage de la solution optimale. A ce moment l, lorsqu'
l'itration suivante on rsoudra le PL augment, on obtiendra une solution optimale
entire.

Dans l'exemple prcdent, avec les coupes x1+x2<=5 et x2<=4, on obtient
l'enveloppe convexe du problme :


Comme on peut s'en douter, le choix des coupes parmi celles possibles est
dterminant pour arriver obtenir la solution optimale. Dans l'exemple prcdent, si
on avait pris la suite de coupe :
k
1 k k
10
1
= , on se serait rapproch de l'enveloppe
convexe sans jamais l'atteindre, et on aurait pas trouver la solution optimale entire
en rsolvant le PL.
D'ailleurs, pour 2 variables et une contrainte, on peut trouver des coefficients tels que
le nombre de faces de l'enveloppe convexe soit aussi grand que l'on veut.
l faut donc trouver des coupes efficaces.
2. Les coupes de Gomory
Nous allons voir ici l'exemple des coupes de Gomory.

On considre le programme linaire suivant :

=
=
0 x
b A.x
c.x z Min
) PL ( (les coefficients de A, b et c sont entiers)

Soit B la matrice de base optimale (rgulire, carre) extraite de A. B a ici la mme
dfinition que dans la version matricielle de l'algorithme du simplexe : B est la
matrice forme par les colonnes de A correspondant aux variables de base. Ces
variables de base sont celles qui s'expriment de faon unique et affine en fonction
des autres variables (ceci est quivalent aux contraintes d'galit initiales).
Gomtriquement, les variables de base correspondent aux variables mises en
cause dans l'intersection des hyperplans reprsentant les contraintes. De plus B
correspond non seulement une base ralisable, mais c'est en plus la base
optimale.
B a alors la proprit d'tre inversible. Son dterminant D=|det(B)| est alors non nul.
De plus D est entier car les coefficients de A et donc de B sont entiers.

On appelle ) (i xi les variables de base et J) (j xj les variables hors base.
On a alors xJ x x + = (x correspondant au sous-vecteur des xi, xJ celui des xj)
D'o A.x=b b x . A x . B J J = +
J J x . A b x . B =
J J
1 1
x . A . B b . B x

=
La formule d'inversion de matrice fait entre autre apparatre au dnominateur le
dterminant D. Ainsi, nous allons traduire la dernire expression obtenue pour
chaque variable, en introduisant D et deux coefficients :
j
J j
ij i
i x .
D D
x

=


i i j
J j
ij Dx x . =

(1)
(Rappel : la solution basique (optimale ici) associe B est obtenue en mettant tous
les xj O. On a alors : ) i (
D
x et ) J j ( 0 x
i
i j = =



On est dans le cas o xi est fractionnaire (en effet si tous les xi tait entiers, on aurait
notre solution du PNE et on n'en serait pas l) et on va dsormais chercher
regarder ce qu'il se passe si l'on applique les contraintes d'intgrit sur xi.
Si xi est entier, d'aprs la relation (1), on a alors la relation de congruence:

J j
i j ij D] [mod x
Si l'on multiplie de chaque ct par un nombre entier premier avec D, on a alors la
relation de congruence :

J j
i j ij D] [mod ) ( x ) (
On note alors D i 0 D ij j f et f = = o D a est le reprsentant de a modulo D
appartenant l'intervalle [0 ; D-1]
D'aprs la relation prcdente, il existe un entier s tel que :

+ =
J j
0 j j sD f x f
Si s<0 alors sD f 0 + (car par dfinition 0 f <D) ce qui est impossible car par
dfinition 0 fj et par dfinition du PL 0 xj . Donc 0 s . On en dduit d'aprs la
relation prcdente que :

J j
0 j j f x f
Ouf ! On a donc obtenu la formule

J j
0 j j f x f , qui ressemblerait bien une coupe.
Vrifions.
On remarque que cette inquation est vrifie par les solutions entires.
On remarque surtout qu'elle n'est pas vrifie par la solution de base courante
optimale car (cf rappel) les xj sont nuls dans ce cas (et rien ne nous dit que 0 f est
nul).
On a donc trouv une coupe ! Et c'est ce type de coupe que l'on appelle coupe de
Gomory.

En pratique : reste savoir comment l'on dtermine les . En fait on va chercher
trouver ceux qui maximisent 0 f Pour cela on peut procder par numration. On peut
galement utiliser l'algorithme d'Euclide : en posant ) , D gcd( p i = , l'algorithme
d'Euclide va nous donner l'quation = + D i . On aura alors obtenu
et = D f 0 .

Allons plus loin. Si cette fois c'est z qui n'est pas valeur entire, et bien on va
procder de la mme manire pour trouver une coupe pour rendre z entier. On va
utiliser la dcomposition avec les xi et les xj. On pose :
J J x . c x . c z + =
J J J J
1 1
x . c ) x . A . B b . B .( c z + =

(cf les quations ci-avant)

+ =
J j
j j x . c z z
o j c s'appelle le cot rduit des variables hors base et b . B c z
1


=
A partir de cette quation, en cherchant z entier, on obtient comme prcdemment
relations de congruence, , etc, jusqu' arriver une coupe (de Gomory) qui rende
entier z au tour suivant !

On peut donc utiliser une coupe de Gomory soit pour rendre x entier, soit pour rendre
z entier.

l faudrait maintenant utiliser ces coupes dans un algorithme qui converge de faon
finie de faon disposer d'une vraie mthode de recherche de la solution optimale.
C'est le but de l'algorithme dual de Gomory.
3. L'aIgorithme duaI de Gomory
On va ici expliquer les grandes lignes seulement de cet algorithme de Gomory,
utilisant les coupes de mme nom.
L'algorithme dual de Gomory est une version gomorise de l'algorithme dual du
simplexe.

Supposons que l'on puisse toujours trouver une coupe de Gomory

J j
0 j j f x f garantissant la dcroissance stricte de z. Ds lors :
Tant que z n'est pas entier, on fabrique une coupe de Gomory adquate (cf
.2). Le pivot xj de l'algorithme correspond alors un cj non nul et on a une
dcroissance stricte de z.
Si z est entier, on rajoute une coupe de Gomory sur l'intgralit des variables
de base. Z dcrot alors strictement mais peut devenir fractionnaire. On se
retrouve alors dans le cas prcdent.
Et ainsi de suite, jusqu' obtenir un minimum entier de z.

On obtient alors un algorithme qui converge. En fait il y a juste un petit problme : par
rapport la supposition initiale, on n'arrive justement pas toujours trouver une
coupe qui engendre une dcroissance stricte de z.
Que fait-on alors ?
Dans le cas o z est entier, on est dans un cas de dgnrescence o le pivot xj a
un cj nul.
l faut alors considrer alors le polytope { } 0 x' b, A'.x' , R /x' x'
' n
= , o A' est la
sous-matrice de A dont les colonnes correspondent aux n' variables de cot rduit
nul (n' est trouv en additionnant le cardinal de et de J', sous-ensemble de J pour
lequel les variables hors base xj sont de cot rduit nul). Si a un point extrme
entier, alors c'est la solution cherche. Sinon on est certain qu'il n'y a pas de
combinaison pour rendre les variables entires. On peut alors rajouter la coupe
suivante :

' J J j
1 xj (variables de cot rduit non nul)
Dans le nouveau problme augment, les coefficients non nuls correspondent alors
des variables de cot rduit non nul, et en pivotant dessus, on retrouve une stricte
dcroissance de z.

On a donc un algorithme qui converge en un nombre fini d'tapes.

Remarque : le nombre d'oprations de pivotage peut trs vite devenir considrable.
A l'tat brut cette mthode manque donc un peu d'efficacit. De nombreuses
sophistications l'ont depuis enrichie, et elle aujourd'hui bien utilise.
____________________


IV. ConcIusion

l existe bien sur d'autres mthodes, et pour n'en citer que quelques unes, il existe :
- des sophistications des mthodes prsentes. On peut notamment largir le
concept de sparation. Par exemple, on peut imaginer qu'au lieu de variables
bivalentes on ait des variables trivalentes, ou plus. On fait alors la sparation
suivant xi=0, 1,2 .On peut aussi envisager de garder des valeurs relles et que
la sparation soit ensembliste : si l'optimum est par exemple x1=12,3, on
spare alors l'arbre avec une branche pour laquelle x1 ne pourra prendre que des
valeurs infrieures ou gales 12, et une autre o x1 ne pourra prendre que des
valeurs suprieures ou gales 13, etc ;
- il existe des mthodes o le PNE est ramen un problme de plus court chemin
en construisant partir du PNE un arbre trs spcifique. Le problme est que
souvent le graphe construit devient norme et dpasse vite les capacits des
algorithmes de plus court chemin ;
- On peut parfois raliser un homomorphisme avec un groupe fini et simplifier la
recherche des solutions optimales. (Remarque : on utilise dj les groupes finis
pour les PNE : rappelez vous les histoires de congruence dans les coupes de
Gomory)

Mais au final, il n'y a pas de solution miracle! Remarquez c'est bien normal, la
rsolution d'un PNE est un problme NP-difficile, et si l'on trouvait un algorithme trs
efficace, soit en gros polynomial, ce serait bel et bien une rvolution.
Donc la mthode utiliser est choisir au cas par cas, suivant les problmes. Puis il
faut essayer de l'affiner de trouver des astuces par rapport au problme dont on est
en prsence pour arriver un maximum d'efficacit.

Pour approfondir le sujet, n'hsitez pas consulter les deux livres qui m'ont servi
pour faire ce cours :
- programmation mathmatique, thorie et algorithmes tome 2 , de Michel Minoux ;
- Mthodes d'optimisation combinatoire, rne Charon, Anne Germa, Olivier Hudry.
____________________

Vous aimerez peut-être aussi