Sie sind auf Seite 1von 59

UNIVERSIDAD MAYOR REAL Y

PONTIFICIA
DE SAN FRANCISCO XAVIER DE
CHUQUISACA

PROGRAMACION AVANZADA
SIS427
TEMA 04 – ESTRATEGIAS DE RESOLUCION DE
PROBLEMAS
AUTOR: CARLOS WALTER PACHECO LORA

SUCRE – BOLIVIA, 2019


RECURSIVIDAD

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.
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.
FRACTALES Y RECURSIVIDAD
ESTRATEGIAS DE RESOLUCION DE
PROBLEMAS
• Esquemas algorítmicos que pueden emplearse como estrategias de resolución de problemas.
• Un esquema puede verse como un algoritmo genérico que puede resolver distintos problemas.
• Si se concretan los tipos de datos y las operaciones del esquema genérico con los tipos y
operaciones específicos de un problema concreto, tendremos un algoritmo para resolver dicho
problema.
• Resuelve una familia de problemas de características parecidas.
• Divide y vencerás
• Esquema de vuelta atrás
• Método voraz,
• Programación dinámica
• Ramificación y poda
• …
• Los esquemas o métodos algorítmicos deben verse como un conjunto de algoritmos
prefabricados que el diseñador puede ensayar ante un problema nuevo.
• No hay garantía de éxito pero, si se alcanza la solución, el esfuerzo invertido habrá sido menor
que si el diseño se hubiese abordado desde cero.
ESQUEMA DIVIDE Y VENCERAS (DV)
• Consiste en descomponer el problema dado en uno o varios
subproblemas del mismo tipo, el tamaño de cuyos datos es una
fracción del tamaño original.
• Una vez resueltos los subproblemas por medio de la aplicación
recursiva del algoritmo, se combinan sus resultados para construir la
solución del problema original.
• Existirán uno o más casos base en los que el problema no se
subdivide más y se resuelve, o bien directamente si es sencillo, o bien
utilizando un algoritmo distinto.
• El esquema DV es un caso particular de la recursividad.
• Para distinguirlo de otros diseños recursivos que no responden a DV se han
de cumplir las siguientes condiciones:
• Los subproblemas han de tener un tamaño que sea una fracción del tamaño original
(un medio, un tercio, etc . . . ). No basta simplemente con que sean más pequeños.
• Los subproblemas se generan exclusivamente a partir del problema original.
• En algunos diseños recursivos, los parámetros de una llamada pueden depender de
los resultados de otra previa. En el esquema DV, no.
• La solución del problema original se obtiene combinando los resultados de los
subproblemas entre sí, y posiblemente con parte de los datos originales. Otras
posibles combinaciones no encajan en el esquema.
• El (los) caso(s) base no son necesariamente los casos triviales. Podría utilizarse como
caso base (incluso debería utilizarse en ocasiones) un algoritmo distinto al algoritmo
recursivo DV.
ESQUEMA DV EN FORMA DE CODIGO

• Los tipos Problema, Solución, y los métodos base, método-directo,


descomponer y combinar, son específicos de cada problema resuelto por el
esquema.
• Para obtener una solución eficiente, hay que conseguir a la vez:
• que el tamaño de cada subproblema sea lo más pequeño posible, es decir,
maximizar b.
• que el número de subproblemas generados sea lo más pequeño posible, es
decir, minimizar a.
• que el coste de la parte no recursiva sea lo más pequeño posible, es decir
minimizar k.
• La recurrencia puede utilizarse para anticipar el coste que resultará de
la solución DV, sin tener por qué completar todos los detalles. Si el
coste sale igual o peor que el de un algoritmo ya existente, entonces
no merecerá la pena aplicar DV.
Ejemplos de aplicación del esquema con éxito

