LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

45
LIBRERIA DE PROGRAMACION DINAMICA Trabajo de Tesis presentado al Departamento de Ingenier´ ıa Sistemas y Computaci´on por Juan Francisco Redondo Fajardo Asesor: Rafael Garc´ ıa Para optar al t´ ıtulo de Ingeniero de Sistemas y Computaci´on Ingenier´ ıa de Sistemas y Computaci´on Universidad de Los Andes Agosto 2006

Transcript of LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Page 1: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

LIBRERIA DE PROGRAMACION DINAMICA

Trabajo de Tesispresentado al

Departamento de Ingenierıa Sistemas y Computacion

por

Juan Francisco Redondo Fajardo

Asesor: Rafael Garcıa

Para optar al tıtulo deIngeniero de Sistemas y Computacion

Ingenierıa de Sistemas y ComputacionUniversidad de Los Andes

Agosto 2006

Page 2: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

LIBRERIA DE PROGRAMACION DINAMICA

Aprobado por:

Rafael Garcıa, Asesor

Fecha de Aprobacion

Page 3: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

A mi familia, quienes me han brindado todo su apoyo

y aquellas personas allegadas que siempre han estado,

en las buenas y en las malas.

iii

Page 4: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Prefacio

La programacion dinamica es una de las metodologıas implementadas para solu-

cionar una gran variedad de problemas. Esta tecnica, si se utiliza en su forma mas

pura, ofrece algoritmos de solucion que, dada su naturaleza recursiva, tiene comple-

jidad temporal exponencial en la mayorıa de los casos.

La metodologıa para encontrar soluciones a este tipo de problemas, propues-

ta por Bohorquez[4], muestra que definiendo estructuras de datos adicionales que

almacenen las soluciones, se evita volver a realizar caculos correspondientes a sub-

problemas, ya que las soluciones pueden ser llevados acumulativamente; tambien se

evita realizar calculos innecesarios, al tratar de calcular una solucion a un subproble-

ma, ya antes solucionado, literalmente se cambia espacio por tiempo. Cabe nombrar

que esta librerıa busca ser una herramienta que estandarice el proceso de modelaje de

problemas de programacion dinamica, ası que ingresando datos del problema en las

funciones de la librerıa, se podrıa encontrar una solucion en un tiempo polinomial.

Por esto se ve la necesidad y la viabilidad de la implementacion de un API, que

ubica al usuario en un mundo limitado a la insercion de datos que son requeridos y

con estos se encontrarıa la solucion al problema de programacion dinamica, esto se

hace instanciando a la clase DynamicSolver, para luego darle los datos correspondi-

entes al problema, de esta forma, la solucion es alcanzada sin que el usuario sepa la

implementacion de alto nivel que utiliza memorizacion y division en subproblemas.

La librerıa exige datos basados en un problema bien modelado, para satisfacer

todas las funciones del API, que logren una solucion optima, de no cumplirse se

llegarıa a soluciones incorrectas o infactibilidades de realizacion.

iv

Page 5: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Este proyecto contribuye con un proceso de aprendizaje y especializacion, mez-

clando areas de investigacion de operaciones de ingenierıa industrial y de diseno de

algoritmos de ingenierıa de sistemas y computacion.

El proyecto cuenta con el lanzamiento de un API de JAVA, que cambia la

forma de hallar la solucion a cualquier problema de programacion dinamica, ya que

apoyados a este, simplemente se plantea, modela e ingresa los datos del problema

que esta limitados por los parametros de los metodos de la librerıa.

Para tener una lectura amena de esta tesis, a continuacion se explicara los temas

que contiene cada capıtulo de este documento.

Inicialmente en el prefacio, se encuentra una introduccion sobre este desarrollo,

un breve ¿que?, ¿para que?, ¿por que?, y ¿como leer la tesis?; luego en el capıtulo

uno, esta una introduccion teorica acerca de la programacion dinamica, que prob-

lemas soluciona, la existencia de metodologıas para atacar estos problemas, ademas

de varias generalidades sobre conceptos basicos, es decir, un diccionario simple, que

para lectores con pocos conocimientos del tema, clarifica ideas basicas; un capıtulo

importante es el numero dos, donde el modelo y metodologıa implementados se ven

explıcitos, ademas muestra la estructura base para la realizacion del proyecto, es

decir, todo el ciclo de diseno del API; en el capıtulo tres se hace un paralelo entre la

metodologıa mencionada en 1.5 y el ¿como se implemento el proyecto?, explicando

las estructuras de datos y la funciones que este posee, acorde con la metodologıa

utilizada; y por ultimo, en el cuarto capıtulo se encuentran las conclusiones y de-

sarrollos futuros de la tesis, para que esta librerıa abarque aun mas problemas de

programacion dinamica. Para finalizar la induccion a la lectura de este documento,

se anexa un manual que explica como el problema del morral es solucionado in-

gresando los datos que la librerıa exige, este problema es uno de los ejemplos mas

famosos de la programacion dinamica. En los anexos existe una investigacion y con-

clusiones sobre que variables se necesita tener para poder desarrollar un problema

de programacion dinamica, donde la conclusion fue una validacion al modelo usado

en la tesis. Adicional al documento, se encuentra un disco compacto que contiene la

librerıa y los javadoc que muestran la documentacion interna del proyecto.

v

Page 6: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Reconocimientos

A Rafael Garcia, por su colaboracion, paciencia y animo, en el desarrollo de este

API.

A German Riano, por motivar el interes en esta area del conocimiento.

vi

Page 7: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Tabla de Contenido

Dedicatoria III

Prefacio IV

Reconocimientos VI

I. Introduccion a la programacion dinamica 1

1.1. Definicion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2. Enfoques de la programacion dinamica . . . . . . . . . . . . . . . . 2

1.3. ¿Que se puede solucionar con esta metodologıa? . . . . . . . . . . . 3

1.4. Marco teorico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

1.5. Metodologıa aplicada de programacion dinamica . . . . . . . . . . . 5

II. Modelaje y diseno del problema 7

2.1. Elementos basicos de los problemas de programacion dinamica . . . 7

2.2. Planteamiento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2.3. El problema del morral . . . . . . . . . . . . . . . . . . . . . . . . . 10

2.4. Planteamiento del morral bajo la metodologıa . . . . . . . . . . . . . 11

2.5. Diseno de la implementacion . . . . . . . . . . . . . . . . . . . . . . 17

2.6. Requerimientos funcionales . . . . . . . . . . . . . . . . . . . . . . . 17

2.7. Requerimientos no funcionales . . . . . . . . . . . . . . . . . . . . . 19

2.8. Casos de uso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

2.8.1. Usuario con pocos conocimientos en modelar un problemade programacion dinamica . . . . . . . . . . . . . . . . . . . 20

