• Aucun résultat trouvé

Optimisation lin´ eaire et probl` eme dual

Dans le document Notes de programmation (C) et d'algorithmique (Page 182-188)

Remarque 35 La proposition 31 est fausse si on remplace la recherche d’un minimum avec la recherche d’un maximum. Dans une fonction convexe, on peut avoir un maximum local qui n’est pas un maximum global. Si l’on s’int´eresse `a la propri´et´e duale pour le maximum il faut prendre une fonction concave.

26.2 Optimisation lin´eaire et probl`eme dual

D´efinition 43 (fonctions affines et lin´eaires) Une fonction affine sur Rn est une fonc-tion de la forme :

f (x1, . . . , xn) = Σi=1,...,n ai· xi+ b . Si b = 0 on dit aussi que la fonction est lin´eaire.

D´efinition 44 (programmation lin´eaire) Un probl`eme de programmation lin´eaire est un probl`eme d’optimisation convexe (d´efinition 39) o`u l’ensemble convexe S est sp´ecifi´e par un ensemble fini d’in´egalit´es (voir exemple 66) :

gi(x) ≤ 0 gi fonction affine, i = 1, . . . , m, et la fonction f `a optimiser est une fonction lin´eaire.

Remarque 36 Une fonction affine est `a la fois convexe et concave. Donc pour une fonc-tion affine sur un ensemble convexe S un minimum (maximum) local est aussi un minimum (maximum) sur S.

Il est possible de donner plusieurs formulations ´equivalentes d’un probl`eme de program-mation lin´eaire. Pour fixer les id´ees, on suppose que le probl`eme est le suivant :

max {cTx | Ax ≤ b, x ≥ 0} , (26.2)

o`u c, x, 0 ∈ Rn, A ∈ R[m, n] et b ∈ Rm. Ce probl`eme peut ˆetre transform´e dans des probl`emes ´equivalents en utilisant les transformations suivantes :

— La maximisation de la fonction cTx est ´equivalente `a la minimisation de la fonction (−c)Tx.

— Une contrainte de la forme aTx ≥ b est ´equivalente `a la contrainte (−a)Tx ≤ −b. — Une contrainte de la forme aTx = b est ´equivalente aux contraintes aTx ≤ b et

(−a)Tx ≤ −b.

— Une contrainte de la forme aTx ≤ b est ´equivalente aux contraintes aTx + y = b et y ≥ 0, o`u y est une nouvelle variable.

— Une contrainte de la forme aTx = b (qui ne suppose pas x ≥ 0) est ´equivalente aux contraintes aT(x0− x00) = b et x0, x00≥ 0 o`u x, x0 sont des nouvelles variables.

Exercice 36 Formulez le probl`eme du flot maximum comme un probl`eme de programmation lin´eaire.

Il se trouve que tout probl`eme de programmation lin´eaire a un probl`eme dual.2 Cette propri´et´e joue un rˆole important dans la conception d’algorithmes pour la programmation lin´eaire et par ailleurs elle donne une fa¸con syst´ematique de reformuler un probl`eme en passant par son probl`eme dual. Souvent, la formulation duale donne un point de vue nouveau sur le probl`eme. Dans ce contexte, l’int´erˆet de la formulation (26.2) de la programmation lin´eaire est que la forme du probl`eme dual est facilement m´emorisable.

D´efinition 45 (probl`eme dual) Le probl`eme dual d’un probl`eme de la forme (26.2) est :

min {bTy | ATy ≥ c, y ≥ 0} . (26.3)

Dans ce contexte, on appelle le probl`eme (26.2) primal.

De fa¸con sym´etrique, on d´efinit le dual d’un probl`eme de la forme : min{cTx | Ax ≥ b, x ≥ 0} ,

comme max {bTy | ATy ≤ c, y ≥ 0}. En utilisant le fait que (AT)T = A on v´erifie que le dual du dual est identique au probl`eme de d´epart. On a donc la correspondance suivante :

Primal Dual

max cTx min bTy Ax ≤ b ATy ≥ c x ≥ 0 y ≥ 0 .

Proposition 32 Soient x admissible pour le probl`eme primal (26.2) et y admissible pour le probl`eme dual (26.3). Alors :

cTx ≤ bTy .

Preuve. On observe : cTx ≤ (ATy)Tx = yT(Ax) ≤ yTb = bTy. A noter qu’on utilise

l’hy-poth`ese que x, y ≥ 0. 2

