Professional Documents
Culture Documents
Programmation dynamique
6.1 Programmation dynamique et probl`mes dope timisation
La programmation dynamique est une mthodologie gnrale pour concee e e voir des algorithmes qui permettent de rsoudre ecacement certains probl`mes e e doptimisation. Un probl`me doptimisation admet un grand nombre de soe lutions. Chaque solution a une certaine valeur, et on veut identier une solution dont la valeur est optimale (minimale ou maximale). Trouver un plus court chemin pour aller dun point ` un autre dans un rseau de transa e port est un probl`me doptimisation e La conception dun algorithme de programmation dynamique se dcompose e en quatre tapes. e 1. Caractrisation de la structure dune solution optimale. e 2. Dnition rcursive de la valeur de la solution optimale. e e 3. Calcul ascendant de la valeur de la solution optimale. 4. Construction de la solution optimale ` partir des informations obtenues a a e ` ltape prcdente. e e Ltape 4 peut tre omise si on a seulement besoin de la valeur de la solution e e optimale et non de la solution elle mme. e Les sections suivantes dcrivent lutilisation de la programmation dynae mique pour rsoudre en temps polynomial trois probl`mes doptimisation : e e le calcul dun parcours optimal dans un atelier de montage, le calcul dune cha de mulplications matricielles avec un nombre minimum doprations ne e 71
72
scalaires, le calcul dun arbre binaire de recherche optimal. Ensuite, nous mettrons en vidence deux caractristiques que doit possder un probl`me e e e e doptimisation pour que la programmation dynamique soit applicable.
6.2
Un constructeur automobile poss`de un atelier avec deux cha e nes de montage comportant chacune n postes de montages. Chaque vhicule doit e passer par les n postes dans lordre. Le constructeur cherche ` dterminer a e quels sont les postes ` slectionner sur la cha 1 et sur la cha 2 pour a e ne ne minimiser le dlai de transit dune voiture ` travers latelier. Les donnes du e a e probl`me doptimisation quil doit rsoudre sont les suivantes. Pour i = 1, 2 e e et j = 1, . . . , n, on note Si,j le j`me poste de la cha i, ei le temps dentre e ne e dun vhicule sur la cha i, ai,j le temps de montage pour le poste j sur e ne la cha i, ti,j le temps de transfert dun vhicule de la cha i vers lautre ne e ne cha apr`s le poste Si,j et nallement xi le temps de sortie dun vhicule ne e e de la cha i (voir Figure 6.1a). ne Chaque solution de ce probl`me doptimisation est dnie par le souse e ensemble de postes de la cha 1 utiliss (les postes restant sont choisis ne e dans la cha 2). Il y a donc 2n solutions possibles, i.e. le nombre de sousne ensembles dun ensemble ` n lments. Par consquent, lapproche na a ee e ve consistant ` considrer tous les chemins possibles est inecace. La programa e mation dynamique permet de rsoudre ce probl`me ecacement. e e La premi`re tape consiste ` identier des sous-probl`mes dont les solue e a e tions optimales vont nous permettre de reconstituer une solution optimale du probl`me initial. Les sous-probl`mes ` considrer ici consistent ` calculer e e a e a un itinraire optimal jusquau poste Si,j pour i = 1, 2 et j = 1, . . . , n. Par e exemple, considrons un itinraire optimal jusquau poste S1,j . Si j = 1, il e e ny a quun seul chemin possible. Pour j = 2, . . . , n, il y a deux possibilits. e Un itinraire optimal jusqu` S1,j est ou bien, un itinraire optimal jusqu` e a e a S1,j1 suivi du poste S1,j , ou bien, un itinraire optimal jusqu` S2,j1 suivi e a dun changement de cha et du poste S1,j . ne La deuxi`me tape consiste ` dnir la valeur optimale de mani`re rcursive e e a e e e a ` partir des valeurs des solutions optimales des sous-probl`mes. Soit fi [j] le e dlai optimal jusqu` Si,j et f le dlai optimal total. Pour traverser latee a e lier, il faut atteindre ou bien S1,n ou bien S2,n et sortir de latelier. Par
S1,3
2
S1,4
4
S1,5
9 2
3 2 1 2 5 1 3
Entree
3 5 2 3 8 4 7 7 3
Sortie
S2,1
S2,2
S2,3
(a)
S2,4
S2,5
j f1[j] f2[j]
1 13
5 f = 32
(b)
2 1 1
3 2 2
4 1 2
5 1 1 l = 2
9 17 19 15 22
23 32 29 29
l1[j] l2[j]
Figure 6.1 Exemple dinstance du probl`me dordonnacement optimal e dune cha de montage : (a) les donnes du probl`me et (b) les tables de ne e e programmation dynamique. consquent, on a e f = min(f1 [n] + x1 , f2 [n] + x2 ). Pour le poste 1 de chaque cha ne, il ny a quun itinraire possible : e f1 [1] = e1 + a1,1 f2 [1] = e2 + a2,1 Pour le poste j = 2, . . . , n de la cha 1, il y a deux possibilits : ne e f1 [j] = min(f1 [j 1] + a1,j , f2 [j 1] + t2,j1 + a1,j ), et symtriquement e f2 [j] = min(f2 [j 1] + a2,j , f1 [j 1] + t1,j1 + a2,j ). (6.2) (6.1)
Les fi [j] sont les valeurs des solutions optimales des sous-probl`mes. Pour e pouvoir reconstruire les solutions optimales elles-mmes, on dnit li [j] le e e numro de la cha (1 ou 2) dont le poste j 1 est utilis par un chemin e ne e
74
optimal jusquau poste Si,j pour j = 2, . . . , n, (li [1] nest pas dni car aucun e poste ne vient avant le poste 1). La troisi`me tape consiste ` concevoir un algorithme qui calcule en e e a temps polynomial les valeurs fi [j] des solutions optimales et les informations li [j] ncessaires ` la construction de ces solutions. Lalgorithme suivant fait e a ce travail en O(n) en utilisant les formules rcursives (6.1) et (6.2). Il revient e a ` remplir les tables de la Figure 6.1b de la gauche vers la droite. Plus-Rapide-Chemin(a, t, e, x, n) 1. f1 [1] e1 + a1,1 2. f2 [1] e2 + a2,1 3. pour j 2 ` n faire a 4. si f1 [j 1] f2 [j 1] + t2,j1 5. alors f1 [j] f1 [j 1] + a1,j 6. l1 [j] 1 7. sinon f1 [j] f2 [j 1] + t2,j1 + a1,j 8. l1 [j] 2 9. si f2 [j 1] f1 [j 1] + t1,j1 10. alors f2 [j] f2 [j 1] + a2,j 11. l2 [j] 2 12. sinon f2 [j] f1 [j 1] + t1,j1 + a2,j 13. l2 [j] 1 14. si f1 [n] + x1 f2 [n] + x2 15. alors f = f1 [n] + x1 16. l = 1 17. sinon f = f2 [n] + x2 18. l = 2 Finalement, la quatri`me et derni`re tape consiste ` reconstruire une e e e a solution optimale en utilisant les informations sauvegardes ` ltape 3. La e a e procdure suivante ache les postes utiliss par une solution optimale par e e ordre dcroissant de numro de poste. e e Afficher-Postes(l, n) 1. i l 2. acher cha ne i, poste n 3. pour j n jusqu` 2 a 4. faire i li [j] 5. acher cha ne i, poste j 1
75
6.3
On se donne une suite de n matrices A1 , . . . , An et on veut calculer le produit A1 A2 . . . An (6.3) Une fois que lon a parenths cette expression de mani`re ` supprimer lamee e a bigu e lie ` lordre dans lequel les multiplications doivent tre eectues, t e a e e on peut valuer lexpression (6.3) en utilisant comme routine lalgorithme e standard de multiplication de deux matrices. On dit dun produit de matrices quil est compl`tement parenths dans e e e les deux cas suivants : cest une matrice isole, e cest le produit de deux matrices compl`tement parenthses. e ee Le produit de matrices est associatif par consquent quelque soit le pae renthsage on obtient le mme rsultat. Par exemple, si la cha de matrices e e e ne est A1 , A2 , A3 , A4 , le produit A1 A2 A3 A4 peut tre parenths de 5 faons e ee c direntes : e (A1 (A2 (A3 A4 ))), (A1 ((A2 A3 )A4 )), ((A1 A2 )(A3 A4 )), ((A1 (A2 A3 ))A4 ), (((A1 A2 )A3 )A4 ). La faon dont on parenth`se une telle cha de matrices peut avoir une c e ne grande importance sur le nombre doprations ncessaires pour eectuer le e e produit. Si A est une matrice p q et B une matrice q r, la matrice produit est une matrice q r. La complexit du calcul du produit est domin par le e e nombre de multiplications scalaires qui est gal ` pqr. e a Pour illustrer les dirences de cots obtenus en adoptant des parenthsages e u e dirents, considrons un produit de 3 matrices A1 , A2 , A3 de dimensions e e respectives 10 100, 100 5 et 5 50. Si on eectue les multiplications dans lordre donn par le parenthsage ((A1 A2 )A3 ), le nombre doprations e e e ncessaires est 10 100 5 = 5000 pour obtenir le produit A1 A2 , qui est une e matrice 10 5, plus 10 5 50 = 2500 pour obtenir le produit ((A1 A2 )A3 ), soit 7500 oprations en tout. Si on adopte le parenthsage (A1 (A2 A3 )), le e e nombre doprations ncessaires est 100550 = 25000 pour obtenir le proe e
76
duit A2 A3 , qui est une matrice 100 50, plus 10 100 50 = 50000 pour obtenir le produit (A1 (A2 A3 )), soit 75000 oprations en tout. Par consquent, e e calculer le produit en accord avec le premier parenthsage est 10 fois plus e rapide. Notre probl`me se formule de la faon suivante : tant donn une suite e c e e de n matrices A1 , . . . , An , avec pi1 pi la dimension de la matrice Ai , pour i = 1, . . . , n, trouver le parenth`sage du produit A1 A2 . . . An qui minimise e le nombre de multiplications scalaires ` eectuer. a Remarque : le nombre de parenthsages dirents est une fonction e e exponentielle de n. Par consquent, la stratgie qui consiste ` numrer tous e e ae e les parenthsages est exclue pour de grandes valeurs de n. e
6.3.1
La premi`re tape dans une approche de type programmation dynamique e e consiste ` identier la structure des solutions optimales. a Notons Ai..j la matrice qui rsulte de lvaluation du produit Ai Ai+1 . . . Aj . e e Un parenthsage optimal de A1 . . . An dcoupe le produit entre les matrices e e Ak et Ak+1 pour un certain k compris entre 1 et n 1. Cest-`-dire que a pour un certain k, on calcule dabord le produit A1..k et Ak+1..n , ensuite on multiplie ces produits pour obtenir le produit nal A1..n . Le cot de ce pau renthsage est la somme des cots du calcul de A1..k et Ak+1..n et du produit e u de ces deux matrices. Remarquons que le parenthsage de A1..k doit tre lui-mme un pae e e renthsage optimal de A1 . . . Ak , de mme le parenthsage de Ak+1..n doit e e e tre optimal. Par consquent, une solution optimal dun probl`me de pae e e renthsage contient elle-mme des solutions optimales de sous-probl`mes de e e e parenthsage. La prsence de sous-structures optimales dans une solution e e optimale est lune des caractristiques des probl`mes pour lesquels la proe e grammation dynamique est applicable.
6.3.2
La seconde tape dans une approche de type programmation dynamique e consiste ` dnir la valeur de la solution en fonction des solutions optimales a e de sous-probl`mes. Dans notre cas, un sous-probl`me consiste ` dterminer le e e a e
77
cot minimal dun parenthsage de Ai . . . Aj pour 1 i j n. Soit m[i, j] u e le nombre minimum de multiplications scalaires ncessaires pour obtenir le e produit Ai..j . Le nombre minimum de multiplications scalaires ncessaires e pour obtenir A1..n sera m[1, n]. On peut calculer m[i, j] rcursivement de la faon suivante. Si i = j, la e c cha de matrices se rduit ` une seule matrice Ai..i = Ai , aucune opration ne e a e nest ncessaire, et donc m[i, i] = 0 pour i = 1, . . . , n. Pour calculer m[i, j] e quand i < j, on se sert de la structure des solutions optimales que nous avons prcdemment mise en vidence. Supposons que la solution optimale du e e e sous-probl`me dcoupe le produit Ai . . . Aj entre Ak et Ak+1 avec i k < j. e e Alors, m[i, j] est gal au nombre minimum de multiplications scalaires pour e obtenir Ai..k et Ak+1..j plus le nombre de multiplications ncessaires pour efe fectuer le produit matriciel Ai..k Ak+1..j , cest-`-dire pi1 pk pj multiplications a scalaires, on obtient m[i, j] = m[i, k] + m[k + 1, j] + pi1 pk pj . Cette quation rcursive suppose que nous connaissions la valeur de k, e e ce qui nest pas le cas. Il y a seulement j i valeurs possibles pour k : les valeurs i, i + 1, . . . , j 1. Puisque la solution optimale correspond ` a lune de ces valeurs, il sut de les essayer toutes et de garder la meilleure. Par consquent, notre dnition rcursive pour le cot minimum dun pae e e u renth`sage de Ai . . . Aj devient e m[i, j] = 0 minik<j {m[i, k] + m[k + 1, j] + pi1 pk pj } si i = j, si i < j. (6.4)
Les valeurs m[i, j] donnent les cots des solutions optimales des sous-probl`mes. u e Pour reconstituer une solution optimale a posteriori, nous allons stocker dans s[i, j] une valeur de k qui minimise m[i, k] + m[k + 1, j] + pi1 pk pj , i.e. telle que m[i, j] = m[i, k] + m[k + 1, j] + pi1 pk pj .
6.3.3
Calcul du co t optimal u
Au point o` nous en sommes, on peut crire facilement un programme u e rcursif bas sur la relation de rcurrence (6.4) pour calculer le cot de la e e e u solution optimale. Cependant, cet algorithme na pas une meilleure complexit quun algorithme numratif brutal. e e e
78
En fait, on peut remarquer quil existe relativement peu de sous-probl`mes : e un pour chaque choix de i et j qui satisfasse 1 i j n, cest-`-dire ` a a peu pr`s n2 (en fait, n(n+1)/2+n exactement). Un algorithme rcursif peut e e rencontrer plusieurs fois chacun de ces sous-probl`mes dans larbre des ape pels rcursifs. Cette proprit est la deuxi`me caractristique des probl`mes e ee e e e pour lesquels la programmation dynamique est applicable. Au lieu de calculer la solution de la rcurrence (6.4) rcursivement, nous e e allons eectuer la troisi`me tape la troisi`me tape dune approche de type e e e e programmation dynamique en calculant le cot optimal de faon ascendante. u c Lalgorithme suivant remplit la table en commenant par rsoudre le c e probl`me de parenthsage sur les cha e e nes de matrices les plus courtes et en continuant par ordre croissant de longueur de cha nes. Lquation de e rcurrence (6.4) montre que lon peut calculer le cot optimal pour une e u cha en connaissant les cots optimaux pour les cha ne u nes de longueurs infrieures. e
Ordre-Cha ne-Matrices(p) 1. n longueur(p) 2. pour i 1 ` n a 3. faire m[i, i] 0 4. pour l 2 ` n a 5. faire pour i 1 ` n l + 1 a 6. j i+l1 7. m[i, j] 8. pour k i ` j 1 a 9. faire q m[i, k] + m[k + 1, j] + pi1 pk pj 10. si q < m[i, j] 11. alors m[i, j] q 12. s[i, j] k 13. retourner m et s
Cet algorithme est en O(n3 ). En eet, il contient trois boucles imbriques e dans lesquelles chaque index peut prendre au plus n valeurs. De plus, le traitement est eectu ` lintrieur de ces boucles se fait en temps constant. ea e Par consquent, cet algorithme est beaucoup plus ecace que la mthode e e exponentielle qui consiste ` examiner chaque parenthsage. a e
79
6.3.4
Lalgorithme que nous avons dcrit prcdemment donne le nombre mie e e nimum de multiplications scalaires ncessaires pour calculer la cha de e ne produits matriciels mais ne montre pas directement comment multiplier ces matrices en utilisant ce nombre minimum de multiplications. La derni`re e tape dans notre approche de type programmation dynamique consiste ` e a reconstruire une solution optimale ` partir des informations que nous avons a sauvegardes ` ltape prcdente. e a e e e Nous allons utiliser la table s[ , ] pour dterminer la meilleure faon e c de multiplier les matrices. Chaque entre s[i, j] de cette table contient la e valeur k telle quun parenthsage optimal spare le produit Ai Ai+1 . . . Aj e e entre Ak et Ak+1 . Par consquent, nous savons que la derni`re multiplie e cation matricielle dans la solution optimale que nous voulons reconstruire est A1..s[1,n] As[1,n]+1..n . Les multiplications prcdentes peuvent tre reconse e e titues rcursivement de la mme faon. La procdure suivante ache le pae e e c e renthsage optimal du produit matriciel Ai..j tant donne la table s[ , ] cale e e cule ` ltape prcdente et les indices i et j. Pour calculer le parenthsage e a e e e e complet, le premier appel de cette procdure sera Affichage-Parenthesagee Optimal(s, 1, n). Affichage-Parenthesage-Optimal(s, i, j) 1. si i = j 2. alors Acher Ai 3. sinon Acher ( 4. Affichage-Parenthesage-Optimal(s, i, s[i, j]) 5. Affichage-Parenthesage-Optimal(s, s[i, j] + 1, j) 6. Acher )
6.4
Le probl`me doptimisation que nous allons considrer dans cette sece e tion consiste tant donn un ensemble ordonn de clefs {a1 , a2 , . . . , an } et e e e p1 , p2 , . . . , pn les frquences de recherche de ces clefs, ` calculer un arbre e a binaire de recherche qui permettent de minimiser le temps de recherche de ces clefs. En remarquant que le temps ncessaire pour rechercher une clef est e proportionnel ` sa profondeur dans larbre binaire de recherche, on dduit a e que larbre binaire de recherche que nous souhaitons identier doit minimiser
80 la quantit suivante e
cot(T ) = u
n i=1
pi (profT (ai ) + 1)
cot(T1) = 60 + 36 + 80 + 32 + 12 = 220 u a3 12 a4 16 2 = 32 a5 12 3 = 36
cot(T2) = 36 + 36 + 40 + 32 + 40 = 184 u T2 20 2 = 40 a1 a3 12 3 = 36 a2 40 a4 16 2 = 32 a5 12 3 = 36
T1 40 2 = 80 a2 a1 20 3 = 60
Figure 6.2 Un exemple dinstance du probl`me de larbre binaire de e recherche optimal avec deux arbres et leurs cots respectifs. u Pour commencer, nous allons mettre en vidence la prsence de souse e structures optimales dans un arbre binaire de recherche (ABR) optimal. Pour cela, nous allons introduire les notations suivantes : Ti,j un ABR optimal pour les clefs ai+1 , . . . , aj ; wi,j = pi+1 + . . . + pj la somme des frquences des clefs de larbre Ti,j ; e ri,j la racine de larbre Ti,j ; ci,j le cot de larbre Ti,j ; u Ti,i larbre vide (ci,i = 0). Considrons un ABR optimal Ti,j et notons k lentier compris entre i + 1 e et j tel que la racine ri,j de larbre Ti,j soit ak . Le sous-arbre gauche de la racine ak est constitu des clefs ai+1 , . . . , ak1 . De plus, ce sous-arbre T e doit ncessairement tre un ABR optimal sur cet ensemble de clefs car sil e e existait un meilleur ABR T sur cet ensemble de clefs alors en remplaant T c dans T par T i,j on obtiendrait un arbre meilleur que Ti,j , ce qui contredirait loptimalit de Ti,j . Le mme raisonnement sapplique au sous-arbre droit e e et montre que larbre optimal Ti,j est constitu dune racine ak dont le ls e
81
gauche est la racine dun ABR optimal Ti,k1 et le ls droit est la racine dun ABR optimal Tk,j (voir Figure 6.4).
ak
Ti,k1
Tk,j
Figure 6.3 Sous-structures optimales dans un ABR optimal Voyons maintenant comment donner une dnition rcursive du cot e e u dun ABR optimal. Si ak est la racine de Tij , on a : ci,j = (ci,k1 + wi,k1 ) + pk + (ck,j + wk,j ) = (wi,k1 + pk + wk,j ) + ci,k1 + ck,j = wi,j + ci,k1 + ck,j
La premi`re ligne sexplique par le fait que lorsque lon place larbre e Ti,k1 sous la racine ak , la profondeur de chacun de ces noeuds augmente de un, donc globalement le cot ci,k1 de ce sous-arbre augmente de la u somme des frquences des clefs quil contient, cest-`-dire wi,k1 . Idem pour e a la contribution du sous-arbre droit Tk,j qui augmente de wk,j . Finalement, il reste ` compter la contribution de ak qui est gale ` pk . La deuxi`me ligne a e a e est juste une rcriture de la premi`re et la troisi`me utilise simplement la ee e e dnition de wi,j . e Pour nir, on remarque que la valeur de k ` utiliser est celle qui minimise a le cot ci,k1 + ck,j , ce qui donne la dnition rcursive suivante : u e e ci,j = wi,j +
k{i+1,...,j}
min
(ci,k1 + ck,j )
Lalgorithme suivant consiste ` rsoudre les sous-probl`mes sur des sousa e e ensembles de clefs de longueurs l croissantes, en utilisant la formule rcursive e ci-dessus : ABR-Optimal(p, n) 1. Pour i 0 ` n faire a
82
2. wi,i 0 3. ci,i 0 4. Pour l 1 ` n faire a 5. Pour i 0 a n l faire ` 6. j i+l 7. wi,j wi,j1 + pj 8. Soit m la valeur de k telle que ci,k1 + ck,j soit minimum 9. ci,j = wi,j + ci,m1 + cm,j 10. ri,j m Lalgorithme prcdent permet dobtenir le cot dun ABR optimal et e e u sauvegarde les informations ncessaires pour le construire grce ` lalgoe a a rithme suivant. Const-ABR-opt(i, j) 1. p CrerNoeud(ri,j , NULL, NULL) e 2. Si i < ri,j 1 alors 3. pls-gauche = Const-ABR-opt(i, ri,j 1) 4. Si ri,j < j alors 5. pls-droit = Const-ABR-opt(ri,j , j)
6.5
Dans cette section, nous prsentons deux caractristiques que doit avoir e e un probl`me doptimisation pour que la programmation dynamique soit ape plicable : la prsence de sous-structures optimales et le recouvrement des e sous-probl`mes. e
6.5.1
Sous-structures optimales
La premi`re tape dans une approche de type programmation dynae e mique consiste ` identier la structure des solutions optimales. On dit que a le probl`me prsente une sous-structure optimale si une solution optimale e e contient des solutions optimales de sous-probl`mes. e Ctait le cas dans les trois probl`mes prcdents. Par exemple, chaque e e e e parenthsage optimal de A1 . . . An tait obtenu comme le produit du pae e renthsage optimal de A1 . . . Ak et de Ak+1 . . . An pour un certain k et que e chaque ABR optimal peut tre obtenu en attachant ` une racine bien choisie e a
6.5. APPLICABILITE DE LA PROGRAMMATION DYNAMIQUE deux ABR optimaux pour des sous-probl`mes. e
83
6.5.2
Pour que la programmation dynamique soit applicable, il faut galement e que lespace des sous-probl`mes soit susament petit. Dans le sens o` e u un algorithme rcursif qui rsoudrait le probl`me rencontrerait les mmes e e e e sous-probl`mes plusieurs fois, au lieu de gnrer toujours de nouveaux souse e e probl`mes. Pour que la programmation dynamique permette de concevoir e un algorithme polynomial, il faut bien sr que le nombre de sous-probl`mes u e a ` considrer soit polynomial. e
84