Está en la página 1de 19

UNIVERSIDAD ALEJANDRO DE HUMBOLDT FACULTAD DE INGENIERIA

CARRERA INGENIERIA EN INFORMATICA

Investigación de Operaciones

Autor: Jeremy Morin


Tutor: Nelson blacon

Caracas, 2 de agosto de 2021


Índice

Primera parte...............................................................................................................................3
Programación dinámica............................................................................................................3
Cuales son las Características de las Aplicaciones de Programación Dinámica........................3
Cuales son las Etapas definirlas para la Resolución de un problema de programación
dinámica...................................................................................................................................4
Cuales son las Tipos de programación dinámica......................................................................4
Definir la Programación Dinámica Determinísticas..................................................................5
Definir la Programación Dinámica Probabilística y sus desventajas.........................................5
Segunda parte..............................................................................................................................7
Realice Cálculo utilizando los números de Fibonacci................................................................7
Realice un ejercicio mediante Cálculo de los coeficientes binomiales.....................................7
Describir La subsecuencia común máxima, indique un ejemplo..............................................8
Describa El problema del camino de mínimo costo, indique tres ejemplo y grafique..............9
Señale la formula de Principio de optimalizad:......................................................................11
Realizar un ejercicio de Asignación de recursos.....................................................................12
Definir Función de Valor Óptimo, realizar un ejercicio...........................................................13
Definir Multiplicación de una secuencia de matrices y sus formulas , realice un ejercicio.....13
Señale un ejemplo de Aplicación del principio de optimalidad.............................................16
Definir Planificación de trabajos, de un ejemplo....................................................................17
Conclusión..................................................................................................................................18
Introducción

Desde que existe la computación se han buscado formas de maximizar su uso,


mejoran sus capacidades y disminuyendo su consumo de tiempo y energía, por ello el
entendimiento de la programación dinámica es crucial para el mejor uso de la
computación
Primera parte

Programación dinámica

fue introducida por primera vez por Richard E. Bellman en la década de 1950. El
término «dinámica» significa que el problema tiene componentes secuenciales o
temporales, y «programación» se refiere a una política de optimización. En resumen, la
programación dinámica proporciona un marco general para problemas dinámicos
complejos dividiéndolos en subproblemas.

Un ejemplo ilustrativo de la idea subyacente en este método puede ser la serie de


Fibonacci[1], donde cada número en la secuencia de Fibonacci es la suma de los dos
anteriores, comenzando desde 0 y 1. Por ejemplo, se puede calcular el cuarto número de
la serie F4 = F3 + F2, como F4 = (F2 + F1) + F2 reutilizando la solución del
subproblema anterior F2 = F1 + F0.

Cuales son las Características de las Aplicaciones de Programación Dinámica

Subproblemas sobrepuestosEl espacio de los subproblemas debe ser pequeño. Es decir,


cualquier algoritmo recursivo que resuelva un problema deberá resolver los mismos
subproblemas una y otra vez, en lugar de generar nuevos subproblemas.

Esto lo toma en cuenta la programación dinámica, por lo que resuelve cada subproblema
solo una vez. Esto se puede lograr de dos maneras:

Enfoque de arriba hacia abajo

Si la solución a cualquier problema se puede formular recursivamente usando para ello


la solución de sus subproblemas, y si estos subproblemas se superponen, entonces las
soluciones a los subproblemas se podrán memorizar o almacenar fácilmente en una
tabla.

Cada vez que se busque la solución de un subproblema nuevo, se revisará en la tabla si


fue resuelto previamente. En caso que se tenga almacenada una solución, se utilizará la
misma en lugar de calcularla de nuevo. De lo contrario, se resolverá el subproblema,
almacenando la solución en la tabla.
Enfoque ascendente

Luego que se formula de forma recursiva la solución de un problema en términos de sus


subproblemas, se podrá intentar reformular el problema de manera ascendente: primero
se intentarán resolver los subproblemas y usar sus soluciones para llegar a soluciones a
los subproblemas más grandes.

Esto también se hace generalmente en forma de tabla, generando iterativamente


soluciones a subproblemas cada vez más grandes mediante el uso de soluciones a los
subproblemas pequeños. Por ejemplo, si ya se conocen los valores de F31 y F30, se
podrá calcular directamente el valor de F32.

Cuales son las Etapas definirlas para la Resolución de un problema de


programación dinámica

