Vous êtes sur la page 1sur 45

Chapitre 3

Dualité en programmation linéaire


Dualité en programmation linéaire

Illustration de la notion

La dualité associe à tout problème linéaire un autre problème linéaire qui


est appelé problème dual du problème initial ; par opposition le problème
initial est appelé problème primal.
La notion de dualité en P.L. est très intéressante puisqu’elle permet de
montrer qu’un problème d’allocation optimale des ressources rares est
aussi un problème de tarification optimale de ces ressources.

les propriétés liant le programme primal et son dual permettront de


résoudre des problèmes de minimisation en termes de maximisation, ce
qui est souvent plus facile, et de développer de nouveaux algorithmes qui
se révéleront plus performants dans un grand nombre de situations.
Dualité en programmation linéaire

Illustration de la notion

L’entreprise Remox fabrique quatre produits. La fabrication de chaque produit


nécessite une certaine quantité de ressources. Les ressources consommées et leurs
quantités disponibles en stocks ainsi que les bénéfices des produits sont récapitulés
dans le tableau suivant :

l’entreprise souhaite établir un plan de production de façon à maximiser le bénéfice.


Dualité en programmation linéaire

Illustration de la notion

Le modèle de l’entreprise Remox que nous dénoterons (P) :

Max z = 7x1 + 9x2 + 18x3 + 17x4


2x1 + 4x2 + 5x3 + 7x4 ≤ 42
x1 + x2 + 2x3 + 2x4 ≤ 17
x1 + 2x2 + 3x3 + 3x4 ≤ 24
x1 , x2 , x3 , x4 > 0
Dualité en programmation linéaire

Une entreprise concurrente à Remox se propose d’acheter son stock.


Soit u1, u2 et u3 les prix respectifs d’une unité de la ressource A, de B et
de C. Quels prix minimaux u1, u2 et u3 doit elle offrir à Remox tout en
restant compétitif en ce qui concerne le marché précédent ?
Le problème revient à rendre minimum le coût recherché par l’entreprise
concurrente:
Min w = 42u1 + 17u2 + 24u3
Compte tenu des contraintes suivantes :
2 u1 + 1 u2 + 1 u3 ≥ 7 (Produit 1)
4 u1 + 1 u2 + 2 u3 ≥ 9 (Produit 2)
5 u1 + 2 u2 + 3 u3 ≥ 18 (Produit 3)
7 u1 + 1 u2 + 3 u3 ≥ 17 (Produit 4)
Et il est raisonnable de penser que
u1, u2, u3 ≥ 0
Dualité en programmation linéaire

Les problèmes (P) et (D) utilisent en fait exactement les mêmes données
numériques. On peut les lire directement à partir du tableau ci-dessous ; (P)
correspond à une lecture ligne par ligne, (D) à une lecture colonne par
colonne.
Dualité en programmation linéaire

Finalement, pour déterminer les prix unitaires minimaux qu’elle proposera


à Remox, l’entreprise concurrente devrait résoudre le programme linéaire
suivant :

(D) Min w = 42u1 + 17u2 + 24u3


2u1 + u2 + u3 ≥ 7
4u1 + u2 + 2u3 ≥ 9
5u1 + 2u2 + 3u3 ≥ 18
7u1 + 2u2 + 3u3 ≥ 17
u1 , u2 , u3 ≥ 0
Dualité en programmation linéaire

Un pharmacien doit préparer une poudre vitaminée contenant au moins 25


mg de vitamine A, 60 mg de vitamine B et 15 mg de vitamine C. Il
s’approvisionne auprès un laboratoire qui vend deux types de poudre
vitaminée en sachet :
— une poudre X de 20 mg de A, 30 mg de B et 5 mg de C, au prix de 60 dh ;
— une poudre Y de 5 mg de A, 20 mg de B et 10 mg de C, au prix de 90 dh ;

Combien doit-il se procurer de poudre X et de poudre Y pour assurer, au


coût minimum, son nouveau poudre ?
Dualité en programmation linéaire

Le problème du pharmacien se formule (P):

Min z = 60x1 + 90x2


20x1 + 5x2 ≥ 25
30x1 + 20x2 ≥ 60
5x1 + 10x2 ≥ 15
x1 , x2 ≥ 0