2.8.2. Usuario con altos conocimientos en modelar un problema deprogramacion dinamica . . . . . . . . . . . . . . . . . . . . . 20

vii

Page 8: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

2.9. Diagrama de Clases . . . . . . . . . . . . . . . . . . . . . . . . . . . 20

III. Desarrollo de la librerıa 22

3.1. Generalidades del Desarrollo . . . . . . . . . . . . . . . . . . . . . . 22

3.2. Componentes del Problema . . . . . . . . . . . . . . . . . . . . . . . 23

3.3. Estructura de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.3.1. Los estados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23

3.3.2. Pregunta y etapas . . . . . . . . . . . . . . . . . . . . . . . . 23

3.4. API para problemas de programacion dinamica . . . . . . . . . . . . 24

3.4.1. Conjunto de estados . . . . . . . . . . . . . . . . . . . . . . . 24

3.4.2. Pregunta . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

3.4.3. Condiciones inductivas . . . . . . . . . . . . . . . . . . . . . 24

3.4.4. Operador de la funcion Objetivo . . . . . . . . . . . . . . . . 25

3.4.5. Funcion aplicada a estados sucesores . . . . . . . . . . . . . . 25

3.4.6. Funcion de valor en el caso base . . . . . . . . . . . . . . . . 26

3.4.7. Funcion de valor en el caso inductivo . . . . . . . . . . . . . 26

3.4.8. Memorizacion . . . . . . . . . . . . . . . . . . . . . . . . . . 26

3.4.9. Librerıa JEP . . . . . . . . . . . . . . . . . . . . . . . . . . . 27

IV. Conclusiones y futuros desarrollos 28

4.1. Conclusiones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4.2. Futuros avances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

Apendice A. — Manual Operativo sobre el problema del morral 30

Apendice B. — Investigacion previa 34

Referencias 37

viii

Page 9: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Capıtulo I

Introduccion a la programacion dinamica

1.1. Definicion

Programacion dinamica es un metodo utilizado para reducir la complejidad o

tiempo de ejecucion de los algoritmos, esto mediante la utilizacion de problemas

superpuestos y subestructuras adicionales. el matematico Richard Bellman fue la

primera persona en plantear la ecuacion base para la programacion dinamica, ver

Bellman[2].

Aunque el termino contiene la palabra programacion, dista mucho de lo que en

realidad implica1 y esto es resolver problemas donde se calcula la mejor solucion

consecutivamente.

Pero, ¿que es una subestructura adicional? El termino indica que soluciones

optimas de subproblemas, pueden ser usadas para encontrar soluciones optimas del

problema total. Por definicion se puede resolver problemas con subestructuras adi-

cionales mediante los siguientes pasos:

1. Dividiendo el problema en subproblemas mas pequenos

2. Encontrando la solucion optima de estos subproblemas usando este mismo

proceso de tres pasos2 , de forma recursiva.

3. Construir la solucion optima del problema con las soluciones de los subprob-

lemas.

1Esta palabra no hace referencia a programacion como tal, pero si a programacion matematica.2Al proceso de tres pasos se conoce como dividir y vencer o dividir y conquistar.

1

Page 10: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Los subproblemas se resuelven a su vez, con subproblemas que surgen de estos

mismos, ası se van haciendo mas sencillos de solucionar hasta llegar al caso base,

donde la solucion es trivial Cormen[6].

Se debe notar que una mala implementacion de programacion dinamica puede

incurrir en desperdicios de tiempo. Pues podrıa volver a calcular soluciones a sub-

problemas que ya se saben de antemano. Para solucionar este detalle, y bajar la

complejidad de un algoritmo de programacion dinamica, guardando las soluciones

que ya se han calculado. Esta metodologıa se conoce como memorizacion.

A lo largo del documento se hablara del problema del morral, con el fin de

hallar similitudes entre la teorıa y la practica, haciendo mas facil la lectura y el

entendimiento de este documento. En breve, este problema, sugiere un morral que

cuenta con cierta capacidad, ademas se cuentan con objetos que se pueden meter

dentro del morral, cada uno con un costo de capacidad y un valor o beneficio al

cargarlo en el morral. Se pretende encontrar la combinacion de objetos que max-

imicen la utilidad generada en conjunto entre los objetos incluidos en el morral,

simplemente teniendo bajo restriccion que estos objetos quepan.

1.2. Enfoques de la programacion dinamica

De arriba a abajo

El problema se empieza a dividir en subproblemas, se solucionan los que no han

sido resueltos, a medida que se divide en subproblemas y se recuerdan los que han

sido resueltos, combinando induccion y memorizacion3 .

De abajo a arriba

Primero se solucionan absolutamente todos los problemas que se requieran para

la implementacion de antemano y luego, ya teniendo sus soluciones, estas son uti-

lizadas para resolver a los problemas mayores. Es poco intuitivo, pero ahorra espacio

y llamados a funciones.

3Nota: Este fue el metodo utilizado para la implementacion de la librerıa, ya que es el masintuitivo.

2

Page 11: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

1.3. ¿Que se puede solucionar con esta metodologıa?

Algunos de los problemas que se pueden resolver son los siguientes:

1. Problema de caculo de sucesion Fibonacci: La forma para ser calculado es

netamente inductiva, el valor de este calculo, es la suma de los dos ultimos

resultados teniendo como caso base, la funcion evaluada en cero o en uno, que

genera como resultado uno.

2. Problema de inventario: Es considerado un problema de ordenar una canti-

dad de cierto tipo de items para cada N periodos, hasta encontrar los montos

necesarios para suplir la demanda, ya obtenida de manera estocastica o de-

terminista, ver Bertsekas[3]. Este problema contiene, ci, que es el inventario

disponible en el periodo i-esimo, cpi un inventario pedido en el comienzo de

cada i-esimo periodo y un di que es la demanda durante el i-esimo periodo,

dada por la distribucion de probabilidad. Entonces ci+1 = ci + cpi + di, de

aquı surgen: Un costo de oportunidad o(ci), que es una penalidad por tener

exceso, el costo de hacer el pedido por unidad C(cpi) y M(cN) el costo de

mantener un inventario al final de los N periodos entonces el costo total, esta

descrito.

E{M(cN) +∑N−1

i=0 C(cpi) + o(ci)}

La solucion encontrar el conjunto de objetos que en la etapa N , minimice mi

costo.

3. Ruta mas corta: Se conoce como al problema de encontrar la mejor ruta entre

un vertice y los demas vertices de un grafo conecto ver Ahuja[1]. La forma de

resolver este ejemplo es segmentado, si se encuentran las rutas mas cortas entre

los puntos, y se va analizando que ocurre si se ingresa mas puntos, luego de

desarrollar todos los posibles caminos a los puntos, con ayuda de las soluciones