Una variable describe cuántas decisiones, hasta cierto punto, han sido tomadas y, en ese
caso, si el número total de decisiones es fijo, entonces el número de etapas será igual al
número de decisiones.Las variables de estado, que son las posibles condiciones variadas
en las cuales el procedimiento se encuentra en esa etapa del problema y el número de
estados, pueden ser finitas o infinitas.

La decisión en cada etapa es qué tanto asignar. Las variables de estado sucesivas Xn,
Xn+1 están unidas a través de la ecuación recursiva que calcula los valores de Xn+1
usando el valor de Xn y la decisión en el estado dn.

Cuales son las Tipos de programación dinámica

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


soluciones por si fueran necesarias nuevamente. Es una combinación de memoización y
recursión.

Bottom-up: Todos los problemas que puedan ser necesarios se resuelven de antemano y
después 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.
Definir la Programación Dinámica Determinísticas

es un método de optimización muy útil para descomponer programas matemáticos


grandes y complejos en etapas, en la que cada cual incluye un subproblema de una sola
variable que es individualmente más fácil de resolver El procedimiento que se siguió
para la optimización del problema de la asignación de ambulancias médicas a un centro
asistencial; de un programa matemático lineal y no lineal con programación dinámica,
con cierto grado de certidumbre, fue el siguiente: se establecieron las etapas, definiendo
las alternativas en cada etapa y los estados en cada etapa como cantidades de recursos
que se asignan a la etapa actual ya las etapas subsecuentes; esto dio lugar a la
realización de un algoritmo matemático para la obtención de un modelo matemático o
función recursiva para cada problema individual

Definir la Programación Dinámica Probabilística y sus desventajas

La programación dinámica probabilística (PDP) es una técnica matemáticamente útil


para la toma de decisiones interrelacionadas, se presenta cuando el estado en la
siguiente etapa no está determinado por completo por el estado y la política de decisión
de la etapa actual.

Los cálculos de la programación dinámica probabilística se hacen de manera recursiva


en el sentido de que la solución de un subproblema se utiliza como una entrada para el
siguiente subproblema.

Desventajas

 Si la red es muy grande se vuelve laborioso.


 No aplicable a todo tipo de problemas.
 Si hay un error en alguna tabla afecta a todo el problema.

Cuales son los elementos que intervienen en problema de Programación Dinámica


1.- etapas: se pueden definir como cada uno de los pasos que se deben seguir para llegar
al objetivo. Las representamos por líneas discontinuas.

2.- estados: son las diversas condiciones posibles en la que el sistema podría estar en esa
etapa del problema. Se representan por círculos.

3.- política: es cualquiera de los caminos que llevan de la primera a la última etapa.

4.- su política: es un subconjunto de la política.

Realice un ejemplo de Programación Dinámica con su grafico


Segunda parte

Realice Cálculo utilizando los números de Fibonacci

FUNC fib(↓n: NATURAL): NATURAL

INICIO

SI n = 0 ENTONCES

DEVOLVER 0

SI NO, SI n = 1 ENTONCES

DEVOLVER 1

SI NO

devolver fib(n-1) + fib(n-2)

FIN SI

FIN

Realice un ejercicio mediante Cálculo de los coeficientes binomiales

FUNC CoeficientesPolinomiales ( ↓ n, k: NATURAL): NATURAL

Variables

tabla: TABLA DE NATURALES

i, j: NATURAL

Inicio

PARA i = 0 HASTA n HACER

tabla[i][0] := 1

FIN PARA

PARA i = 1 HASTA n HACER


tabla[i][1] := i

FIN PARA

PARA i = 2 HASTA k HACER

tabla[i][i] := 1

FIN PARA

PARA i = 3 HASTA n HACER

PARA j = 2 HASTA i-1 HACER

SI j <= k ENTONCES

tabla[i][j] := tabla[i-1][j-1] + tabla[i-1][j]

FIN SI

FIN PARA

FIN PARA

devolver tabla[n][k]

Fin

Describir La subsecuencia común máxima, indique un ejemplo

El problema de subsecuencia común más larga (en inglés, longest common subsequence
problem, abreviado LCS problem), se trata de encontrar una subsecuencia más larga que
es común en un conjunto de secuencias (Aunque en la mayor parte solamente se toman
dos secuencias). Es diferente del problema de substring común más largo; a diferencia
de los substrings, las subsecuencias no necesitan tener posiciones consecutivas en la
secuencia original. El problema de LCS es uno de los problemas clásicos de las ciencias
computacionales y es la base de programas que comparan datos como la utilidad diff, y
ha tenido usos en bioinformática. También es usado ampliamente para los sistemas de
control de revisión como Git para reconciliar múltiples cambios sobre archivos
controlados de revisión.