GRUPO 1
• La búsqueda binaria en un vector ordenado.
• En este caso, la operación descomponer selecciona una de las dos mitades del
vector y la operación combinar es vacía. Obteníamos los siguientes
parámetros de coste:
• b =2 Tamaño mitad del subvector a investigar en cada llamada recursiva.
• a =1 Un subproblema a lo sumo.
• k =0 Coste constante de la parte no recursiva.
• dando un coste total O(log n).
GRUPO 2
• La ordenación mediante mezcla o mergesort
• responde al esquema:
• La operación descomponer divide el vector en dos mitades y la operación
combinar mezcla las dos mitades ordenadas en un vector final.
• Los parámetros del coste son:
• b =2 Tamaño mitad de cada subvector.
• a =2 Siempre se generan dos subproblemas.
• k =1 Coste lineal de la parte no recursiva (la mezcla).
• dando un coste total O(n log n).
GRUPO 3
• La ordenación rápida o quicksort, considerando solo el caso mejor.
• Responde al esquema. La operación descomponer elige el pivote, particiona
el vector con respecto a él y lo divide en dos mitades. La operación combinar
en este caso es vacía.
• Los parámetros del coste son:
• b =2 Tamaño mitad de cada subvector.
• a =2 Siempre se generan dos subproblemas.
• k =1 Coste lineal de la parte no recursiva (la partición).
• dando un coste total O(n log n).
GRUPO 4
• La comprobación en un vector v estrictamente ordenado de si existe
un índice i tal que v[i] =i sigue un esquema similar al de la búsqueda
binaria:
• b =2 Tamaño mitad del subvector a investigar en cada llamada recursiva.
• a =1 Un subproblema a lo sumo.
• k =0 Coste constante de la parte no recursiva.
• dando un coste total O(log n).
• Un problema históricamente famoso es el de la solución DV a la
transformada discreta de Fourier (DFT), dando lugar al algoritmo
conocido como transformada rápida de Fourier, o FFT (J.W. Cooley y
J.W. Tukey, 1965).
• La transformada discreta convierte un conjunto de muestras de
amplitud de una señal, en el conjunto de frecuencias que resultan del
análisis de Fourier de la misma. Esta transformación y su inversa (que
se realiza utilizando el mismo algoritmo DFT) tienen gran interés
práctico pues permiten filtrar frecuencias indeseadas (p.e. ruido) y
mejorar la calidad de las señales de audio o de vídeo.
PRATICO LABORATORIO
• Organización de un campeonato
• Se tienen n participantes para un torneo de ajedrez y hay que organizar un
calendario para que todos jueguen contra todos de forma que:
• Cada participante juegue exactamente una partida con cada uno de los n – 1 restantes.
• Cada participante juegue a lo sumo una partida diaria.
• El torneo se complete en el menor número posible de días.
• En este tema veremos una solución para el caso, más sencillo, en que n es
potencia de 2
• Es fácil ver que el número de parejas distintas posibles es ½n(n – 1). Como n
es par, cada día pueden jugar una partida los n participantes formando con
ellos n/2 parejas. Por tanto se necesita un mínimo de n - 1 días para que
jueguen todas las parejas.
• Una posible forma de representar la solución al problema es en forma
de matriz de n por n, donde se busca rellenar, en cada celda aij , el día
que se enfrentarán entre sí los contrincantes i y j, con j <i. Es decir,
tratamos de rellenar, con fechas de encuentros, el área bajo la
diagonal de esta matriz; sin que en ninguna fila o columna haya días
repetidos.
• Se ha de planificar las parejas de cada día, de tal modo que al final
todos jueguen contra todos sin repetir ninguna partida, ni descansar
innecesariamente.
• Podemos ensayar una solución DV según las siguientes ideas:
• Si n es suficientemente grande, dividimos a los participantes en dos grupos
disjuntos A y B, cada uno con la mitad de ellos.
• Se resuelven recursivamente dos torneos más pequeños: el del conjunto A
jugando sólo entre ellos, y el del conjunto B también jugando sólo entre ellos.
En estos sub-torneos las condiciones son idénticas a las del torneo inicial por
ser n una potencia de 2; con la salvedad de que se pueden jugar ambos en
paralelo.
• Después se planifican partidas en las que un participante pertenece a A y el
otro a B. En estas partidas, que no se pueden solapar con los sub-torneos, hay
que rellenar todas las celdas de la matriz correspondiente.
• Esta última parte se puede resolver fácilmente fila por fila, rotando,
en cada nueva fila, el orden de las fechas disponibles. Como hay que
rellenar n/2 · n/2 celdas, el coste de esta fase está en en .
• Los casos base, n =2 o n =1, se resuelven trivialmente en tiempo
constante.
• Esta solución nos da pues los parámetros de coste a =2, b=2y k =2,
que conducen a un coste esperado de . No puede ser menor
puesto que la propia planificación consiste en rellenar celdas.
Pasamos entonces a precisar los detalles.
IMPLEMENTACION
• Usaremos una matriz cuadrada declarada como int a[MAX][MAX] (donde MAX es
una constante entera) para almacenar la solución, inicializada con ceros. La
primera fecha disponible será el dia 1.
• De forma similar a ejemplos anteriores la función recursiva, llamada rellena,
recibe dos parámetros adicionales, c y f que delimitan el trozo de la matriz que
estamos rellenando, y que por tanto se inicializan respectivamente con 0 y num -
1, siendo num el número de participantes. Se asume que dim = f - c + 1 es
potencia de 2.
• En el caso base en que solo haya un equipo (dim = 1) no se hace nada. Si hay dos
equipos (dim = 2), juegan el dia 1.
• El cuadrante inferior izquierdo representa los partidos entre los equipos de los
dos grupos. El primer dia disponible es mitad = dim/2 y hacen falta mitad dias
para que todos jueguen contra todos. Las rotaciones se consiguen con la fórmula
mitad + (i + j)%mitad.
PROGRAMACION DINAMICA
• Problemas cuyas soluciones pueden ser expresadas recursivamente en términos matemáticos, y posiblemente la manera más
natural de resolverlos es con un algoritmo recursivo. El tiempo de ejecución de la solución recursiva, normalmente es de orden
exponencial y por tanto impracticable, puede mejorarse substancialmente mediante la Programación Dinámica.
• En el diseño Divide y Vencerás veíamos cómo para resolver un problema lo dividíamos en subproblemas independientes, los
cuales se resolvían 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 solución recursiva no resulta eficiente por la repetición de cálculos que conlleva.
• En estos casos es cuando la Programación Dinámica nos puede ofrecer una solución aceptable. La eficiencia de esta técnica
consiste en resolver los subproblemas una sola vez, guardando sus soluciones en una tabla para su futura utilización.
• La Programación Dinámica no sólo tiene sentido aplicarla por razones de eficiencia, sino porque además presenta un método
capaz de resolver de manera eficiente problemas cuya solución ha sido abordada por otras técnicas y ha fracasado.
• Donde tiene mayor aplicación la Programación Dinámica es en la resolución de problemas de optimización. En este tipo de
problemas se pueden presentar distintas soluciones, cada una con un valor, y lo que se desea es encontrar la solución de valor
óptimo (máximo o mínimo).
• La solución de problemas mediante esta técnica 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 también ó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 cuestión. Un ejemplo claro para el que no se verifica este principio aparece al tratar de encontrar el
camino de coste máximo entre dos vértices de un grafo ponderado.
CONSIDERACIONES IMPORTANTES
• 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 una 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.
DEFINICIONES
• Etapa: es la parte del problema que posee un conjunto de alternativas
mutuamente excluyentes, de las cuales se seleccionara la mejor alternativa.
• Estado: 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.
ESQUEMA DE UNA ETAPA