parciales se puede generar una solucion definitiva.

3

Page 12: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Los anteriores son algunos de los problemas que puede solucionar esta metodologıa.

Algunos cuentan con caraterısticas similares y pueden estar contenidos dentro de

otros, ya mencionados. Este documento se apoya, en el problema del morral que

es uno de estos problemas de programacion dinamica. Un problema en donde la

tecnica de programacion dividir y vencer, funciona. En general, cualquier problema

que su solucion pueda ser hallada partiendo el problema en subproblemas y que las

soluciones de los subproblemas sirvan para hallar la solucion del problema global,si

el problema no llega a desbordar la capacidad de la memoria, esta metodologıa en

teorıa lograrıa resolverlo.

1.4. Marco teorico

Estado Componente de una red o grafo, es un punto, nodo o vertice, el cual

diferencia una posible situacion, y esta definido por un nombre y una funcion de

valor. El conjunto de estados de G se denota como V(G), y donde el orden de un

grafo es el numero de estas | V (G) |. En el caso del morral, los estados constituyen

a los objetos que pueden estar dentro del morral.

Accion Es una decision posible que se puede tomar en cada estado. Asocian a

un estado con otro estado, tambien conocidos como arcos o transiciones. El conjunto

de arcos de G se denota E(G) y donde el tamano de un grafo es el numero de arcos.

| E(G) |. El grado de un nodo es la cantidad de arcos que salen de este. En el ejemplo

del morral los estados se conectan con los otros estados, de acuerdo a la funcion de

sucesores que el usuario implemente.

Red Es un conjunto de estados, relacionados entre si por acciones y se denota

como G := (V,E), esto en el caso de no ser dirigido. En el caso de ser dirigido, E, es

cambiado por un conjunto de parejas ordenadas, que indican el estado inicial y cual

estado destino.

Arbol

Es un grafo simple conectado y acıclico. Se le conoce como hojas a los nodos con

grado 1. En este caso cada nodo, corresponde a un estado, los estados que provienen

del mismo nodo hermanos, se encuentran en la misma etapa, es decir, que cada piso

que tenga el arbol corresponde a otra etapa, en el caso del morral, los estados que

4

Page 13: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

se encuentran en la misma etapa, son objetos que caben dentro del morral sabiendo

que ya hay o no, otros dentro.

Programacion dinamica

La programacion dinamica es una tecnica de solucion de problemas, pero cuya

implementacion directa es ineficiente, por eso, se plantea la definicion de estructuras

de datos que almacenen calculos, para evitar calculos repetidos e innecesarios. Lit-

eralmente cambiando espacio por tiempo. Si el algoritmo que se mejora es iterativo,

se acelerarıa manejando una invariante, minimizando el uso de mucho mas calculos

en la implementacion del programa.

1.5. Metodologıa aplicada de programacion dinamica

Como funciona esto:

1. Se define un lenguaje para establecer formalmente el problema. Se incluye

notacion para la funcion f, cuyo caculo es un valor especifico x0, corresponda

a la solucion del problema

2. Se establece una recurrencia que defina la funcion f en un dominio que incluya

a x0.

3. Se estudia la recurrencia, determinando un diagrama de necesidades, para cada

elemento x del dominio de f, establecer para que elementos se debera conocer

el valor de f para poder calcular f(x)

4. El diagrama de necesidades sugiere un invariante para un ciclo que calcule

todos los valores previos necesarios para evaluar f(x0). Ademas de un orden

de evaluacion para los elementos del dominio de f.

De esta forma se puede disminuir la complejidad temporal considerablemente,

apoyando el tan conocido, dividir y conquistar. Por otra parte, ya que hay calculos

almacenados en la estructura de datos, y existe un orden de evaluacion, se puede

apoyar en los calculos ya realizados y obtener los nuevos valores, de igual forma

tambien guardar los datos ya obtenidos para que no sean vueltos a calcular.

5

Page 14: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Al crear una librerıa para resolver problemas de programacion dinamica, se debe

recurrir a la generalizacion de los problemas dinamicos, separando por niveles, los

datos y librerıa; con esta separacion se trataron varios problemas para analizar,

cuales son los datos necesarios para desarrollar problemas de esta ındole.

Para entender un poco mas esta tecnica de solucion se debe ver el planteamiento

del problema del morral bajo la misma metodologıa, ver 2.4.

6

Page 15: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Capıtulo II

Modelaje y diseno del problema

2.1. Elementos basicos de los problemas de programaciondinamica

1. El problema puede dividirse en etapas, con una decision de la polıtica requerida

en cada etapa. En el caso del morral se divide en varias etapas que estan

asociadas a la capacidad restante. Es decir, si tengo una capacidad N y un costo

por objeto i ci, la siguiente etapa esta definida, (N−ci) y la decision es, en este

caso, la elegir que objeto maximiza el beneficio para esa etapa. Ademas existe

problemas de programacion dinamica que requieren analogamente de tomar

sucesion de decisiones interrelacionadas y en otros, la toma de decisiones no

se encuentra relacionada.

2. Cada etapa tiene un numero de estados asociados a esta. Los estados asociados

con cada etapa en el problema del morral, son los objetos que se quieren meter

al morral, los cuales tienen ademas un valor vi, si ese costo ci cabe dentro del

costo libre para esa etapa, el objeto o estado esta asociado a esa etapa t. En

general, los estados son las diversas condiciones posibles en las que el sistema

podrıa estar en esa etapa del problema, estos pueden ser finitos o infinitos.

3. El efecto de la decision de una polıtica en cada etapa es; transformar el estado

actual en un estado asociado con la etapa siguiente. En el ejemplo del morral,

se tiene una capacidad y esta es disminuida con el costo de ingresar un objeto

en el morral, se soluciona ese subproblema y queda una capacidad restante,

que es el nuevo espacio disponible en el morral para ingresar objetos i, y sobre

7

Page 16: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

esta se vuelve a realizar el mismo proceso, hasta llegar al caso trivial, que para

este seria que no quepa mas objetos i, en el morral. Con los valores obtenidos

por cada etapa se empieza a armar una contribucion a la funcion objetivo en

este caso, metiendo en el morral la combinacion de objetos que maximicen el

valor del conjunto de objetos.

4. Dado el estado actual, una polıtica optima para las etapas restantes. En el

ejemplo del morral, Dado un objeto i que se desea evaluar para ingresar dentro

del morral, desde ese punto en adelante es independiente de como llego allı.

Para los problemas de programacion dinamica en general, el conocimiento del

estado actual del sistema comunica toda la informacion de su comportamiento

previo, necesaria para determinar la polıtica optima de allı en adelante. Esta

propiedad se conoce como el principio de optimalidad.

5. El procedimiento de solucion empieza por hallar la polıtca optima para cada

