SlideShare una empresa de Scribd logo
1 de 19
PROGRAMACIÓN DINAMICA

POR

JUAN ESTEBAN PUERTA CANO
ROBINSON CARDONA

DOCENTE
RICARDO BOTETRO
ASIGNATURA
ANALISIS DE ALGORITMOS
FECHA DE ENTREGA
31 DE OCTUBRE

INTITUCIÓN UNIVERSITARIA
TECNOLOGICO DE ANTIOQUIA
FACULTAD DE INGENIARIA

MEDELLÍN
2013-II
CONTENIDO

TÍTULO ....................................................................Error! Bookmark not defined.
INTRODUCCIÓN .....................................................Error! Bookmark not defined.
PLANTEAMIENTO DEL PROBLEMA ..................................................................... 5
OBJETIVOS ............................................................................................................ 5
PROGRAMACIÓN DINAMICA……………………………………………………….6
EJEMPLOS…………………………………………………………………………...10
PREGUNTAS…………………………………………………………………………18
CONCLUSIONES…………………………………………………………………….19
TITULO
PROGRAMACIÓN DINÁMICA

INTRODUCCCIÓN
Esta técnica se aplica sobre problemas que presentan las siguientes
características:
Subproblemas optímales: La solución óptima a un problema puede ser
definida en función de soluciones óptimas a subproblemas de tamaño menor.
Solapamiento entre subproblemas: Al plantear la solución recursiva del
problema, un mismo problema se resuelve más de una vez.
Enfoque ascendente (bottom-up):
Primero se calculan las soluciones óptimas para problemas de
tamañopequeño.
Luego, utilizando dichas soluciones, encuentra soluciones a problemas de
mayor tamaño.
Clave:Memorización
Almacenar las soluciones de los subproblemas en alguna estructura de datos
para reutilizarlas posteriormente. De esa forma, se consigue un algoritmo más
eficiente que la fuerza bruta, que resuelve el mismo subproblema una y otra
vez.
Memorización
Para evitar calcular lo mismo varias veces.
Cuando se calcula una solución, esta se almacena.
Antes de realizar una llamada recursiva para un subproblema Q, se comprueba
si la solución ha sido obtenida previamente.
Si no ha sido obtenida, se hace la llamada recursiva y, antes de devolver la
solución, esta se almacena.
Si ya ha sido previamente calculada, se recupera la solución directamente (no
hace falta calcularla).
Usualmente, se utiliza una matriz que se rellena conforme las soluciones a los
subproblemas son calculados (espacio vs. tiempo).

Uso de la programacióndinámica:
1. Caracterizar la estructura de una soluciónóptima.
2. Definir de forma recursiva la soluciónóptima.
3. Calcular la solución optima de forma ascendente.
4. Construir la solución optima a partir de los datosalmacenados al obtener
soluciones parciales.
Algoritmos greedy:
Se construye la solución incrementalmente, utilizando un criterio de
optimización local.
Programacióndinámica:
Se descompone el problema en subproblemas solapados y se va construyendo
la solución con las soluciones de esos subproblemas.
Divide y vencerás:
Se descompone el problema en subproblemas independientesy se combinan
las soluciones deesos subproblemas.
Para poder emplear programación dinámica, una secuencia óptima debe
cumplir la condición de que cada una de sus subsecuencias también sea
optima:
Dado un problema P con n elementos, si la secuencia optima es e1e2...ek...en
entonces:
e1e2...ek es solución al problema P considerando los k primeros elementos.
ek+1...en es solución al problema P considerando los elementos desde k+1
hasta n.
En otras palabras:
La soluciónóptima de cualquier instancia no trivial de un problema es una
combinación de las soluciones óptimas de sus subproblemas.
Se busca la solución óptima a un problema como un proceso de decisión
“multietapico”.
Se toma una decisión en cada paso, pero esta depende de las soluciones a los
subproblemas que lo componen.
Un poco de historia:Bellman, años 50…
Enfoque inspirado en la teoría de control:
Se obtiene la política óptima para un problema de control con n etapas
basándose en una políticaóptima
para un problema similar, pero de n-1 etapas.
Etimología: Programación dinámica = Planificación temporal
En una época “hostil” a la investigación matemática, Bellman
busco un nombre llamativo que evitase posibles confrontaciones:
“it's impossible to use dynamic in a pejorative sense”
“something not even a Congressman could object to”
Richard E. Bellman: “Eye of the Hurricane: An Autobiography”
Principio de Optimalidad de Bellman
[Bellman, R.E.: “DynamicProgramming”. Princeton UniversityPress, 1957]
“Una política optima tiene la propiedad de que, sean cuales sea el estado inicial
y la decisión inicial, las decisiones restantes deben constituir una solución
Optima con respecto al estado resultante de la primera decisión”.
En Informática, un problema que puede descomponerse de esta forma se dice
que presenta subestructuras optímales (la base de los algoritmos greedy y de
la programacióndinámica).
Principio de Optimalidad de Bellman
[Bellman, R.E.: “DynamicProgramming”. Princeton UniversityPress, 1957]
El principio de optimalidad se verifica si toda soluciónóptima a un problema
está compuesta por soluciones óptimas de sus subproblemas.
! Ojo!
El principio de optimalidad no nos dice que, si tenemos las soluciones óptimas
de los subproblemas, entonces podamos combinarlas para obtener la solución
óptima del problema original…
PLANTEAMIENTO DEL PROBLEMA:

Este trabajo se realiza con el propósito de conocer la programación dinámica,
sus algoritmos, sus técnicas y los pasos para realizar la programación
dinámica.
Saber que es la programación dinámica, sus generalidades, sus características
y la planificación de los algoritmos.
OBJETIVOS
Identificar los algoritmos dinámicos.
Identificar las técnicas para realizar la programación dinámica.
Identificar sus características y las generalidades.
Aprender a planificar los algoritmos.
Identificar que es la programación dinámica y cuando se debe realizar.
Programación Dinámica
Frecuentemente para resolver un problema complejo se tiende a dividir este
en subproblemas más pequeños, resolver estos últimos (recurriendo
posiblemente a nuevas subdivisiones) y combinar las soluciones obtenidas
para calcular la solución del problema inicial.
Puede ocurrir que la división natural del problema conduzca a un gran
número de subejemplares idénticos. Si se resuelve cada uno de ellos sin
tener en cuenta las posibles repeticiones, resulta un algoritmo ineficiente;
en cambio si se resuelve cada ejemplar distinto una sola vez y se conserva el
resultado, el algoritmo obtenido es mucho mejor.
Esta es la idea de la programación dinámica: no calcular dos veces lo mismo
y utilizar normalmente una tabla de resultados que se va rellenando a
medida que se resuelven los subejemplares.
La programación dinámica es un método ascendente. Se resuelven primero
los subejemplares más pequeños y por tanto más simples. Combinando las
soluciones se obtienen las soluciones de ejemplares sucesivamente más
grandes hasta llegar al ejemplar original.
Esta técnica es típicamente aplicada para resolver problemas de optimización:
Problemas con muchas soluciones.
Cada solución tiene asociado un valor.
Se busca una solución con un valor óptimo(Máximo o mínimo), entre las
muchas soluciones con valor optimo que pueden existir.
Generalidades (Cont.)
El desarrollo de un algoritmo usando la técnica deprogramación dinámica
puede ser dividido en lossiguientes pasos:
1. Caracterizar la estructura de una soluciónoptima.
2. Definir recursivamente el valor de una soluciónoptima.
3. Calcular el Valor de una solución óptima demanera abajo hacia arriba
(bottom-up).
4. Construir una solución optima a partir de lainformación calculada.
Generalidades (Cont.)
Utilizando programación dinámica se solucionanproblemas de optimización
como:
El problema de planificación en una fábrica de automóviles.
Multiplicación de una sucesión de matrices.
Construir un árbol de búsqueda binaria que se óptimo.
Otros ejemplos: la subcadena más larga, triangulación de polígonos convexos.
La Programación Dinámica tiene distintas acepciones en la literatura
Consideraremos aquí la Programación Dinámica comouna generalización de
la técnica de Divide y Vencerás(posiblemente en su versión de Reducción) con
o sinmemoria
Generalización: considerar un conjunto de alternativasu opciones distintas al
dividir el problema ensubproblemas
Dado un problema X a resolver mediante Programación
Dinámica, sea A×= {a1, a2…..} el conjunto de alternativasposibles para dividir X
en otros subproblemas.
La solución a un problema Xserá el resultado de laelección de una de las
alternativas, a € A× ,y de resolverlos problemas resultantes de dicha elección,
quedenotaremos por X1^a,X2^a,…..Xk^a.
En general, el número de subproblemas puededepender de la alternativa
escogida.
Si, para un problema dado, siempre ocurre que k=1 (sólo un subproblema),
denominamos a la técnicaPROGRAMACIÓN DINÁMICA CON REDUCCIÓN

