Pontificia Universidad Católica Escuela de Ingeniería Departamento de Ingeniería Industrial y de Sistemas Clase 30 Programación Dinámica ICS 1102 Optimización Profesor : Claudio Seebach 20 de noviembre de 2006 Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 2 Programación Dinámica Transforma un problema de optimización complejo en una secuencia de problemas más simples Generalmente se comienza con el final y se trabaja hacia atrás Es aplicable a un rango muy amplio de problemas Está basado en la recursión y en el principio de optimalidad Fue desarrollado por Richard Bellman en 1953 Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 3
El juego de los fósforos Supongamos que hay 30 fósforos en una mesa. Yo comienzo eligiendo 1, 2 o 3 fósforos. Luego mi contrincante debe elegir 1, 2 o 3 fósforos. Se sigue de esta forma hasta que alguien saca el último fósforo. El jugador que toma el último fósforo pierde el juego. como puedo yo (el primer jugador) asegurarme de ganar el juego? se podrá? Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 4 El juego de los fósforos Yo gano si le dejo un fósforo en la mesa a mi contrincante Retrocediendo un paso, yo gano si me toca jugar y quedan 2, 3 o 4 fósforos en la mesa Retrocediendo otro paso, yo gano si dejo 5 fósforos a mi contrincante Retrocediendo otro paso, yo gano si me toca jugar y quedan 6, 7 u 8, para dejarle 5 a mi contrincante. Retrocediendo otro paso, yo gano si dejo 9 fósforos a mi contrincante Conclusión: Yo gano si dejo 1, 5, 9,..., 4n + 1 fósforos en la mesa al jugar. Si hay 30 fósforos, y juego yo, basta sacar uno y dejarle 29 (4 7 + 1) fósforos para ganar Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 5
El problema de la diligencia Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 6 El problema de la diligencia Observación: Escoger siempre el arco más barato no es necesariamente lo mejor: A B F I J A D F? cómo modelar el problema con las metodologías ya vistas? Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 7
El problema de la diligencia Si estamos en H la decisión es obvia (y única) Si estamos en F : c F,H + c H,J o c F,I + c I,J o bien: c F,H + costo óptimo de H a J o c F,I + costo óptimo de I a J Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 8 El problema de la diligencia En el problema hay 4 decisiones que tomar para las etapas: 1, 2, 3,4 En cada etapa estaremos en un estado posible y deberemos tomar una decisión Sea: v n (s) = el costo mínimo para las etapas n, n + 1,..., N si en la etapa n estamos en el estado s Supongamos que d representa el siguiente destino escogido. Sea c(s, d) el costo asociado al arco s d. Entonces: v n (s) = min {c(s, d) + v n+1(d)} d factibles Esta es la recursión básica de programación dinámica. Se resuelve de atrás hacia adelante. Condición de borde: v 5 (J) = 0. Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 9
Ejemplo asignación de recursos a proyectos Hay 3 proyectos en los cuales invertir. Si invierto x i pesos (en millones) en el proyecto i, recibo un Valor Presente Neto (VPN) de r i (x i ): r 1 (x 1 ) = 7x 1 + 2 x 1 > 0 r 2 (x 2 ) = 3x 2 + 7 x 2 > 0 r 3 (x 3 ) = 4x 3 + 5 x 3 > 0 r 1 (0) = r 2 (0) = r 3 (0) = 0 El monto invertido en cada proyecto debe ser un múltiplo entero de 1 millón. Se tiene en la actualidad un presupuesto de $ 6 millones (6 unidades de un millón), cuánto y cómo debo invertir para maximizar el retorno? Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 10 Asignación de recursos a proyectos Matemáticamente el retorno, con N proyectos, está dado por: N max r i (x i ) s. a i=1 N x i = X i=1 x i = 0, 1, 2,..., X En el ejemplo max{r 1 (x 1 ) + r 2 (x 2 ) + r 3 (x 3 )} s. a x 1 + x 2 + x 3 = 6 x i N i = 1, 2, 3 Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 11
Asignación de recursos a proyectos Podemos usar programación dinámica Si solo queda una etapa, el problema sería facil de resolver. retrocediendo, cuando queden dos etapas, tres etapas, etc. Luego, Podemos definir la etapa n como el momento cuando tengo que asignar recursos a las etapas n, n + 1,..., 3. Sea: v n (x) = máximo retorno que puedo obtener de los proyectos n, n + 1,..., N si dispongo de x unidades de capital para ellos. v n (x) = max {r n(x n ) + v n+1 (x x n )} x n =0,1,...,X x n (x) = arg max {r n(x n ) + v n+1 (x x n )} x n =0,1,...,X v N (x) = r N (x) Condición de borde (i.e. un dato) El valor óptimo del problema es v 1 (X). En nuestro ejemplo v 1 (6). Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 12 Asignación de recursos a proyectos Como son multiplos enteros de 1 millón y no podemos tener más de 6 para invertir, los estados posibles son 0, 1, 2, 3, 4, 5 y 6. Determinemos v 3 (x) y x 3 (x): v 3 (0) = 0 x 3 (0) = 0 v 3 (1) = 9 x 3 (1) = 1 v 3 (2) = 13 x 3 (2) = 2 v 3 (3) = 17 x 3 (3) = 3 v 3 (4) = 21 x 3 (4) = 4 v 3 (5) = 25 x 3 (5) = 5 v 3 (6) = 29 x 3 (6) = 6 Esto es, siempre conviene invertir todo el capital si hay un solo proyecto Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 13
Asignación de recursos a proyectos Determinemos v 2 (x) y x 2 (x): x x 2 r 2 (x 2 ) v 3 (x x 2 ) r 2 + v 3 0 0 0 0 0 1 0 0 9 9 1 1 10 0 10 2 0 0 13 13 2 1 10 9 19 2 2 13 0 13 3 0 0 17 17 3 1 10 13 23 3 2 13 9 22 3 3 16 0 16 4 0 0 21 21 4 1 10 17 27 4 2 13 13 26 4 3 16 9 25 x x 2 r 2 (x 2 ) v 3 (x x 2 ) r 2 + v 3 4 4 19 0 19 5 0 0 25 25 5 1 10 21 31 5 2 13 17 30 5 3 16 13 29 5 4 19 9 28 5 5 22 0 22 6 0 0 29 29 6 1 10 25 35 6 2 13 21 34 6 3 16 17 33 6 4 19 13 32 6 5 22 9 31 6 6 25 0 25 Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 14 Asignación de recursos a proyectos De la tabla anterior obtenemos los v 2 (x) y x 2 (x) óptimos: v 2 (0) = 0 x 2 (0) = 0 v 2 (1) = 10 x 2 (1) = 1 v 2 (2) = 19 x 2 (2) = 1 v 2 (3) = 23 x 2 (3) = 1 v 2 (4) = 27 x 2 (4) = 1 v 2 (5) = 31 x 2 (5) = 1 v 2 (6) = 35 x 2 (6) = 1 Si hay capital, siempre conviene invertir un millón en el proyecto 2 y el resto siempre en el 3. Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 15
Asignación de recursos a proyectos Finalmente buscamos v 1 (6) y x 1 (6) óptimo: x x 1 r 1 (x 1 ) v 2 (6 x 1 ) r 1 + v 2 6 0 0 35 35 6 1 9 31 40 6 2 16 27 43 6 3 23 23 46 6 4 30 19 49 6 5 37 10 47 6 6 44 0 44 El retorno óptimo es v 1 (6) = 49 y la inversión óptima de los $ 6 mill. es $ 4 en el primero, $ 1 en el segundo y $ 1 en el tercer proyecto. v 1 (6) = 30 + 10 + 9 = 49 x 1 (6) = 4 v 2 (2) = 10 + 9 = 19 x 2 (2) = 1 v 3 (1) = 9 x 3 (1) = 1 Apuntes de Clases Optimización Claudio Seebach Programación Dinámica 16