estado de la ultima etapa. Comunmente, la solucion de este problema para la

ultima etapa es trivial. En el caso del morral, se llega al caso trivial cuando

de esa etapa no se pueden generar mas etapas, y eso ocurre cuando no existe

capacidad restante para insertar cualquier otro objeto.

6. Se dispone de una relacion recursiva que identifica la polıtica optima para

cada estado en la etapa n, dada la polıtica optima para cada estado en la

etapa (n+1)

f ∗n(s) = maxxn(vs|xn + f ∗n−1(xn))

Por lo tanto, hallar la polıtica optima cuando se parte del estado s, quiere

que se encuentre el valor que maximice xn. Esta polıtica consiste en usar este

valor de xn, seguir la polıtica optima cuando se parte del estado xn en la etapa

(n-1). La forma precisa de la relacion recursiva difiere algo entre los problemas

de programacion dinmica. Ası sea, variable o vector xn, la variable de decision

en la etapa n. Sea fn(s, xn), el valor que maximiza la funcion objetivo. dado

que el sistema parte del estado s en la etapa n y se selecciona xn. Ası que

8

Page 17: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

para el problema del morral, fn(s, xn) = vs|xn + f ∗n−1(xn), siendo f ∗n(s) el valor

maximo de fn(s, xn) sobre todos los valores posibles de xn; entonces la relacion

recursiva siempre sera de la forma: f ∗n(s) = max fn(s, xn), en donde se escribirıa

fn(s, xn), en terminos de s, xn, f ∗n y de alguna medida de la primera etapa de

la efectividad o no efectividad de xn

7. Usando esta relacion recursiva, el procedimiento de solucion se mueve hacia

atras, etapa por etapa, hallando la polıtica optima, para cada estado de esa

etapa, hasta que se encuentra la polıtica optima cuando se parte de la etapa

inicial,

Eso se demostro en el problema del morral, en el que se encontro la polıtica

optima, para todos los estados y para todas las etapas. Para hacer analisis,

todos los problemas de programacion dinamica, se puede tener una tabla que

contiene s, f ∗n(s) y xn, cuando se obtiene esta tabla para la etapa inicial, se

resuelve el problema. Ya que se conocerıa el estado inicial, la decision inicial

especificada por x∗1. Entonces, a su vez se especifica el valor optimo de las

otras variables de decision mediante otras tablas, de acuerdo con el estado del

sistema que resulta de la decisiones precedentes. ver Hillier[5].

2.2. Planteamiento

Para la metodologıa usada en este proyecto, un problema de programacion

dinamica requiere de:

1. Una funcion objetivo f que tiene un operador, el cual busca encontrar la solu-

cion optima para ese problema, el resultado de esa funcion es generado induc-

tivamente, y a ese se nombra valor inductivo. En el caso del morral se busca

maximizar el beneficio llenando el morral con la mayor cantidad de objetos

que generen mas valor conjunto, ver 2.3.

2. Una pregunta P, que en realidad es la evaluacion de una funcion asociada a

la funcion objetivo, a la polıtica alcanzada, en algun estado o valor entero.

Sobre el cual se desea concluir. En el caso del morral la pregunta es cual es el

9

Page 18: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

conjunto de objetos que maximizan la funcion objetivo dado que se dispone

de una capacidad C.

3. Los datos del problema:

Estados Estos son los estados se pueden describir como el conjunto de op-

ciones con los cuales cuenta el problema en cada etapa, a los estados que

no tienen predecesores se les conoce como estados iniciales, y de estos sur-

gen todos los estados de la siguientes etapas, y los estados que no tienen

sucesores se conocen como estados finales.

Caso Base Cuando el problema se descompone en subproblemas, ası sucesi-

vamente has que se intenta resolver el caso trivial, luego de este, no hay

mas etapas posibles, por eso, este arroja una solucion.

Caso Inductivo El problema se divide en subproblemas ayudado por la condi-

cion que genera los estados sucesores, para que luego el caso base o nue-

vamente los casos inductivos retornen valores ya acumulados, que hacen

parte de la polıtica optima. y el beneficio va a ser parte de la funcion

objetivo.

Funcion suc:, encontrar sucesores Esta funcion notada como h, se en-

cuentra asociada a cada caso inductivo, ya que los estados sucesores son

manipulados para generar nuevos sucesores’, cada sucesores se encuen-

tran en otra etapa diferente a la etapa de sus predecesores. Y entre estos

compiten para maximizar la funcion objetivo.

Funcion h, para el caso base Esta funcion en el caso base, genera el com-

portamiento de la funcion de valor en el caso base o caso trivial.

Funcion h, para el caso inductivo Esta funcion indica el comportamiento

de la funcion de valor mientras se va desarrollando la induccion.

2.3. El problema del morral

El problema del morral es uno de estos problemas de programacion dinamica,

donde unos objetos i ∀1≤i≤n, que se desean ingresar dentro del morral con capacidad

10

Page 19: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

P , estos objetos i tienen un costo de capacidad pi, una cantidad de objetos oi y

un valor o beneficio ui, se busca llenar el morral con la cantidad objetos optima, es

decir,n∑

i=0

pioi ≤ C

cuantos objetos caben en el morral y

max f(oi, ui)

, la funcion objetivo f, depende de conjunto de elementos que se encuentran en

el morral y el valor que estos en conjunto generan; en otras palabras, encontrar la

combinacion de objetos que maximicen el beneficio dado por la funcion objetivo.

Donde la pregunta para este caso seria maximizar la funcion objetivo, para una

capacidad P ya dada.

2.4. Planteamiento del morral bajo la metodologıa

En esta seccion, se muestra el problema del morral, utilizando la tecnica de solu-

cion de problemas de programacion dinamica dividir y vencer, tomado de Bohorquez[4].

El problema del morral es un problema clasico de la investigacion de operaciones.

Una solucion recurrente ingenua puede resultar demasiado onerosa. La solucion que

se presenta, utilizando programacion dinamica, es eficiente y practica1 .

El problema:

Dados

n objetos, o1, ..., on

Para i = 1, ..., n, pi es el peso de oi. Naturalmente, pi > 0

Un morral, que soporta un peso maximo P .

1A pesar de ser un problema NP-completo, la solucion que se presenta es eficiente en la praxis,si se concede que los numeros involucrados no sean arbitrariamente grandes

11

Page 20: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Para i = 1, ..., n, si se carga en el morral el objeto oi , se obtiene un beneficio

o utilidad ui.

Se quiere maximizar la utilidad de cargar en el morral algunos objetos.

El lenguaje

ut(j,x) : Utilidad maxima que se consigue, si los objetos que se pueden cargar

se eligen entre o1,...,oj, si el peso maximo que se puede soportar es x.

ut(n,P) : Respuesta deseada.

La recurrencia

