Vous êtes sur la page 1sur 32

Modèles discrets

2ème année
ROAD | DSE |DS

Wadie CHATT
INSEA | 2020-2021
Questions
Résolution Programme
Linéaire en Nombres
Entiers
Méthodes par
séparation et
évaluation
« Branch & Bound »
Méthodes
d’énumération
implicite
Méthodes d’énumération implicite
Présentation

Les méthodes d’énumération implicite sont utilisées pour la


résolution des programmes linéaires en 0-1 (Ex : problème de
Sac à dos)

Considérons le programme linéaire en 0-1

𝑐. 𝑥 = 𝑧 ( 𝑚𝑎𝑥) 𝑐. 𝑥 = 𝑧 ( 𝑚𝑖𝑛)
(𝑃01 ) 𝐴. 𝑥 ≤ 𝑏 ou (𝑃01 ) 𝐴. 𝑥 ≥ 𝑏
𝑥𝑗 ∈ 0,1 𝑥𝑗 ∈ 0,1
Méthodes d’énumération implicite
Hypothèses et notations

Hypothèse de départ

On suppose que tous les cj sont non positifs (ou non négatifs)
Cette hypothèse n’est pas restrictive :
'  1 x
En effet, si cj > 0 (ou <0), on pose x j j
In s’ensuit que : x j  { 0,1}  x j  { 0,1}
'

- La ième contrainte s’écrit :


ai1 x1  ...  aij x'j  aij 1 xij 1  ...  ain xn  (  ) bi  aij i = 1, ... , m
- La fonction objectif s’écrit :
c1 x1  ...  c j x'j  c j 1 x j 1  ...  cn xn  z(max ou min)  c j
Méthodes d’énumération implicite
Hypothèses et notations

Solution partielle et variables libres

La racine de l’arborescence est l’ensemble des solutions réalisables


