La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Programación Dinámica

Presentaciones similares


Presentación del tema: "Programación Dinámica"— Transcripción de la presentación:

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

2 La PD está basada en el principio de optimalidad de Bellman:
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 ¿Cual es el camino más corto desde 0 a 6?
EJEMPLO Primera etapa Cuarta etapa Tercera etapa Sexta etapa 1 4 2 2 2 2 3 6 Segunda etapa Quinta etapa 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) 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) 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) 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 CLASES DE FORMULACION EN PD (II)
f (x1) f (x2) f (x3) f (x4) f (x5) f (x6) f (x7) Nivel 1 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} 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 FORMULACION MONADICA SERIE (II)
Nivel r Nivel 0 v10 v11 v1n-1 c10,0 c1n-1,n-1 Nivel 1 v20 v21 v2n-1 c20,0 c2n-1,n-1 Nivel 2 Vr-20 Vr-21 Vr-2n-1 cr-1n-1,n-1 cr-10,0 Nivel r-2 vr-10 vr-11 vr-1n-1 cr-10,R cr-1n-1,R cr-11,R Nivel r-1 c0S,0 c0S,1 c0S,n-1 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 FORMULACION MONADICA SERIE (IV)
cl0,0 cl0,1 cl0,2 … cl0,n Cl+10 cl1,0 cl0,1 cl0,2 … cl0,n-1 x Cl = Ml,l+1 x Cl+1 = Cl cln-1,0 cln-1,1 cln-1,2 … cln-1,n Cl+1n-1 cambiando + por min cambiando x por + C20 cr-1n-1,n-1 cr-10,0 c20,0 c2n-1,n-1 c10,0 S R c10,1 c10,n-1 C21 C2n-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 FORMULACION MONADICA SERIE (X)
 wi vi  c (no superar la capacidad) i= 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) Tamaño de la tabla F que veremos a continuació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]. 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 FORMULACION MONADICA SERIE (XII)
El algoritmo secuencial de este problema de PD mantiene una table F de tamaño n x c F[i,j] Dos entradas de la fila anterior. =>  (nc) F[i-1,j] F[i-1,j-wi] no se mete objeto i-1 se mete objeto i-1 Objetos Tabla F Se busca el máximo beneficio con el primer objeto probando sacos de distinta capacidad n ... i ... 2 X X 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 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 FORMULACION MONADICA NO SERIE (II)
B a s b z A 0 c 1 a 2 d 3 b 4 r 5 z 6 F[i,j-1] Comunicaciones F[i-1,j] 1 2 1 3 F[i-1,j-1] 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 La computación por diagonales permite el paralelismo.    0    0 Pero el balanceo de carga es malo.            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. Orden Primer producto Segundo producto Total (A1 x A2) x A3 10 x 20 x 30 10 x 30 x 40 18000 A1 x (A2 x A3) 20 x 30 x 40 10 x 20 x 40 32000

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 j = i, 0 < i  n

40 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 producto de cadenas de matrices de longitud 1 diagonal 0 producto de cadenas de matrices de longitud 2 diagonal 1 producto de cadenas de matrices de longitud 3 diagonal 2 Para un problema de tamaño n la solución es calcular C[1,n] producto de cadenas de matrices de longitud 4 diagonal 3

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 MUCHAS GRACIAS POR SU PACIENCIA Y ATENCION
FIN DE LA PRESENTACION MUCHAS GRACIAS POR SU PACIENCIA Y ATENCION


Descargar ppt "Programación Dinámica"

Presentaciones similares


Anuncios Google