Você está na página 1de 18

Ao del buen servicio al Ciudadano

Universidad Nacional De San Agustn

Facultad: Produccin y Servicios


Escuela Profesional: Ingeniera de Sistemas

Elementos de la Programacin Dinmica

Materia: Anlisis y Diseo de Algoritmos


Docente: Ing. Carlo Corrales
Integrantes:
Robert, Arce Apaza
Ade Luz, Imata Sumire
Elber Diego, Chalco Choquehuanca
Arequipa Per
2017
Anlisis de la Programacin Dinmica
Elber Diego Chalco Choquehuanca
Adeluz imata Sumire
Robert Arce Apaza
Universidad Nacional San Agustn, Arequipa, PERU
1. INTRODUCCION
Existe una serie de problemas cuyas soluciones pueden ser expresadas recursivamente
en trminos matemticos, y posiblemente la manera ms natural de resolverlos es
mediante un algoritmo recursivo. Sin embargo, el tiempo de ejecucin de la solucin
recursiva, normalmente de orden exponencial y por tanto impracticable, puede
mejorarse substancialmente mediante la Programacin Dinmica.

En el diseo Divide y Vencers veamos cmo para resolver un problema lo dividamos


en subproblemas independientes, los cuales se resolvan de manera recursiva para
combinar finalmente las soluciones y as resolver el problema original. El inconveniente
se presenta cuando los subproblemas obtenidos no son independientes sino que existe
solapamiento entre ellos; entonces es cuando una solucin recursiva no resulta eficiente
por la repeticin de clculos que conlleva.

En estos casos es cuando la Programacin Dinmica nos puede ofrecer una solucin
aceptable. La eficiencia de esta tcnica consiste en resolver los subproblemas una sola
vez, guardando sus soluciones en una tabla para su futura utilizacin.

La Programacin Dinmica no slo tiene sentido aplicarla por razones de eficiencia,


sino porque adems presenta un mtodo capaz de resolver de manera eficiente
problemas cuya solucin ha sido abordada por otras tcnicas y ha fracasado.

Donde tiene mayor aplicacin la Programacin Dinmica es en la resolucin de


problemas de optimizacin. En este tipo de problemas se pueden presentar distintas
soluciones, cada una con un valor, y lo que se desea es encontrar la solucin de valor
ptimo (mximo o mnimo). La solucin de problemas mediante esta tcnica se basa en
el llamado principio de ptimo enunciado por Bellman en 1957 y que dice: En una
secuencia de decisiones ptima toda subsecuencia ha de ser tambin ptima Hemos de
observar que aunque este principio parece evidente no siempre es aplicable y por tanto
es necesario verificar que se cumple para el problema en cuestin. Un ejemplo claro
para el que no se verifica este principio aparece al tratar de encontrar el camino de coste
mximo entre dos vrtices de un grafo ponderado Para que un problema pueda ser
aborda do por esta tcnica ha de cumplir dos condiciones:

La solucin al problema ha de ser alcanzada a travs de una secuencia de


decisiones, una en cada etapa.
Dicha secuencia de decisiones ha de cumplir el principio de ptimo.En grandes
lneas, el diseo de un algoritmo de Programacin Dinmica consta de los
siguientes pasos:
1. Planteamiento de la solucin como una sucesin de decisiones y verificacin de
que sta cumple el principio de ptimo.
2. Definicin recursiva de la solucin.
3. Clculo del valor de la solucin ptima mediante una tabla en donde se
almacenan soluciones a problemas parcia les para reutilizar los clculos.
4. Construccin de la solucin ptima haciendo uso de la informacin contenida en
la tabla anterior.

2. PROGRAMACION DIMANICA

La programacin dinmica es una tcnica matemtica que se utiliza para la solucin de


problemas matemticos seleccionados, en los cuales se toma una serie de decisiones en forma
secuencial. Proporciona un procedimiento sistemtico para encontrar la combinacin de
decisiones que maximice la efectividad total, al descomponer el problema en etapas, las que
pueden ser completadas por una o ms formas (estados), y enlazando cada etapa a travs de
clculos recursivos.