où x1 et x2 les nombres de poudres de types X et Y qu’il doit mélanger.


Le laboratoire décide de vendre séparément les vitamines A, B et C en
sachet de 25, 60 et 15 unités. Combien doit-il vendre l’unité de chaque
vitamine pour être compétitif avec le pharmacien ?
Dualité en programmation linéaire
Soient u1, u2 et u3 les prix unitaires respectifs de A, B et C.
Le labo cherche donc à maximiser son chiffre d’affaire :
w = 25u1 + 60u2 + 15u3
Le labo doit fixer les prix offerts pour les vitas de façon à ce que :
20u1 + 30u2 + 5u3 ≤ 60
5u1 + 20u2 + 10u3 ≤ 90
Et il est raisonnable de penser que : u1, u2, u3 ≥ 0.

Finalement, pour déterminer les prix unitaires maximaux qu’il ne


doit pas dépasser pour rester compétitif, le labo devrait résoudre
le programme linéaire suivant (D):
Max w = 20u1 + 60u2 + 15u3
20u1 + 30u2 + 5u3 ≤ 60
5u1 + 20u2 + 10u3 ≤ 90
u1 , u2 , u3 > 0
Dualité en programmation linéaire
Illustration de la notion
• Considérons une entreprise • Problème de l’entreprise:
produisant r produits finis: déterminer le niveau d’utilisation de
fk = demande du produit k =1, 2, …, r chaque procédé de production pour
utilisant s matières premières: satisfaire les demandes en produits
hl = disponibilité de la matière l = 1, 2, …, s sans excéder les disponibilités des
matières premières tout en minimisant
le coût total de production.
• L’entreprise dispose de n procédés de
production (activités): • Modèle
xj = niveau d’utilisation du procédé n
min z =  c j x j
j = 1, 2, …, n j =1
cj = coût unitaire d’utilisation du procédé n
j = 1, 2, …, n Sujet à  ekj x j  f k k = 1,2,..., r (demandes)
Le procédé j j =1

produit ekj unités de produit k =1, 2, …, r n

utilise glj unités de matière l = 1, 2, …, s j=1 glj x j  hl l = 1,2,..., s (disponibilités)


pour chaque unité de son utilisation.
xj  0 j = 1,2,..., n
Dualité en programmation linéaire
Illustration de la notion

• Un entrepreneur propose à l’entreprise d’acheter les quantités de ses


matières premières et de lui vendre les quantités de produits pour satisfaire
les demandes.
• Il doit énoncer (déterminer) des prix unitaires
vk pour les produits k = 1, 2, … , r
wl pour les matières l = 1, 2, …, s.
n
min z = c
j =1
jxj

n
Sujet à 
j =1
e kj x j  f k k = 1,2,..., r (demandes)
vk

g
j =1
lj x j  hl l = 1,2,..., s (disponibilités)
wl

xj 0 j = 1,2,..., n
Dualité en programmation linéaire
Illustration de la notion
n

• L’entrepreneur doit
min z = c
j =1
jxj

déterminer des prix qui n


soient intéressants pour
l’entreprise.
Sujet à e
j =1
kj x j fk k = 1,2,..., r (demandes) vk

g
j =1
lj x j  hl l = 1,2,..., s (disponibilités) wl

xj 0 j = 1,2,..., n
Dualité en programmation linéaire
Illustration de la notion
• Problème de l’entreprise: multiplions les contraintes de disponibilités
par -1
n n
min z =  c j x j min z =  c j x j
j =1 j =1
n n
Sujet à e kj x j  fk k = 1,2,..., r (demandes) Sujet à e j =1
kj x j  fk k = 1,2,..., r (demandes)
j =1
n
−  glj x j  −hl
n
−1 g x
j =1
lj j  hl l = 1,2,..., s (disponibilités)
j =1
l = 1,2,..., s (disponibilités)

xj  0 j = 1,2,..., n xj  0 j = 1,2,..., n
Dualité en programmation linéaire
Illustration de la notion
r s

e
k =1
v −  glj wl
kj k
l =1
≤ cj

• Le problème de l’entrepreneur est de maximiser son