qi

E
S X i1 qi Variable de estado en la etapa i
T ....
*
Xij Uno de los valores que puede
A ETAPA i X ij Xi
D .... adoptar la variable de decisión
O X iJ “Xi” en la etapa i
S
Xi* Decisión óptima de la etapa i
REST O
CONDICIONES Y PASOS:
Las condiciones requeridas son:
1. La solución al problema ha de ser alcanzada a través de una secuencia de
decisiones, una en cada etapa.
2. Dicha secuencia de decisiones ha de cumplir el principio de óptimo.
El diseño de un algoritmo de Programación Dinámica consta de los siguientes
pasos:
1. Planteamiento de la solución como una sucesión de decisiones y verificación de
que ésta cumple el principio de óptimo.
2. Definición recursiva de la solución.
3. Cálculo del valor de la solución óptima mediante una tabla en donde se almacenan
soluciones a problemas parciales para reutilizar los cálculos.
4. Construcción de la solución óptima haciendo uso de la información contenida en
la tabla anterior.
FORMULACION Y SOLUCION DE PROBLEMAS
• La programación dinámica no cuenta con una formulación
matemática estándar, sino se trata de un enfoque de tipo general
para la solución de problemas, y las ecuaciones espécificas que se
usan se deben desarrollar para que representen cada situación
individual.
• Comunmente 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.
• “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”
REQUISITOS PARA RESOLVER PROBLEMAS
CON PROGRAMACION DINAMICA
• Un grado de creatividad
• Un buen conocimiento de la estructura general de los problemas 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.
CARACTERISTICAS DE LOS PROBLEMAS DE
PROGRAMACION DINAMICA
• El problema se puede dividir en etapas que requieren una política de decisión
en cada una.
• Cada etapa tiene cierto numero 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 optima 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 optima para la
etapa n dada la política optima para la etapa (n+1)
CÁLCULO DE LOS
NÚMEROS DE FIBONACCI
La forma más natural de calcular los
términos de esa sucesión es mediante un
programa recursivo

