• No se han encontrado resultados

Futuros avances

In document LIBRERIA DE PROGRAMACION DINAMICA (página 37-45)

IV. Conclusiones y futuros desarrollos

4.2. Futuros avances

Para este proyecto hay surgido un inter´es en desarrollar un complemento, mucho m´as amigable, con una buena interfaz gr´afica y con un modulo de an´alisis estad´ıstico de los datos. Para el sector asegurador.

Extender este algoritmo a no determinista, asociando probabilidades para incor- porar m´as ejemplos a este como procesos de decisi´on markoviana, ruta m´as corta estoc´astica, etc.

Realizar mezclas entre este algoritmo con otros tipos de programaci´on para que surjan nuevas metodolog´ıas de desarrollo de problemas con incertidumbre, con com- plejidad computacional alta, etc.

Desarrollando m´as ejemplos, haciendo mezclas con otras metodolog´ıas, se puede afianzar el manual del usuario de esta librer´ıa, adem´as de investigar para que en futuras versiones sea m´as intuitivo el proceso de ingresar datos.

Ap´endice 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, d´andoles 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();

sts.addState(s1); sts.addState(s2); sts.addState(s3); sts.addState(s4); sts.addState(s5); sts.addState(s6);

4. Se indica que operaci´on se va a realizar sobre la funci´on objetivo, este caso es Maximizaci´on 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 funci´on de valor tanto del caso base como de los ca- sos inductivos, tambi´en son indispensables para la inducci´on, con la condici´on 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.

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 condici´on inductiva, una funci´on 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 condici´on, estas condiciones no deben genera grupos de sucesores, cuya intersecci´on sea diferente de vac´ıo.

Collection next = new Vector(); next.add("rescap - cost"); s.setNext(next);

8. Se le hace expl´ıcito a la librer´ıa la funci´on 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 funci´on 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 funci´on de valor, el valor de incurrir en ese estado.

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

10. Por ´ultimo se llama al m´etodo solve(), y se le ingresan estos p´arametros

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

Luego de haber realizado estos pasos se corre el m´etodo solve() de la libr- er´ıa y en consola aparecer´an, el valor correspondiente a la funci´on objetivo evaluada seg´un los par´ametros de la pregunta y el conjunto de decisiones que corresponde a la pol´ıtica que mejor se ajusta al problema de programaci´on din´amica.

Ap´endice B

Investigaci´on previa

Analice cuatro de los m´ultiples problemas de programaci´on din´amica, 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 programaci´on din´amica, aunque se ve una convergencia entre los datos que se requieren seg´un esta investigaci´on, con los datos que se propone en la metodolog´ıa, ver secci´on1.5. Los problemas analizados son algunos de los problemas din´amicos m´as mencionados, y de conocimiento publico fueron:

1. El del Morral1

2. El de los signos

3. Ruta m´as corta

a) Correcci´on de etiquetas

b) Rama m´as pesada en un ´arbol c) Ruta m´as larga o m´ax. 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 condici´on, y as´ı, llegar al mejor beneficio.

1Este es el problema por excelencia m´as nombrado en cuanto a programaci´on din´amica, se puede ver m´as a fondo ver Bertsekas[1]

La diferencia entre estos, es que calcular estados alcanzables desde un estado y una etapa, es m´as expl´ıcita unos que otros, es decir, unos calculan a donde pueden llegar y otros simplemente por asignaci´on alcanzan sus estados alcanzables.

Luego de tener estados alcanzables, se encuentra la mejor decision entre estos. Este paso es mucho m´as f´acil que el anterior, porque se vuelve a tomar la famosa ecuaci´on de Bellman.

B.1.

Datos gen´ericos

B.1.1. C´alculos y datos por el usuario

1. Contador de objetos i y cual es su m´aximo 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 m´aximo 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 funci´on objetivo. Requerido

7. Caso Inductivo en funci´on de la F.O. Requerido con condici´on y estos con datos asociados a las variables de decisi´on

8. Caso transitivo o mejoras al algoritmo, que se puede desarrollar luego de aplicar el inductivo. Para acelerar la respuesta. Opcional

9. Operador funci´on objetivo min., m´ax. Requerido

10. Pregunta, es el estado para el cual se quiere evaluar funci´on objetivo. En el caso del morral como maximiz´o el morral si el tama˜no es 0.3 metros c´ubicos.

11. Variables de decisi´n, que se deben guardar por estado, como quien es mi pre- decesor. Si quiero saber la ruta.

B.1.2. C´alculos y datos del programa 1. Rangos, dados por la inicializaci´on

2. Estados marcados o estados parcialmente ´optimos, dados por la inicializaci´on y modificados por la inducci´on, es decir, avance y control de etapas

3. Estados posibles , dados por la inicializaci´on y modificados por la inducci´on

4. Inicializaci´on de variables, en funci´on de otras o transformadas. Expl´ıcitamente estados alcanzables a partir de restricciones e inducci´on.

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

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 Boh´orquez. Dise˜no efectivo de programas correctos. Editorial Escuela Colombiana de Ingenier´ıa, 2006.

[5] Gerald J. Lieberman Frederick Hillier. Introducci´on a la investigaci´on de opera-

ciones. McGraw - Hill, 3 edition, enero 1982. traducci´on de la tercera edici´on.

[6] Ronald L. Rivest Thomas Cormen, Charles E. Leiserson. Introduction to Algo-

In document LIBRERIA DE PROGRAMACION DINAMICA (página 37-45)

Documento similar