ut(j,x)= 0 , si j=0

= ut(j-1,x), si 1 ≤ j ≤ n, 0 ≤ x< pj

= max{ut(j-1,x), ut(j-1,x-pj ) + uj}, si 1 ≤ j ≤ n, 0 < x≤ pj

El diagrama de necesidades

Figura 1: Diagrama de necesidades

El algoritmo

12

Page 21: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Ası:

T (n, P ) = O(nP )

S(n, P ) = nP

Mejoras: El algoritmo puede mejorarse, si se observa con mas cuidado el diagrama

de necesidades: basta guardar unicamente las dos ultimas columnas calculadas:

Ası:

13

Page 22: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

T (n, P ) = O(nP )

S(n, P ) = 2P

El ahorro en espacio es significativo. La situacion puede, incluso, mejorar hasta

lograr que se deba almacenar solo una columna, si se piensa que se puede mantener

un invariante que afirme:

14

Page 23: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

El nuevo algoritmo puede escribirse de la siguiente forma:

Hasta aquı, se ha solucionado el problema de conocer cual serıa la utilidad maxi-

ma posible. En la practica se quiere averiguar, ademas, en que forma se puede

alcanzar este optimo.

Ahora, ¿como saber que objetos se llevan?

La tecnica se extiende para considerar una funcion adicional que permita recordar

las decisiones que se tomaron en el calculo del optimo. Los valores de esta funcion

deben almacenarse para construir la respuesta a la nueva pregunta.

Para este caso:

15

Page 24: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

sel(j,x) : 1 si oj se lleva, cuando el peso maximo permitido es x,

: 0 si oj no se lleva, cuando el peso maximo permitido es x.

Notese que:

sel(j,x) = 1 ⇔ 0 < j ≤ P ∧ x ≥ pj cand ut(j-1,x-pj)+uj

Con esta definicion, el algoritmo puede modificarse para calcular sel :

Se debe observar que la estructura del algoritmo que calcula el optimo se respeta

y se utiliza como plataforma sobre la que se puede, adicionalmente, escribir codigo

que permita recordar las decisiones tomadas.

16

Page 25: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Finalmente, para determinar que objetos se pueden llevar para conseguir la util-

idad maxima, defınase, para 1 ≤ i ≤ n :

x[i]= 1 ⇔ oi se lleva, para alcanzar el optimo.

El siguiente algoritmo, que calcula en el arreglo X[1..n] el vector x[1..n]:

2.5. Diseno de la implementacion

A continuacion se encuentra el ciclo de diseno de la aplicacion y se encuentra

dividido en: Levantamiento de requerimientos, el cual consta de las cosas que esta

aplicacion debe hacer y se encuentra segmentado en requerimientos funcionales,

propios de la aplicacion para que esta cumpla con su objetivo y requerimientos no

funcionales, que son parte de la calidad del programa; luego los posibles casos de

uso, explicado para cada usuario que pueda usar la librerıa; por ultimo un diagrama

de clases, el cual contiene el conjunto de estructuras de datos, separadas por objetos,

con sus respectivos atributos o variables y sus metodos, que son aquellas funciones

que sirven para interactuar entre objetos.

2.6. Requerimientos funcionales

1. Hallar el escenario optimo, o conjunto de escenarios optimos por etapa, de un

problema bien modelado.

17

Page 26: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

2. Tendra la capacidad de amoldarse ante cualquier tipo de problema de progra-

macion dinamica con que el usuario se encuentre. Y encontrar una solucion

optima, factible, etc., todo esto, dependiendo de la forma como se plantee el

problema.

3. Desarrolla un esquema de estados alcanzables a partir de las condiciones in-

ductivas presentadas.

4. Con javadoc y un manual de soporte para el API, se facilitara el entendimiento

de este.

5. Los resultados seran explıcitos con el valor final de la f.o, tambien llamado

f(x0) decision asociada a cada mejor estado en cada etapa.

6. El API tendra metodos para resolver tanto problemas determınisticos, esto

esta sujeto a la metodologıa del desarrollo.

7. El usuario, debe indicar claramente la funcion objetivo de la cual deriva su caso

base y su caso inductivo, como avance al desarrollo y facilitar, el recorrido entre

estados y etapas, el usuario en el planteamiento del problema podra agregar

un caso transitivo, que evite recorrer mas estados y acelere el encontrar el caso

base.

8. El usuario podra agregar condiciones

9. El usuario de acuerdo a su metodologıa podra encontrarse con un resultado

optimo hallado de forma eficiente, un resultado optimo encontrado de una

forma no eficiente, o no alcanzar el caso base, por mal planteamiento del

problema. Casos de ciclaje o infactibilidad.

10. La separacion de tres niveles: datos, problema y programa; existe por lo sigu-

iente

a) Usuario es responsable de ingresar los datos como el API los exige.

18

Page 27: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

b) De acuerdo a la mezcla entre parametros requeridos y opcionales, se puede

atacar de diferentes formas un problema dinamico, ya que en el fondo,

todos los problemas dinamicos concuerdan en varios detalles.

c) De acuerdo a investigaciones soportadas por Bellman, el principio de pro-

gramacion dinamica es el mismo, y se encuentra basado en una ecuacion

sencilla, que fue la base de este desarrollo.

11. El problema no requiere definicion de etapas, ya que genericamente es atem-

poral, pero manejando responsablemente y con un buen modelaje los estados

pueden aparecer modificando las condiciones. El control de recorrido y de eta-

pas queda a cargo del API.

12. El usuario se hace responsable del buen modelaje del problema para una buena

insercion de los datos del problema dinamico al API.

2.7. Requerimientos no funcionales

1. La librerıa implementa la tecnica de programacion antes mencionada como

dividir y vencer, ademas de estructuras de datos que memoricen calculos, para

que esta sea eficiente, aumentando la respuesta en tiempo.

2. La librerıa tiene muy bien definida en sus estructuras, el problema y los ele-

mentos de este.

3. La librerıa debe estar bien documentada.

4. Se debe tener un manual que sirva para ilustrar como insertar datos de un

ejemplo para encontrar una solucion a un problema de programacion dinamica.

5. Como fue mencionado este desarrollo va ser implementado en JAVA.

19

Page 28: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

2.8. Casos de uso

2.8.1. Usuario con pocos conocimientos en modelar un problema deprogramacion dinamica

1. Insertar datos requeridos, el usuario puede insertar estos datos basandose en

un ejemplo ya realizado y apoyandose en un manual.

2. Este usuario encontrara soluciones al problema, al cual sencillamente modif-

ico los datos que recibıa el API.

2.8.2. Usuario con altos conocimientos en modelar un problema deprogramacion dinamica

1. El usuario experto puede utilizar la librerıa como una librerıa para cualquier

