0% encontró este documento útil (0 votos)
37 vistas5 páginas

T4 Proyecto Final II

Cargado por

Luana Robles
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
37 vistas5 páginas

T4 Proyecto Final II

Cargado por

Luana Robles
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIVERSIDAD POLITÉCNICA Y ARTÍSTICA DEL PARAGUAY

FACULTAD DE ARTE Y TECNOLOGÍA

PROYECTO FINAL II

Tema: Trabajo Practico

Alumna: Luana A. Robles Centurion

Carrera: Ingeniería Civil

Profesor: Augusto Rafael De Llamas

San Lorenzo

2024
Programación Dinámica
Tema I: Defino
Programación Dinámica
La programación dinámica es una técnica de optimización matemática y
computacional utilizada para resolver problemas complejos al dividirlos en
subproblemas más pequeños y manejables. Su principal característica es
almacenar soluciones parciales para evitar la repetición de cálculos, logrando así
mayor eficiencia.

Terminología
- Subestructura Óptima: Propiedad donde la solución óptima del problema
principal se construye combinando soluciones óptimas de sus subproblemas.
- Superposición de Subproblemas: Reutilización de los mismos subproblemas
múltiples veces.
- Tabla (Memorización): Estructura de datos para almacenar soluciones
intermedias, como arreglos o matrices.

Tema II: Respondo


¿Qué es Algoritmo de Solución?
Un algoritmo de solución en programación dinámica establece una secuencia de
pasos que permite resolver un problema combinando soluciones de
subproblemas de manera eficiente. Estos algoritmos permiten abordar
problemas como la ruta más corta, optimización de inventarios, o asignación de
recursos.

Función de Valor Óptimo


Es una función que calcula el valor máximo o mínimo posible en un problema de
optimización. Se expresa mediante relaciones recursivas que definen cómo
combinar soluciones de subproblemas para obtener el resultado óptimo global.

Función de Política Óptima


La política óptima determina las decisiones o acciones que deben tomarse en
cada etapa para alcanzar el valor óptimo. Es particularmente útil en problemas
como cadenas de suministro o estrategias de inversión.

Diferencia entre Retroceso y Avance


- Retroceso: El cálculo se realiza desde el final hacia el principio, evaluando la
mejor solución posible desde el resultado deseado.
- Avance: El cálculo se realiza desde el principio hacia el final, resolviendo
subproblemas más pequeños y acumulando resultados parciales para resolver
el problema completo.
Tema III: Cita
Procedimiento de la Programación Dinámica
1. Identificar y definir los subproblemas.
2. Establecer una relación recursiva entre los subproblemas.
3. Resolver los subproblemas desde los más pequeños hacia los más grandes.
4. Almacenar las soluciones intermedias en una tabla para evitar cálculos
redundantes.
5. Combinar las soluciones para encontrar la solución óptima del problema
completo.

Características de un Problema de Programación Dinámica


- Subestructura Óptima: La solución global depende de las soluciones óptimas
de los subproblemas.
- Superposición de Subproblemas: Los subproblemas se resuelven
repetidamente, lo que permite almacenar sus soluciones.
- Eficiencia Computacional: La programación dinámica reduce significativamente
el tiempo de cálculo comparado con enfoques ingenuos.

Resolución de un Problema de Programación Dinámica


Por ejemplo, el Problema de la Mochila: Se busca maximizar el valor de los
objetos que pueden colocarse en una mochila con capacidad limitada.
1. Definición del Estado: f[i][w]: Máximo valor usando los primeros i objetos con
capacidad w.
2. Relación de Recurrencia: f[i][w] = max(f[i-1][w], f[i-1][w-peso[i]] + valor[i]).
3. Implementación: Construir una tabla para almacenar las soluciones parciales
y evitar cálculos repetidos.

Tipos de Programación Dinámica


- Determinística: Todos los datos son fijos y predecibles.
- Estocástica: Incorpora incertidumbre y probabilidades en los datos.
- Con Memorización: Usa estructuras de datos para almacenar soluciones
calculadas previamente.
- Tabular: Construye una tabla de abajo hacia arriba para resolver el problema.

Conceptos Fundamentales de Programación Dinámica

Estrategia de Divide y Vencerás vs. Programación Dinámica

Divide y vencerás: Divide el problema en subproblemas independientes y los


resuelve por separado (por ejemplo, la búsqueda binaria).

Programación dinámica: Divide el problema en subproblemas interdependientes,


almacenando soluciones para evitar redundancias.
Formulación Matemática

Un problema de programación dinámica puede representarse mediante


ecuaciones recursivas:

𝑓(𝑛)=min⁡/max⁡(𝑔(𝑠𝑢𝑏𝑝𝑟𝑜𝑏𝑙𝑒𝑚𝑎𝑠))

f(n)=min/max(g(subproblemas))

Donde 𝑔

g es una función que combina las soluciones de los subproblemas.

Relaciones de Transición

Estas relaciones definen cómo avanzar en la resolución de subproblemas. Por


ejemplo, en el problema de Fibonacci:

𝑓(𝑛)=𝑓(𝑛−1)+𝑓(𝑛−2)

f(n)=f(n−1)+f(n−2)

Áreas de Aplicación

Optimización de Rutas

Problemas como encontrar la ruta más corta en un grafo (algoritmo de Floyd-


Warshall).

Secuencias

Problema de la Subsecuencia Común Más Larga (LCS): Determina la mayor


subsecuencia compartida entre dos cadenas.

Problema de alineación de secuencias en bioinformática (por ejemplo, comparar


ADN).

Problemas de Inventario

Gestión de inventarios bajo incertidumbre o con costos variables.

Juegos y Estrategias

Resolver juegos como ajedrez o damas mediante evaluaciones dinámicas de


posiciones.
Ventajas y Limitaciones

Ventajas

Ahorra tiempo y recursos mediante la memorización.

Resuelve problemas que serían intratables con métodos ingenuos.

Fácil de implementar en lenguajes de programación modernos.

Limitaciones

Alto consumo de memoria en problemas con muchos subproblemas.

La formulación de relaciones de recurrencia puede ser compleja.

No todos los problemas tienen subestructura óptima o superposición de


subproblemas.

Ejemplos Clásicos de Problemas de Programación Dinámica

Fibonacci: Resolver la serie de Fibonacci utilizando memorización o tabulación.

Mochila (Knapsack): Maximizar el valor de objetos seleccionados bajo


restricciones de peso.

Triángulo de Números: Encontrar la ruta de suma mínima desde la cima hasta la


base de un triángulo numérico.

Problema del Cambio de Moneda: Minimizar el número de monedas necesarias


para alcanzar una cantidad específica.

Programación Dinámica y Algoritmos Voraces

Comparar cuándo usar programación dinámica y cuándo usar algoritmos


voraces:

Programación Dinámica: Se utiliza cuando hay superposición de subproblemas


y subestructura óptima.

Algoritmos Voraces: Se utiliza cuando las decisiones locales garantizan un


resultado global óptimo.

También podría gustarte