Вы находитесь на странице: 1из 19

PROGRAMACIÓN DINÁMICA DETERMINISTA

Lic. Mario Iván Cruz Chin


Septiembre, 2009
PROGRAMACIÓN DINÁMICA
La programación dinámica es una técnica que se
utiliza para resolver diversos problemas de
optimización.
Esta técnica llega a la solución trabajando hacia
atrás partiendo del final del problema hacia el
principio, por lo que un problema enorme e
inmanejable se convierte en una serie de
problemas más pequeños y manejables.
Dos Acertijos para entender la PD
 Acertijo de las cerillas:
 Suponga que hay 30 cerillas sobre una mesa. Yo empiezo
eligiendo 1, 2 ó 3 cerillas. Luego mi contrincante debe
tomar 1, 2 ó 3 cerillas. Así continuamos hasta que alguno
de los jugadores toma la última cerilla. Este jugador es el
que pierde. ¿Cómo puedo yo (el primer jugador) estar
seguro de ganar el juego?
Dos Acertijos para entender la PD
 Acertijo de las tazas de leche
 Tengo una taza de 9 onzas y otra de 4 onzas. Mi madre
me pidió traer a casa exactamente 6 onzas de leche.
¿Cómo puedo cumplir lo pedido?
Naturaleza recursiva de la PD
 Los cálculos de programación dinámica se hacen en
forma recursiva, ya que la solución óptima de un
subproblema se usa como dato para el siguiente
subproblema.
 Para cuando se resuelve el último subproblema queda
a la mano la solución óptima de todo el problema.
 La forma en la que se hacen los cálculos recursivos
dependen de cómo se descomponga el problema
original.
 En particular, los subproblemas se vinculan
normalmente mediante restricciones comunes.
Un problema de redes…
 Joe Cougar vive en Nueva York, pero quiere viajar en su
automóvil hasta Los Ángeles en busca de fama y fortuna. Los
fondos de Joe son limitados, así que decide pasar cada noche de
su viaje en la casa de un amigo. Joe tiene amigos en cada ciudad.
 Joe sabe que puede viajar un día a la vez y avanzar por etapas.
 Luego de 4 días de manejar Joe puede llegar finalmente a Los
Ángeles.
 Para minimizar la cantidad de millas recorridas, ¿dónde debe Joe
pasar cada noche del viaje?
Columbus Kansas City
2 5

Denver
8

Nueva York Nashville Omaha Los Ángeles


1 3 6 10

San Antonio
9

Lousville Dallas
4 7
Solución con programación
dinámica
 Se determinará yendo hacia atrás (Recursividad)
 Primero clasificamos todas las ciudades en la que Joe
puede estar al principio del n-ésimo día de su viaje
como ciudades de la etapa n.
 Etapa 1: Nueva York
 Etapa 2: Columbus, Nashville, Louisville
 Etapa 3: Kansas City, Omaha, Dallas
 Etapa 4: Denver, San Antonio
 Etapa 5: Los Ángeles
Columbus 680 Kansas City
2 5
610
580
790

550 Denver
8
1030
540
790

Nueva York 900 Nashville 760 Omaha Los Ángeles


1 3 6 10
940 Etapa 5
Etapa 1 1390
660

San Antonio
770 790
510 9
1050
700 Etapa 4
270

Lousville Dallas
4 830 7
Etapa 2 Etapa 3
Algoritmo para Recursividad
 La idea de trabajar hacia atrás implica que debemos empezar por
resolver un problema fácil que con el tiempo nos servirá para
resolver uno más complejo.
 Empezamos por determinar la trayectoria más corta a Los
Ángeles desde cada ciudad de dónde hay sólo un día de viaje en
automóvil (ciudades de la etapa 4).
 Luego usamos esta información para encontrar el camino más
corto hasta Los Ángeles desde cada ciudad donde hay 2 días de
manejo (ciudades de la etapa 3).
 Con esta información ya somos capaces de hallar el camino más
corto desde cada ciudad que esté a 3 días de viaje (ciudades de la
etapa 2).
 Encontramos, por último, la trayectoria más corta a Los Ángeles
desde cada ciudad que está a 4 días de viaje (hay sólo una: Nueva
York).
Criterios básicos
 Con el fin de simplificar la exposición usamos los
números 1, 2, 3,…, 10 dados en la figura para nombrar
las 10 ciudades.
 Definimos también cij como las millas entre la ciudad i