aplicacion, no solo botando resultados sino, siendo parte de un desarrollo para

toma de decisiones.

2. De acuerdo a los datos requeridos y opcionales, el usuario podra modificar la

insercion y mezclar entre estos, definiendo bien un problema

3. Agregar nuevos ejemplos con el lenguaje. Para usuarios inexpertos.

4. Insertar datos requeridos, el usuario puede insertar estos datos basandose en

un ejemplo ya realizado y apoyandose en un manual.

5. Mediante un comando el usuario puede genere una solucion optima factible,

de acuerdo a la metodologıa utilizada en el programa.

6. Los resultados deben ser presentados en la consola de JAVA

2.9. Diagrama de Clases

20

Page 29: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Fig

ura

2:

Diagram

ade

clases

21

Page 30: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Capıtulo III

Desarrollo de la librerıa

3.1. Generalidades del Desarrollo

Con los concepto tomados en el modelaje del problema, se puede hacer un parale-

lo con este capitulo, aquı se convierte el modelo de la solucion en estructuras de datos

y funciones que van acordes a la metodologıa.

Este proyecto de grado consta del desarrollo de un API (Application Program-

ming Interface - Interfaz de Programacion de Aplicaciones; un conjunto de especifica-

ciones de comunicacion entre componentes software) de programacion dinamica para

JAVA , basados en la metodologıa vista en el capıtulo dos. El API tendra funciones

que permitan crear y recorrer el conjunto posible de estados, para ser evaluados y en-

contrar soluciones optimas a los problemas planteados. Los metodos son facilmente

entendibles, concisos para que el usuario ingrese los datos, paso a paso, sin mayores

traumas.

El punto crıtico de este trabajo por parte del usuario, es en un buen modelaje

de los problemas de programacion dinamica, para que al usuario final tenga una

transparencia al llamar los metodos del API. Un mal modelaje del problema incur-

rira en una mala insercion de datos o resultados incoherentes, llegado a una solucion

erronea o simplemente inexistente. Un problema bien planteado podrıa tener solu-

cion, dependiendo de los estados y etapas que debe inspeccionar, ya que cada estado

en cierta etapa puede generar mas subproblemas y si el problema esta bien mode-

lado pero no esta acotado igualmente no tiene solucion por este metodo, al final, el

ahorro es en tiempo.

22

Page 31: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

3.2. Componentes del Problema

Se analiza que los estados, deben guardar la informacion que es acumulada, para

luego que sea comparada entre estos y ver cual es el estado optimo y avanzar a la

siguiente etapa. Ademas el usuario puede hacer referencia a lo que le interese.

Un estado contara, con un apuntador a lo que el usuario desee. Contara con un

valor interno si es necesario, que sera asociado por el algoritmo, de acuerdo a como

se ingrese la deficion del problema.

Las restricciones estan asociadas entre variables que se encuentran en la funcion

objetivo y otras variables que se encuentran en el lenguaje definido por el usuario.

3.3. Estructura de datos

3.3.1. Los estados

Los estados contienen valores fijos y variables calculados que al estar almacenados

y permanecer en una estructura de arbol, simplifican drasticamente la complejidad

del algoritmo.

Costo: Cada estado tiene definido su costo asociado, este costo es de tipo entero,

ya que es un problema de programacion dinamica y no un algoritmo greedy.

Valor: Cada estado posee, un valor tipo real el cual es tenido en cuenta para

calcular la polıtica optima y la funcion objetivo.

Valor Inductivo: Este valor es un control y esta limitado, por la condicion

inductiva del problema, el calculo es generado, si el estado donde se encuentra es un

posible sucesor.

Formula de la funcion de valor: Este valor es acumulativo y corresponde al

valor inmediato que genera el incurrir en ese estado, mas todos los valores de los

estados que se obtuvieron para llegar a esa etapa.

3.3.2. Pregunta y etapas

Para evitar volver a procesar calculos ya realizados, se utiliza una estructura de

tablas de hash anidadas, con etapas y la pregunta que evaluada para los subproble-

ma genera un conjunto de preguntas mas sencillas de responder, si en la induccion

23

Page 32: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

se encuentra con la misma etapa y con la pregunta que ya ha sido evaluada para el

subproblema, no es necesario desarrollar los calculos para obtener el resultado cor-

respondiente ya que fue calculado y memorizado,en la estructura antes mencionada.

3.4. API para problemas de programacion dinamica

Esta librerıa debe ser invocada, con todos los estados posibles, indicando la

condicion inductiva y haciendo explıcito que hacer con la funcion objetivo. En el

apendice, se encuentra un manual operativo basado en el ejemplo del morral, allı se

hace un paralelo entre esta seccion y el ejemplo se ha venido trabajando en este

documento.

3.4.1. Conjunto de estados

Es el primer parametro de la librerıa cuando se invoca el metodo

solve(),

en este caso es un Vector de objetos State, donde se indica la totalidad de estados

que la librerıa puede alcanzar o en su defecto los estados iniciales, pero indicando

en la condicion inductiva cuales son los posibles sucesores y en la funcion aplicada

a los estados sucesores decir que hacer con estos.

3.4.2. Pregunta

Es el segundo parametro del metodo

solve()

, en este caso es un Vector de objetos Integer, donde se indica la pregunta del

problema, para problemas de programacion dinamica, esta pregunta es inductiva, y

es divisible en subconjuntos, por eso, lo considere como un conjunto de enteros.

3.4.3. Condiciones inductivas

Es el tercer parametro del metodo

solve(),

24

Page 33: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

en este caso es un Vector de objetos Condition, donde se indica que condicion se

debe cumplir, manipulando los nombre de las variables que se encuentran dentro de

los estados, para encontrar los sucesores a cada estado analizado, esta condiccion

por ende, al ser evaluada por el algoritmo que implementa esta metodologıa debe

retornar falso o verdadero.

3.4.4. Operador de la funcion Objetivo

Es el cuarto parametro del metodo

solve(),

en este caso es un String, donde se indica que tipo de operacion se va a realizar

con los valores resultantes en cada etapa. Es decir, si la funcion objetivo esta max-

imizando, entonces por etapas se debe encontrar el valor que maximice la funcion,

los mismo con la minimizacion, sumatoria, etc.

Para este caso se implementa las cadenas de caracteres MAX y MIN.

3.4.5. Funcion aplicada a estados sucesores

Este parametro es ingresado por una funcion que recibe un vector, por eso,

primero creo el vector, luego le agrego la funcion en una cadena de caracteres medi-

ante el metodo

next.add(s:String);

y luego agrego el vector a la librerıa

s.setNext(next);,

antes de ser llamado el metodo

solve(),

en este caso es un Vector, de objetos String, que contiene las mismas variables de

estado que manejan las condiciones inductivas, indicando el resultado a seguir de

