Académique Documents
Professionnel Documents
Culture Documents
Resumen
El siguiente trabajo trata sobre el desarrollo de una aplicacin orientada a la
resolucin de problemas de programacin dinmica. El desarrollo de esta
herramienta supone cubrir el ecosistema de aplicaciones pensadas en el
aprendizaje de algoritmos. El contexto de uso de la aplicacin ser educativo, es
decir, los alumnos podrn reforzar sus conocimientos en la materia mediante la
ejecucin de las visualizaciones.
Desde el punto de vista de la usabilidad, se trata de crear una aplicacin sencilla,
minimalista, que sea intuitiva de cara al usuario final. Con el diseo se busca
practicidad sin descuidar el estilo grfico.
NDICE
1.
Introduccin ..................................................................................................1
1.1 Programacin dinmica ............................................................................. 1
1.2 Objetivos ................................................................................................... 2
2.
3.
4.
5.
6.
7.
NDICE DE ILUSTRACIONES
Figura 1: Proceso de visualizacin de datos........................................................ 4
Figura 2: Diagrama de actividad de la mochila 01 ............................................. 15
Figura 3: Diagrama de actividad de alineacin de secuencias .......................... 18
Figura 4: Diagrama de actividad de cortar una vara .......................................... 20
Figura 5: Diagrama de actividad de multiplicacin de matrices ......................... 22
Figura 6: Diagrama de actividad de subsecuencia comn ms larga ................ 24
Figura 7: Diagrama de casos de uso ................................................................. 25
Figura 8: Relacin de los subsistemas de la aplicacin ..................................... 36
Figura 9: Clases del subsistema de entrada de datos ....................................... 36
Figura 10: Clases del subsistema de visualizacin paso a paso........................ 37
Figura 11 Clases del subsistema de ayuda ....................................................... 38
Figura 12 La clase que gestiona la interaccin con ficheros de texto ................ 38
Figura 13: Panel principal de la aplicacin ........................................................ 48
Figura 14: Panel de entrada del problema de la mochila ................................... 49
Figura 15: Panel de entrada del problema del alineamiento de secuencias ...... 50
Figura 16: Panel de entrada del problema de cortar una vara ........................... 50
Figura 17: Panel de entrada del problema de multiplicacin de matrices .......... 51
Figura 18: Panel de entrada del problema de la SCML ..................................... 51
Figura 19: Panel de entrada con casillas en rojo sin completar ......................... 52
Figura 20: Inicializacin de la mochila ............................................................... 53
Figura 21: Visualizacin paso a paso de la mochila .......................................... 54
Figura 22: Solucin de la mochila...................................................................... 54
Figura 23: Inicializacin del alineamiento de secuencias ................................... 55
Figura 24: Visualizacin paso a paso del alineamiento de secuencias .............. 55
Figura 25: Solucin del alineamiento de secuencias ......................................... 56
Figura 26: Inicializacin de cortar una vara ....................................................... 56
Figura 27: Visualizacin paso a paso de cortar una vara .................................. 57
Figura 28: Solucin de cortar una vara .............................................................. 57
Figura 29: Inicializacin de la multiplicacin de matrices ................................... 58
Figura 30: Visualizacin paso a paso de la multiplicacin de matrices .............. 58
Figura 31: Solucin de la multiplicacin de matrices ......................................... 59
Figura 32: Inicializacin de la subsecuencia comn ms larga .......................... 59
Figura 33: Visualizacin pasos a paso de SCML ............................................... 60
Figura 34: Solucin de la subsecuencia comn ms larga ................................ 60
Figura 35: Informacin del problema ................................................................. 61
Figura 36: Informacin de cargar y guardar ....................................................... 62
Figura 37: Caracterizacin de colores ............................................................... 63
1. Introduccin
La programacin dinmica es uno de los paradigmas ms importantes de diseo
de algoritmos, pero es compleja y por ello se pretende disear una herramienta
que favorezca el aprendizaje de este paradigma. Para ello nos centraremos en
algunos de los problemas que se pueden resolver valindonos de la programacin
dinmica, y mediante la herramienta se podr visualizar la ejecucin completa del
algoritmo.
1.2 Objetivos
El objetivo del desarrollo de esta herramienta de software es dotar al alumnado de
una aplicacin prctica para entender los algoritmos de programacin dinmica
mediante la resolucin por etapas de los diversos problemas planteados.
Esta aplicacin est basada en otra herramienta de software enfocada tambin en
la programacin dinmica, vase [26]. Buscamos por tanto, con esta versin,
mejorar en aspectos como el diseo de la herramienta, la visualizacin de los
algoritmos o la mejora de las funcionalidades de la interfaz de usuario.
Anteriormente, en el apartado 1.1, mencionbamos los dos enfoques desde los
cuales se puede estudiar la programacin dinmica. En nuestro caso, la
herramienta est basada en el procedimiento bottom-up. Por tanto, el tablero de
la solucin est representado con una matriz cuyas casillas van siendo rellenadas
desde las soluciones parciales hasta la solucin final, de modo que se puedan
visualizar las dependencias de las soluciones posteriores con las anteriores
calculadas.
Resumen de las caractersticas de la aplicacin:
previamente
seleccionado
completando
las
casillas
correspondientes.
Guardar datos del problema: El usuario puede guardar los datos del
problema, previamente introducidos, en un archivo de texto.
10
Interfaces de usuario:
La interfaz de usuario estar orientada a ventanas y se manejar
mediante teclado y ratn. La interfaz debe cumplir con los requisitos
accesibilidad y usabilidad.
Interfaces de comunicacin:
No son necesarias para la aplicacin.
11
pensado
para
el
uso
en
las
plataformas
Mac
Linux.
Memoria ram: 16 Mb
12
4. Descripcin
aplicacin
de
los
problemas
de
la
4.1 Mochila 01
Problema:
El problema de la mochila, vase [28] y [19], es un problema de optimizacin
combinatoria, es decir, que busca la mejor solucin posible entre un conjunto de
posibilidades.
Este es un problema que consiste en decidir de entre n objetos de pesos p1, p2,...,
pn y beneficios b1, b2,..., bn, cules hay que incluir en una mochila de capacidad c
sin superar dicha capacidad y de forma que se maximice la suma de los beneficios
de los elementos escogidos.
Primero debemos plantear el problema como una secuencia de decisiones que
verifique el principio ptimo. De aqu seremos capaces de deducir una expresin
recursiva de la solucin. Por ltimo habr que encontrar una estructura de datos
donde se almacenarn los clculos de los subproblemas.
Sea m(i,p) el valor del beneficio mximo de la mochila con capacidad p
considerando los n-i+1 ltimos objetos de los n totales, siendo 0 p c y 1 i
n. Entonces, podemos definir el problema de forma recurrente en funcin de si se
usa o no el objeto i-simo:
13
Por tanto, el valor que toma m(i,p) ser el mayor entre m(i+1,p), que indica que el
elemento i no se introduce, y m(i+1,p-pi) + bi, que es el resultado de introducirlo,
para cuando la capacidad p es mayor que pi. Si no se introduce el objeto i debido
a que tiene un peso pi p, entonces m(i,p) toma el valor de m(i+1,p).
Finalmente, en los casos base el beneficio es 0, para cuando i=n+1, es decir, no
se introducira ningn objeto.
La solucin del problema original sera m(1,c) y se necesitara una tabla con n+1
filas y c+1 columnas para almacenar cada una de las soluciones subptimas.
Ecuaciones:
m(n 1, p) 0
para 0 p c
si p pi
m(i 1, p)
m(i, p)
max( m(i 1, p), m(i 1, p pi ) bi ) si p pi
Donde:
n: es el nmero de objetos.
14
para 1 i n, 0 p c
Diagrama de actividad:
15
16
La solucin del problema original sera C(m,n) y se necesitara una tabla con m+1
filas y n+1 columnas para almacenar cada una de las soluciones subptimas.
Ecuaciones:
C (i,0) i
se borra x1 ,..., xi
C (0, j ) j
se inserta y1 ,..., y j
C (i, j 1) 1 se borra xi 1
C (i 1, j 1) min C (i 1, j ) 1 se inserta y j 1
C
(
i
,
j
)
1 si xi 1 y j 1 ( se sustituyexi 1 por y j 1 )
Donde:
17
Diagrama de actividad:
18
r (i,0) 0
r (i, j 1),
r (i, j ) max
para 1 i j
p(i) r (i j, i j )
Donde:
19
Diagrama de actividad:
20
21
Ecuaciones:
m(i, i) 0
m(i, j ) min(i k j )m(i, k ) m(k 1, j ) d (i 1)d (k )d ( j ) para 1 i j n
Donde:
Diagrama de actividad:
22
La solucin del problema original sera SCML(1,1) y se necesitara una tabla con
m+1 filas y n+1 columnas para almacenar cada una de las soluciones subptimas.
Ecuaciones:
SCML(m 1, j ) 0
SCML(i, n 1) 0
si xi y j
1 SCML(i 1, j 1)
SCML(i, j )
max{SCML(i 1, j ), SCML(i, j 1)} si no
23
Donde:
Diagrama de actividad:
24
5. Modelo de negocio
5.1 Diagrama de casos de uso
El diagrama de casos de uso representa la vista externa del comportamiento del
sistema desde el punto de vista del usuario.
25
Flujo de eventos
Camino bsico del caso de uso Obtener datos de entrada del problema
ACTOR
SISTEMA
2. Selecciona el problema
Caminos alternativos
Evento 4: El usuario introduce los datos de entrada desde fichero.
Evento 5: Los datos de entrada, por teclado o desde fichero, son errneos por
lo que confirma el error.
Flujo de eventos
Camino bsico del caso de uso Guardar datos de entrada
ACTOR
SISTEMA
2. Selecciona el problema
26
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Mochila 01) *
ACTOR
SISTEMA
Evento 4: El sistema detecta que es la ltima iteracin del algoritmo por lo que
muestra el beneficio ptimo final y los objetos introducidos en la mochila.
*Los pasos de 2-5 los puede ejecutar el usuario hasta llegar a la solucin final
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Alineamiento de secuencias) *
ACTOR
SISTEMA
Muestra
el
mnimo
de
subsecuencia X en la subsecuencia
Y para la iteracin realizada
Caminos alternativos
Evento 4: El sistema detecta que es la ltima iteracin del algoritmo por lo que
muestra el n mnimo de operaciones para convertir las secuencia X en la
secuencia Y, y las operaciones realizadas para llevar a cabo la conversin.
*Los pasos de 2-5 los puede ejecutar el usuario hasta llegar a la solucin final
27
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Cortar una vara) *
ACTOR
SISTEMA
1. Muestra el panel de ejecucin del
Caminos alternativos
Evento 4: El sistema detecta que es la ltima iteracin del algoritmo por lo que
muestra el valor del precio de la mejor particin posible para la vara
especificando en cuantos trozos se ha de partir la vara.
*Los pasos de 2-5 los puede ejecutar el usuario hasta llegar a la solucin final
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Multiplicacin de matrices) *
ACTOR
SISTEMA
Evento 4: El sistema detecta que es la ltima iteracin del algoritmo por lo que
muestra el mnimo n de productos y de qu manera se agrupan las matrices
para obtener dicho valor mnimo.
*Los pasos de 2-5 los puede ejecutar el usuario hasta llegar a la solucin final
28
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Subsecuencia comn ms larga) *
ACTOR
SISTEMA
Evento 4: El sistema detecta que es la ltima iteracin del algoritmo por lo que
muestra la subsecuencia comn ms larga.
*Los pasos de 2-5 los puede ejecutar el usuario hasta llegar a la solucin final
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia atrs
(para Mochila 01) *
ACTOR
SISTEMA
1. Ejecuta una iteracin hacia atrs del 2. Muestra los clculos de la penltima
algoritmo
iteracin
29
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia atrs
(para Alineamiento de secuencias) *
ACTOR
SISTEMA
1. Ejecuta una iteracin hacia atrs del 2. Muestra los clculos de la penltima
algoritmo
iteracin
3.
Muestra
el
mnimo
de
para
la
penltima
iteracin
realizada
Caminos alternativos
Evento 2: El sistema detecta que se ha llegado al estado inicial, por lo que
muestra el panel de ejecucin en su estado inicial.
*Los pasos de 1-4 los puede ejecutar el usuario hasta llegar al estado inicial
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia atrs
(para Cortar una vara) *
ACTOR
SISTEMA
1. Ejecuta una iteracin hacia atrs del 2. Muestra los clculos de la penltima
algoritmo
iteracin
Caminos alternativos
Evento 2: El sistema detecta que se ha llegado al estado inicial, por lo que
muestra el panel de ejecucin en su estado inicial.
*Los pasos de 1-4 los puede ejecutar el usuario hasta llegar al estado inicial
30
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia atrs
(para Multiplicacin de matrices) *
ACTOR
SISTEMA
1. Ejecuta una iteracin hacia atrs del 3. Muestra los clculos de la penltima
algoritmo
iteracin
Flujo de eventos
Camino bsico del caso de uso Ejecutar un paso hacia adelante
(para Subsecuencia comn ms larga) *
ACTOR
SISTEMA
1. Ejecuta una iteracin hacia atrs del 2. Muestra los clculos de la penltima
algoritmo
iteracin
Caminos alternativos
Evento 2: El sistema detecta que se ha llegado al estado inicial, por lo que
muestra el panel de ejecucin en su estado inicial.
*Los pasos de 1-4 los puede ejecutar el usuario hasta llegar al estado inicial
31
Flujo de eventos
Camino bsico del caso de uso Ir a la solucin final
(para Mochila 01)
ACTOR
SISTEMA
2. Muestra el beneficio ptimo final y
Flujo de eventos
Camino bsico del caso de uso Ir a la solucin final
(para Alineamiento de secuencias)
ACTOR
SISTEMA
2.
Muestra
el
operaciones
para
mnimo
convertir
de
las
Flujo de eventos
Camino bsico del caso de uso Ir a la solucin final
(para Cortar una vara)
ACTOR
SISTEMA
2. Muestra el valor del precio de la
mejor particin posible para la vara
32
Flujo de eventos
Camino bsico del caso de uso Ir a la solucin final
(para Multiplicacin de matrices)
ACTOR
SISTEMA
2. Muestra el mnimo n de productos
y de qu manera se agrupan las
Flujo de eventos
Camino bsico del caso de uso Ir a la solucin final
(para Subsecuencia comn ms larga)
ACTOR
SISTEMA
2. Muestra la subsecuencia comn
ms larga
Flujo de eventos
Camino bsico del caso de uso Ir al inicio
ACTOR
SISTEMA
2. Muestra el panel de ejecucin del
33
34
6. Diseo de la aplicacin
La aplicacin ha sido desarrollada bajo el lenguaje de programacin Java usando
la librera swing para el desarrollo de la interfaz grfica. La librera swing contiene
una serie de layouts, vase [6], [17] y [18], que nos servirn para distribuir los
elementos que componen la interfaz. De este modo organizaremos las reas de
textos, los botones, y las casillas de datos [22] a lo largo de la composicin de los
paneles.
El entorno de desarrollo empleado ha sido Netbeans.
35
36
37
38
40
41
esta
clase
engloba
el
clculo
del
algoritmo
esta
clase
engloba
el
clculo
del
algoritmo
Los
mtodos
mochila01_matriz(),
alineacin(),
cutrod_tab2(),
avanzar(): este mtodo se activa tanto para cuando el usuario hace click
en el botn de ir hacia adelante como para cuando hace click en el botn
de ir hacia atrs. Recibe como argumento un valor booleano de tal modo
que cuando dicho valor es verdadero entonces se realiza una animacin
de avance en el algoritmo, y cuando el valor el falso entonces sucede el
caso contrario, una animacin de retroceso en el algoritmo. Las
animaciones de avance y retroceso implican la llamada a otros mtodos
que permiten el repintado de las casillas de la tabla de resultados y la
visualizacin de las operaciones realizadas en la iteracin.
43
44
6.2.4 Fichero
La clase Fichero es la que se encarga de gestionar la interaccin con ficheros de
textos. Se encarga tanto de guardar los datos de un problema en un fichero de
texto como de cargarlos desde l. Tanto la lectura como la escritura de datos en
un fichero de texto se realiza mediante el procedimiento explicado en [23].
45
46
47
de Cargar datos y Guardar datos, y por otro lado en la parte derecha el icono
de Ayuda. Para conseguir el equilibrio visual, en la parte inferior izquierda aado
el dibujo del alumno mirando hacia las casillas de entrada, as evitamos la
sensacin de espacios vacos en la composicin, o de espacios ms poblados que
otros.
En general el diseo de los paneles de entrada es minimalista, limpio, ya que el
propsito es tener una aplicacin cuyo diseo busque la sencillez. De ah la
eleccin de los colores blanco (de fondo) y negro (de contenido), y uso de
tonalidad gris (para indicar por ejemplo las casillas no habilitadas). El color rojo
rompe intencionadamente con el diseo global ya que es un color usado para
destacar las casillas que no han sido correctamente completadas, es decir, el rojo
es usado a modo de alerta.
49
50
51
52
53
54
55
56
57
58
59
60
61
62
7.5 Tipografas
La tipografa usada, mediante el uso de las fuentes en Java [14], para los ttulos
de los paneles es Franklin Gothic Book ya que es un tipo de letra que se ve bien.
Respecto a la tipografa del contenido, se hace uso de la tipografa Verdana y
Tahoma, que son un tipo de letra estndar de gran legibilidad. Se ha buscado
una relacin de armona entre la tipografa de los ttulos y la del contenido de tal
manera que favorezca el diseo de la composicin.
63
64
Conclusiones
La herramienta apoya las principales caractersticas de la programacin dinmica
ya que permite visualizar la siguiente informacin:
Este trabajo me ha exigido tanto a nivel tcnico como a nivel artstico. He mejorado
mi capacidad de abstraccin, y tambin he puesto a prueba mi creatividad. El
desarrollo de esta herramienta me ha permitido adentrarme de manera ms
profunda en el mundo de las interfaces grficas de usuario, y al mismo tiempo he
ampliado mis conocimientos en Java. He puesto atencin a todos los detalles
grficos de la aplicacin, para que quedase todo bien definido, y esto me ayuda
para seguir en esta misma lnea en futuros trabajos. En general ha sido una
experiencia gratificante en la cual he podido mostrar mis mejores cualidades.
65
66
Bibliografa
[1] AlgoViz. Obtenido de http://www.algoviz.net/
[2] Alineamiento de secuencias. Obtenido de
http://es.wikipedia.org/wiki/Alineamiento_de_secuencias#Alineamiento_m
.C3.BAltiple_de_secuencias
[3] BlueJ. Obtenido de http://www.bluej.org/about.html
[4] Cambiar cono a un JFrame. Obtenido de
http://www.apuntesdejava.com/2008/11/cambiar-icono-un-jframe.html
[5] Colores para la interfaz. Obtenido de http://www.colourlovers.com/
[6] Cmo usar BoxLayout. Obtenido de
http://docs.oracle.com/javase/tutorial/uiswing/layout/box.html
[7] Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Clifford, S. (2001).
Introduction to algorithms (2nd ed.).
[8] Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Clifford, S. (2009).
Introduction to algorithms (3rd ed.).
[9] Cortar una vara (1). Obtenido de
http://www.radford.edu/~nokie/classes/360/dp-rod-cutting.html
[10] Cortar una vara (2). Obtenido de http://www.geeksforgeeks.org/dynamicprogramming-set-13-cutting-a-rod/
[11] Crear un fichero en Java. Obtenido de http://lineadecodigo.com/java/crearun-fichero-en-java/
[12] Cuadros de dilogo en Java. Obtenido de http://ayudajava.blogspot.com.es/2007/07/cmo-hacer-cuadros-de-dilogo-simples.html
[13] Debdi, O. (2014). Aprendizaje interactivo de algoritmos voraces: del enfoque
individual al colaborativo. Tesis doctoral.
[14] Fuentes en Java. Obtenido de
http://docs.oracle.com/javase/6/docs/api/java/awt/Font.html
[15] GraphsJ. Obtenido de http://gianlucacosta.info/software/graphsj/
[16] GreedEx. Obtenido de http://www.lite.etsii.urjc.es/greedex/
[17] GridLayout API. Obtenido de
http://download.java.net/jdk7/archive/b123/docs/api/java/awt/GridLayout.h
tml#GridLayout%28int,%20int,%20int,%20int%29
[18] GroupLayout API. Obtenido de
http://docs.oracle.com/javase/6/docs/api/javax/swing/GroupLayout.Group.
html
[19] Guerequeta, R. V. (2000). Tcnicas de diseo de algoritmos (2 ed.).
[20] Iconos para la interfaz. Obtenido de https://www.iconfinder.com/
67
68