Según lo anterior,
Para resolver un problema X, se consideran variasalternativas
Cada alternativa considerada supondrá resolver variossubproblemas. Además,
el número de subproblemaspodría variar para cada alternativa.
Cuando k=1 (sólo un subproblema para cadaalternativa), como en el caso de
Divide y Vencerás,denominaremos a la técnica Programación Dinámicacon
Reducción.
Según vimos, la solución a un problema mediante Dividey Vencerás adopta la
forma:

donde X representa el problema de tamaño n, Xi lossubproblemas de tamaño
ni, con ni <n, c la función quecombina las soluciones de los subproblemas (en
elcontexto del problema a resolver) y S0 la solución delcaso base.
El esquema de un problema que se resuelve porProgramación Dinámica
comparte elementos con elanterior, pero es más general. Su forma es:

Cada problema tiene asociado un tamaño n(X) y los tamaños de los
subproblemas deben ser menores que eltamaño del problema original:n(Xl^a)
<n(X), conI € [1, k]ya € AX

SiendoSi^a = f (Xi^a), i € [1,k] k las soluciones de lossubproblemasXi^a , la
operaciónS^adel problema asumiendoX^aescogida la alternativa. A la
operación c ladenominaremos combinaSoluciones
La operacióncAa€Ax (X,S^a)construye la solución s delproblema original X a
partir de las soluciones obtenidaspara cada alternativa. A la operación
cAladenominaremos combina Alternativas.
Las operaciones c y cAtienen distintos comportamientoscon respecto a los
subproblemas que no tienen solución
El operador c devuelve el valor cuando alguno de lossub-problemas no tiene
solución:

La operación cAdevuelve

cuando no existe soluciónpara ninguna alternativa:

La Programación Dinámica puede usar memoria comoen la técnica de Divide y
Vencerás con Memoria. Elesquema que hace explícito este uso de la memoria
es:

PD con Memoria y solución de un conjunto de problemas
El problema generalizado anterior también devuelve lassoluciones a todos los
subproblemas que se han tenidoque resolver.
Esto nos permite aprovechar los posibles subproblemascompartidos y resolver
un conjunto de problemas engeneral.
Un conjunto de problemas lo podemos caracterizar porun rango de valores
de una o varias propiedades de unproblema.
Un problema lo representaremos por (SX,n). El conjuntode problemas estará
formado por una secuencia deproblemas Xi cada uno de los cuales está
indexado porun índice i=1,..n.
Usando el esquema anterior la solución de un conjuntode problemas fc(SX,n)
es de la forma

Si solo tenemos un problema de partida:

El conjunto de problemas más las relaciones entreproblemas y subproblemas
definen implícitamente ungrafo dirigido bipartito.
Los dos tipos de vértices: vértices problemas y vértices alternativas.
Cada vértice problema contiene un problema delconjunto de problemas.
Cada vértice alternativa contiene un problema más unaalternativa escogida de
entre su conjunto dealternativas.
El tipo de grafo que se forma es un grafo AND-OR.
Los vértices OR tienen asociado un problema X.
Los vértices AND un par problema-alternativa (X,a).
Si el contexto lo permite a los vértices AND sólo leasociamos la alternativa
puesto que el vértice antecesorya indicará el problema original.
En estos grafos las hojas de este son casos base oproblemas cuyo conjunto de
alternativas es vacío.
Las soluciones pueden ser caracterizadas por unsubgrafo del grafo And/Or.
Este subgrafo tiene como vértice maximal al problemacuya solución queremos
caracterizar, todas las hojasson casos base, de cada vértice OR parte una y
sólouna de las aristas existentes en grafo original y de cada
vértice AND parte cada una de las aristas existentes enel grafo original.
Si no es posible obtener un subgrafo con lascaracterísticas anteriores el
problema no tiene solución.
En cada caso la solución buscada será de un tipodeterminado que habrá que
especificar.
Si el problema es de optimización, para caracterizarlo,habrá que indicar,
además, una propiedad de lasolución a optimizar.
En cualquier caso para identificar de forma única lasolución es suficiente con
indicar cuáles la alternativaelegida para cada problema.
Por cuestiones de eficiencia, en general, es preferibleprimero buscar el
subgrafo que define la soluciónrecordando (en la memoria del algoritmo) la
alternativaescogida y el valor de la propiedad de la solución aoptimizar.
Posteriormente reconstruir el valor de lasolución pedida.
Al par formado por la alternativa elegida, valor de lapropiedad relevante de la
solución lo llamaremossolución parcial.
Para cada problema debemos indicar la forma dereconstruir la solución a partir
de la solución parcial.
La Planificación de una línea de ensamble de Automóviles
La Corporación Colonel Motors produce automóviles en una fábrica que tiene
dos líneas deensamble.

La Planificación de una línea de ensamble de Automóviles
El chasís del automóvil entra en cada línea de ensamble, se adicionan al
chasís las partes necesarias encada estado del proceso, que nos lleva a
construirfinalmente el automóvil.
Cada línea de ensamble tiene n estados, numeradasj = 1, 2,..., n.
Un estado es representado por el j-íesima estado de la línea i, donde i es
1
o 2.
El j-íesimo estado de la línea 1 (S1, j) realiza lamisma función que el j-íesimo
estado de la línea 2(S2, j).
Cada estado ejecuta su labor a diferentes horas con diferentes tecnologías,
además el tiempo requeridopor cada estado varia, incluso entre los estados
de una misma línea de ensamble.
La Planificación de una línea de ensamble de Automóviles
El tiempo requerido por un estado Si, j en el ensamblese representa por ai, j.
Normalmente, una vez que un chasis entra a una línea de ensamble, pasa
únicamente a través de esa línea de ensamble.
El tiempo para transferir un chasís de una línea deensamble i a un estado Si,j
es denotado por ti,j ,donde i = 1, 2 y j = 1, 2, ..., n − 1.
En general, el problema es:
Determinar que estados elegir de la línea 1 y que estados elegir de la línea 2
en orden, tal que se minimice eltiempo total que toma la construcción de un
automóvil.
La Planificación de una línea de ensamble de Automóviles
En el ejemplo siguiente el tiempo total para construirun automóvil se encuentra
eligiendo los estados 1, 3 y 6 de la línea 1 y los estados 2, 4 y 5 de la línea 2.