𝑺 = 𝑿 = 𝒙𝟏 , 𝒙𝟐 , … 𝒙𝒏 𝑨. 𝒙 ≤ ≥ 𝒃 𝑒𝑡 𝒙𝒋 ∈ {𝟎, 𝟏} qui est évident fini
Soient 𝑱𝟎 𝑒𝑡𝑱𝟏 deux sous –ensembles disjoints de {1, 2, 3, …, n}
Soient 𝑱𝑳 = ({1, 2, 3, …, n} /( 𝑱𝟎 ∪ 𝑱𝟏 )
L’ensemble S (𝑱𝟎 , 𝑱𝟏 ) = {𝒙𝒋 ∈ 𝑺 |𝒙𝒋 =0 si j ∈ 𝑱𝟎 et 𝒙𝒋 =1 si j ∈ 𝑱𝟏 } est appelé Solution
partielle de P01

Les variables 𝒙𝒋 𝑝𝑜𝑢𝑟 j ∈ 𝑱𝑳 sont dites libres


Méthodes d’énumération implicite
Hypothèses et notations

Exemple

Soit S = {(x1 ,…, x5) / xj = 0 ou 1}

On pose J0 = {1} J1 = {2 , 4}

S(J0 , J1) = {(0 , 1 , x3 , 1 , x5) / (x3 , x5)  {0 , 1}}


= {(0,1,0,1,0) , (0,1,0,1,1) , (0,1,1,1,0) , (0,1,1,1,1)}

La solution partielle S(J0 , J1) possède donc deux variables libres :


x3 et x5
Méthodes d’énumération implicite
Description des opérations

Séparation

La séparation d’un sous ensemble S(J0 , J1) se S se fera en fixant une variable
libre Xr, soit à 0 soit à 1 (Xr n’est plus une variable libre alors)
S(J0 , J1) aura alors deux successeurs :

S ( 𝐽0 ∪ 𝑟 , 𝐽1 ) S ( 𝐽0 , 𝐽1 ∪ 𝑟 )
Méthodes d’énumération implicite
Description des opérations

Exemple 1

Soit S = {(x1 ,…, x5) / xj = 0 ou 1}

On pose J0 = {1} J1 = {2 , 4}
Méthodes d’énumération implicite
Description des opérations

Exemple 1 Soit S = {(x1 ,…, x5) / xj = 0 ou 1} On pose J0 = {1} J1 = {2 , 4}


Séparons S(J0 , J1) selon la variable x3 :
S(J0  {3}, J1) = {(0 , 1 , 0 , 1 , x5) / x5  {0 , 1}} S(J0 , J1  {3}) = {(0 , 1 , 1 , 1 , x5) / x5  {0 , 1}}
= {(0,1,0,1,0) , (0,1,0,1,1)} = {(0,1,1,1,0) , (0,1,1,1,1)}

S(J0 , J1)

x3 = 0 x3 = 1

S(J0  {3}, J1) S(J0 , J1  {3})


Méthodes d’énumération implicite
Description des opérations

Exemple 1 z
C J L .x J L  z(max ou min)   c j
jJ1
b
(P(J0 , J1)) A J L .x J L  () b   A j
jJ1

x j  0 , 1 j  J L
z
CJ L .x J L  z(max ou min)   c j
jJ1
b
(P(J0 , J1)) A J L .x J L  () b   A j
jJ1

x j  0 , 1 j  J L

Si JL =  , x est
- soit réalisable si b  0 et(on0)a S(J0 , J1) =x ;
On dispose alors d’une évaluation exacte de S(J0 , J1) : z  c.x   c j
jJ1
- soit non réalisable si b a au moins une composante négative (positive)

et on a S(J0 , J1) = 
Méthodes d’énumération implicite
Description des opérations

Exemple 2

Soit S = {(x1 ,…, x5) / xj = 0 ou 1}

On pose J0 = {1,3} J1 = {2 , 4, 5}

On a JL = 

x = (0 , 1 , 0 , 1 , 1) est réalisable et on a S(J0 , J1) = {(0, 1, 0, 1, 1}


Méthodes d’énumération implicite
Description des opérations

Exemple 3 -x1 - 4x2 - 8x3 - 4x4 - 5x5 = z(max) - 14

-x1 - x2 - x3 + x4 - x5  -1

x1 - 2x2 - 3x3 - 2x4 - 2x5  -5

-x1 - 3x2 - 2x3 - 3x4 + x5  -5

xj  {0 , 1} j = 1, … , 5

On pose J0 = {3,4} J1 = {2}


Méthodes d’énumération implicite
Description des opérations

Exemple 3 -x1 - 4x2 - 8x3 - 4x4 - 5x5 = z(max) - 14

-x1 - x2 - x3 + x4 - x5  -1

La seconde inéquation de P(J0 , J1) s’écrit alors : x1 - 2x2 - 3x3 - 2x4 - 2x5  -5
x1 - 2x5  -3
-x1 - 3x2 - 2x3 - 3x4 + x5  -5
Aucune affectation des variables x1 ou x5 à 0 xj  {0 , 1} j = 1, … , 5
ou 1 ne peut satisfaire cette inéquation
( b2 est toujours négative).
On pose J0 = {3,4} J1 = {2}
S(J0 , J1) est donc vide et éliminé.
Méthodes d’énumération implicite
Description des opérations

Cas particulier

Considérons le programme linéaire P (J0,J1) :

𝒋
Si une contrainte σ𝒋∈𝑱𝑳 𝑨𝒓 ≤ ≥ 𝒃𝒓 𝒆𝒔𝒕 𝒕𝒆𝒍𝒍𝒆 𝒒𝒖𝒆

σ𝒋∈𝑱𝑳 𝐦𝐢𝐧[𝟎, 𝑨𝒋𝒓 ] > 𝒃𝒓 (ou σ𝑗∈𝐽𝐿 max[0, 𝐴𝑟𝑗 ] < 𝑏𝑟 )

Alors S(J0 , J1) = 


Méthodes d’énumération implicite
Description des opérations

Comment tester ?

Comme 𝑐 ≤ 0 𝑜𝑢 𝑐 ≥ 0 , 𝑧 = σ𝑗∈𝑱𝟏 𝑐𝑗 est une évaluation de S(J0 , J1)

La solution 𝒙ഥ𝒋 = 𝟏 si et seulement si


𝑗 ∈ 𝐽1 donne à z la valeur 𝒛ത = σ𝒋∈𝑱𝟏 𝒄𝒋
ഥ ≥ 𝟎 (ou ≤ 0)
Et si 𝒃

Evaluation exacte
Méthodes d’énumération implicite
Description des opérations

Comment tester ?

On dispose ainsi de tests pour la stérilisation ou l’élimination des sous-


ensembles S(J0 , J1)

Soit basés sur le caractère binaire des variables


Soit basés sur une évaluation simplifiée (pas de résolution de programme linéaire)
Méthodes d’énumération implicite
Description des opérations

Codage des solutions partielles (sommets)

On associe à chaque sous-ensemble S(J0 , J1) (sommet), un code appelé


« Signature » h(J0 , J1) du sous ensemble considéré

h(J0 , J1) est constitué de la séquence des indices de ( 𝑱𝟎 ∪ 𝑱𝟏 ) , correspondant aux


variables non libres
Dans l’ordre où ces indices apparaissent, c-à-d dans l’ordre où les variables
sont fixées quand on parcourt l’arborescence depuis la racine jusqu’au
sommet correspondant à S(J0 , J1)
Les indices de J0 sont précédés du signe (-), les autres sont dans J1
Certains indices sont soulignés
Méthodes d’énumération implicite
Description des opérations

Exemple 4

Soit S = {(x1 ,…, x5) / xj = 0 ou 1} On pose J0 = {1} J1 = {2 , 4}

On suppose que la signature de S(J0 , J1) est (-1,2,4).


(-1 , 2 , 4)
La séparation effectuée selon la variable x3 :

x3 = 0 x3 = 1

(-1 , 2 , 4 , -3) (-1 , 2 , 4 , 3)


Méthodes d’énumération implicite
Description des opérations

Règles d’évolution de la signature

Ce sont les règles d’évolution de la signature qui permettent de décrire


implicitement l’arborescence de la décomposition de S
a. h(S) = h(, ) est la liste vide
b. Si on effectue une séparation sur S(J0 , J1), en fixant la variable xr à 1 (resp. à 0), la
nouvelle signature est obtenue à partir de l’ancienne en ajoutant en fin de la liste
h(J0 , J1) l’indice r (resp. l’indice (-r)) non souligné.
c. On adopte un mode de choix des Procédures par Séparation et Evaluation
Séquentielles (PSES)

Comment le traduire au niveau de la signature ?


Méthodes d’énumération implicite
Description des opérations

Règles d’évolution de la signature

Si S(J0 , J1) est stérilisé, on cherche le symbole r non souligné de rang maximum dans
la liste h(J0 , J1). La nouvelle signature à traiter est obtenue :
• en supprimant dans la liste tous les symboles de rang supérieur à celui de r
• en changeant le signe du symbole r
• et en soulignant le résultat obtenu
Cette règle permet de se placer en cas de stérilisation sur le sommet à traiter ; obtenu
par séparation, il n’est ajouté dans l’arborescence qu’au moment d’être traité.
Cette règle respecte le mode de choix du sommet pendant le plus à droite (ou le plus
à gauche) de l’arborescence de décomposition de l’ensemble S (avec ce mode de
choix, les symboles précédés du signe (-) sont toujours soulignés, les autres sont
toujours non soulignés
Méthodes d’énumération implicite
Description des opérations

Exemple 5

On suppose que la signature de S(J0 , J1) est S(J0 , J1) = (3,-4, 7, 1, -8, 5).

J0 = {4 , 8} J1 = {1 , 3 , 5 , 7}

Si on effectue une séparation sur l’indice 2 en fixant x2 à 1, la nouvelle


signature est : h(J0 , J1) = (3 , -4 , 7 , 1 , -8 , 5 , 2)

Si on a mis en évidence le fait que S(J0 , J1) est stérilisé, la nouvelle


signature est : h(J0 , J1) = (3 , -4 , 7 , -1)

J0 = {1 , 4} J1 = {3 , 7}
Méthodes d’énumération implicite
Description des opérations

Exemple 6 L’exploitation de l’arborescence suivante correspond à l’évolution ci-après :


0 0/ h =  J0 =  J1 = 
xr1 = 0 xr1 = 1
1/ h = (r1) J0 =  J1 = {r1}
6 1 2/ h = (r1 , r2) J0 =  J1 = {r1 , r2}
xr2 = 0 xr2 = 1 3/ h = (r1 , -r2) J0 = {r2} J1 = {r1}
3 2 4/ h = (r1 , -r2 , r3) J0 = {r2} J1 = {r1 , r3}
xr3 = 0 xr3= 1 5/ h = (r1 , -r2 , -r3) J0 = {r2 , r3} J1 = {r1}

5 4
6/ h = (-r1) J0 = {r1} J1 = 
Méthodes d’énumération implicite
Description des opérations

Choix de l’indice r

On pose
𝒋
𝑰 = 𝒊 𝒃𝒊 < 𝟎 (> 𝟎)} 𝑹 = 𝒋 𝑨𝒊 < 𝟎 (> 𝟎)} pour au moins un i ∈ 𝑰

Une des variables R, au moins, sera fixée à 1 dans toute solution réalisable de S(J0 , J1)
et on aimerait arriver le plus vite possible à une évaluation exacte. Une mesure de la
distance à une évaluation exacte est :

𝒅 = − ෍ 𝒃𝒊 (𝒅 = ෍ 𝒃𝒊 )
𝒊∈𝑰 𝒊∈𝑰
Pour le successeur 𝑺 𝑱𝟎 , 𝑱𝟏 ∪ 𝒓 𝑑𝑒 S(J0 , J1), de dévient :

𝒅 = − ෍ 𝐦𝐚𝐱[𝟎, −𝒃ഥ𝒊 + 𝑨𝒓𝒊 ] 𝒅 = ෍ 𝐦𝐚𝐱[𝟎, 𝒃ഥ𝒊 − 𝑨𝒓𝒊 ]


𝒊∈𝑰 𝒊∈𝑰
Méthodes d’énumération implicite
Description des opérations

Choix de l’indice r

On choisit ainsi r tel que :


𝒅𝒓 = 𝐦𝐢𝐧[ 𝒅𝒋 ]

Et si ce minimum est atteint pour plusieurs indices, on choisira celui pour lequel 𝒄𝒓
est maximum (minimum),  minimum de valeur absolue
Méthodes d’énumération implicite
Exemple 7

Soit à résoudre le programme linéaire en 0-1

max 𝑋1 + 4𝑋2 − 8𝑋3 + 4𝑋4 + 5𝑋5 = 𝑧


s.c
𝑋1 + 𝑋2 − 𝑋3 − 𝑋4 + 𝑋5 ≤ 1
Appliquer la méthode
(𝑃𝐸 ) -𝑋1 + 2𝑋2 − 3𝑋3 + 2𝑋4 + 2𝑋5 ≤ 0 d’énumération implicite (avec
chois du sommet pendant le
-𝑋1 + 3𝑋2 −2𝑋3 + 3𝑋4 + 𝑋5 ≤ 0
plus à droite)
𝑋1 , 𝑋2 ∈ 0,1 , 𝑗 = 1, … , 5
Méthodes d’énumération implicite
Exemple 7
-x1 - 8x3 - 4x4 - 5x5 = z(max) - 10

-x1 - x3 + x4 - x5  0 1 -1 1 I = {i / bi < 0} = {2 , 3}

x1 - 3x3 - 2x4 - 2x5  -3 0 -1 -1 d   b i = 5


iI
x1 - 2x3 - 3x4 + x5  -2 0 1 -3 R = {j / Ai< 0 pour au moins un i  I}
j

xj  {0 , 1} j = 1, 3, 4, 5 d3 = 0 d4 = 2 d5 = 4 = {3 , 4, 5}

Sur quel xr séparer ? Pour xr = 1 , la distance d devient :

 
n
d r   max 0 ,  b i  A ir
i 1

On choisit r tel que : d r  min d j


jR
  r=3
Méthodes d’énumération implicite
Exemple 7

-x1 - 4x2 - 8x3 - 4x4 - 5x5 = z(max) - 14

-x1 - x2 - x3 + x4 - x5  -1

x1 - 2x2 - 3x3 - 2x4 - 2x5  -5

-x1 - 3x2 - 2x3 - 3x4 + x5  -5

xj  {0 , 1} j = 1, … , 5
Méthodes d’énumération implicite
14 0

x2 = 0 x2 = 1

14 8 1 10

x3 = 0 x3 = 1 x3 = 0 x3 = 1

12 9 6 10 3 2 2*

x4 = 0 x4 = 1 x4 = 0 x4 = 1

11 10 2 7 4 6

x5 = 0 x5 = 1

6 5 1*

Vous aimerez peut-être aussi