• El inconveniente es que el algoritmo resultante es poco eficiente ya que su tiempo de ejecución es de orden
exponencial.
• La falta de eficiencia del algoritmo se debe a que se producen llamadas recursivas repetidas para calcular valores de la
sucesión, que habiéndose calculado previamente, no se conserva el resultado y por tanto es necesario volver a calcular
cada vez.
• Para este problema es posible diseñar un algoritmo que en tiempo lineal lo resuelva mediante la construcción de una
tabla que permita ir almacenando los cálculos realizados hasta el momento para poder reutilizarlos:
• El algoritmo iterativo que calcula la sucesión de Fibonacci utilizando
tal tabla es:
• Otra mejora a este algoritmo, que aparece al fijarnos que únicamente son necesarios los dos
últimos valores calculados para determinar cada término, lo que permite eliminar la tabla entera
y quedarnos solamente con dos variables para almacenar los dos últimos términos:
• Aunque esta función sea de la misma complejidad temporal que la
anterior(lineal), consigue una complejidad espacial menor, pues de ser de
orden O(n) pasa a ser O(1) ya que hemos eliminado la tabla.
• El uso de estructuras (vectores o tablas) para eliminar la repetición de los
cálculos, pieza clave de los algoritmos de Programación Dinámica, hace que
en este capítulo nos fijemos no sólo en la complejidad temporal de los
algoritmos estudiados, sino también en su complejidad espacial.
• En general, los algoritmos obtenidos mediante la aplicación de esta técnica
consiguen tener complejidades (espacio y tiempo) bastante razonables,
pero debemos evitar que el tratar de obtener una complejidad temporal de
orden polinómico conduzca a una complejidad espacial demasiado
elevada.
CALCULO DE LOS COHEFICIENTES
BINOMIALES
• En este segundo ejemplo, vamos a necesitar una tabla bidimensional
para el cálculo de los coeficientes binomiales, definidos como:

• El algoritmo recursivo que los calcula resulta ser de complejidad


exponencial por la repetición de los cálculos que realiza. No obstante, es
posible diseñar un algoritmo con un tiempo de ejecución de orden
O(nk) basado en la idea del Triángulo de Pascal.
• Para ello es necesario la creación de una tabla bidimensional en la
que ir almacenando los valores intermedios que se utilizan
posteriormente:
• Iremos construyendo esta tabla por filas de arriba hacia abajo y de
izquierda a derecha mediante el siguiente algoritmo de complejidad
polinómica:
EJEMPLO PROTOTIPO
(EL PROBLEMA DE LA DILIGENCIA)

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 ?
SISTEMA DE CAMINOS Y LOS COSTOS DEL PROBLEMA
DE LA DILIGENCIA

