6. Programmation dynamique Programmation dynamique Principe d

Transcription

6. Programmation dynamique Programmation dynamique Principe d
Programmation dynamique
IFT1575 Modèles de recherche opérationnelle (RO)
6. Programmation dynamique
Supposons un problème décomposé en étapes
Chaque étape possède un certain nombre d’états
correspondant aux conditions possibles au début
d’une étape
A chaque étape, on doit prendre une décision qui
associe à l’état courant l’état au début de la
prochaine étape
Dans le cas d’un problème d’optimisation, la
programmation dynamique identifie une politique
optimale : une décision optimale à chaque étape
pour chaque état possible
6. Programmation dynamique
Principe d’optimalité de Bellman
Programmation dynamique : notation
Étant donné un état courant, la politique optimale
pour les étapes à venir est indépendante des
décisions prises aux étapes précédentes
Lorsque ce principe est satisfait, on peut recourir à
l’approche suivante pour résoudre un problème ayant
N étapes :
Identifier une décision optimale pour la dernière étape (N)
Pour chaque étape n, de N-1 à 1 : Étant donné une politique
optimale pour l’étape n+1, identifier une politique optimale
pour l’étape n au moyen d’une relation de récurrence
Lorsque n = 1, on obtient une politique optimale pour
le problème
6. Programmation dynamique
2
3
N = nombre d’étapes
n = indice de l’étape courante
sn = état au début de l’étape n
xn = variable de décision associée à l’étape n
fn(sn,xn) = contribution des étapes n, n+1,…, N à la
valeur de l’objectif lorsqu’on se trouve à l’état sn au
début de l’étape n, que la décision est xn, et que des
décisions optimales sont prises par la suite
xn* = solution optimale à l’étape n
fn*(sn) = fn(sn,xn*) = min{fn(sn,xn)} ou max{fn(sn,xn)}
6. Programmation dynamique
4
1
Programmation dynamique : tableau
Exemple 1 : production-inventaire
A chaque itération de la méthode, on construira un
tableau représentant :
La liste des états possibles à l’étape n
Les valeurs possibles de la variable xn
La contribution à la valeur de l’objectif, fn(sn,xn)
La valeur optimale fn*(sn) et la solution optimale xn*
xn*
Production max,
temps régulier
Production max,
temps supp.
Coût unitaire,
temps régulier
1
2
2
300 $
xn=a
xn=b
xn=c
fn*(sn)
1
fn(1,a)
fn(1,b)
fn(1,c)
fn*(1)
2
3
2
500 $
2
fn(2,a)
fn(2,b)
fn(2,c)
fn*(2)
3
1
2
400 $
5
Exemple 1 (suite)
Semaine
sn
6. Programmation dynamique
Une compagnie doit fournir à son meilleur client trois
unités du produit P durant chacune des trois
prochaines semaines
Voici les coûts de production :
6
Exemple 1 (suite)
Le coût pour chaque unité produite en temps
supplémentaire est 100 $ de plus que le coût par
unité produite en temps régulier
Le coût unitaire d’inventaire est de 50 $ par semaine
Au début de la première semaine, il y a 2 unités du
produit dans l’inventaire
La compagnie ne veut plus rien avoir dans son
inventaire au bout des trois semaines
Combien doit-on produire d’unités à chaque semaine
afin de rencontrer la demande du client, tout en
minimisant les coûts?
6. Programmation dynamique
6. Programmation dynamique
7
Étape = semaine
N=3
n = 1, 2, 3
sn = état au début de la semaine n = unités de
produit dans l’inventaire
xn = nombre d’unités produites lors de la semaine n
sn+1 = sn + xn – 3 (puisqu’on doit livrer 3 unités au
client à chaque semaine)
s1 = 2 (puisqu’il y a 2 unités au début)
6. Programmation dynamique
8
2
Exemple 1 (suite)
Exemple 1 (suite)
cn = coût unitaire de production, semaine n
rn = production max en temps régulier, semaine n
mn = production max, semaine n
pn(sn,xn) = cnxn+100max(0,xn–rn)+50max(0,sn+xn-3)
fn(sn,xn) = pn(sn,xn) + fn+1*(sn+1)
fn*(sn) = min{pn(sn,xn)+fn+1*(sn+1) | 3-sn≤xn≤mn}
Si n = 3, on doit poser f4*(s4) = 0
De plus, s4 = 0 = s3 + x3 - 3 → x3 = 3 - s3
Calculons d’abord les valeurs f3*(s3) et x3*
6. Programmation dynamique
f3*(s3)
x3*
0
1400
1400
3
1
900
900
2
2
400
400
1
≥3
0
0
0
6. Programmation dynamique
10
Exemple 1 (suite)
Voyons maintenant comment on peut calculer les
valeurs f2*(s2) et x2*, lorsque s2 = 0
D’abord, il est clair qu’on doit avoir x2 ≥ 3 (car on
doit livrer au moins 3 unités du produit)
f2(0,3) = p2(0,3) + f3*(0) = 1500 + 1400 = 2900
f2(0,4) = p2(0,4) + f3*(1) = 2150 + 900 = 3050
f2(0,5) = p2(0,5) + f3*(2) = 2800 + 400 = 3200
f2*(0) = min{f2(0,3), f2(0,4), f2(0,5)} = f2(0,3)
D’où x2* = 3
De la même façon, on calcule pour s2 = 1,2,3
6. Programmation dynamique
f3(3- s3,s3)
9
Exemple 1 (suite)
s3
11
s2
x2=0
x2=1
x2=2
x2=3
x2=4
x2=5
f2*(s2)
x2*
0
-
-
-
2900
3050
3200
2900
3
1
-
-
2400
2450
2600
2850
2400
2
2
-
1900
1950
2000
2250
2900
1900
1
≥3
1400
1450
1500
1650
2300
2950
1400
0
6. Programmation dynamique
12
3
Exemple 1 (suite)
Exemple 1 (suite)
Pour la première étape (n = 1), on a s1 = 2 (il y a 2
unités au départ dans l’inventaire)
On doit donc avoir x1 ≥ 1
f1(2,1) = p1(2,1) + f2*(0) = 300 + 2900 = 3200
f1(2,2) = p1(2,2) + f2*(1) = 650 + 2400 = 3050
f1(2,3) = p1(2,3) + f2*(2) = 1100 + 1900 = 3000
f1(2,4) = p1(2,4) + f2*(3) = 1550 + 1400 = 2950
f1*(2) = f1(2,4) et x1* = 4
6. Programmation dynamique
Trois équipes de recherche travaillent sur un même
problème avec chacune une approche différente
La probabilité que l’équipe Ei échoue est :
P(E1) = 0,4; P(E2) = 0,6; P(E3) = 0,8
Ainsi, la probabilité que les trois équipes échouent
simultanément est : (0,4)(0,6)(0,8) = 0,192
On veut ajouter deux autres scientifiques afin de
minimiser la probabilité d’échec
A quelles équipes faut-il affecter ces deux
scientifiques afin de minimiser la probabilité d’échec?
6. Programmation dynamique
s1
x1=1
x1=2
x1=3
x1=4
f1*(s1)
x1*
2
3200
3050
3000
2950
2950
4
La politique optimale est donc :
x1* = 4 (d’où s2 = 3), x2* = 0 (d’où s3 = 0), x3* = 3
Le coût total est : f1*(2) = 2950 $
13
Exemple 2 : affectation de ressources
Sous forme de tableau, cela donne :
15
6. Programmation dynamique
14
Exemple 2 : données
Voici le tableau représentant les probabilités d’échec
pour chaque équipe en fonction du nombre de
scientifiques ajoutés
Scientifiques
ajoutés
E1
E2
E3
0
0,4
0,6
0,8
1
0,2
0,4
0,5
2
0,15
0,2
0,3
6. Programmation dynamique
16
4
Exemple 2 : modèle
Exemple 2 : résolution
Étape n = équipe En, n = 1,2,3 (N = 3)
État sn= nombre de scientifiques non encore affectés
Décision xn = nombre de scientifiques affectés à
l’équipe En
pn(xn) = probabilité d’échec de l’équipe En si on lui
affecte xn scientifiques
fn(sn,xn) = pn(xn).fn+1*(sn-xn) (f4*(0) = 1)
fn*(sn) = min{fn(sn,xn)|xn=0,1,…,sn}
Calculons d’abord f3*(s3) et x3*
On doit avoir s3 = x3 (on affecte tous les scientifiques
non encore affectés)
6. Programmation dynamique
f3*(s3)
x3*
0
0,8
0,8
0
1
0,5
0,5
1
2
0,3
0,3
2
6. Programmation dynamique
18
Exemple 2 : résolution (suite)
Voyons maintenant comment on peut calculer les
valeurs f2*(s2) et x2*, lorsque s2 = 1
Il est clair qu’on doit avoir x2 ≤ 1
f2(1,0) = p2(1,0).f3*(1) = 0,6.0,5 = 0,3
f2(1,1) = p2(1,1).f3*(0) = 0,4.0,8 = 0,32
f2*(1) = min{f2(1,0), f2(1,1)} = f2(1,0)
D’où x2* = 0
De la même façon, on calcule pour s2 = 0 et 2
6. Programmation dynamique
f3(s3,s3)
17
Exemple 2 : résolution (suite)
s3
19
s2
x2=0
x2=1
x2=2
f2*(s2)
x2*
0
0,48
-
-
0,48
0
1
0,3
0,32
-
0,3
0
2
0,18
0,2
0,16
0,16
2
6. Programmation dynamique
20
5
Exemple 2 : résolution (suite)
Exemple 2 : résolution (suite et fin)
Pour la dernière étape (n = 1), on a s1 = 2 (il y a 2
scientifiques à affecter)
f1(2,0) = p1(2,0).f2*(2) = 0,4.0,16 = 0,064
f1(2,1) = p1(2,1).f2*(1) = 0,2.0,3 = 0,06
f1(2,2) = p1(2,2).f2*(0) = 0,15.0,48 = 0,072
f1*(2) = f1(2,1) et x1* = 1
6. Programmation dynamique
21
Affectation de ressources
x1=0
x1=1
x1=2
f1*(s1)
x1*
0
0,064
0,06
0,072
0,06
1
La politique optimale est donc :
x1* = 1 (d’où s2 = 1), x2* = 0 (d’où s3 = 1), x3* = 1
La probabilité d’échec est : f1*(1) = 0,06
6. Programmation dynamique
22
Exemple 3 : problème Wyndor Glass
Programmation dynamique : souvent utilisée pour
résoudre des problèmes d’affectation de ressources
C’était le cas dans notre dernier exemple, où il y avait
une ressource à affecter (les scientifiques)
Que faire lorsqu’il y a plus d’une ressource?
Dans ce cas, chaque état est un vecteur dont chaque
coordonnée i représente la quantité de la ressource i
non encore affectée
Voyons un exemple bien connu d’affectation de
ressources multiples : le problème Wyndor Glass
6. Programmation dynamique
s1
23
Deux types de produits (produit 1, produit 2)
Trois usines (usine 1, usine 2, usine 3)
Ressource i : Capacité de production pour l’usine i
(h/par semaine)
Profit par lot (20 unités) de chaque produit
Chaque lot du produit 1 (2) est le résultat combiné
de la production aux usines 1 et 3 (2 et 3)
Déterminer le taux de production pour chaque
produit (nombre de lots/semaine) de façon à
maximiser le profit total
6. Programmation dynamique
24
6
Exemple 3 : données
Exemple 3 : modèle
Voici le tableau représentant les données du
problème
Produit 1 (tps de
production, h/lot)
Produit 2 (tps de
production, h/lot)
Capacité de
production (h)
Usine 1
1
0
4
Usine 2
0
2
12
Usine 3
3
2
18
Profit($)/lot
3000
5000
6. Programmation dynamique
25
Exemple 3 : résolution
6. Programmation dynamique
26
Exemple 3 : résolution (suite)
On cherche d’abord f2*(s2) et x2*
f2*(s2) = max{5x2|2x2≤12, 2x2≤18-3x1, x2≥0}
2x2≤12 et 2x2≤18-3x1 → x2 ≤ min{6,(18-3x1)/2}
f2*(s2) = max{5x2|0≤x2≤ min{6,(18-3x1)/2}}
x2* = min{6,(18-3x1)/2}
f2*(s2) = 5 min{6,(18-3x1)/2)|3x1≤18}
Calculons maintenant f1*(s1) et x1*
6. Programmation dynamique
Étape n = produit n, n = 1,2 (N = 2)
État sn= (R1,R2,R3)n, où Ri est la quantité de la
ressource i (temps de production à l’usine i) non
encore affectée
Décision xn = nombre de lots du produit n
fn(sn,xn) = cnxn + fn+1*(sn+1) (f3*(s3) = 0)
f2*(s2) = max{5x2|2x2≤12, 2x2≤18-3x1, x2≥0}
f1*(s1) = max{3x1+f2*(s2)|x1≤4,3x1≤18,x1≥0}
s1= (4,12,18), s2 = (4-x1,12,18-3x1)
27
f1*(s1) = max{3x1+f2*(s2)|x1≤4,3x1≤18,x1≥0}
x1≤4 → 3x1 ≤18
f1*(s1) = max{3x1+5 min{6,(18-3x1)/2)|0≤x1≤4}
min{6,(18-3x1)/2)} = 6,
si 0≤x1≤2
= (18-3x1)/2, si 2≤x1≤4
f1*(s1) = max{f1(s1,x1)|0≤x1≤4}
f1(s1,x1) = 3x1 + 30,
si 0≤x1≤2
= 45 – (9/2)x1, si 2≤x1≤4
Le maximum est atteint en x1* = 2 et f1*(s1) = 36
6. Programmation dynamique
28
7
Exemple 3 : résolution (suite et fin)
Cas probabiliste
x2* = min{6,(18-3x1)/2} et x1* = 2 → x2* = 6
La politique optimale est donc :
x1* = 2, x2* = 6 de valeur f1*(s1) = 36
En utilisant la même approche, on peut résoudre par
la programmation dynamique des modèles où :
L’objectif ou les contraintes sont non linéaires
Certaines variables sont entières
Dans la programmation dynamique probabiliste, la
décision optimale à l’étape n dépend de la loi de
probabilité de l’état à l’étape n+1
Ainsi, on passera de l’étape n à l’étape n+1, se
retrouvant ainsi dans l’état i, avec une probabilité pi
Étant donné S états à l’étape n+1, on aura pi ≥ 0 et
S
∑ p =1
i
i =1
6. Programmation dynamique
29
Exemple 4 : jeu de hasard
6. Programmation dynamique
30
Exemple 4 : modèle
Le jeu consiste à miser un nombre quelconque de
jetons
Si on gagne, on gagne le nombre de jetons misés
Si on perd, on perd le nombre de jetons misés
Un statisticien croit pouvoir gagner chaque jeu avec
une probabilité égale à 2/3
Ses collègues parient avec lui qu’en misant au départ
3 jetons, il aura moins de 5 jetons après 3 parties
Combien de jetons miser à chacune des 3 parties?
6. Programmation dynamique
La relation de récurrence dépend de cette loi de
probabilité et de l’objectif à optimiser
31
Étape n = partie n, n = 1,2,3 (N = 3)
État sn = nombre de jetons au début de la partie n
Décision xn = nombre de jetons à parier à la partie n
On veut maximiser la probabilité d’avoir au moins 5
jetons après 3 parties
fn(sn,xn) : probabilité de terminer avec au moins 5
jetons, étant donné qu’on est à l’état sn à l’étape n,
qu’on mise xn jetons et qu’on effectue des décisions
optimales aux étapes n+1,…,N
fn*(sn) = max{fn(sn,xn)| xn = 0,1,…,sn}
6. Programmation dynamique
32
8
Exemple 4 : modèle (suite)
Étant donné qu’on est à l’état sn à l’étape n et qu’on
mise xn jetons, on peut :
Exemple 4 : résolution (n = 3)
s3
Perdre et se retrouver à l’état sn – xn avec une probabilité
1/3
Gagner et se retrouver à l’état sn + xn avec une probabilité
2/3
fn(sn,xn) = (1/3).fn+1*(sn-xn) + (2/3). fn+1*(sn+xn)
f4*(s4) = 0, si s4 < 5
= 1, si s4 ≥ 5
Calculons d’abord f3*(s3) et x3*
6. Programmation dynamique
x3=2
x3=3
x3=4
f3*(s3)
x3*
0
0
-
-
-
-
0
0
1
0
0
-
-
-
0
≥0
2
0
0
0
-
-
0
≥0
3
0
0
2/3
2/3
-
2/3
≥2
4
0
2/3
2/3
2/3
2/3
2/3
≥1
≥5
1
1
0
6. Programmation dynamique
34
Exemple 4 : résolution (n = 2)
Voyons maintenant comment on peut calculer les
valeurs f2*(s2) et x2*, lorsque s2 = 3
Il est clair qu’on doit avoir x2 ≤ 3
f2(3,0) = 1/3.f3*(3) + 2/3.f3*(3) = 2/3
f2(3,1) = 1/3.f3*(2) + 2/3.f3*(4) = 4/9
f2(3,2) = 1/3.f3*(1) + 2/3.f3*(5) = 2/3
f2(3,3) = 1/3.f3*(0) + 2/3.f3*(6) = 2/3
f2*(3) = max{f2(3,0),f2(3,1),f2(3,2),f2(3,3)} = f2(3,0)
D’où x2* = 0, 2 ou 3
De la même façon, on calcule pour s2 = 0,1,2,4,5
6. Programmation dynamique
x3=1
33
Exemple 4 : résolution (n = 2)
x3=0
35
s2
x2=0
x2=1
x2=2
x2=3
x2=4
f2*(s2)
x2*
0
0
-
-
-
-
0
0
1
0
0
-
-
-
0
≥0
2
0
4/9
4/9
-
-
4/9
1,2
3
2/3
4/9
2/3
2/3
-
2/3
0,2,3
4
2/3
8/9
2/3
2/3
2/3
8/9
1
≥5
1
1
0
6. Programmation dynamique
36
9
Exemple 4 : résolution (n = 1)
Exemple 4 : résolution (suite et fin)
Pour la première étape (n = 1), on a s1 = 3 (3 jetons
au départ affecter)
f1(3,0) = 1/3.f2*(3) + 2/3.f2*(3) = 2/3
f1(3,1) = 1/3.f2*(2) + 2/3.f2*(4) = 20/27
f1(3,2) = 1/3.f2*(1) + 2/3.f2*(5) = 2/3
f1(3,3) = 1/3.f2*(0) + 2/3.f2*(6) = 2/3
f1*(3) = max{f1(3,0),f1(3,1),f1(3,2),f1(3,3)} = f1(3,1)
D’où x1* = 1
6. Programmation dynamique
37
x1=0
x1=1
x1=2
x1=3
f1*(s2)
x1*
2/3
20/27
2/3
2/3
20/27
1
s1
3
La politique optimale est donc :
x1* = 1
Si on gagne (s2 = 4), x2* = 1
Si on gagne (s = 5), x * = 0
3
3
Si on perd (s = 3), x * = 2 ou 3
3
3
Si on perd (s2 = 2), x2* = 1 ou 2
Si on gagne (s = 3 ou 4), x * = 2 ou 3 (si x * = 1) ou
3
3
2
1≤x3*≤4 (si x2* = 2)
Si on perd (s = 1 ou 0), x * ≥ 0 (mais le pari est
3
3
perdu!)
6. Programmation dynamique
38
10

Documents pareils