profit en s’assurant que ses prix restent intéressants pour
l’entreprise
r s
max p = f
k =1
k vk − h w
l =1
l l

r s
Sujet à e
k =1
kj v k − g
l =1
lj wl cj j = 1,2,..., n

vk  0 k = 1,2,..., r
wl  0 l = 1,2,..., s
Dualité en programmation linéaire
n Primal
min z = c x
j =1
j j min z = c T x
Sujet à
 
n
 E  f
Sujet à 
j =1
e kj x j  f k k = 1,2,..., r (demandes)  −G  x 
 −h   w
x0
n min c T x
− g lj x j  −hl l = 1,2,..., s (disponibilités) Sujet à Ax  b
j =1 x0
xj 0 j = 1,2,..., n
Dual v 
max p =  f T − h T   
r s  w
max p = f k vk − h w l l Sujet à
 E T − G T  v   c
k =1 l =1
r s    w
Sujet à e
k =1
kj v k − g
l =1
lj wl cj j = 1,2,..., n v, w  0 max bT y
Sujet à AT y  c
vk  0 k = 1,2,..., r
y0
wl  0 l = 1,2,..., s
Dualité en programmation linéaire
Problème primal et problème dual
Problème de programmation linéaire avec inégalités
Problème primal Problème dual

min c T x max bT y
Sujet à Ax  b y Sujet à AT y  c x
x0 y0

Problème de programmation linéaire sous forme standard


Problème primal Problème dual

min c T x max bT y
Sujet à Ax = b y Sujet à AT y  c x
x0
Dualité en programmation linéaire

Le tableau suivant donne un ensemble de règles formelles permettant


de passer d’un problème de P.L. général à sa forme duale.
Exemple 1

Passage d’un problème de max vers un problème de min

max z = 3x1 + x2 − 2 x3 min  = 10 y1 + 7 y2 + 8 y3


1x1 + 2 x2  10 1 y1 + 3 y2 + 1y3 = 3
3 x1 − x2 + x3 = 7 2 y1 − y2 + 0 y3  1
1x1 + 3 x3  8 0 y1 + y2 + 3 y3  −2
x2  0; x3  0 y1  0; y2 ; y3  0

Pour remplir le type de la contrainte il faut Inverser uniquement les operateurs (=


ou/et ) des contraintes de non-négativité

Pour remplir contraintes de non-négativité il faut Inverser tous les operateurs des
contraintes
Exemple 1

Passage d’un problème de min vers un problème de max

min z = 1x1 + 3 x2 − 2 x3 max  = 12 y1 + 8 y2 − 10 y3


1x1 + 2 x2  12 1 y1 + 2 y2 + 2 y3 = 1
2 x1 − 3 x2 + x3 = 8 2 y1 − 3 y2 + 0 y3  3
2 x1 + 2 x3  −10 0 y1 + y2 + 2 y3  −2
x2  0; x3  0 y1  0; y2 ; y3  0
Pour remplir le type de la contrainte il faut Inverser tous les operateurs des
contraintes de non-négativité

Pour remplir contraintes de non-négativité il faut Inverser uniquement les


operateurs (= ou/et ) des contraintes
Construction du dual
min cx max yb
 
(P)  Ax  b (D ) s.c.  yA  c
  x  0
s.c.   y  0
 

 20 5   25 
x     
c = (6 9) x =  1  A =  30 20  y = (yA yB yC ) b =  60 
 x2   5 10   15 
   

min 6 x1 + 9 x2
max 25 y A + 60 y B + 15 y C
 20 x1 + 5 x2  25
 30 x  20 y A + 30 y B + 5 yC 6
 + 20 x2  60 
s.c.  1
s.c.  5 y A + 20 y B + 10 y C 9
 5 x1 + 10 x2  15 y  0 y  0
 A yC  0
 x1  0 x2  0 B

308
Algorithme dual du simplexe

• L’algorithme dual du simplexe est une méthode itérative pour résoudre un


problème de programmation linéaire sous sa forme standard

min z = c1 x1 + c2 x2 + cn xn
Sujet à
a11 x1 + a12 x2 + ... + a1n xn = b1
a21 x1 + a22 x2 + ... + a2 n xn = b2
. . . .
. . . .
am1 x1 + am 2 x2 + ... + amn xn = bm
xj  0 j = 1, 2,..., n
Algorithme dual du simplexe