En los primeros 16 términos de la secuencia de Van der Corput binaria


0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15

una subsecuencia creciente máxima es

0, 2, 6, 9, 11, 15.

Esta subsecuencia tiene longitud seis; la subsecuencia de entrada no tiene subsecuencias


crecientes de tamaño siete. La subsecuencia creciente máxima en este ejemplo no es
única: por ejemplo,

0, 4, 6, 9, 11, 15 o 0, 4, 6, 9, 13, 15

son otras subsecuencias creciente de igual longitud para la misma subsecuencia de


entrada.

Describa El problema del camino de mínimo costo, indique tres ejemplo y grafique

este problema trata de descubrir los caminos mínimos de todas las parejas de nodos
de un un grafo con n nodos.

el camino mínimo entre el nodo 1 y el 3. Entre los tres caminos posibles tenemos
1→3 con valor 20, 1→4→3 con valor 13+2=15 y, finalmente, 1→2→4→3 con
valor 3+8+2=13, siendo este último el de menor valor.
Se denota por c(u,v) el costo del arco (u,v). Se debe hallar un camino de costo mínimo que
vaya del nódulo 0 al nódulo d. Cada Vi define una etapa del grafo por lo que todo recorrido
del nódulo 0 al nódulo d tiene exactamente un vértice en cada Vi.

Maximizar el beneficio total asignando el recurso a los r proyectos cuando se dispone de


n unidades de un recurso que deben asignarse a r proyectos. Se conoce que si se dan j
unidades (0 ≤ j ≤ n) al proyecto i resulta un beneficio Ni,j. Primero se formulará como
grafo multietapa:

• r+1 es el número de etapas.

• El proyecto i está representado por la etapa i, 1 ≤ i ≤ r.

• En cada etapa i, 2 ≤ i ≤ r hay n+1 vértices vi,j, 0 ≤ j≤ n.

• Los vértices de las etapas 1 y r+1 son respectivamente, o=v1,0 y d=vr+1,n

. • Representa el estado en el que se dan un total de j unidades del recurso a los


proyectos 1, 2, …, i-1 (vértice vi,j, 2 ≤ i ≤ r).

• Para todo j ≤ l y 1 ≤ i < r los arcos son de la forma (vi,j,vi+1,l).

• El costo asignado Ni,l-j al arco (vi,j,vi+1,l), j ≤ l, corresponde a asignar l-j unidades


del recurso al proyecto i, 1 ≤ i < r.

• El costo Ni,l es asignado a los arcos de la forma (vr,j,vr+1,n). Segundo, se formulará


como grafo resultante para r=3 y n=4.

• El camino de costo máximo del nódulo o al nódulo d definirá la asignación óptima.

• Al cambiar los signos de las etiquetas, el convertir a en un problema de camino de


costo mínimo cambiar los signos de las etiquetas.
1. indique ejemplo de Programación en retroceso y grafique

Comienza en fecha futura y se programan las operaciones requeridas en sentido inverso

Señale la formula de Principio de optimalizad:


Realizar un ejercicio de Asignación de recursos.

La asociación de recursos garantizada (GRA) le ayuda a garantizar que un grupo de


recursos recibe el mínimo de recursos cuando están activos todos los grupos de
recursos. Cuando algunos grupos de recursos están inactivos, un grupo de recursos
activo recibe recursos adicionales, hasta el máximo de recursos configurados. Si sólo
están ocupados algunos de los grupos de recursos, el sistema tendrá más recursos para
proporcionar a los grupos de recursos activos, pero aplicará los porcentajes de recursos
máximo y mínimo para garantizar asignaciones justas. Por ejemplo:

Si el grupo de recursos analysts es el único grupo activo, puede utilizar hasta el 100%
de los recursos del sistema para su trabajo (el máximo de recursos).

Si el grupo de recursos rptquery es el único grupo activo, puede utilizar hasta el 60% de
los recursos netos del sistema (el máximo de recursos). El 40% restante de los recursos
del sistema netos disponibles permanecerá sin asignar.