7 1
B E
2 4
6 4
H 3
3 6
4 2
A C F J
4 3
Missouri 4
I 4 California
3
3 1
D G
5 3

E F G H I
J
Costos de B 7 4 6 E 1 4
H 3
Transición: B C D C 3 2 4 F 6 3
I 4
A 2 4 3 D 4 1 5 G 3 3
SOLUCIÓN

 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.
 En cada problema aumentado se puede encontrar la solución óptima
tomando en cuenta los resultados obtenidos en la interacción anterior.
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:

f*4 (H) = 3
f*4 (I) = 4
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 ó al estado
I. a un costo de CF,H = 6 ó 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.
PROCEDIMIENTO DE SOLUCIÓN

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:

f*3 (E) = 4
f*3 (F) = 7
f*3 (G) = 6
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 ó G con un costo inmediato de CC,E =3 ó
CC,F =2 ó CC,G =4, respectivamente.
PROCEDIMIENTO DE SOLUCIÓN

Al llegar aquí el costo adicional mínimo hasta llegar a su destino


esta dado de la siguiente manera:
x2 = E f2(C,E) = cC,E + f*3(E) = 3 + 4 = 7
f (C,F) = c + f * (F) = 2 + 7 = 9
x2 = F 2
C,F 3
x2 = G f2(C,G) = cC,G + f * (G) = 4 + 6 = 10
3

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
ó D. Los resultados son:
f*2 (B) = 11 f*2 (C) = 7 f*2 (D) = 8
PROCEDIMIENTO DE SOLUCIÓN

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.
PROCEDIMIENTO DE SOLUCIÓN

Los resultados se resumen de la siguiente manera :


x1 = B f1(A,B) = cA,B + f*2(B) = 2 + 11 = 13
x1 = C f1(A,C) = cA,C + f*2(C) = 4 + 7 = 11
x1 = D cA,D + f* (D)
f1(A,D) = 2 = 3 + 8 = 11

Como el mínimo costo es 11, por tanto los caminos pueden ser C ó D.
En este punto se puede identificar la solución óptima. Los resultados
indican los caminos óptimos a seguir:
A D E H J ó A D F I J, las dos tienen un costo total de 11
PROBLEMAS TÍPICOS DE P.D.

 1. PROBLEMA DE INVERSIÓN DE CAPITAL


 Veamos un problema simple de inversión de capital. Una
corporación tiene $5 millones para invertir en sus tres plantas
para una posible expansión. Cada planta ha presentado un
número de propuestas sobre como pretende gastar el dinero.
Cada propuesta entrega el costo de la expansión (c) y la
ganancia esperada (r). La siguiente tabla resume las propuestas:

Cada planta sólo podrá realizar una de sus propuestas. El


objetivo es maximizar el retorno de la firma dada su inversión de
$5 millones. Se supondrá que si no se gastan los $5 millones
completamente, ese dinero se perderá.
TABLA

Propuesta Planta 1 Planta 2 Planta 3

c1 r1 c2 r2 c3 r3

1 0 0 0 0 0 0

2 1 5 2 8 1 4

3 2 6 3 9 - -

4 - - 4 12 - -
INVERSIÓN DE CAPITAL
 Una forma de resolver este problema es intentar todas las posibilidades y
elegir la mejor. En ese caso, hay solo 3 x 4 x 2 = 24 formas de invertir el
dinero. Muchas de estas son infactibles (por ejemplo, propuestas 3, 4 y 1
para las tres plantas cuesta $6 millones). Otras propuestas son factibles,
pero son muy pobres en retorno (como propuestas 1, 1 y 2, con un retorno
 de sólo $4 millones.)
 Desventajas de una enumeración completa:

 Para problemas de gran tamaño la enumeración de todas las posibles
soluciones puede no ser factible computacionalmente.
 Las combinaciones NO factibles no pueden ser detectadas a priori,
llevando a una ineficiencia.
 Información sobre combinaciones previamente investigadas no se usan
para eliminar otras combinaciones menos buenas, o no factibles.
INVERSIÓN DE CAPITAL
 Cabe hacer notar que este problema no puede ser formulado como un problema de
