Programmation dynamique Module IAD/M1/RP Master Informatique de Paris 6 Philippe Chrétienne
Programmation dynamique déterministe Processus de décisions séquentielles. Cadre des problèmes résolus par la programmation dynamique. Schéma de résolution d ’un problème par la programmation dynamique: équations de récurrence avant et arrière . Un problème type: le sac à dos.
Processus de décisions séquentielles Un processus de décisions séquentielles est défini par: -un « système » caractérisé par une variable d ’état , -une suite d ’étapes décisionnelles (phases) . Si le système est dans l ’état e i-1 juste avant l ’étape i, la phase i consiste à prendre une décision di qui a comme conséquence: -de faire faire passer l ’état du système de l ’état e i-1 à ei -un coût « immédiat » ri.
e0 e1 ei-1 eN-1 eN ei d1 d2 di dN-1 dN 1 2 i N-1 N r1 r2 ri rN-1 rN D=(d1,d2,……,dN) est une politique réalisable pour passer de l ’état initial e0 à l ’état final eN en N phases décisionnelles. Le coût associé à la politique D est une fonction (r1,r2,…,rN) des coûts immédiats. (r1,r2,…,rN) est la fonction objectif. D ’une manière générale, il faut trouver une politique réalisable dont le coût est minimum (ou maximum). Selon les problèmes, l ’état initial et/ou l ’état final sont (ou ne sont pas) fixés.
Cadre des problèmes résolus par la programmation dynamique La programmation dynamique permet de résoudre un cas particulier de problèmes de décisions séquentielles. Hypothèses à satisfaire: L ’ensemble des décisions possibles à la phase i ne dépend que: - de l ’état ei-1; - du numéro i de la phase décisionnelle. On note i (ei-1) cet ensemble. Hypothèse markovienne sur l ’ensemble des décisions à la phase i: cet ensemble ne dépend des décisions précédentes qu’à travers l ’état ei-1qui résulte de ces décisions. Autre formulation de cette hypothèse: Quelle que soit la suite des décisions (d1, … , di-1) conduisant à l ’état e i-1, l ’ensemble des décisions possibles à la phase i est le même.
L ’état ei ne dépend que: - de l ’état ei-1 - de la décision di (i) - du numéro i de la phase décisionnelle. On note ei = i(ei-1,di) la fonction de changement d ’état Hypothèse markovienne sur le changement d ’état à la phase i: le nouvel état ei ne dépend des décisions précédentes qu’à travers l ’état ei-1 qui résulte de ces décisions. Autre formulation de cette hypothèse: La fonction de changement d ’état à l ’étape i ne dépend pas de la suite (d1, … , di-1) des décisions ayant conduit à l ’état e i-1.
Séparabilité de la fonction objectif: (r1,r2,…,rN) (fonction de N variables) est dite séparable s ’il existe une fonction g(u,v): - de 2 variables u et v; - monotone non décroissante par rapport à v; et une fonction (r2,…,rN) (fonction de N-1 variables) séparable telles que: (r1,r2,…,rN)=g(r1, (r2,…,rN)). 2 exemples de fonctions séparables: (r1,r2,…,rN) = r1 + r2 + ……. + rN Ici g(u,v) = u + v et (r2,…,rN) = r2 + ……. + rN . (r1,r2,…,rN) = Max{r1,r2, ……. , rN} Ici g(u,v) = Max{u,v} et (r2,…,rN) = Max{r2, …….,rN}.
Remarque: En pratique, les fonctions objectifs sont souvent du type: (r1,r2,…,rN)=r1r2 …….. rN où est un opérateur binaire associatif. Exemples pour : +,,Min,Max Dans ce cas, on a: g(u,v)=u v et (r2,…,rN) = r2 ……. rN. (r1,r2,…,rN) est alors séparable si et seulement si g(u,v) est monotone non décroissante par rapport à la seconde variable.
Un exemple: le sac à dos Donnée: un sac à dos S; n articles {A1,…..,An} pour chaque article Ai, son poids pi (entier > 0) et sa valeur vi (entier > 0) le poids maximum de S: P (entier > 0) Une solution s est un sous-ensemble d ’articles de poids total (noté p(s) ) au plus égal à P. La valeur totale d ’une solution s étant notée v(s) , on cherche une solution maximisant v(s).
Modèle de programmation dynamique. Système: le contenu du sac S. Etat du système: le poids de S état initial: e0=0. Phases décisionnelles: une phase par article; ordre (1,2,….,N) Décisions possibles à partir de l ’état ei-1 avant la phase i: si ei-1+pi>P alors une seule décision possible: di=0 (ne pas mettre Ai dans S) si ei-1+pi≤P alors 2 décisions possibles: et di=1 (mettre Ai dans S)
Changement d ’état: ei = e i-1 + (di pi) Gain immédiat: ri = di vi Fonction objectif: (r1,r2,…,rn) = r1 + r2 + ……. + rn
N=4 article 1 2 3 4 poids 5 2 3 7 valeur 6 3 4 7 e0 e1 e2 e3 e4 A1 Phase 1 Phase 2 Phase 3 Phase 4 e0 e1 e2 e3 e4 1 2 3 4 5 6 7 8 9 10 11 12 A1 non A2 A3 non A4
Schéma de résolution par la programmation dynamique A) Schéma de Récurrence Arrière. Pour simplifier l ’exposé nous faisons 2 hypothèses: - état initial e0 et final eN fixés; - (r1,r2,…,rN)=r1 r2 …….. rN où a) est un opérateur binaire associatif b) g(u,v)= u v est monotone non décroissante par rapport à v. On note n(s,t) le sous-problème de associé: - aux n dernières phases de (récurrence arrière) - à l ’état initial s (avant la phase N-n+1) et à l ’état final t.
Le sous-problème n(s,t) eN-n=s eN=t dN-n+1 dN N-n+1 N-n+2 N e0 d1 1 2 r1 rN-n+1 rN Le sous-problème n(s,t) Une politique D ’ pour n(s,t) est une suite de décisions (d ’1,d ’2 ,…., d ’n) concernant les phases respectives N-n+1, …., N faisant passer le système de l ’état s à l ’état t. Notation: f*n(s,t) le coût minimum (valeur minimum de la fonction objectif) d ’une politique pour n(s,t).
L ’ensemble des premières décisions possibles pour une politique D ’ de n(s,t) est égal à N-n+1 (s) . Fixons une première décision d’1 dans . Il en résulte l ’état u = N-n+1(s,d ’1) après la phase 1 de D ’. Soit D*n-1 (u,t) une politique optimale pour n-1(u,t) On a alors la propriété suivante: Théorème d ’optimalité (Bellman): La politique (d ’1, D*n-1 (u,t)) de n(s,t) est de coût minimal sur l ’ensemble des politiques de n(s,t) dont la première décision est d ’1.
Preuve: Si d ’1 est fixé, alors l ’état u (= N-n+1(s,d ’1)) est aussi fixé. De même, le coût r ’1 (= N-n+1(s,d ’1)) est aussi fixé. Soit Dn (s,t) = (d ’1, 2, …. , n) une politique quelconque pour n (s,t) dont la première décision est d ’1. Soit (r ’1, c2, ….. , cn) la suite des coûts immédiats de Dn (s,t) . Le coût de Dn (s,t) est r ’1c2 …….. cn Par construction (2, …. , n) est une politique pour n-1(u,t) dont le coût est c2 …….. cn. Il en résulte que: f*n-1(u,t) ≤ c2 …….. cn. D’après l ’hypothèse de monotonie: r ’1 f*n-1(u,t) ≤ r ’1c2 …….. cn Or r ’1 f*n-1(u,t) est le coût de la politique (d ’1, D*n-1 (u,t)) Et r ’1c2 …….. cn est le coût de la politique Dn (s,t) . (d ’1, D*n-1 (u,t)) est donc meilleure que Dn (s,t) . CQFD.
Pour trouver la meilleure politique pour n(s,t), il suffit de faire varier la première décision d ’1 dans l ’ensemble des décisions possibles N-n+1 (s). On obtient l ’équation de récurrence (arrière): f*n(s,t) = MIN {N-n+1(s,d ’1) f*n-1(N-n+1(s,d ’1),t)d ’1 N-n+1 (s)} Initialisation: La fonction f0*(t) est une donnée du problème. Notons E i-1 l ’ensemble de états possibles du système juste avant la phase décisionnelle i. L ’équation précédente permet le calcul des valeurs de f*n(s,t), s E N-n (e0) lorsque les valeurs de f*n-1(s,t), s E N-n+1 (e0) sont connues. Remarque: en général, on ne sait pas caractériser exactement Ei, on le remplace alors par un sur-ensemble Si Ei.
Algorithme de récurrence arrière Soit un problème d ’optimisation modélisé par un schéma S de programmation dynamique caractérisé par: N phases décisionnelles; un état initial fixé s ; un état final fixé t affecté d ’un coût K ; des fonctions de changement d ’état k,k=1..N des fonctions de coût immédiats k ,k=1..N ; une fonction objectif à minimiser caracrérisée par l ’opération . L ’algorithme Prog_Dyn_Arriere(,S,C,D) calcule - le coût C d ’une politique optimale pour N(s,t) - une politique optimale D de N(s,t).
Procedure Prog_Dyn_Arriere(,S,C,D) optv0(t,0):=K; % initialisation % Pour k de 1 à N faire % calcul de f*N(s,t)% Pour tout e dans E N-k faire optv(e,k):=Min{N-k+1(e,d) optv(N-k+1(e,d),k-1) d N-k+1 (e)}; optd(e,k) := Argmin(optv(e,k)) FinPour FinPour ; C := optv (s,N) ; e:=s ; Pour k de 0 à N-1 faire % calcul d ’une politique optimale % Dk+1:= optd(e,N-k) ; e:= k+1 (e,Dk+1) FinPour.
Complexité temporelle pire-cas de Prog_Dyn_Arriere (,S,C,D) Hypothèses concernant l ’énoncé I de (de longueur l(I)): 1) Pour tout k: Card (E k ) ≤ E ( l(I) ) ; 2) Le temps de calcul de u v est en 0(1) ; 3) Pour tout k et pour tout e dans E k: Card ( k (e)) ≤ (l(I)) ; La complexité de Prog_Dyn_Arriere(,S,C,D) est alors en O( N E(l(I)) (l(I)) ) Remarque: On a souvent: (l(I))=O(1) Il est donc très important d ’ajuster au mieux les espaces d ’états pour chaque phase décisionnelle.
A) Schéma de Récurrence Avant. Pour simplifier l ’exposé nous faisons 2 hypothèses: - état initial e0 et final eN fixés; - (r1,r2,…,rN)=r1r2 …….. rN (où est un opérateur binaire associatif). On note n(s,p) le sous-problème de associé: - aux n premières phases de (récurrence avant) - à l ’état initial s et à l ’état final p.
Le sous-problème n(s,p) en=p eN dn dN n n+1 N e0=s d1 1 2 r1 rn rN Le sous-problème n(s,p) Une politique D ’ pour n(s,p) est une suite de décisions (d ’1,d ’2 ,…., d ’n) concernant les n premières phases faisant passer le système de l ’état s à l ’état p. Notation: g*n(s,p) le coût minimum (valeur minimum de la fonction objectif) d ’une politique pour n(s,p).
Soit Cn(p) l’ensemble des couples (e n-1,d n) possibles en=p eN dn dN n n+1 N e0=s d1 1 2 r1 rn rN Soit Cn(p) l’ensemble des couples (e n-1,d n) possibles pour une politique D ’ de n(s,p). Cn(p) = {(e,d)/ e E n-1, d n(e), n(e,d)=p} Fixons un couple (e,d) de Cn(p). Soit D*n-1 (s,e) une politique optimale pour n-1(s,e) On a alors la propriété suivante: Théorème d ’optimalité (Bellman): La politique (D*n-1 (s,e),d) de n(s,p) est de coût minimal sur l ’ensemble des politiques de n(s,p) dont le dernier couple (état,décision) est (e,d).
Pour trouver la meilleure politique pour n(s,p) , il suffit de en=p eN dn dN n n+1 N e0=s d1 1 2 r1 rn rN Pour trouver la meilleure politique pour n(s,p) , il suffit de faire varier le dernier couple (e,d) dans Cn(p). On obtient l ’équation de récurrence (avant): g*n(s,p) = MIN {n(e,d) g*n-1(s,e))(e,d) Cn(p)} Initialisation: La fonction g*0(s) est une donnée du problème. L ’équation précédente permet le calcul des valeurs de g*n(s,p), p E n+1(e0) lorsque les valeurs de g*n-1(s,t), t E n(e0) sont connues.
Récurrence avant pour le sac à dos. Etat du système: le poids de S, état initial: e0=0. Phases décisionnelles: une phase par article; ordre (1,2,….,N) Décisions possibles à partir de l ’état ei-1 avant la phase i: si ei-1+pi>P alors di=0 (ne pas mettre Ai dans S) si ei-1+pi≤P alors (di=0 ou di=1) Changement d ’état: ei = e i-1 + (di pi) Gain immédiat: ri = di vi Fonction objectif: (r1,r2,…,rn) = r1 + r2 + ……. + rn Equations de récurrence avant. g*i(p) = MAX {vi + g*i-1(p-pi) , g*i-1(p)} si p ≥ pi g*i(p) = g*i-1(p)} si p < pi
N=4 article 1 2 3 4 poids 5 2 3 7 valeur 6 3 4 7 P=13 e0 e1 e2 e3 e4 Phase 1 Phase 2 Phase 3 Phase 4 e0 e1 e2 e3 e4 1 2 3 4 5 6 7 8 9 10 11 12 13 14
Récurrence avant pour un problème d ’ordonnancement sur une machine Paramètres du problème: une machine M ; n tâches T1, T2, … , Tn non interruptibles; pour chaque tâche Ti: sa durée pi, son deadline di et son gain gi Une solution est un séquencement des n tâches sur M. Si, dans une solution, l ’exécution d ’une tâche Ti se termine au plus tard à la date di, la tâche Ti est dite « en avance », le gain associé est gi. Le gain d ’une solution est la somme des gains réalisés. Il faut trouver une solution de gain maximal.
Recherche d ’un ensemble dominant de solutions Propriété: Les solutions s telles que: 1) s=h.r où: h est une sous-liste de tâches à l ’heure, r est une sous-liste de tâches en retard; 2) les tâches de h sont placées dans l ’ordre croissant au sens large de leurs deadlines sont dominantes. Preuve: On montre d ’abord que les solutions qui vérifient 1) sont dominantes. On montre ensuite que l ’on peut reséquencer les tâches à l ’heure selon 2).
Solution s1 telle que Ti est la première tâche en retard suivie d ’une tâche à l ’heure Tj : s1 di dj s2 Solution s2 déduite de s1: G(s2) ≥ G(s1) En itérant cette transformation, on obtient une solution de type h.r satisfaisant 1).
Soit s une solution de type h.r satisfaisant 1) telle que: A) les 2 tâches Ti et Tj soient consécutives dans h; B) di > dj . s h r di dj s ’ La solution s ’ de type h.r obtenue par échange de Ti et Tj satisfait G(s) = G(s ’). En itérant cette transformation on obtient une solution de type h.r satisfaisant 2).
On peut donc poser le problème sous la forme: Déterminer une liste h de tâches à l ’heure de gain maximal. On suppose donc, sans perte de généralité que: d1 ≤ d2 ≤ ….. ≤ dn Nous allons résoudre par la programmation dynamique un problème « dual » du problème initial: Si h est une liste de tâches à l ’heure, on note g(h)= Tih gi le gain associé à h, p(h)= Tih pi la durée de h. Pour chaque valeur de gain total e, on cherche une liste h de tâches à l ’heure telle que: g(h)=e et p(h) minimum.
SCHEMA DE RECURRENCE AVANT. n étapes décisionnelles 1, 2, … , n. L ’étape numéro i concerne la tâche Ti: elle consiste à prendre (ou non) la tâche Ti dans l ’ensemble des tâches à l ’heure. Di = 1 si Ti est prise, Di = 0 sinon. Variable d ’état: ei est le gain réalisé après les i premières décisions. Coût immédiat: ri = pi si Di = 1, ri = 0 si Di = 0.
Ensemble i (e) des décisions possibles si e i-1 = e. On note P i-1 (e) la durée minimale d ’une liste de tâches à l ’heure appartenant à {T1, T2, …., Ti-1} et dont le gain est égal à e. Convention: si une telle liste n ’existe pas: P i-1 (e) = + Si P i-1 (e) + pi > di, alors il n ’est pas possible de prendre la tâche Ti et donc i (e) ={0} Si P i-1 (e) + pi ≤ di, alors i (e) ={0,1} Fonction objectif: ri. Les hypothèses d ’un schéma de résolution par la programmation dynamique sont donc satisfaites.
Equation de récurrence avant: P i-1 (e) si [ (P i-1 (e) + pi > di) ou (e < gi) ] P i (e) = Min{P i-1 (e) , P i-1 (e-gi) + pi} sinon. Initialisation: P 0 (e) = + si e>0 P 0 (0) = 0 La valeur maximale du gain est Max{eP n (e) < + }
Un exemple 5 tâches i 1 2 3 4 5 pi 5 1 4 3 6 di 8 8 9 9 10 gi 3 2 2 3 4 Les tâches sont déjà triées dans l ’ordre croissant au sens large de leur deadline. Trouver la politique optimale et le gain maximal.
Solution optimale: (T1, T2, T4) Gain maximal: 8 Phase 1 Phase 2 Phase 3 Phase 4 Phase 5 e0 e1 e2 e3 e4 e5 5 1 6 3 4 8 7 9 2 Rem: Les valeurs + de Pi(e) (en vert) ne sont pas écrites i 1 2 3 4 5 pi 5 1 4 3 6 di 8 8 9 9 10 gi 3 2 2 3 4 Solution optimale: (T1, T2, T4) Gain maximal: 8