La Planificación de una línea de ensamble de Automóviles
Si tenemos una lista con los estados de la línea 1 y los estados de la línea 2, el
costo computacional en tomar un chasís para la construcción del automóvil es
Ө(n).
Infortunadamente existe 2^n posibles rutas para elegir los estados y el costo de
calcular todas las rutas y escoger la mínima esΩ (2^n).
Etapa 1: Búsqueda de soluciones al problema
La primera etapa del paradigma de programación dinámica es la característica
de la estructura de la solución óptima.
Se inicia el problema de la línea de ensamble en el estado S1,j :
Si j= 1, solo hay un ruta posible para el chasís.
Si j = 2, 3, ..., n existen dos opciones, las cuales son:
1. Supongamos que la ruta más corta al estado S1, jes a través del estado
S1,j−1.
2. Supongamos que la ruta más corta al estado S1,j es a través del estado
S2,j−1.
Podemos decir entonces que para la planificación de una línea de ensamble,
una soluciónoptima a unproblema (encontrar una buena ruta a través de los
estados Si,j) contiene dentro de ella una soluciónoptimaa los subproblemas
(encontrar una buena ruta a travésde S1,j−1 o S2,j−1).
La propiedad de las subestructuras óptimases unos de las más importantes en
la aplicabilidad dela programación dinámica.
Utilizamos las subestructurasoptimas para demostrarque podemos construir
una solución óptima a un problema a través de las soluciones óptimas de los
Subproblemas.
Podemos concluir que una ruta corta para llegar alestado S1, j es a través del
estado j − 1 de la línea 1 o2:
Buscar la ruta más corta al estado S1, j−1 y entoncesir directamente al estado
S1, j , o
Buscar la ruta más corta al estado S2, j−1 y moverse de la línea 2 a la línea 1 y
de esta forma llegar alestado S1, j.
Utilizando razonamiento simétrico, la ruta más corta alestado S2,j es :
Buscar la ruta más corta al estado S2, j−1 y entoncesir directamente al estado
S2,j , o
Buscar la ruta más corta al estado S1, j−1 y moverse de la línea 2 a la línea 1 y
de esta forma llegar alestado S2, j.
Etapa 2: Una solución recursiva
La segunda etapa de la programacióndinámica es definir recursivamente el
valor de una solución óptima en términos de las soluciones óptimas delos
subproblemas.
fi[j] denota el tiempo que toma un chasís desde elpunto inicial al estado Si, j .
La meta es determinar lamejor ruta en la fabricación del automóvil, el cual se
denota por F*.
La fórmula para la mejor ruta es la siguiente:
F*= min (F1 [n] + x1+, f2 [n] + x2) (1)
La solución sencilla de F1 [1] y f2 [2] es:
F1 [1] = e1 + a1, 1 (2)
f2 [1] = e2 + a2, 1 (3)
Realizamos los cálculos de fi[j] para j = 2, 3, ..., n
(i = 1, 2) y obtenemos la ecuación recursiva:
fi[j] ={e1 + a1,1 si j = 1
min (f1 [j − 1] + a1, j , f2[j − 1] + t2,j−1 + a1, j) si j >= 2 }
f2[j] ={e2 + a2,1 si j = 1
min (f2 [j − 1] + a2, j , f1[j − 1] + t1, j−1 + a2,j) si j >=2 }
fi[j] contiene los valores de la soluciones óptimas a lossubproblemas.
En li[j] se guarda la ruta trazada (línea 1 o 2)desde un estado j − 1 para llegar al
estado Si, j.
l*es la línea donde el estado n es utilizado en lafabricación del automóvil.
Etapa 3: Calculo del tiempo
A continuación mostraremos el algoritmo recursivo delas ecuaciones
anteriormente mencionadas:
Los datos de entrada al algoritmo son ai, j, ti, j, eiy n que es el número de
estados en cada línea deensamble.
Fastest way (a, t, e, x, n)
1 f1 [1] ← e1 + a1, 1
2 f2 [1] ← e2 + a2, 1
3 for j ← 2 to n
4 do if f1 [j − 1] + a1, j<=f2 [j − 1] + t2, j−1 + a1, j
5 thenf1 [j] ←f1 [j − 1] + a1, j
6 l1[j] ← 1
7 else f1 [j] ←f2 [j − 1] + t2, j−1 + a1, j
8 l1 [j]← 2
9 if f2 [j − 1] + a2, j <= f1 [j − 1] + t1, j−1 + a2, j
10 then f2 [j] ← f2 [j − 1] + a2, j
11 l2 [j] ← 2
12 else f2 [j] ← f1 [j − 1] + t1, j−1 + a2, j
13 l2 [j] ← 1
14 if f1 [n] + x1 <=f2 [n] + x2
15 then f*= f1 [n] + x1
16 l* = 1
17 else f* = f2 [n] + x2
18 l* = 2
Las iteraciones del ciclo for desde la línea del 3-13toman tiempo Ө(n).
Etapa 4: Construcción de una buena ruta
Para calcular los valores de fi[j], f*, li[j] yl*, necesitamosconstruir la secuencia
de estados utilizando lamejor ruta para la fabricación del automóvil.
El siguiente procedimiento imprime los estados utilizadosen la mejor ruta.
Print _stations(l,n)
1 I ← l_
2 print ”line ”i”, station”n
3 for j ← n downto 2
4 do i ← li[j]
5 print ”line ”i”, station”j − 1
Ejemplo:
Consideremos el cálculo de números combinatorios. El algoritmo sería:
Función C(n, k)
si k=0 o k=n entonces devolver 1
si no devolver C(n-1, k-1) + C(n-1, k)
Ocurre que muchos valores C(i, j), con i <n y j <k se calculan y recalculan
varias veces.
Un fenómeno similar ocurre con el algoritmo de Fibonacci.
La programación dinámica se emplea a menudo para resolver problemas de
optimización que satisfacen el principio de optimalidad: en una secuencia
óptima de decisiones toda subsecuencia ha de ser también óptima.

El problema de la mochila

Tenemos un conjunto S de n objetos, en el que cadaobjeto i tiene un beneficio
bi y un peso wi positivos.
Objetivo: Seleccionarlos elementos que nosgarantizan un beneficio
máximo pero conun peso global menoro igual que W.
Dado el conjunto S de n objetos,sea Sk el conjunto de los k primeros objetos
(de 1 a k):
Podemos definir B(k,w) como la ganancia de la mejorsolución obtenida a partir
de los elementos de S k parauna mochila de capacidad w.
Ahora bien, la mejor selección de elementos delconjunto Sk para una mochila
de tamaño w se puededefinir en función de selecciones de elementos de Sk-1
para mochilas de menor capacidad…
Como calculamos B(k,w)?
O bien la mejor opción para Sk coincide con la mejorselección de elementos de
Sk-1 con peso máximo w(el beneficio máximo para S k coincide con el de Sk1),o bien es el resultado de añadir el objeto k a la mejorselección de elementos
de Sk-1 con peso máximo w−wk (el beneficio para Skserá el beneficio que
seobtenía en Sk-1 para una mochila de capacidad w−wk
mas el beneficio bk asociado al objeto k).
Definicion recursiva de B(k,w):
Para resolver el problema de la mochila nosquedaremos con el maximo de
ambos valores:

Calculo ascendente de B(k,w)
Usando una matriz B de tamaño (n+1) x (W+1):
int[][] knapsack (W, w[1..n], b[1..n])
{
for (p=0; p<=W; p++)
B[0][p]=0;
for (k=1; k<=n; k++) {
for (p=0; p<w[k]; p++)
B[k][p] = B[k-1][p];
for (p=w[k]; p<=W; w++)
B[k][p] = max ( B[k-1][p−w[k]]+b[k], B[k-1][p] );
}
return B;
}
Como calculamos la solución optima a partir de B(k,w)?
Calculamos la solución para B[k][w]utilizando el siguiente algoritmo:
Si B[k][w] == B[k-1][w], entonces el objeto k no se selecciona y se
seleccionanlos objetos correspondientes a la solución optima parak-1 objetos y
una mochila de capacidad w:la solución para B[k-1][w].
Si B[k][w] != B[k-1][w],se selecciona el objeto ky los objetos correspondientes a
la solución optimapara k-1 objetos y una mochila de capacidad w-w[k]:
la solución para B[k-1][w-w[k]].
Eficiencia del algoritmo
Tiempo de ejecución: Θ(n W)
“Pseudopolinomico” (no es polinomico sobre el tamaño de la entrada; esto es,
sobre el numero de objetos).
El problema de la mochila es NP.
NOTA: Existe un algoritmo polinomico deorden O (n2v*) que proporciona una
solución aproximada al 0.01% del optimo [Kleinberg
&Tardos, “Arbitrarily Good Approximations: The Knapsack Problem”].
Ejemplo
Mochila de tamaño W=11
Numero de objetos n=5
Solución optima {3,4}

