Interfaz Gráfica de Usuario para el Problema de Corte

Anuncio
Interfaz Gráfica de Usuario para el Problema de Corte
Bidimensional: Una Aplicación al Traje Típico de las Islas
Canarias
Jesica de Armas, Coromoto Leon, Gara Miranda and Carlos Segura1
Universidad de La Laguna. Dpto. Estadística, I.O. y Computación.
Av. Astrofísico Fco. Sánchez, s/n, 38271 La Laguna, Spain
{jdearmas,cleon,gmiranda,csegura}@ull.es
http://nereida.deioc.ull
Resumen. Este artículo presenta una interfaz gráfica de usuario para la
resolución del problema de corte bidimendional. Es sistema está aplicado a la
industria textil, permitiendo la definición y manipulación de los patrones que
componen el traje tradicional de las Islas Canarias. A través de los menús, el
usuario ha de seleccionar la prenda que quiere confeccionar, la cantidad y las
tallas, así como la cantidad de material disponible. Partiendo de ello el sistema se
encarga de colocar los patrones. También se admite la elección de patrones
individuales. Internamente, el sistema implementa una variante del algoritmo de
Viswanathan y Bagchi para la resolución del problema de corte bidimensional.
La herramienta permite seguir la traza de todas las posibilidades que el algoritmo
ha descartado en la búsqueda de la solución que propone, que es calculada de
forma remota en un servidor dedicado. Dicha solución final podrá ser modificada
por el usuario arrastrando los patrones con el ratón hacia la posición de la tela
que desee. En la programación de la interfaz se ha utilizado el API Swing de Java
y en el algoritmo de resolución C/C++.
1 Introducción
El problema de corte bidimensional tiene multitud de aplicaciones en el campo de la
industria. Este tipo de problema surge cuando se dispone de una pieza grande de
material (vidrio, tela, plástico, madera, etc.) que se debe cortar en piezas más pequeñas.
Realizar los cortes de manera óptima es crucial, por lo que el problema de corte ha sido
ampliamente estudiado y se han desarrollado múltiples aproximaciones.
El problema de corte bidimensional (2-Dimensional Cutting Stock Problem - 2DCSP)
es una de las variaciones más interesantes de los problemas de corte. Para facilitar la
1
Este trabajo ha sido subvencionado con fondos FEDER y del Ministerio de Educación y
Ciencia dentro del 'Plan Nacional de I+D+i' (TIN2005-08818-c04-04). El trabajo de J. de
Armas se ha desarrollado con una beca CajaCanarias-Universidad de La Laguna y el de G.
Miranda con la beca FPU-AP2004-2290.
IX Congreso Internacional Interacción, Albacete 9-11 de Junio de 2008
Grupo LoUISE-Universidad de Castilla-La Mancha
424 J. de Armas, C. Leon, G. Miranda, C. Segura
visualización de las soluciones aportadas por el 2DCSP se ha desarrollado una interfaz
gráfica de usuario adaptada a la industria textil.
Figura. 4.Interacción entre el usuario y el sistema resolutor.
Se han propuesto diversos algoritmos [1][2][3][4][5] para la resolución del problema
de corte. Sin embargo, las herramientas que los implementan suelen proporcionar la
solución en formato de texto. Lo ideal sería contar con una representación gráfica de la
misma de forma que se pueda visualizar la disposición final de las piezas [6]. En este
trabajo, el sistema implementa una variante del algoritmo de Viswanathan y Bagchi [1]
y representa la solución de forma gráfica (Figura 1). Además, proporciona la
posibilidad de seguir la traza de todas las posibilidades que el algoritmo ha descartado
en la búsqueda de la solución final. Dicha solución final podrá ser modificada por el
usuario arrastrando los patrones con el ratón hacia la posición de la tela que desee. En
la programación de la interfaz se ha utilizado el API Swing de Java y en el algoritmo
de resolución C/C++.
Concretamente se ha implementado una interfaz de usuario para un sistema
informático que resuelve el problema de corte de las piezas del traje regional de mujer
de la Orotava, localidad de la isla Canaria de Tenerife. El usuario ha de elegir de entre
el conjunto de opciones disponibles las prendas en las que está interesado (falda,
chaleco, camisa, etc.), la talla de las mismas y las dimensiones del material sobre el que
se desea distribuir los patrones. Todo el trabajo de distribución de los patrones se
realiza automáticamente, esto es, la herramienta lo que permite es simular en el
ordenador el trabajo antes de llevarlo a cabo manualmente.
Como ejemplo se considerará el Chaleco del traje típico de la Orotava (Figura).
Cada chaleco está compuesto de varios patrones de tela roja: dos hojas delanteras
(Figura 3-a), dos asillas (Figura 3-b) y un patrón trasero que consta de una sola pieza
(Figura 3-c). Para simplificar el problema, se puede aproximar cada una de las
plantillas anteriores necesarias para elaborar un chaleco, por un patrón rectangular. De
(a) Parte delantera del chaleco
(b) Parte trasera del chaleco
Figura 2. Chaleco del traje típico de la Orotava
Interfaz gráfica de usuario para el problema de corte bidimensional
(a) Patrón delantero
(b) Asillas
425
(c) Patrón trasero
Figura 3. Aproximación de los patrones del chaleco
esta forma, se ahorran muchos cálculos (ya que, manejar piezas irregulares es mucho
más complejo) y el desperdicio introducido por ello es casi inapreciable. Hay que tener
en cuenta que para cada uno de los chalecos a confeccionar se debe distribuir sobre la
tela los cuatro patrones que lo conforman (dos hojas delanteras, dos asillas y una parte
trasera). Así pues, el problema consiste en distribuir un número determinado de piezas
sobre la tela, de forma que el desperdicio obtenido de dicha tela sea el mínimo posible.
Se trata de un proyecto innovador, puesto que en el campo académico y utilizando
Java no se han encontrado programas de este tipo. El software al que se puede acceder
normalmente es propietario y comercial. Dentro el ámbito académico se han podido
consultar diversos programas, y ninguno de ellos cumple con las cualidades de este.
Por ejemplo, el marco de clases [7] desarrollado en Java resuelve el problema de corte
para una sola dimensión, mientras que en este trabajo se resuelve para dos dimensiones.
En [8] se explica el funcionamiento de una interfaz para la resolución del problema de
corte bidimensional de guillotina, pero se ha desarrollado en Visual Basic y Prolog, con
los consecuentes inconvenientes de este software propietario. Finalmente, en [9] se
pueden resolver on-line ejemplos de corte bidimensional de guillotina mediante una
aplicación de la que no se especifica el lenguaje de desarrollo. Aunque ofrece un
resultado en formato de texto y gráfico, para la recogida de datos es necesario construir
y enviar un archivo usando un editor que hay que descargar, con lo que se vuelve
menos cómodo e intuitivo el proceso. Además no permite seguir la traza para la
construcción de la solución.
El resto del artículo se organiza de la siguiente forma: En la sección 2 se describe
formalmente el problema de corte bidimensional. La descripción del entorno de trabajo
se realiza en la sección 3. La sección 4 se dedica a los detalles de implementación.
Finalmente se presentan las conclusiones y los trabajos futuros.
2 El problema de corte bidimensional
El 2DCSP es una de las variantes más interesantes del problema de corte.Su
definición formal es la siguiente: Considere que se dispone de una superficie S de
tamaño L x A de un material determinado (Figura 4). Se cuenta además con un conjunto
de n patrones distintos, cada uno de dimensiones li x ai y con un beneficio
426 J. de Armas, C. Leon, G. Miranda, C. Segura
Figura 4. Elementos del Problema de Corte Bidimensional
asociado ci. Sean bi el número de piezas del tipo i disponibles y xi el número de piezas
del tipo i empleadas. El problema consiste en encontrar la distribución del conjunto de
patrones sobre la superficie S que haga que el beneficio obtenido sea máximo y el
desperdicio de material sea mínimo, esto es:
Maximizar ™n i=1 cixi sujeto a {R}
donde R es un conjunto de restricciones específicas. Según la definición de este
conjunto de restricciones se tendrá un tipo de problema de corte particular. En el caso
que nos ocupa, se trabajará con el denominado problema de corte guillotina, en el que
todos los cortes son ortogonales a uno de los ejes.
El sistema de resolución automática está implementado en C y C++.Se cuenta con
implementaciones secuenciales y paralelas. Para utilizar estas últimas es necesario
tener acceso al hardware adecuado, por ello se ha optado por proporcionar un servicio
remoto. El algoritmo de resolución está basado en el de Viswanathan y Bagchi [1] (que
usa una búsqueda primero-el-mejor) e incluye mejoras en el cálculo de las cotas [11].
Para este algoritmo cualquier solución se puede obtener como la combinación de
distintas disposiciones de piezas tanto en horizontal como en vertical. Una disposición
horizontal de dos rectángulos T1 y T2 de dimensiones x1 x y1 y x2 x y2 es un rectángulo
de dimensiones (x1 + x2) x máx{y1, y2}. Por otro lado, una disposición vertical de los
mismos rectángulos es un rectángulo de dimensiones máx{y1, y2} x (x1 + x2) (Figura5).
Figura 5. Construcción Vertical y Horizontal
Interfaz gráfica de usuario para el problema de corte bidimensional
427
Figura 6. Ejemplos de construcciones Verticales y Horizontales
En la Figura 6 se muestran algunos ejemplos, nótese que las áreas sombreadas
representan desperdicio. Las soluciones factibles se representan mediante la fórmula
(T2|T3)|(T1-T2), o incluso mejor, se utiliza la notación postfija para eliminar la
necesidad de los paréntesis y obtener una representación más compacta de la misma: T2
T3 | T1 T2 - |. Esta última notación es la que utiliza el sistema de resolución para
devolver la solución y para realizar la representación gráfica.
3 Interfaz gráfica de usuario
La interfaz de usuario se muestra en la Figura 7. El entorno cuenta con una barra de
menús en la parte superior, una barra de botones de acceso directo y una zona principal
constituida por dos pestañas: Datos de Entrada y Datos de Salida.
Datos de Entrada: es la pestaña activa por defecto y en ella se especifican los
datos de entrada del problema a resolver (Figura 7-a). Los datos que se han de
definir en esta pestaña son los relativos al tipo de material (tela), las prendas o
patrones y la ejecución. En cuanto a la tela, el usuario podrá escoger entre
Fieltro Rojo, Fieltro Verde, Tela Blanca y Tela a Rayas. Además, se ha de fijar
el alto y ancho del material elegido. En función del tipo de material elegido se
habilitará un grupo de prendas y patrones que se pueden confeccionar con él.
Para cada prenda se ha de especificar la talla (pequeña, mediana, grande o extragrande) y cantidad que se necesita. Para que el conjunto de patrones que
conforman la prenda escogida se almacene en la Tabla de patrones es necesario
SXOVDU HO ERWyQ µ,QWURGXFLU¶ de la sección. De igual manera, si se desean
introducir patrones individuales en lugar de prendas completas, se podrán
seleccionar indicando su alto, ancho, cantidad y beneficio. Por último, en la
]RQDGHµ(MHFXFLyQ¶ se definen las opciones con las que el sistema
428 J. de Armas, C. Leon, G. Miranda, C. Segura
(a) Pestaña de datos de entrada
(b) Pestaña de datos de salida
Figura 7.Interfaz gráfica de usuario
resolverá el problema especificado. Se ha de asignar un nombre a la instancia
del SUREOHPD HQ HO FDPSR GH WH[WR µ$UFKLYR GH HQWUDGD¶. Además el usuario
puede escoger si desea que se muestre la traza de todas las posibilidades que el
algoritmo ha descartado en la búsqueda de la solución, seleccionando la casilla
µ7UD]D¶. Para obtener la VROXFLyQVHKDGHSXOVDUHOERWyQµ(MHFXWDU¶ o acceder a
HVWDRSFLyQDWUDYpVGHOPHQ~µ+HUUDPLHQWDV¶.
Datos de Salida: en esta pestaña se le presenta al usuario la disposición de los
patrones propuesta por el sistema (Figura7-b). Se puede comprobar el estado en
que se encuentra la ejecución. Una vez el sistema haya terminado de resolver el
pUREOHPD VH KDELOLWDUi HO ERWyQ µVer SolXFLyQ¶. Cuando el usuario lo pulse se
presentará la solución en la zona de la izquierda.
La BaUUD GH PHQ~V FRQVWD GH XQ PHQ~ µArchivo', que proporciona las opciones
relativas a la carga y almacenamiento de archivos con los datos de entrada a un
problema. (OPHQ~µ(GLWDU¶ proporciona las opciones de cortar, copiar y pegar distinto
tipo de información y modificación de los beneficios asociados por defecto a cada
Interfaz gráfica de usuario para el problema de corte bidimensional
429
prenda y talla. (O PHQ~ µ+HUUDPLHQWDV¶ posibilita la ejecución de un problema y
visualización de la solución, así como la manipulación de la información que se agrega
en la tabla de patrones. (OPHQ~µ$\XGD¶ permite desplegar información acerca del uso
del entorno gráfico.
Se dispone ademáV GH XQ ERWyQ µ(MHFXWDU¶ HQ OD µBarra de AcFHVR 'LUHFWR¶ que
permite obWHQHU OD VROXFLyQ DO SUREOHPD XQ ERWyQ µ/LPSLDU 7DEOD¶ que permite
eliminar el contenido de la tabla de patrones y un bRWyQµ(OLPLQDU)LODV¶ con el que se
eliminan las filas de la tabla de patrones que se encuentren seleccionadas.
4 Detalles de la implementación
Cuando el usuario ha especificado el problema a resolver y pulsa el botón de
ejecución, se comprueba si ya se dispone del archivo de la solución en el directorio
correspondiente a los ejemplos. Si es la primera vez que se ejecuta la instancia es
necesario invocar al servicio remoto para obtener la solución. Este servicio se
encuentra implementado como un servlet que se encarga de recibir el archivo con la
información del problema e invocar al algoritmo de resolución. Para la transmisión de
los datos de entrada a dicho servlet se ha utilizado la clase
MultiPartFormOutputStream. El hilo correspondiente queda a la espera de obtener la
solución, que será almacenada en otro archivo. El archivo de salida sigue una sintaxis
específica que permite representar la traza de todas las posibilidades que el algoritmo
ha descartado o directamente la solución final. La notación utilizada [10] para
representar la solución permite definir la forma en la que hay que colocar los patrones
para obtener la representación gráfica de la misma. Haciendo uso de ella y de la
información asociada a cada uno de los patrones, se crea una pila de objetos (Figura 8).
Esta pila representa el dibujo de uno o varios patrones distribuidos vertical u
horizontalmente. Cuando la solución está analizada completamente, en la cima de la
pila se encontrará el objeto con el GeneralPath correspondiente a la distribución final
de los patrones [12]. Cada patrón consta de un conjunto de líneas y arcos en unas
disposiciones concretas, que se van concatenando hasta obtener la forma completa. El
objeto final de tipo ClaseGraficoPatrones se añade a la lista de patrones, se le agrega
su índice en la lista y se inserta en la pila. Los dos objetos de la pila situados en la cima
serán los que se concatenen vertical u horizontalmente según indique la notación de la
solución y el resultado se insertará a su vez en la cima de la pila.
En la Figura 9 se muestra el código correspondiente a la distribución horizontal de
objetos. La vertical es similar. Como se puede observar, se extraen los dos objetos que
se encuentran en la cima de la pila y mediante una transformación afín
(AffineTransform) se desplaza la posición de los atributos de tipo GeneralPath del
primero de ellos para finalmente concatenárselos a los correspondientes atributos del
segundo objeto. Para realizar una concatenación en horizontal es necesario desplazar
430 J. de Armas, C. Leon, G. Miranda, C. Segura
Figura 8. Ejemplo de funcionamiento de la pila
la posición en el eje x de un patrón tanto como indique el atributo posX del objeto con
el que se desea concatenar, mientras que en el eje y se dejará como estaba
originalmente. En cambio, para realizar una concatenación en vertical la posición en el
eje x no se cambia y para el eje y se hace uso del atributo posY del objeto con el que se
desea concatenar. Para finalizar se han de actualizar correctamente los nuevos atributos
posX y posY del objeto correspondiente a la concatenación e introducirlo en la cima de
la pila.
Una vez que el sistema ha realizado la propuesta de disposición de patrones sobre la
tela, el usuario podrá modificarla arrastrando los patrones con el ratón. Para hacer esto
posible se ha creado la clase ListaPatrones. Dicha clase consta de un atributo de tipo
java.util.Vector y un conjunto de métodos para manejarlo. Se trata de una lista
formada por el conjunto de patrones que el usuario ha seleccionado para colocar sobre
la tela. Cada elemento de la lista será del tipo ClaseGraficoPatrones que contendrá los
dibujos (GeneralPath) de dichos patrones en las posiciones que les corresponda. La
clase ListaPatrones posee además un método que, dado un punto y una lista de
patrones, devuelve el primer patrón que contiene el punto. La clase AreaCorte dispone
de código donde se determina el patrón que se está intentando desplazar, se mueve a la
nueva posición mediante una transformación afín y se actualiza el dibujo. En el código
mostrado en la Figura 9 se observa que a la hora de realizar una concatenación en
horizontal o vertical, se obtiene el listado de patrones de los que consta la composición
que se ha llevado hasta el momento y se desplaza cada uno de ellos a la posición
correspondiente. El atributo indicesListaP de la clase ClaseGraficoPatrones es el que
se utiliza para almacenar los índices de los patrones que conforman un gráfico. Esto es
necesario para poder disponer de la localización de cada patrón cuando se desea
realizar un desplazamiento con el ratón. Si el usuario desea volver a ver la propuesta de
disposición de patrones que realiza el sistema, ha de volver a pulsar los botones de
ejecución y visualización.
int indice;
ClaseGraficoPatrones gr1 = (ClaseGraficoPatrones) SolStack.pop();
ClaseGraficoPatrones gr2 = (ClaseGraficoPatrones) SolStack.pop();
GeneralPath p1 = gr1.getPath();
GeneralPath pbg1 = gr1.getPathbg();
Interfaz gráfica de usuario para el problema de corte bidimensional
431
if (!ficticia) {
AffineTransform af = new AffineTransform();
af.translate(gr2.getPosX(), 0);
for (int i = 0; i < gr1.getSizeVector(); i++) {
indice = (Integer) gr1.getIndice(i);
ClaseGraficoPatrones gr3 =
(ClaseGraficoPatrones)listaP.getObj(indice);
gr3.getPath().transform(af);
gr3.getPathbg().transform(af);
listaP.insertObjAt(gr3,indice);
gr2.insertIndice(indice);
}
gr2.addShape(p1);
gr2.addShapebg(pbg1);
}
ficticia = false;
// Actualizar posicion posX y posY
gr2.setPosX(gr2.getPosX() + gr1.getPosX());
int altura = gr1.getPosY();
if (altura < gr2.getPosY())
gr2.setPosY(altura);
SolStack.push(gr2);
Figura 9. Concatenación horizontal
5 Conclusiones
Se ha presentado una interfaz gráfica de usuario que permite la definición y
manipulación de los patrones que componen el traje regional de la Villa de la Orotava
en las Islas Canarias. La herramienta proporciona de forma automática una disposición
visual de los patrones de las prendas elegidas sobre el material seleccionado, haciendo
uso de la solución en formato de texto que propone el sistema de resolución. De este
modo se consigue que el desperdicio de tela sea inferior al que produciría una persona
especializada en la correspondiente etapa de producción (en este caso textil), con el
consecuente ahorro de personal y tiempo empleado en estas labores.
Actualmente se está profundizando en una mejora de la representación de la
solución. Asimismo, se pretende trabajar en las implementaciones paralelas del
algoritmo de resolución para que se pueda escoger entre llevar a cabo una invocación
de estas versiones en OpenMP y MPI, y la versión secuencial.
Referencias
1. Viswanathan, K. V. , Bagchi, A. (1993). Best-First Search Methods for Constrained TwoDimensional Cutting Stock Problems. Operations Research, vol.41, n.4, p.768--776.
2. Hifi, M. (1997). An Improvement of Viswanathan and Bagchi's Exact Algorithm for
Constrained Two-Dimensional Cutting Stock. Computer Operations Research, vol.24, n.8,
p.727--736.
432 J. de Armas, C. Leon, G. Miranda, C. Segura
3. Wang, P. Y. (1983). Two Algorithms for Constrained Two-Dimensional Cutting Stock
Problems. Operations Research, vol.31, n.3, p.573--586.
4. Burke, E., Kendall, G. (1999). Applying Simulated Annealing and the No Fit Polygon to the
Nesting Problem. Proceedings of the International Conference on Artificial Intelligence (ICAI'99), vol.1, p.51--57.
5. Maouche, S., Bounsaythip, C. (1996). Optimizing Textile Shape Placement by Tree Genetic
Annealing}.Proceedings of the Society for Computer Simulation Conference (SCSC'96).
6. Shneiderman, B., Plaisant, C. (2006). Diseño de Interfaces de Usuario. Estrategias para una
Interacción Persona-Computador Efectiva. Pearson Education.
7. BEA WebLogic Catalog. http://www.componentsource.com/beasv/products/it-componentfactory-guillo\-tine-cutting-stock-problem-solver/summary.html
8. Mc Hale, M. L., Shah, R. P. http://www.amzi.com/articles/papercutter.htm
9. Guillotina/GPC. http://optimos1.diinf.usach.cl/guillotina/index.php
10. León, C.; Miranda, G.; Rodríguez, C. and Segura, C.} (2007) 2D Cutting Stock Problem: A
New Parallel Algorithm and Bounds. In Proceedings of the Euro-Par 2007, Parallel
Processing, 13th International Euro-Par Conference, LNCS 4641, p.795²804.
11. Miranda, G. , León, C. (2005). Búsquedas A*: Un Esqueleto Paralelo. In Actas de las XVI
Jornadas de Paralelismo, Granada. Thompson p.503²510.
12. Horstmann, C., Cornell, G.(2002). JAVA 2. Características Avanzadas. Prentice Hall.
Descargar