Génération de colonnes ENSIIE-Master MPRO Alain Faye
Introduction On considère le problème: (Pb) max f(x) s.c. gj(x)0 jJ , xX Avec f linéaire, gj affines Avec X={xZn: 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. xX 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.
Relaxation de X à ConvX On considère la relaxation de (Pb) suivante : (P) max f(x) s.c. gj(x)0 jJ , xConvX On écrit : x=iixi avec i0, ii=1, xiX On reporte dans (P) et par linéarité les i sortent de f et des gj : (P') max iif(xi) s.c. iigj(xi) 0 jJ i0, ii=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
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 iIif(xi) s.c. -iIigj(xi) 0 jJ iIi=1 (convexité) i0 iI On note j0 jJ, les variables duales associées aux contraintes jJ et à la contrainte convexité. 2- Sous-problème: on recherche une variable de coût réduit>0. Pour cela on résout : cred=maxxXf(x)+j jgj(x) - Si cred>0 alors soit xiX 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
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.
Exercice Max 5x1+4x2+3x3+2x4+x5 s.c. x1+2x2+3x3+4x4+5x57 xX={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.
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
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 xjx*j , l’autre avec la contrainte xjx*j +1 . On résout chacun par génération de colonnes.
Lien avec la relaxation lagrangienne Relaxation lagrangienne des contraintes J: on injecte les contraintes dans l’objectif . max f(x)+jjgj(x) s.c. xX Avec j0 jJ 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) min0 max f(x)+jjgj(x) s.c. xX Pour éliminer le max du problème interne on rajoute simplement une variable z : (D) minz, 0 z s.c. z f(x)+jjgj(x) xX (D) est un programme linéaire de variables z et . Si on écrit le dual de (D) avec les variables i0 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.
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 : Axb}, alors la relaxation lagrangienne de (Pb), équivalente à (P) , revient au programme linéaire: max f(x) s.c. gj(x)0 jJ , Axb 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 0xj1. Conclusion, si X={0,1}n la relaxation lagrangienne est équivalente à la relaxation continue.
Exercice: (Pb) max f(x)=x1+2x2 s.c. g1(x)=3-3x1-2x20 g2(x)=3-2x1-3x20 xX={0,1}2 Soit (P) la relaxation de (Pb) obtenue en passant de X à ConvX 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? Ecrire (P‘) Ecrire (D) le dual langrangien de (Pb) avec la variable z. Ecrire le dual de (D) et vérifier que l’on retrouve (P‘)
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 jJ , xkXk k=1,…K Avec | Xk | fini, fk linéaire, gj,k affines (k) Relaxation (P) = (Pb) avec xkConvXk k=1,…K On écrit : xk=ik,ixki avec k,i0, k,ii=1, xkiXk On reporte dans (P) et par linéarité les k,i sortent de fk et des gj,k : (P') max k=1,…,K ik,ifk (xki) s.c. k=1,…,K ik,igj,k(xki) 0 jJ k,ii=1 k=1,…,K k,i0 k=1,…,K, i Maintenant les variables sont les k,i