3. ELEMENTOS DE LA PROGRAMACON DINAMICA

Dentro de un modelo de PD se pueden identificar tres elementos importantes, que son: las
etapas, las alternativas en cada etapa y los estados para cada etapa. De estos tres elementos, el
ms importante es la definicin de estado.

El estado del sistema se considera como la informacin que une cada etapa, de tal manera que
se puedan tomar decisiones ptimas para las etapas restantes reexaminando la forma en la cual
se lleg a las decisiones para las etapas previas.

1. Principio de optimalidad de Bellman


2. Definicin recursiva de la solucin ptima
3. Clculo de la solucin ptima

4. PRINCIPIO DE OPTIMALIDAD DE BELLMAN

Cuando hablamos de optimizar nos referimos a buscar alguna de las mejores soluciones de entre
muchas alternativas posibles. Dicho proceso de optimizacin puede ser visto como una
secuencia de decisiones que nos proporcionan la solucin correcta. Si, dada una subsecuencia de
decisiones, siempre se conoce cul es la decisin que debe tomarse a continuacin para obtener
la secuencia ptima, el problema es elemental y se resuelve trivialmente tomando una decisin
detrs de otra, lo que se conoce como estrategia voraz. En otros casos, aunque no sea posible
aplicar la estrategia voraz, se cumple el principio de optimalidad de Bellman que dicta que dada
una secuencia ptima de decisiones, toda subsecuencia de ella es, a su vez, ptima.

En este caso sigue siendo posible el ir tomando decisiones elementales, en la confianza de que
la combinacin de ellas seguir siendo ptima, pero ser entonces necesario explorar muchas
secuencias de decisiones para dar con la correcta, siendo aqu donde interviene la programacin
dinmica.

Contemplar un problema como una secuencia de decisiones equivale a dividirlo en problemas


ms pequeos y por lo tanto ms fciles de resolver como hacemos en Divide y Vencers,
tcnica similar a la de programacin dinmica. La programacin dinmica se aplica cuando la
subdivisin de un problema conduce a:

Una enorme cantidad de problemas.


Problemas cuyas soluciones parciales se solapan.
Grupos de problemas de muy distinta complejidad.

5. SUBESTRUCTURA OPTIMA

Una subestructura ptima significa que se pueden usar soluciones ptimas de subproblemas
para encontrar la solucin ptima del problema en su conjunto. Por ejemplo, el camino ms
corto entre dos vrtices de un grafo se puede encontrar calculando primero el camino ms corto
al objetivo desde todos los vrtices adyacentes al de partida, y despus usando estas soluciones
para elegir el mejor camino de todos ellos.

En general, se pueden resolver problemas con subestructuras ptimas siguiendo estos tres
pasos:

1. Dividir el problema en subproblemas ms pequeos.


2. Resolver estos problemas de manera ptima usando este proceso de tres pasos
recursivamente.
3. Usar estas soluciones ptimas para construir una solucin ptima al problema original.

Los subproblemas se resuelven a su vez dividindolos en subproblemas ms pequeos hasta que


se alcance el caso fcil, donde la solucin al problema es trivial. Decir que un problema tiene
subproblemas superpuestos es decir que se usa un mismo subproblema para resolver diferentes
problemas mayores.

Por ejemplo, en la sucesin de Fibonacci (F = F + F y F = F + F ) calcular cada trmino


3 1 2 4 2 3

supone calcular F . Como para calcular F hacen falta tanto F como F , una mala
2 5 3 4

implementacin para calcular F acabar calculando F dos o ms veces.


5 2

Esto sucede siempre que haya subproblemas superpuestos: una mala implementacin puede
acabar desperdiciando tiempo recalculando las soluciones ptimas a problemas que ya han sido
resueltos anteriormente.

