Está en la página 1de 8

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 :

cF,H + cH,J o cF,I + cI,J

• o bien:
cF,H + costo óptimo de H a J o cF,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:
vn(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:
vn(s) = min {c(s, d) + vn+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: v5(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 xi pesos (en millones) en el proyecto i, recibo un Valor Pre-
sente Neto (VPN) de ri(xi):
r1(x1) = 7x1 + 2 x1 > 0
r2(x2) = 3x2 + 7 x2 > 0
r3(x3) = 4x3 + 5 x3 > 0
r1(0) = r2(0) = r3(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 ri(xi)
i=1
N
!
s. a xi = X
i=1
xi = 0, 1, 2, . . . , X
• En el ejemplo
max{r1(x1) + r2(x2) + r3(x3)}
s. a x1 + x2 + x3 = 6
xi ∈ 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. Luego,
retrocediendo, cuando queden dos etapas, tres etapas, etc.
• Podemos definir la etapa n como el momento cuando tengo que asignar
recursos a las etapas n, n + 1, . . . , 3.
• Sea:
vn(x) = máximo retorno que puedo obtener de los proyectos
n, n + 1, . . . , N si dispongo de x unidades de capital para ellos.
vn(x) = max {rn(xn) + vn+1(x − xn)}
xn =0,1,...,X
xn(x) = arg max {rn(xn) + vn+1(x − xn)}
xn =0,1,...,X
vN (x) = rN (x) Condición de borde (i.e. un dato)
• El valor óptimo del problema es v1(X). En nuestro ejemplo v1(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 v3(x) y x3(x):

v3(0) = 0 x3(0) = 0
v3(1) = 9 x3(1) = 1
v3(2) = 13 x3(2) = 2
v3(3) = 17 x3(3) = 3
v3(4) = 21 x3(4) = 4
v3(5) = 25 x3(5) = 5
v3(6) = 29 x3(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 v2(x) y x2(x):


x x2 r2(x2) v3(x − x2) r2 + v3 x x2 r2(x2) v3(x − x2) r2 + v3
0 0 0 0 0∗ 4 4 19 0 19
1 0 0 9 9 5 0 0 25 25
1 1 10 0 10∗ 5 1 10 21 31∗
2 0 0 13 13 5 2 13 17 30
2 1 10 9 19∗ 5 3 16 13 29
2 2 13 0 13 5 4 19 9 28
3 0 0 17 17 5 5 22 0 22
3 1 10 13 23∗ 6 0 0 29 29
3 2 13 9 22 6 1 10 25 35∗
3 3 16 0 16 6 2 13 21 34
4 0 0 21 21 6 3 16 17 33
4 1 10 17 27∗ 6 4 19 13 32
4 2 13 13 26 6 5 22 9 31
4 3 16 9 25 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 v2(x) y x2(x) óptimos:

v2(0) = 0 x2(0) = 0
v2(1) = 10 x2(1) = 1
v2(2) = 19 x2(2) = 1
v2(3) = 23 x2(3) = 1
v2(4) = 27 x2(4) = 1
v2(5) = 31 x2(5) = 1
v2(6) = 35 x2(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 v1(6) y x1(6) óptimo:


x x1 r1(x1) v2(6 − x1) r1 + v2
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 v1(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.
v1(6) = 30 + 10 + 9 = 49 x1(6) = 4
v2(2) = 10 + 9 = 19 x2(2) = 1
v3(1) = 9 x3(1) = 1

Apuntes de Clases • Optimización • Claudio Seebach Programación Dinámica • 16

También podría gustarte