Caminos mínimos: Algoritmo de Floyd
Problema:
Calcular el camino más corto que une cada par devértices de un grafo,
considerando que no hay pesosnegativos.
Posibles soluciones:
Por fuerza bruta (de orden exponencial).
Aplicar el algoritmo de Dijkstra para cada vértice.
Algoritmo de Floyd (programación dinámica).
Definición recursiva de la solución:
Dk(i,j): Camino más corto de i a j usando solo los kprimeros vértices del grafo
como puntos intermedios.
Expresión recursiva:

Caso base:

Algoritmo de Floyd (1962): Θ(V3)
for (i=0; i<n; i++)
for (j=0; j<n; j++)
D[i][j] = coste(i,j);
for (k=0; k<n; k++)
for (i=0; i<n; i++)
for (j=0; j<n; j++)
if (D[i][k] + D[k][j] < D[i][j] )
D[i][j] = D[i][k] + D[k][j];

Preguntas
1 Cuáles son las características que debe presentar un problema para poder
aplicar la programación dinámica?
R:Subproblemas optímales: La solución óptima a un problema puede ser
definida en función de soluciones óptimas a subproblemas de tamaño menor.
Solapamiento entre subproblemas: Al plantear la solución recursiva del
problema, un mismo problema se resuelve más de una vez.
Enfoque ascendente (bottom-up):
Primero se calculan las soluciones óptimas para problemas de
tamañopequeño.
Luego, utilizando dichas soluciones, encuentra soluciones a problemas de
mayor tamaño.
2Que significado tiene la palabra memorización en la programación dinámica?
R:Almacenar las soluciones de los subproblemas en alguna estructura de datos
para reutilizarlas posteriormente. De esa forma, se consigue un algoritmo más
eficiente que la fuerza bruta, que resuelve el mismo subproblema una y otra
vez.
3 Para qué sirve la memorización en la programación dinámica?
R:Para evitar calcular lo mismo varias veces.
Cuando se calcula una solución, esta se almacena.
Antes de realizar una llamada recursiva para un subproblema Q, se comprueba
si la solución ha sido obtenida previamente.
Si no ha sido obtenida, se hace la llamada recursiva y, antes de devolver la
solución, esta se almacena.
Si ya ha sido previamente calculada, se recupera la solución directamente (no
hace falta calcularla).
Usualmente, se utiliza una matriz que se rellena conforme las soluciones a los
subproblemas son calculados (espacio vs. tiempo).
4Cual es el uso de la programación dinámica?
R:
1. Caracterizar la estructura de una soluciónóptima.
2. Definir de forma recursiva la soluciónóptima.
3. Calcular la solución optima de forma ascendente.
4. Construir la solución optima a partir de los datosalmacenados al obtener
soluciones parciales.
5 Programación Dinámica?
R:La programación dinámica es un método ascendente. Se resuelven primero
los subejemplares más pequeños y por tanto más simples. Combinando las
soluciones se obtienen las soluciones de ejemplares sucesivamente más
grandes hasta llegar al ejemplar original.
Conclusiones
La programación dinámica se aplica a un problema que inicialmente parece
requerir una gran cantidad de tiempo de magnitud (Posiblemente exponencial)
y debe cumplir:
Subproblemas Simples: Los subproblemas pueden ser definidos en términos
de pocas variables.
Optimalidad de Subproblemas: El óptimo global puede ser definido en
términos de subproblemas óptimos.
Sobrelapamiento de Subproblemas: Los problemas no son independientes
(por lo tanto, la solución debe construirse de abajo hacia arriba).

Más contenido relacionado

La actualidad más candente

La actualidad más candente (20)

Problema de mezcla de productos
Problema de mezcla de productosProblema de mezcla de productos
Problema de mezcla de productos
 
Ejemplos de Procesos Estocásticos
Ejemplos de Procesos EstocásticosEjemplos de Procesos Estocásticos
Ejemplos de Procesos Estocásticos
 
Programación dinámica
Programación  dinámicaProgramación  dinámica
Programación dinámica
 
Valor presente
Valor presenteValor presente
Valor presente
 
Teoría De La Renovación
Teoría De La RenovaciónTeoría De La Renovación
Teoría De La Renovación
 
Isomorfos y arboles
Isomorfos y arbolesIsomorfos y arboles
Isomorfos y arboles
 
Tema 3: PERT de costes
Tema 3: PERT de costesTema 3: PERT de costes
Tema 3: PERT de costes
 
Guia de ejercicios matematicas operaciones financieras 2013 1
Guia de ejercicios matematicas operaciones financieras 2013 1Guia de ejercicios matematicas operaciones financieras 2013 1
Guia de ejercicios matematicas operaciones financieras 2013 1
 
15PRONOSTICOS.pdf
15PRONOSTICOS.pdf15PRONOSTICOS.pdf
15PRONOSTICOS.pdf
 
5.0 programación lineal
5.0 programación lineal5.0 programación lineal
5.0 programación lineal
 
Metodo burbuja
Metodo burbujaMetodo burbuja
Metodo burbuja
 
Programación no lineal
Programación no linealProgramación no lineal
Programación no lineal
 
sistemas duros y blandos
sistemas duros y blandos sistemas duros y blandos
sistemas duros y blandos
 
Normalizacion aporte III Parcial
Normalizacion aporte III ParcialNormalizacion aporte III Parcial
Normalizacion aporte III Parcial
 
Relación de Estadística y Finanzas
Relación de Estadística y FinanzasRelación de Estadística y Finanzas
Relación de Estadística y Finanzas
 
Programación lineal
Programación linealProgramación lineal
Programación lineal
 
Programación no lineal
Programación no linealProgramación no lineal
Programación no lineal
 
Back Tracking
Back TrackingBack Tracking
Back Tracking
 
Recursividad
RecursividadRecursividad
Recursividad
 
MÉTODOS DE PROMEDIO
MÉTODOS DE PROMEDIOMÉTODOS DE PROMEDIO
MÉTODOS DE PROMEDIO
 

Similar a Programación dinámica

Programación Dinámica
Programación DinámicaProgramación Dinámica
Programación DinámicaKimLinares
 
6 dynamic programming
6 dynamic programming6 dynamic programming
6 dynamic programmingDerqusa S.A.
 
Pro no num Prog dinamica
Pro no num Prog dinamicaPro no num Prog dinamica
Pro no num Prog dinamicaRuben Gonzalez
 
PROGRAMACION DINAMICA
PROGRAMACION DINAMICAPROGRAMACION DINAMICA
PROGRAMACION DINAMICAJOSEPHBADRA3
 
Trabajo dualidad sensibilidad
Trabajo dualidad sensibilidadTrabajo dualidad sensibilidad
Trabajo dualidad sensibilidadnmanaure
 
61178886 i-o-ii-principal
61178886 i-o-ii-principal61178886 i-o-ii-principal
61178886 i-o-ii-principaldaniel malpica
 
Trabajo programacion lineal
Trabajo  programacion  linealTrabajo  programacion  lineal
Trabajo programacion linealluis fernandez
 
Programacion dinamica final
Programacion dinamica finalProgramacion dinamica final
Programacion dinamica finalWalter Toledo
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamicaRCOP
 
Javierperez teoría de la optimización
Javierperez teoría de la optimizaciónJavierperez teoría de la optimización
Javierperez teoría de la optimizaciónRobin Duben
 