los sucesores. Esta esta directamente asociada a cada caso inductivo, de esta forma

25

Page 34: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

cada vez que se crea una condicion inductiva, se debe crear una funcion de este

tipo para que sea aplicada a los sucesores. La forma de asociarlos es simplemente

agregandolos en los vectores en el mismo orden, al final quedaran dos vectores el

primero con la condicion en la posicion i y su funcion correspondiente tambien en

la posicion i.

3.4.6. Funcion de valor en el caso base

Este parametro es ingresado por una funcion que pertenece al API

setBcVal(s:String),

antes de ser llamado el metodo

solve(),

en este caso es un objeto String que contiene las mismas variables de estado que

maneja la funcion aplicada a sucesores indicando con el resultado, que valor retorna

la induccıon al encontrarse con el caso base.

3.4.7. Funcion de valor en el caso inductivo

Este parametro es ingresado por una funcion que pertenece al API

setValueFormula(s:String), antes de ser llamado el metodo

solve(),

en este caso es un objeto String que contiene las mismas variables de estado que

maneja la funcion aplicada a sucesores, indicando con el resultado, que valor retorna

la induccıon al encontrarse con el caso inductivo.

3.4.8. Memorizacion

Se implemento en el metodo inductiveCalculated() en la clase

InductionClass, el cual guarda la pregunta evaluada bajo cierto valor correspon-

diente al subproblema, en cierta etapa. Esto se hace implementado dos niveles de

tablas de Hash. Uno para la etapa y otro para la pregunta evaluada bajo las condi-

ciones del subproblema.

26

Page 35: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

3.4.9. Librerıa JEP

Para la manipulacion de condiciones, expresiones y para que el usuario desde un

nivel superior las programe literalmente, sin echar codificar en JAVA las funciones,

condiciones o datos, se utilizo una librerıa libre de JAVA, que convierte cadenas

de caracteres en expresiones evaluables, existen dos clases que implementan esta

librerıa JEP1 : Una llamada Condition que simplemente retorna falso o verdadero.

Otra llamada Expression que retorna un valor real. Esta librerıa es muy util, ya que

permite manejar variables, por eso, se le permite al usuario nombrarlas al invocar

el API, para que esos nombres queden asociados a las variables de estado, de las

cuales se hablo en la seccion componentes del problema en el punto correspondiente

a estado. Luego de asociarlas el usuario puede en las condiciones evaluarla, y en

las funciones que se aplican a los sucesores ocurrido algun caso, puede modificarlas.

Sin esta librerıa, el usuario no estarıa separado totalmente del API que encuentra

la solucion a los problemas de programacion dinamica.

1JEP es una librerıa, que recibe una cadena de caracteres que contenga ecuaciones, expresiones,condiciones; entre otras cosas que pueden devolver un valor, permitiendo que estas sean evaluadasy arrojando un resultado, para encontrar mas informacion sobre esta librerıa, se debe visitarhttp://www.singularsys.com/jep/doc/javadoc/org/nfunk/jep/JEP.html

27

Page 36: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Capıtulo IV

Conclusiones y futuros desarrollos

4.1. Conclusiones

Este implementacion es una primera version de un API para encontrar soluciones

a ciertos problemas de programacion dinamica en tiempo polinomial, es un software

libre para la comunidad JAVA, bastante completo en su expresion mas sencilla. Es

generico y depende en una gran parte, de la forma como el usuario lo modele. Es-

pecıficamente en que es problema del usuario respetar que las condiciones inductivas

sean excluyentes. Entre otros detalles de especificacion.

Se logro desarrollar una librerıa adaptativa, con induccion enfocada de arriba

hacia abajo, cumpliendo con todos los parametros que un problema de programacion

dinamica requiere.

Se creo un manual corto, para que el usuario con un ejemplo de problema de

programacion dinamica, llamado el problema del morral, pueda montar cualquier

otro tipo de problema de esta ındole, y encontrarle solucion de igual forma.

Es una implementacion, basada en una metodologıa existente, brindando otro

enfoque para encontrar soluciones a problemas de programacion dinamica a la co-

munidad de programadores en JAVA.

Este desarrollo, puede ser el inicio de un grupo de investigacion que trabaje sobre

un buen modelaje de problemas de programacion dinamica y como volver este API

mas intuitivo para el usuario.

28

Page 37: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

4.2. Futuros avances

Para este proyecto hay surgido un interes en desarrollar un complemento, mucho

mas amigable, con una buena interfaz grafica y con un modulo de analisis estadıstico

de los datos. Para el sector asegurador.

Extender este algoritmo a no determinista, asociando probabilidades para incor-

porar mas ejemplos a este como procesos de decision markoviana, ruta mas corta

estocastica, etc.

Realizar mezclas entre este algoritmo con otros tipos de programacion para que

surjan nuevas metodologıas de desarrollo de problemas con incertidumbre, con com-

plejidad computacional alta, etc.

Desarrollando mas ejemplos, haciendo mezclas con otras metodologıas, se puede

afianzar el manual del usuario de esta librerıa, ademas de investigar para que en

futuras versiones sea mas intuitivo el proceso de ingresar datos.

29

Page 38: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Apendice A

Manual Operativo sobre el problema del morral

1. Crear una instancia del programa, de esta forma

DynamicSolver s= new DynamicSolver();

2. Crear la pregunta inicializando un objeto Vector, con las capacidades, montos,

etc. Sobre los cuales se quiere saber el valor acumulativo del problema. Aquı se

hace explıcito un morral con capacidad de 8.

Collection capacities = new Vector();

capacities.add(new Integer(8));

3. Luego se definen los estados, dandoles un nombre, un costo entero y un valor

real. para que luego sean ingresados a un conjunto de objetos llamado States

State s1= new State("Helado Vainilla", 64, 100000);

State s2= new State("Helado Chocolate", 32, 45000);

State s3= new State("Helado Fresa" , 16, 22000);

State s4= new State("Helado Ron con pasas", 8, 10000);

State s5= new State("Helado Arequipe" , 4, 4500);

State s6= new State("Helado Capuccino", 2, 2200 );

States sts = new States();

30

Page 39: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

sts.addState(s1);

sts.addState(s2);

sts.addState(s3);

sts.addState(s4);

sts.addState(s5);

sts.addState(s6);

4. Se indica que operacion se va a realizar sobre la funcion objetivo, este caso es

Maximizacion Max.

String objop = "Max";

5. Ahora se le da nombres a las variables que tiene el sistema para que el usuario

las opere como quiera, en la funcion de valor tanto del caso base como de los ca-

sos inductivos, tambien son indispensables para la induccion, con la condicion

de sucesores y las operaciones que se hacen sobre estos.

String cost= "cost";

//Corresponde al nombre de la variable del costo,