Si los grupos de recursos analysts y public son los únicos grupos activos, el total del
mínimo de recursos será el 70%. El sistema determina sus porcentajes de recursos en
base a los mínimos de recursos relativos. El resultado para cada grupo de recursos no
supera el máximo de recursos.

min max resource percentage

public 20 80 20 / (20 + 50) = 29

analysts 50 100 50 / (20 + 50) = 71

Si los grupos de recursos rptquery y public son los únicos grupos activos, el total del
mínimo de recursos será el 50%. El sistema determina sus porcentajes de recursos
permitidos en base a los mínimos de recursos relativos. Dado que el resultado para el
grupo de recurso rptquery supera el máximo de recursos, el exceso se asigna al grupo de
recursos public.

min max resource percentage

rptquery 30 50 30 / (20 + 30) = 60, but 50 is maximum


public 20 80 20 / (20 + 30) = 40 plus 10 that rptquery cannot use = 50

Definir Función de Valor Óptimo, realizar un ejercicio.

el valor óptimo de un estado, V*(𝑠), es igual a la mejor función de valor de acción


que podamos obtener a partir de este estado, es decir:

Definir Multiplicación de una secuencia de matrices y sus formulas , realice un


ejercicio

eniendo una sucesión de matrices que van a ser multiplicadas, queremos escoger el
modo óptimo de realizar las operaciones para minimizar la cantidad de
multiplicaciones escalares. Por ejemplo, teniendo las matrices A1, A2 y A3, la
multiplicación viene dada por A1A2A3, que podemos obtener como (A1A2)A3 o
A1(A2A3).

Supongamos que la primera matriz es de 10×20, la segunda de 20×30 y la tercera de


30×40. Utilizando (A1A2)A3 la cantidad de operaciones que realizamos es
(10×20×30) + (10×30×40) = 18000, mientras que con A1(A2A3) ocupamos
(20×30×40) + (10×20×40) = 32000 operaciones. Podemos apreciar como la primera
multiplicación es significativamente más eficiente que la segunda.

Una opción es realizar todas las posibles formas para poner paréntesis en la
multiplicación, pero esto requeriría un tiempo exponencial (O(2n)). Para resolverlo
en tiempo polinomial, vamos a aprovechar la subestructura óptima de este problema.

Supongamos que queremos optimizar el número de operaciones en la multiplicación


AiAi+1...Aj, a la cual representaremos como Ai..j. Para hacerlo, podemos partir a la
sucesión en dos de tal forma que al sumar las partes tengamos un resultado óptimo,
o lo que es lo mismo, debemos encontrar una k tal que la suma de operaciones de
Ai..k, Ak..j y al juntarlas sea mínima.
Con esto reducimos la complejidad a un tiempo polinomial de O(n3), sacrificando a
cambio espacio en memoria para guardar todos los valores de Ai..j. También existe
un algoritmo que logra un tiempo de O(nlgn) convirtiendo el problema a un
equivalente geométrico, donde se busca encontrar todas las formas en que un
polígono convexo se puede cortar en triángulos que no se intersecten.

Problema

Dados dos arreglos A y B, podemos calcular el valor del arreglo C = A × B


utilizando la definición de la multiplicación de matrices:

La cantidad de columnas en el arreglo A debe ser igual a la cantidad de filas del


arreglo B. Como notación, diremos que filas(A) y columnas(A) son la cantidad de
filas y columnas, respectivamente, del arreglo A. La cantidad de multiplicaciones
individuales requeridas para calcular el arreglo C (que tendrá la misma cantidad de
filas que A y de columnas que B) es filas(A) × columnas(B) × columnas(A). Por
ejemplo, si A es un arreglo de 10×20 y B uno de 20×15, tomaría 10×15×20, o 3000
multiplicaciones calcular el arreglo C.

Para realizar multiplicaciones de más de dos arreglos tenemos varias opciones de


como proceder. Por ejemplo, si X, Y y Z son arreglos, entonces para calcular X × Y
× Z podríamos utilizar (X × Y) × Z o X × (Y × Z). Supongamos que X es un arreglo
de 5×10, Y uno de 10×20 y Z uno de 20×35. Veamos la cantidad de productos
utilizados en las dos series distintas:

(X × Y) × Z

· 5×20×10 = 1000 multiplicaciones para encontrar el producto (X × Y), un arreglo


de 5×20.
· Después se ocupan 5×35×20 = 3500 multiplicaciones para determinar el resultado
final.

