La programación dinámica es un método para resolver problemas de optimización dividiéndolos en subproblemas. Funciona resolviendo los subproblemas de forma recursiva, almacenando sus soluciones para evitar repeticiones. Puede trabajar hacia adelante o hacia atrás, aunque normalmente es más eficiente hacia atrás. Se usa para problemas que exhiben subproblemas superpuestos y estructuras óptimas.
2. Introducción
TSU. Joanna Martínez
Se necesita cierto grado de ingenio y un buen conocimiento de la estructura general de los
problemas de programación dinámica para reconocer cuando y como se puede resolver un
problema por medio de estos procedimientos.
En contraste con la programación lineal, no se cuenta con una formulación matemática estándar para el problema de
programación dinámica, sino que se trata de un enfoque de tipo general para la solución de problemas, y las
ecuaciones específicas que se usan se deben desarrollar para que representen cada situación individual.
Una subestructura óptima significa que se pueden usar soluciones óptimas de subproblemas para encontrar la solución
óptima del problema en su conjunto.
3. Programación dinámica
En informática, la programación dinámica es un método
para reducir el tiempo de ejecución de un algoritmo mediante
la utilización de subproblemas superpuestos y subestructuras
óptimas.
El matemático Richard Bellman inventó la programación
dinámica en 1953 que se utiliza para optimizar problemas
complejos que pueden ser discretizados y secuencializados.
TSU. Joanna Martínez
5. Una etapa en PD se define como la parte del problema que
posee un conjunto de alternativas mutuamente
excluyente, de las cuales se seleccionara la mejor
alternativa.
La idea básica de PD consiste prácticamente en eliminar
el efecto de la interdependencia entre etapas, asociando
una definición de estado con cada etapa. Un estado se
define normalmente como aquel que refleja la condición
de las restricciones que enlazan las etapas.
Modelo del PD
TSU. Joanna Martínez
6. Avances Recursividad
hacia
Delante de la etapa 1 a la
etapa n
Enfoques
Retroceso
Recursividad hacia
Atrás de la etapa n a la
etapa 1
TSU. Joanna Martínez
7. Avance y Retroceso
TSU. Joanna Martínez
Este método de cálculo se conoce como procedimiento de avance porque los cálculos
avanzan de la primera hasta la última etapa. Sin embargo, cuando el lector estudie la
mayoría de las obras dedicadas a la programación dinámica, advertirá que la ecuación
recursiva se construye de manera que los cálculos comienzan en la última etapa y
después “regresan” hacia la etapa 1.
Este método recibe el nombre de procedimiento de retroceso.
La diferencia principal entre los métodos de avance y de retroceso ocurre en la forma
como definimos el estado del sistema.
8. La recursión hacia adelante es el método en la cual los cálculos avanzan de la etapa 1 a la etapa n
Existe la recursión en avance y la recursión en reversa; ambas recursiones producen
la misma solución y no es otra cosa que el orden en el que se han de realizar los cálculos, es decir, si
se va a resolver primero la etapa inicial, o si se empezará por la etapa final. Al visualizar la
recursión en avance, ésta parece más lógica, sin embargo, en las publicaciones sobre programación
dinámica se usa la recursión en reversa de modo invariable. La razón de ésta preferencia es que, en
general, la recursión en reversa es más eficiente desde el punto de vista computacional.
Método o enfoque de ir hacia adelante
TSU. Joanna Martínez
9. Programación de hacia adelante: es aquel que empieza tan pronto se conocen los requerimientos del
trabajo. sus principales características son:
1. Los Trabajo se realizan a petición del cliente
2. El programa puede lograrse aun si falta tiempo para la fecha establecida de entrega.
3. Frecuentemente causa acumulación de Inventario en proceso.
Condiciones del uso del método de ir hacia adelante.
TSU. Joanna Martínez
10. Método recursivo de retroceso
TSU. Joanna Martínez
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 inimaginable se convierte en
una serie de problemas más pequeños y manejables.
La idea de trabajar hacia atrás se introduce mediante la
resolución de acertijos conocidos, luego se muestra cómo
la programación dinámica es útil para solucionar redes,
inventarios y problemas de asignación de recursos.
11. Recursión: formaliza, en esencia, el procedimiento de ir hacia atrás.
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 inimaginable se convierte en una serie de problemas más pequeños y manejables.
La idea de trabajar hacia atrás se introduce mediante la resolución de acertijos conocidos, luego se muestra cómo la
programación dinámica es útil para solucionar redes, inventarios y problemas de asignación de recursos.
Método o enfoque de ir hacia atrás
TSU. Joanna Martínez
12. Condiciones de uso del método de ir hacia atrás.
El procedimiento general de resolución de estas situaciones se divide en el
análisis recursivo de cada una de las etapas del problema, en orden
inverso, es decir comenzando por la última y pasando en cada iteración a
la etapa antecesora. El análisis de la primera etapa finaliza con la
obtención del óptimo del problema.
TSU. Joanna Martínez
13. • El problema se puede dividir en etapas, donde cada una de ellas requiere una política de decisión.
• Cada etapa tiene cierto número de estados asociados a su inicio.
• El efecto de cada política es transformar el estado actual en un estado asociado con el inicio de la segunda
etapa.
• El procedimiento de solución está diseñado para encontrar una política óptima para manejar el problema
completo.
• Una política óptima para las etapas restantes es independiente de la política adoptada en etapas
anteriores.
• El proceso de solución comienza cuando se determina la política óptima para la última etapa.
• Se dispone de una política recursiva que identifica la política óptima para la etapa n, dada la política
óptima para la etapa n+1.
• Cuando se usa esta etapa recursiva, el procedimiento de solución comienza al final y se mueve etapa por
etapa hacia atrás hasta que encuentre la política optima desde la etapa inicial.
Los problemas de programación dinámica poseen las siguientes características:
TSU. Joanna Martínez
14. 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?
Solución:
Al empezar cerca del final del problema, me doy cuenta sagazmente de que
el problema se puede resolver si soy capaz de poner de alguna manera una
onza de leche en la tasa de 4 onzas. Luego lleno la tasa de 9 onzas y vierto
3 onzas de la leche de la tasa de 9 onzas en la taza parcialmente llena de 4
onzas. En este momento me quedo con 6 onzas de leche.
La solución del problema se podría describir como en la tabla anterior (la
situación inicial se escribe al último, y la final se escribe primero).
Ejemplo:
A continuación se mostrara como trabajar hacia atrás para hacer de un problema aparentemente difícil uno casi trivial.
TSU. Joanna Martínez
15. Problema de las 8 Reinas
El problema de las ocho reinas se trata de un acertijo
en el que se colocan ocho reinas sin que se amenacen.
Fue propuesto por el ajedrecista alemán MaxBezzel
en 1848. En el juego de ajedrez la reina amenaza a
aquellas fichas que se encuentren en su misma fila,
columna o diagonal. Las 8 reinas consiste en colocar
sobre un tablero de ajedrez ocho reinas sin que estas se
den jaques entre ellas.
PROBLEMA DE LAS N REINAS
TSU. Joanna Martínez
16. Planteamiento:
Las reinas en el ajedrez se pueden atacar horizontalmente, verticalmente y en diagonal. Se busca encontrar el acomodo de 8 reinas en un
tablero de 8 por 8, donde ninguna reina de jaque a otra.
El problema 8-Queens en el ajedrez es colocar 8 reinas en un tablero de
ajedrez de tal manera que ninguna de las reinas es una amenaza cualquiera
de las otras. El problema es que a la entrada de las 8 columnas de las reinas
en las filas de un tablero de ajedrez, donde 1 es la primera columna y 8 la
última, por ejemplo, 1 2 3 4 5 6 7 8 significa que las reinas están a lo largo de
la diagonal, lo cual no sería una solución válida.
TSU. Joanna Martínez
17. Las reinas en el ajedrez se pueden
atacar horizontalmente, verticalmente
y en diagonal.
Se busca encontrar el acomodo de las
8 reinas en un tablero de 8 por 8,
donde ninguna reina de jaque a otra
Colocar la reina n en la primera casilla
valida de la fila n.
Si una reina no puede llegar a colocarse
en ninguna casilla, se vuelve atrás y se
cambia la posición de la reina n-1.
Intentar colocar las reinas restantes en las
filas que quedan
TSU. Joanna Martínez
18. Colocar la reina n en la primera casilla válida de la fila n - Si una reina no puede llegar a colocarse en ninguna casilla, se vuelve
atrás y se cambia la posición de la reina n-1 - Intentar colocar las reinas restantes en las filas que quedan
El problema de las ocho Reinas es generalizado por el problema de las n Reinas. El problema consiste en colocar n Reinas en un
tablero de ajedrez de de tal manera que ninguna de las Reinas quede atacando a otra. El tamaño del tablero de ajedrez para este
problema es de tamaño n*n. Existe un algoritmo que resuelve este problema generalizado usando la recursión.
Planteamiento Algoritmo:
Algoritmo
Esta es la función recursiva para encontrar el orden
para acomodar a las Reinas. Vemos que cuando se llama a si
misma se tiene que incrementar el número de la fila en 1.
TSU. Joanna Martínez
19. Algoritmo Del código anterior tenemos una condición antes de la llamada recursiva que es "comprobar". Lo que hace
es verificar si ya hay alguna colocada en la fila, la columna y su diagonal.
Ejemplo
En el ejemplo de corrida cuando colocamos como argumento el valor de 8, que es tomado como el número de reinas, nos
imprime como queda la tabla.
TSU. Joanna Martínez
20. Así quedara el tablero para el caso
clásico de las 8 reinas.
Visualmente se comprueba que
ninguna da jaque a otra
TSU. Joanna Martínez
PROBLEMA DE LAS N REINAS
21. La recursión puede evitarse si pensamos en la estrategia de backtracking como una
búsqueda en profundidad en un árbol implícito en el que cada nodo interno es un
arreglo A con una asignación parcial de valores para k variables.
El parámetro k es el nivel de cada nodo y los nodos hoja consisten en asignaciones
completas de variables para A, esto es k = n = length[A].Una búsqueda iterativa
puede hacerse bajando a través de los nodos siempre que sean prometedores, si nos
topamos con uno que no sea prometedor subimos de nivel restando uno a k.
TSU. Joanna Martínez
Existe forma iterativa
22. La programación dinámica es un método de optimización del cálculo de problemas. La programación dinámica es utilizada
en compiladores, que consiste en solucionar cierto problema diviendolo en subproblemas más sencillos, calculando sus resultados y
almacenándolos. Estos resultados posteriormente se utilizan para la resolución del problema final.
Almacenar resultados de subproblemas es una gran ventaja en cálculos dónde se repiten las mismas operación múltiples veces,
mediante el método de la programación dinámica estas operaciones sólo se realizan una vez y se guarda la solución.
Por ello se dice de la programación dinámica, que es un método para resolver problemas que exhiben propiedades de
problemas sobrepuestos y estructura óptima.
Existe una serie de problemas cuyas soluciones pueden ser expresadas recursivamente en términos matemáticos, y
posiblemente la manera más natural de resolverlos es mediante un algoritmo recursivo. Sin embargo, el tiempo de ejecución de la solución
recursiva, normalmente de orden exponencial y por tanto impracticable, puede mejorarse substancialmente mediante la Programación
Dinámica La recursividad es una técnica ampliamente utilizada en matemáticas, y que básicamente consiste en realizar una definición de un
concepto en términos del propio concepto que se está definiendo.
Conclusión
TSU. Joanna Martínez
23. Fuentes Bibliográficas
Libro: Investigación de Operaciones (Aplicaciones y Algoritmos)
Capitulo 18 Pág. 961- 968
Inv. Operaciones, ISC Cuarto Semestre y etiquetada Investigación de operaciones, INVESTIGACION DE
OPERACIONES - TAHA HANDY, INVESTIGACION DE OPERACIONES - TAHA
HANDY - PDF.
Hamdy A Taha. 7ª edición (2004). Investigación de Operaciones. México: Editorial. Pearson educación
http://es.wikipedia.org/wiki/Problema_de_las_ocho_reinasCódigo del
algoritmo:http://elvex.ugr.es/decsai/c/#problemas
TSU. Joanna Martínez
24. TSU. Joanna Martínez
“Nuestra recompensa se encuentraen el esfuerzo
Y no en el resultado, un esfuerzo total es una victoria
completa.”
Mahatma Gandhi