y la ciudad j. Por ejemplo, c35 = 580 son las millas entre
Nashville y Kansas City.
 Hacemos ft(i) la distancia del camino más corto desde
la ciudad i hasta Los Ángeles, dado que la ciudad i es
una ciudad de la etapa t.
Columbus 680 Kansas City
2 5
610
580
790

550 Denver
8
1030
540
790

Nueva York 900 Nashville 760 Omaha Los Ángeles


1 3 6 10
940 Etapa 5
Etapa 1 1390
660

San Antonio
770 790
510 9
1050
700 Etapa 4
270

Lousville Dallas
4 830 7
Etapa 2 Etapa 3
Cálculos de la Etapa 4
 Determinamos el camino más corto
desde cada ciudad de la etapa 4 hasta L.
Denver
A. 8

 Como hay un solo camino desde cada 1030

ciudad, observamos que: Los Ángeles


10
 f4(8) = 1030 Etapa 5
1390

 f4(9) = 1390 San Antonio


9

Etapa 4
Cálculos de la Etapa 3
Kansas City
 Determinamos el camino más corto desde 5
610
cada ciudad de la etapa 3 hasta L. A.
790
 Determinar f3(5) Denver
 C58 + f4(8) = 610 + 1030 = 1640 * (5-8-10) 8
103
 C59 + f4(9) = 790 + 1390 = 2180 540
0
Omaha Los
 Determinar f3(6) Ángeles
6
 C68 + f4(8) = 540 + 1030 = 1570 * (6-8-10) 940
139 E 10
5
0
 C69 + f4(9) = 940 + 1390 = 2330 San Antonio
790
9
 Determinar f3(7) E4
270
 C78 + f4(8) = 790 + 1030 = 1820
Dallas
 C79 + f4(9) = 270 + 1390 = 1660 * (7-9-10) 7
E3
Cálculos de la Etapa 2
 Determinamos el camino más corto 2 68 5
desde cada ciudad de la etapa 2 hasta L. 0
58
61
A. 0 79
0
0
 Determinar f2(2) 8

 C25 + f3(5) = 680 + 1640 = 2320* (2-5-8- 79 54 10


30
0
10) 3 76
0 6 10
0
 C26 + f3(6) = 790 + 1570 = 2360 94 13 E5
66 0
 C27 + f3(7) = 1050 + 1660 = 2710 0
79
9
90
51
 Determinar f2(3) 0
70
10
50
0
27
E4
0
 C35 + f3(5) = 580 + 1640 = 2220* (3-5-8-10) 4 7 0
83
 C36 + f3(6) = 750 + 1570 = 2330 E2 0 E3

 C37 + f3(7) = 660 + 1660 = 2320


 Determinar f2(4)
 C45 + f4(5) = 510 + 1640 = 2150* (4-5-8-10)
 C46 + f4(6) = 700 + 1570 = 2270
 C47 + f4(7) = 830 + 1660 = 2490
Cálculos de la Etapa 1
 Como ya conocemos f2(2), f2(3) y f2(4), podemos ir hacia atrás
una etapa más para determinar f1(1) y, por lo tanto, el camino más
corto de la ciudad 1 a la 10.
 Obsérvese que el camino más corto desde la c1 a la c10 debe
empezar por ir a la ciudad 2, 3 ó a la 4.
 Esto significa que el camino más corto desde la c1 hasta la c10
tiene que ser uno de los siguientes:
 Camino 1. Ir desde la 1 hasta la 2, luego seguir el camino más corto
desde la 2 hasta la 10. [C12 + f2(2) ]
 Camino 2. Ir desde la 1 hasta la 3, luego seguir el camino más corto
desde la 3 hasta la 10. [C13 + f2(3) ]
 Camino 3. Ir desde la 1 hasta la 4, luego seguir el camino más corto
desde la 4 hasta la 10. [C14 + f2(4) ]
Continuación…
 Determinar f1(1):
 C12 + f2(2) = 550 + 2320 = 2870
 C13 + f2(3) = 900 + 2220 = 3120
 C14 + f2(4) = 770 + 2150 = 2920
 Camino óptimo: 1-2-5-8-10
 Desde Nueva York hasta Los Ángeles pasará por:
 Nueva York, Columbus, Kansas City, Denver y Los
Ángeles.
 Este camino tiene una distancia de f1(1) = 2780 millas
2 6 5

1
3
3

2 8

3
6
4

4 3 2 6 10
1

3
4
4

9
3 3
3
6
1
3

4 7
5

Вам также может понравиться