Algorithmique avancée TD Programmation Dynamique

of 16 /16
1 Algorithmique avancée TD Programmation Dynamique Laurent Lemarchand Laurent Lemarchand Lab-STICC/UBO Lab-STICC/UBO [email protected] [email protected]

Embed Size (px)

Transcript of Algorithmique avancée TD Programmation Dynamique

Page 1: Algorithmique avancée TD Programmation Dynamique

1

Algorithmique avancéeTD Programmation Dynamique

Laurent LemarchandLaurent LemarchandLab-STICC/UBOLab-STICC/UBO

[email protected]@univ-brest.fr

Page 2: Algorithmique avancée TD Programmation Dynamique

2

TD programmation dynamique gestion de stock

Achat et vente de jetskis – stock maximum de 5 jetskis

Achats du magasin en début de période Ventes uniquement des unités en stock en début de mois Stock nul au départ et en fin de saison (pas d'entrepot en nov-déc)

Combien acheter de jetskis au début de chaque période ?

mois mars-avril

mai-juin

juillet-aout

sept-oct

nov-déc

ventes 2 3 4 3 2

Prix HT 1.3k€ 1.5k€ 2.0k€ 1.1k€ 1.2k€

Page 3: Algorithmique avancée TD Programmation Dynamique

3

TD programmation dynamique gestion de stock

Achat et vente de jetskis – stock maximum de 5 jetskis

Achats du magasin en début de période Ventes uniquement des unités en stock en début de mois Stock nul au départ et en fin de saison (pas d'entrepot en jan-fév)

Combien acheter de jetskis au début de chaque période ? Variables xi : achats de la période i

→ variables de décision Variables ai : quantité en stock à la fin de la période i

→ variables d'état du système

mois mars-avril

mai-juin

juillet-aout

sept-oct

nov-déc

ventes 2 3 4 3 2

Prix HT 1.3k€ 1.5k€ 2.0k€ 1.1k€ 1.2k€

Page 4: Algorithmique avancée TD Programmation Dynamique

4

TD programmation dynamique gestion de stock

Combien peut on acheter de jetskis au début de la première période ?(valeurs possibles de x1) – quel est le cout associé ?

Combien de jetskis en stock à la fin de la première période ? (valeurs possibles de a1) – quel est la relation avec d1 ?

Variables xi : achats de la période i → variables de décision

Variables ai : quantité en stock à la fin de la période i

→ variables d'état du système

mois mars-avril

mai-juin

juillet-aout

sept-oct

nov-déc

ventes 2 3 4 3 2

Prix HT 1.3k€ 1.5k€ 2.0k€ 1.1k€ 1.2k€

Page 5: Algorithmique avancée TD Programmation Dynamique

5

TD programmation dynamique gestion de stock

Généraliser pour chaque période

La relation entre xi et ai

La relation entre di et ai

La relation entre (xi, ai, di) et (xi+1, ai+1, di+1) Quelle est la fonction de cout du problème

→ donner le programme linéaire (IP) associé

Variables xi : achats de la période i → variables de décision

Variables ai : quantité en stock à la fin de la période i

→ variables d'état du système

Page 6: Algorithmique avancée TD Programmation Dynamique

6

TD programmation dynamique gestion de stock

Pour la résolution Comment est défini un état du système ? Comment est défini le cout d'un passage d'un état à un autre ? Construire le graphe d'état complet

Comment avoir le cout optimal pour un état donné ? Solution = cout optimal de l'état final Appliquer l'algorithme de Bellman pour l'obtenir

Page 7: Algorithmique avancée TD Programmation Dynamique

7

TD programmation dynamique gestion de stock

Sommets états (i, ai)

D(k, ak) = min{ak-1} { D(k-1, ak-1

) +pk(a

k – a

k-1 + d

k) }

0,0

1,3

1,2

1,1

1,0

2,0

2,1

2,2

3,1

3,0

4,0

4,1

4,2

5,0

65

52

39

26

30

150

45

301560

45

30

75 60

45

60

40

80

60

100

8033

44

55

44

33

22

0

12

24

Page 8: Algorithmique avancée TD Programmation Dynamique

8

TD programmation dynamique gestion de stock

Sommets états (i, ai)

D(k, ak) = min{ak-1} { D(k-1, ak-1

) +pk(a

k – a

k-1 + d

k) }

0,0

1,3

1,2

1,1

1,0

2,0

2,1

2,2

3,1

3,0

4,0

4,1

4,2

5,0

65

52

39

26

30

150

45

301560

45

30

75 60

45

60

40

80

60

100

8033

44

55

44

33

22

0

12

24

65

52

39

26

??

Page 9: Algorithmique avancée TD Programmation Dynamique

9

TD Branch and Bound sac à dos

Définition KP

données

variables

IP

Page 10: Algorithmique avancée TD Programmation Dynamique

10

TD Branch and Bound sac à dos

Relaxation C(KP) :

solution dans [0..1] (ℝ)

au lieu de {0,1} (ℕ)

z*(ℝ) z*(ℕ) car ℕ ℝ

→ meilleure borne supérieure que z*(ℝ)

→ résolution directe possible sans passer par la PL

Page 11: Algorithmique avancée TD Programmation Dynamique

11

TD Branch and Bound sac à dos

Résolution de C(KP)

tri des itemspar profit/kg

solutionoptimale

Page 12: Algorithmique avancée TD Programmation Dynamique

12

TD Branch and Bound sac à dos

Borne supérieure U

1

valeur de solutionoptimale pour C(KP)

borne supérieure pour KP

z*(KP) U1

Page 13: Algorithmique avancée TD Programmation Dynamique

13

TD Branch and Bound sac à dos

Pour un Branch & Bound sur KP

Borne sup U1

Règle de séparation et parcours de l'arbre de rechercheU

1=19

U1=16 U

1=14

U1=15 U

1=16

p1/w

1 p

2/w

2 ...

x1=0 x

1=1

*

*

*

x2=0 x

1=1

Page 14: Algorithmique avancée TD Programmation Dynamique

14

TD Branch and Bound sac à dos

Appliquer au problème suivant, avec n=8 et c=102:

Poids : 2 20 20 30 40 30 60 10

Profits : 15 100 90 60 40 15 10 1

Triés par profit unitaire décroissant : 7.5, 5, 4.5, 2, 1, 0.5, 0.17, 0.10

s = 5 U

1=295

s = 5 U

1=295

s = 6 U

1=282

x1=1 x

1=0

Page 15: Algorithmique avancée TD Programmation Dynamique

15

TD Branch and Bound sac à dos

s = 5 U

1=295

s = 5 U

1=295

s = 6 U

1=282

x1=1 x

1=0

s = 5 U

1=295

x2=1

s = 6 U

1=210

x2=0

s = 5 U

1=295

x3=1

s = 6 U

1=220

x3=0

s = 5 U

1=295

x3=1

s = 5 U

1=295

s = 6 U

1=255

s = 5 infeas

s = - U=U

1=280

x4=1 x

4=0

x5=1 x

5=0

(1 1 1 1 0 1)réalisable

Page 16: Algorithmique avancée TD Programmation Dynamique

16

TD Branch and Bound sac à dos

s = 5 U

1=295

x1=0

s = 5 U

1=282

s = 5 U

1=282

s = 6 U

1=196

x2=1 x

2=0

x3=1 x

3=0

s = 5 infeas

s = 5 U

1=282

s = 6 U

1=206

s = 5 U

1=282

x4=1

s = 6 U

1=241

x4=0

x5=1 x

5=0

s = 6 U

1=265.00

s = 5 U

1=295

s = 5 U

1=295

s = 6 U

1=255

s = 5 infeas

s = - U=U

1=280

x4=1 x

4=0

x5=1 x

5=0

x1=1