• À chaque itération nous avons une solution de base du problème qui n’est
pas réalisable, sauf à la dernière itération de l’algorithme, et pour laquelle les
coûts relatifs de toutes les variables sont non négatifs.
• Par exemple, considérons le problème
min z = 3 / 2u + 1/ 2h − 27
Sujet à x + 1/ 4u − 1/ 4h = −6 / 4
− 1/ 4u + p − 3 / 4h = 15 / 2
y − 1/12u + 5 /12h = 13 / 2
x, y , u , p , h  0
Algorithme dual du simplexe

Analysons une itération typique de l’algorithme où le tableau du simplexe


associé à la solution de base actuelle est le suivant:
Algorithme dual du simplexe: Critère de sortie

Si b i  0 i = 1,2,..., m, alors la solution est réalisable


et optimale. L' algorithme se termine.
Algorithme dual du simplexe: Critère de sortie

Si non
 
Soit b r = min bi  0 . Si a rj  0 j = 1, 2,..., n, alors
1i  m
le problème n'est pas réalisable. En effet puisque
n
 a rj x j  0 et br  0
j =1
n
il est impossible que  a rj x j = b r .
j =1
Algorithme dual du simplexe: Critère de sortie

1i  m
 
Sinon soit b r = min b i  0. x jr est la variable de sortie.
Le pivot se fera dans la ligne r du tableau.
Algorithme dual du simplexe: Critère d’entrée

a rs  0

l′indice 𝑠 de la variable d′entrée est tel que


𝑐𝑠ҧ 𝑐𝑗ҧ 𝑐𝑠ҧ 𝑐𝑗ҧ
= max : 𝑎ത𝑟𝑗 < 0               ou             = min : 𝑎ത < 0
𝑎ത𝑟𝑠 1≤𝑗≤𝑛 𝑎ത𝑟𝑗 −𝑎ത𝑟𝑠 1≤𝑗≤𝑛 −𝑎ത𝑟𝑗 𝑟𝑗
Critère d’entrée

ar1 ar 2 1 arn br
0 1 0 0
ars ars ars ars ars


Si arj  0 pour tout j alors x : Ax = b, x  0
est vide et l’algorithme se termine

a rs  0
Pivot

• Pour retrouver le tableau du simplexe associé à la nouvelle


base où la variable d’entrée xs remplace la variable de sortie
xr il suffit de faire un pivot sur l’élément a rs  0 .
Solution de base non réalisable Solution de base optimale
x y u p h −z
x 1 3 0 0 1 0 18 x y u p h −z
1 1
p 0 −3 0 1 −2 0 − 12 x 1 0 0 − 0 3
4 4
u 0 − 12 1 0 −5 0 − 60 1 3
p 0 0 − 1 − 0 3
−z 0 18 0 0 8 1 114 4 4
1 5
y 0 1 − 0 0 3
12 12
3 1
u est la variable de sortie −z 0 0 0 1 54
2 2

critère de sélection de la variable d'entrée


max 18  −12 −5
,8 
= max -1.5,-1.6
et y est la variable d'entrée
Énoncé de l’algorithme dual du simplexe

319
320
Exemple 1:

Utiliser l’algorithme dual du simplexe pour résoudre le problème suivant :

min z = 4 x1 + x2 + x3
S .C.
− x1 − x2  −8
− 8 x1 + x2 + 9 x3  −1
x1 , x2 , x3  0
Exemple 1:

min z = 4 x1 + x2 + x3
S .C. − x1 − x2 + x4 = −8
− 8 x1 + x2 + 9 x3 + x5 = −1
x1 , x2 , x3 , x4 , x5  0

X4 est la variable sortante et x2 la variable entrante


Exemple 1:

X5 est la variable
sortante et x1 la
variable entrante

La solution
optimale est
x1=1 , x2=7 et
x3=0
La valeur
optimale z*=11
Exemple 2:

Résoudre avec les méthodes du simplexe le problème primal suivant :