capacidad, etc. Fijo por estado.

String indcost = "rescap";

// Corresponde al nombre de la variable asociada

con el costo, capacidad de la pregunta

String polval = "policyval";

// Corresponde al nombre de la variable que acumula

el valor por escoger ese

estado y todos los que se tomaron para llegar all

String valname = "val";

// Corresponde al valor inmediato de incurrir en un

estado, para cierta etapa.

31

Page 40: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

String stateval = "sval";

// Corresponde al valor generado por el estado

indicado por el usuario.

s.setInductiveCostName(indcost);

s.setCostName(cost);

s.setPolicyValueName(polval);

s.setValueName(valname);

s.setStateVariableName(stateval);

6. Se crea las condiciones inductivas, que indican como encontrar los sucesores.

Apoyada en los nombres antes mencionados. En este caso se indica que los

sucesores son para este caso inductivo, los que quepan dentro de la capacidad

restante.

Collection icond = new Vector();

icond.add("rescap - cost >= 0");

7. Se asocia a cada condicion inductiva, una funcion que indica que hacer con los

sucesores. Apoyada en los nombres antes mencionados. En este caso, con lo

sucesores, se saca la nueva capacidad restante, y la pregunta, se soluciona para

un subproblema. Nota: Se debe respetar que las condiciones inductivas sean

excluyentes, es decir, ya que los sucesores son generados por esta condicion,

estas condiciones no deben genera grupos de sucesores, cuya interseccion sea

diferente de vacıo.

Collection next = new Vector();

next.add("rescap - cost");

s.setNext(next);

32

Page 41: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

8. Se le hace explıcito a la librerıa la funcion que genera un valor a devolver

cuando el algoritmo encuentre el caso base, para este caso debe devolver el

valor de incurrir en ese estado.

s.setBcVal(val);

9. Se le hace explıcito a la a librerıa la funcion que genera un valor a devolver

cuando el algoritmo encuentre un caso inductivo dado, aquı se ve que el usuario

le indica al algoritmo que sume al acumulado de la funcion de valor, el valor

de incurrir en ese estado.

s.setValueFormula("policyval + val");\\

10. Por ultimo se llama al metodo solve(), y se le ingresan estos parametros

s.solve(sts, capacities, icond, objop);

Luego de haber realizado estos pasos se corre el metodo solve() de la libr-

erıa y en consola apareceran, el valor correspondiente a la funcion objetivo

evaluada segun los parametros de la pregunta y el conjunto de decisiones que

corresponde a la polıtica que mejor se ajusta al problema de programacion

dinamica.

33

Page 42: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Apendice B

Investigacion previa

Analice cuatro de los multiples problemas de programacion dinamica, los cuales

fueron inspeccionados para encontrar similitudes y diferencias. Ya que lo que se

buscaba, era crear un API que pueda solucionar cualquier problema de programacion

dinamica, aunque se ve una convergencia entre los datos que se requieren segun esta

investigacion, con los datos que se propone en la metodologıa, ver seccion1.5. Los

problemas analizados son algunos de los problemas dinamicos mas mencionados, y

de conocimiento publico fueron:

1. El del Morral1

2. El de los signos

3. Ruta mas corta

a) Correccion de etiquetas

b) Rama mas pesada en un arbol

c) Ruta mas larga o max. beneficio

4. Subcadena comn entre Cadenas, tiene ligero parecido al de los signos

Entre los anteriores problemas mencionados, se recorre entre posibles soluciones,

encontrando por etapas cual es la mejor condicion, y ası, llegar al mejor beneficio.

1Este es el problema por excelencia mas nombrado en cuanto a programacion dinamica, sepuede ver mas a fondo ver Bertsekas[1]

34

Page 43: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

La diferencia entre estos, es que calcular estados alcanzables desde un estado y

una etapa, es mas explıcita unos que otros, es decir, unos calculan a donde pueden

llegar y otros simplemente por asignacion alcanzan sus estados alcanzables.

Luego de tener estados alcanzables, se encuentra la mejor decision entre estos.

Este paso es mucho mas facil que el anterior, porque se vuelve a tomar la famosa

ecuacion de Bellman.

B.1. Datos genericos

B.1.1. Calculos y datos por el usuario

1. Contador de objetos i y cual es su maximo valor

2. Peso, costo o distancia p(i) esto esta asociado a un estado y una etapa.

3. Utilidad o beneficio u(i).

4. Restricciones de costo asocia p(i) con un maximo Costo, si hay Costos

5. Restricciones de utilidad asocia u(i) con un mınimo de Utilidad si hay Utili-

dades

6. Caso base relacionada con la funcion objetivo. Requerido

7. Caso Inductivo en funcion de la F.O. Requerido con condicion y estos con

datos asociados a las variables de decision

8. Caso transitivo o mejoras al algoritmo, que se puede desarrollar luego de aplicar

el inductivo. Para acelerar la respuesta. Opcional

9. Operador funcion objetivo min., max. Requerido

10. Pregunta, es el estado para el cual se quiere evaluar funcion objetivo. En el

caso del morral como maximizo el morral si el tamano es 0.3 metros cubicos.

11. Variables de decisin, que se deben guardar por estado, como quien es mi pre-

decesor. Si quiero saber la ruta.

35

Page 44: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

B.1.2. Calculos y datos del programa

1. Rangos, dados por la inicializacion

2. Estados marcados o estados parcialmente optimos, dados por la inicializacion

y modificados por la induccion, es decir, avance y control de etapas

3. Estados posibles , dados por la inicializacion y modificados por la induccion

4. Inicializacion de variables, en funcion de otras o transformadas. Explıcitamente

estados alcanzables a partir de restricciones e induccion.

5. transformar restricciones en estados alcanzables o aceptar matriz de estados

alcanzables.

36

Page 45: LIBRERIA DE PROGRAMACION DINAMICA - Uniandes

Referencias

[1] Ravindra K. Ahuja. Network Flows, Theory, Algorithms and Applications. Num-ber 013617549X. Prentice Hall, Englewood Cliffs, New Jersey, 1993.

[2] Richard Bellman. Dynamic Programming. Princeton University Press, Princeton,N.J., 1956.

[3] Dimitri P. Bertsekas. Dynamic Programming and Optimal Control, volume II.Athena Scientific, Belmont, Massachusetts, 1995.

[4] Jaime Bohorquez. Diseno efectivo de programas correctos. Editorial EscuelaColombiana de Ingenierıa, 2006.

[5] Gerald J. Lieberman Frederick Hillier. Introduccion a la investigacion de opera-ciones. McGraw - Hill, 3 edition, enero 1982. traduccion de la tercera edicion.

[6] Ronald L. Rivest Thomas Cormen, Charles E. Leiserson. Introduction to Algo-rithms. The MIT Press, 2001.

37