Esto se puede evitar guardando las soluciones que ya hemos calculado. Entonces, si necesitamos
resolver el mismo problema ms tarde, podemos obtener la solucin de la lista de soluciones
calculadas y reutilizarla. Este acercamiento al problema se llama memoizacin (no confundir
con memorizacin; en ingls es llamado memoization, vase en).
Si estamos seguros de que no volveremos a necesitar una solucin en concreto, la podemos
descartar para ahorrar espacio. En algunos casos, podemos calcular las soluciones a problemas
que de antemano sabemos que vamos a necesitar.

En resumen, la programacin hace uso de:

Subproblemas superpuestos
Subestructuras ptimas
Memorizacin

6. LA PROGRAMACIN TOMA NORMALMENTE UNO DE LOS DOS SIGUIENTES


ENFOQUES:

Top-down: El problema se divide en subproblemas, y estos se resuelven recordando las


soluciones por si fueran necesarias nuevamente. Es una combinacin de memorizacin
y recursin.

Bottom-up: Todos los problemas que puedan ser necesarios se resuelven de antemano y
despus se usan para resolver las soluciones a problemas mayores. Este enfoque es
ligeramente mejor en consumo de espacio y llamadas a funciones, pero a veces resulta
poco intuitivo encontrar todos los subproblemas necesarios para resolver un problema
dado.

Originalmente, el trmino de programacin dinmica se refera a la resolucin de ciertos


problemas y operaciones fuera del mbito de la Ingeniera Informtica, al igual que haca la
programacin lineal. Aquel contexto no tiene relacin con la programacin en absoluto; el
nombre es una coincidencia.

El trmino tambin lo us en los aos 40 Richard Bellman, un matemtico norteamericano, para


describir el proceso de resolucin de problemas donde hace falta calcular la mejor solucin
consecutivamente.

Algunos lenguajes de programacin funcionales, sobre todo Haskell, pueden usar la


memorizacin automticamente sobre funciones con un conjunto concreto de argumentos, para
acelerar su proceso de evaluacin. Esto slo es posible en funciones que no tengan efectos
secundarios, algo que ocurre en Haskell pero no tanto en otros lenguajes.

Una resolucin por programacin dinmica se puede dividir en:

caracterizacin de la estructura de la solucin ptima.


definicin recursiva de la solucin ptima.
calculo bottom-up o top-down de las subsoluciones ptimas (implementacin).
construccin de la solucin ptima a partir de la informacin calculada.
7. DISEO DE UN ALGORITMO DE PROGRAMACIN DINMICA

Para que un problema pueda ser abordado por esta tcnica ha de cumplir dos condiciones:
La solucin al problema ha de ser alcanzada a travs de una secuencia de decisiones,
una en cada etapa
Dicha secuencia de decisiones ha de cumplir el principio de optimalizad.

El diseo de un algoritmo de Programacin Dinmica consta de los siguientes pasos:

1. Planteamiento de la solucin como una sucesin de decisiones y verificacin de que


sta cumple el principio de ptimo.
2. Definicin recursiva de la solucin.
3. Clculo del valor de la solucin ptima mediante una estructura de datos en donde se
almacenan soluciones a problemas parciales para reutilizar los clculos.
4. Construccin de la solucin ptima haciendo uso de la informacin contenida en la
estructura de datos.

Si se llama a fib(5), se produce un rbol de llamadas que contendr funciones con los mismos
parmetros varias veces:
En particular, fib(2) se calcula dos veces. En ejemplos mayores, se recalculan muchos otros
valores de fib, o subproblemas.

Para evitar este inconveniente, se puede resolver el problema mediante programacin


dinmica, y en particular, utilizando el enfoque de memorizacin (guardar los valores
que ya han sido calculados para utilizarlos posteriormente).

As, rellenaramos una tabla con los resultados de los distintos subproblemas, para
reutilizarlos cuando haga falta en lugar de volver a calcularlos. La tabla resultante sera
una tabla unidimensional con los resultados desde 0 hasta n.

7.1 FIBONACCI UTILIZANDO (PROGRAMACIN DINMICA -BUTTOM-


UP)

7.2 FIBONACCI UTILIZANDO (PROGRAMACIN DINMICA -TOP-DOWN)


8. MEMORIZACION

