首页 OCaml使用指南

OCaml使用指南

举报
开通vip

OCaml使用指南 Chapitre 6 Programmation dynamique 6.1 Programmation dynamique et proble`mes d’op- timisation La programmation dynamique est une me´thodologie ge´ne´rale pour conce- voir des algorithmes qui permettent de re´soudre efficacement certains proble`mes d’optimisa...

OCaml使用指南
Chapitre 6 Programmation dynamique 6.1 Programmation dynamique et proble`mes d’op- timisation La programmation dynamique est une me´thodologie ge´ne´rale pour conce- voir des algorithmes qui permettent de re´soudre efficacement certains proble`mes d’optimisation. Un proble`me d’optimisation admet un grand nombre de so- lutions. Chaque solution a une certaine valeur, et on veut identifier une solution dont la valeur est optimale (minimale ou maximale). Trouver un plus court chemin pour aller d’un point a` un autre dans un re´seau de trans- port est un proble`me d’optimisation La conception d’un algorithme de programmation dynamique se de´compose en quatre e´tapes. 1. Caracte´risation de la structure d’une solution optimale. 2. De´finition re´cursive de la valeur de la solution optimale. 3. Calcul ascendant de la valeur de la solution optimale. 4. Construction de la solution optimale a` partir des informations obtenues a` l’e´tape pre´ce´dente. L’e´tape 4 peut eˆtre omise si on a seulement besoin de la valeur de la solution optimale et non de la solution elle meˆme. Les sections suivantes de´crivent l’utilisation de la programmation dyna- mique pour re´soudre en temps polynomial trois proble`mes d’optimisation : le calcul d’un parcours optimal dans un atelier de montage, le calcul d’une chaˆıne de mulplications matricielles avec un nombre minimum d’ope´rations 71 72 CHAPITRE 6. PROGRAMMATION DYNAMIQUE scalaires, le calcul d’un arbre binaire de recherche optimal. Ensuite, nous mettrons en e´vidence deux caracte´ristiques que doit posse´der un proble`me d’optimisation pour que la programmation dynamique soit applicable. 6.2 Ordonnancement optimal d’une chaˆıne de mon- tage Un constructeur automobile posse`de un atelier avec deux chaˆınes de montage comportant chacune n postes de montages. Chaque ve´hicule doit passer par les n postes dans l’ordre. Le constructeur cherche a` de´terminer quels sont les postes a` se´lectionner sur la chaˆıne 1 et sur la chaˆıne 2 pour minimiser le de´lai de transit d’une voiture a` travers l’atelier. Les donne´es du proble`me d’optimisation qu’il doit re´soudre sont les suivantes. Pour i = 1, 2 et j = 1, . . . , n, on note Si,j le je`me poste de la chaˆıne i, ei le temps d’entre´e d’un ve´hicule sur la chaˆıne i, ai,j le temps de montage pour le poste j sur la chaˆıne i, ti,j le temps de transfert d’un ve´hicule de la chaˆıne i vers l’autre chaˆıne apre`s le poste Si,j et finallement xi le temps de sortie d’un ve´hicule de la chaˆıne i (voir Figure 6.1a). Chaque solution de ce proble`me d’optimisation est de´finie par le sous- ensemble de postes de la chaˆıne 1 utilise´s (les postes restant sont choisis dans la chaˆıne 2). Il y a donc 2n solutions possibles, i.e. le nombre de sous- ensembles d’un ensemble a` n e´le´ments. Par conse´quent, l’approche na¨ıve consistant a` conside´rer tous les chemins possibles est inefficace. La program- mation dynamique permet de re´soudre ce proble`me efficacement. La premie`re e´tape consiste a` identifier des sous-proble`mes dont les solu- tions optimales vont nous permettre de reconstituer une solution optimale du proble`me initial. Les sous-proble`mes a` conside´rer ici consistent a` calculer un itine´raire optimal jusqu’au poste Si,j pour i = 1, 2 et j = 1, . . . , n. Par exemple, conside´rons un itine´raire optimal jusqu’au poste S1,j . Si j = 1, il n’y a qu’un seul chemin possible. Pour j = 2, . . . , n, il y a deux possibilite´s. Un itine´raire optimal jusqu’a` S1,j est ou bien, un itine´raire optimal jusqu’a` S1,j−1 suivi du poste S1,j , ou bien, un itine´raire optimal jusqu’a` S2,j−1 suivi d’un changement de chaˆıne et du poste S1,j . La deuxie`me e´tape consiste a` de´finir la valeur optimale de manie`re re´cursive a` partir des valeurs des solutions optimales des sous-proble`mes. Soit fi[j] le de´lai optimal jusqu’a` Si,j et f∗ le de´lai optimal total. Pour traverser l’ate- lier, il faut atteindre ou bien S1,n ou bien S2,n et sortir de l’atelier. Par 6.2. ORDONNANCEMENTOPTIMAL D’UNE CHAIˆNE DEMONTAGE73 (a) j (b) 9 17 19 32 2929221513 1 2 1 1 221l2[j] l1[j]f1[j] f2[j] j 1 2 3 4 5 2 3 4 5 Entree S2,2 S2,3 S2,4 S2,5 Sortie S1,5S1,4S1,3S1,1 S1,2 23 1 f ∗ = 32 l∗ = 2 3 6 8 2 4 9 8 4 7 7 3 S2,1 5 2 1 5 3 2 3 3 2 1 2 Figure 6.1 – Exemple d’instance du proble`me d’ordonnacement optimal d’une chaˆıne de montage : (a) les donne´es du proble`me et (b) les tables de programmation dynamique. conse´quent, on a f∗ = min(f1[n] + x1, f2[n] + x2). Pour le poste 1 de chaque chaˆıne, il n’y a qu’un itine´raire possible : f1[1] = e1 + a1,1 f2[1] = e2 + a2,1 Pour le poste j = 2, . . . , n de la chaˆıne 1, il y a deux possibilite´s : f1[j] = min(f1[j − 1] + a1,j , f2[j − 1] + t2,j−1 + a1,j), (6.1) et syme´triquement f2[j] = min(f2[j − 1] + a2,j , f1[j − 1] + t1,j−1 + a2,j). (6.2) Les fi[j] sont les valeurs des solutions optimales des sous-proble`mes. Pour pouvoir reconstruire les solutions optimales elles-meˆmes, on de´finit li[j] le nume´ro de la chaˆıne (1 ou 2) dont le poste j − 1 est utilise´ par un chemin 74 CHAPITRE 6. PROGRAMMATION DYNAMIQUE optimal jusqu’au poste Si,j pour j = 2, . . . , n, (li[1] n’est pas de´fini car aucun poste ne vient avant le poste 1). La troisie`me e´tape consiste a` concevoir un algorithme qui calcule en temps polynomial les valeurs fi[j] des solutions optimales et les informations li[j] ne´cessaires a` la construction de ces solutions. L’algorithme suivant fait ce travail en O(n) en utilisant les formules re´cursives (6.1) et (6.2). Il revient 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 a` n faire 4. si f1[j − 1] ≤ f2[j − 1] + t2,j−1 5. alors f1[j]← f1[j − 1] + a1,j 6. l1[j]← 1 7. sinon f1[j]← f2[j − 1] + t2,j−1 + a1,j 8. l1[j]← 2 9. si f2[j − 1] ≤ f1[j − 1] + t1,j−1 10. alors f2[j]← f2[j − 1] + a2,j 11. l2[j]← 2 12. sinon f2[j]← f1[j − 1] + t1,j−1 + 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 quatrie`me et dernie`re e´tape consiste a` reconstruire une solution optimale en utilisant les informations sauvegarde´es a` l’e´tape 3. La proce´dure suivante affiche les postes utilise´s par une solution optimale par ordre de´croissant de nume´ro de poste. Afficher-Postes(l, n) 1. i← l∗ 2. afficher “chaˆıne” i, “poste” n 3. pour j ← n jusqu’a` 2 4. faire i← li[j] 5. afficher “chaˆıne” i, “poste” j − 1 6.3. CHAIˆNE DE MULTIPLICATIONS MATRICIELLES 75 6.3 Chaˆıne de multiplications matricielles On se donne une suite de n matrices A1, . . . , An et on veut calculer le produit A1A2 . . . An (6.3) Une fois que l’on a parenthe´se´ cette expression de manie`re a` supprimer l’am- bigu¨ıte´ lie´e a` l’ordre dans lequel les multiplications doivent eˆtre effectue´es, on peut e´valuer l’expression (6.3) en utilisant comme routine l’algorithme standard de multiplication de deux matrices. On dit d’un produit de matrices qu’il est comple`tement parenthe´se´ dans les deux cas suivants : – c’est une matrice isole´e, – c’est le produit de deux matrices comple`tement parenthe´se´es. Le produit de matrices est associatif par conse´quent quelque soit le pa- renthe´sage on obtient le meˆme re´sultat. Par exemple, si la chaˆıne de matrices est A1, A2, A3, A4, le produit A1A2A3A4 peut eˆtre parenthe´se´ de 5 fac¸ons diffe´rentes : (A1(A2(A3A4))), (A1((A2A3)A4)), ((A1A2)(A3A4)), ((A1(A2A3))A4), (((A1A2)A3)A4). La fac¸on dont on parenthe`se une telle chaˆıne de matrices peut avoir une grande importance sur le nombre d’ope´rations ne´cessaires pour effectuer le produit. Si A est une matrice p × q et B une matrice q × r, la matrice produit est une matrice q× r. La complexite´ du calcul du produit est domine´ par le nombre de multiplications scalaires qui est e´gal a` pqr. Pour illustrer les diffe´rences de couˆts obtenus en adoptant des parenthe´sages diffe´rents, conside´rons un produit de 3 matrices A1, A2, A3 de dimensions respectives 10 × 100, 100 × 5 et 5 × 50. Si on effectue les multiplications dans l’ordre donne´ par le parenthe´sage ((A1A2)A3), le nombre d’ope´rations ne´cessaires est 10×100×5 = 5000 pour obtenir le produit A1A2, qui est une matrice 10× 5, plus 10× 5× 50 = 2500 pour obtenir le produit ((A1A2)A3), soit 7500 ope´rations en tout. Si on adopte le parenthe´sage (A1(A2A3)), le nombre d’ope´rations ne´cessaires est 100×5×50 = 25000 pour obtenir le pro- 76 CHAPITRE 6. PROGRAMMATION DYNAMIQUE duit A2A3, qui est une matrice 100×50, plus 10×100×50 = 50000 pour ob- tenir le produit (A1(A2A3)), soit 75000 ope´rations en tout. Par conse´quent, calculer le produit en accord avec le premier parenthe´sage est 10 fois plus rapide. Notre proble`me se formule de la fac¸on suivante : e´tant donne´ une suite de n matrices A1, . . . , An, avec pi−1×pi la dimension de la matrice Ai, pour i = 1, . . . , n, trouver le parenthe`sage du produit A1A2 . . . An qui minimise le nombre de multiplications scalaires a` effectuer. Remarque : le nombre de parenthe´sages diffe´rents est une fonction exponentielle de n. Par conse´quent, la strate´gie qui consiste a` e´nume´rer tous les parenthe´sages est exclue pour de grandes valeurs de n. 6.3.1 Structure d’un parenthe´sage optimal La premie`re e´tape dans une approche de type programmation dynamique consiste a` identifier la structure des solutions optimales. NotonsAi..j la matrice qui re´sulte de l’e´valuation du produitAiAi+1 . . . Aj . Un parenthe´sage optimal de A1 . . . An de´coupe le produit entre les matrices Ak et Ak+1 pour un certain k compris entre 1 et n − 1. C’est-a`-dire que pour un certain k, on calcule d’abord le produit A1..k et Ak+1..n, ensuite on multiplie ces produits pour obtenir le produit final A1..n. Le couˆt de ce pa- renthe´sage est la somme des couˆts du calcul de A1..k et Ak+1..n et du produit de ces deux matrices. Remarquons que le parenthe´sage de A1..k doit eˆtre lui-meˆme un pa- renthe´sage optimal de A1 . . . Ak, de meˆme le parenthe´sage de Ak+1..n doit eˆtre optimal. Par conse´quent, une solution optimal d’un proble`me de pa- renthe´sage contient elle-meˆme des solutions optimales de sous-proble`mes de parenthe´sage. La pre´sence de sous-structures optimales dans une solution optimale est l’une des caracte´ristiques des proble`mes pour lesquels la pro- grammation dynamique est applicable. 6.3.2 Une solution re´cursive La seconde e´tape dans une approche de type programmation dynamique consiste a` de´finir la valeur de la solution en fonction des solutions optimales de sous-proble`mes. Dans notre cas, un sous-proble`me consiste a` de´terminer le 6.3. CHAIˆNE DE MULTIPLICATIONS MATRICIELLES 77 couˆt minimal d’un parenthe´sage de Ai . . . Aj pour 1 ≤ i ≤ j ≤ n. Soit m[i, j] le nombre minimum de multiplications scalaires ne´cessaires pour obtenir le produit Ai..j . Le nombre minimum de multiplications scalaires ne´cessaires pour obtenir A1..n sera m[1, n]. On peut calculer m[i, j] re´cursivement de la fac¸on suivante. Si i = j, la chaˆıne de matrices se re´duit a` une seule matrice Ai..i = Ai, aucune ope´ration n’est ne´cessaire, et donc m[i, i] = 0 pour i = 1, . . . , n. Pour calculer m[i, j] quand i < j, on se sert de la structure des solutions optimales que nous avons pre´ce´demment mise en e´vidence. Supposons que la solution optimale du sous-proble`me de´coupe le produit Ai . . . Aj entre Ak et Ak+1 avec i ≤ k < j. Alors, m[i, j] est e´gal au nombre minimum de multiplications scalaires pour obtenir Ai..k et Ak+1..j plus le nombre de multiplications ne´cessaires pour ef- fectuer le produit matriciel Ai..kAk+1..j , c’est-a`-dire pi−1pkpj multiplications scalaires, on obtient m[i, j] = m[i, k] +m[k + 1, j] + pi−1pkpj . Cette e´quation re´cursive suppose que nous connaissions la valeur de k, ce qui n’est 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` l’une de ces valeurs, il suffit de les essayer toutes et de garder la meilleure. Par conse´quent, notre de´finition re´cursive pour le couˆt minimum d’un pa- renthe`sage de Ai . . . Aj devient m[i, j] = � 0 si i = j, mini≤k
本文档为【OCaml使用指南】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_797551
暂无简介~
格式:pdf
大小:267KB
软件:PDF阅读器
页数:14
分类:互联网
上传时间:2013-05-26
浏览量:8