Génération de colonnes

publicité
Génération de colonnes
ENSIIE-Master MPRO
Alain Faye
1
Introduction
On considère le problème:
(Pb) max f(x) s.c. gj(x)0 jJ , xX
Avec f linéaire, gj affines
Avec X={xZn: h(x)0 }
X partie de Zn , contraintes quelconques h(x) 0
On fait les hypothèses suivantes :
•X contient un nombre fini de points
•Max f(x) s.c. xX se résout facilement f linéaire même si X est grand
Autrement dit, si on enlève les contraintes gj(x)0 on sait résoudre le
problème
On va tout de même tenir compte des contraintes mais considérer une autre
relaxation.
2
Relaxation de X à ConvX
On considère la relaxation de (Pb) suivante :
(P) max f(x) s.c. gj(x)0 jJ , xConvX
On écrit : x=iixi avec i0, ii=1, xiX
On reporte dans (P) et par linéarité les i sortent de f et des gj :
(P') max iif(xi)
s.c.
iigj(xi) 0 jJ
i0, ii=1
Maintenant les variables sont les i tandis que f(xi), gj(xi) sont les coefficients
de l’objectif et des contraintes.
(P') est un programme linéaire que l’on va résoudre par un algorithme similaire
au simplexe.
(P') a généralement un nombre exponentiel de variables, on n’introduit que
celles qui sont utiles , celles non introduites sont considérées hors-base et
sont nulles.
A une itération on introduit la variable de coût réduit>0 le plus grand.
On s’arrête quand toutes les variables ont leur coût réduit 0
3
Algorithme de génération de colonnes
On démarre avec un sous ensemble restreint de points de X t.q. au moins un
satisfait les contraintes. On note I les indices de ces points.
1- On résout le problème restreint :
(PR') max iIif(xi)
s.c.
-iIigj(xi) 0 jJ
iIi=1 (convexité)
i0 iI
On note j0 jJ,  les variables duales associées aux contraintes jJ et à la
contrainte convexité.
2- Sous-problème: on recherche une variable de coût réduit>0. Pour cela on
résout :
cred=maxxXf(x)+j jgj(x) - 
Si cred>0 alors soit xiX la solution du sous-pb, on ajoute son indice i à I
I:=I{i} (nouvelle colonne) et on retourne en 1.
Sinon on arrête car tous les coûts réduits sont 0 et (P') est résolu
4
Encadrement de la valeur optimale de (P)
A chaque itération de l’algorithme de génération de colonnes , on a l’encadrement
suivant:
f(x*)+cred
Où x* est la solution de (P) et  la variable duale associée à la contrainte de
convexité.
Par dualité,  est égale à la valeur du problème restreint courant (PR)
Exercice: démontrer cet encadrement.
5
Exercice
Max 5x1+4x2+3x3+2x4+x5
s.c. x1+2x2+3x3+4x4+5x57
xX={0,1}5
Poser g(x)=7 - (x1+2x2+3x3+4x4+5x5)
1-Ecrire (PR') le problème restreint à l’enveloppe convexe des 3 points de X :
(0 0 0 0 0), (1 1 1 1 1), (1 1 1 0 0)
2-On résout (PR') et on obtient 1=0,2=1/9,3=8/9, et les variables duales
=1/3 et =12+1/3
Résoudre le sous-problème et rajouter la nouvelle colonne à (PR')
3-On résout le nouveau (PR') et on obtient 1=2=0,3=3/4,4=1/4,
et les variables duales =1/2 et =12+1/2
Résoudre le sous-problème et conclure.
6
Génération de coupes
(P) résolu, il se peut que l’on ait résolu (Pb) .
Il suffit pour cela que les i soient non fractionnaires.
Si tel n’est pas le cas on peut toujours rajouter des coupes et réitérer l’algorithme
de génération de colonnes.
1- Résoudre (P) par l’algorithme de génération de colonnes
Soit * la solution de (P) ,
poser x*=i*ixi.
Si x*X alors Stop on a résolu (Pb)
Sinon Chercher des inégalités valides violées par x*.
Les rajouter à l’ensemble J
Retourner en 1
7
Branch&Bound
Une fois (P) résolu et après avoir ajouté des coupes, il se peut que la solution
optimale x*=i*ixi n’appartienne pas à X (* fractionnaire). On a alors recours à
une procédure de type séparation et évaluation pour résoudre (Pb).
De la même façon que l’on rajoute des coupes à (P) dans l’algorithme de
coupes, on ajoute ici des contraintes qui séparent l’ensemble des solutions
réalisables en deux parties.
Soit x*j une coordonnée de x* fractionnaire.
On sépare (P) en deux problèmes fils:
- l’un avec la contrainte xjx*j ,
- l’autre avec la contrainte xjx*j +1 .
On résout chacun par génération de colonnes.
8
Lien avec la relaxation lagrangienne
Relaxation lagrangienne des contraintes J: on injecte les contraintes dans
l’objectif .
max f(x)+jjgj(x) s.c. xX
Avec j0 jJ
Cela donne une borne supérieure de la valeur de (Pb).
On recherche la plus petite borne supérieure.
Le problème dual lagrangien consiste à minimiser la fonction duale:
(D) min0 max f(x)+jjgj(x) s.c. xX
Pour éliminer le max du problème interne on rajoute simplement une
variable z :
(D) minz, 0 z s.c. z f(x)+jjgj(x) xX
(D) est un programme linéaire de variables z et . Si on écrit le dual de (D)
avec les variables i0 une par contrainte de (D), on retrouve (P‘) .
Donc dans (Pb) la relaxation de X à son enveloppe convexe revient à faire
la relaxation lagrangienne des contraintes J.
9
Cas particuliers
La relaxation lagrangienne des contraintes J de (Pb) revient à optimiser
sur ConvX c’est-à-dire au problème (P).
Dans le cas où l’on sait décrire ConvX par un polyèdre i.e. ConvX={x :
Axb}, alors la relaxation lagrangienne de (Pb), équivalente à (P) ,
revient au programme linéaire:
max f(x) s.c. gj(x)0 jJ , Axb
Exemple:
Si X={0,1}n alors ConvX=[0,1]n
Dans ce cas le problème (P) revient à la relaxation continue de (Pb)
dans laquelle l’intégrité de xj est remplacée par 0xj1.
Conclusion, si X={0,1}n la relaxation lagrangienne est équivalente à la
relaxation continue.
10
Exercice:
(Pb) max f(x)=x1+2x2
s.c.
g1(x)=3-3x1-2x20
g2(x)=3-2x1-3x20
xX={0,1}2
Soit (P) la relaxation de (Pb) obtenue en passant de X à ConvX
1. Représenter graphiquement les solutions réalisables de (P). Observer le
point extrême qui n’est pas dans X. Que peut-on en conclure?
2. Ecrire (P‘)
3. Ecrire (D) le dual langrangien de (Pb) avec la variable z.
4. Ecrire le dual de (D) et vérifier que l’on retrouve (P‘)
11
Généralisation: problème décomposable sous contraintes couplantes
(Pb) max k=1,…,K fk(xk) s.c. k=1,…,K gj,k(xk)0 jJ , xkXk k=1,…K
Avec | Xk | fini, fk linéaire, gj,k affines (k)
Relaxation
(P) = (Pb) avec xkConvXk k=1,…K
On écrit : xk=ik,ixki avec k,i0, k,ii=1, xkiXk
On reporte dans (P) et par linéarité les k,i sortent de fk et des gj,k :
(P') max k=1,…,K ik,ifk (xki)
s.c.
k=1,…,K ik,igj,k(xki) 0
jJ
k,ii=1
k=1,…,K
k,i0
k=1,…,K, i
Maintenant les variables sont les k,i
12
Téléchargement