Min z = 70 y1 + 90 y2 Min z = 70 y1 + 90 y2
S .C. y1 + 2 y2  30 S .C. y1 + 2 y2 − u1 = 30
y1 + y2  20 y1 + y2 − u2 = 20
y1 , y2  0 y1 , y2  0
Exemple 2:
Le problème dual :

Max f = 30 x1 + 20 x2 Max f = 30 x1 + 20 x2
S .C. x1 + x2  70 S .C. x1 + x2 + e1 = 70
2 x1 + x2  90 2 x1 + x2 + e2 = 90
x1 , x2 , e1 , e2  0
x1 , x2  0
Exemple 2:

x1 x2 e1 e2 b R
e1 1 1 1 0 70 70/1
e2 2 1 0 1 90 90/2
f 30 20 0 0 0

x1 x2 e1 e2 b R
e1 0 1/2 1 -1/2 25 50
x1 1 1/2 0 1/2 45 90
f 0 5 0 -15 -1350
Exemple 2:

x1 x2 e1 e2 b R
x2 0 1 2 -1 50
x1 1 0 -1 1 20
f 0 0 -10 -10 -1600

Primal Dual Z * = 1600


Variables d’activités Variables d’activités
Variables d’écarts Variables d’écarts

y1  e1 y1 = 10
x1 = 20;
y2  e2 y2 = 10
x2 = 50
u1  x1 u1 = 0 f * = 1600
e1 = e2 = 0
u2  x2 u2 = 0
Exemple 2:
x1 x2 e1 e2 b R
x2 0 1 2 -1 50
x1 1 0 -1 1 20
f 0 0 -10 -10 -1600

y1  e1 y1 = 10
y2  e2 y2 = 10
Z * = 1600
u1  x1 u1 = 0
u2  x2 u2 = 0
Ou :
x1 = 20; x2 = 50
f * = 1600
e1 = e2 = 0
Exemple 3:

Résoudre avec les méthodes du simplexe le problème primal suivant :


Min z = 2 y1 + 5 y2 + 3 y3
S .C. y1  10, y2  15
y1 + 2 y2 + y3  60
2 y1 + y2 + 2 y3  95
y3 , y4  0

1 0 0
  1 0 1 2
0 1 0  
A=  AT =  0 1 2 1 
1 2 1 0 0 1 2
   
2 1 2
Exemple 3:

le problème dual : Max f = 10 x1 + 15 x2 + 60 x3 + 95 x4


S .C. x1 + x3 + 2 x4  2
x2 + 2 x3 + x4  5
x3 + 2 x4  3
x1 , x2 , x3 , x4  0
le problème dual standard :

Max f = 10 x1 + 15 x2 + 60 x3 + 95 x4
S .C. x1 + x2 + 2 x4 + e1 = 2
x2 + 2 x3 + x4 + e2 = 5
x3 + 2 x4 + e3 = 3
x1 , x2 , x3 , x4 , e1 , e2 , e3  0
Exemple 3:

x1 x2 x3 x4 e1 e2 e3 b R
e1 1 0 1 2 1 0 0 2 1
e2 0 1 2 1 0 1 0 5 5
e3 0 0 1 2 0 0 1 3 3/2
f 10 15 60 95 0 0 0 0

x1 x2 x3 x4 e1 e2 e3 b R
x4 1/2 0 1/2 1 1/2 0 0 1 --
e2 -1/2 1 3/2 0 -1/2 1 0 4 4
e3 -1 0 0 0 -1 0 1 1 --
f -75/2 15 25/2 0 -95/2 0 0 -95
Exemple 3:

x1 x2 x3 x4 e1 e2 e3 b R
x4 1/2 0 1/2 1 1/2 0 0 1
x2 -1/2 1 3/2 0 -1/2 1 0 4
e3 -1 0 0 0 -1 0 1 1
f -30 0 -10 0 -40 -15 0 -155

y1 = 40 𝑢1 = 30
𝑢2 = 0
y2 = 15 z* = 155 𝑢3 = 10
y3 = 0 𝑢4 = 0
Ou :
x1 = 0, x2 = 4, x3 = 0, x4 = 1
f * = 155
e1 = 0, e2 = 0, e3 = 1

Vous aimerez peut-être aussi