· Multiplicaciones totales: 4500.

X × (Y × Z)

· 10×35×20 = 7000 multiplicaciones para encontrar el producto (Y × Z), un arreglo


de 10×35.

· Después se ocupan 5×35×10 = 1750 multiplicaciones para determinar el resultado


final.

· Multiplicaciones totales: 8750.

Es claro que utilizando (X × Y) × Z requerimos menos multiplicaciones


individuales.

Dado el tamaño de cada arreglo en una serie de arreglos a multiplicar, debes


determinar la forma óptima de multiplicarlos. Por óptimo, en este problema, nos
referimos a la cantidad mínima de multiplicaciones individuales requeridas.

Entrada

Por cada arreglo en las series de arreglos a multiplicar se te dará únicamente las
dimensiones del arreglo. Cada serie consiste en un entero n el cual indica la cantidad
de arreglos a multiplicar, seguido por n pares de enteros, cada par indicando la
cantidad de filas y columnas en el arreglo; el orden en el que se dan las dimensiones
es el mismo en el que van a ser multiplicados. Un valor de cero para n indica el fin
de la entrada. Los valores de n no serán mayores a 10.

Salida

Puedes asumir que el nombre de los arreglos es A1, A2, …, An. Tu salida para cada
caso de entrada deberá ser una línea que contenga la expresión con paréntesis que
indiquen el orden correcto en el que se tienen que multiplicar los arreglos. El
número del caso debe anteceder a la respuesta (los casos están numerados
secuencialmente, empezando por el 1). Tu salida debe ser muy similar a la que se
muestra en las salidas del ejemplo. Si, por casualidad, existen varias respuestas
correctas, cualquiera de ellas será tomada como válida.

Señale un ejemplo de Aplicación del principio de optimalidad

El primer uso conocido de una ecuación de Bellman en la economía se debe a


Martin Beckmann y Richard Muth.3 Martin Beckmann también escribió
extensamente sobre la teoría del consumo mediante la ecuación de Bellman en 1959.
Su obra influyó Edmund S. Phelps, entre otros.

Una aplicación económica celebrado de una ecuación de Bellman es seminal


artículo de Merton 1973 en el Capital Asset Pricing Model intertemporal.4 (Véase
también el problema de la cartera de Merton ). La solución al modelo teórico de
Merton, uno en el que los inversores optaron entre el ingreso actual y el ingreso
futuro o ganancias de capital, es una forma de la ecuación de Bellman. Dado que las
aplicaciones económicas de programación dinámica suelen dar lugar a una ecuación
de Bellman que es una ecuación en diferencias, los economistas se refieren a la
programación dinámica como un "método recursivo" y un subcampo de la economía
recursivas es ahora reconocido en Economía.

Nancy Stokey, Robert E. Lucas y Edward C. Prescott describen la programación


dinámica estocástica y no estocástica en un detalle considerable y desarrollan
teoremas para la existencia de soluciones a problemas que cumplen ciertas
condiciones. También describen muchos ejemplos de modelización de problemas
teóricos en economía utilizando métodos recursivos.5 Este libro llevó a la
programación dinámica que se utiliza para resolver una amplia gama de problemas
teóricos en la economía, incluyendo el crecimiento económico óptimo, la extracción
de recursos, los problemas agente principal , las finanzas públicas , la inversión
empresarial, la fijación de precios de los activos, el suministro de factores y la
organización industrial. Lars Ljungqvist y Thomas Sargent aplican una
programación dinámica para estudiar una variedad de cuestiones teóricas en política
monetaria , política fiscal, impuestos, crecimiento económico , teoría de la búsqueda
y economía del trabajo . Avinash Dixit y Robert Pindyck mostraron el valor del
método para pensar en el presupuesto de capital.6 Anderson adaptó la técnica a la
valuación del negocio, incluyendo negocios privados.

Definir Planificación de trabajos, de un ejemplo.

El plan de trabajo como instrumento de planificación, ordena y sistematiza


información de modo que pueda tenerse una visión del trabajo a realizar, así nos
indica: objetivos, metas, actividades, responsables y cronograma.
Conclusión

Con lo investigado en este presente trabajo se puede concluir que el entendimiento de la


programación dinámica es crucial para una mejor resolución de los problemas aplicando
algoritmos y código, ya que es una importante mejora de rendimiento al reducir el
tiempo de ejecución de los programas

También podría gustarte