1 / 43

Programación Dinámica

Programación Dinámica. Alfonso López Murcia. INTRODUCCION. La Programación Dinámica (PD) intenta mejorar la eficiencia del cálculo de problemas descomponiéndolos en subproblemas de menor tamaño, más fáciles de de resolver. La PD está basada en el principio de optimalidad de Bellman:

romaine
Download Presentation

Programación Dinámica

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programación Dinámica Alfonso López Murcia

  2. INTRODUCCION • La Programación Dinámica (PD) intenta mejorar la eficiencia del cálculo de problemas descomponiéndolos en subproblemas de menor tamaño, más fáciles de de resolver. • La PD está basada en el principio de optimalidad de Bellman: “Cualquier subsecuencia de decisiones de una secuencia óptima de decisiones que resuelve un problema también debe ser óptima respecto al suproblema resuelto.”

  3. INTRODUCCION • La PD resuelve el problema en etapas (problemas multietápicos). • En cada etapa interviene una variable de optimización. • Los cálculos de las diferentes etapas se enlazan de forma recursiva para generar la solución óptima. • La PD se aplica en problemas como calendarización (scheduling), edición de cadenas, almacenamiento e inventario.

  4. Primera etapa Cuarta etapa Tercera etapa Sexta etapa Segunda etapa Quinta etapa EJEMPLO 1 4 2 2 2 2 0 3 6 3 4 1 1 2 5 ¿Cual es el camino más corto desde 0 a 6?

  5. FORMULACION DEL PROBLEMA (I) 1 4 c(0,1) c(1,3) c(3,4) c(4,6) 0 3 6 c(0,2) c(2,3) c(3,5) c(5,6) 2 5 0 = inicio, n-1 = meta, 0 < x < n-1 nodos intermedios Si  camino entonces c(i,j) = valor  i < j Si  camino entonces c(i,j) =   i < j f(x) denota el camino más corto desde 0 al nodo x f(n-1) es la solución del problema

  6. FORMULACION DEL PROBLEMA (II) 1 4 c(0,1) c(1,3) c(3,4) c(4,6) 0 3 6 c(0,2) c(2,3) c(3,5) c(5,6) 2 5 f(0) = 0 f(1) = min { f(0) + c(0,1) } f(2) = min { f(1) + c(1,2) , f(0) + c(0,2) } f(3) = min { f(2) + c(2,3) , f(1) + c(1,3) , f(0) + c(0,3) } f(n-1) = min { f(n-2) + c(n-2,n-1, ... , f(0) + c(0,3) }

  7. FORMULACION DEL PROBLEMA (III) 1 4 c(0,1) c(1,3) c(3,4) c(4,6) 0 3 6 c(0,2) c(2,3) c(3,5) c(5,6) 2 5 0 x = 0 f(x) = min { f(j) + c(j,x) } 1  x  n –1 0 j x

  8. CLASES DE FORMULACION EN PD (I) 0 x = 0 f(x) = min { f(j) + c(j,x) } 1  x  n –1 0 j x • La expresión a minimizar (o maximizar) se denomina ecuación de optimización. • Si hay un único término recursivo en la ecuación de optimización ( f(j) ) se denomina formulación de un problema de programación dinámica monádica (monadic). • En caso contrario se denomina formulación de PD poliádica (polyadic).

  9. r1=g(f(x1),f(x3) r2=g(f(x4),f(x5) r3=g(f(x2),f(x6),f(x7) 2 3 f(x8)=min{r1,r2,r3} CLASES DE FORMULACION EN PD (II) f (x1) f (x2) f (x3) f (x4) f (x5) f (x6) f (x7) Nivel 1 minimización composición • Si el grafo es acíclico (cada nivel depende de los resultados del nivel inmediatamente anterior) hablamos de formulación en serie. • Hay cuatro tipos: monádica serie, poliádica serie, monádica no serie y poliádica no serie.

  10. FORMULACION MONADICA SERIE (I) • Dos ejemplos: el camino más corto y el problema de la mochila 0-1. • Aspectos del problema del camino más corto: • Grafo multietapa con r+1 niveles. • Los niveles 0 (nodo S) y r (nodo R) tienen un nodo. • Cada nodo del nivel i está conectado a todos los nodos del nivel i+1. • El i-esimo nodo del nivel l se denota como vli • El coste de ir desde vli a vl+1j se denota como cli,j • El coste desde vli hasta R se denota como Cli

  11. Nivel 0 Nivel 1 Nivel 2 Nivel r-2 Nivel r-1 Nivel r v10 v20 Vr-20 vr-10 c10,0 c20,0 cr-10,0 c0S,0 cr-10,R v11 v21 Vr-21 vr-11 R c0S,1 cr-11,R S c0S,n-1 v1n-1 v2n-1 Vr-2n-1 vr-1n-1 cr-1n-1,R c1n-1,n-1 c2n-1,n-1 cr-1n-1,n-1 FORMULACION MONADICA SERIE (II) • Los n nodos del nivel l se representan con el vector [Cl0, Cl1, … , Cln] y se denota como Cl • El problema se reduce a calcular C0 = [C00]

  12. FORMULACION MONADICA SERIE (III) • Por el principio de optimalidad cualquier camino desde vli a R incluye vl+1j (0jn-1) • El coste desde vli hasta R (Cli) es la suma del coste desde vli a vl+1j mas el coste desde vl+1j hasta R (Cl+1j), en definitiva: Cli = min { cli,j + Cl+1j | j en nivel l+1 } • Vemos un único término recursivo, por tanto es una formulación monádica en serie.

  13. C20 c10,0 c20,0 cr-10,0 cambiando + por min C21 cambiando x por + c10,1 R S c10,n-1 C2n-1 c2n-1,n-1 cr-1n-1,n-1 FORMULACION MONADICA SERIE (IV) cl0,0 cl0,1 cl0,2… cl0,n-1 Cl+10 cl1,0 cl0,1 cl0,2… cl0,n-1 x Cl+11 = Ml,l+1 x Cl+1 = Cl . . . . . . . . . . . . . . . cln-1,0 cln-1,1 cln-1,2… cln-1,n-1 Cl+1n-1

  14. FORMULACION MONADICA SERIE (V) • Algoritmo serie para la multiplicación de una matriz A (n x n) por un vector x (n x 1): for i := 0 to n-1 do y[i] := 0; for j := 0 to n-1 do y[i]:= y[i] + A[i,j] . x[j]; • Asumiendo que las operaciones de suma y producto duran una unidad de tiempo el coste secuencial de computar cada Cl es  (n2). A[0,0] ... A[0,n-1] x[0] A[1,0] ... A[1,n-1] x[1] ..... ... ..... .... A[n-1,0] ... A[n-1,n-1] x[n-1]

  15. FORMULACION MONADICA SERIE (VI) • En memoria compartida: • si el número de procesadores p = n • cada procesador tiene accesibles los datos que necesita (toda una fila de A y el vector x) • la multiplicación de una fila de A por x se realiza en cada procesador en  (n) • el tiempo empleando en la resolución del problema completo C0 es  (rn)

  16. FORMULACION MONADICA SERIE (VII) • En un hipercubo con n < p: • cada procesador tiene n/p filas de A y una porción del vector x • se necesitan comunicaciones todos con todos => ts log p + tw n • cada procesador consume n2/p en cálculo • el tiempo paralelo del problema es n2/p + ts log p + tw n • si n = p el tiempo total es r (n + ts log n + tw n)

  17. FORMULACION MONADICA SERIE (VIII) • Si los nodos tienen pocos sucesores entonces en la matriz Ml,l+1 aparecen muchos . • No es preciso hacer la suma (x +  = ) ni la minimización (min{x, }=x) cuando se tiene el valor . • Tenemos una matriz dispersa debido a las operaciones de suma y minimización. • La complejidad computacional se reduce utilizando algoritmos paralelos para matrices dispersas (ver capítulo 11 en libro de Kumar).

  18. FORMULACION MONADICA SERIE (IX) • El problema unidimensional de la mochila 0-1 se caracteriza por: • una mochila con capacidad c • tenemos 1, 2, …, n objetos • cada objeto i tiene un peso wi y un beneficicio pi • el vector solución es v = [v1, …, vn]. Si el objeto iésimo se mete en la mochila entonces vi=1, en caso contrario vi=0

  19. Tamaño de la tabla F que veremos a continuación FORMULACION MONADICA SERIE (X) n •  wi vi  c (no superar la capacidad) i=1 n • max  pi vi (maximizar el beneficio) i=1 • La forma más ruda de resolverlo es considerar todas las 2n posibles combinaciones. • Nos interesa resolverlo con PD cuando n.c < 2n => c = O(2n/n)

  20. FORMULACION MONADICA SERIE (XI) • Suponiendo F[i,x] el máximo beneficio para una mochila con capacidad x usando unicamente los objetos {1, 2, …, i} entonces la solución al problema es calcular F[n,c]. 0 x  0, i = 0 • F[i,x] = -  x  0, i = 0 • max { F[i-1,x],(F[i-1,x-wi]+pi)} 1  i  n • 0 i n • Cuando la capacidad es x tenemos dos casos: Un objeto se incluye o no en base al criterio de máximo beneficio 1) no se mete i => no cambia x ni el beneficio 2) si se mete i => x = x – wi y el beneficio aumenta pi

  21. =>  (nc) Dos entradas de la fila anterior. F[i,j] se mete objeto i-1 no se mete objeto i-1 F[i-1,j-wi] F[i-1,j] X X X X X X X X X X X X X X X X X X FORMULACION MONADICA SERIE (XII) • El algoritmo secuencial de este problema de PD mantiene una table F de tamaño n x c Objetos Tabla F Se busca el máximo beneficio con el primer objeto probando sacos de distinta capacidad n ... i ... 2 1 ... ... ... 1 2 j-wi j c-1 c Capac.

  22. FORMULACION MONADICA SERIE (XIII) • El nivel i depende del nivel i-1 => es serie. • F[i,j] depende de un subproblema => monádica • En un modelo de memoria compartida: • lectura concurrente y escritura exclusiva (CREW) • con c procesadores (P0, …, Pc-1) por columnas • no hay problemas de acceso a memoria pues comparten lectura y escriben independientemente • Pr-1 lee cualquier F[i,j] en un tiempo constante => cada iteración tiene un tiempo constante =>  (n) => tiempo total  (nc) => coste óptimo.

  23. FORMULACION MONADICA SERIE (XIV) • Si tenemos un hipercubo con c procesadores: • cada procesador tiene una columna • cada procesador computa su celda F[j,r] • F[j,r] precisa F[j-1,r] y F[j-1,r-wj] • F[j-1,r] está local • F[j-1,r-wj] en otro procesador • comunicación con una permutación circular • tc + ts + tw + th log c => O(n log c) • O(nc log c) => no es de coste óptimo 6 7 2 3 4 5 0 1 cada iteración las n iteraciones

  24. FORMULACION MONADICA SERIE (XV) • Si tenemos un hipercubo con p procesadores: • cada procesador computa c/p elementos de F • en la iteración j-ésima P0 calcula F[j,1], …, F[j,c/p], P1 calcula F[j,c/p+1], …, F[j,2c/p], etc. • F[j,k] precisa F[j-1,k] y F[j-1,k-wj] • F[j-1,k] está local • F[j-1,k-wj] está local o en otro procesador • n (tc c/p + 2ts + tw c/p + 2th log p) => O(n c/p + n log p) => O(nc + np log p) • si c = (p log p) => es de coste óptimo

  25. FORMULACION MONADICA NO SERIE (I) • Veamos el problema de la subsecuencia común mayor (SCM): • dos secuencias A = {a1, …, an} y B = {b1, …, bm} • si A={c,a,d,b,r,z} y B={a,s,b,z} => SCM={a,b,z} • F[i,j] denota la longitud de la SCM de los i primeros elementos de A y los j primeros elementos de B. Su formulación en PD es: 0 si i=0 ó j=0 F[i,j] = F[i-1,j-1]+1 si i,j>0 y xi=yj max{F[i,j-1],F[i-1]} si i,j>0 y xiyj • El problema de la SCM es determinar F[n,m].

  26. 0 0 0 0 0 Comunicaciones 0 0 0 0 0 F[i,j-1] 0 1 1 1 1 F[i-1,j] 0 1 1 1 1 0 1 1 2 2 F[i-1,j-1] 0 2 2 2 2 0 2 2 2 3 FORMULACION MONADICA NO SERIE (II) B a s b z 0 1 2 3 4 A 0 c 1 a 2 d 3 b 4 r 5 z 6 si i,j>0 y xiyj entonces max{F[i,j-1],F[i-1,j]} si i,j>0 y xi=yj entonces F[i-1,j-1]+1 si i=0 ó j=0 entonces F[i,j]=0

  27. FORMULACION MONADICA NO SERIE (III) • F[i,j] depende de las soluciones de niveles precedentes => es monádica. • Cada nodo depende de dos subproblemas de niveles inmediatamente anteriores y un subproblema de dos niveles previos => no es serie. • La implementación secuencial de la formulación del problema en PD completa la tabla F por filas. • Cada entrada se computa en un tiempo constante => la complejidad total es  (nm).

  28. FORMULACION MONADICA NO SERIE (IV) • En la formulación paralela suponemos n = m. • En un modelo de memoria compartida CREW con n procesadores asignados por columnas: P0 P1 P2 Pn-1 La computación por columnas anula el paralelismo. 0 0 0 0 0   0 0 0 0 0 0   0 La computación por diagonales permite el paralelismo. 0 0 0 0 0   0 0 0 0 0 0   0 Pero el balanceo de carga es malo.         0 0 0 0 0   0

  29. FORMULACION MONADICA NO SERIE (V) • Acceso a memoria sin problemas => la diagonal se computa en un tiempo constante. • Hay 2n-1 diagonales =>  (n) iteraciones. • El tiempo del algoritmo paralelo es  (n2) como en el caso secuencial => coste óptimo. P0 P1 Pn-1 En memoria distribuida:     Tiempo de envío desde un procesador vecino ts + tw     Tiempo de una iteración tc + ts + tw . . . .     . . Tp = n (2n – 1) (tc + ts + tw)     iteraciones totales

  30. FORMULACION MONADICA NO SERIE (VI) • En un hipercubo con n = 8. • Eficiencia = n2 tc / ( n (2n – 1) (tc + ts+ tw) ) • La eficiencia de la formulación paralela viene dada por la localización de los datos (vecinos). P0 P1 P7 P4 P5     asignación de procesadores por proximidad P3 P2     P7 P6 . . . .     . . P0 P1     tiempo secuencial tiempo paralelo

  31. ¿SABEMOS POR DONDE VAMOS? • Hemos visto las formulaciones: • monádica serie (estudiados los problemas del camino más corto y la mochila 0-1). • monádica no serie (analizado el problema de la subsecuencia común mayor). • Faltan por ver: • poliádica serie • poliádica no serie

  32. FORMULACION POLIADICA SERIE (I) • El algoritmo de Floyd para determinar los caminos más cortos (CMC) entre todos los pares de nodos en un grafo es una formulación de programación dinámica poliádica serie. • Elementos del problema: • tenemos un grafo G formado por un conjunto de nodos V, arcos E y pesos w. G = (V,E,w). • el arco que une i con j tiene un peso ci,j • el algoritmo de Floyd calcula coste di,j del CMC entre cualquier par de nodos (i,j) de V.

  33. FORMULACION POLIADICA SERIE (II) • Si denotamos dki,j al costo mínimo del camino entre el nodo i hasta j usando únicamente los nodos v1, v1, …, vk el algoritmo secuencial es: for k = 1 to n do for i = 1 to n do for j = 1 to n do dki,j := min (dk-1i,j , dk-1i,k + dk-1k,j) • La complejidad del algoritmo es  (n3) n matrices de n x n obtiene una matriz n x n desde vi a vk y desde vk a vj

  34. FORMULACION POLIADICA SERIE (III) • La ecuación recursiva en PD es: ci,j k=0 dki,j = min{dk-1i,j , (dk-1i,k + dk-1k,j)} 0k n-1 • dki,j se divide en n niveles, uno por cada k • Los elementos del nivel k+1 dependen unicamente del nivel k => es serie. • dki,j necesita componer las soluciones de los subproblemas dk-1i,k y dk-1k,j => es poliádica.

  35. FORMULACION POLIADICA SERIE (IV) • En un modelo de memoria compartida CREW: • tenemos n2 procesadores • los procesadores se organizan en una array bidimensional (n x n) • Pi,j calcula dki,j para k = 1 , … , n => balanceado • en cada iteración k el procesador Pi,j necesita los valores dk-1i,j , dk-1i,k y dk-1k,j que ha calculado anteriormente => no hay problemas de lectura o escritura en memoria •  (n3) => la formulación es de costo óptimo

  36. FORMULACION POLIADICA SERIE (V) • En memoria distribuida: • denotamos dki,j como la matriz Dk • computar Dk es tarea de varios procesadores • Dk se divide en p cuadrados de (n/p) x (n/p) y cada cuadrado se asigna a un procesador En la iteración k-ésima cada p procesador envía a los de su misma columna y fila ... . . . . . . . . . . . . . . . . . . P0 ... . . . . . . . . . dk-1l,k en la misma fila dkl,r necesita dk-1k,r en la misma columna ... Pp-1

  37. FORMULACION POLIADICA SERIE (VI) • Suponiendo un hipercubo con p procesadores: • a cada procesador se le asignan n2/p elementos de la matriz Dk => tc es  (n2/p) • en cada iteración la fila k-ésima y la columna k-ésima de procesadores hacen comunicaciones uno a todos =>  ((n log p) / p) • la sincronización requiere  (log p) • tp =  (n3/p) +  ((n2 log p) / p) computación comunicación

  38. FORMULACION POLIADICA NO SERIE (I) • El orden de multiplicación de matrices influye en el volumen de operaciones. Por ejemplo: A1 de dimensión 10 x 20 A2 de dimensión 20 x 30 A3 de dimensión 30 x 40 Debemos encontrar el orden adecuado de los paréntesis que minimice el número de operaciones.

  39. FORMULACION POLIADICA NO SERIE (II) • Sea C[i,j] el coste óptimo de multiplicar las matrices Ai, …, Aj. • Ai, …, Aj se puede expresar como Ai, …, Ak (ri-1 x rk) por Ak+1, …, Aj (rk-1 x rj) coste ri-1 rk rj • El coste para (Ai, …, Ak) (Ak+1, …, Aj) es C[i,k] + C[k+1,j] + ri-1 rk rj, en consecuencia: min {C[i,k] + C[k+1,j]+ ri-1 rk rj} 1i<jn C[i,j] = i  k  j 0 j = i, 0 < i  n

  40. producto de cadenas de matrices de longitud 1 producto de cadenas de matrices de longitud 2 producto de cadenas de matrices de longitud 3 producto de cadenas de matrices de longitud 4 Para un problema de tamaño n la solución es calcular C[1,n] diagonal 3 diagonal 2 diagonal 1 diagonal 0 FORMULACION POLIADICA NO SERIE (III) • Para cuatro matrices se calcularía C[1,1] , C[2,2] , C[3,3] , C[4,4] C[1,2] , C[2,3] , C[3,4] C[1,3] , C[2,4] C[1,4] • El orden de computación es diagonal P0 P1 P2 P3 1,1 1,2 1,3 1,4 2,1 2,2 2,3 2,4 3,1 3,2 3,3 3,4 4,1 4,2 4,3 4,4

  41. FORMULACION POLIADICA NO SERIE (IV) • El tiempo secuencial sería: • computar (n-1) cadenas de longitud dos consume un tiempo de (n-1) tc • computar (n-2) cadenas de longitud tres lleva un tiempo (n-1) 2tc • en el paso final, computar una cadena de longitud n acarrea (n-1) tc ts = (n–1) tc + (n-2) 2tc + … + (n-1) tc ts (n3/6) tc =>  (n3)

  42. FORMULACION POLIADICA NO SERIE (V) • En memoria distribuida: • consideremos un anillo de n procesadores • en cada paso cada procesador computa un elemento de la diagonal => balanceo malo • cada procesador envía su valor al resto haciendo un broadcast todos con todos. •  (n3) => algoritmo paralelo de coste óptimo • en un anillo p  n tenemos tp =  (n3/p) +  (n2) computación comunicación

  43. FIN DE LA PRESENTACION MUCHAS GRACIAS POR SU PACIENCIA Y ATENCION

More Related