PROGRAMMATION LINEAIRE: DUALITE

Transcription

PROGRAMMATION LINEAIRE: DUALITE
Recherche Opérationnelle – Programmation linéaire : dualité
Recherche
Opérationnelle
Programmation
linéaire:
dualité
Yves Correc
Yves Correc 25/11/2007
6–1
Recherche Opérationnelle – Programmation linéaire : dualité
Sommaire
6.
PROGRAMMATION LINEAIRE: DUALITE ...............................................................................6–3
6.4. Le problème dual ...................................................................................................................6–3
6.4.1.
Définitions .......................................................................................................................6–3
6.4.2.
Interprétation économique ..............................................................................................6–3
6.4.3.
Problème dual du simplexe ............................................................................................6–7
6.4.4.
Algorithme dual du simplexe.........................................................................................6–10
6.4.5.
Difficultés diverses ........................................................................................................6–13
6.4.6.
Coûts de substitution ....................................................................................................6–16
6.4.7.
Coûts marginaux...........................................................................................................6–17
6.5. Post-optimisation..................................................................................................................6–19
6.5.1.
Paramétrage du second membre .................................................................................6–19
6.5.2.
Paramétrage de la fonction économique......................................................................6–26
6.6. Compléments .......................................................................................................................6–29
6.6.1.
Exercice 12-9-7-6-10 ...................................................................................................6–29
6.6.2.
Exercice 1-14-6............................................................................................................6–31
6.6.3.
Exercice raffinerie ........................................................................................................6–38
Yves Correc 25/11/2007
6–2
Recherche Opérationnelle – Programmation linéaire : dualité
6.
PROGRAMMATION LINEAIRE: DUALITE
6.4.
LE PROBLEME DUAL
6.4.1. Définitions
Reprenons le problème de fabrication du début (problème des tables et des chaises).
A l'optimum, la fonction économique s'écrit:
-2 x5 - x4 = z - 26
Considérons la variable x5 (variable d'écart de distribution).
Elle est nulle à l'optimum, ie la contrainte correspondante est saturée. Mais si l'on augmentait le
second membre (RHS) de ∆b, on pourrait la débloquer, et ainsi augmenter la fonction économique, ici
de 2 ∆b.
De même un déblocage de la deuxième contrainte (x4) entrainerait une variation de la fonction
économique z de ∆b.
Par contre la première contrainte n’est pas saturée (x3=3), et l'on ne peut rien en attendre.
Les quantités introduites ici sont les coûts marginaux affectés aux contraintes : Ce sont les
coefficients des variables d’écart apparaissant dans l’écriture de la fonction économique à l’optimum
(ce sont aussi, au signe près, les valeurs des variables duales yj, comme on le verra plus loin).
Si l'on trouve à l’optimum des variables naturelles dans la fonction économique, leur coefficient sera
un coût de substitution.
Nous voyons ainsi apparaître des quantités donnant une idée de l'évolution de la solution du problème
en fonction des petites variations des données. Ces quantités sont liées à une autre approche de
notre problème, moins immédiate que l'approche géométrique, ou primale, utilisée jusqu'à présent.
Après avoir traité le problème primal, nous allons donc introduire le problème dual associé:
max c x
Ax≤b
x≥0
min y b
yA≥c
y≥0
…où le vecteur ligne y a pour composantes les variables duales yi (i=1,m).
NB. Ici les deux problèmes sont exprimés sous forme canonique (inégalités). Le problème dual peut
t t
t
encore s'écrire sous la forme A y ≥ c .
6.4.2. Interprétation économique
Si l’interprétation "physique" du problème primal est évidente, celle du problème dual l’est moins.
Une approche intéressante peut être de raisonner en termes d'unités physiques pour déterminer la
signification des variables duales.
On utilisera là le concept d'équation aux dimensions, employé en physique pour vérifier la cohérence
des termes d'une équation, ramenés à des masses M, des longueurs L, et des temps T.
Dans la formulation primale exposée plus haut, les variables xj correspondent à des quantités d'objets
produits (sortie j), et la fonction économique z à une valeur . L'équation aux dimensions de la
fonction économique nous donne immédiatement la signification des coefficients cj de la fonction
économique Z = c x, qui correspondent à la valeur unitaire (valeur / sortie j) de ces objets:
n
valeur
∑ ( sortie
j =1
)( sortie j ) = (valeur )
j
Yves Correc 25/11/2007
6–3
Recherche Opérationnelle – Programmation linéaire : dualité
Pour les contraintes, on observe que le second membre correspond à une limitation des ressources
utilisées, des matières premières consommées en entrée (entrée i), ce qui nous donne de la même
manière la signification des coefficients aij de la matrice: C'est la quantité de la ressource i nécessaire
à la fabrication d'une unité du produit j, à savoir un rapport (entrée i / sortie j), comme cela ressort
immédiatement de l'équation aux dimensions des contraintes:
n
entréei
∑ ( sortie
j =1
)( sortie j ) ≤ (entréei )
pour (i=1,m)
j
Voyons maintenant le problème dual qui consiste, en jouant sur les variables duales yi, à minimiser le
produit scalaire W = y b, où les bi sont les ressources (entrée i) utlisées dans la fabrication des
produits:
m
∑ y (entrée ) = ?
i =1
i
i
t
sous des contraintes où l'on sait interpréter les a ij ainsi que les cj:
m
entréei
∑ ( sortie
i =1
) yi ≥ (
j
valeur
) avec yi ≥ 0
sortie j
pour (j=1,n)
On peut alors voir que les contraintes duales seront consistantes si les variable duales yi sont
(
exprimées en termes de
valeur
) , c'est à dire de la valeur unitaire des ressources i.
entréei
Il en résulte finalement que le problème dual consiste à minimiser W qui est une valeur:
m
valeur
∑ ( entrée )(entrée ) = (valeur )
i
i =1
i
sous les contraintes:
m
entréei
∑ ( sortie
i =1
j
)(
valeur
valeur
)≥(
)
entréei
sortie j
valeur
(
)≥0
entréei
pour (j=1,n)
pour (i=1,m)
Une description verbale des deux problèmes peut alors être la suivante:
Pb Primal :
…maximiser le chiffre des ventes
Etant donné la valeur unitaire (cj) de chaque produit (cela peut être un bénéfice) et une borne
supérieure à la disponibilité de chaque ressource (bi), combien de chaque produit (xj) doit-on
fabriquer pour maximiser la valeur totale des produits réalisés ?
Pb Dual :
…minimiser le coût de production
Etant donné la disponibilité de chaque ressource (bi) et une borne inférieure à la valeur unitaire (cj) de
chaque produit vendu, quelles devront être les valeurs unitaires yi des ressources pour minimiser la
valeur totale des ressources utilisées ?
NB.
entrée = ressource, matière première utilisée par le processus étudié, en entrée
sortie = produit fabriqué issu du processus, en sortie
Yves Correc 25/11/2007
6–4
Recherche Opérationnelle – Programmation linéaire : dualité
Un couple primal-dual : Le problème du régime.
Cette interprétation économique va être illustrée par le problème du régime, où l'on considérera les
deux points de vue duaux du consommateur et du fabricant.
Minimisation du coût de l’alimentation
(pb du consommateur)
Maximisation du profit
(pb du fabricant de pilules vitaminées)
Un consommateur essaie de se constituer un régime diététique de coût minimal à partir de 6 aliments
de base (numérotés de 1 à 6), de manière à absorber au moins 9 unités de vitamine A et 19 unités de
vitamine C par unité de temps.
Le prix des aliments (cents/kg) et leur contenu en vitamines (unités/kg) est donné dans le tableau
suivant:
Aliments
1
2
3
4
5
6
Minimum vitamines
Contenu en vitamine A
1
0
2
2
1
2
9
Contenu en vitamine C
0
1
3
1
3
2
19
Coût des aliments
35 30 60 50 27 22
Si l'on suppose que le régime cherché comporte yj
consommateur diététicien amateur s'écrit:
Min
kg de chaque aliment, le problème du
35 y1 + 30 y2 + 60 y3 + 50 y4 + 27 y5 + 22 y6 = w
y1
+ 2 y3 + 2 y4 + y5 + 2 y6 ≥ 9
y2 + 3 y3 + y4 + 3 y5 + 2 y6 ≥ 19
sous les contraintes:
avec les yj ≥ 0 (j=1,m)
Dans ces conditions, un industriel de la pharmacie, fabricant de pilules, s’attaque au marché en
proposant au consommateur des pilules contenant les vitamines. Mais pour le convaincre, il doit
proposer les pilules à un prix inférieur à celui des aliments nécessaires pour arriver au même résultat.
NB. Ce raisonnement n'est évidemment valable que si l'on suppose le consommateur uniquement
préoccupé d'économie et de diététique, et non de gastronomie… En fait cet exemple est extrait d'un
livre américain !
Soit alors x1 et x2 le prix des vitamines A et C en pilules (en cents/unité).
Considérons maintenant un aliment, par exemple le numéro 5:
Un kilogramme de n° 5 contient 1 unité de vitamine A et 3 unités de vitamine C, de valeur x1+3x2 pour
le fabricant. Sachant qu’un kilogramme de n° 5 coûte 27 cents au consommateur, le fabricant n'aura
de chances de le convaincre que si ses prix vérifient la contrainte x1+3x2 ≤ 27 .
Il en sera de même pour les autres aliments…
Et sous ces contraintes, le fabricant cherchera à maximiser son profit, c'est à dire ici son prix de vente,
soit 9 x1 + 19 x2 .
Le problème du fabricant, dual de celui du consommateur, est donc le suivant:
max 9x1+19x2 = z
x1
x2
2 x1 + 3 x2
2 x 1 + x2
x1 + 3 x2
2 x1 + 2 x2
Yves Correc 25/11/2007
≤
≤
≤
≤
≤
≤
sous les contraintes:
35
30
60
50
27
22
avec les xi ≥ 0 (i=1,n)
6–5
Recherche Opérationnelle – Programmation linéaire : dualité
Si l'on prend les définitions du début de ce chapitre au pied de la lettre, on peut aussi bien considérer
le problème du fabricant comme le primal, et celui du consommateur qui veut se passer des pilules
vitaminées en consommant des aliments naturels, comme le dual…
Les deux problèmes sont équivalents et constituent une paire primal-dual (le dual du dual est le
primal…)… On remarquera seulement que le problème de minimisation n'admet pas ici de solution de
base réalisable, ce qui nous ennuie un peu.
Nous allons donc résoudre le problème du fabricant de pilules, le plus facile car il revêt la forme d'un
primal sans souci particulier (maximisation d'un bénéfice sous des contraintes ≤). Les tableaux de
Tucker associés sont les suivants:
x1
x2
b
x3
1
0
35
x4
0
1
x5
2
x6
x1
x7
b
x3
1
0
35
30
x4
-1/3
-1/3
21
3
60
x5
1
-1
33
2
1
50
x6
5/3
-1/3
41
x7
1
3
27
x2
1/3
1/3
9
x8
2
2
22
x8
4/3
-2/3
4
c
9
19
0
c
8/3
-19/3
-171
↑
↑
x8
x7
b
x3
-3/4
1/2
32
x4
1/4
-1/2
22
x5
-3/4
-1/2
30
x6
-5/4
1/2
36
x2
-1/4
3
8
x1
3/4
-1/2
3
c
-2
-5
-179
OPTIMUM
La solution trouvée nous donne un prix de vente respectif de 3 et 8 cents/unité pour les pilules de
vitamines A et C, pour un chiffre des ventes de 179 cents.
Les variables d'écart x3, x4, x5, x6 sont positives, ce qui signifie que le prix des pilules équivalentes
aux 4 premiers aliments est sensiblement plus intéressant que celui des aliments naturels. Il est est
égal pour les deux derniers (variables d'écart x7 et x8 nulles): ce sont justement ceux qui donnent le
plus bas prix pour le consommateur, comme on va le voir.
Revenons aux variables xi solutions du problème complémentaire du consommateur, dont les valeurs
nous seront fournies par le tableau de correspondance du paragraphe suivant (6.4.3).
x1=3 et x2=8, >0
écarts y7 = y8 = 0
(la consommation de vitamines à l'optimum
pour le consommateur est exactement le minimum nécessaire, à savoir 9 et 19 unités)
écarts x3, x4, x5, x6 > 0
y1 = y2= y3 = y4 = 0
(le consommateur
d'aliments de type 1, 2, 3, 4, car les pilules équivalentes sont moins chères)
écarts x7 = x8 = 0
y5 = 5, y6 = 2
n'achète
pas
pour un coût de 179
Moyennant quoi l'interprétation du couple primal-dual devient claire si l'on se réfère au schéma du
paragraphe suivant.
Yves Correc 25/11/2007
6–6
Recherche Opérationnelle – Programmation linéaire : dualité
Problème dual:
Le consommateur minimise sa dépense pour y5=5 et y6=2 (aliments 5 et 6), et tous les autres yi nuls.
Toute autre solution recherchée en se déplaçant dans la direction des y n'est pas optimale et fait
remonter sa dépense w.
Problème primal:
Le fabricant de pilules maximise son bénéfice pour des prix de vente x1=3 et x2=8. Toute autre
solution recherchée en se déplaçant dans la direction des x n'est pas optimale et fait descendre son
bénéfice z.
Notons qu'une augmentation sauvage des prix de vente ferait sortir du domaine admissible défini par
les contraintes "les vitamines en pilules ne doivent pas être plus chères que les vitamines issues des
aliments naturels".
La solution unique et commune au couple de problèmes primal-dual (qui ne sont en réalité que les
deux facettes d'un même problème) est donc représentée par le point selle de la figure, où les deux
solutions sont équivalents au point de vue prix pour le consommateur.
6.4.3. Problème dual du simplexe
Nous allons donc pouvoir considérer tout problème d'optimisation linéaire (donné sous forme
canonique, d'inégalités) sous deux angles:
Un problème primal de maximisation de c x sous contraintes A x ≤ b,
ou bien
Un problème dual de minimisation de y b sous contraintes A y ≥ c .
t
t
t
Ces deux problèmes liés possèdent quelques propriétés intéressantes qui nous seront utiles.
Tout d'abord le Théorème de dualité faible nous dit que si x est une solution admissible du problème
primal, et y une solution admissible du problème dual, alors c x ≤ y b .
En effet x ≥ 0 et c ≤ y A entrainent c x ≤ (y A) x, d'une part, tandis que y ≥ 0 et A x ≤ b entrainent y (A
x) ≤ y b , d'autre part.
Il en résulte que les valeurs de la fonction économique du primal, que l'on cherche à maximiser, sont
toujours majorées par celles de la fonction économique du dual, que l'on cherche à minimiser.
On démontre de même le Théorème de dualité forte, qui nous dit que si un programme linéaire
possède une solution optimale x* de valeur z* = c x*, alors son dual possède aussi une solution
optimale y* et la valeur de cette solution est w* = y* b = z* .
Cette propriété peut se visualiser en observant que l'optimum unique du couple primal-dual est point
selle de la surface (en forme de selle de cheval: on maximise en x et on minimise en y) sur laquelle
s'opère le cheminement de l'optimisation: la solution est d'après ce qui précède le plus petit maximum
admissible susceptible d'être construit (min max), ou bien le plus grand minimum.
En pratique, la résolution du primal part d'une solution primal-admissible (c'est-à-dire réalisable,
vérifiant les contraintes) mais non primal-optimale (on peut gagner sur la fonction économique) pour
tenter de l'améliorer (par l'algorithme primal de Dantzig vu plus haut) jusqu'à la solution optimale.
Tandis que la résolution du dual partira d'une solution primal-optimale (la fonction économique atteint
la meilleure valeur possible) mais non primal-admissible (cette valeur est hélas obtenue en dehors du
domaine admissible défini par les contraintes inégalités du primal), pour décroître jusqu'à nous
permettre de rentrer dans le domaine en restant malgré tout optimale (on va donc essayer de perdre
le moins possible dans ce cheminement).
Yves Correc 25/11/2007
6–7
Recherche Opérationnelle – Programmation linéaire : dualité
Admissible
Non optimale
PRIMAL
Admissible
Optimale
DUAL
Non admissible
Optimale
z...w (fonction économique)
point selle
min
max
y (variables duales)
x (variables primales)
Problème primal
max c x
Ax≤b
x≥0
n variables naturelles x(j)
m variables d'écart x(n+i) : contraintes bi
Problème dual
min y b
yA≥c
y≥0
m variables duales y(i)
n variables d'écart y(m+j) : contraintes cj
Le théorème de dualité forte nous permet en outre d'établir les relations possibles entre les solutions
d'une paire de programmes linéaires duaux:
Existence des solutions
•
•
•
Ou bien les deux problèmes n'ont pas de solution
Ou bien l'un n'a pas de solution et l'autre n'a pas de solution finie
Ou bien les deux problèmes ont une solution, et à l'optimum Zmax. = W min.
A ce stade, le théorème des écarts complémentaires va nous aider à préciser les relations entre les
variables des deux problèmes. Il nous dit en effet que des solutions admissibles x et y (des problèmes
primal et dual sous forme canonique) sont optimales si et seulement si:
yi (bi - Σ j aij xj) = 0 pour i=1,…,m et xj (Σ i yi aij - cj) = 0 pour j=1,…,n
Ce qui peut être interprété en termes de relations entre les variables naturelles et d'écart xj du
problème primal, et leurs homologues yi du problème dual:
Relation entre variables et contraintes
•
•
Si une contrainte n'est pas saturée (xn+i = ei ≠ 0) la variable duale yi associée à cette
contrainte est nulle.
Si une contrainte est saturée (xn+i = ei = 0) la variable duale associée yi est ≠ 0, et a pour
valeur au signe près, le coefficient de ei (coût marginal) dans la fonction économique à
l'optimum (sauf cas de dégénérescence). De même les coefficients des variables naturelles xj
dans la fonction économique à l'optimum sont les coûts de substitution.
Yves Correc 25/11/2007
6–8
Recherche Opérationnelle – Programmation linéaire : dualité
On peut alors résumer ci-dessous de manière synthétique l'interprétation du tableau de Tucker obtenu
à l'optimum:
xj
ei = xn+i
Variables hors base
Solution primale:
Variable primale x j > 0
Ecart dual ym+j = 0
xj
Variables
en base
Variable d'écart > 0
Contrainte non saturée
Variable duale y i = 0
e i = xn+i
Fonction
économique
c
Second membre b
Variable primale nulle
Coût de substitution Cj
écart dual ym+j = -Cj
Variable d'écart nulle
contrainte saturée
coût marginal Cn+i
Var. duale y i = -Cn+I
On peut encore préciser la correspondance entre primal et dual en remarquant qu'une solution primaladmissible (b≥0) est dual-optimale, tandis qu'une solution primal-optimale (c≤0) est dual-admissible.
Yves Correc 25/11/2007
6–9
Recherche Opérationnelle – Programmation linéaire : dualité
6.4.4. Algorithme dual du simplexe
La notion de dualité va avoir l'intérêt de fournir une autre approche du problème, quand le traitement
direct du primal pose des problèmes. Ce cas peut se présenter quand il n'y a pas de solution de
départ triviale qui soit primal-admissible (ie l'origine n'est pas dans le domaine), ou bien quand après
avoir trouvé un premier optimum primal au moyen de l'algorithme de Dantzig, on décide de modifier
quelque peu les données.
La méthode que nous allons employer consiste en fait à traiter le problème dual en utilisant
l'algorithme de Dantzig. Mais au lieu de travailler sur le tableau transposé, nous allons en fait adapter
l'algorithme pour travailler directement sur le tableau du primal.
Nous allons illustrer la démarche sur un exemple:
Min
200 x1 + 300 x2
x1 + 2 x2 ≥ 60
4 x1 + 2 x2 ≥ 120
6 x1 + 2 x2 ≥ 150
(xj≥0) sous les contraintes:
Soit encore, mis sous forme primale canonique (max cx / Ax≤b):
Max - 200 x1 - 300 x2
- x1 – 2 x2 ≤ - 60
-4 x1 – 2 x2 ≤ -120
-6 x1 – 2 x2 ≤ -150
Ce problème est peu sympathique car il n'admet pas de solution de départ évidente (pas de solution
de départ primal-admissible car les composantes du second membre sont négatives).
Le dual de ce problème sous sa première formulation s'écrit après quelques opérations:
Max
60 y1 + 120 y2 + 150 y3
y1 + 4 y2 + 6 y3 ≤ 200
2 y1 + 2 y2 + 2 y3 ≤ 300
(yi≥0)
c'est à dire (max –b y / -A y≤-c )
t
t
t
Nous allons donc lui appliquer l'algorithme primal bien connu. Rappelons que celui-ci formalise le
cheminement sur les arêtes du polyèdre du domaine primal-admissible, en choisissant
successivement une direction de déplacement (qui maximise la fonction économique: on cherche à
devenir primal-optimal) et un pas de déplacement (qui nous fasse rester sur la frontière du domaine:
on cherche à rester primal-admissible):
C'est à dire que l'on part d'une solution admissible du dual (-c ≥ 0), en recherchant
t
(1) une direction de maximisation réalisant (max -b ≥ 0 ?)
dans laquelle on pourra effectuer
t
t
t
t
(2) un déplacement minimal réalisant (min -c / -a ij ? pour -a ij>0)
t
t
t
ou encore (min c / a ij ? pour a ij<0)
puis on pivote, etc…
t
dual
y1
y2
y3
-c
y4
1
4
6
200
y5
2
2
2
300
60
120
150
0
-b
t
max↑
↑
(2)
(1)
A quoi cela correspond-il dans le tableau primal?
Yves Correc 25/11/2007
6–10
Recherche Opérationnelle – Programmation linéaire : dualité
Le point de départ est dual-admissible, c'est à dire primal-optimal (ici c≥0 pour une minimisation),
mais pas primal-admissible (car il existe des bi ≤ 0), c'est à dire pas dual-optimal.
Le choix du pivot dans l'algorithme dual sera par conséquent décalqué, dans le tableau primal originel,
de l'application de l'algorithme primal au tableau dual que nous venons de voir. Ce choix va par
conséquent nécessiter les étapes suivantes:
(1) rechercher le bi le plus négatif (max –b≥0 équivaut à min b≤0)
(c'est à dire que l'on s'attaque à la contrainte la moins satisfaisante)
(2) dans cette ligne i, choisir le pivot dans la colonne réalisant min ( cj/aij ) pour aij<0 et cj ≤ 0
primal
x1
x2
b
x3
-1
-2
-60
x4
-4
-2
-120
x5
-6
-2
-150
c
-200
-300
0
max↑
↑
(2)
(1)
L'algorithme dual du simplexe va donc partir d'une base dual-admissible (ie primal-optimale: c≤0 pour
une maximisation, ou c≥0 pour une minimisation), pour arriver à la primal-admissibilité tout en restant
primal-optimal, c'est à dire en préservant le signe des cj lors des transformations.
Pour cela on part (cas d'une maximisation) d'un tableau où l'on a tous les cj≤0, mais où il existe des
bi≤0.
On choisit pour ligne pivot celle du bi le plus négatif (le plus "inadmissible").
Puis on choisit la colonne pivot suivant deux critères:
•
•
pivot négatif
rapport minimal
aij ≤ 0
- cj / aij = maxk (- ck / aik ) avec aik ≤ 0 et ck ≤ 0
Cela se justifie en examinant l'effet (dans le présent cas de maximisation) du pivotage qui va suivre:
•
Ligne pivot i: après pivotage, le terme bi ≤ 0 devient (bi / aij)
…qui va devenir positif (primal-admissible) si aij ≤ 0
•
Colonne pivot j: après pivotage, le terme cj ≤ 0 devient - cj / aij
…qui va rester négatif (primal-optimal pour la maximisation) car aij ≤ 0 et cj ≤ 0
•
Autres coefficients ck de la ligne c: après pivotage, le terme ck ≤ 0 devient ck – (cj / aij) aik
…qui reste négatif si aik ≥ 0,
car alors – (cj / aij) > – ( ck / aik) entraîne que
et même si aik < 0
– (cj / aij) aik < – ck soit ck – (cj / aij) aik < 0
Le premier critère a pour effet de gagner en primal-admissibilité, tandis que le second va conserver la
primal-optimalité. On peut d'ailleurs le récrire sous une forme plus générale en recherchant le
minimum des | ck / aik | pour aik ≤ 0 et (ck ≤ 0 si maximisation ou ck ≥ 0 si minimisation).
Yves Correc 25/11/2007
6–11
Recherche Opérationnelle – Programmation linéaire : dualité
En résumé, la mise en œuvre de l'algorithme dual du simplexe va se dérouler en quatre étapes:
(0) Initialisation:
solution de départ dual-admissible
(ci≤ 0 si max) ou (ci ≥ 0 si min) ∀i
Tableau réduit (de Tucker) de départ
x1 …………………….. …….xn
xn+1
.
.
A
b
c
0
xn+m
(1) Choix de la contrainte traitée = Choix de la variable xi sortant de la base
Trouver i qui réalise min bi (avec bi≤0)
S'il n'existe pas de variable sortante, alors l'optimum est atteint
(2) Choix de la direction de déplacement = Choix de la variable xj entrant en base
Trouver j qui réalise min | cj / aij | pour
aij ≤ 0 et (cj ≤ 0 si max ou cj ≥ 0 si min)
S'il n'existe pas de variable entrante, alors le dual a une solution infinie
et le primal n'a pas de solution admissible.
(3) Déplacement = Nouvelle solution = Nouvelle base = Pivotage de Gauss
Permuter xi et xj (xi sort de la base et xj entre en base)
et transformer le tableau par pivotage de Gauss (pivot aij).
Yves Correc 25/11/2007
6–12
Recherche Opérationnelle – Programmation linéaire : dualité
6.4.5. Difficultés diverses
L'application de l'algorithme dual est souvent envisagée au démarrage quand l'origine n'est pas dans
le domaine admissible (pas de solution de départ primal-admissible ie dual-optimale), pour éviter de
recourir aux variables artificielles dans l'algorithme primal. Mais on ne dispose pas au départ d'un
tableau dual-admissible (ie d'une solution primal-optimale, caractérisée par la positivité ou la
négativité, suivant le sens de l'optimisation, de tous les cj).
Nous devrons alors modifier temporairement les données afin de rendre dual-admissible la base
initiale. Ne pouvant jouer sur le vecteur c, nous commencerons à travailler avec une fonction
économique ad hoc provisoire, et pour cet objectif artificiel la fonction nulle (c=0) fera parfaitement
l'affaire, sous la forme d'une ligne M rajoutée au bas du tableau.
Notons que son aspect dégénéré nécessitera de recourir à la règle de Bland.
Nous atteindrons de la sorte une solution primal-admissible, à partir de laquelle nous terminerons
l'optimisation au moyen de l'algorithme primal (phase II), ou bien directement la solution optimale (sauf
incident en cours de route…).
Exemple (traitement dual du 5.4.1)
max x1 – x2
-2 x1 + x2 ≤ - 2
x1 - 2 x2 ≤ 2
x1 + x2 ≤ 5
x1
x2
b
x3
-2
1
-2
x4
1
-2
2
x5
1
1
5
C
1
-1
0
M
0
0
0
← min bi < 0
On est parfois amené dans ce cas à faire appel à la règle de Bland pour le choix de la colonne. Ce
n'est pas le cas ici car on a un seul aij<0.
x3
x2
b
x1
-1/2
-1/2
1
Tous les bi > 0
x4
1/2
-3/2
1
On est primal-admissible
x5
1/2
3/2
4
On abandonne la ligne M
C
1/2
-1/2
-1
et on continue en primal
x4
x2
b
x1
1
-2
2
x3
2
-3
x5
-1
C
-1
↑
x4
x5
b
x1
1/3
2/3
4
2
x3
1
1
5
3
3
x2
-1/3
1/3
1
1
-2
C
-2/3
-1/3
-3
↑
Yves Correc 25/11/2007
OPTIMUM
6–13
Recherche Opérationnelle – Programmation linéaire : dualité
Exercice
(problème de fabrication)
Une usine produit, sur deux chaines, des appareils électroniques. En raison de différences
importantes dans les procédés de fabrication, les temps nécessaires aux machines outils "fabrication"
(FAB) et "finition-réglage" (FIR) pour traiter un appareil diffèrent sensiblement sur chaque chaine, avec
des prix de revient eux aussi sensiblement différents.
L'élaboration d'un appareil sur la chaine 1 nécessite 3 heures de FAB et 1 heure de FIR, pour un prix
ème
de revient unitaire de 20KF, tandis que la 2
chaine le produit pour 60KF avec 1 heure de FAB et 2
heures de FIR.
La machine FAB est disponible 60 heures par mois, et la machine FIR 70 heures.
(1) La demande étant de 30 appareils par mois au moins, déterminer le plan de production de coût
minimal.
Solution
La fonction économique est
La contrainte FAB est
La contrainte FIR est
La contrainte "ventes" est
20 x1 + 60 x2
x2 ≤ 60
3 x1 +
x1 + 2 x2 ≤ 70
x1 +
x2 ≥ 30
à minimiser
On voit tout de suite qu'il n'y a pas de solution de départ évidente (la troisième contrainte exclut
l'origine du domaine admissible).
Dans un premier temps, nous démarrerons donc avec une variable artificielle x6, qui nous permet de
-x1 - x2 + x5 = -30
x1 + x2 - x5 + x6 = 30
récrire la contrainte:
x1 + x2 ≥ 30
Ce qui nous donne le problème primal (sous forme standard):
20x1 + 60x2
3x1 + x2 + x3 = 60
x1 + 2x2 + x4 = 70
x1 + x2 – x5 + x6 = 30
Min
et conduit aux tableaux de Tucker suivants:
x1
x2
x5
b
x1
x6
x5
b
x3
3
1
0
60
x3
2
-1
1
30
x4
1
2
0
70
x4
-1
-2
2
10
x6
1
1
-1
30
x2
1
1
-1
30
C
20
60
0
0
C
-40
-60
60
-1800
M
0
1
0
0
M
-1
-1
1
-30
La ligne M est la recopie au signe près de la
contrainte car ici l'on cherche à minimiser !
Pour la recherche du pivot, on prend donc
la valeur la plus négative sur la ligne M
Le choix qui a été fait ne suit pas la règle de Bland qui aurait
donné pour solution suivante le point E (x2 et x3 hors base),
encore non admissible (b1<0), mais va nous permettre
d'abandonner la forme linéaire provisoire au second tableau
(tous les bi deviennent positifs), ainsi que la colonne de la
variable artificielle, et conduit ainsi au tableau final ci-contre:
x3
x5
b
x1
1/2
1/2
15
x4
1/2
5/2
25
x2
-1/2
-3/2
15
C
20
80
-1200
Le cheminement suivi lors de cette optimisation part de l'origine O:
x1 = x2 = x5 = 0, x3 = 60, x4 = 70, x6 = 30
Pour aller au point A:
x1 = 0, x2 = 30, x3 = 30, x4 = 10, x5 = 0, x6 = 0
Et finir à l'optimum B:
x1 = 15, x2 = 15, x3 = 0 (FAB saturée), x4 = 25 (reste 25h FIR), x5 = 0 (demande saturée)
Yves Correc 25/11/2007
6–14
Recherche Opérationnelle – Programmation linéaire : dualité
x1=0
D
gradient
C
A
B
E
O
x2=0
F
x3=0
x5=0
x4=0
Interprétation:
Primal:
Min 20 x1 + 60 x2
x2 ≤ 60
3 x1 +
x1 + 2 x2 ≤ 70
x1 +
x2 ≥ 30
ou encore
Max - 20 x1 - 60 x2
3 x1 +
x2 ≤ 60
x1 + 2 x2 ≤ 70
- x1 x2 ≤ - 30
Etant donné la valeur (prix de revient) unitaire de chaque produit (20, 60) et une borne supérieure à la
disponibilité des ressources (60, 70, -30), combien fabriquer de chaque produit pour minimiser le coût
total ?
Min 60 y1 + 70 y2 - 30 y3
Dual:
y2 3 y1 +
y1 + 2 y2 -
Max -60 y1 - 70 y2 + 30 y3
y3 ≥ - 20
y3 ≥ - 60
- 3 y1 - y2 + y3 ≤ 20
- y1 - 2 y2 + y3 ≤ 60
ou encore
Etant donné la disponibilité de chaque ressource (60, 70, -30) et une borne supérieure au prix de
revient (valeur) de chaque produit fini (20, 60), quelles valeurs unitaires devront être affectées aux
ressources pour minimiser la valeur totale des ressources utilisées?
Autres approches:
Comme il s'y prête, nous pouvons aussi traiter le problème dual au moyen de l'algorithme primal:
t
y1
y2
y3
-C
y4
-3
-1
1
20
y5
-1
-2
1
60
-b
t
Max
-60
-70
30
↑
Yves Correc 25/11/2007
0
t
y2
y4
-C
y3
-3
-1
1
20
y3
3/2
-5/2 -1/2
80
y5
2
-1
-1
40
y1
1/2
-1/2 -1/2
20
t
-15
-25
-b
t
30
↑
-40
-30
-600
y5
-b
y2
y4
-C
t
y1
-15 -1200
OPTIMUM
6–15
Recherche Opérationnelle – Programmation linéaire : dualité
Nous pouvons aussi utiliser l'algorithme dual pour le démarrage du primal (canonique):
Min 20 x1 + 60 x2
x2 ≤ 60
3 x1 +
x1 + 2 x2 ≤ 70
- x1 - x2 ≤ -30
x1
x2
b
x3
3
1
60
x4
1
2
70
x5
-1
-1
-30
C
20
60
←
0
dual
x5
x2
b
x5
x3
b
x3
3
-2
-30
x2
-3/2
-1/2
15
x4
1
1
40
x4
5/2
1/2
25
x1
-1
1
30
x1
1/2
1/2
15
C
20
40
C
80
20
OPTIMUM
←
-600
dual
-1200
Cette fois le cheminement suivi (en orange sur la figure) au départ de l'origine (O) passe par le point F
(x2= 0 et x5=0) avant de rentrer dans le domaine directement à l'optimum (point B).
6.4.6. Coûts de substitution
On appelle coût de substitution le coût associé à une variable naturelle qui apparaît dans la fonction
économique à l’optimum (elle est donc nulle à l'optimum).
Dans le problème primal de fabrication par exemple, il n’y a pas de coût de substitution, x1 et x2 étant
en base et ≠ 0).
Par contre dans le problème des mélanges de cafés, le tableau final s’écrit :
x6
x2
x5
b
x4
-1/3
0
-1/3
44/3
x3
0
1/2
1/2
30
x1
1/3
1/2
-1/6
10/3
C
-1/2
-1/20
-1/4
-35
La variable x2 (quantité de mélange n°2 produite) est principale et n'appartient pas à la solution de
base optimale.
La fonction économique a pour expression à l'optimum:
Z − 35 = −
x6 x 2 x5
−
−
2 20 4
ème
activité du modèle) est nulle à l'optimum, et l'y introduire de force
La variable x2 (taux de la 2
conduirait à se pénaliser de 1/20 par unité de x2 utilisée (c'est à dire ici 1/20 K$ par Klb substituée à
autre chose dans la solution…).
Bien sûr, rien ne permet d'affirmer qu'avec un tel taux (une telle valeur de la variable) le problème
resterait le même, ou aurait seulement une solution. Cependant ce critère permet dans une certaine
mesure de juger de l'importance relative d'une activité du modèle.
Yves Correc 25/11/2007
6–16
Recherche Opérationnelle – Programmation linéaire : dualité
6.4.7. Coûts marginaux
Revenons au problème primal de l'exercice précédent. La question posée est celle de la minimisation
d'un coût sous contraintes de disponibilité de ressources. Si l'on note x3, x4, x5 les variables d'écart, ce
problème s'écrit à l'optimum:
x1 + ½ x3 + ½ x5 = 15
x4 + ½ x3 + 5/2 x5 = 25
x2 - ½ x3 - 3/2 x5 = 15
20 x3 + 80 x5 = z – 1200
Minimum
Les variables d'écart x3 et x5 sont nulles, ie les contraintes correspondantes sont saturées à
l'optimum.
La première contrainte s'écrit dans le problème originel:
3x1 + x2 = 60 - x3
(3x1 + x2 ≤ 60 heures)
Si l'on augmente le nombre d’heures disponibles en fabrication, on peut espérer débloquer cette
contrainte, et par suite améliorer encore la valeur de la fonction économique.
En pratique, augmenter le second membre conduira ici à faire glisser vers le haut, sur l'axe (x1 = 0),
l'intersection de celui-ci avec la droite correspondant à cette contrainte (x3 = 0). Soit encore à déplacer
"vers le nord-est" cette droite (x3 = 0). On voit alors que le domaine admissible va s'agrandir vers la
droite avec le déplacement de sa frontière orientale, ce qui laisse espérer la possibilité d'améliorer la
fonction économique, qui trouve justement son optimum à cet endroit (point B).
Supposons que l’on dispose d'une heure supplémentaire: Le second membre prend la valeur 61. Cela
revient à donner à x3 la valeur -1, et l'expression de la fonction économique à l’optimum suggère que
l’on peut espérer un gain de 20 fois (-1), soit 20KF de moins sur le coût (que l'on cherche à minimiser).
Inversement, si l’on ne dispose plus que de 59 heures sur FAB, x3=1, et l'on risque de dégrader le
coût qui augmente de 20KF (moins optimal dans un domaine ainsi légèrement rétréci).
Bien sûr, ce raisonnement (appelé marginaliste) donne uniquement l'ordre de grandeur du gain ou de
la perte susceptibles d'être ainsi réalisés, mais n’indique pas si et jusqu’à quel point cela peut se
réaliser. Cette question trouvera une réponse avec les techniques de postoptimisation du chapitre
suivant (paramétrage du second membre).
On appelle coût marginal le coût associé à une variable d'écart dans la fonction économique à
l'optimum. On montre qu’il y a identité au signe près entre les variables duales et les coûts marginaux.
Nous avons en effet à l'optimum
z – z* = Σj cj* Xj
où c* est la dernière ligne du tableau.
Ce qui pour une variable d'écart Xe nous donnera
∂z* / ∂Xe = - ce*
(ce* coût marginal)
Les contraintes du problème originel s'écrivent
Xe + Σj aij Xj = bi
∂Xe / ∂bi = 1
D'où l'on tire évidemment
On en déduit le résultat cherché:
∂z* / ∂bi = (∂z* / ∂Xe)( ∂Xe / ∂bi) = - ce*
On voit ainsi que les petites variations de la fonction économique autour de l'optimum, quand on
perturbe le second membre b, sont proportionnelles au signe près aux coûts marginaux.
Nous pouvons alors observer, d'après le théorème de dualité forte, qu'à l'optimum:
z* = Σj cj xj* = Σi yi* bi = w*
ce qui nous donne par dérivation
∂z* / ∂bi = yi*
Yves Correc 25/11/2007
6–17
Recherche Opérationnelle – Programmation linéaire : dualité
Exercice
Un investisseur souhaite placer une somme de 50000 $ en actions. Trois catégories d'actions
sont envisageables :
Des valeurs sûres (1) donnent un rendement de 5 %, des valeurs de croissance (2) un rendement de
8 %, tandis que des valeurs spéculatives à haut risque (3) atteignent 16 %.
(1) Déterminer le placement maximisant le rapport annuel, sachant que notre investisseur
souhaite prudemment limiter à 25000 $ au plus le placement 3 (haut risque), et à 30000 $ au
plus la somme des placements 2 et 3 (croissance et haut risque).
(2) Peut-on avoir une idée des conséquences d'une éventuelle évolution de ces plafonds?
Solution
Nous allons prendre pour variables les placements à réaliser en valeurs sûres (x1), de croissance
(x2), et spéculatives (x3), exprimées en K$ pour éviter d'encombrer les tableaux de calcul.
La fonction économique sera le rapport associé (à un facteur multiplicatif 100 près pour la même
raison), soit:
Z = 5 x1 + 8 x2 + 16 x3
à maximiser sous les contraintes:
x1 + x2 + x3 ≤ 50
(k$)
x2 + x3 ≤ 30
x3 ≤ 25
avec bien sûr x1, x2, x3 ≥ 0.
La résolution de ce programme linéaire se fait sans problèmes en quatre tableaux:
x1
x2
x3
b
x4
1
1
1
50
x5
0
1
1
x6
0
0
c
5
8
x1
x2
x6
b
x4
1
1
-1
25
30
x5
0
1
-1
5
1
25
x3
0
0
1
25
16
0
c
5
8
-16
-400
↑
↑
x1
x5
x6
b
x4
1
-1
0
20
x2
0
1
-1
x3
0
0
c
5
-8
↑
x4
x5
x6
b
x1
1
-1
0
20
5
x2
0
1
-1
5
1
25
x3
0
0
1
25
-8
-440
c
-5
-3
-8
-540
Optimum
La solution optimale consiste à investir respectivement 20 k$, 5 K$, et 25 K$ dans les placements
proposés, pour un rapport global de 540 x 1000 / 100 = 5400 $.
Les coûts marginaux s'interprètent immédiatement:
Augmenter b1 (capital investi) d'un K$ augmentera le rapport global de 5 x 1000 / 100 = 50 $ (5% d'un
K$).
Augmenter le plafond (2+3) d'un K$ augmentera le rapport global de 30 $.
Augmenter le plafond (3) d'un K$ augmentera le rapport global de 80 $.
Yves Correc 25/11/2007
6–18
Recherche Opérationnelle – Programmation linéaire : dualité
6.5.
POST-OPTIMISATION
6.5.1. Paramétrage du second membre
Paramétrer le second membre revient à le faire varier linéairement en fonction d'un paramètre θ entre
deux extrema b et b', c'est à dire à tenter de résoudre le problème d'optimisation associé au second
membre bθ = b + θ (b' - b) avec 0 ≤ θ ≤ 1 (bθ=b pour θ=0, et bθ=b' pour θ=1).
Que devient le problème lorsque l'on effectue une telle transformation?
Examinons pour commencer ce qui se passe géométriquement:
Les coefficients de la fonction économique ne changent pas, la direction d'optimisation non plus.
En dimension 2, les composantes de b correspondent à l'ordonnée des points d'intersection des
droites de contraintes avec l'axe des y, tandis que les cosinus directeurs, qui apparaissent dans la
matrice A, sont inchangés. Faire varier les bi reviendra donc à translater ces droites dans le plan tout
en conservant leur direction.
L'effet prévisible sera donc une déformation du domaine admissible, qui sera restreint ou agrandi,
avec une éventuelle évolution du nombre des facettes. Le point optimal précédemment atteint, à
l'intersection de deux des droites de contraintes, va donc le rester mais se déplacer pour suivre leur
évolution. C'est ce déplacement qu'il va falloir calculer, en vérifiant que des soucis nouveaux
n'apparaissent pas… en l'occurrence une modification de la géométrie du domaine admissible.
La figure qui suit l'illustre en visualisant l'effet d'une augmentation de la première composante de b
(relaxation de la contrainte FAB par augmentation du nombre d'heures disponibles): la droite se
translate vers la droite, tandis que son intersection avec la droite associée à la troisième contrainte se
déplace de B en B1 puis en B2. Le domaine se déforme homothétiquement dans un premier temps, le
polyèdre ABCD devenant AB1C1D, puis change de forme en devenant AB1B2C1D…
x1=0
x3=0
x3=0
D
x5=0
C
A
C1
B
C2
gradient
O
x4=0
B1
B2
x2=0
Que devient alors la solution du problème d'optimisation qui nous préoccupe?
L'examen de la figure nous fait suspecter qu'elle va dans un premier temps de déplacer B en B1, mais
qu'elle n'en bougera plus si la droite continue son déplacement, en raison de l'orientation constante du
vecteur gradient de la fonction économique.
Yves Correc 25/11/2007
6–19
Recherche Opérationnelle – Programmation linéaire : dualité
Que peut-on en déduire en ce qui concerne le calcul des solutions de bases successives?
Lors de la transformation qui remplace le second membre b par bθ = b + θ (b' - b), les coefficients de
la fonction économique ne sont pas affectés. On reste donc optimal.
Par contre la solution de base optimale va changer, avec plusieurs cas possibles:
• Quand θ varie entre 0 et 1, les variables de base prennent les valeurs correspondant aux
composantes du vecteur bθ, et sont toujours positives (admissibilité).
• Il existe une valeur θ1 pour laquelle une (ou plusieurs) variable(s) de base s'annule(nt). Cela
signifie que le déplacement décrit plus haut nous amène à intercepter un nouveau plan de
contrainte. Il faut donc effectuer un changement de base en vue de poursuivre éventuellement
le cheminement du simplexe, suivant la démarche maintenant classique, tout en respectant la
condition d'optimalité. Deux cas de figure se présentent alors:
Le changement de base est possible, et on continue le paramétrage sur cette
nouvelle base.
Le changement n'est pas possible, et on s'arrête à la valeur θ1.
Exemple
Nous allons revenir au problème de fabrication du chapitre précédent.
Encouragé par le succès de ses produits, et voyant que la contrainte FAB est saturée à l'optimum, le
chef de l'entreprise envisage d'augmenter sa capacité de 60 à 240 heures par mois, et se pose la
question de l'intérêt de la chose… jusqu'où doit-il aller?
Le paramétrage du second membre se traduit ici par la nouvelle formulation du problème d'origine:
Min 20 x1 + 60 x2
3 x1 + x2 ≤ 60 + 180 θ
x1 + 2 x2 ≤ 70
x1 + x2 ≥ 30
Pour connaître le tableau optimal paramétré, nous allons en fait nous borner à compléter le tableau de
départ avec une colonne supplémentaire θ, et lui appliquer l'ensemble des calculs correspondant aux
changements de base successifs (à faire dès le départ, quand on sait qu'un paramétrage du second
membre sera demandé…).
x1
x2
x5
b
θ
x1
x6
x5
b
θ
x3
3
1
0
60
180
x3
2
-1
1
30
180
x4
1
2
0
70
0
x4
-1
-2
2
10
0
x6
1
1
-1
30
0
x2
1
1
-1
30
0
C
20
60
0
0
0
C
-40
-60
60
-1800
0
M
-1
-1
1
-30
0
M
0
1
0
0
0
↑
la solution optimale est donc:
Yves Correc 25/11/2007
↑
x3
x5
b
θ
x1
1/2
1/2
15
90
x4
1/2
5/2
25
90
x2
-1/2
-3/2
15
-90
C
20
80
OPTIMUM
-1200
3600
x1 + ½ x3 + ½ x5 = 15 + 90 θ
x4 + ½ x3 +5/2 x5 = 25 + 90 θ
x2 – ½ x3 - 3/2 x5 = 15 - 90 θ
20 x3 + 80 x5 = z - 1200 + 3600 θ
minimum…
6–20
Recherche Opérationnelle – Programmation linéaire : dualité
La dernière ligne nous indique que quand θ augmente, z diminue. Mais la variation de θ va être limitée
ème
équation dont le second membre va s'annuler (la plus proche contrainte rencontrée par le
par la 3
point B lors du déplacement correspondant), tandis que les autres bi vont rester positifs (admissibilité).
En pratique, on calcule les valeurs de θ qui annulent les bi (la plus petite étant la limite cherchée θ1):
• X1 = 0 pour θ = - 15 / 90
• X4 = 0 pour θ = - 25 / 90
• X2 = 0 pour θ = 15 / 90 qui est dans l'intervalle de variation permis [0,1]
Nous pouvons donc déplacer la droite (x3 = 0) jusqu'à θ1 = 15/90 = 1/6, que nous allons faire
apparaître dans les équations au moyen du changement de variable θ = θ1 + θ' . Les composantes du
second membre, coordonnées du point courant, deviennent alors respectivement, au point B1:
X1 = 15 + 90 (15/90 + θ') = 30 + 90 θ'
X4 = 25 + 90 (15/90 + θ') = 40 + 90 θ'
X2 = 15 – 90 (15/90 + θ') = 0 – 90 θ' par construction
–Z = –1200 + 3600 (15/90 + θ') = – 600 + 3600 θ'
On observe là que ce calcul est conduit de la même manière que dans l'algorithme classique du
simplexe pour le choix du pas de déplacement:
(1) On recherche dans la colonne θ le pivot θi < 0 qui réalise min (– bi / θi ) > 0
(2) On transforme la colonne b par pivotage de Gauss (le bi sur la ligne du pivot s'annule)
(1)
x3
x5
b
θ
(2)
x3
x5
b
θ'
x1
1/2
1/2
15
90
x1
1/2
1/2
30
90
x4
1/2
5/2
25
90
x4
1/2
5/2
40
90
x2
-1/2
-3/2
15
-90
x2
-1/2
-3/2
0
-90
C
20
80
-1200
3600
C
20
80
-600
3600
←
Pour continuer l'optimisation, on va maintenant pivoter l'ensemble du tableau en utilisant l'algorithme
dual pour la détermination de la nouvelle base (quelle variable doit remplacer xi sortant de base?):
(3) On choisit le pivot aik dans la ligne i du θi identifié à l'étape (1), dans la colonne k qui
réalise min | ck / aik | pour aik ≤ 0 (et ck ≥ 0 car on minimise)
(4) On opère un pivotage classique de l'ensemble du tableau pour récrire les équations sur la
nouvelle base
(3)
x3
x5
b
θ'
(4)
x2
x5
b
θ'
x1
1/2
1/2
30
90
x1
1
-1
30
0
x4
1/2
5/2
40
90
x4
1
1
40
0
x2
-1/2
-3/2
0
-90
x3
-2
3
0
180
C
20
80
-600
3600
C
40
20
-600
0
←
Il est inutile de poursuivre à ce stade, car la fonction économique ne dépend plus de θ', les équations
s'écrivant alors (nouvel optimum atteint pour θ = θ1 = 1/6):
x1 + x2 - x5 = 30
x4 + x2 + x5 = 40
x3 - 2 x2 + 3 x5 = 180 θ'
40 x2 + 20 x5 = Z – 600
minimum
Il est donc possible d'abaisser le coût de production de 1200KF à 600KF, en augmentant le nombre
d'heures disponibles sur la machine FAB jusqu'à 60 + (15/90) 180 = 90 heures. Tous les appareils
seront dans ce cas fabriqués sur la première chaîne. Augmenter davantage le nombre d'heures (FAB)
n'offre aucun intérêt car une augmentation de θ n'a plus d'incidence sur la fonction économique.
Yves Correc 25/11/2007
6–21
Recherche Opérationnelle – Programmation linéaire : dualité
Exercice
Un atelier médiéval fabrique deux modèles d'armure, notés A et B. Le modèle A requiert, par
unité produite, 5 heures de forgeage, 4 heures de montage, et 1 heure de finition, tandis que le
modèle B nécessite 5 heures de forgeage, 1 heure de montage, et 3 heures de finition.
Compte tenu du personnel disponible, la forge peut fonctionner 75 heures par semaine au
maximum, l'atelier de montage 42 heures, et celui de finition 27 heures (NB. Un atelier ne traite qu'une
armure à la fois).
Enfin, pour des raisons obscures que nous ne discuterons pas ici mais dont l'intérêt est
évident pour l'exercice, le nombre total d'armures fabriquées chaque semaine doit être au moins égal
à 4, tandis que le nombre d'armures A produites chaque semaine doit être au plus égal au nombre
d'armures B plus 8.
Dans ces conditions, sachant que le bénéfice sur la vente d'une armure A est de 5 écus, et
celui sur la vente d'une armure B de 4 écus, nous allons chercher à optimiser la production dans
l'optique du bénéfice maximum.
(1)
Formuler le problème en termes de programmation linéaire.
(2)
Le résoudre par la méthode du simplexe (utiliser les tableaux réduits de TUCKER).
Que peut-on remarquer ?
(3)
Refaire le calcul en utilisant l’algorithme dual plutôt que les variables artificielles.
(4)
L'embauche de personnel supplémentaire doit permettre d'augmenter le temps de
fonctionnement hebdomadaire de l'atelier de montage jusqu'à 50 heures. En
déterminer les conséquences sur la solution du problème.
Solution
Le problème posé consiste à maximiser le bénéfice sous diverses contraintes, dont l'une interdit la
solution de départ triviale (b<0) et nécessitera l'introduction d'une variable artificielle x8. La forme
canonique du problème est:
Max.5 x1 + 4 x2
5 x1 + 5 x2 ≤ 75

4 x1 + x2 ≤ 42
 x1 + 3x2 ≤ 27
 x + x ≥ 4 ⇒ − x − x + x = −4 ⇒ x + x − x + x = 4
1
2
7
1
2
7
8
 1 2
 x1 − x2 ≤ 8
Soit sous forme standard:
Max 5 x1 + 4 x2
5 x1 + 5 x2 + x3 = 75

4 x1 + x2 + x4 = 42

 x1 + 3 x2 + x5 = 27
x − x + x = 8
6
 1 2
 x1 + x2 − x7 + x8 = 4
Il peut être intéressant, pour mieux comprendre le cheminement de l'algorithme, de dessiner le
polyèdre (puisqu'on a la chance de travailler en dimension 2…).
Yves Correc 25/11/2007
6–22
Recherche Opérationnelle – Programmation linéaire : dualité
x3=0
paramétrage
x4=0
x5=0
x4=0
x6=0
optimum
x1=0
x7=0
x2=0
La dernière question implique une post-optimisation, avec paramétrage du second membre (sa
seconde composante devenant b2 = 42 + 8 θ avec θ variant entre 0 et 1).
Nous introduirons par conséquent dès le début du calcul la colonne supplémentaire θ nécessaire au
paramétrage. Les tableaux de Tucker résultants sont donc les suivants:
x1
x2
x7
b
θ
x8
x2
x7
b
θ
x3
5
5
0
75
0
x3
-5
0
5
55
0
x4
4
1
0
42
8
x4
-4
-3
4
26
8
x5
1
3
0
27
0
x5
-1
2
1
23
0
x6
1
-1
0
8
0
x6
-1
-2
1
4
0
x8
1
1
-1
4
0
x1
1
1
-1
4
0
C
5
4
0
0
0
C
-5
-1
5
-20
0
M
1
1
-1
4
0
M
-1
0
0
0
0
↑
↑
On abandonne la colonne x8 et la ligne M (on est rentré dans le domaine) avant le second pivotage
x2
x6
b
θ
x4
x6
b
θ
x3
10
-5
35
0
x3
-2
3
15
-16
x4
5
-4
10
8
x2
1/5
-4/5
2
8/5
x5
4
-1
19
0
x5
-4/5
11/5
11
-32/5
x7
-2
1
4
0
x7
2/5
-3/5
8
16/5
x1
-1
1
8
0
x1
1/5
1/5
10
8/5
C
9
-5
-40
0
C
-9/5
11/5
-58
-72/5
↑
Yves Correc 25/11/2007
↑
6–23
Recherche Opérationnelle – Programmation linéaire : dualité
On obtient le tableau final:
x4
x3
b
θ
x6
-2/3
1/3
5
-16/3
x2
-1/3
4/15
6
-8/3
x5
2/3
-11/15
0
16/3
x7
0
1/5
11
0
x1
1/3
-1/15
9
8/3
-69
-8/3
C
-1/3 -11/15
OPTIMUM
On produira donc 9 armures de type A et 6 armures de type B par semaine.
On observe la présence d'une dégénérescence de deuxième espèce. Ce point multiple est détectable
dès l'avant-dernier tableau (non-unicité du choix de la variable sortante: x3 et x5 donnent la même
valeur 5 du rapport b/a). Il est aussi apparent dans le tableau final (x5 = 0).
On a donc à l'optimum x3 = x4 = x5 = 0 et les ateliers forge, montage et finition seront utilisés à 100%
(contraintes saturées).
La contrainte (x6=5) n'est pas saturée.
La contrainte (x7=11) non plus: L'excédent de production est de 11 unités par rapport à l'objectif de 4.
Enfin le bénéfice total atteint 69 écus.
Nous pouvions aussi utiliser l'algorithme dual, en lieu et place du primal.
Dans ce cas nous devions pour contourner la non admissibilité duale (non optimalité primale) de
l'origine (c=5,4) utiliser un objectif artificiel pour démarrer, sous la forme d'une ligne M nulle ajoutée
sous la ligne c (choix de colonne à faire au moyen de la règle de Bland).
Les tableaux correspondants sont:
x1
x2
b
θ
x7
x2
b
θ
x3
5
5
75
0
x3
5
0
55
0
x4
4
1
42
8
x4
4
-3
26
8
x5
1
3
27
0
x5
1
2
23
0
x6
1
-1
8
0
x6
1
-2
4
0
x7
-1
-1
-4
0
x1
-1
1
4
0
C
5
4
0
0
C
5
-1
-20
0
M
0
0
0
0
M
0
0
0
0
←(2)
(3)↑
↑
Le cheminement sur le domaine est ici (par hasard) le même que celui du primal, et le second tableau
identique à celui que nous avions obtenu précédemment. Il est primal admissible et nous pouvons
alors poursuivre la phase 2 en primal, suivant la séquence exposée plus haut.
Quelle conséquences peut avoir une augmentation du quota d'heures de montage entre 42 et 50
heures?
La réponse à cette question viendra d'un paramétrage du second membre, où comme on l'a dit plus
haut sa seconde composante devient 42 + 8 θ avec θ variant entre 0 et 1.
Yves Correc 25/11/2007
6–24
Recherche Opérationnelle – Programmation linéaire : dualité
La variation de θ va être limitée par la positivité du second membre, dont la première composante à
s'annuler va être la première, pour θ = 15/16. On fait donc le changement de variable et on pivote la
colonne b, puis tout le tableau suivant l'algorithme dual (avec a<0 et c<0 car on maximise):
x4
x3
b
θ
x4
x3
b
θ
x6
-2/3
1/3
5
-16/3
x6
-2/3
1/3
0
-16/3
x2
-1/3
4/15
6
-8/3
x2
-1/3
4/15
7/2
-8/3
x5
2/3
-11/15
0
16/3
x5
2/3
-11/15
5
16/3
x7
0
1/5
11
0
x7
0
1/5
11
0
x1
1/3
-1/15
9
8/3
x1
1/3
-1/15
23/2
8/3
C
-1/3
-11/15
-69
-8/3
C
-1/3
-11/15 -143/2
-8/3
Ce qui nous donne pour tableau final (optimum toujours dégénéré avec 3 contraintes saturées x3, x4,
et x6):
x6
x3
b
θ
x4
-3/2
-1/2
0
8
x2
-1/2
1/10
7/2
0
x5
1
-2/5
5
0
x7
0
1/5
11
0
x1
1/2
1/10
23/2
0
C
-1/2
-9/10
-143/2
0
Le bénéfice maximal correspond à θ = 15/16, c'est à dire une durée de fonctionnement de l' atelier de
montage de 49 heures 1/2 par semaine. Par contre on doit remarquer que la solution optimale trouvée
n'est pas entière: on devra produire 11,5 armures A et 3,5 armures B par semaine pour un bénéfice
de 71 écus et demi !…
Nous ne pouvons pas nous arrêter à cette solution, qui bien que valable sur le plan mathématique, n'a
pas de sens pour le problème physique de production initialement posé.
Nous pouvons bien sûr penser à raisonner sur un cycle de deux semaines et non d'une semaine, mais
c'est une fausse réponse car la taille du cycle temporel dépendrait alors, on le voit bien, de la taille du
dénominateur de la solution trouvée, ce qui n'est pas réaliste… Nous pouvons aussi penser à tronquer
ou arrondir la solution continue trouvée, mais des contre-exemples sont là pour prouver que l'on peut
très bien aboutir à des solutions assez éloignées de l'optimum entier recherché.
La bonne solution se trouve du côté de la programmation linéaire en nombres entiers (PLNE), dont les
méthodes visent à trouver des solutions entières aux problèmes posés. Mais nous abordons là une
autre branche (fort intéressante) de la recherche opérationnelle.
Yves Correc 25/11/2007
6–25
Recherche Opérationnelle – Programmation linéaire : dualité
6.5.2. Paramétrage de la fonction économique
A l'optimum, les coûts ont une valeur bien déterminée: ils font partie des données du problème, en
principe fixes. Mais en pratique ces coûts sont de fait soumis à des variations ou des incertitudes non
négligeables. L'optimum trouvé avec les données initiales a par conséquent peu de chances de rester
valable. La question qui se pose alors est: jusqu'à quel point? Après avoir résolu le problème avec les
données initiales, que peut-on savoir de l'évolution de la solution en fonction de celle des coefficients
de la fonction économique?
Imaginons par exemple qu'à la lumière des résultats du paragraphe précédent le chef d'entreprise
décide d'allouer 90 heures à la fabrication (FAB). Dans ces conditions, que se passera-t-il si le coût de
production sur la première chaîne (de laquelle sortiront alors tous les appareils) augmente de 20KF à
120KF?
Nous allons donc récrire cette fonction économique en fonction d'un paramètre λ qui variera entre 0 et
1 quand Cλ variera entre C et C' :
Cλ = C + λ (C' – C)
avec 0 ≤ λ ≤ 1
C'est cette fonction économique que nous allons chercher à optimiser, en x et λ. Pour cela nous
allons résoudre le problème initial avec λ=0, et à partir de ce premier optimum faire varier λ.
Que va-t-il se passer ?
Géométriquement, on observe que le domaine admissible défini par les contraintes ne bouge pas,
mais que la direction d'optimisation, le vecteur gradient de la fonction économique, Cλ , va voir sa
direction (en rouge) changer en fonction de l'évolution de ses composantes, et donc de λ. La direction
d'optimisation va donc se rapprocher de la normale (en bleu) à l'une des facettes contenant le point
optimum, puis la dépasser (en vert), entraînant la reprise du déplacement dans cette nouvelle
direction (vers le point A).
Cela signifie que la solution de base ne change pas avec l'évolution de λ, et reste admissible, mais
qu'elle ne va sans doute pas tester optimale. Ce qui se produira lorsque les coefficients de la ligne C
cesseront d'être tous négatifs (maximisation) ou tous positifs (minimisation). Et il faudra reprendre
l'optimisation dans cette nouvelle direction, c'est à dire le cheminement classique du simplexe, après
un changement de variable λ = λ1 + λ' , à partir de la valeur λ1 qui l'annule.
x1=0
x3=0
D
x5=0
A
C1
x4=0
O
B1
x2=0
gradient
Deux cas pourront alors se présenter, après avoir trouvé une nouvelle base réalisable:
Yves Correc 25/11/2007
6–26
Recherche Opérationnelle – Programmation linéaire : dualité
•
•
On peut continuer le paramétrage, jusqu'à un éventuel nouvel optimum, directement ou bien
par l'intermédiaire d'un ou plusieurs sommets intermédiaires (domaine fermé)
Le problème n'admet plus de solution finie (domaine ouvert d'un côté)
Min z = (20 + 100 λ) x1 + 60 x2
3 x1 + x2 + x3 = 90
x1 + 2 x2 + x4 = 70
x1 + x2 - x5 = 30
Le problème initial s'écrit:
(0≤λ≤1, x1≥0, x2≥0)
De la même manière qu'au paragraphe précédent, on va compléter le tableau de Tucker initial, ici
d'une ligne supplémentaire λ associée à la ligne c pour le paramétrage de la fonction économique.
On ne détaillera pas le calcul qui s'opère classiquement, les choix étant faits sur la ligne c et la
colonne b (puisque λ est en fait nul durant cette première phase, et qu'il nous importe seulement de
connaître les termes en λ dans l'écriture de la fonction économique à l'optimum B1, point de départ
effectif de la post-optimisation. La ligne supplémentaire λ subit donc simplement les pivotages).
On peut aussi tout simplement partir du tableau final du paragraphe précédent, où l'on récrira la
fonction économique initiale z = (20 + 100 λ) x1 + 60 x2 en fonction des variables hors base (ici x2
et x5, en remplaçant x1 par son expression tirée de la première ligne, soit x1 = 30 – x2 + x5.
Ce qui donne
Z = 600 + 3000 λ + (40 – 100 λ) x2 + (20 + 100 λ) x5
Quelle que soit la méthode utilisée, le tableau final et le système associé (x1, x3, x4 en base) sont :
(1)
x2
x5
b
x1
1
-1
30
→ x1 + x2 - x5 = 30
x4
1
1
40
→ x4 + x2 + x5 = 40
x3
-2
3
0
→ x3 – 2 x2 + 3 x5 = 0
C
40
20
-600
λ
-100
100
-3000
→ z - 600 - 3000 λ = (40 - 100 λ) x2 + (20 + 100 λ) x5
↑
La transformation du tableau va s'effectuer en deux étapes, comme au paragraphe précédent.
Choix de la variable entrante:
(1)
On recherche dans la ligne λ le pivot qui réalise min (–Cj / λj ) compris entre 0 et 1
(intervalle de variation de λ). Si l'on n'en trouve pas, la solution optimale actuelle le
restera dans tout l'intervalle de variation de λ, et le paramétrage est terminé. Seule
évoluera la valeur de la fonction économique en fonction de λ.
(2)
Puis on pivote la ligne c pour tenir compte du changement de variable λ = λ1 + λ'
(attention le Ci de la colonne pivot devient nul)
Ici, quand λ augmente, le coefficient de x2 s'annule pour λ1 = 40/100 et devient ensuite négatif. Le
pivot retenu pour transformer la ligne c est –100 (changement de variable λ = 40/100 + λ') et la
variable x2 va entrer en base: on augmente x2 …jusqu'où?
Choix de la variable sortante:
(3)
On applique le critère du simplexe primal (i tel que min bi / aij avec bi >0 et aij >0)
(4)
Puis on transforme l'ensemble du tableau par pivotage sur l'élément trouvé
Yves Correc 25/11/2007
6–27
Recherche Opérationnelle – Programmation linéaire : dualité
Les tableaux correspondants sont:
(2-3)
x2
x5
b
(4)
x1
x5
b
x1
1
-1
30
x2
1
-1
30
x4
1
1
40
x4
-1
2
10
x3
-2
3
0
x3
2
1
60
C
0
60
-1800
C
0
60
-1800
λ
-100
100
-3000
λ
100
0
0
↑
OPTIMUM
L'optimum est atteint car aucune augmentation de λ ne permet plus d'améliorer (minimiser) la fonction
économique, dont l'écriture en ce point (A: x1 = 0 et x2 = 30) est:
ou encore:
Z = 1800 + 100λ' x1 + 60 x5
Z = 1800 + (100λ - 40) x1 + 60 x5
Revenant au problème originel, nous pouvons maintenant dire que:
lorsque le coût unitaire de production sur la première chaîne évolue de
20KF à
(20+100x40/100) = 60KF, le coût total de production passe de 600 KF à 1800KF (toute la
production étant assurée par la première chaîne (gradient rouge, point B1, x1 = 30 et x2 = 0).
Pour un coût unitaire de 60KF, et un coût global de production de 1800KF, toute répartition de
la production entre les deux chaînes est valable (facette B1A orthogonale au gradient).
Lorrsque le coût unitaire sur le première chaîne devient supérieur à 60KF, le coût total reste
égal à 1800KF tandis que la production est assurée intégralement sur la deuxième chaîne
(gradient vert, point A, x1 = 0 et x2 = 30).
Yves Correc 25/11/2007
6–28
Recherche Opérationnelle – Programmation linéaire : dualité
6.6.
COMPLEMENTS
6.6.1. Exercice 12-9-7-6-10
Exercice
Une grande banque nationalisée souhaite investir des fonds importants. Cinq choix sont
possibles, dont les rapports annuels sont les suivants :
Actions de sociétés offshore: 12% , immobilier aux Bahamas: 9% , studios de cinéma en
Amérique du sud : 7% , nouvel emprunt russe: 6% , loterie nationale : 10%.
Ces taux étant supposés rester constants dans un futur proche, on cherche à déterminer la
politique d'investissement assurant le rendement global maximal, tout en respectant les règles
suivantes, issues d'une analyse très fine des risques du marché par les spécialistes d'Andersème
Hatoovan Consulting :
$
$
$
La somme des investissements en actions et en studios ne doit pas excéder la somme des
investissements en emprunt russe et en loterie nationale.
La somme des investissements en immobilier et en loterie nationale doit être au moins égale
à l'investissement en studios.
L'investissement immobilier ne doit pas excéder celui réalisé en loterie nationale.
(1)
Formuler le problème en termes de programmation linéaire.
(2)
Déterminer la politique d'investissement qui maximise le rendement global.
(3)
Peut-on avoir une indication simple de l'incidence sur ce rendement du choix forcé de l'un des
investissements non retenus dans la solution optimale ?
(4)
L’actionnaire majoritaire de la banque amène celle-ci à investir malgré tout dans l’immobilier.
Que devient la solution optimale ?
Solution
Appelons x1, x2, x3, x4, x5 les fractions de la capacité d'investissement de la banque allouées aux
actions, à l'immobilier, aux studios, à l'emprunt et à la loterie.
La fonction à maximiser est le rapport global (exprimé en % par an de l'investissement):
Z = 12 x1 + 9 x2 + 7 x3 + 6 x4 + 10 x5
Les règles d'investissement s'écrivent:
x1 + x3 ≤ x4 + x5
sans oublier la contrainte additionnelle x1 + x2 + x3 + x4 + x5 ≤ 1
x2 + x5 ≥ x3
x2 ≤ x5
qui résulte de la définition des variables utilisées !…
x1, x2, x3, x4, x5 ≥ 0
Ce qui donne l'énoncé:
Max Z = 12 x1 + 9 x2 + 7 x3 + 6 x4 + 10 x5
x1
+ x3 - x4
- x5 ≤ 0
-x2 + x3
- x5 ≤ 0
x2
- x5 ≤ 0
x1 + x2 + x3 + x4
+ x5 ≤ 1
avec avec xi ≥ 0 (i=1,5)
Ce problème sans difficultés particulières est résolu en 3 tableaux par l'algorithme primal, et donne
pour solution optimale:
x1 = 1/2, x2 = x3 = x4 = 0, et x5 = 1/2.
Soit un investissement réparti par moitiés entre actions offshore et loterie nationale.
Yves Correc 25/11/2007
6–29
Recherche Opérationnelle – Programmation linéaire : dualité
Tab1
x1
x2
x3
x4
x5
b
Tab2
x6
x2
x3
x4
x5
b
x6
1
0
1
-1
-1
0
x1
1
0
1
-1
-1
0
x7
0
1
0
0
-1
0
x7
0
1
0
0
-1
0
x8
0
-1
1
0
-1
0
x8
0
-1
1
0
-1
0
x9
1
1
1
1
1
1
x9
-1
1
0
2
2
1
C
12
9
7
6
10
0
C
-12
9
-5
18
22
0
↑
↑
Tab3
x6
x2
x3
x4
x9
b
Tab4
x6
x7
x3
x4
x9
b
x1
1/2
1/2
1
0
1/2
1/2
x1
2/3
-1/3
1
-1/3
1/3
1/3
x7
-1/2
3/2
0
1
1/2
1/2
x2
-1/3
2/3
0
2/3
1/3
1/3
x8
-1/2
-1/2
1
1
1/2
1/2
x8
-2/3
1/3
1
4/3
2/3
2/3
x5
-1/2
1/2
0
1
1/2
1/2
x5
-1/3
-1/3
0
2/3
1/3
1/3
C
-1
-2
-5
-4
-11
-11
C
-5/3
4/3
-5
-8/3 -31/3 -31/3
(↑ )
OPTIMUM
Pivotage forcé sur x2
A l'optimum, la fonction économique a pour expression:
Z – 11 = - x6 – 2 x2 – 5 x3 – 4 x4 – 11 x9
Le rendement espéré est donc de 11%, et les coûts de substitution sont respectivement de -2, -5, et 4 pour les variables x2, x3, x4.
On en déduit immédiatement la perte de rendement par unité de chaque variable investie de force à la
place des choix optimaux:
Donner par exemple la valeur 1 (c'est à dire 100% de l'investissement) à x2 (immobilier Bahamas)
fera chuter le rendement de 2% (on observe effectivement qu'il passe de 11% à 9%).
Par contre les contraintes liées aux règles d'investissement ne seront probablement plus vérifiées car
on sera sans doute sorti du domaine admissible.
Que va-t-il se passer si l'actionnaire majoritaire de la banque oblige celle-ci à investir dans
l'immobilier?
On vient d'avoir grâce au coût de substitution (–2) une idée des conséquences de ce choix, mais
seulement pour une petite augmentation de la variable x2. Ce choix revient donc à introduire x2 en
base, c'est à dire à s'éloigner du plan de contrainte associé. Jusqu'où peut-on se déplacer ainsi?
La réponse est donnée par un pivotage classique, qui fera sortir x7 de la base (la plus proche
contrainte rencontrée dans ce déplacement est alors x7), suivant le calcul qui conduit au tableau 4 cidessus. La solution (qui n'est plus optimale rappelons-le car on vient d'imposer une contrainte
arbitraire sur l'investissement x2) devient alors:
X1 = 1/3
X2 = 1/3
X3 = 0
X4 = 0
X5 = 1/3
au lieu de
x1 = 1/2
x2 = 0
x3 = 0
x4 = 0
x5 = 1/2
On peut donc aller jusqu'à 1/3 d'immobilier, ce qui diminue le rendement global à 10,33%
On remarquera au passage que l'origine, solution de départ, est point multiple (la première itération
donne un déplacement nul).
Yves Correc 25/11/2007
6–30
Recherche Opérationnelle – Programmation linéaire : dualité
6.6.2. Exercice 1-14-6
Exercice
On souhaite investir une somme comprise entre 1 et 4 millions d'écus. Trois choix sont
possibles, dont les rapports annuels sont les suivants :
Immobilier : 1% , actions : 14% , obligations : 6%.
Ces taux étant supposés rester constants dans un futur proche, on cherche à déterminer la
politique d'investissement assurant le rendement global maximal, tout en respectant les règles
suivantes, issues d'une analyse des risques du marché :
L'investissement immobilier ne doit pas excéder 2 millions d'écus.
L'investissement en obligations ne doit pas excéder 3 millions d'écus.
L'investissement en actions ne doit pas excéder 2 millions d'écus diminués du tiers de
l'investissement en obligations.
(1)
Formuler le problème en termes de programmation linéaire.
(2)
Déterminer la politique d'investissement qui maximise le rendement global.
(3)
Que peut-on dire de plus sur cette solution ?
(4)
On s'affranchit de la contrainte limitant l'investissement en obligations, et on envisage de
doubler (passer à 8 millions d'écus) la borne supérieure du capital investi. Etudier les
conséquences sur la politique d'investissement (paramétrage du second membre)
Solution
Soit x1, x2, x3 les sommes investies en immobilier, actions, obligations, exprimées en millions d'écus.
Optimiser le rendement global (%) équivaut à optimiser le rapport effectif (en ME), c'est à dire à
maximiser la fonction économique Z = (x1 + 14 x2 + 6 x3) / 100. Pour la suite on laissera de côté le
facteur 100 pour alléger le calcul (sans l'oublier à la fin pour l'interprétation!).
Dans ces conditions, les contraintes sont les suivantes:
(immobilier x4)
X1 ≤ 2
(obligations x5)
X3 ≤ 3
X2 ≤ 2 – 1/3 x3 (x6) que l'on récrira 3 x2 + x3 ≤ 6 (on n'oubliera pas à la fin le facteur 3!)
(investissement max x7)
X1 + x2 + x3 ≤ 4
X1 + x2 + x3 – x8 + x9 = 1 (variable artificielle x9)
X1 + x2 + x3 ≥ 1 qui peut être récrit
(si l'on utilise l'algorithme dual)
Ou encore
- x1 – x2 – x3 ≤ -1
Avec bien sûr x1, x2, x3 ≥ 0.
Dans un premier temps on va démarrer avec une variable artificielle x9, et une colonne θ en vue du
paramétrage du second membre (placement passant de 4 à 8), ce qui donne les tableaux successifs:
(1)
x1
x2
x3
x8
b
θ
(2)
x9
x2
x3
x8
b
θ
x4
1
0
0
0
2
0
x4
-1
-1
-1
1
1
0
x5
0
0
1
0
3
0
x5
0
0
1
0
3
0
x6
0
3
1
0
6
0
x6
0
3
1
0
6
0
x7
1
1
1
0
4
4
x7
-1
0
0
1
3
4
x9
1
1
1
-1
1
0
x1
1
1
1
-1
1
0
C
1
14
6
0
0
0
C
-1
13
5
1
-1
0
M
1
1
1
-1
1
0
M
-1
0
0
0
0
0
Et on abandonne ligne M et variable x9
↑
↑
Yves Correc 25/11/2007
6–31
Recherche Opérationnelle – Programmation linéaire : dualité
(3)
x1
x3
x8
b
θ
(4)
x1
x3
x6
b
θ
x4
1
0
0
2
0
x4
1
0
0
2
0
x5
0
1
0
3
0
x5
0
1
0
3
0
x6
-3
-2
3
3
0
x8
-1
-2/3
1/3
1
0
x7
0
0
1
3
4
x7
1
2/3
-1/3
2
4
x2
1
1
-1
1
0
x2
0
1/3
1/3
2
0
C
-13
-8
14
-14
0
C
1
4/3
-14/3
-28
0
↑
↑
On note le choix possible entre x5 et x7 pour la variable sortante: On se dirige vers un point multiple…
Nous choisissons ici de pivoter en sortant x5 de la base (plus petit indice).
(5)
x1
x5
x6
b
θ
(6)
x7
x5
x6
b
θ
x4
1
0
0
2
0
x4
-1
2/3
1/3
2
-4
x3
0
1
0
3
0
x3
0
1
0
3
0
x8
-1
2/3
1/3
3
0
x8
1
0
0
3
4
x7
1
-2/3
-1/3
0
4
x1
1
-2/3
-1/3
0
4
x2
0
-1/3
1/3
1
0
x2
0
-1/3
1/3
1
0
C
1
-4/3
-14/3
-32
0
C
-1
-2/3
-13/3
-32
-4
↑
Optimum
On croit pouvoir encore poursuivre (c = 1), mais le plus petit rapport b/a trouvé est nul, et le
déplacement associé à la sortie de base de x7 est nul.
Les valeurs optimales trouvées sont donc x1 = 0, x2 = 1, x3 = 3, c'est à dire un placement d'un million
d'écus en actions, de trois millions d'écus en obligations, et rien en immobilier, pour un rapport de 0,32
millions d'écus.
Les variables d'écart nulles X5, x6, x7, correspondent aux contraintes saturées (règles 2 et 3, et
investissement en butée).
La relaxation de la contrainte sur les obligations revient à supprimer le plan de contrainte (x5 = 0), et à
lancer une postoptimisation en paramétrant le second membre (ce que nous avions fait par précaution
pour éviter d'avoir à reprendre tous les calculs avec la colonne θ). Il faudra tout de même repartir du
tableau (4) amputé de la ligne x5.
La solution trouvée reste la même car nous n'avons fait que supprimer la contrainte responsable du
point multiple.
4bis
x1
x3
x6
b
θ
5bis
x1
x7
x6
b
θ
x4
1
0
0
2
0
x4
1
0
0
2
0
x8
-1
-2/3
1/3
1
0
x8
0
1
0
3
4
x7
1
2/3
-1/3
2
4
x3
3/2
3/2
-1/2
3
6
x2
0
1/3
1/3
2
0
x2
-1/2
-1/2
1/2
1
-2
C
1
4/3
-14/3
-28
0
C
-1
-2
-4
-32
-8
↑
Optimum
θ0 = 1/2
On poursuit maintenant avec le paramétrage du second membre: le plan de contrainte (x2=0) est le
premier atteint dans le déplacement de la contrainte (x7=0) qui résulte de l'augmentation de
l'investissement maximum permis, c'est à dire de θ jusqu'à la valeur θ0 = 1/2.
Yves Correc 25/11/2007
6–32
Recherche Opérationnelle – Programmation linéaire : dualité
6bis
x1
x7
x6
b
θ
7bis
x2
x7
x6
b
θ
x4
1
0
0
2
0
x4
2
-1
1
2
-4
x8
0
1
0
5
4
x8
0
1
0
5
4
x3
3/2
3/2
-1/2
6
6
x3
3
0
1
6
0
x2
-1/2
-1/2
1/2
0
-2
x1
-2
1
-1
0
4
C
-1
-2
-4
-36
-8
C
-2
-1
-5
-36
-4
←
←
θ1 = 1/2
La nouvelle contrainte atteinte lors de l'augmentation de θ est le plan (x4=0), pour θ = θ0 + θ1 = 1.
8bis
x2
x7
x6
b
θ
9bis
x2
x4
x6
b
θ
x4
2
-1
1
0
-4
x7
-2
-1
-1
0
4
x8
0
1
0
7
4
x8
2
1
1
7
0
x3
3
0
1
6
0
x3
3
0
1
6
0
x1
-2
1
-1
2
4
x1
0
1
0
2
0
C
-2
-1
-5
-38
-4
C
-4
-1
-6
-38
0
←
Nouvel optimum pour θ = 1
Le nouvel optimum (Z ne dépend plus θ) est obtenu pour x1 = 2, x2 = 0, x3 = 6, x4 = 0 (max 2 atteint
pour l' immobilier), x6 = 0 (règle du tiers), x7 = 0 (investissement max), x8 = 7 (en plus de 1), et donne
un rapport de 380000 écus.
La contrainte sur l'investissement maximum est poussée à sa borne supérieure de 8 millions d'écus
(θ=1), tandis que le domaine admissible s'est géométriquement déformé deux fois (passage aux
valeurs 1/2 puis 1 de θ).
Les figures correspondant à ces calculs sont données ci-après:
(1) Polyèdre du problème originel
(2) Polyèdre du problème modifié (contrainte x5 relaxée)
(3) Polyèdre associé à la valeur θ = 1/2 (θ0)
(4) Polyèdre associé à la valeur θ = 1 (θ1)
Yves Correc 25/11/2007
6–33
x3
Recherche Opérationnelle – Programmation linéaire : dualité
x5
5-6
x8
1
2
x1
3
x4
x6
4
x7
x2
Figure 1: Problème d'investissement originel (investissement max 4 M écus)
Yves Correc 25/11/2007
6–34
x3
Recherche Opérationnelle – Programmation linéaire : dualité
x7
5bis
x8
x1
x4
4bis
x6
x2
Figure 2: Problème d'investissement modifié (contrainte x5 relaxée)
Yves Correc 25/11/2007
6–35
x3
Recherche Opérationnelle – Programmation linéaire : dualité
6-7bis
x7
5bis
x8
x1
x4
4bis
x6
x2
Figure 3: Problème paramétré pour θ = 1/2 (θ0, investissement max 6 M écus)
Yves Correc 25/11/2007
6–36
x3
Recherche Opérationnelle – Programmation linéaire : dualité
8-9bis
6-7bis
x7
5bis
x8
x1
x4
4bis
x6
x2
Figure 4: Problème paramétré pour θ = 1
Yves Correc 25/11/2007
(θ1, investissement max 8 M écus)
6–37
Recherche Opérationnelle – Programmation linéaire : dualité
6.6.3. Exercice raffinerie
Exercice
Une raffinerie peut traiter deux types de pétrole brut. Par distillation fractionnée, ces bruts
donnent des hydrocarbures variés, qui subissent ensuite des traitements complémentaires (épuration,
désulfurisation, cracking, reforming analytique) pour devenir des "bases" qui convenablement
mélangées permettent d'obtenir les produits commerciaux désirés. Ceux-ci sont pour la raffinerie
considérée au nombre de trois: essence, gasoil, fuel.
Pour une tonne de chaque brut, on extrait les quantités suivantes de ces trois produits (les
déchets étant négligeables):
Produits:
Brut N°1
(Moyen-Orient)
Brut N°2
(Afrique)
Essence
0,5 tonne
0,5 tonne
Gasoil
Fuel
0,2 tonne
0,3 tonne
0,3 tonne
0,2 tonne
La production étant limitée (par la capacité de certaines unités de traitement, par les
possibilités de vente, et par les stockages disponibles), la raffinerie peut produire au maximum 6500
tonnes d'essence, 3000 tonnes de gasoil, et 3600 tonnes de fuel par jour.
Le bénéfice réalisé est de 8 unités monétaires par tonne de brut N°1 traitée, et de 10 unités
monétaires par tonne de brut N°2 traitée. Le problème est de savoir combien on doit traiter de ces
deux bruts par jour pour maximiser le bénéfice.
(1)
Formuler le problème en termes de programmation linéaire.
NB. On pourrait multiplier les contraintes par des entiers convenables pour rendre entiers les
coefficients initiaux du programme linéaire. On ne le fera pas, pour ne pas se priver
d'indications utiles dans la suite de l'énoncé.
(2)
Le résoudre par la méthode du simplexe (tableaux réduits de Tucker).
(3)
A la suite d'aléas conjoncturels, le profit c1 réalisé sur 1 tonne de brut n°1 peut varier de plus
ou moins 15% autour de 8 unités monétaires. Etudier l'impact de cette variation sur la solution
optimale.
Solution
Appelons x1 et x2 respectivement le nombre de tonnes de brut n°1 et n°2 traités.
La fonction économique à maximiser est le bénéfice, qui s'écrit
8 x1 + 10 x2
Les contraintes de production portant sur les produits dérivés s'écrivent (en tonnes):
Pour l'essence
0,5 x1 + 0,5 x2 ≤ 6500
Pour le gasoil
0,2 x1 + 0,3 x2 ≤ 3000
Pour le fuel
0,3 x1 + 0,2 x2 ≤ 3600
Avec bien sûr
x1, x2 ≥ 0
Ce problème se résout simplement en trois tableaux de Tucker, auxquels on aura pris la précaution
d'ajouter une ligne supplémentaire λ sous la ligne c, pour se préparer à répondre à la troisième
question qui porte sur le paramétrage de la fonction économique.
Le profit c1 réalisé sur 1 tonne de brut n°1 peut varier de plus ou moins 15% autour de 8 unités
monétaires, ce qui veut dire que c1 a pour expression: 8 ± (0,15 * 8 * λ) avec 0 ≤ λ ≤ 1
ou plus simplement pour les calculs qui vont suivre:
8 + 1,2 λ avec -1 ≤ λ ≤ 1
tandis que c2 reste égal à 10, ce qui nous donne la dernière ligne λ mentionnée plus haut.
Yves Correc 25/11/2007
6–38
Recherche Opérationnelle – Programmation linéaire : dualité
Les tableaux successifs sont donc:
x1
x2
b
x1
x4
b
x3
1/2
1/2
6500
x3
1/6
-5/3
1500
x4
2/10
3/10
3000
x2
2/3
10/3
10000
x5
3/10
2/10
3600
x5
1/6
-2/3
1600
c
8
10
0
c
4/3
-100/3
-100000
λ
6/5
0
0
λ
6/5
0
0
↑
↑
x3
x4
b
x1
6
-10
9000
x2
-4
10
4000
x5
-1
1
100
c
-8
-20
-112000
λ
-36/5
12
-10800
OPTIMUM
La solution optimale cherchée consiste donc à traiter 9000 tonnes de brut n°1 et 4000 tonnes de brut
n°2, pour un bénéfice de 112000 unités monétaires. La production résultante est de 6500 tonnes
d'essence et 3000 tonnes de gasoil (contraintes saturées), et 3500 tonnes de fuel (capacité résiduelle
100 tonnes).
A l'optimum, le problème s'écrit:
Max z – 112000 – 10800 λ = ( - 8 – 7,2 λ ) x3 + ( -20 + 12 λ ) x4
Que va-t-il se passer si λ varie entre –1 et +1 ? On peut vérifier simplement que la solution trouvée
reste optimale quand λ varie en étudiant le signe des coefficients de la fonction économique:
Le coefficient de x3 reste négatif si λ > -10/9, et celui de x4 si λ < 5/3, ce qui reste toujours vrai dans
l'intervalle [-1,+1]. Par conséquent la solution optimale trouvée le reste dans l'intervalle de variation de
λ, les valeurs correspondantes de x1 et x2 restant inchangées. Par contre le bénéfice variera entre
112000 – 10800 et 112000 + 10800.
On peut aussi appliquer brutalement la méthode de paramétrage de la fonction économique à partir
de la solution optimale obtenue, et observer que l'on ne peut trouver de pivot dans la ligne λ réalisant
le minimum du rapport cherché entre –1 et +1 (car c'est ici l'intervalle de variation de λ).
Yves Correc 25/11/2007
6–39