En d’autres termes, tout ´el´ement admissible du probl`eme primal (dual) donne une borne inf´erieur (sup´erieure) pour la solution (si elle existe) du probl`eme dual (primal).

Un probl`eme primal (dual) peut :

1. avoir une solution admissible et optimale,

2. avoir une solution admissible mais pas de maximum (minimum) et 3. ne pas avoir de solution admissible.

La proposition 32 montre que si le primal (dual) est dans le cas 2. alors le dual (primal) est forcement dans le cas 3. Par ailleurs, la proposition 32 nous donne aussi un crit`ere suffisant pour l’optimalit´e. Si x est admissible pour le primal, y est admissible pour le dual et bTy = cTx alors x est optimal pour le primal et y est optimal pour le dual. Un corollaire de l’algorithme du simplexe qu’on discutera dans le prochain chapitre 27 est que si on a une solution optimale

2. Le concept de probl`eme dual n’est pas propre `a la programmation lin´eaire ; on retrouve ce concept aussi dans des probl`emes d’optimisation convexe plus g´en´eraux que la programmation lin´eaire.

Programmation lin´eaire 183

pour le primal (dual) alors on a aussi une solution optimale pour le dual (primal) et les fonctions co¨ıncident sur ces solutions optimales. Donc il est impossible que le primal (dual) ait une solution optimale et le dual (primal) en ait pas et il est aussi impossible que la fonction de coˆut sur la solution optimale du primal soit strictement inf´erieure `a la fonction de coˆut sur la solution optimale du dual. Une derni`ere situation possible est que primal et dual soient dans le cas 3. En r´esumant on a 4 cas possibles (sur 9) : (1, 1), (2, 3), (3, 2) et (3, 3). De plus, dans le cas (1, 1) les fonctions de coˆut sur les solutions optimales co¨ıncident.

Chapitre 27

Algorithme du simplexe

L’algorithme du simplexe est un cas particulier de la m´ethode it´erative de recherche d’un optimum local qu’on a esquiss´e dans la section 26.1. A chaque it´eration, on se trouve `a un sommet du poly`edre qui contient les solutions admissibles et on d´etermine s’il est possible de se deplacer vers un sommet adjacent en am´eliorant la fonction objectif.

27.1 Formulation avec variables ´ecart

L’intuition g´eom´etrique qu’on vient d’´evoquer est tr`es seduisante mais pour avoir un algorithme il faut lui donner un contenu alg´ebrique et v´erifier au passage que l’intuition en dimension 2 est valide en toute dimension finie. Pour ce faire, on introduit une formulation alternative de la programmation lin´eaire.

Un probl`eme de la forme (26.2) est ´equivalent au probl`eme

max {cTx | Ax + x0 = b, x ≥ 0, x0 ≥ 0},

qui se r´e´ecrit aussi en :

max {c0+ cTx | x0= b − Ax, x ≥ 0, x0≥ 0} . (27.1)

Dans cette nouvelle forme :

— pour transformer l’in´egalit´e en ´egalit´e, on introduit des variables ´ecart (slack variables) x0.

— on r´e´ecrit la fonction de coˆut comme une fonction affine avec une constante additive c0 qui dans notre cas vaut 0. A noter que les coefficients multiplicatifs pour les variables ´

ecart sont implicitement 0.

Pour l’instant, on va supposer que b ≥ 0. Ainsi (x, x0) = (0, b) est une solution admissible du probl`eme. Dans la forme (27.1), on appelle les variables x0 basiques et les variables x non-basiques.

Probl`eme initiale

On va introduire une m´ethode pour permuter une variable basique avec une variable non-basique. Pour formuler cette m´ethode il convient de r´e´ecrire la forme (27.1) de la fa¸con suivante