programación lineal, porque los retornos no son funciones lineales.

 Un método para calcular la solución es:

 Dividamos el problema en 3 etapas: cada etapa representa el dinero asignado a una
única planta. Así la etapa 1 representa el dinero asignado a la planta 1.
Artificialmente se dará un orden a las etapas, asumiendo que primero se asignará a
la planta 1, luego a la planta 2 y finalmente a la planta 3.

Cada etapa está dividida en estados. Un estado guarda la información requerida
para ir desde una etapa a la siguiente. En este caso los estados por etapa 1, 2 y 3
 son:

{0,1,2,3,4,5}: cantidad de dinero gastado en la planta 1, representado como x1 ,

{0,1,2,3,4,5}: cantidad de dinero gastado en las plantas 1 y 2 (x2), y
{5}: cantidad de dinero gastado en las plantas 1, 2, y 3 (x3).
INVERSIÓN DE CAPITAL
 Es necesario notar que diferentemente a lo que es
programación lineal, las xi no representan variables de
decisión: ellas son simplemente representaciones de un
estado genérico en la etapa.
 Un retorno se asocia a cada estado. Se debe notar que para
tomar una decisión en el estado 3, es sólo necesario
conocer cuanto se gastó en las plantas 1 y 2, no cómo esto
fue gastado. También note que se desea que x3 sea 5
 Determinando los retornos asociados a cada estado, lo más
fácil es en la etapa 1, los estados x1. La Tabla 2 muestra el
retorno asociado con x1.
TABLA 2

Si el capital disponible Entonces la propuesta Y el retorno para la


x1 es: óptima es: etapa 1 es:
0 1 0
1 2 5
2 3 6
3 3 6
4 3 6
5 3 6
EL PROBLEMA DE LA MOCHILA.

 El problema de la mochila es un tipo particular de


programación entera con sólo una restricción.
Cada artículo que puede ir en la mochila tiene un
tamaño y un beneficio asociado. La mochila tiene
una capacidad máxima. ¿Qué se debe llevar en la
mochila para maximizar el beneficio total? A modo
de ejemplo supongamos que hay tres artículos
como se muestra en la Tabla 3, y suponga que la
capacidad de la mochila es 5.

EL PROBLEMA DE LA MOCHILA

Artículo (j) Peso (wj) Beneficio (bj)


1 2 65
2 3 80
3 1 30
EL PROBLEMA DE LA MOCHILA
 Las etapas representan los artículos: luego se tienen
tres etapas j = 1,2,3. El estado yi en la etapa j
representa el peso total de los artículos j más todos los
artículos que se agregarán posteriormente a la mochila.
La decisión en el etapa j es cuántos artículos j poner en
la mochila. Sea ese valor kj.

 Luego se tienen las siguientes fórmulas recursivas: Sea
fj(yj) el valor de usar yj unidades de la capacidad para
artículos j más los que se agregarán. Si [a] representa el
mayor entero menor o igual a a.
PROBLEMA DE LA MOCHILA
REEMPLAZO DE EQUIPO
 Suponga que un negocio necesita tener una máquina en los
próximos 5 años. Cada máquina nueva tiene un costo $1000. El
costo de mantener la máquina durante el año i-ésimo de operación
es: m1 = $60, m2 = $80, y m3 = $120. Una máquina se puede usar
por tres años y luego ser rematada. El valor de remate de la máquina
después de i añoslos
podría minimizar escostos
s1 = $800, s2 = del
el dueño $600 , y s3 =
negocio $500.¿Cómo
sobre un período de
5 años?.

 Las etapas están asociadas a cada año. El estado será la edad de la


máquina en ese año. Las decisiones son ya sea mantener la
máquina o rematarla y reemplazarla por una nueva.
 Sea ft(x) el mínimo costo desde el instante t al 5, dado que la
máquina tiene x años de antigüedad en el instante t.
CONCLUSIONES
 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.
 Las soluciones se pueden ver de manera
parcial.
 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.

Das könnte Ihnen auch gefallen