Para evitar calcular lo mismo varias veces: Cuando se calcula una solucin, sta se almacena.
Antes de realizar una llamada recursiva para un sub-problema, se comprueba si la solucin ha
sido obtenida previamente: Si no ha sido obtenida, se hace la llamada recursiva y, antes de
devolver la solucin, sta se almacena. Si ya ha sido previamente calculada, se recupera la
solucin directamente (no hace falta calcularla). Usualmente, se utiliza una matriz que se rellena
conforme las soluciones a los conforme las soluciones a los sub-problemas sub-problemas son
calculados.

9. APLICACIONES DE LA PROGRAMACION DINAMICA

La programacin dinmica se adapta bien a problemas de carcter secuencial como por ejemplo:

Bsqueda del camino ms corto entre dos puntos.


Planificacin de tareas.
Gestin de recursos escasos.
Gestin de stocks.
Coordinacin hidrotrmica

10. EJERCICIO DEL ACM: WEDDING SHOPPING


Pruebas de Entrada
LLENANDO LOS VALORES A LA TABLA
DE MEMORIZACIN

Al momento de armar el rbol de recurrencia se


hace una pregunta al mtodo y pregunta si el dato
ingresado esta en memoria, como a un principio
la taba esta vaca esta se llena con el dato
ingresado y pasa al siguiente dato y vuelve a
preguntar.
Mientras que el dato preguntado se encuentre en
memoria esta solo sacara el valor .

COMPILACIN DEL CDIGO EN JAVA

COMPARACION DE TIEMPOS DE EJECUCIN DEL ALGORITMO CON


MEMORIZACION Y SI MEMORIZACIO AMBOS CASOS SON LLAMADOS
RECURSIVAMETE
11. CODIGO FUENTE DEL EJERCICIO: WEDDING SHOPPING