Programación lineal y pert. do
Programación lineal y pert. doProgramación lineal y pert. do
Programación lineal y pert. doJohn Leyton
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamicagenesisptc_
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamicaJosé Padrón
 
Teoría de optimización
Teoría de optimizaciónTeoría de optimización
Teoría de optimizaciónAngel Jhoan
 

Similar a Programación dinámica (20)

Programación dinámica
Programación dinámica Programación dinámica
Programación dinámica
 
Programación Dinámica
Programación DinámicaProgramación Dinámica
Programación Dinámica
 
6 dynamic programming
6 dynamic programming6 dynamic programming
6 dynamic programming
 
Pro no num Prog dinamica
Pro no num Prog dinamicaPro no num Prog dinamica
Pro no num Prog dinamica
 
PROGRAMACION DINAMICA
PROGRAMACION DINAMICAPROGRAMACION DINAMICA
PROGRAMACION DINAMICA
 
Trabajo dualidad sensibilidad
Trabajo dualidad sensibilidadTrabajo dualidad sensibilidad
Trabajo dualidad sensibilidad
 
61178886 i-o-ii-principal
61178886 i-o-ii-principal61178886 i-o-ii-principal
61178886 i-o-ii-principal
 
Trabajo programacion lineal
Trabajo  programacion  linealTrabajo  programacion  lineal
Trabajo programacion lineal
 
Programacion dinamica final
Programacion dinamica finalProgramacion dinamica final
Programacion dinamica final
 
Programación dinámica
Programación dinámicaProgramación dinámica
Programación dinámica
 
Programación dinámica
Programación dinámicaProgramación dinámica
Programación dinámica
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamica
 
Javierperez teoría de la optimización
Javierperez teoría de la optimizaciónJavierperez teoría de la optimización
Javierperez teoría de la optimización
 
Programación lineal y pert. do
Programación lineal y pert. doProgramación lineal y pert. do
Programación lineal y pert. do
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamica
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamica
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Algoritmo
AlgoritmoAlgoritmo
Algoritmo
 
Teoría de optimización
Teoría de optimizaciónTeoría de optimización
Teoría de optimización
 
www.bugaonline.com - Programación Entera
www.bugaonline.com - Programación Enterawww.bugaonline.com - Programación Entera
www.bugaonline.com - Programación Entera
 

Más de Juan Esteban Puerta Cano

Más de Juan Esteban Puerta Cano (20)

Métodos de switching
Métodos de switching Métodos de switching
Métodos de switching
 
Portafolio Telematica
Portafolio TelematicaPortafolio Telematica
Portafolio Telematica
 
Formato presentacion de propuesta Bases de datos avanzadas
Formato presentacion de propuesta Bases de datos avanzadasFormato presentacion de propuesta Bases de datos avanzadas
Formato presentacion de propuesta Bases de datos avanzadas
 
Tecnicas de Agrupamiento
Tecnicas de AgrupamientoTecnicas de Agrupamiento
Tecnicas de Agrupamiento
 
Minero de Datos
Minero de DatosMinero de Datos
Minero de Datos
 
Tecnicas de Diseño de Algoritmos
Tecnicas de Diseño de AlgoritmosTecnicas de Diseño de Algoritmos
Tecnicas de Diseño de Algoritmos
 
Capa de presentacion
Capa de presentacionCapa de presentacion
Capa de presentacion
 
Bi conceptos
Bi conceptosBi conceptos
Bi conceptos
 
Migracion de datos
Migracion de datosMigracion de datos
Migracion de datos
 
Bases de datos para la toma de decisiones
Bases de datos para la toma de decisionesBases de datos para la toma de decisiones
Bases de datos para la toma de decisiones
 
Triggers
TriggersTriggers
Triggers
 
Pruebas de penetración nmap
Pruebas de penetración nmapPruebas de penetración nmap
Pruebas de penetración nmap
 
cobertura de caminos
cobertura de caminoscobertura de caminos
cobertura de caminos
 
cobertura de bucles
cobertura de buclescobertura de bucles
cobertura de bucles
 
pruebas de cajas blanca
 pruebas de cajas blanca pruebas de cajas blanca
pruebas de cajas blanca
 
Adsl 2
Adsl 2Adsl 2
Adsl 2
 
Trabajo red telematica
Trabajo red telematicaTrabajo red telematica
Trabajo red telematica
 
7 técnicas estáticas
7   técnicas estáticas7   técnicas estáticas
7 técnicas estáticas
 
técnicas estáticas
técnicas estáticastécnicas estáticas
técnicas estáticas
 
Exposicion metodos de recoleccion de requerimientos final
Exposicion metodos de recoleccion de requerimientos finalExposicion metodos de recoleccion de requerimientos final
Exposicion metodos de recoleccion de requerimientos final
 

