Presentación 10%
Evaluación - Programación No Numérica 2
José Manuel Dávila Durán
CI V-26.866.696
Instituto Universitario Politécnico Santiago Mariño
Sede Maracay
PPT GESTIÓN ESCOLAR 2024 Comités y Compromisos.pptx
Presentación: Programación Dinámica
1. Programación
Dinámica
REPÚBLICA BOLIVARIANA DE VENEZUELA
MINISTERIO DEL PODER POPULAR PARA LA
EDUCACIÓN SUPERIOR
INSTITUTO UNIVERSITARIO POLITÉCNICO
“SANTIAGO MARIÑO”
EXTENSIÓN - MARACAY
ALUMNO:
JOSÉ MANUEL DÁVILA
C.I: V-26.866.696
PROGRAMACIÓN NO NUMÉRICA II
MARACAY, JULIO DE 2020.
2. Introducción
La Programación Dinámica es un método de optimización de
extraordinaria versatilidad. Si bien fue desarrollada especialmente para
la resolución de problemas en Procesos de Decisión en Múltiples Pasos,
diferentes investigaciones han mostrado que las mismas ideas pueden
utilizarse en otro tipo de problemas de matemática aplicada, e incluso
pueden ser útiles en el planteo de algunas cuestiones teóricas.
Habiendo surgido en los inicios de la época de las computadoras, la
Programación Dinámica fue, además, concebida con un ojo puesto en
esta potente herramienta. La Ecuación Funcional que se obtiene, para
cada problema, a través del uso del Principio de Optimalidad de
Bellman permite, con mayor o menor esfuerzo dependiendo del caso,
establecer una recurrencia que es, en sí misma, un algoritmo que
resuelve el problema en cuestión.
3. Programación
Dinámica
Definición
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.
La programación dinámica es una técnica matemática que se
utiliza para la solución de problemas matemáticos seleccionados,
en los cuales se toma un serie de decisiones en forma secuencial.
Proporciona un procedimiento sistemático para encontrar la
combinación de decisiones que maximice la efectividad total, al
descomponer el problema en etapas, las que pueden ser completadas por
una o más formas (estados), y enlazando cada etapa a través de cálculos
recursivos.
Dividir un problema en subproblemas más sencillos para poder resolverlos y luego
combinar sus soluciones para obtener la solución general, es una técnica que usamos para
resolver problemas, como por ejemplo en los recursivos. Pero a veces los subproblemas se
solapan o se calcula lo mismo en varios subproblemas, restando eficiencia a la ejecución de
la solución final.
4. Programación Dinámica: Definiciones básicas
Es la parte del problema que posee un conjunto de
alternativas mutuamente excluyentes, de las cuales se
seleccionará la mejor alternativa.01
Etapa:
02
Es el que refleja la condición o estado
de las restricciones que enlazan las
etapas. Representa la “liga” entre etapas
de tal manera que cuando cada etapa se
optimiza por separado la decisión
resultante es automáticamente factible
para el problema completo.
Estado:
5. Esquema de una etapa
La representación gráfica de una etapa sería de la
siguiente manera:
E
S
T
A
D
O
S
𝑞𝑖
REST
O
𝑋𝑖
…
𝑋𝑖𝑗
…
𝑋𝑖𝐽
𝑋𝑖*
Donde:
𝑞𝑖 = Variable de
estado en etapa i
𝑋𝑖𝑗 = Uno de los
valores que
puede
adoptar la
variable de
decisión “Xi” en la
etapa i
𝑋𝑖* = Decisión
óptima de la
etapa i.
6. 01
02
03
Formulación y
solución de problemas
La programación dinámica no cuenta con una formulación
matemática estándar, 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.
Comúnmente resuelve el problema por etapas, en donde cada
etapa interviene exactamente una variable de optimización (u
optimizadora).
La teoría unificadora fundamental de la programación dinámica es el
Principio de Optimalidad, que nos indica básicamente como se puede
resolver un problema adecuadamente descompuesto en etapas utilizando
cálculos recursivos. Esta teoría establece que:
“Una política óptima tiene la propiedad de que, independientemente de las
decisiones tomadas para llegar a un estado particular, en una etapa
particular, las decisiones restantes deben constituir una política óptima
para abandonar ese estado”
7. Para resolver problemas de
programación dinámica se necesita:
Un grado de creatividad: es un método
de resolución de problemas, que aunque
mantiene algunas características comunes
entre unos y otros, cada aplicación
requiere un grado de práctica, creatividad
y conocimientos para lograr dividir el
problema grande en muchos pequeños
lógicos y que se encuentren relacionados
entre sí.
01
02
Un buen conocimiento de la estructura general de
los problemas de programación dinámica para
reconocer cuando un problema se puede resolver por
medio de estos procedimientos y como esto se puede
llevar a cabo.
8. Características de la Programación Dinámica
El problema se
puede dividir en etapas
que requieren una
política de decisión en
cada una
Cada etapa tiene
cierto número de
estados asociados a ella.
El efecto de la política de
decisión en cada etapa es
transformar el estado actual en un
estado asociado con la siguiente
etapa.
El procedimiento de solución esta diseñado para
encontrar una política óptima para el problema
completo.
Dado un estado actual, una
política óptima para las etapas
restantes es independiente de
la política adoptada en las
etapas anteriores (principio de
optimalidad).
El procedimiento de
solución se inicia al
encontrar la política
optima para la ultima
etapa.
Se dispone de una relación recursiva que
identifica la política óptima par la etapa n
dada la política optima para la etapa (n+1)
9. Recursividad
Podemos definir a la recursividad como un método de definir un
proceso a través del uso de premisas que no dan más información que el
método en sí mismo o que utilizan los mismos términos que ya aparecen
en su nombre, por ejemplo cuando se dice que la definición de algo es
ese algo mismo.
La recursividad tiene como característica principal la sensación de
infinito, de algo que es continuo y que por tanto no puede ser
delimitado en el espacio o el tiempo porque se sigue replicando y
multiplicando de manera lógica y matemática.
Existen dos formas de plantear la fórmula de recursividad en los
problemas de programación dinámica:
Recursividad de Retroceso: el problema se resuelva partiendo de la
última etapa hacia la primera.
Recursividad de Avance: el problema se resuelve partiendo de la
primera etapa hacia la última.
10. Recursividad
Las formulaciones de avance y retroceso son en realidad equivalentes en
términos de cálculo. Sin embargo, hay situaciones donde habría alguna
diferencia, en la eficiencia del cálculo, según la formulación que se utilice. Esto
sucede en particular en problemas donde intervine la toma de decisiones
conforme transcurre el tiempo. En esto caso las etapas se designan con base
en el estricto orden cronológico de los periodos que ellas representan y la
eficiencia de los cálculos dependerá de si se utiliza formulación de avance o
retroceso.
11. Este problema se refiere a un vendedor mítico que tuvo que
viajar hacia el oeste por diligencia, a través de tierras indias
hostiles, aproximadamente hace 125 años. Aun cuando su punto
de partida y destino eran fijos, tenía un número considerable de
opciones para elegir, qué estados recorrer en su ruta.
El Problema de la Diligencia
12. 01
El Problema de la
Diligencia: Ejemplo
Un caza fortunas de Missouri decide irse al oeste a unirse
a la fiebre del oro en California . Tiene que hacer el viaje en
diligencia a través de territorios sin ley donde existían serios
peligros de ser atacados por merodeadores. Aún cuando su
punto de partida y destino eran fijos, tenia muchas opciones
en cuanto a que estados debía elegir como puntos
intermedios. Se desea estimar la ruta mas segura, como el
costo de la póliza para cualquier jornada de la diligencia esta
basada en una evaluación de seguridad del recorrido, la ruta
mas segura debe
ser aquella que tenga el costo total mas barato.
¿Cuál es la ruta que minimiza el costo total de la póliza ?
14. Dividir el
problema
Considerar
cada uno
Encontrar
solución óptima
Resolver el
problema
original
0
1
0
2
0
3
0
4
Solución del Problema
En cada problema aumentado se puede encontrar la solución
óptima tomando en cuenta los resultados obtenidos en la
interacción anterior.
Los cálculos se realizan en etapas dividiendo el problema en subproblemas.
Después, se considera por separado cada subproblema con el fin de reducir el
número de operaciones de cálculo.
Se comienza con una pequeña porción del problema original y se encuentra la
solución optima.
Luego, se agranda gradualmente el problema y se encuentra la
solución óptima actual a partir de la que le precede, hasta
resolver el problema original completo.
0
5
15. Procedimiento
de Solución
Para este caso se empleará el desarrollo del problema con un
recorrido hacia atrás.
Cuando el cazafortunas tiene una sola etapa por recorrer (n=4), su
ruta de ahí en adelante esta perfectamente determinada por su estado
actual (ya sea H o I) y su destino final, X4 = J, de manera que la ruta
para esta ultima jornada en diligencias es S = J.
La solución al problema es:
𝑓4 𝐻 = 3 𝑓4 𝐼 = 4
16. Procedimiento de Solución
Cuando se tienen dos etapas por recorrer (n=3), se
analiza de la siguiente manera:
Supóngase que se encuentra en el estado F,
entonces como se ve en la figura, se debe ir al estado
H o al estado I. a un costo de CF,H = 6 o CF,I =3.
Si se elige el estado H, el costo adicional mínimo al
llegar ahí es 3, por tanto el costo de decisión es 6+3=9,
de igual manera si se elige el estado I, el costo total es
3+4=7 que es menor por lo tanto se escogerá el
estado I.
17. Se trabaja de manera similar con los otros dos estados posibles S = E y S = G, cuando
quedan dos jornadas por viajar, los resultados son:
Procedimiento de Solución
𝑓3 𝐸 = 4 𝑓3 𝐹 = 7 𝑓3 𝐺 = 6
18. Procedimiento de Solución
La solución para el problema de tres etapas
(n=2) se obtiene en forma parecida.
Por ejemplo supóngase que el agente se
encuentra en el estado C, como se muestra el
diagrama.
Ahora deberá ir al estado E, F o G con un
costo inmediato de:
CC,E = 3 ; CC,F = 2 ; CC,G = 4
respectivamente.
19. Procedimiento de Solución
Al llegar aquí el costo adicional mínimo hasta llegar a su
destino esta dado de la siguiente manera:
El mínimo de estos tres números es 7, por lo que el
costo mínimo
desde el estado C al final es:
f * 2(C) = 7
y el destino inmediato debe ser X*2 = E.
Se realizan cálculos similares cuando se comienza
desde el estado B o D. Los resultados son:
f * 2(B) = 11 f * 2(C) = 7 f * 2(D) = 8
20. Si se pasa al problema de cuatro etapas (n=1), los
cálculos son parecidos a los que se acaban de mostrar
para el problema de tres etapas (n=2), excepto que
ahora hay solo un inicio posible, S=A , como se
muestra el diagrama.
Los resultados se resumen de la siguiente manera:
Como el mínimo costo es 11, por tanto los caminos
pueden ser C o D. En este punto se puede identificar la
solución óptima. Los resultados indican los caminos
óptimos a seguir:
A D E H J o también sería A D F I
J, las dos tienen un costo total de 11.
21. Arboles binarios de búsqueda
Un árbol es un Árbol Binado de Búsqueda (ABB) si éste es binario y
sus nodos son subárboles de búsqueda binarios y contienen información
ordenada de tal que todos los elementos a la izquierda de la raíz son
menores a la raíz y todos lo elementos a la derecha de la raíz son
mayores a la raíz.
Características:
Todos los nodos a la izquierda son menores al padre.
Todos los nodos a la derecha son mayores al padre.
Y solo pueden tener 2 hijos a lo mucho.
22. 1
2
3
Operaciones de los Arboles Binarios de Búsqueda
Inserción
La inserción es similar a la búsqueda y se puede
dar una solución tanto iterativa como recursiva. Si
tenemos inicialmente como parámetro un árbol
vacío se crea un nuevo nodo como único
contenido el elemento a insertar. Si no lo está, se
comprueba si el elemento dado es menor que la
raíz del árbol inicial con lo que se inserta en el
subárbol izquierdo y si es mayor se inserta en el
subárbol derecho.
Búsqueda
La búsqueda en un árbol binario de búsqueda consiste en acceder a la raíz del árbol, si el elemento a
localizar coincide con éste la búsqueda ha concluido con éxito, si el elemento es menor se busca en el
subárbol izquierdo y si es mayor en el derecho. Si se alcanza un nodo hoja y el elemento no ha sido
encontrado es que no existe en el árbol. Estas búsquedas son bastantes eficientes teniendo un máximo
de comparaciones en el rango de [log2(N+1)] y N.
Borrado
Esta operación es más compleja y hay
que tener en cuenta a borrar un nodo hija
o padre el impacto que tendrá en la
estructura del mismo. Al eliminar un nodo,
el árbol binario de búsqueda tienda a
reestructurarse en base al dato eliminado y,
en caso de requerirlo, se ordena
nuevamente como un árbol binario de
búsqueda.
23. Nosotros vamos a abordar la solución al mismo, tanto
mediante programación dinámica como con Bottom_up. Algoritmos
Arboles binarios de búsqueda óptimos
Si no vamos a modificar un árbol de búsqueda, y sabemos exactamente con qué frecuencia cada artículo
será accesible, podemos construir un árbol binario de búsqueda óptimo, que es un árbol de búsqueda donde
el coste medio de buscar un artículo (el esperado coste de búsqueda) se reduce al mínimo.
Incluso si sólo tenemos estimaciones de los costos de búsqueda, este sistema puede acelerar
considerablemente las búsquedas en promedio.
25. Algoritmo de Solución
Partiendo del algoritmo
principal, a la izquierda, un
pseudocódigo para nuestra
función SUM sería:
Complejidad
El tiempo de complejidad
es O(n⁴). Pero este tiempo se
puede reducir a O(n³) pre-
calculando la suma de las
frecuencias en lugar de
llamar a SUM una y otra vez.
Comprobaciones
Hay que tener en cuenta que
el tiempo depende del hardware
del ordenador de pruebas y
también de las frecuencias que le
pases en relación a cada nodo /
key.
26. Algoritmo con
Buttom Up
Bottom-up es una técnica que
se basa en ir resolviendo los
subproblemas desde los de
menor tamaño a los de más. De
tal modo que al final nos de un
resultado global de todo nuestro
problema a resolver.
En nuestro algoritmo, iremos
iterando e insertando en una
matriz los resultados de cada
subárbol, es decir, la suma de del
árbol(i,j). De tal forma que al final
nos quedará el subárbol de coste
medio mínimo.
El Pseudocódigo:
Comprobaciones
Como pudimos observar en la resolución
mediante programación dinámica, el
algoritmo es bastante efectivo, y aunque para
cierta cantidad de nodos con sus respectivos
frecuencias, el número de iteraciones sea
mayor, sigue aportando una buena solución al
problema planteado. Comparado con la
técnica bottom-up, el algoritmo de
programación dinámica resuelve nuestro
problema en la mitad de iteraciones.
27. El Problema del Vendedor Viajero
El Problema del Vendedor Viajero (conocido también como Travelling
Salesman Problem o simplemente TSP) consiste en encontrar el circuito
óptimo (en términos del viaje más corto) que deberá seguir un vendedor en
un caso con n ciudades, en el que cada
ciudad se visita exactamente una vez.
Básicamente es una adaptación del Problema de Asignación que
considera restricciones adicionales que garantiza la exclusión de
subcircuitos en la solución óptima.
Específicamente en el caso de n ciudades se define las variables de decisión de
la siguiente forma:
Sea dij la distancia de la ciudad i a la
ciudad j, donde , el modelo del
agente o vendedor viajero corresponde
a:
28. El Problema del
Vendedor Viajero
El conjunto de restricciones (1) y (2) definen un modelo de
asignación tradicional. Lamentablemente en general, el problema de
asignación producirá soluciones de subcircuito más que circuitos
completos que abarque las n ciudades.
Para ilustrar los conceptos de circuito y subcircuito en el contexto del
Problema del Vendedor Viajero, consideremos un agente de venta que vive
en la ciudad 1. Miami (Florida) en Estados Unidos y debe visitar a
importantes clientes en las siguientes ciudades: 2. Chicago (Illinois), 3.
Houston (Texas), 4. Las Vegas (Nevada) y 5. San Francisco (California). Para
mayor claridad se han destacado los estados mencionados anteriormente
con un color distintivo.
Un circuito factible sería viajar en el siguiente orden:
Miami (FL), Chicago (IL), Houston (TX), Las Vegas (NV), San
Francisco (CA), Miami (FL). Es decir:
Por otra parte un subcircuito correspondería, por ejemplo,
a Miami (FL), San Francisco (CA), Las Vegas (NV), Miami (FL),
junto a Houston (TX), Chicago (IL), Houston (TX). Es decir:
lo que naturalmente no es una solución factible para el
problema que se busca resolver.
29. Descripción del Problema del Vendedor Viajero
Se tiene un número de nodos (ciudades, localidades, tiendas, empresas, etc.) que
deben ser visitador por una entidad (personas, agente viajero, automotor, avión,
autobús, etc.) sin visitar dos veces el mismo nodo. Si tenemos 3 nodos (a, b y c) por
visitar, entonces tendríamos una función de combinación de combinaciones sin
repetición C(3, 2), es decir, tendríamos 6 posibles soluciones: abc, acb, bac, bca, cab,
cba. Para el caso de 4 nodos tendríamos 12 combinaciones, para 10 nodos serían 90
combinaciones, para 100 habrían 9,900, y así sucesivamente.
02
Está clasificado como Problema de Optimización combinatoria, donde intervienen cierto
número de variables, donde cada variable puede tener N diferentes valores, y cuyo número es de
carácter exponencial, lo que da lugar a múltiples soluciones óptimas.
Características:
Es un problema considerado difícil
de resolver, denominándose en
lenguaje computacional NP
Completo, es decir, es un problema
para que el no que no se puede
garantizar que se encontrará la
mejor solución en un tiempo de
cómputo razonable.
Emplea 3 tipos de variables:
Tiempo de recorrido entre
ciudades: horas minutos,
semanas, etcétera.
Distancia de recorrido por
ciudades: metros, kilómetros,
millas, milímetros.
Costo de traslado: dinero,
desgaste de las piezas, gasto de
energía, etcétera.
Entre las distintas variables que se
pueden adoptar en los problemas
destacan:
Circuitos electrónicos.
Control de semáforos.
Previsión del tránsito terrestre.
Entrega de productos.
Estaciones de trabajo.
Edificación.
Entre otras variables.
30. Aplicación del Problema
El problema del vendedor viajero se puede emplear en
cualquier situación que requiere seleccionar nodos en cierto
orden que reduzca los cortos:
Reparto de
productos: Mejorar
una ruta de entrega
para seguir la más
corta
Transporte: Mejorar
el recorrido de
caminos buscando
la menor longitud.
Robótica: Resolver
problemas de
fabricación para
minimizar el número de
desplazamientos al
realizar una serie de
perforaciones en un
circuito impreso.
Inspecciones a sitios
remotos: Ordenar
los lugares que
deberá visitar un
inspector en el
menor tiempo.
Turismo y agencias de
viaje: A pesar de no
tener conocimiento
explícito de este
problema, las
compañías utilizan
softwares para sus
recorridos.
Horarios de transportes
laborales/escolares:
Utilizan el TSP para sus
rutas óptimas en un
determinado plazo de
tiempo
Secuencias: Se refiere a l
orden en el cual N
trabajos tienen que ser
procesados de tal forma
que se minimice el
costo total de
producción.
31. El problema del agente viajero (TSP), es considerado como un conjunto de
grafos cuyas aristas son los posibles caminos que puede seguir la entidad para
visitar todos los nodos. (Öncan et al., 2009), y cuyo algoritmo se puede
representar de la siguiente manera:
Este problema puede resolverse por diferentes formas:
Enumeración de todas las soluciones factibles: Comparar todas las soluciones
posibles y determinar la más conveniente en costo.
Métodos exactos: También llamados algoritmos óptimos, intentan descartar
familias enteras de posible soluciones tratando así de acelerar la búsqueda y
llegar a una óptima.
Heurísticas: Son métodos que obtienen buenas soluciones en tiempo de
cómputo muy cortos , aunque sin garantizar la solución única.
Algoritmo básico y métodos de resolución
32. Conclusiones
Finales
Un problema de
optimización que se
pueda dividir en etapas y
que sea dinámico en el
tiempo puede resolverse
por programación
dinámica.
Si es posible se validan
los resultados usando
otros métodos de
solución como
programación lineal, no
lineal, entera o teoría de
redes.
El problema del agente
viajero es una
herramienta muy
oportuna que permite
elegir la solución de
mejor beneficio y de esta
manera disminuir costos
de producción o traslado.
La programación
dinámica permite
estudiar problemas
comunes para establecer
la forma más eficiente u
óptima de resolver una
problemática establecida.
Es muy abarcador la
programación dinámica,
desde un viajero, a un
empresario, hasta la
posibilidad de combinar
objetos en una mochila o
espacio determinado
para ahorrar espacio y
costos.
El modelado de
problemas de
programación dinámica
no tienen una forma
estándar, así que resulta
indispensable especificar
los componentes que
caracterizan el problema
33. Bibliografía
Maurette Manuel, Ojeda Ignacio, Programación Dinámica, 2016.
Sasieni, M., Yaspan, A., Friedman L.; Investigación de Operaciones. Métodos y
Problemas; AID, México, 1967.
López Julio Cesar, Programación Dinámica, Universidad del Valle 2008.
Ventsel, Elena; Investigación de Operaciones. Problemas, principios,
metodología; Editorial Mir, Moscú, 1983.
Vicentini, Fabio, Notas de Optimización, 2012
Bertsekas,D.P., Dynamic Programming: Deterministic and Stochastic Models,
Academic Press, 1987.
Dreyfus S.E. y Law A.M., The Art and Theory of Dynamic Programming,
Academic Press, 1977.
Hiller, F. S. Introducción a la Investigación de Operaciones. 2008
Taha, H. A. Investigación de Operaciones. 2005
Fuentes P. Alejandro, Problema del Agente Viajero (2016). Boletín oficial UAEH.
Prawda W. Juan, Métodos y modelos de investigación operativa, Edit. Limusa
1976.