import java.util.*;
class shopping{
public static void imprimir(int arr[][]){
for(int i=0 ; i<arr.length;i++){
for(int j=0;j<arr[i].length;j++){
System.out.print(arr[i][j]+" ");
}
System.out.println();
}
}

public static int minimo(int M , int C , int tipos[][]){


int sum=0;
String cu="0";
if(M<0){
return Integer.MAX_VALUE;
}
else if(C==0){
return M;
}else{
int ayuda=Integer.MAX_VALUE;
for(int j=0;j<tipos[C-1].length;j++){
ayuda=(int)(Math.min(minimo(M-tipos[C-1][j],C-1,tipos),ayuda));
}
return ayuda;
}

public static void main(String args[]){


Scanner scan = new Scanner(System.in);
int N=scan.nextInt();
int [][] tipos=null;
for(int i=0 ; i<N ;i++){
int M=scan.nextInt();
int C=scan.nextInt();
tipos=new int[C][];
for(int j=0;j<tipos.length;j++){
int tipo=scan.nextInt();
tipos[j]=new int[tipo];
for(int m=0;m<tipos[j].length;m++){
tipos[j][m]=scan.nextInt();
}
}
if(minimo(M,C,tipos)>M){
System.out.println("no solution");
}else{
int num=M-minimo(M,C,tipos);
System.out.println(num);
}
}
}
}

12. EJEMPLO DE PROGRAMACION DINAMICA

El problema de un viaje

Se va a realizar un viaje desde la ciudad A hasta la ciudad J. No hay un camino directo, pero
existen varias opciones para llegar a J a partir de A, pasando por otras ciudades. Esas opciones y
los costos asociados a cada tramo del viaje don dados en el diagrama.
El objetivo es realizar el viaje de A a J con el menor costo posible. Por ejemplo la ruta ADFHI
tiene un costo de 29. Analizar todas las trayectorias no es una tcnica satisfactoria. Este
problema tiene un total de 125 posibles rutas.

Este es un problema clsico de Programacin Dinmica.

No sabemos a priori si la trayectoria ptima pasar por H o por I. Pero sabemos que si pasa
por H tendr su costo es incrementado en 7 para llegar hasta J. As mismo, pasando por I su
costo ser incrementado en 5.

No sabemos si la trayectoria ptima pasar por E, F o G. Pero sabemos que:

Si pasa por E, podra ir va H y ese recorrido cuesta 6+7=13, o va I, lo que cuesta


9+5=14. Est claro que si la trayectoria ptima pasa por E, el camino ptimo de ah en
adelante es EHJ, de costo 13. Marcamos esos costos en el diagrama.

Si la trayectoria ptima pasa por F, es indiferente seguir FHJ o FIJ, ya que ambas
opciones tienen un costo de 17

Si la trayectoria ptima pasa por G, no hay otras opciones, el nico camino posible es
GIJ, con costo de 8

As, si la trayectoria ptima pasa por E, F, G los costos mnimos de cada uno de esos puntos
hasta J ya son conocidos.

De igual forma podemos calcular los costos si la trayectoria ptima pasa por B, C,D.
A partir de B la mejor decisin es viajar a E con un costo de 21 hasta alcanzar J
A partir de C, la mejor opcin es viajar a G
A partir de D, la mejor es ir hacia G

Desde el punto de partida, que es un punto obligatorio de paso, podemos viajar a


B, C o D y para cada opcin el costo total ser:
Va B 4+21 = 25
Va C 5+15 = 20
Va D 3+19 = 22

As, como a cada paso ya habamos seleccionado la mejor opcin sabemos que la trayectoria
ptima pasa por ACGIJ y que su costo es de 20

Los elementos bsicos de la PD, son:

Los instantes en que se inicia o termina un viaje son las etapas, en nuestro problema
tenemos 5 etapas. Formalmente, la etapa es una variable discreta. Normalmente llamada
k
En cada etapa el viajero se encuentra en una ciudad, que representa el estado del
viajero. Formalmente, el estado es una variable ( X ) que describe completamente el
sistema en una etapa dada. X(k)
Para ocupar un nuevo estado en la etapa siguiente, el viajero tiene que tomar una
decisin: viajar a la siguiente ciudad. La decisin es una variable ( normalmente
denominada por u(k) )
Solo algunas ciudades pueden ser alcanzadas en una determinada etapa k. Estas
ciudades forman el conjunto de estados viables que X(k) puede asumir en la etapa k. En
el ejemplo, en la etapa k=2, los estados viables son E, F,G.
Dado un determinado estado del sistema x(k), existe un conjunto de decisiones
admisibles que pueden ser tomadas a partir de x(k). Por ejemplo, a partir de x(1) = D, el
conjunto de decisiones admisibles es ir hacia F o hacia G. Aunque E sea un estado
viable en k=2, no puede ser alcanzado a partir de D. Por lo tanto la decisin ir para E
no es admisible.

La ecuacin recursiva del sistema, o ecuacin de transicin de estado describe la relacin entre
el estado en una etapa dada, la decisin entonces aplicada y el nuevo estado resultante

f :(x(k), u(k),k) f ( x(k), u(k),k) = x(k+1)

El estado inicial del sistema es la condicin en que el sistema se encuentra en la etapa inicial .
Ese es un estado nico

x(0) = {x(0}

Una poltica admisible aplicada a partir de x(0) es una secuencia de decisiones:

de tal modo que, si definimos:

x(k+1) = f ( x(k),u(k), k) k = ko,,N-1


x(k) X(k) k= k +1,,N
0

La funcin objetivo est dada por:


El estado Terminal es el conjunto x(N). Al contrario del estado inicial que es nico, l puede
estar constituido por ms de un estado viable.

En general el problema de Programacin Dinmica planteado es:

Encontrar, si existe, una poltica admisible que aplicada al estado inicial, lleva el sistema a la
etapa final optimizando (maximizando o minimizando) la funcin objetivo.

Se observa que, si existe alguna poltica admisible, entonces existe una poltica ptima, ya que
el nmero de polticas admisibles no puede ser infinito.

13. EL PROBLEMA DE LA DIMENSIONALIDAD

Segn se ha mencionado, la aplicacin de la Programacin Dinmica convencional en la


optimizacin de sistemas hidro- trmicos, limita la solucin a problemas con hasta unos pocos
embalses, esto debido a lo que se ha denominado como plaga de dimensionalidad (Excesivas
necesidades de memoria de computadora y tiempo de computacin)

La solucin de la ecuacin de recursiva requiere usualmente la discretizacin del espacio de


estados. Suponiendo que cada uno de los N volmenes de los N embalses (N niveles ) y cada
una de las N aportes en la etapa previa A sean discretizados en M intervalos, habrn M
t-1
2N

estados en el espacio de estados.

El nmero de estados discretizados y, en consecuencia el esfuerzo computacional aumenta


exponencialmente con el nmero de variables de estado. Esto implica que la solucin del
problema es irrealizable an para sistemas con pocos embalses. Para un estudio en etapas
mensuales es normal analizar 5 aos, o sea 5x12= 60, o para etapas semanales para 2 aos
2x52= 104, supongamos M=20 etapas

1 embalse 20 2
= 400 estados
2 embalse 20 4
= 160000 estados
3 embalse 20 6
= 64 millones de estados
4 embalse 20 8
= 25000 millones de estados
5 embalse 20 10
= 10 billones de estados

Por ello, se han utilizado algunas tcnicas fundamentadas en la PD tales como el Mtodo de
Aproximaciones Sucesivas [3.8], Programacin Dinmica Discreta Diferencial [3.2], [3.3]. De
acuerdo con Yakowitz (1982), las mayores soluciones numricas de programacin dinmica
estocstica en el contexto, o fuera, de la literatura de recursos hidrulicos por nosotros conocida,
son para problemas que tienen como mximo dos o tres variables de estado. As mismo, los
autores que relatan sus resultados, a menudo destacan la ferocidad del esfuerzo computacional.

Las ltimas dos tcnicas aplicadas a la operacin de embalses y reportadas como las ms
eficientes son: Programacin Dinmica Diferencial, y el Algoritmo de Optimalidad Progresiva
Sin embargo requieren que la funcin objetivo sea diferenciable y de restricciones lineales.

La otra tcnica reportada es la PD de Estados Binarios, tcnica que propone, al igual que la otras
mencionadas, una nueva aproximacin comenzando con una trayectoria de prueba, pero busca
una mejora de la funcin objetivo con el menor nmero de evaluaciones, meta que se logra
gracias a que cada combinacin est formada por slo dos valores por coordenada del espacio
de estados. As, se logra una reduccin significativa del tamao de memoria requerido para la
solucin del problema, lo mismo que la disminucin de los tiempos de convergencia.

14. CONCLUSIONES

La Programacin Dinmica es una tcnica que permite la optimizacin de soluciones a


problemas adaptan dndolos a la metodologa divide y vencers, fraccionando el problema en
subproblemas y solucionando a cada uno de ellos mediante el uso de la recursividad para luego
combinar estas soluciones parciales para obtener la solucin al problema. Cabe destacar que
para que un problema se pueda resolver mediante la Programacin Dinmica debe cumplir
ciertas caractersticas para que pueda ser tratado como as .

Conviene resaltar que a diferencia de la programacin lineal, el modelado de problemas de


programacin dinmica no tiene una forma estndar. As, para cada problema es necesario
especificar cada uno de los componentes que caracterizan un problema de programacin
dinmica.

BIBLIOGRAFIA

Manuel Maurette e Ignacio Ojea, Programacin Dinmica, Junio de 2006.


Bohorquez Jaime y Cardozo Rodrigo, Programacin Dinmica, Anlisis de Algoritmo 1992.
Ramos, Andres, Programacin dinmica (DP),
Universidad Pontificia Comillas.
Profesor: Julio Cesar Lpez, Programacin Dinmica, Universidad del Valle, 8 de Noviembre
del 2008.
Goic F. Marcel, Programacin Dinmica, Universidad de Chile, Facultad de Ciencias F sicas y
Matemticas, Departamento de Ingeniera Indus-
trial.

Você também pode gostar