Programación dinámica

  • 1. PROGRAMACIÓN DINAMICA POR JUAN ESTEBAN PUERTA CANO ROBINSON CARDONA DOCENTE RICARDO BOTETRO ASIGNATURA ANALISIS DE ALGORITMOS FECHA DE ENTREGA 31 DE OCTUBRE INTITUCIÓN UNIVERSITARIA TECNOLOGICO DE ANTIOQUIA FACULTAD DE INGENIARIA MEDELLÍN 2013-II
  • 2. CONTENIDO TÍTULO ....................................................................Error! Bookmark not defined. INTRODUCCIÓN .....................................................Error! Bookmark not defined. PLANTEAMIENTO DEL PROBLEMA ..................................................................... 5 OBJETIVOS ............................................................................................................ 5 PROGRAMACIÓN DINAMICA……………………………………………………….6 EJEMPLOS…………………………………………………………………………...10 PREGUNTAS…………………………………………………………………………18 CONCLUSIONES…………………………………………………………………….19
  • 3. TITULO PROGRAMACIÓN DINÁMICA INTRODUCCCIÓN Esta técnica se aplica sobre problemas que presentan las siguientes características: Subproblemas optímales: La solución óptima a un problema puede ser definida en función de soluciones óptimas a subproblemas de tamaño menor. Solapamiento entre subproblemas: Al plantear la solución recursiva del problema, un mismo problema se resuelve más de una vez. Enfoque ascendente (bottom-up): Primero se calculan las soluciones óptimas para problemas de tamañopequeño. Luego, utilizando dichas soluciones, encuentra soluciones a problemas de mayor tamaño. Clave:Memorización Almacenar las soluciones de los subproblemas en alguna estructura de datos para reutilizarlas posteriormente. De esa forma, se consigue un algoritmo más eficiente que la fuerza bruta, que resuelve el mismo subproblema una y otra vez. Memorización Para evitar calcular lo mismo varias veces. Cuando se calcula una solución, esta se almacena. Antes de realizar una llamada recursiva para un subproblema Q, se comprueba si la solución ha sido obtenida previamente. Si no ha sido obtenida, se hace la llamada recursiva y, antes de devolver la solución, esta se almacena. Si ya ha sido previamente calculada, se recupera la solución directamente (no hace falta calcularla). Usualmente, se utiliza una matriz que se rellena conforme las soluciones a los subproblemas son calculados (espacio vs. tiempo). Uso de la programacióndinámica: 1. Caracterizar la estructura de una soluciónóptima. 2. Definir de forma recursiva la soluciónóptima. 3. Calcular la solución optima de forma ascendente.
  • 4. 4. Construir la solución optima a partir de los datosalmacenados al obtener soluciones parciales. Algoritmos greedy: Se construye la solución incrementalmente, utilizando un criterio de optimización local. Programacióndinámica: Se descompone el problema en subproblemas solapados y se va construyendo la solución con las soluciones de esos subproblemas. Divide y vencerás: Se descompone el problema en subproblemas independientesy se combinan las soluciones deesos subproblemas. Para poder emplear programación dinámica, una secuencia óptima debe cumplir la condición de que cada una de sus subsecuencias también sea optima: Dado un problema P con n elementos, si la secuencia optima es e1e2...ek...en entonces: e1e2...ek es solución al problema P considerando los k primeros elementos. ek+1...en es solución al problema P considerando los elementos desde k+1 hasta n. En otras palabras: La soluciónóptima de cualquier instancia no trivial de un problema es una combinación de las soluciones óptimas de sus subproblemas. Se busca la solución óptima a un problema como un proceso de decisión “multietapico”. Se toma una decisión en cada paso, pero esta depende de las soluciones a los subproblemas que lo componen. Un poco de historia:Bellman, años 50… Enfoque inspirado en la teoría de control: Se obtiene la política óptima para un problema de control con n etapas basándose en una políticaóptima para un problema similar, pero de n-1 etapas. Etimología: Programación dinámica = Planificación temporal En una época “hostil” a la investigación matemática, Bellman busco un nombre llamativo que evitase posibles confrontaciones: “it's impossible to use dynamic in a pejorative sense” “something not even a Congressman could object to” Richard E. Bellman: “Eye of the Hurricane: An Autobiography”
  • 5. Principio de Optimalidad de Bellman [Bellman, R.E.: “DynamicProgramming”. Princeton UniversityPress, 1957] “Una política optima tiene la propiedad de que, sean cuales sea el estado inicial y la decisión inicial, las decisiones restantes deben constituir una solución Optima con respecto al estado resultante de la primera decisión”. En Informática, un problema que puede descomponerse de esta forma se dice que presenta subestructuras optímales (la base de los algoritmos greedy y de la programacióndinámica). Principio de Optimalidad de Bellman [Bellman, R.E.: “DynamicProgramming”. Princeton UniversityPress, 1957] El principio de optimalidad se verifica si toda soluciónóptima a un problema está compuesta por soluciones óptimas de sus subproblemas. ! Ojo! El principio de optimalidad no nos dice que, si tenemos las soluciones óptimas de los subproblemas, entonces podamos combinarlas para obtener la solución óptima del problema original… PLANTEAMIENTO DEL PROBLEMA: Este trabajo se realiza con el propósito de conocer la programación dinámica, sus algoritmos, sus técnicas y los pasos para realizar la programación dinámica. Saber que es la programación dinámica, sus generalidades, sus características y la planificación de los algoritmos. OBJETIVOS Identificar los algoritmos dinámicos. Identificar las técnicas para realizar la programación dinámica. Identificar sus características y las generalidades. Aprender a planificar los algoritmos. Identificar que es la programación dinámica y cuando se debe realizar.
  • 6. Programación Dinámica Frecuentemente para resolver un problema complejo se tiende a dividir este en subproblemas más pequeños, resolver estos últimos (recurriendo posiblemente a nuevas subdivisiones) y combinar las soluciones obtenidas para calcular la solución del problema inicial. Puede ocurrir que la división natural del problema conduzca a un gran número de subejemplares idénticos. Si se resuelve cada uno de ellos sin tener en cuenta las posibles repeticiones, resulta un algoritmo ineficiente; en cambio si se resuelve cada ejemplar distinto una sola vez y se conserva el resultado, el algoritmo obtenido es mucho mejor. Esta es la idea de la programación dinámica: no calcular dos veces lo mismo y utilizar normalmente una tabla de resultados que se va rellenando a medida que se resuelven los subejemplares. La programación dinámica es un método ascendente. Se resuelven primero los subejemplares más pequeños y por tanto más simples. Combinando las soluciones se obtienen las soluciones de ejemplares sucesivamente más grandes hasta llegar al ejemplar original. Esta técnica es típicamente aplicada para resolver problemas de optimización: Problemas con muchas soluciones. Cada solución tiene asociado un valor. Se busca una solución con un valor óptimo(Máximo o mínimo), entre las muchas soluciones con valor optimo que pueden existir. Generalidades (Cont.) El desarrollo de un algoritmo usando la técnica deprogramación dinámica puede ser dividido en lossiguientes pasos: 1. Caracterizar la estructura de una soluciónoptima. 2. Definir recursivamente el valor de una soluciónoptima. 3. Calcular el Valor de una solución óptima demanera abajo hacia arriba (bottom-up). 4. Construir una solución optima a partir de lainformación calculada. Generalidades (Cont.) Utilizando programación dinámica se solucionanproblemas de optimización como: El problema de planificación en una fábrica de automóviles. Multiplicación de una sucesión de matrices. Construir un árbol de búsqueda binaria que se óptimo. Otros ejemplos: la subcadena más larga, triangulación de polígonos convexos. La Programación Dinámica tiene distintas acepciones en la literatura Consideraremos aquí la Programación Dinámica comouna generalización de la técnica de Divide y Vencerás(posiblemente en su versión de Reducción) con o sinmemoria
  • 7. Generalización: considerar un conjunto de alternativasu opciones distintas al dividir el problema ensubproblemas Dado un problema X a resolver mediante Programación Dinámica, sea A×= {a1, a2…..} el conjunto de alternativasposibles para dividir X en otros subproblemas. La solución a un problema Xserá el resultado de laelección de una de las alternativas, a € A× ,y de resolverlos problemas resultantes de dicha elección, quedenotaremos por X1^a,X2^a,…..Xk^a. En general, el número de subproblemas puededepender de la alternativa escogida. Si, para un problema dado, siempre ocurre que k=1 (sólo un subproblema), denominamos a la técnicaPROGRAMACIÓN DINÁMICA CON REDUCCIÓN Según lo anterior, Para resolver un problema X, se consideran variasalternativas Cada alternativa considerada supondrá resolver variossubproblemas. Además, el número de subproblemaspodría variar para cada alternativa. Cuando k=1 (sólo un subproblema para cadaalternativa), como en el caso de Divide y Vencerás,denominaremos a la técnica Programación Dinámicacon Reducción. Según vimos, la solución a un problema mediante Dividey Vencerás adopta la forma: donde X representa el problema de tamaño n, Xi lossubproblemas de tamaño ni, con ni <n, c la función quecombina las soluciones de los subproblemas (en elcontexto del problema a resolver) y S0 la solución delcaso base.
  • 8. El esquema de un problema que se resuelve porProgramación Dinámica comparte elementos con elanterior, pero es más general. Su forma es: Cada problema tiene asociado un tamaño n(X) y los tamaños de los subproblemas deben ser menores que eltamaño del problema original:n(Xl^a) <n(X), conI € [1, k]ya € AX SiendoSi^a = f (Xi^a), i € [1,k] k las soluciones de lossubproblemasXi^a , la operaciónS^adel problema asumiendoX^aescogida la alternativa. A la operación c ladenominaremos combinaSoluciones La operacióncAa€Ax (X,S^a)construye la solución s delproblema original X a partir de las soluciones obtenidaspara cada alternativa. A la operación cAladenominaremos combina Alternativas. Las operaciones c y cAtienen distintos comportamientoscon respecto a los subproblemas que no tienen solución El operador c devuelve el valor cuando alguno de lossub-problemas no tiene solución: La operación cAdevuelve cuando no existe soluciónpara ninguna alternativa: La Programación Dinámica puede usar memoria comoen la técnica de Divide y Vencerás con Memoria. Elesquema que hace explícito este uso de la memoria es: PD con Memoria y solución de un conjunto de problemas
  • 9. El problema generalizado anterior también devuelve lassoluciones a todos los subproblemas que se han tenidoque resolver. Esto nos permite aprovechar los posibles subproblemascompartidos y resolver un conjunto de problemas engeneral. Un conjunto de problemas lo podemos caracterizar porun rango de valores de una o varias propiedades de unproblema. Un problema lo representaremos por (SX,n). El conjuntode problemas estará formado por una secuencia deproblemas Xi cada uno de los cuales está indexado porun índice i=1,..n. Usando el esquema anterior la solución de un conjuntode problemas fc(SX,n) es de la forma Si solo tenemos un problema de partida: El conjunto de problemas más las relaciones entreproblemas y subproblemas definen implícitamente ungrafo dirigido bipartito. Los dos tipos de vértices: vértices problemas y vértices alternativas. Cada vértice problema contiene un problema delconjunto de problemas. Cada vértice alternativa contiene un problema más unaalternativa escogida de entre su conjunto dealternativas. El tipo de grafo que se forma es un grafo AND-OR. Los vértices OR tienen asociado un problema X. Los vértices AND un par problema-alternativa (X,a). Si el contexto lo permite a los vértices AND sólo leasociamos la alternativa puesto que el vértice antecesorya indicará el problema original. En estos grafos las hojas de este son casos base oproblemas cuyo conjunto de alternativas es vacío.
  • 10. Las soluciones pueden ser caracterizadas por unsubgrafo del grafo And/Or. Este subgrafo tiene como vértice maximal al problemacuya solución queremos caracterizar, todas las hojasson casos base, de cada vértice OR parte una y sólouna de las aristas existentes en grafo original y de cada vértice AND parte cada una de las aristas existentes enel grafo original. Si no es posible obtener un subgrafo con lascaracterísticas anteriores el problema no tiene solución. En cada caso la solución buscada será de un tipodeterminado que habrá que especificar. Si el problema es de optimización, para caracterizarlo,habrá que indicar, además, una propiedad de lasolución a optimizar. En cualquier caso para identificar de forma única lasolución es suficiente con indicar cuáles la alternativaelegida para cada problema. Por cuestiones de eficiencia, en general, es preferibleprimero buscar el subgrafo que define la soluciónrecordando (en la memoria del algoritmo) la alternativaescogida y el valor de la propiedad de la solución aoptimizar. Posteriormente reconstruir el valor de lasolución pedida. Al par formado por la alternativa elegida, valor de lapropiedad relevante de la solución lo llamaremossolución parcial.
  • 11. Para cada problema debemos indicar la forma dereconstruir la solución a partir de la solución parcial. La Planificación de una línea de ensamble de Automóviles La Corporación Colonel Motors produce automóviles en una fábrica que tiene dos líneas deensamble. La Planificación de una línea de ensamble de Automóviles El chasís del automóvil entra en cada línea de ensamble, se adicionan al chasís las partes necesarias encada estado del proceso, que nos lleva a construirfinalmente el automóvil. Cada línea de ensamble tiene n estados, numeradasj = 1, 2,..., n. Un estado es representado por el j-íesima estado de la línea i, donde i es 1 o 2. El j-íesimo estado de la línea 1 (S1, j) realiza lamisma función que el j-íesimo estado de la línea 2(S2, j). Cada estado ejecuta su labor a diferentes horas con diferentes tecnologías, además el tiempo requeridopor cada estado varia, incluso entre los estados de una misma línea de ensamble. La Planificación de una línea de ensamble de Automóviles El tiempo requerido por un estado Si, j en el ensamblese representa por ai, j. Normalmente, una vez que un chasis entra a una línea de ensamble, pasa únicamente a través de esa línea de ensamble. El tiempo para transferir un chasís de una línea deensamble i a un estado Si,j es denotado por ti,j ,donde i = 1, 2 y j = 1, 2, ..., n − 1. En general, el problema es: Determinar que estados elegir de la línea 1 y que estados elegir de la línea 2 en orden, tal que se minimice eltiempo total que toma la construcción de un automóvil.
  • 12. La Planificación de una línea de ensamble de Automóviles En el ejemplo siguiente el tiempo total para construirun automóvil se encuentra eligiendo los estados 1, 3 y 6 de la línea 1 y los estados 2, 4 y 5 de la línea 2. La Planificación de una línea de ensamble de Automóviles Si tenemos una lista con los estados de la línea 1 y los estados de la línea 2, el costo computacional en tomar un chasís para la construcción del automóvil es Ө(n). Infortunadamente existe 2^n posibles rutas para elegir los estados y el costo de calcular todas las rutas y escoger la mínima esΩ (2^n). Etapa 1: Búsqueda de soluciones al problema La primera etapa del paradigma de programación dinámica es la característica de la estructura de la solución óptima. Se inicia el problema de la línea de ensamble en el estado S1,j : Si j= 1, solo hay un ruta posible para el chasís. Si j = 2, 3, ..., n existen dos opciones, las cuales son: 1. Supongamos que la ruta más corta al estado S1, jes a través del estado S1,j−1. 2. Supongamos que la ruta más corta al estado S1,j es a través del estado S2,j−1.
  • 13. Podemos decir entonces que para la planificación de una línea de ensamble, una soluciónoptima a unproblema (encontrar una buena ruta a través de los estados Si,j) contiene dentro de ella una soluciónoptimaa los subproblemas (encontrar una buena ruta a travésde S1,j−1 o S2,j−1). La propiedad de las subestructuras óptimases unos de las más importantes en la aplicabilidad dela programación dinámica. Utilizamos las subestructurasoptimas para demostrarque podemos construir una solución óptima a un problema a través de las soluciones óptimas de los Subproblemas. Podemos concluir que una ruta corta para llegar alestado S1, j es a través del estado j − 1 de la línea 1 o2: Buscar la ruta más corta al estado S1, j−1 y entoncesir directamente al estado S1, j , o Buscar la ruta más corta al estado S2, j−1 y moverse de la línea 2 a la línea 1 y de esta forma llegar alestado S1, j. Utilizando razonamiento simétrico, la ruta más corta alestado S2,j es : Buscar la ruta más corta al estado S2, j−1 y entoncesir directamente al estado S2,j , o Buscar la ruta más corta al estado S1, j−1 y moverse de la línea 2 a la línea 1 y de esta forma llegar alestado S2, j. Etapa 2: Una solución recursiva La segunda etapa de la programacióndinámica es definir recursivamente el valor de una solución óptima en términos de las soluciones óptimas delos subproblemas. fi[j] denota el tiempo que toma un chasís desde elpunto inicial al estado Si, j . La meta es determinar lamejor ruta en la fabricación del automóvil, el cual se denota por F*. La fórmula para la mejor ruta es la siguiente: F*= min (F1 [n] + x1+, f2 [n] + x2) (1) La solución sencilla de F1 [1] y f2 [2] es: F1 [1] = e1 + a1, 1 (2) f2 [1] = e2 + a2, 1 (3) Realizamos los cálculos de fi[j] para j = 2, 3, ..., n (i = 1, 2) y obtenemos la ecuación recursiva: fi[j] ={e1 + a1,1 si j = 1 min (f1 [j − 1] + a1, j , f2[j − 1] + t2,j−1 + a1, j) si j >= 2 } f2[j] ={e2 + a2,1 si j = 1 min (f2 [j − 1] + a2, j , f1[j − 1] + t1, j−1 + a2,j) si j >=2 } fi[j] contiene los valores de la soluciones óptimas a lossubproblemas. En li[j] se guarda la ruta trazada (línea 1 o 2)desde un estado j − 1 para llegar al estado Si, j. l*es la línea donde el estado n es utilizado en lafabricación del automóvil. Etapa 3: Calculo del tiempo
  • 14. A continuación mostraremos el algoritmo recursivo delas ecuaciones anteriormente mencionadas: Los datos de entrada al algoritmo son ai, j, ti, j, eiy n que es el número de estados en cada línea deensamble. Fastest way (a, t, e, x, n) 1 f1 [1] ← e1 + a1, 1 2 f2 [1] ← e2 + a2, 1 3 for j ← 2 to n 4 do if f1 [j − 1] + a1, j<=f2 [j − 1] + t2, j−1 + a1, j 5 thenf1 [j] ←f1 [j − 1] + a1, j 6 l1[j] ← 1 7 else f1 [j] ←f2 [j − 1] + t2, j−1 + a1, j 8 l1 [j]← 2 9 if f2 [j − 1] + a2, j <= f1 [j − 1] + t1, j−1 + a2, j 10 then f2 [j] ← f2 [j − 1] + a2, j 11 l2 [j] ← 2 12 else f2 [j] ← f1 [j − 1] + t1, j−1 + a2, j 13 l2 [j] ← 1 14 if f1 [n] + x1 <=f2 [n] + x2 15 then f*= f1 [n] + x1 16 l* = 1 17 else f* = f2 [n] + x2 18 l* = 2 Las iteraciones del ciclo for desde la línea del 3-13toman tiempo Ө(n). Etapa 4: Construcción de una buena ruta Para calcular los valores de fi[j], f*, li[j] yl*, necesitamosconstruir la secuencia de estados utilizando lamejor ruta para la fabricación del automóvil. El siguiente procedimiento imprime los estados utilizadosen la mejor ruta. Print _stations(l,n) 1 I ← l_ 2 print ”line ”i”, station”n 3 for j ← n downto 2 4 do i ← li[j] 5 print ”line ”i”, station”j − 1 Ejemplo: Consideremos el cálculo de números combinatorios. El algoritmo sería: Función C(n, k) si k=0 o k=n entonces devolver 1 si no devolver C(n-1, k-1) + C(n-1, k) Ocurre que muchos valores C(i, j), con i <n y j <k se calculan y recalculan varias veces. Un fenómeno similar ocurre con el algoritmo de Fibonacci.
  • 15. La programación dinámica se emplea a menudo para resolver problemas de optimización que satisfacen el principio de optimalidad: en una secuencia óptima de decisiones toda subsecuencia ha de ser también óptima. El problema de la mochila Tenemos un conjunto S de n objetos, en el que cadaobjeto i tiene un beneficio bi y un peso wi positivos. Objetivo: Seleccionarlos elementos que nosgarantizan un beneficio máximo pero conun peso global menoro igual que W. Dado el conjunto S de n objetos,sea Sk el conjunto de los k primeros objetos (de 1 a k): Podemos definir B(k,w) como la ganancia de la mejorsolución obtenida a partir de los elementos de S k parauna mochila de capacidad w. Ahora bien, la mejor selección de elementos delconjunto Sk para una mochila de tamaño w se puededefinir en función de selecciones de elementos de Sk-1 para mochilas de menor capacidad… Como calculamos B(k,w)? O bien la mejor opción para Sk coincide con la mejorselección de elementos de Sk-1 con peso máximo w(el beneficio máximo para S k coincide con el de Sk1),o bien es el resultado de añadir el objeto k a la mejorselección de elementos de Sk-1 con peso máximo w−wk (el beneficio para Skserá el beneficio que seobtenía en Sk-1 para una mochila de capacidad w−wk mas el beneficio bk asociado al objeto k). Definicion recursiva de B(k,w):
  • 16. Para resolver el problema de la mochila nosquedaremos con el maximo de ambos valores: Calculo ascendente de B(k,w) Usando una matriz B de tamaño (n+1) x (W+1): int[][] knapsack (W, w[1..n], b[1..n]) { for (p=0; p<=W; p++) B[0][p]=0; for (k=1; k<=n; k++) { for (p=0; p<w[k]; p++) B[k][p] = B[k-1][p]; for (p=w[k]; p<=W; w++) B[k][p] = max ( B[k-1][p−w[k]]+b[k], B[k-1][p] ); } return B; } Como calculamos la solución optima a partir de B(k,w)? Calculamos la solución para B[k][w]utilizando el siguiente algoritmo: Si B[k][w] == B[k-1][w], entonces el objeto k no se selecciona y se seleccionanlos objetos correspondientes a la solución optima parak-1 objetos y una mochila de capacidad w:la solución para B[k-1][w]. Si B[k][w] != B[k-1][w],se selecciona el objeto ky los objetos correspondientes a la solución optimapara k-1 objetos y una mochila de capacidad w-w[k]: la solución para B[k-1][w-w[k]]. Eficiencia del algoritmo Tiempo de ejecución: Θ(n W) “Pseudopolinomico” (no es polinomico sobre el tamaño de la entrada; esto es, sobre el numero de objetos). El problema de la mochila es NP. NOTA: Existe un algoritmo polinomico deorden O (n2v*) que proporciona una solución aproximada al 0.01% del optimo [Kleinberg &Tardos, “Arbitrarily Good Approximations: The Knapsack Problem”]. Ejemplo Mochila de tamaño W=11 Numero de objetos n=5
  • 17. Solución optima {3,4} Caminos mínimos: Algoritmo de Floyd Problema: Calcular el camino más corto que une cada par devértices de un grafo, considerando que no hay pesosnegativos. Posibles soluciones: Por fuerza bruta (de orden exponencial). Aplicar el algoritmo de Dijkstra para cada vértice. Algoritmo de Floyd (programación dinámica). Definición recursiva de la solución: Dk(i,j): Camino más corto de i a j usando solo los kprimeros vértices del grafo como puntos intermedios. Expresión recursiva: Caso base: Algoritmo de Floyd (1962): Θ(V3) for (i=0; i<n; i++) for (j=0; j<n; j++) D[i][j] = coste(i,j); for (k=0; k<n; k++) for (i=0; i<n; i++) for (j=0; j<n; j++)
  • 18. if (D[i][k] + D[k][j] < D[i][j] ) D[i][j] = D[i][k] + D[k][j]; Preguntas 1 Cuáles son las características que debe presentar un problema para poder aplicar la programación dinámica? R:Subproblemas optímales: La solución óptima a un problema puede ser definida en función de soluciones óptimas a subproblemas de tamaño menor. Solapamiento entre subproblemas: Al plantear la solución recursiva del problema, un mismo problema se resuelve más de una vez. Enfoque ascendente (bottom-up): Primero se calculan las soluciones óptimas para problemas de tamañopequeño. Luego, utilizando dichas soluciones, encuentra soluciones a problemas de mayor tamaño. 2Que significado tiene la palabra memorización en la programación dinámica? R:Almacenar las soluciones de los subproblemas en alguna estructura de datos para reutilizarlas posteriormente. De esa forma, se consigue un algoritmo más eficiente que la fuerza bruta, que resuelve el mismo subproblema una y otra vez. 3 Para qué sirve la memorización en la programación dinámica? R:Para evitar calcular lo mismo varias veces. Cuando se calcula una solución, esta se almacena. Antes de realizar una llamada recursiva para un subproblema Q, se comprueba si la solución ha sido obtenida previamente. Si no ha sido obtenida, se hace la llamada recursiva y, antes de devolver la solución, esta se almacena. Si ya ha sido previamente calculada, se recupera la solución directamente (no hace falta calcularla). Usualmente, se utiliza una matriz que se rellena conforme las soluciones a los subproblemas son calculados (espacio vs. tiempo). 4Cual es el uso de la programación dinámica? R: 1. Caracterizar la estructura de una soluciónóptima. 2. Definir de forma recursiva la soluciónóptima. 3. Calcular la solución optima de forma ascendente.
  • 19. 4. Construir la solución optima a partir de los datosalmacenados al obtener soluciones parciales. 5 Programación Dinámica? R:La programación dinámica es un método ascendente. Se resuelven primero los subejemplares más pequeños y por tanto más simples. Combinando las soluciones se obtienen las soluciones de ejemplares sucesivamente más grandes hasta llegar al ejemplar original. Conclusiones La programación dinámica se aplica a un problema que inicialmente parece requerir una gran cantidad de tiempo de magnitud (Posiblemente exponencial) y debe cumplir: Subproblemas Simples: Los subproblemas pueden ser definidos en términos de pocas variables. Optimalidad de Subproblemas: El óptimo global puede ser definido en términos de subproblemas óptimos. Sobrelapamiento de Subproblemas: Los problemas no son independientes (por lo tanto, la solución debe construirse de abajo hacia arriba).