o`u l’on suppose que N est l’ensemble des indices des variables non-basiques et B est l’ensemble des indices des variables basiques ; initialement, N = {1, . . . , n} et B = {n + 1, . . . , n + m}.

max c0+ Σi∈Ncixi

xi= bi− Σj∈Nai,jxj i ∈ B

xk≥ 0 k ∈ B ∪ N .

(27.2)

Dans cette formulation, on suppose que bi≥ 0 pour i ∈ B ce qui est ´equivalent `a dire que :

xk= 

bk si k ∈ B

0 si k ∈ N , (27.3)

est admissible. On montrera dans la section 27.4 comment arriver `a cette formulation ou conclure qu’une solution admissible n’existe pas.

Exemple 67 max 3x1+ x2+ 2x3 x1+ x2+ 3x3≤ 30 2x1+ 2x2+ 5x3≤ 24 4x1+ x2+ 2x3≤ 36 x1, x2, x3≥ 0 max 3x1+ x2+ 2x3 x4= 30 − x1− x2− 3x3 x5= 24 − 2x1− 2x2− 5x3 x6= 36 − 4x1+ x2+ 2x3 x1, x2, x3, x4, x5, x6≥ 0

Probl`eme initial. Probl`eme d´eriv´e ; x4, x5, x6 variables ´ecart (basiques).

S´election du pivot

On d´etermine un indice ‘entrant’ e ∈ N tel que :

ce > 0 . (27.4)

Si aucun indice satisfait cette condition on montrera dans la section 27.3 que la solution (27.3) est optimale. L’intuition est que actuellement xe = 0 et si on augmente xe on a la possibilit´e d’augmenter la fonction objectif.

On d´etermine un indice ‘sortant’ s ∈ B tel que : bs

as,e = min { bi

ai,e | i ∈ B, ai,e> 0} . (27.5)

L’intuition est qu’en augmentant xe on risque de rendre les variables basiques n´egatives. On va selectionner s parmi les premi`eres variables basiques qui vont tomber `a 0. On remarque que si un tel indice n’existe pas on peut augmenter la valeur de la variable xe de 0 `a +∞ tout en gardant xi ≥ 0 pour i ∈ B. Comme ce> 0, il en suit que la fonction de coˆut va aussi `

a +∞ et donc le probl`eme est non-born´e (le max n’existe pas). Les nouveaux ensembles de variables basiques et non-basiques sont donc :

B = B\{s} ∪ {e} , N = N \{e} ∪ {s} .

Exemple 68 En continuant l’exemple 67, on peut prendre comme variable entrante x1 et comme variable sortante x6.

Algorithme du simplexe 187

Mise `a jour des coefficients

Une fois qu’on a d´etermin´e la variable entrante et celle sortante on va effectuer une s´erie de manipulations pour mettre les contraintes dans la forme (27.2) par rapport aux ensembles B et N . A partir de l’´equation :

xs= bs− Σj∈N \{e}as,jxj− as,exe (27.6) en divisant par as,e > 0, on peut exprimer la variable entrante en fonction de la sortante et des autres variables non-basiques :

xe= bs as,e − Σj∈N \{e}as,j as,e xj1 as,e xs . (27.7)

En d’autres termes, les coefficients pour la variable entrante sont les suivants : be= bs

as,e , ae,j = as,j

as,e (j ∈ N \{e}), ae,s = a1

s,e .

Il s’agit maintenant de remplacer toute occurrence de xe dans les ´equations pour les autres variables basiques i ∈ B\{s} par l’expression `a droite de l’´equation (27.7). Un simple calcul permet de d´eriver :

bi = bi− ai,ebe , ai,j = ai,j − ai,eae,j (j ∈ N \{e}) , ai,s = −ai,eae,s .

On remarquera que le choix de la variable entrante assure que bi ≥ 0 pour i ∈ N . Enfin on effectue la mˆeme op´eration de remplacement pour la fonction objectif :

c0 = c0+ cebe , cj = cj− ceae,j (j ∈ N \{s}), cs= −ceae,s .

Exemple 69 En continuant l’exemple 68, on obtient la forme ´ecart suivante : max 27 + x2 4 + x3 23x6 4 x1= 9 − x2 4x3 2x6 4 x4= 21 − 3x2 45x3 2x6 4 x5= 6 − 3x2 2 − 4x3+ x6

Dans le document Notes de programmation (C) et d'algorithmique (Page 182-188)