Post on 03-Apr-2020
UNIVERSIDAD TECNOLÓGICA DE PEREIRA
SOLUCIÓN DEL PROBLEMA DE EMPAQUETAMIENTO ÓPTIMO BIDIMENSIONAL
PROGRAMA DE INGENIERÍA INDUSTRIAL MAESTRÍA EN INVESTIGACIÓN DE OPERACIONES Y
ESTADÍSTICA
Por:ELIANA MIRLEDY TORO OCAMPO
ALEJANDRO GARCÉS RUIZ Director
Tesis presentada como requisito para optar al título de Magíster en Investigación de Operaciones y Estadística
Pereira, Diciembre 14 de 2007
SOLUCIÓN DEL PROBLEMA DE EMPAQUETAMIENTO ÓPTIMO BIDIMENSIONAL
ELIANA MIRLEDY TORO OCAMPO
Diciembre de 2007
A Dios y la Virgen María por sus bendiciones diarias; a mi esposo Ramón Alfonso, a mis hijos Daniela, Alfonso, Miguel y a mis padres Hernán y Amparo por su constante apoyo y acompañamiento.
Agradecimientos
A Dios y la Virgen María por sus bendiciones diarias. Al PhD. Ramón Alfonso Gallego R. por su orientación académica y voces de
aliento durante el desarrollo de todo este proyecto. Al MSc Mauricio Granada E. por su asesoría en el inicio del proyecto. A mi orientador de tesis MSc Alejandro Garcés R. por sus consejos
académicos, oportunas orientaciones e incondicional apoyo en esta y en muchas de las tareas que he emprendido.
Al profesor PhD. Rubén Romero Lázaro de la UNESP (Brasil) por la propuesta de desarrollar este tema.
A los MSc(C) Augusto César Rueda Medina y MSc(C) Hugo Andrés Ruiz Flórez por sus valiosas ideas, aportes, acompañamiento y colaboración en tantas horas de trabajo.
A MSc John Fredy Franco Baquero por su colaboración en la edición del documento final.
A mis compañeros de Maestría, especialmente por su calidad humana. A la Universidad Tecnológica de Pereira y la Facultad de Ingeniería
Industrial que hizo posible la realización de mis estudios. A los profesores del programa de Maestría en Investigación de Operaciones
y Estadística de la Universidad Tecnológica de Pereira. Al grupo de Investigación Operacional de la Maestría en Ingeniería Eléctrica
por proporcionar los medios necesarios para la ejecución del proyecto.
Nota de Aceptación
PhD. José Adalberto Soto Mejía
Msc.Juan Fernando López Rendón
Pereira, Diciembre 14 de 2007
Resumen
Por empaquetamiento de rectángulos se entiende una clase de problemas de corte y empaquetado con variadas aplicaciones en la Industria. Uno de los problemas más conocidos de esta clase es el de empaquetado rectangular bi-dimensional tipo guillotina cuyo propósito es obtener una configuración que maximice el área utilizada. Dada su dificultad y su gran aplicabilidad, existe un creciente interés en disponer de procedimientos eficaces y eficientes para resolver este problema. En este trabajo, se hace un recorrido por el estado del arte tanto en el planteamiento del modelo matemático, la codificación del problema y las técnicas de solución. Se presentan tres modelos matemáticos implementados de acuerdo a igual número de codificaciones propuestas adaptadas al algoritmo genético modificado de Chu-Beasley, algoritmo de Búsqueda tabú y un algoritmo híbrido de búsqueda en vecindario variable, recocido simulado y técnicas constructivas. Se comparan las respuestas obtenidas con base a la función objetivo y el porcentaje de uso del área disponible sobre diferentes casos de prueba de la literatura especializada.
Abstract
Packing of rectangles is a class of problems about packing and cutting with varied industrial application. One of the most known problems of this class is the rectangular two dimensional guillotine cutting packing problem whose objective is to obtain a configuration that maximizes the used area. Due to its difficulty and its great applicability, there is an increasing interest in develop effective and efficient procedures which solve this problem. This work studies the state of the art about mathematical model, codification and solution techniques. Three mathematical models are showed with equal number of proposed codifications which have been adapted according to Chu-Beasley’s genetic algorithm, Tabu search and a hybrid algorithm based on neighborhood variable search, simulated annealing and constructive techniques. The obtained answers are compared base on the objective function and perceptual used area by different test cases from technical literature.
1
TABLA DE CONTENIDO
1. INTRODUCCIÓN ............................................................................................ 91.1. Planteamiento del problema.................................................................. 111.2. Delimitación........................................................................................... 111.3. Objetivos ............................................................................................... 11
1.3.1. Objetivo general ......................................................................... 111.3.2. Objetivos específicos.................................................................. 11
1.4. Justificación........................................................................................... 121.5. Marco referencial................................................................................... 12
1.5.1. Antecedentes.............................................................................. 121.5.2. Marco Conceptual ...................................................................... 151.5.3. Marco Teórico............................................................................. 16
1.6. Diseño metodológico............................................................................. 17
2. PROBLEMAS DE CORTE Y EMPAQUETAMIENTO.................................... 182.1. Generalidades....................................................................................... 182.2. Aplicaciones en la industria................................................................... 212.3. Introducción Histórica............................................................................ 222.4. Unificación de la nomenclatura ............................................................. 222.5. Problemas de corte bidimensional ........................................................ 242.6. Extensión a Polígonos........................................................................... 262.7. Aproximaciones al problema de corte bidimensional ............................ 28
3. MODELOS MATEMÁTICOS DE LOS PROBLEMAS DE CORTE Y EMPAQUETAMIENTO.................................................................................. 293.1. Generalidades....................................................................................... 293.2. Modelo matemático del problema de empaquetamiento rectangular
(3-Dimensional) ..................................................................................... 293.3. Modelo matemático del problema de empaquetamiento cilíndrico.
(3-Dimensional) ..................................................................................... 333.4. Modelo matemático del problema bidimensional propuesto por
Gilmore y Gomory ................................................................................. 353.5. Modelos de programación lineal entera (PLE) para
empaquetamiento de niveles bidimensionales propuesto por Lodi ....... 363.6. Modelo del problema restringido y doblemente restringido bi-
dimensional propuesto por Parreño. ..................................................... 373.7. Problema de empaquetamiento cuando sólo es conocido el ancho
del tablero ó Strip packing problem. ...................................................... 393.8. Modelo Matemático Propuesto - Problema restringido
bidimensional tipo guillotina .................................................................. 413.8.1. Propuesta 1 ................................................................................ 413.8.2. Propuesta 2 ................................................................................ 423.8.3. Propuesta 3 ................................................................................ 43
4. HEURISTICAS CONSTRUCTIVAS y CODIFICACION................................. 47
2
4.1. Explosión Combinatorial........................................................................ 474.1.1. El problema: Explosión combinatoria ......................................... 474.1.2. Problemas que requieren satisfacción de restricciones.............. 474.1.3. Generar y probar ........................................................................ 484.1.4. Interpolación de la generación y de la comprobación................. 49
4.2. Heurísticas en optimización combinatorial. ........................................... 494.3. Heurísticas Constructivas aplicadas a la solución del problema de
corte de piezas bidimensional. .............................................................. 514.3.1. Métodos Constructivos para corte no guillotina .......................... 524.3.2. Métodos Constructivos para corte guillotina ............................... 54
4.4. Codificación para problemas de corte bidimensional ............................ 604.4.1. Codificación por permutaciones para corte no guillotina propuesta
por Jakobs .................................................................................. 614.4.2. Propuesta 1: Codificación a través de dos vectores para corte
guillotina ..................................................................................... 624.4.3. Propuesta 2: Codificación en diagrama de árbol para corte
guillotina. .................................................................................... 644.4.4. Propuesta 3: Codificación en diagrama de árbol para corte
guillotina. .................................................................................... 724.4.5. Codificación Rectilinear propuesta por Chen, Fu, y Rodrigues .. 75
5. MÉTODOS DE SOLUCIÓN........................................................................... 785.1. Algoritmo genético................................................................................. 78
5.1.1. Un algoritmo Genético simple..................................................... 805.1.2. El problema de la codificación .................................................... 825.1.3. Cálculo de la función objetivo o algún equivalente ..................... 835.1.4. Selección .................................................................................... 845.1.5. Recombinación (Crossover) ....................................................... 865.1.6. Mutación..................................................................................... 885.1.7. Ciclo Generacional ..................................................................... 885.1.8. Criterio de Parada ...................................................................... 885.1.9. Algoritmo Genético modificado – Chu-Beasley .......................... 89
5.2. Implementación del algoritmo genético al problema de empaquetamiento bidimensional restricto tipo guillotina ....................... 90
5.3. Búsqueda Tabú..................................................................................... 925.3.1. Definición.................................................................................... 925.3.2. Configuración Inicial ................................................................... 945.3.3. Generación del vecindario .......................................................... 945.3.4. Implementación de listas tabú .................................................... 955.3.5. Selección del mejor vecino ......................................................... 955.3.6. Duración Tabú ............................................................................ 965.3.7. Criterio de Aspiración ................................................................. 965.3.8. Actualización de la estructura tabú............................................. 975.3.9. Memoria de corto plazo .............................................................. 975.3.10. Memoria de largo plazo .............................................................. 975.3.11. Oscilación estratégica ................................................................ 985.3.12. Encadenamiento de trayectorias ................................................ 99
3
5.4. Definición de criterios de vecindad aplicados a la solución del problema de empaque bidimensional restricto tipo guillotina .............. 100
5.4.1. Primer criterio ........................................................................... 1005.4.2. Segundo criterio ....................................................................... 1015.4.3. Tercer criterio. .......................................................................... 1015.4.4. Cuarto criterio: .......................................................................... 1025.4.5. Quinto criterio: .......................................................................... 1025.4.6. Sexto criterio:............................................................................ 1035.4.7. Cálculo de la función objetivo ................................................... 104
5.5. Recocido simulado .............................................................................. 1065.5.1. Temperatura. ............................................................................ 1085.5.2. Longitud de la cadena. ............................................................. 1085.5.3. Criterio de parada..................................................................... 1095.5.4. Generación de una nueva configuración. ................................. 1095.5.5. Adaptación al tipo de problema ................................................ 109
5.6. Búsqueda de entorno variable ............................................................ 1105.6.1. Esquemas fundamentales ........................................................ 1105.6.2. VNS Descendente (VND) ......................................................... 1115.6.3. VNS Reducida (RVNS)............................................................. 1125.6.4. VNS Básica (BVNS) ................................................................. 1135.6.5. VNS General ............................................................................ 114
5.7. Adaptación de las técnicas de Recocido simulado y Búsqueda en vecindario variable a la solución del problema de empaquetamientobidimensional restricto tipo guillotina................................................... 114
5.7.1. Algoritmo de búsqueda aleatoria binaria .................................. 1155.7.2. Algoritmo de búsqueda aleatoria real ....................................... 1165.7.3. Algoritmo constructivo .............................................................. 117
6. PRUEBAS Y RESULTADOS OBTENIDOS................................................. 1196.1. Solución mediante el algoritmo genético modificado de Chu-
Beasley 1196.2. Solución mediante el algoritmo Tabú .................................................. 122
6.2.1. Caso 6.1 ................................................................................... 1226.2.2. Caso 6.2 ................................................................................... 1266.2.3. Caso 6.3 ................................................................................... 1276.2.4. Caso 6.4 ................................................................................... 128
6.3. Solución usando un algoritmo híbrido constructivo de búsqueda en vecindad variable y recocido simulado................................................ 132
7. Conclusiones y recomendaciones............................................................... 141
8. Bibliografía .................................................................................................. 144
9. ANEXOS ..................................................................................................... 1499.1. CUI Yadoing . An exact algorithm for generating homogenous T-
shape cutting patterns. Computers & Operations Research. 2007, 34(4): 1107-1120................................................................................. 149
4
9.2. Algunos Casos de prueba de la referencia [11] .................................. 1509.3. Implementación y desarrollo de los programas de computador. ......... 153
9.3.1. Usando Búsqueda Tabú........................................................... 1539.3.2. Usando el algoritmo híbrido...................................................... 174
9.4. Problema de empaquetamiento rectangular bidimensional tipo guillotina resuelto por algoritmos genéticos ........................................ 177
9.5. Algoritmo de búsqueda tabú aplicado a la solución del problema de corte bidimensional guillotinado .......................................................... 178
9.6. Efecto de la configuración inicial en la solución del problema de corte bidimensional usando el algoritmo búsqueda tabú..................... 179
9.7. Solución al problema de empaquetamiento bidimensional usando un algoritmo híbrido constructivo de búsqueda en vecindad variable y recocido simulado............................................................................. 180
5
LISTA DE FIGURAS
Figura 2.1. Problema de empaquetamiento en contenedores rectangulares .....19Figura 2.2. Problema de empaquetamiento en contenedores cilíndricos...........19Figura 2.3. Problema del Palet reducido a dos dimensiones .............................20Figura 2.4. Tipos de Cortes................................................................................25Figura 2.5. Tipos de patrones ............................................................................25Figura 2.6. Empaquetamiento de un polígono en un rectángulo con mínima
área. .................................................................................................26Figura 2.7. Respuesta obtenida con algoritmo BL. Altura =22 ...........................27Figura 2.8. Respuesta obtenida con algoritmo genético (1000 iteraciones).
Altura=15..........................................................................................27Figura 3.1. Definición de las variables para el problema de carga de un
contenedor .......................................................................................30Figura 3.2. Sistema Cartesiano del contenedor cilíndrico ..................................34Figura 3.3. a) Nivel de empaquetamiento; b) Nivel normalizado del
empaquetamiento. ...........................................................................37Figura 3.4. Problema restringido y doblemente restringido ................................39Figura 3.5. Solución para un problema restringido.............................................40Figura 3.6. Solución para un Ítem. .....................................................................41Figura 3.7. (a) Corte guillotina, (b) Corte no guillotina........................................43Figura 3.8. Generación de subespacios.............................................................44Figura 4.1. Representación del espacio de soluciones. .....................................48Figura 4.2. Estrategias BL y BF..........................................................................53Figura 4.3. Algoritmos Constructivos..................................................................54Figura 4.4. Ubicación de la primera pieza ..........................................................56Figura 4.5. Pieza contigua a 1 con menor desperdicio.......................................56Figura 4.6. A partir de la primera pieza la próxima a ser escogida es la
pieza 8..............................................................................................57Figura 4.7. Pieza contigua a 8 con menor desperdicio.......................................57Figura 4.8. A partir de la pieza 8 la próxima elegida por la evaluación es la
6 57Figura 4.9. Ubicación de las piezas....................................................................58Figura 4.10. Matriz de desperdicios .....................................................................58Figura 4.11. BL modificado para corte guillotina ..................................................59Figura 4.12. Representación natural de un patrón de empaquetamiento.............60Figura 4.13. Dos permutaciones con el mismo patrón de empaquetamiento.......61Figura 4.14. Alternativa de solución ..................................................................62Figura 4.15. Representación de una alternativa de solución................................63Figura 4.16. Árbol de 2 piezas y codificación .......................................................64Figura 4.17. Árbol de 4 piezas y codificación .......................................................65Figura 4.18. Representación de un cluster...........................................................65Figura 4.19. Árbol de 8 piezas y codificación .......................................................66Figura 4.20. Explicación de los tipos de corte ......................................................66Figura 4.21. Clusters formados por corte vertical.................................................67Figura 4.22. Clusters formados por corte horizontal.............................................67Figura 4.23. Codificación de una posible configuración .......................................68
6
Figura 4.24. Gráfico de la configuración propuesta en la figura .4.23 ..................69Figura 4.25. Árbol asociado al ejemplo 4.23 ........................................................70Figura 4.26. Árbol de cortes .................................................................................74Figura 4.27. Cortes sobre el tablero según el árbol de corte propuesto en
4.26 ..................................................................................................74Figura 4.28. Solución obtenida.............................................................................75Figura 4.29. Matriz de ubicación de las piezas y conteo de cuadros. ..................76Figura 4.30. Representación rectilinear en el tablero ...........................................76Figura 4.31. Combinación de rectángulos que forman diferentes objetos............77Figura 5.1. Organigrama de Técnicas combinatoriales ......................................79Figura 5.2. Vectores de trabajo ..........................................................................81Figura 5.3. Configuración típica..........................................................................82Figura 5.4. Codificación binaria ..........................................................................83Figura 5.5. Población inicial ...............................................................................84Figura 5.6. Punto de recombinación...................................................................86Figura 5.7. Elementos recombinados.................................................................87Figura 5.8. Recombinación de un punto.............................................................87Figura 5.9. Recombinación en el problema de empaquetamiento
bidimensional ...................................................................................91Figura 5.10. Descendientes generados después de la recombinación ................91Figura 5.11. Concepto de vecindad......................................................................93Figura 5.12. Esquema básico del algoritmo de Búsqueda Tabú ..........................99Figura 5.13. Tipos de desperdicio ......................................................................100Figura 5.14. Primer criterio de vecindad.............................................................101Figura 5.15. Segundo criterio de vecino.............................................................101Figura 5.16. Tercer criterio de vecindad.............................................................102Figura 5.17. Cuarto criterio de vecindad ............................................................102Figura 5.18. Quinto criterio de vecindad.............................................................103Figura 5.19. Sexto criterio de vecindad ..............................................................103Figura 5.20. Nueva disposición ubicando la pieza 12 ........................................104Figura 5.21. Algoritmo Recocido simulado.........................................................108Figura 5.22. Secuencia de los algoritmos ..........................................................115Figura 6.1. Vector de piezas y secciones para el caso 1 .................................120Figura 6.2. Solución obtenida para el caso 6.1 ................................................120Figura 6.3. Vector de piezas y secciones para el caso 6.2 ..............................121Figura 6.4. Solución obtenida para el caso 2. ..................................................121Figura 6.5. Solución de inicio caso 6.1.............................................................123Figura 6.6. Solución de inicio obtenida para el caso 6.1 ..................................124Figura 6.7. Árbol asociado a la codificación de la figura 6.5 ............................125Figura 6.8. Solución final para el caso 6.1 .......................................................126Figura 6.9. Solución de inicio para el caso 6.2.................................................126Figura 6.10. Solución final caso 6.2 ...................................................................127Figura 6.11. Inicial caso 6.3 ...............................................................................127Figura 6.12. Solución Final caso 6.3 ..................................................................128Figura 6.13. Inicial caso 6.4 ...............................................................................128Figura 6.14. Solución final caso 6.4 ...................................................................129Figura 6.15. Comparación resultados del 1 al 25...............................................135
7
Figura 6.16. Comparación de resultados del 26 al 50 ........................................135Figura 6.17. Resumen de respuestas ................................................................136Figura 6.18. Salida del algoritmo para el caso 10 ..............................................137Figura 6.19. Diagrama de árbol de la figura 6.17 ...............................................137Figura 6.20. Capa 1............................................................................................138Figura 6.21. Capa 2............................................................................................138Figura 6.22. Capa 3............................................................................................138Figura 6.23. Solución obtenida para el caso 10. ................................................139Figura 6.24. Distribución de probabilidad caso 25..............................................140
8
LISTA DE TABLAS
Tabla 4.1. Tabla de datos ejemplo 4.1...................................................... 54Tabla 4.2. Datos del problema presentado por Oliveira y Ferreira[12] ..... 55Tabla 4.3. Matriz de pesos entre piezas ................................................... 56Tabla 4.4. Comparación de eficiencias de los métodos............................ 60Tabla 4.5. Datos del ejemplo 4.3 .............................................................. 62Tabla 4.6. Datos del ejemplo 4.4 .............................................................. 67Tabla 4.7. Dimensiones de los cluster ...................................................... 71Tabla 4.8. Datos ejemplo 4.5 .................................................................... 73Tabla 5.1. Formas de calcular la función objetivo..................................... 84Tabla 6.1. Dimensiones y cantidad de placas para caso 1. .................... 119Tabla 6.2. Resultado caso 6.1 ................................................................ 120Tabla 6.3. Dimensiones y cantidad de piezas.Caso 6.2 ......................... 121Tabla 6.4. Solución caso 6.2................................................................... 122Tabla 6.5. Resultados con propuesta de solución6.1 ............................. 122Tabla 6.6. Parámetros usados................................................................ 122Tabla 6.7. Características de los casos de prueba. ................................ 122Tabla 6.8. Número de vecinos y penalización ........................................ 130Tabla 6.9. Iteraciones tabú ..................................................................... 131Tabla 6.10. Respuestas obtenidas desde diferentes soluciones de
inicio....................................................................................... 131Tabla 6.11. Valor de los parámetros......................................................... 132Tabla 6.12. Resultados para los casos del 1 al 25 ................................... 133Tabla 6.13. Resultados para los casos del 26 al 50 ................................. 134Tabla 6.14. Resumen de respuestas ........................................................ 136Tabla 6.15. Distribución de frecuencias caso 25 ...................................... 139
9
1. INTRODUCCIÓN
Figura 1. Tabla 1.
Los problemas de corte y empaquetamiento pertenecen a la categoría de problemas de optimización combinatoria denominados Np- completos debido a que el espacio de soluciones crece de forma exponencial de acuerdo al número de piezas a ser ubicadas. En ambos casos, existen dos tipos de objetos, grandes y pequeños, en donde el espacio definido por el objeto grande debe ser ocupado por los objetos pequeños siguiendo ciertas normas; el ajuste entre objetos grandes y pequeños debe ser lo más eficiente posible, de acuerdo a la función objetivo establecida, generalmente se considera la minimización del espacio no utilizado. Los problemas de corte y empaquetamiento, aparentemente dispares, están conceptualmente relacionados debido a la dualidad entre el material y el espacio ocupado por éste [41].
Existen diferentes criterios para clasificar los problemas de empaquetado, como son el tamaño y la cantidad de las piezas, las dimensiones del problema, entre otras. La consideración de diferentes tipos de restricciones puede originar problemas de empaquetamiento totalmente distintos.
Pueden considerarse las siguientes tres situaciones referidas al conocimiento que se tiene del tablero en que hay que distribuir las piezas [33]:
1. El largo y el ancho del tablero son conocidos. Se pretende, por tanto, distribuir en el tablero aquellas piezas que optimicen la función objetivo considerada. Este problema es conocido como el Bin packing problem
2. Sólo es conocido el ancho del tablero mientras que el largo se considera flexible. En este tipo de problema se desea encontrar la distribución de piezas que minimice el largo del tablero. Este tipo de problema se refiere al caso donde la materia prima es un rollo de papel o tela. En la literatura se conoce como Strip packing problem.
3. No son conocidos ni el largo ni el ancho del tablero. El propósito es distribuir las piezas de tal forma que el rectángulo que esta distribución determina sea el de menor área.
Los problemas de empaquetamiento tienen múltiples aplicaciones en investigación operativa, química, computación gráfica e ingeniería. Esencialmente se trata de acomodar objetos en una determinada región del espacio [49]. Sin embargo,
10
diferentes inconvenientes particulares a cada problema determinan la disposición de las piezas sobre el patrón (tablero). Entre estos inconvenientes se pueden destacar las propiedades del material del patrón (falta de homogeneidad en el color, calidad,…etc.), la tecnología de corte (que obliga a que exista una determinada distancia entre las piezas), secuencia de empaquetado (los objetos frágiles no pueden estar situados al fondo del patrón), áreas vacías en el interior de objetos irregulares (que pueden ser aprovechadas), etc.
Uno de los problemas más conocidos de esta clase es el de empaquetado rectangular bi-dimensional tipo guillotina. En este se pretende ubicar, sin solapamientos, un conjunto dado de rectángulos en un objeto rectangular de anchura y altura conocidas. El propósito es obtener una configuración que maximice el área utilizada. Dada su dificultad y su gran aplicabilidad, existe un creciente interés en disponer de procedimientos eficaces y eficientes para resolver este problema.
En este trabajo se desarrollará el problema de empaquetamiento bidimensional restricto, desde el modelamiento hasta la presentación de varias codificaciones y alternativas de solución. El esquema del documento tiene la siguiente estructura:
En el capitulo 2 se presenta un panorama general de los problemas de corte y empaquetamiento, iniciando con el de carga de contenedores rectangulares; luego se hace relación al empaquetamiento en cilindros, se comenta el empaquetamiento en palets o estibas, se hace relación a él porque este caso en tres dimensiones se puede reducir a uno bidimensional, se plantean los problemas bidimensionales restrictos, irrestrictos, tipo guillotina y tipo no guillotina, finalmente se hace una extensión del problema bidimensional rectangular al problema bidimensional donde las piezas demandadas tienen forma de polígonos.
En el capitulo 3 se plantean los modelos matemáticos de los problemas tridimensionales rectangular y cilíndrico, así mismo se presentan los modelos matemáticos propuestos y tomados de la literatura para el problema de empaquetamiento bidimensional tipo guillotina usados en el desarrollo de este trabajo.
En el capitulo 4 se hace una explicación de la explosión combinatorial del espacio de soluciones para problemas del tipo NP-completo y la justificación del uso de las heurísticas en la solución de los mismos, luego se presentan algunos de los métodos constructivos más utilizados para los problemas tipo guillotina y tipo no guillotina, finalmente se presentan los tipos de codificación propuestos para las implementaciones computacionales en la solución del caso en estudio usando técnicas metaheurísticas.
En el capitulo 5 se hace un recorrido por las diferentes metaheurísticas utilizadas: Algoritmo genético modificado de Chu-Beasley, Técnica de Búsqueda Tabú, Búsqueda en vecindario variable y Recocido simulado así como su adecuación al problema específico.
11
En el capitulo 6 se muestran las pruebas y resultados obtenidas con las diferentes técnicas a los casos evaluados, se hace la comparación de los resultados obtenidos con las diferentes técnicas y se comparan además con las mejores respuestas conocidas en la literatura.
En el capitulo 7 se presentan las conclusiones y se plantean las futuras líneas de investigación.
1.1. Planteamiento del problema
Uno de los problemas más conocidos de corte y empaquetamiento es el de empaquetado rectangular bi-dimensional tipo guillotina. En este se pretende ubicar, sin solapamientos, un conjunto dado de rectángulos en un objeto rectangular de anchura y altura conocidas. El propósito es obtener una configuración que maximice el área utilizada y por defecto minimice las áreas desperdiciadas de material disponible atendiendo la demanda de cada uno de los tipos de piezas.
1.2. Delimitación
En este trabajo se pretende resolver el problema bidimensional de empaquetamiento (corte) rectangular tipo guillotina restricto, donde se dispone de una sola hoja de material para ubicar las piezas demandadas. La solución del mismo comprende las fases de modelamiento del problema, codificación de las alternativas de solución y técnicas de solución.
1.3. Objetivos
1.3.1. Objetivo general
Desarrollar una metodología para la solución del problema de empaquetamiento óptimo bidimensional usando técnicas combinatoriales
1.3.2. Objetivos específicos
Estudiar el estado del arte del problema de empaquetamiento bidimensional.
Definir el modelo matemático del problema de empaquetamiento óptimo bidimensional restricto tipo guillotina.
Definir una codificación adecuada para representar la solución del problema.
Adecuar las técnicas de solución al problema planteado de forma que puedan implementarse los operadores propios de cada una de ellas.
Implementar las metodologías propuestas computacionalmente.
12
1.4. Justificación
Este proyecto busca estudiar e implementar el modelo matemático propuesto para el problema de empaquetamiento óptimo bidimensional (2/B/O/M) para una sola hoja de material, y resolverlo usando técnicas heurísticas constructivas combinadas con técnicas metaheurísticas tales como el algoritmo genético modificado de Chu-Beasley , Búsqueda Tabú entre otras
Este proyecto es de interés institucional, pues con este se pretende avanzar en la temática de la solución al problema de empaquetamiento óptimo incluido en propuesta de investigación presentada por del grupo DINOP (Desarrollo de la investigación operativa) al departamento de investigaciones de la Universidad Tecnológica de Pereira., la cual fue aprobada. Es de interés empresarial porque se pretende desarrollar una metodología apropiada para la solución de este problema que beneficia a las empresas que requieren el uso eficiente de materiales tales como: industrias de maderas, vidrieras, metalmecánica, del sector de plásticos, periódicos entre otros y que forman parte del entorno de la Universidad Tecnológica de Pereira.
Los resultados obtenidos tanto en la parte de modelamiento como la técnica de solución implementada se colocan a disposición de la comunidad académica para ser discutidas.
1.5. Marco referencial
En muchas aplicaciones de la vida real relacionadas con los procesos industriales surgen problemas que la Investigación Operativa engloba bajo la denominación de Problemas de Corte y Empaquetamiento. Muchos procesos de fabricación producen tableros o láminas de grandes dimensiones de madera, metal, papel, plástico o vidrio que luego han de ser cortados en piezas más pequeñas para ajustarse a las necesidades de los clientes.
1.5.1. Antecedentes
En esta sección se hace una descripción general de algunos de los métodos existentes en la literatura con los cuales se ha intentado resolver el problema general.
Métodos Exactos
Existen algunos métodos exactos propuestos para el problema: Beasley (1985)[3],
13
Tsai et al.(1988)[58] y Scheithauer y Terno (1993)[48] presentan formulaciones enteras. Hadjiconstantinou y Christofides (1995)[25] también proponen otra formulación. Arenales y Morabito (1995)[2] presentan un Branch and bound basado en un tipo especial de grafo (AND/OR graph). Fekete y Schepers (1997)[16] crean un procedimiento basado en la representación mediante grafos de la posición relativa de las piezas en un patrón posible. Finalmente, Caprara y Monaci (2004)[9] presentan un algoritmo con algunas mejoras respecto a la propuesta de Fekete y Schepers.
También se ha introducido el concepto de cota superior con el fin de asegurar que el área total de las piezas cortadas no exceda la superficie del tablero de forma que se asegure que el número de piezas de cada tipo caiga dentro de los límites apropiados y se plantean en el modelo matemático mediante ecuaciones que representan restricciones dentro del mismo. La función objetivo es maximizar el valor de las piezas cortadas y la solución de esta formulación será una cota superior para el problema de corte.
Algoritmos Heurísticos
Se explica a continuación los métodos heurísticos propuestos para el problema. En primer lugar se enunciaran los métodos constructivos y posteriormente los metaheurísticos.
Se pueden distinguir los siguientes métodos que han sido empleados en la solución del problema:
Métodos constructivos
El procedimiento más empleado para colocar las piezas es el algoritmo Bottom-left
(BL). A partir de un orden de las piezas a cortar, el algoritmo consiste en colocar cada pieza en el tablero lo más abajo posible y una vez hecho esto mover la pieza todo lo que pueda hacia la izquierda. Al aplicar este método pueden quedar áreas no aprovechables (desperdicios).
Una modificación de la estrategia anterior que intenta aprovechar las áreas no aprovechables es la estrategia Bottom-left-fill(BLF). Este procedimiento antes de colocar una pieza según la estrategia BL comprueba si se puede colocar en alguna de las áreas no aprovechables que se han generado hasta el momento.
Otro método utilizado en la literatura para construir una solución a partir de un orden de las piezas, es el mecanismo Difference Process (DP) de Lai y Chan[33].
14
La estrategia Difference Process(DP) intenta colocar cada pieza en la esquina posible del resto del diseño más cercana a la esquina inferior izquierda del tablero. Para medir cuál es la posición se emplea la distancia euclídea. Al igual que con el método anterior existen patrones que no puede alcanzarse con esta estrategia.
Metaheurísticos
De los métodos metaheurísticos para el problema sólo uno es para el problema general, el propuesto por Beasley (2003), mientras que el resto de métodos son para el caso restringido, para dar claridad se supone que el número de piezas a
cortar de cada tipo i debe estar dentro de unos límites ,i iP Q con (0 )i iP Q , el
problema restringido, tiene una cota superior para el número de piezas de cada tipo
que se pueden utilizar, por tanto 0iP i y sin darle peso a las piezas.
En 1997, Lai y Chan presentan un procedimiento basado en simulated annealing.
El procedimiento consiste en una lista con el orden de corte de las diferentes piezas, de tamaño M. Por ejemplo, se supone m=5. Una solución se representa por la lista {2, 3,5,4,1} lo que indicaría que la pieza 2 se corta en primer lugar, después la pieza 3,…, y finalmente la pieza 1. En esta representación si una pieza puede cortarse más de una vez se crean copias de esa pieza. Posteriormente estas piezas son cortadas según el procedimiento Difference Process. Las soluciones se generan mediante intercambios de piezas en la lista. Para los resultados computacionales presentan un conjunto de problemas generados aleatoriamente, en los cuales el objetivo es minimizar el desperdicio del tablero y se resuelven problemas de hasta 35m .
En 1997, Lai y Chan describen un procedimiento evolutivo. Usan la misma representación que en el anterior trabajo. Su algoritmo incluye un procedimiento de mejora basado en dividir la lista ordenada de piezas activas (cortadas) e inactivas (no cortadas) y examinar si alguna de las piezas, actualmente, inactivas puede ser cortada. Se presentan resultados computacionales para un conjunto de problemas generados aleatoriamente, donde el objetivo es, como en el trabajo anterior, minimizar el desperdicio del tablero. El problema más grande que resuelven tiene m=10.
En 2001 Leung utilizan un algoritmo evolutivo, en el que usan la representación de las soluciones de Lai y Chan[34] . Muestran que existen patrones que no pueden alcanzarse por los procedimientos de BL y DP. Presentan un Simulated Annealing con un movimiento que corresponde a intercambiar dos piezas en la lista o mover una pieza a una nueva posición de la lista. También presentan un algoritmo
15
genético que incluye cinco diferentes tipos de operadores de cruce. Resuelven 8 problemas test, pero no presentan detalles de los resultados. Resuelven problemas con 30m .
En 2004 Beasley[3] presenta un algoritmo genético para el caso general. El algoritmo está basado en una nueva formulación no lineal para el problema. La formulación también admite extensiones para el problema con más de un tablero, el problema con algunas zonas del tablero que no se pueden utilizar y el problema donde las piezas se pueden rotar. Los resultados computacionales son los mejores hasta el momento. Resuelve problemas con hasta 1000 tipos de piezas y recopila la mayoría de instancias test utilizadas para el problema. Además crea una nueva batería de problemas basados en los estudios de Fekete y Schepers.
1.5.2. Marco Conceptual
Los problemas de corte y empaquetamiento, están estrechamente relacionados. Se supone que se tiene un tablero del que se desean cortar una serie de piezas, donde el valor de cortar cada pieza no tiene por qué ser exactamente su área. El objetivo es obtener la mayor ganancia al cortar ese tablero. También se debe tener en cuenta que, en algunos casos, las piezas no pueden ser rotadas ya que si el material a cortar tiene alguna veta o dibujo una pieza (l,w) no es igual a una pieza (w,l) con l w . Este problema se conoce comúnmente como el problema
restringido bi-dimensional de corte no-guillotina.
Definido formalmente, el problema consiste en cortar un rectángulo de dimensiones (L,W) que se denomina tablero, de longitud L y anchura W, un conjunto de
rectángulos ( , )i il w , que se denominan piezas, de longitud il y anchura
iw (i=1,....,m). Cada pieza tiene orientación fija, es decir, no puede ser rotada. Los
cortes deben ser paralelos al tablero. El número de piezas de cada tipo i debe
estar dentro de unos límites ,i iP Q con (0 )i iP Q . Por notación se define
1
m
ii
M Q y se puede suponer sin pérdida de generalidad que todas las
dimensiones son enteras. Cada tipo de pieza i tiene asociado un valor iv y el
objetivo es maximizar el valor total de las piezas cortadas. Se puede hablar de tres tipos de problemas:
El problema no restringido, donde no existen límites, ni superiores, ni inferiores, para el número de piezas a cortar de cada tipo, excepto la cota superior trivial. El problema restringido, donde está acotado superiormente el número de piezas de
16
cada tipo, y el problema doblemente restringido, donde además de estar acotado el número máximo de algunos tipos de piezas a cortar, se exige cortar un número mínimo de piezas de algunos tipos.
Se define la eficiencia de un tipo de pieza i como /( * )i i i ie v l w , es decir, el
beneficio por unidad de superficie de la pieza tipo i. Algunos autores diferencian dos tipos de problemas, dependiendo de la eficiencia de las piezas: el problema sin
pesos (un-weighted) donde el valor de cada pieza es el área de la pieza ( 1 )ie i y
el problema con pesos (weighted) donde el valor de la pieza no tiene porque
depender del área de la pieza ( / 1)ii e , por lo que pueden existir piezas
pequeñas con valores superiores a otras más grandes.
1.5.3. Marco Teórico
El problema de empaquetamiento óptimo de contenedores es un problema clásico de investigación de operaciones, cuyo objetivo en general es aumentar el volumen consumido al almacenar ciertos productos en relación con el volumen total disponible en la bodega o contenedor que los almacena. En otras palabras, se desea encontrar una configuración de ubicación y disposición de productos de tal manera que el volumen sin usar del contendor sea mìnimo o próximo a cero.
Una solución del problema no puede ser determinada analíticamente, y en términos computacionales, es poco probable que exista un algoritmo de baja complejidad que aborde el problema de forma determinística. Una configuración o solución del problema debe considerar cuatro objetivos: maximizar el volumen utilizado, maximizar el peso de la carga, maximizar el equilibrio(centro de gravedad) del contenedor , maximizar el costo asociado a la carga.
Al considerar estos objetivos el problema debe ser tratado como un problema de optimización multiobjetivo [35]. Por lo tanto, un problema de esta naturaleza, haría una búsqueda demasiado compleja para determinar numéricamente una frontera eficiente (Pareto óptimo). Este tipo de problemas requieren, por tanto, el uso de técnicas de optimización como las metaheurísticas, a fin de obtener una solución aproximada del problema. Así el problema puede ser tratado como uno de único objetivo en el cual todas estas características son incluidas en la función objetivo a través de una combinación convexa de los mismos.
En la revisión bibliográfica que se ha realizado se descompone el problema de empaquetamiento tridimensional en un problema bidimensional para simplificarlo se relajan las condiciones de altura, luego con base en esa respuesta se vuelve al problema original y se resuelve.
La metodología consiste en estudiar el estado del arte de los algoritmos de solución, así como el de los modelos matemáticos. Es apropiado destacar que el
17
grupo DINOP ha venido adelantado estudios en estas técnicas aplicadas a otros problemas similares [50],[51],[52],[53].
Los mayores beneficios del desarrollo de este proyecto son, entre otros:
Aportar al desarrollo investigativo de la facultad de Ingeniería Industrial en el área de investigación operativa, línea de optimización de la producción.
Generar la apertura de un nuevo campo de desarrollo empresarial que permita mostrar la maestría en Investigación Operativa y Estadística como un ente consultor de empresas regionales y nacionales
1.6. Diseño metodológico
La investigación inicia con una revisión bibliográfica para conocer el estado del arte del empaquetamiento óptimo. Luego se hará una adecuación del modelo a los operadores de las metaheurísticas que serán usadas y se compararan los resultados con casos de la literatura a través del desarrollo de un aplicativo especializado.
El resultado final incluye el desarrollo del software necesario para simular, comparar y evaluar resultados. Adicionalmente, el simulador estará asociado a una base de datos con información sobre casos de prueba típicos para evaluar los diferentes métodos
18
2. PROBLEMAS DE CORTE Y EMPAQUETAMIENTO
Figura 2. Tabla 2.
2.1. Generalidades
El empaquetamiento de cajas dentro de contenedores es de gran importancia en la actividad de manejo de materiales y en las actividades de logística de las organizaciones. Un contenedor está definido como una caja rectangular la cual debe usarse de forma que la cantidad de espacios sin utilizar sean mínimos. Las cajas deben ser elementos que puedan apilarse, adicionalmente todo tipo de mercancías deben ser empacadas dentro de las cajas para facilitar su manejo. El proceso de empaquetamiento debe ser manual o debe ser controlado por un equipo de control numérico. El problema general de empaquetamiento considera el número óptimo de contenedores para empacar un conjunto de cajas rectangulares de diferentes dimensiones donde el objetivo es minimizar el total de área sin utilizar.
El problema de empaquetamiento de contenedores está clasificado como un problema tridimensional (3D) (figura 2.1), otro tipo de problema que la industria presenta es el empaquetamiento en contenedores circulares o cilíndricos (figura 2.2), en ingeniería de comunicaciones es común la tarea de acomodar fibra óptica en un tubo del menor radio posible. El problema de empaquetamiento de contenedores está relacionado como un problema bidimensional (2D) cuando se refiere a problemas de corte bidimensional y al empaquetamiento sobre estibas o palets, definiendo como estiba, a un armazón de madera, plástico u otros materiales empleado en el movimiento de carga que facilita el levantamiento y manejo con pequeñas grúas hidráulicas (figura 2.3).
En el caso general del problema de corte bidimensional se dispone de una superficie S de cierto material y que tiene unas dimensiones *L W determinadas.Además, se dispone de un conjunto de n piezas distintas, cada uno de las cuales tiene unas dimensiones *i il w y un beneficio ib asociado.
El problema consiste encontrar la distribución de las piezas sobre la superficie S, dado un determinado número de piezas de cada tipo, de forma que el beneficio obtenido sea máximo y el desperdicio de material sea mínimo.
19
Z
Y
X
caja i
Ancho
Largo
Alto
Figura 2.1. Problema de empaquetamiento en contenedores rectangulares
Figura 2.2. Problema de empaquetamiento en contenedores cilíndricos.
20
Figura 2.3. Problema del Palet reducido a dos dimensiones
Este problema se puede formular matemáticamente tal como se muestra en la Ec.(2.1):
1
:
n
i ii
M aximizar b x
sujeto a
R
(2.1)
Siendo ,i ib x el beneficio asociado y el número de piezas de cada tipo i a ser
cortadas respectivamente y {R} el conjunto de restricciones específicas de cada problema. Se debe tener en cuenta que según el tipo de problema en concreto éste podrá estar sujeto a otro tipo de restricciones características del caso en particular. De todos modos, aún suponiendo el caso del problema más sencillo e ignorando algunas de las restricciones, los problemas de corte son denominados NP-completo.
Es un problema de tipo NP-completo, dado que los patrones de empaquetamiento incrementan exponencialmente con el número de rectángulos que deben ser empacados. La magnitud del espacio de búsqueda es mayor que la del problema del agente viajero. Por ejemplo, si el número de placas a ser ubicadas es de 25, el tamaño del espacio de soluciones está dado por !25225 . Mientras que el espacio de soluciones del agente viajero es del orden de 3110 para un caso con igual número de ciudades considerando que todas las ciudades estén conectadas entre sí.. Esta es una de las razones para usar las técnicas metaheurísticas como herramienta de solución [32].
El problema descrito considera un alto grado de diversidad en los tipos de placas o piezas rectangulares y un único tablero en los que deben ser empacadas. Además, sin pérdida de generalización, se asume que todas las entradas son enteros positivos. La posibilidad de rotar las placas un ángulo de 90º también puede ser considerada.
21
2.2. Aplicaciones en la industria
Sus aplicaciones se pueden observar en industrias de perfiles metálicos, corte de maderas, papel, plástico, piel, aluminio o vidrio en donde los componentes rectangulares tienen que ser cortados desde grandes hojas de material; en un contexto de depósitos o almacenes las mercancías deben ser ubicadas en estanterías; en periódicos artículos y avisos tienen que ser organizados en páginas. En estas aplicaciones las unidades de estandarización son los rectángulos, y tienen una función objetivo común que consiste en que todas las piezas requeridas se ubiquen en un mínimo número de hojas de material, este problema de optimización resultante es conocido en la literatura como el problema bidimensional de bin-packing (2BP). En otros contextos como las empresas papeleras o de industrias textiles la unidad de material es un rollo y la función objetivo es cortar todos los ítems usando la mínima dimensión del rollo (2SP)..
Lo que ocurre normalmente, por ejemplo en la industria textil, es que tras una primera etapa de producción en la que se realiza el diseño de las prendas, ya se disponen de las telas necesarias y se conocen los patrones que se desean obtener de cada una de ellas.
En la etapa siguiente, intervienen una o más personas especializadas que son quienes van distribuyendo y cortando los patrones sobre la tela. Si se quisiera automatizar esta etapa del esquema de producción textil, el sistema a desarrollar debería cumplir con ciertos requisitos para que su implementación fuese realmente beneficiosa para la empresa implicada. Estos requisitos son los siguientes:
La proporción media del desperdicio de telas obtenida por el sistema debería ser igual o menor que la obtenida por un humano especializado. Se sabe que, normalmente, el desperdicio producido por un profesional del corte es de aproximadamente el 30% de la tela original, por lo que, el sistema a desarrollar debería al menos igualar este resultado.
El tiempo de ejecución para la obtención de un resultado admisible, no debe en ningún caso provocar una demora en el proceso global de producción, pues en tal caso, no proporcionaría ningún beneficio notable para la industria en cuestión.
A la hora de resolver el problema, se deben considerar y aplicar todas las restricciones referentes a la legalidad de los patrones. Por ejemplo, algunos patrones tienen orientación y ésta debe seguir la dirección del material. Existen, además, materiales cuya calidad no es la misma en toda su superficie esto ocurre, por ejemplo, con el cuero y la madera y en estos casos se suele aprovechar las zonas de mejor calidad para fabricar las piezas de mayor valor.
22
2.3. Introducción Histórica
El problema de corte y empaquetado (Cutting and Packing Problem) es un problema que se comenzó a plantear y estudiar hace ya algún tiempo. Salvo algunas excepciones como Kantorovich en 1939 y Brooks en 1940, las primeras aproximaciones de interés para problemas reales aparecieron a partir de 1961. Fue en este año cuando Gilmore y Gomory [21] publicaron su aproximación por programación lineal. Posiblemente, éste haya sido uno de los artículos con mayor relevancia dentro de esta área.
A partir de ese momento, multitud de artículos con aproximaciones y estudios diversos acerca de las posibles variaciones del problema aparecen cada año. Con lo cual, la documentación existente se hace aún más extensa hasta llegar al punto en que es bastante complicado saber qué documentos se ajustan mejor al tipo de problema por el cual se está interesado.
Quizás, por este motivo, Sweeney y Paternoster [49] realizaron una completísima recopilación que engloba más de 400 libros, artículos y demás documentación en inglés publicada entre 1940 y 1990, que tratan de problemas de corte y empaquetado. Pero lo que elaboraron no es sólo una recopilación de documentación, sino que además, proporciona una clasificación de los estudios según la dimensión del problema, tipo del problema y tipo de aproximación a la solución empleada.
2.4. Unificación de la nomenclatura
A partir de unos modelos básicos, existen gran cantidad de variantes, derivadas de la amplia gama de aplicaciones prácticas existentes y dependiendo de quién lo esté tratando.
Dyckhoff [14] desarrolló un esquema que generaliza la clasificación presentada por Hinxman [30], a finales de los 80, publica un artículo cuyo principal objetivo consiste en unificar las distintas notaciones existentes en la literatura relacionada con este tipo de problemas. En el documento, además, pretende describir una clasificación de las diversas tipologías y clases de problemas relacionados. Esta se lleva a cabo basándose en la estructura lógica básica de cada uno de ellos e identificando así ciertas propiedades comunes a los diversos problemas. Estas características comunes de todo problema de corte y empaquetado son las que se detallan a continuación:
Existen dos grupos básicos de elementos. Un inventario de elementos mayores y un conjunto de pequeños elementos. A estos elementos también se les llama objetos o figuras.
La finalidad del problema será distribuir el conjunto de los pequeños elementos a lo largo de los elementos mayores.
23
Por otro lado, las peculiaridades o características que hacen que un tipo de problema se distinga de otro suelen ser las siguientes:
Dimensión (unidimensional, bidimensional, tridimensional o problemas multidimensionales).
Cantidad disponible de objetos grandes y pequeños (medida entera o fraccionaria).
Forma de las figuras u objetos (regular o irregular).
Tamaño de los objetos.
Orientación de los objetos.
Combinación de los objetos.
Disponibilidad de los objetos.
Restricciones inherentes al tipo de patrón (tipo de corte a emplear, separación entre los patrones, etc.).
Objetivos del problema en sí.
La notación es la siguiente:
Dimensionalidad
(N) Número de dimensiones
Tipo de asignación
(B) Todas las láminas o tableros y una parte de las piezas demandadas.
(V) Una parte de los tableros y todas las piezas demandas.
Surtido de tableros o láminas almacenadas
(O) Un tablero.
(I) Tableros idénticos.
(D) Tableros diferentes.
Surtido de piezas demandadas.
(F) Pocas piezas de diferentes tamaños.
(M)Muchas piezas de muchos tamaños.
24
(R)Muchas piezas de relativamente pocas dimensiones.
(C)Muchas piezas pero idénticas.
Como comenta Dyckhoff, dentro del tópico de los problemas de corte y empaquetado, aparecen problemas cuya estructura lógica y finalidad última es la misma pero aparecen descritos en la literatura con nombres diferentes. A continuación, se presenta una lista con los nombres más frecuentemente empleados para referirse a este tipo de problemas:
Problemas de Corte y Empaquetado (Cutting and Packing Problems).
Marker Making Problems.
Cutting Stock y Trim Loss Problems.
Bin Packing, Dual Bin Packing, Strip Packing, Vector Packing y Problema de la Mochila (Knapsack Problem).
Problemas de Carga de un Vehículo o Contenedor.
Assortment, Dividing, Nesting o Partitioning Problems.
Line Balancing, Memory Allocation y Multiprocessor Scheduling Problems.
2.5. Problemas de corte bidimensional
Morabito y Morales [39],[40] hacen la siguiente clasificación de los patrones de empaquetamiento:
Patrones guillotina y no guillotina:
Un corte es de tipo guillotina si cuando se aplica sobre un rectángulo produce dos nuevos rectángulos, es decir, si el corte va de un extremo a otro del rectángulo original; en otro caso se denomina del tipo no guillotina. Un patrón es de tipo guillotina si se puede obtener por sucesivos cortes de tipo guillotina Figura 2.4(a), 2.5(a). Un patrón es no guillotina si es obtenido por sucesivos cortes de guillotina y no guillotina Figura 2.4(b), 2.5(b)).
Patrones de primer orden y orden superior:
Un corte es de primer orden no guillotina si cuando se aplica en un rectángulo produce nuevos rectángulos de tal manera que no forma un patrón de guillotina Figura 2. 4(b). Un patrón es llamado de primer orden no guillotina si es obtenido por sucesivos cortes guillotina o cortes de primer orden no guillotina Figura 2.5(b).
25
2.4(a) Corte Guillotina 2.4(b)Corte no guillotina
Figura 2.4. Tipos de Cortes
2.5(a) Patrón Guillotina
2.5(b)Patrón de primer orden
Figura 2.5. Tipos de patrones
26
En este trabajo se desarrollarán técnicas de solución que permitan resolver el problema en la clasificación de Dyckhoff (2/B/O/M) para el caso en que se disponga de una única hoja de material. En este tipo de problema bidimensional se debe ubicar una parte de las piezas, las cuales presentan diversos tamaños, en un único tablero con base en la demanda.
2.6. Extensión a Polígonos
Stefan Jakobs [32] hace una propuesta para el problema de corte bidimensional cuando las figuras demandadas son polígonos planteando que puede realizarse una reducción del problema a uno de empaquetamiento de rectángulos con algunas consideraciones: primero encaja los polígonos dentro de rectángulos con la mínima área posible para todas las piezas, rotándolas alrededor del centro de gravedad de todas las esquinas en un número fijo de iguales incrementos angulares como se muestra en la figura 2.6. Cada incremento debe encajar el rectángulo paralelamente a los ejes x y y. con el mínimo de área calculada. Finalmente la minimización de los incrementos es ejecutada, después de haber encajado cada polígono en rectángulos se empieza a ubicarlos uno tras otro tan próximo como sea posible, llevando así el problema a uno de empaquetamiento bidimensional rectangular.
Figura 2.6. Empaquetamiento de un polígono en un rectángulo con mínima área.
Jakobs en su trabajo compara soluciones encontradas aplicando el constructivo BL con respuestas obtenidas con el algoritmo genético, según sus conclusiones es
27
más eficiente el algoritmo genético que el BL. Estas comparaciones se pueden observar en las figuras 2.7 y 2.8.
Figura 2.7. Respuesta obtenida con algoritmo BL. Altura =22
Figura 2.8. Respuesta obtenida con algoritmo genético (1000 iteraciones). Altura=15
28
2.7. Aproximaciones al problema de corte bidimensional
Al igual que se han estudiado diversas variantes del problema, también se han desarrollado distintas aproximaciones a la solución del mismo. Algunas de estas aproximaciones que se han seguido son las siguientes:
Algoritmos de Programación Dinámica y Variantes.
Métodos de Programación Entera. En este caso, uno de los algoritmos más empleados es la ramificación y acotamiento (Branch-and-Bound).
Búsquedas Heurísticas.
Aproximaciones mediante Redes Neuronales.
Aproximaciones mediante uso de sistemas expertos o sistemas basados en el conocimiento.
Métodos que emplean paralelismo.
En un artículo de Salkin y Kluyver [47] se describen la mayoría de los métodos anteriores para el caso del problema de la mochila unidimensional. Se plantean las bases de cada una de las técnicas y se realiza una comparativa entre ellas. Resulta un documento de interés en cuanto a que proporciona una visión general de los distintos métodos.
Otro artículo de gran interés es el Dowsland [13]. En este artículo se seleccionan un conjunto de las variantes del problema de corte y empaquetado más estudiadas y se analizan para cada una de estas variantes, cuáles han sido las soluciones propuestas de mayor relevancia.
En el marco referencial se hizo un recorrido por las diferentes técnicas de solución referenciados bibliográficamente, después de la construcción del anteproyecto se encontró un documento que fue de gran relevancia en el desarrollo de este trabajo y se refiere a un documento presentado por Yaodong Cui basado en el procedimiento de ramificación y acotamiento combinado con técnicas de programación dinámica. El tablero a ser utilizado es dividido en segmentos homogéneos verticales y a partir de ellos se empiezan a ubicar las piezas, con base en esta idea se obtienen configuraciones que siempre serán del tipo guillotina, para validar la técnica se presentan 50 casos de prueba para los que no se admite rotación de las piezas, cada caso cuenta con 20 tipos diferentes de piezas, se trata de problemas restringidos donde no es necesario cortar todas las piezas, los resultados se presentan con base al porcentaje de área utilizada [11].
29
3. MODELOS MATEMÁTICOS DE LOS PROBLEMAS DE CORTE Y EMPAQUETAMIENTO.
Figura 3. Tabla 3.
3.1. Generalidades
Los problemas de corte y empaquetamiento, como se ha mencionado, están estrechamente relacionados. Es así como Vendramini [59] resuelve el problema de cargue de contenedores relajándolo inicialmente a un problema bidimensional y luego construyendo columnas sobre el patrón obtenido para llevarlo a tres dimensiones. Adicionalmente en [41] se muestra como el problema de embalaje en estibas o palets se puede reducir a uno de dos dimensiones, este problema es habitual en las fábricas donde se reciben o entregan cajas de diferentes dimensiones. Con base en lo anterior en este capitulo se presentarán dos modelos en tres dimensiones: rectangular y circular, algunos modelos bidimensionales con modificaciones de acuerdo a las características específicas del caso considerado y finalmente se plantearan los modelos bidimensionales restringidos tipo guillotina adoptados en este trabajo.
3.2. Modelo matemático del problema de empaquetamiento rectangular (3-Dimensional)
Uno de los modelos más aceptados en la literatura especializada es el propuesto por CHEN [10]. Éste considera sólo un contenedor, tanto las cajas a ser empacadas como el contenedor son totalmente simétricos como se muestra en la figura 3.1.
Las cajas serán dimensionadas por ri, qi y pi y el contenedor por H, W y L. El objetivo es encontrar una configuración de apilamiento o empaquetamiento de cajas de forma que el volumen utilizado en el contenedor sea maximizado, considerando las restricciones dimensionales del mismo. Este problema puede ser ampliado a múltiples contenedores [42], donde hay múltiples objetivos, como; maximizar el espacio utilizado y minimizar el número de contenedores. En algunos casos se consideran otros objetivos como maximizar el valor de la carga, maximizar el peso y considerar el centro de equilibrio del contenedor, entre otros.
30
Z
Y
X
caja i
caja k
pi
ri
qi
rk
yi
Wj
pk
qk
(0,0,0) (xk,yk,zk))
(xi,yi,zi)
Contenedor j
1; 0; 0 1; 0; 0
0; 0; 1 0; 0; 1
0; 1; 0 0; 1; 0
1; 0
1; 0
1; 0
xi yi zi xk yk zk
xi yi zi xk yk zk
xi yi zi xk yk zk
ik ik
ik ik
ik ik
l l l l l l
W W W W W W
h h h h h h
a b
c d
e f
Figura 3.1. Definición de las variables para el problema de carga de un contenedor
A continuación se describen algunas notaciones necesarias para comprender el modelo matemático del problema:
N: Numero de cajas disponibles para apilar.
Si: Variable binaria que indica si la caja fue ubicada en el container. Cuando esto ocurre Si = 1, en caso contrario Si =0.
(xi, yi, zi): variables que indican la localización de la caja teniendo como punto de referencia el vértice inferior izquierdo trasero
(lxi, lyi, lzi): variables binarias que indican para cual eje del contenedor el lado pi de la caja está en paralelo. Como la altura de la caja siempre está en paralelo con la altura del contenedor se puede decir que (lxi, lyi, 0). (orientación de la caja)
31
(wxi, wyi, wzi): variables binarias que indican para cual eje del contenedor el lado qi
de la caja está en paralelo. Como la altura de la caja siempre está en paralelo con la altura del contenedor se puede decir que (wxi, wyi, 0). (orientación de la caja)
(hxi, hyi, hzi): variables binarias que indican para cual eje del contenedor el lado ri
de la caja está en paralelo. Como la altura de la caja siempre está en paralelo con la altura del contenedor se puede decir que siempre será (0, 0, 1). (orientación de la caja)
Adicionalmente, existen otras variables que son usadas para indicar el posicionamiento de las cajas en relación a otras cajas.
aik : en caso de que sea 1, indica que la caja i está a la izquierda de la caja k.
bik : en caso de que sea 1, indica que la caja i está a la derecha de la caja k.
cik : en caso de que sea 1, indica que la caja i está atrás de la caja k.
dik : en caso de que sea 1, indica que la caja i está al frente de la caja k.
eik : en caso de que sea 1, indica que la caja i está abajo de la caja k.
fik : en caso de que sea 1, indica que la caja i está encima de la caja k.
Así, el problema puede ser modelado de la siguiente manera:
1 1
* * * * *m N
j j j j i i ij i
Minimizar L W H n p q r (3.1)
1. Evitar superposición de cajas en el contenedor
. . . (1 ). , ,i i xi i xi i xi k ikx p l q w r h x a M i k i k (3.2)
. . . (1 ). , ,k k xk k xk k xk i ikx p l q w r h x b M i k i k (3.3)
. . . (1 ). , ,i i yi i yi i yi k iky q w p l r h y c M i k i k (3.4)
32
. . . (1 ). , ,k k yk k yk k yk i iky q w p l r h y d M i k i k (3.5)
. . . (1 ). , ,i i zi i zi i zi k ikz r h q w p l z e M i k i k (3.6)
. . . (1 ). , ,k k zk k zk k zk i ikz r h q w p l z f M i k i k (3.7)
2. Garantizar que el par de cajas evaluadas con las ecuaciones anteriores estén dentro del contenedor.
1 , , ,ik ik ik ik ik ik ij kja b c d e f s s i k j i k (3.8)
. . . (1 )i i xi i xi i xi ix p l q w r h L S M i (3.9)
. . . (1 )i i yi i yi i yi iy p l q W r h W S M i (3.10)
. . . (1 )i i zi i zi i zi iZ p l q W r h H S M i (3.11)
1
1m
ijj
s i (3.12)
1
.N
ij ji
s M n j (3.13)
33
3. Garantizar que un posicionamiento de cajas, obedezca a las limitaciones físicas dadas por las dimensiones del contenedor.
. . . (1 ) i i xi i xi i xi ix p l q w r h L S M i (3.14)
. . . (1 ) i i yi i yi i yi iy p l q W r h W S M i (3.15)
. . . (1 ) i i zi i zi i zi iZ p l q W r h H S M i (3.16)
M es un número entero arbitrario grande.
A pesar que el modelo matemático puede ser simplificado, seguirá siendo un problema complejo de solución no trivial, siendo clasificado como un problema NP-completo (completo en tiempo polinomial no determinístico) [26,27,28]. Esta clasificación del problema permite afirmar que para problemas de gran tamaño (un número elevado de cajas) sólo es posible encontrar soluciones de forma eficiente usando algoritmos de optimización combinatorial o metaheurísticas.
3.3. Modelo matemático del problema de empaquetamiento cilíndrico. (3-Dimensional)
El problema general de empaquetamiento circular debe ser modelado como un problema de programación no lineal, donde el objetivo es encontrar una disposición que permita la ubicación de piezas cilíndricas de diferentes radios de forma que se minimice la cantidad de radio desperdiciado.
La letra I simboliza el conjunto de todos los elementos a ser empaquetados e i
simboliza un elemento de I. El radio y las coordenadas del ith elemento son ir y
( , )i ix y respectivamente. El sistema cartesiano mostrado en la figura 3.2 con el
origen en el centro del contenedor considera todo el conjunto de los diferentes pares de cada elemento expresado como:
( , ) : , ,H i j i I j I j i (3.17)
34
X
Y
ro
xj
yi
yj
xi
Figura 3.2. Sistema Cartesiano del contenedor cilíndrico
Con los símbolos definidos e inspirados en el estudio de George [20] el problema está modelado de la siguiente forma:
0
:
Minimizar r
Sujeto a(3.18)
2 20 ,i i ix y r r i I (3.19)
2 2( ) ( ) i j i j i jx x y y r r
( , )i j H
(3.20)
0 ,r (3.21)
,i ix y (3.22)
i H (3.23)
35
En estas expresiones, ir es conocido como un número real positivo, ,i ix y y or son
desconocidos, i I . En este modelo hay (2n + 1) variables continuas determinísticas y n + n (n+1)/2 restricciones donde n es el número de elementos a ser empacados, 1, 2,....,I n . La Ec. (3.19) garantiza que ningún elemento quede
por fuera del contenedor . La Ec. (3.20) Indica que no haya traslape de las piezas.
Un conjunto de números reales 1, 1,..., ,o n nr y x y x y que satisfaga las Ec. (3.19) y
(3.20) se denomina solución factible.
3.4. Modelo matemático del problema bidimensional propuesto por Gilmore y Gomory
El modelo matemático para problema de empaquetamiento en dos dimensiones está dado por un conjunto de n piezas rectangulares cada una de ellas tiene una altura hi y con anchos wi i=1,2,….n el objetivo es ubicar las piezas en el mínimo número de espacios rectangulares (hojas de material), cada uno tiene una altura Hy un ancho W. Se asume que 0 iw W
El primer modelo fue desarrollado por Gilmore y Gomory [22]; ellos propusieron una columna propósito basada en la enumeración de todos los subconjuntos de elementos que pueden ser ubicado en una hoja de material. Siendo Aj un vector columna binario de n elementos ija con (i=1,…,n) tomando el valor de 1 si el item i
pertenece al jth modelo y el valor de 0 en caso contrario. El conjunto de todos los posibles modelos es representado por la matriz A compuesto por todos los posibles Aj columnas (j=1,…M) y que corresponden al siguiente modelo matemático
1
minM
jj
x
S. a:
(3.24)
1
1 ( 1,..., )M
ij jj
a x i n (3.25)
0,1 ( 1,..., ),jx j M (3.26)
36
Donde jx toma el valor de 1 si el modelo j pertenece a la solución y el valor cero en
caso contrario. Se observa que las ecuaciones (3.24) y (3.26) validan el modelo en una dimensión, la única diferencia es que las '
jA s son todas columnas que
satisfacen
1
n
ij ii
a h H (3.27)
Debido a la gran cantidad de columnas que aparecen en A, la única forma de manipular el modelo es generando dinámicamente columnas a medida que se necesitan. Para una dimensión Gilmore y Gomory [31,32] tomaron la programación dinámica aprovechando la generación de columnas para solucionarlo, y asociándolo a un problema binario de mochila; para dos dimensiones ellos observaron muchas dificultades, por ello usaron una estrategia consistente en ubicar las piezas a cortar en filas formando niveles y resolviéndolo a través de dos etapas de programación dinámica.
Beasley [3] considera el problema de corte bidimensional en el cual la ganancia está asociada con cada elemento y el objetivo es maximizar la rentabilidad del subconjunto de elementos ubicados en una única hoja de material (Problema de corte). Este problema fue formulado como un problema de programación lineal entera en una representación discreta del espacio geométrico y usando coordenadas en las cuales los elementos pueden ser localizados denominado las variables de la siguiente manera:
1 s i e l i t e m i e s lo c a li z a d o e n la e s q u in a d e r e c h a e n e l p u n to ( p ,q )
d e o t r a f o r m a0i p qx (3.28)
Para 1,... , 0,... 0,...,i ii n p W w y q H h
3.5. Modelos de programación lineal entera (PLE) para empaquetamiento de niveles bidimensionales propuesto por Lodi
Los problemas de PLE involucran un número polinomial de variables y restricciones que han sido obtenidas por Lodi en [36] Para un caso especial donde las piezas deben ser ubicadas por niveles.
Muchos de los algoritmos de aproximación para (2/B/O/M) se resuelven ubicando los elementos en filas formando niveles. El primer nivel es el fondo de la hoja de material y los elementos son ubicados en el fondo. El siguiente nivel está determinado por la línea horizontal dibujada en la parte superior del ítem más alto ubicado en el nivel inferior y así sucesivamente ver fig 3.3
37
12
46
3 5
( )a ( )b
Figura 3.3. a) Nivel de empaquetamiento; b) Nivel normalizado del empaquetamiento.
3.6. Modelo del problema restringido y doblemente restringido bi-dimensional propuesto por Parreño.
Dentro del marco referencial se ha descrito este modelo matemático, se menciona nuevamente para explicar el modelo con un ejemplo numérico.
Definido formalmente, el problema consiste en cortar un rectángulo de dimensiones (L,W) que se denomina tablero, de longitud L y anchura W, un conjunto de rectángulos ( , )i il w que se denominan piezas, de longitud il y anchura
iw ( 1,..., )i m . Cada pieza tiene orientación fija, es decir, no puede ser rotada. Los
cortes deben ser paralelos a los lados del tablero. El número de piezas de cada tipo i debe estar dentro de unos límites. ,i iP Q con (0 )i iP Q . Por notación se
define
1
m
ii
M Q (3.29)
El problema no restringido, donde no existen límites, ni superiores, ni inferiores, para el número de piezas a cortar de cada tipo, excepto la cota superior trivial:
ii i
L WQ
l w1,..., .i m (3.30)
38
El problema restringido, donde está acotado superiormente el número de piezas de cada tipo se pueden utilizar:
ii i
L Wi Q
l w(3.31)
El problema doblemente restringido, donde además de estar acotado el número máximo de algunos tipos de piezas a cortar, se exige cortar un número mínimo de piezas de algunos tipos: 0ii P .
Se define la eficiencia de un tipo de pieza i como /( )i i i ie v l w , es decir, el beneficio
por unidad de superficie de la pieza de tipo i. En la figura 3.4 se observa un ejemplo donde hay un tablero (10,10) el número de piezas es m=10 y el número de piezas posibles a cortar es M=21. En la figura 3.4(a) se observa la solución óptima para el problema restringido, donde se obliga a cortar algunas piezas, concretamente para las piezas tipo: 1,2,3,7 donde al menos se debe cortar una pieza.
Piezail iw iP iQ iv ie
1 3 2 1 2 7 1.166
2 7 2 1 3 20 1.428
3 4 2 1 2 11 1.375
4 6 2 0 3 13 1.083
5 9 1 0 2 21 2.333
6 8 4 0 1 79 2.468
7 4 1 1 2 9 2.25
8 1 10 0 1 14 1.4
9 3 7 0 3 52 2.476
10 4 5 0 2 60 3
Tabla 3.1 Datos ejemplo Tablero: L=10 W=10
39
7
6
5
3 4
1 2
8
9
10
10
9 9
11
72
7
10
3
9 9
1
7
a) Restringido. Óptimo 247b)Doblemente restringido. Óptimo 220
10
Figura 3.4. Problema restringido y doblemente restringido
3.7. Problema de empaquetamiento cuando sólo es conocido el ancho del tablero ó Strip packing problem.
Strip packing problem (SPP) pertenece a la categoría de problemas de empaquetado con muchas aplicaciones en la industria. Trata la disposición de un conjunto de rectángulos de diferentes dimensiones sobre una anchura fija y altura indeterminada, de manera que la altura alcanzada por dichos objetos sea la menor posible. Estos objetos no pueden superponerse y, en determinados casos, pueden ser girados respecto a su orientación inicial. El objetivo de tal disposición es minimizar el área desperdiciada o residuos, que correspondería con aquellas zonas de los patrones ni ocupadas por ninguna pieza.
Para el caso bidimensional los ítems a empaquetar son rectángulos. Por lo tanto, los rectángulos R(wi,hi) (para i = 1, ..., n, donde wi representa la anchura e hi la altura del rectángulo i) han de ser colocados sobre un objeto llamado banda, de anchura fija (w) y altura, en principio, infinita, teniendo como objetivo final minimizar la altura alcanzada por los mismos (Figura 3.5). Para ello, los rectángulos, que no pueden solaparse, tienen que cumplir una serie de requisitos:
• Como mínimo, uno de los lados de cada rectángulo ha de tener una longitud menor a w.
40
• Una vez colocados, los lados de los rectángulos han de estar paralelos a los ejes de la banda.
• Los rectángulos pueden ser o no rotados ± 90º.
A estas restricciones se le suele unir una más, relativa a si las piezas colocadas han de seguir algún corte de tipo guillotina. Un corte es de tipo guillotina si cuando se aplica sobre un rectángulo produce dos rectángulos nuevos. Un patrón de ordenación (o solución final) es de tipo guillotina si se puede obtener por sucesivos cortes de tipo guillotina [41]. En otras palabras, la disposición final de los objetos en el patrón es de tipo guillotina, si la misma puede ser conseguida mediante sucesivos cortes de lado a lado de alguno de los rectángulos que se van obteniendo con anterioridad. En caso contrario, se dice que el problema es de tipo no guillotina.
Cada solución al problema del SPP vendrá representada por un conjunto de permutaciones {(ri,ai,bi) para i = 1, ..., n} de los rectángulos {R(wi,hi) i = 1, ..., n},donde:
• ri representa si R(wi,hi) es rotado o no (ri=0 representaría al objeto no girado).
• (ai,bi) son las coordenadas de la posición de la esquina inferior izquierda del rectángulo respecto al origen de coordenadas (Figura 3.6).
Altura alcanzada
w
h
Figura 3.5. Solución para un problema restringido.
41
Figura 3.6. Solución para un Ítem.
El problema del SPP está ampliamente documentado por un gran número de trabajos. En base a diversas heurísticas y metaheurísticas, se han desarrollado gran cantidad de algoritmos cuyo objetivo es encontrar, dentro del conjunto de posibles soluciones, aquella o aquellas cuya altura final esté más próxima al valor óptimo del problema. En el trabajo de Turton y Hopper [31], se puede encontrar una amplia referencia acerca de estos procedimientos heurísticos y metaheurísticos aplicados a la problemática del SPP bidimensional.
3.8. Modelo Matemático Propuesto - Problema restringido bidimensional tipo guillotina
3.8.1. Propuesta 1
El problema ha sido formulado como un problema lineal entero en [36], en una primera aproximación a la solución del problema se abordó un nuevo planteamiento. Para una adecuada formulación matemática del problema, se implementa la siguiente notación:
L: altura del tablero rectangular de almacenamiento.
W: ancho del tablero.
M: número total de piezas rectangulares a ser ubicadas.
i {1,2,…,m}: conjunto de índices de los tipos de rectángulos.
li: altura de la placa rectangular de tipo i.
wi: ancho de la placa de tipo i.
k: alternativa de solución k conformada por dos vectores(uno de piezas y otro de cortes)
42
Sk: número máximo de secciones de la alternativa de solución k.
La expresión matemática de la función objetivo para una alternativa de solución kes:
.secciones( 1)
.placas( ) .placas( )1 .secciones( ) 1
- k k
k k
k
S s
k m ms m s
Fobj L W l w (3.32)
La minimización de la función objetivo mostrada en (3.32) está sujeta al cumplimiento de las siguientes restricciones, a fin de obtener una solución factible:
Todas las piezas tienen una orientación fija, es decir, no se permiten rotaciones de 90ª. Esto significa que una placa de ancho w y altura l es distinta a una pieza de ancho l y altura w.
Las placas deben ser ubicadas dentro de la paleta de forma ortogonal. Esto quiere decir que los lados de las placas son paralelos a los lados de la paleta.
El ancho y la altura de cada placa no deben exceder las dimensiones de la paleta.
Las dimensiones de las placas y las de la paleta son números enteros positivos.
Todos los cortes realizados sobre el tablero se consideran perfectos, sin grosor.
Puede haber varias placas del mismo tipo.
El objetivo del problema consiste en ubicar las placas sobre la paleta de forma que la diferencia entre el área de la paleta y el área total ocupada por las placas sea mínima (minimizar el desperdicio). Una alternativa factible de solución será aquella en la que todas las placas quedan contenidas dentro del tablero, ubicadas ortogonalmente y sin traslaparse unas con otras. Por lo tanto, se pretende encontrar una solución factible que minimice el área desperdiciada.
3.8.2. Propuesta 2
Esta segunda propuesta se basa en un modelo planteado por el profesor Víctor Parada en [55] y consiste en la siguiente expresión.
Se define el problema formalmente así: se tiene (W,L) y ( , )i iw l pares ordenados
que denotan las dimensiones del tablero y de la pieza i a cortar respectivamente. Sean además i ix y b la cantidad mínima y máxima demandada de cada una de las
piezas y se denota con n el número total de piezas demandadas, adicionalmente no se permiten rotaciones La formulación del problema se describe con las siguientes ecuaciones [55].
43
i i iMin WL w l x
S.a
(3.33)
1 i n (3.34)
,ix entero i (3.35)
Cortes factibles (3.36)
La figura 3.7 se muestra dos patrones de corte, uno factible (a) y uno infactible (b)
(a)(b)
Figura 3.7. (a) Corte guillotina, (b) Corte no guillotina
3.8.3. Propuesta 3
Dado un número finito n piezas rectangulares de área Ai x i Ay i que deben ser
ubicadas en un tablero igualmente rectangular de área AT xT AyT . El problema se define como restringido cuando se limita el número máximo de piezas (D) a ubicar de cada tipo. No es necesario que todas las piezas sean ubicadas en el tablero. La función objetivo consiste en maximizar el área efectiva utilizada en el tablero principal.[56]
El modelo propuesto divide el tablero principal en sub-espacios (S) asegurando que en cada sub-espacio se ubiquen piezas de un mismo tipo formando una matriz rectangular de piezas como se muestra en la figura 3.8(a).
44
Subespacio
A
SubEspacio
B
(a) (b)
Figura 3.8. Generación de subespacios
Adicional a esto, los sub-espacios deben ser seleccionados de tal forma que el corte sea tipo guillotina. Un corte es factible de tipo guillotina si cuando al ser aplicado sobre un rectángulo produce dos nuevos rectángulos, es decir, si el corte va de un extremo a otro del rectángulo original; en otro caso se denomina de tipo no guillotina [56].
En cada sub-espacio generado por los cortes tipo guillotina debe ser ubicada la mayor cantidad de piezas del mismo tipo de tal forma que el desperdicio total sea minimizado, un forma de lograrlo consiste en ubicar piezas del mismo tipo en un arreglo matricial como se muestra en la figura 3.8 (b). Un arreglo de estas características puede ser generado por una secuencia de cortes guillotina aún en los casos en donde la demanda restrinja posiciones nulas (espacio sin utilizar).
El problema propuesto puede ser modelado matemáticamente de la siguiente forma:
(3.37)
(3.38)
(3.39)
45
(3.40)
(3.41)
(3.42)
(3.43)
(3.44)
(3.45)
En donde
f: función objetivo : desperdicio total
Ai : área de cada una de las posibles piezas.
Uki : numero de piezas del tipo i colocadas en el sub espacio k horizontalmente
Vki: numero de piezas del tipo i colocadas en el sub espacio k verticalmente
Ns: número de subespacios.
N: números naturales (enteros positivos).
n: número de tipos de piezas.
Di :demanda por cada tipo de pieza.
Xk : ancho del subespacio.
Yk: : altura del subespacio.
46
El producto corresponde al número de piezas totales del tipo i localizadas en el sub-espacio k, mientras que el número de piezas ubicadas debe ser un número natural tal como se muestra en Ec.(3.38). El total el número de elemento de cada tipo debe ser inferior a la demanda del mismo Ec.(3.39) y en cada sub-espacio los elementos ubicados en forma de arreglo matricial deben ser factibles lo cual significa que el número de elementos horizontales multiplicados por la longitud de cada elemento debe ser menor a la longitud del sub-espacio ( ) como se muestra en la Ec.(3.40) y análogamente en la Ec.(3.41) para el caso vertical.
Para asegurar que las piezas ubicadas en cada subespacio sean del mismo tipo se plantean las Ecs. (3.42) y (3.43). Esa restricción además de permitir el desarrollo de un constructivo eficiente, garantiza que los cortes en los subespacios sigan siendo de tipo guillotina. Así mismo, la Ec.(3.44) indica que el corte debe ser tipo guillotina.
47
4. HEURISTICAS CONSTRUCTIVAS y CODIFICACION
Figura 4. Tabla 4.
4.1. Explosión Combinatorial
La solución de problemas combinatoriales, normalmente está asociada a un proceso de búsqueda. Salvo en problemas muy simples, la búsqueda de soluciones no puede realizarse en forma exhaustiva, por lo que los investigadores han desarrollado una gran cantidad de métodos alternativos de búsqueda que encuentran soluciones “de buena calidad”' y en muchos casos inclusive óptimas. Lo mismo aplica para solucionar problemas de optimización para los cuales se han desarrollado métodos aproximados, a veces involucrando cierta aleatoriedad.
4.1.1. El problema: Explosión combinatoria
La manera empírica de solucionar problemas combinatorios es a través del ensayo y el error.: En un primer paso se enumeran todas las combinaciones de las cuales se seleccionan las soluciones que satisfagan las condiciones del problema planteado en un segundo paso. En la mayoría de los casos sin embargo, “generar y probar” no es aceptable en términos del tiempo computacional. Esto es obvio si el sistema de combinaciones es infinito. Pero aunque sea finito muchas veces es muy grande, y se presentan casos donde el espacio de combinaciones crece de forma exponencial. En este caso, la generación de combinaciones genera una explosión combinatoria (del cuál generalmente sólo es posible realizar una búsqueda exhaustiva invirtiendo varios miles de millones de años)[45].
4.1.2. Problemas que requieren satisfacción de restricciones
Un ejemplo típico es un problema que consta de n variables desde V1,…, Vn que toman respectivamente valores en un rango finito, tales como un intervalo de números enteros. El problema es encontrar asignaciones de valores a las variables tales que satisfagan las restricciones del modelo, en este caso que estén dentro del intervalo permitido.
Si por ejemplo se considera el caso donde se tienen 15 variables V1,…, V15, con la condición que los valores que pueden tomar las variables deben estar en el dominio de {1,…, 15} y para cuál se desean encontrar todas las soluciones que satisfagan las siguientes restricciones:
48
V1 < V2
V2 < V3
...
V14 < V15
Claramente, hay solamente 1 solución a este problema, a saber:
V1 =1, V2 =2,…, V15=15
A continuación se muestran algunas técnicas heurísticas para resolver problemas combinatoriales.
4.1.3. Generar y probar
Se pueden enumerar las asignaciones posibles escogiendo una variable no-asignada, eligiendo un valor en su dominio como su asignación, y repitiéndolo hasta que todas las variables se le asignen valores. Este proceso crea un árbol, donde cada nodo interno de este árbol corresponde a una opción no determinística del valor para asignar a una variable, y las hojas son todas asignaciones completas posibles.
Las hojas que satisfacen las restricciones del problema serían soluciones factibles. Las que violan las restricciones serían soluciones infactibles. Para ser más gráfica la situación se muestra en la figura 4.1 como se construye el espacio de soluciones, donde los círculos violetas representan valores elegidos, los cuadrados rojos representan valores infactibles, los valores factibles son representados por los diamantes verdes. Los triángulos verdes y rojos indican que el árbol no puede seguir creciendo por esas regiones.
Figura 4.1. Representación del espacio de soluciones.
49
Para el problema en estudio, hay 15 variables, cada una de las cuales toma uno de 15 valores posibles: esto significa que hay 15^15 = 437.893.890.380.859.375asignaciones posibles. Siendo optimistas y suponiendo que se dispone de una computadora rápida capaz de comprobar las asignaciones 10^9 por segundo para decidir si cada uno puede ser una solución factible o infactible, la comprobación de todas las posibilidades toma aproximadamente 14 años.
4.1.4. Interpolación de la generación y de la comprobación
La técnica de “Generar y probar” genera asignaciones y las chequea cuando todos los valores se han generado, en ese momento revisa si la solución es factible o infactible. Se puede mejorar el proceso interpolando la generación y la comprobación: después de que cada opción se puede comprobar si cualquier restricción se viola. Por ejemplo, en el problema las restricciones planteadas son V1 < V2, V2 < V3, ...,V14 < V15. Así, tan pronto como se han generado valores paraV1 y V2 , se puede comprobar inmediatamente si V1 < V2
4.2. Heurísticas en optimización combinatorial.
En este tema se van a presentar las ideas básicas de las técnicas de optimización heurística en dominios discretos.
Conviene recordar que la formulación general de un problema de Investigación Operativa consiste en optimizar f(X), siendo:
( )
.
( ) 0
( )
0
Optimizar f X
s a
H X
G X B
X
Teniendo en cuenta que optimizar puede ser maximizar o minimizar, y que tanto la función objetivo como las restricciones puede ser de carácter lineal y no lineal.
Tratando de buscar la etimología de la palabra heurístico se encuentra que proviene del griego heuriskein, término que puede ser traducido por encontrar o descubrir.
También la expresión utilizada por Arquímedes, eureka, que significa "lo he encontrado", al descubrir el denominado principio de Arquímedes, está relacionada con el término heurístico.
Mucho más cercano en el tiempo, el término heurístico fue utilizado a mediados del siglo pasado por dos de los precursores de la Inteligencia Artificial. Polya en 1957 en su obra How to Solve It lo utiliza por vez primera en este contexto. Años más
50
tarde Simon (1963) define heurístico como un proceso que puede resolver un problema dado pero no ofrece garantía de encontrar el óptimo.
La definición que hoy en día más se ajusta al sentido con el que se usa la palabra heurístico es la siguiente: procedimiento simple, a menudo basado en el sentido común, que se supone va a ofrecer una buena solución (no necesariamente la óptima) de un modo fácil y rápido a problemas difíciles.
La justificación de métodos heurísticos se fundamenta en el hecho de la existencia de problemas de optimización pertenecientes a la categoría denominada NP. Es decir, los problemas para los que no existe un algoritmo de solución que sea polinomial con el tamaño del problema. Si se demuestra que un problema de optimización pertenece a esta categoría de problemas NP, es práctica habitual el abordarlo por medio de heurísticos de optimización. Desde un punto de vista práctico, para aquellos problemas donde la búsqueda exhaustiva sea ineficiente o para aquellos problemas donde la cardinalidad del espacio de búsqueda aumenta exponencialmente con el tamaño del problema, va a tener sentido la utilización de algoritmos heurísticos, como es el caso de este trabajo.
Por lo que respecta a las ventajas derivadas de la utilización de heurísticos para resolver problemas de optimización, quizás la más importante sea la mayor flexibilidad en el manejo del problema que se deriva de las mismas en contraposición con el formalismo que implican las técnicas de la investigación operativa clásica. El gran inconveniente derivado de la utilización de los métodos heurísticos radica en que no es posible conocer a priori la calidad de la solución obtenida con los mismos, desconociéndose por tanto la cercanía de dicha solución con respecto al óptimo global.
Tratando de establecer unos criterios genéricos acerca de en qué condiciones se aconseja utilizar estos procedimientos heurísticos, se tiene que su uso es adecuado cuando se verifica una o más de las siguientes condiciones:
No existe un método exacto de solución, o en el caso de que dicho método exacto exista, el mismo requiere de mucho gasto computacional o de memoria.
No es necesario encontrar la solución óptima, en el sentido del óptimo global sino que es suficiente con obtener una solución suficientemente buena.
Los datos son poco confiables y por tanto no tiene sentido el tratar de encontrar el óptimo global para dichos datos, ya que el mismo no puede ser más que una aproximación al óptimo global que corresponde a los datos correctos.
Existen limitaciones de tiempo en proporcionar la respuesta o de memoria en computador que va a efectuar los cálculos
Se va a utilizar el resultado proporcionado por el heurístico de optimización como solución inicial para un algoritmo exacto de tipo iterativo, el cual reduciría
51
considerablemente el número de iteraciones si parte de una solución inicial suficientemente buena.
Desde un punto de vista de estrategias usadas para llevar a cabo búsquedas heurísticas se pueden distinguir básicamente cuatro tipos: constructivas, mejora de una solución, de descomposición y de reducción.
La idea básica en las búsquedas heurísticas constructivas consiste en ir añadiendo componentes individuales a la solución inicial hasta que se obtiene una solución inicial factible. Un ejemplo de búsqueda heurística constructiva es la búsqueda voraz.
En las búsquedas heurísticas basadas en la mejora de una solución, se parte de una solución para en cada paso buscar en la vecindad de la misma una solución mejor, la cual en el caso de que exista reemplaza a la solución actual.
La búsqueda heurística basada en la descomposición divide el problema en subproblemas más manejables, de modo que al resolver dichos subproblemas se obtiene una solución al problema inicial por integración de las soluciones obtenidas en cada subproblema. La más famosa heurística de descomposición es la denominada “divide y vencerás”.
Finalmente, existen algunas búsquedas heurísticas basadas en la técnica de reducción. Se trata en este caso de identificar alguna característica que presumiblemente debe poseer la solución óptima, para de este modo simplificar el problema de búsqueda.
Las heurísticas pueden ser dependientes del problema o independientes del mismo. Las primeras, conocidas como heurísticas, son válidas únicamente para el problema particular para el que han sido diseñadas, mientras que las segundas, las llamadas metaheurísticas, pueden aplicarse a cualquier problema.
El problema de corte bidimensional restricto que se trata en este trabajo tiene una magnitud del espacio de búsqueda tan grande que supera el espacio de búsqueda del problema del agente viajero. Si por ejemplo n=25 rectángulos entonces el espacio de soluciones está dado por 252 .25! , que representan el número de patrones de empaquetamiento posibles, razón que justifica la exploración de herramientas heurísticas y metaheurísticas que permitan dar alternativas de solución para el problema [23].
4.3. Heurísticas Constructivas aplicadas a la solución del problema de corte de piezas bidimensional.
Se explica a continuación los métodos heurísticos propuestos para el problema. En primer lugar se enunciaran los métodos constructivos y posteriormente las codificaciones propuestas.
52
4.3.1. Métodos Constructivos para corte no guillotina
Estrategia BL y BLF
Algunas propiedades del algoritmo BL son las siguientes:
El primer elemento es un límite superior a los patrones posibles del empaquetamiento.
Dados n rectángulos, el número 2 . !n n es un límite superior para patrones de empaquetamiento los cuales deben ser calculados por el algoritmo BL. Esta es una consecuencia del concepto de que el problema de empaquetamiento es un problema permutacional. Además hay n! secuencias de rectángulos. Además cada rectángulo debe ser ubicado en dos direcciones, las cuales deben ser paralelas a los ejes x y y. En la práctica menos de 2 . !n n pueden ser creados por el algoritmo BL. [21].
La estrategia BL dicta que cada pieza a colocar se posiciona inicialmente en la esquina superior derecha de la estructura. A continuación, se desplaza hasta la posición más profunda posible. Una vez allí, la pieza es movida hacia la izquierda tanto como sea posible, repitiéndose esta rutina hasta que la pieza alcance una posición inamovible. El problema fundamental que presenta esta estrategia es que conduce a soluciones con gran número de desperdicios o residuos en el tablero a ocupar. En la figura 4.2 se presenta gráficamente cómo actúa dicha estrategia. Con el objetivo de minimizar el desperdicio de espacio, se propone el uso de la estrategia BLF, que tiene ciertas similitudes a la BL, aunque antes de colocar la pieza se comprueba que ésta no cabe en ninguno de los espacios generados hasta el momento a un nivel inferior. De nuevo, en la figura 4.2 se muestra la solución a la que daría lugar esta estrategia para una pieza determinada. [17]
La estrategia BLF consiste en encontrar un espacio para la pieza comenzando desde la esquina inferior izquierda de la banda (origen de coordenadas). Esta comprobación se hace nivel a nivel desde el fondo de la banda. En todos los casos se probó inicialmente con la orientación de la pieza que hacía corresponder como base del rectángulo a su lado mayor. En caso de no encontrar ubicación para la pieza dentro de un determinado nivel antes de pasar al nivel inmediatamente superior. Todo el proceso descrito anteriormente se repite hasta la colocación completa de todas las piezas, dando como resultado del procedimiento constructivo una solución del problema.
53
BLF
BL
Trayectoria
Figura 4.2. Estrategias BL y BF
Estrategia BL y DP
Como se mencionó en el capitulo 2 la estrategia Difference Process (DP) intenta colocar cada pieza en la esquina posible del resto del diseño más cercana a la esquina inferior izquierda del tablero. Para medir cuál es la posición se emplea la distancia euclídea. Al igual que con el método anterior existen patrones que no puede alcanzarse con esta estrategia [41].
A continuación se ilustrará con un ejemplo, la estrategia BL Y DP.
Ejemplo 4.1
Se tiene la instancia de la figura 4.3 y se supone el orden inicial (1,2,3,4,5). En primer lugar se coloca 1 pieza en la posición (0,0) que está a una distancia 0 de la esquina inferior. Una vez colocada la primera pieza se tienen dos posibles esquinas para colocar la segunda pieza: (0,10) y (20,0) si se toma la distancia euclídea, la posición más cercana es la (0,10). Por tanto se coloca la pieza en la posición (0,10). Por tanto se ubica la pieza 2 en la posición (0,10). Para la pieza 3 se tienen las siguientes localizaciones (esquinas) posibles:(0,15),(10,10),(20,0). La posición de mínima distancia es (10,10), se ubica la pieza 3 en (10,10). Si se continúa este procedimiento, para la pieza 4 no existiría ninguna posición posible y se estudia la pieza 5 que se ubicaría en la posición (20,0)[9]. El diseño final para este procedimiento puede observarse en la figura 4.3b
54
Tablero: L=30 W=20
Pieza il i iP iQ área ie
1 20 10 0 1 200 1
2 10 5 0 1 50 1
3 10 10 0 1 100 1
4 11 6 0 1 66 1
5 10 12 0 1 120 1
Tabla 4.1. Tabla de datos ejemplo 4.1
1
2
3
4
1
2
3
5
a) Constructivo BL b) Constructivo DP
Figura 4.3. Algoritmos Constructivos
Un método diferente para acomodar las cajas es propuesto por Wu [33]. Es un procedimiento determinista en el que se intenta colocar las cajas en primer lugar en las esquinas y posteriormente en el centro. El algoritmo original es para el problema especial, donde i iP Q i i iP Q i y se permite que las piezas sean
rotadas, pero puede transformarse para el problema general que se está considerando. El algoritmo va cortando las piezas de una en una, en una esquina del espacio vacío que queda en cada instante. Para elegir la pieza a cortar y la esquina en la cual cortarla desarrolla una función de evaluación que estima el beneficio que se obtendría al completar el corte a partir de dicha pieza.
4.3.2. Métodos Constructivos para corte guillotina
El problema que se pretende resolver en este trabajo es el de corte guillotina por tanto fue necesario hacer una implementación del BL para obtener patrones de empaquetamiento de este tipo, a continuación de expone la propuesta:
55
Estrategia MSPE (Modelo de selección de piezas y escalonamiento)
Esta metodología aparece en [12], no se implementó completamente en el desarrollo de este trabajo, pero se documenta porque se tomaron algunas ideas que se proponen para hacer la adaptación del BL modificado.
Para explicar la estrategia MSPE se hará con base en los datos del trabajo de [12], en la tabla 4.2 están incluidos los datos.
Tipo de pieza Altura Ancho Área
1 18 22 396
2 29 8 232
3 19 19 361
4 13 16 208
5 29 8 232
6 16 4 64
7 13 16 208
8 18 22 396
9 19 19 361
10 29 8 232
Tabla 4.2. Datos del problema presentado por Oliveira y Ferreira[12]
En esta estrategia, la primera pieza a ser ubicada debe ser la de mayor área calculada. Las siguientes piezas a ubicar se determinan por el peso entre la última colocada y la próxima que proporcione el mejor encaje determinado por un peso que corresponde a la menor área de desperdicio entre las dos piezas. La pieza ubicada se evalúa con todas las otras que no han sido ubicadas escogiendo la de menor desperdicio. Las piezas son ubicadas una al lado de la otra respetando el límite lateral. Después de formar la secuencia se guardan las coordenadas de cada corte que pertenece al plano de corte. En la tabla 4.3 se muestran los pesos entre una pieza y otra, los valores de la matriz corresponden a los pesos entre piezas.
La matriz de pesos contiene los pesos entre una pieza (fila) y otra pieza (columna) que son evaluadas durante la construcción de una P- Mediana y un conjunto de piezas proyectadas.
56
Piezas 1 2 3 4 5 6 7 8 9 10
1 - 126 57 78 126 24 78 0 57 126
2 126 - 190 169 0 52 145 126 190 0
3 57 180 - 39 180 12 96 57 0 180
4 78 169 39 - 169 0 18 78 39 169
5 126 0 190 169 - 52 145 126 190 0
6 24 52 12 0 52 - 0 24 12 52
7 78 145 96 18 145 0 - 78 96 145
8 0 126 57 78 126 24 78 - 57 126
9 57 190 0 39 190 12 96 57 - 190
10 126 0 190 169 0 52 145 126 190 -
Tabla 4.3. Matriz de pesos entre piezas
Entre las figuras 4.4 a 4.10 se muestra la ejecución paso de la construcción del conjunto de piezas proyectadas.
1
Figura 4.4. Ubicación de la primera pieza
En la figura 4.4 el primer elemento conjunto es ubicado y corresponde a la pieza de mayor área, se localiza en la esquina inferior izquierda.
piezas 1 2 6543
126-1
10987
24 126570781267857
Figura 4.5. Pieza contigua a 1 con menor desperdicio
57
1 8
Figura 4.6. A partir de la primera pieza la próxima a ser escogida es la pieza 8
En la figura 4.5 se evalúan los pesos de la pieza 1 con todas las restantes, fue elegida la pieza 8 que tiene un área de desperdicio menor que todas las otras piezas, como dos de las piezas tienen la misma dimensión, el área de desperdicio es nula.
piezas 1 2 6543
12608
10987
24 12657-781267857
Figura 4.7. Pieza contigua a 8 con menor desperdicio
1 8 6
Figura 4.8. A partir de la pieza 8 la próxima elegida por la evaluación es la 6
Este algoritmo avanza con base en la última pieza ubicada, ahora se revisa la matriz y se elige la pieza que genere menor desperdicio al lado de la pieza 6.
En la figura 4.9 se pueden observar todas las piezas ubicadas, en la figura 4.10 se muestra una matriz donde las filas y las columnas indican todas las piezas y los valores dentro de la matriz indican las cantidades de desperdicio entre dos piezas ubicadas consecutivamente.
58
1 8 6 4 7
3 92 5 10
Figura 4.9. Ubicación de las piezas
Piezas 1 2 9876543
4
3
2
1 -
9
8
7
6
5
10
10
78241267857126
520169190-126
126570
1218039-18057
0190126145
39
126
16978
18005796
180169-
-
5224
1691900
1693978
4578
5212240-520
0
12
19012614552
-190126145520169
57-579612
1900126
19039
12657-7824126
0
78
19057
571260
1459678-01451896
Figura 4.10. Matriz de desperdicios
Estrategia BL modificada para corte guillotina
La estrategia BL modificada se puede resumir en los siguientes pasos [55],[57]:
1. Se ordenan las piezas de acuerdo a sus alturas en orden descendente.
59
2. Se ubica la pieza más alta en la parte inferior izquierda, en las coordenadas de origen (0,0), teniendo en cuenta que la altura de esta pieza debe ser menor ó igual que la altura del tablero. El ancho de la pieza insertada indica la primera coordenada guía en el eje X.
3. La siguiente pieza se elige como la más alta entre las que no hacen parte aún de la configuración actual; el ancho de esta pieza es evaluado y si sumado a la coordenada guía en el eje X el valor obtenido es menor que el ancho del tablero, se posiciona al lado derecho de la última pieza insertada en las coordenada guías en los ejes X e Y. Este procedimiento se repite hasta ubicar la mayor cantidad de piezas permitidas por el ancho del tablero, conformando así el nivel actual. La nueva coordenada guía en el eje X es la acumulación de los anchos de las piezas del presente nivel.
4. A continuación se evalúa la diferencia de alturas de piezas consecutivas, con el fin de identificar espacios donde se pueden encajar piezas respetando el límite superior impuesto por la pieza más alta del nivel actual.
5. Cuando ya no es posible ubicar más piezas en un nivel el proceso descrito anteriormente es iniciado de nuevo a partir del paso 3. La nueva coordenada guía en el eje Y es la acumulación de alturas de las piezas más altas de los niveles anteriores y la nueva coordenada guía en el eje X es 0.
6. El proceso para cuando no es posible ubicar más piezas sin sobrepasar la altura del tablero.
Con base en los datos del ejemplo 4.1 se implementó la estrategia propuesta obteniendo el resultado que se muestra en la figura 4.11:
5 1
4 2
Figura 4.11. BL modificado para corte guillotina
Comparación de resultados
60
En la tabla 4.4 se muestran las distintas heurísticas aplicadas al ejemplo 4.1.
Método Piezas Área ocupada Desperdicio
BL 1,4,3,2 486 19%
DP 1,2,3,5 470 21.7%
BL modificado 5,1,4,2 436 27.4%
Tabla 4.4. Comparación de eficiencias de los métodos
Aunque el desperdicio es mayor con la estrategia BL modificado si se pretende resolver un problema de corte bidimensional tipo guillotina es la que se debe implementar porque es la que cumple con la restricción de tipo de corte.
4.4. Codificación para problemas de corte bidimensional
Los problemas resueltos con metaheurísticas requieren una codificación que represente las alternativas de solución, tradicionalmente para aplicar algoritmos genéticos se ha aplicado la codificación binaria, pero en la literatura especializada han aparecido propuestas de codificación ordinal que representan eficientemente alternativas de solución para algunos casos específicos [50]
La representación natural de un patrón de empaquetamiento es basada en la ubicación de coordenadas de localización de cada rectángulo en el tablero. Si la parte inferior izquierda y la esquina de la parte superior derecha de todos los rectángulos son conocidas, entonces el patrón de empaquetamiento puede ser reconstruido fácilmente, la figura 4.12 es una explicación de este concepto.
La ventaja de una representación natural está ligada con una fácil reconstrucción. Pero si hay pequeños cambios en las coordenadas es probable que el patrón de empaquetamiento se traslape [32].
y
x
4r 2r
5r3r
1r
Figura 4.12. Representación natural de un patrón de empaquetamiento
61
4.4.1. Codificación por permutaciones para corte no guillotina propuesta por Jakobs
Para adaptar la representación natural al algoritmo genético Jakobs [32] propone lo siguiente:
Un patrón de empaquetamiento puede se representado por un permutación .
ji - Indica el rectángulo ( )( )i jr .
1( ,..., )ni i es una permutación.
La permutación representa la secuencia en la cual los rectángulos son empacados. La ventaja de este tipo de estructura es la fácil creación de nuevas permutaciones cambiando la secuencia. Una consecuencia de esta estructura es que en cada permutación es asignado un único patrón de empaquetamiento. Para decodificar el genotipo es necesario un algoritmo eficiente que lo convierta en la representación natural.
Por ejemplo en la figura 4.13 dos permutaciones representan el mismo patrón de empaquetamiento.
Esta dificultad debe ser subsanada por un algoritmo que represente gráficamente la solución propuesta, y de esta forma hacer un cálculo correcto del espacio sin utilizar.
x
y
1r
2r
3r
1
2
(1, 2, 3)
(1, 3, 2)
Figura 4.13. Dos permutaciones con el mismo patrón de empaquetamiento.
Por esta razón en el desarrollo de este trabajo se propusieron algunas alternativas de codificación que se presentan a continuación
62
4.4.2. Propuesta 1: Codificación a través de dos vectores para corte guillotina
Una alternativa de solución está codificada por dos vectores. El primero, denominado “piezas”, contiene una secuencia de ubicación de piezas según el tipo. Dicho vector es de un tamaño igual al número total de piezas. El segundo vector se denomina “Secciones” y contiene los intervalos para los cuales el primer vector ubica las piezas en una misma sección. El número total de secciones de cada alternativa es determinado de forma aleatoria. Por lo anterior, una alternativa es un arreglo de dos vectores a los cuales se puede hacer referencia como piezas y
. Secciones. La altura de una sección está determinada por la placa de mayor altura.
Una configuración factible es aquella donde se ubiquen algunas piezas de las demandadas de forma que se minimice el área sin utilizar [54].
Ejemplo 4.3
Se tiene un tablero rectangular de 24x38, donde se desean ubicar m piezas rectangulares de menor tamaño y de diferentes tipos, en la tabla 4.5 se presentan los datos de largo y ancho de cada una de las piezas y la cantidad de piezas demandadas.
Largo Ancho Cantidad demandada
Tablero 24 38
Pieza tipo 1 14 19 2
Pieza tipo2 9 6 2
Pieza tipo 3 3 6 2
Pieza tipo 4 6 6 4
Pieza tipo 5 9 3 2
Pieza tipo 6 10 1 4
Tabla 4.5. Datos del ejemplo 4.3
Así, por ejemplo, la alternativa infactible mostrada en la figura 4.14 corresponde a la ubicación de placas mostrada en la figura 4.15
.Piezas= 2 0 1 5 1 0 6 6 4 0 7 3 4 7 2 7 0 6 4 5
.Secciones = 0 6 15 20
Figura 4.14. Alternativa de solución .
El vector Secciones indica que esta alternativa posee 3 secciones, la primera comprendida entre las posiciones 0 y 6 del vector de piezas, la segunda entre 7 y
63
15 y la tercera entre 16 y 20. Esto implica que, por ejemplo, la segunda sección contiene las piezas 6, 6, 4, 7, 3, 4, 7 y 2. De esta forma, una alternativa de solución está completamente definida por los vectores Piezas y Secciones los cuales representan la forma de ubicación de las piezas en el tablero principal. La secuencia de llenado de las piezas siempre se realiza de izquierda a derecha en cada sección.
Nótese que en el vector Piezas existe la posibilidad de encontrar campos con un valor 0. Esta posibilidad permite que el algoritmo de optimización pueda, eventualmente, excluir placas de la alternativa de solución. Es decir, no es necesario que todas las placas tengan que ser ubicadas en la paleta para una alternativa de solución dada.
Sección 1
D1 D2
T2T1
T5T1
T6 T4T7 T3 T4
T7T2 Sección 2
D3D4
T4T7T5
T6
Sección 3
Figura 4.15. Representación de una alternativa de solución
En la figura 4.15 se muestra una alternativa de solución dónde el área disponible que corresponde al tablero está representada por líneas rojas, las áreas sombreadas corresponden a los desperdicios, dentro de cada uno de los rectángulos se indica el tipo de pieza que se está ubicando, y las líneas punteadas en negro indican las secciones de corte; en la sección 1 de el área desperdiciada es la suma la alternativa mostrada se puede apreciar que de los rectángulos nombrados como D1 y D2, D1 tiene dimensiones de 5 por 6, y D2 tiene dimensiones de 5 por 3, lo que da un total de área sin utilizar en esta sección de 45 unidades.
64
Sin embargo, la segunda pieza tipo 1 está ubicada por fuera de la paleta por lo cual esta sección es penalizada en un valor igual al área de la placa que causa la violación y corresponde a 14x19= 266. El área total desperdiciada en la sección 1 es 45 +266=311.
4.4.3. Propuesta 2: Codificación en diagrama de árbol para corte guillotina.
La creación de la estructura de árbol de cortes se realiza aplicando técnicas numéricas de conglomerados (clusters) tiene por objeto agrupar elementos en grupos. Cada nodo interno del árbol representa la forma en que se realiza el corte y los elementos que pertenecen a cada grupo [55]
Tamaño de la configuración
Para definir el tamaño del vector, que representará una configuración, se hace la siguiente apreciación, sí el árbol consta de 1 ó 2 piezas la configuración del árbol será la siguiente:
21
33
1 2
Figura 4.16. Árbol de 2 piezas y codificación
Tamaño del vector = 2 piezas +2 piezas -2 = 4
Si se tienen 3 ó cuatro piezas la configuración se muestra en la figura 4.17:
65
21 43
7
5 6
1 2 3 4 5 6
Clusters
Piezas
inicio de cluster
Cluster 5
Cluster 7
Cluster 6
Figura 4.17. Árbol de 4 piezas y codificación
La flecha indica que hasta esa posición van las piezas, las siguientes posiciones representan los elementos que forman clusters.
21
cluster5
Figura 4.18. Representación de un cluster
Para 7 ú 8 piezas
Tamaño del vector = ( 2 x número piezas del árbol ) - 2
Tamaño del vector = (2 x 8) -2 = 14
66
21 43 65 87
9 10 11 12
13 14
15
11
9 10 11 12 13 14
1 2 3
15
4 5 6 7 8 9 10 12 13 14
Figura 4.19. Árbol de 8 piezas y codificación
Después de tener la configuración inicial se asocia un vector que va a indicar el tipo de corte, en la formulación de esta codificación se consideran dos tipos de corte vertical y horizontal y se codifican así:
0 si es un corte horizontal y 1 si es un corte vertical.
Si el tipo de corte es horizontal la pieza que está encima se codifica en la parte izquierda del cluster y la pieza que está debajo en la parte derecha.
Si el corte es vertical se respeta la posición tal como se plantea en la figura 4.20
0 Corte horizontal
Izquierda
Derecha
1 Corte vertical
Izq. Der
Figura 4.20. Explicación de los tipos de corte
67
En el cluster que tiene corte vertical las dos piezas que lo forman deben estar en la base del mismo y sólo son posibles los tipos de ubicaciones planteados en la figura 4.21
Pieza 1
Pieza 2
Pieza 1
Pieza 2
Figura 4.21. Clusters formados por corte vertical
En el corte horizontal las dos piezas que lo forman deben ubicarse desde el tope izquierdo del corte, como se observa en la figura 4.22
Pieza 1
Pieza 1
Pieza 2
Pieza 2
Figura 4.22. Clusters formados por corte horizontal
Ejemplo 4.4
A continuación se mostrará un ejemplo con la codificación propuesta:
a) Vector de orientación, b) Vector de Clusters, c) Vector de piezas y clusters.
Tipo de pieza Largo Ancho Número de piezas
Tablero 70 42 1
Pieza 1 22 18 2
Pieza 2 8 29 3
Pieza 3 19 19 2
Pieza 4 16 13 2
Pieza 5 4 16 1
Tabla 4.6. Datos del ejemplo 4.4
68
6
7 8 9 10 11
1 1 5
12
3 3 4 4 2 2 2 7 9 8
6 13 14
11 10 12 13
1 0 0 0 1 1 1 0 1 Orientacióndel corte
Cluster
Piezas
(35,29) (79,29) (16,0) (0,0) (35,0) Coordenadasde inicio delcluster
cluster cluster cluster cluster cluster cluster cluster cluster cluster
Figura 4.23. Codificación de una posible configuración
En la figura 4.24 se demarca con líneas rojas el área disponible de tablero a ser utilizada, los clusters 8 y 10 son factibles, debido a que no superan el área del tablero, los otros clusters 9, 6 y 7 sobrepasan el área o están por fuera del mismo y las áreas en gris representan las áreas que aún no han sido utilizadas. Las coordenadas indican donde inicia cada cluster.
69
8
29
16
13
16
13
19
19
8
29
9
12 8
10
22
18
22
18
6
19
19
4
16
7
1 1
24
3
2
414
13
5
3
2
11
(0,0) (16,0) (35,0)
(35,29) (79,29)
Desperdicio
DesperdicioDesperdicio Desperdicio
Figura 4.24. Gráfico de la configuración propuesta en la figura .4.23
70
42 43 22 11
9 8 10 6
12
53
7
11
13
14
Figura 4.25. Árbol asociado al ejemplo 4.23
Con base en la figura 4.25 se puede observar que los cluster se clasifican por niveles a saber:
Cluster básicos: Es aquel que contiene dos piezas. Para el ejemplo, los nodos básicos son 6, 7, 8, 9 y 10.
Cluster de segundo nivel:Está conformado por dos cluster básicos. Nodos 11 y 12.
Cluster de tercer nivel: Nodo 13.
Cluster raíz o nodo de inicio: Es el cluster que conforma todo el conjunto de piezas.
Descenso: Análisis de clusters de niveles inferiores. Descenso por la izquierda: analizar el elemento de lado izquierdo de un cluster de nivel inferior.
Descenso por la derecha: analizar el elemento de lado derecho de un cluster de nivel inferior.
Cálculo de la función objetivo:
Primero se calculan las anchuras y las alturas de los cluster básicos, teniendo en cuenta que el área efectiva del cluster no corresponde al producto de las anchuras y alturas halladas sino a la suma de las áreas de las piezas que conforman los cluster.
Para calcular el área de cada cluster se debe tener en cuenta el tipo de corte. Si es corte horizontal se evalúa el ancho de las dos piezas y se escoge el mayor.
71
Con esto queda determinado el ancho del cluster. Para determinar el ancho se suman las alturas de las dos piezas.
1 1 1 2
6 1 1 6 1 2
3 5 3 5
7 3 5 7
3 4 3 4
8 3 4
arg
22, 22, 18, 186 1,1
44 18
19, 4 19, 167 5,3
19 19 16 35
19, 16 19,8 3,4
19
c c
c c
c
PiezasCluster Tipo l o alto
contenidas
l l a aVertical
l l l a a a
l l a aHorizontal
l l l a
l l a aHorizontal
l l l 8
4 2 4 2
9 4 2 9
2 2 2 2
10 10 2 2
13
19 13 32
16, 8 13, 299 4,2
16 29 13 42
8, 8 29, 2910 2,2
8 8 16 29
c
c c
c c
a
l l a aHorizontal
l l l a
l l a aVertical
l a a a
Tabla 4.7. Dimensiones de los cluster
La determinación de las coordenadas de los cluster, se empieza a evaluar de derecha a izquierda observando la información (tipo de corte y dimensiones de los cluster) del vector de codificación. El primer cluster es el cluster raíz, por tanto, la coordenada de éste siempre es la de origen. Con base en la figura 4.25 el nodo raíz es el nodo 14. En la figura 4.19, donde se presenta la codificación vectorial, leyendo de derecha a izquierda se encuentra inicialmente el nodo 14.
Explicación de la codificación figura 4.23
Se inicia por la parte derecha en el vector de clusters, el cluster raíz es el 14
a) ¿Cuál es el tipo de corte? Es vertical, y está conformado por dos nodos, el 12 y 13. b)¿12 y 13 son nodos básicos? no, son cluster de segundo nivel, por tanto se debe seguir descendiendo hasta llegar a un nodo básico y el descenso se hace por la izquierda por corresponder a un corte vertical, por tanto se evalúa el cluster 12.
c) Cuando se llega al cluster 12, nuevamente se evalúa el tipo de corte. ¿Cuál es el tipo de corte? Es vertical y está conformado por los nodos 9 y 8 .
d) ¿9 y 8 son nodos básicos? sí, por tanto se debe seguir descendiendo hasta llegar a evaluar que piezas lo conforman y el descenso se hace por la izquierda porque corresponde a un tipo de corte vertical,
72
e) se evalúa ahora el nodo 9. ¿Cuál es el tipo de corte? es horizontal y conformado por las piezas 2 y 4, por tanto el descenso se hace por la derecha, la pieza que está a la derecha es la que está en la base del cluster por lo tanto el cluster empieza con la pieza 2 en las coordenadas (0,0) porque la pieza 2 está contenida en el cluster 12 y a su vez este hace parte del cluster 14. Las coordenadas de finalización de este cluster para el eje x será: = 16 y para el eje y será =42
Ubicado el primer cluster, continúa el procedimiento así:
Se regresa al cluster 12 paso c) que es el nodo que contiene clusters básicos y se repite el procedimiento pero ahora descendiendo por la derecha, es decir, por el nodo 8. Este nodo corresponde a un corte horizontal lo que indica que primero debe ubicarse la pieza 4, las coordenadas de inicio de este cluster, son: para el eje x las coordenadas de finalización del cluster anterior lo que indica que empieza en la coordenada 16 para el eje x, y para el eje y inicia en el punto de origen por que el cluster 12 que es el cluster que contiene a 9 y 8 es un cluster vertical que indica que los dos están a la misma altura.
Ahora se regresa a un nivel superior o sea al cluster 14 y se inicia el recorrido por la derecha, cluster 13.
Este procedimiento se repite hasta que todas los clusters han sido ubicados.
4.4.4. Propuesta 3: Codificación en diagrama de árbol para corte guillotina.
Se divide el tablero original en subespacios. Para asegurar que los subespacios creados presenten cortes de tipo guillotina se define una codificación de árbol binario complementario [56].
El número de capas, con base en este valor determina el número de cortes: El número de capas (c) es definido de forma aleatoria y determina el número de variables en la codificación así como el número de subespacios (S) creados. El número de cortes (p) está dado por la ecuación 4.|1
(4.1)
El número de subespacios (NS) está dado por
(4.2)
73
Para representar la estructura que genera el subespacio son definidos dos vectores de tamaño igual al número de cortes: el primero ( ) es un vector de tipo binario que define el tipo de corte (vertical u horizontal), el segundo ( ) es un vector real con valores entre 0 y 1 que determina la distancia porcentual a la cual se produce el corte con respecto al tablero disponible.
Por ejemplo si se decide que el número de capas es 2 entonces los cortes a obtener serán:
22 1No de cortes 22 1No de cortes = 4-1 =3
Estos tres cortes generaran a su vez 4 subespacios. figura (4.26).
Un conjunto de posibles vectores generados aleatoriamente es el siguiente:
Ejemplo 4.5
A continuación se presentan los siguientes datos para explicar este tipo de codificación:
Tipo de pieza Largo Ancho Número de piezas
Tablero 70 42 1
Pieza 1 22 18 6
Pieza 2 8 29 5
Pieza 3 19 19 2
Pieza 4 16 13 2
Pieza 5 4 16 6
Tabla 4.8. Datos ejemplo 4.5
Una ventaja de este tipo de codificación es que cualquier conjunto es factible
siempre y cuando sea binario y este en el intervalo . Por ejemplo, si las dimensiones del tablero base son de 70x42, estas dimensiones representan el 100% de la primera capa; el primer corte con parámetros T1 = 0 y H1 = 0,65 indica
74
que se hace un corte horizontal al 65% del tablero, esto genera dos espacios de dimensiones 70x14,7 y 70x27,3; el segundo corte T2 = 1 y H2 = 0,4 indica un corte vertical sobre el espacio de 70x27,3. El último corte es aplicado sobre el espacio de 70x14,7. Estos cortes sucesivos generan cuatro subespacios de dimensiones S= { 28x27,3 42x27,3 21x14,7 49x14,7}. El proceso se representa mediante el árbol mostrado en la figura 4.26. Finalmente la figura 4.27 muestra la división del tablero base.
ED
B
A
C
F G
Primer corte Horizontal
Segundo corte Tercer corte
Vertical Inferior Vertical superior
65%
40% 30%
Figura 4.26. Árbol de cortes
En la siguiente gráfica se mostrará la disposición de los cortes sobre el tablero.
D E
F G
B
C
A
30%
40%
65%
Figura 4.27. Cortes sobre el tablero según el árbol de corte propuesto en 4.26
75
En cada uno de los corte propuestos se acomoda la mayor cantidad del mismo tipo de piezas disponibles de manera que se garantice el corte guillotina, cada uno de los espacios se llena de acuerdo a un constructivo que calcula el desperdicio, se elige entonces el conjunto de piezas que arrojen el menor desperdicio. En la figura 4.28 se presenta una configuración obtenida aplicando la técnica propuesta.
4 de tipo 5 65 %
40 %
1 de tipo 5
7 de tipo 6
3 de tipo 5
30 %
Figura 4.28. Solución obtenida
4.4.5. Codificación Rectilinear propuesta por Chen, Fu, y Rodrigues
En [18] se propone una matriz, un arreglo bidimensional, que representa una aproximación discreta de las formas de las piezas a ser ubicadas.
La idea de la codificación consiste en que se cuadricula todo el tablero disponible para ubicar las piezas, cada cuadro tiene dimensiones de 1x1 e inicialmente la matriz que representa el tablero esta llena de ceros lo que indica que no hay espacios ocupados, a medida que se van ubicando las piezas los valores de los cuadros que representan la pieza van cambiando a unos. En la figura 4.29 se muestra la representación rectilínea.
76
0
0
0
0
0
0
0
0
00
0000000
000
00
00
00
0
000
000
0
000
0
00
1 1 11
11
11
1111
11
11
0
0
0
0
0
0
0
0
00
0000000
000
00
00
00
0
000
000
0
000
0
00
1 1 11
11
1
1111
11
11
0
Figura 4.29. Matriz de ubicación de las piezas y conteo de cuadros.
En la figura 4.30 se muestra la posición de las piezas sobre el tablero, que generan un patrón de empaquetamiento.
Figura 4.30. Representación rectilinear en el tablero
Las ventajas de usar esta representación son:
Se puede representar cualquier forma geométrica, incluyendo piezas cóncavas y convexas (figura 4.31).
La rotación y los traslapes de piezas se pueden chequear fácilmente.
Heurísticas tales como los algoritmos genéticos y Búsqueda Tabú pueden ser aplicadas.
77
Pero también tiene dos desventajas:
La complejidad de la representación y el crecimiento computacional cuadrático con el tamaño de cada objeto.
Únicamente son posibles cuatro orientaciones (arriba, abajo, derecha, izquierda)
Para evaluar la función objetivo simplemente se contabilizan el número de espacios sin ocupar para así calcular el porcentaje de utilización del tablero y el valor del área sin ocupar.
Figura 4.31. Combinación de rectángulos que forman diferentes objetos
78
5. MÉTODOS DE SOLUCIÓN
Figura 5. Tabla 5.
Gran parte de los problemas de optimización combinatorial son clasificados como problemas NP- completo o problemas NP- Difícil. Esos problemas no pueden ser resueltos por algoritmos simples en tiempo polinomial según Rodrigues [46]
Las técnicas de solución para problemas prácticos de optimización combinatorial se pueden clasificar en métodos exactos y aproximados. Dentro de los métodos exactos esta el algoritmo Branch-and-Bound, .Dentro de los métodos aproximados se encuentran varios tipos de heurísticas, metaheurísticas y técnicas especiales. Rodrigues resume los métodos de solución de los problemas clásicos de optimización combinatoria en un organigrama que se presenta en la figura 5.1
5.1. Algoritmo genético
Holland estudió el fenómeno de la evolución natural de las especies y creó un algoritmo que simula el mecanismo de evolución para encontrar soluciones de excelente calidad de problemas complejos que generalmente tienen un número muy elevado de soluciones óptimas locales.
El algoritmo genético genera una secuencia de poblaciones (conjunto de configuraciones) usando los mecanismos de selección, recombinación y mutación como mecanismos de búsqueda (operadores genéticos) a través del espacio de configuraciones.
En la naturaleza los individuos mejor dotados genéticamente tienen mayor capacidad de supervivencia cuando los recursos son escasos o cuando cambian las condiciones del medio ambiente. La unidad básica del contenido genético es el gene. El conjunto de genes forma un cromosoma (o conjunto de cromosomas) que determina la calidad genética del individuo.
Las alteraciones y la diversificación del material genético constituyen la esencia de la evolución. Se puede decir que la evolución es consecuencia de la acción conjunta de la selección natural y de todos los mecanismos que producen diversidad genética analizada anteriormente.
79
Métodos de solución
MétodosExactos
Branchand Bound
Branchand Cut
Branchand Price
Métodosaproximados
Heurísticas EspecialesMetaheurísticas
Constructivo(Greedy)
Mejoría
Particionar
Descompos
FormulaciónMatemática
Algoritmosgenéticos
SimulatedAnnealing
BúsquedaTabú
GRASP
Coloniade hormigas
PartículaSwarm
ScatterSearch
AlgoritmosCulturales
VecindadVariable
LógicaFuzzy
Redesneuronales
Máquinasde soporteVectorial
Figura 5.1. Organigrama de Técnicas combinatoriales
En la naturaleza los individuos compiten por el alimento, espacio, enfermedades y también para aparearse produciendo un predominio de los individuos más fuertes. El proceso repetido de selección en medio de una gran diversidad genética es la
80
clave de la evolución según Darwin y sus seguidores. En otras palabras sin la gran diversidad genética que existe entre los individuos sería difícil el proceso de evolución de las especies.
El algoritmo genético usa una población de individuos, que en los problemas combinatoriales representa un conjunto de configuraciones, para resolver un problema de optimización complejo. El algoritmo genético debe entonces hacer lo siguiente:
1. Representar adecuadamente una configuración del problema. La representación más popular es la representación en codificación binaria donde se pueden simular fácilmente los operadores genéticos de recombinación y mutación.
2. Debe encontrar una forma adecuada para evaluar la función objetivo o su equivalente (fitness). Así, se pueden identificar las configuraciones de mejor calidad como aquellas que tienen las funciones objetivo de mejor calidad.
3. Debe existir una estrategia de selección de las configuraciones con derecho a participar en la conformación (construcción) de las configuraciones de la nueva población (nueva generación)
4. Debe existir un mecanismo que permita implementar el operador genético de recombinación.
5. Debe existir un mecanismo que permita implementar el operador genético de mutación.
6. Debe especificar el tamaño de la población, o sea el número de configuraciones en cada generación
Una vez especificados todos los aspectos mencionados anteriormente, para resolver un tipo de problema conocido, se tiene un algoritmo genético básico.
5.1.1. Un algoritmo Genético simple.
Se presentan los lineamientos básicos de un algoritmo genético elemental usando un problema clásico: el problema de la mochila [19].
En este problema se tienen n objetos distintos y una mochila. Cada uno de los objetos tiene asociado un peso positivo i y un volumen positivo 1,2...iv n La
mochila puede llevar un peso que no sobrepase la cantidad W Teniendo en cuenta estos datos, el objetivo del problema es llenar la mochila de tal forma que se maximice el valor de los objetos transportados en ella. Hay que tener en cuenta que la suma de los pesos de los objetos seleccionados no debe superar la capacidad máxima W de la mochila. Por lo tanto, para obtener la solución deseada, se debe decidir para cada uno de los objetos, si se introduce o no en la mochila. Cada objeto tiene asociado una variable ix que toma el valor 1 si el objeto se mete
81
en la mochila y 0 en caso contrario. Cualquier objeto se puede introducir en la mochila si hay espacio para él, pero lo que no se puede hacer es transportar en ella una fracción o parte de un objeto.
Sea el problema de la mochila con n=12:
1 2 3 4 5 6 7 8 9 10 11 12
1 2 3 4 5 6 7 8 9 10 11 12
max ( ) 3 2 8 4 6 4 12 2 6 10 15 9
. .
5 4 4 2 4 6 10 4 2 8 12 5 36
0,1 , 1,...,12j
z x x x x x x x x x x x x x
s a
x x x x x x x x x x x x
x j
Los vectores de trabajo se identifican así:
Costo: C = 3 2 8 4 6 4 12 2 6 10 15 9 Volumen: a = 5 4 4 2 4 6 10 4 2 8 12 5
Figura 5.2. Vectores de trabajo
Un algoritmo genético elemental realiza la siguiente secuencia de operaciones:
1. Genera una población inicial después de escoger el tipo de codificación para representar cada configuración.
2. Calcula la función objetivo de cada configuración de la población y almacena la incumbente (la mejor configuración encontrada en el proceso).
3. Realiza selección. 4. Realiza recombinación. 5. Realiza mutación y termina de generar la nueva población de la siguiente
generación.6. Si el criterio de parada (o criterios de parada) no se han cumplido el proceso
regresa al paso 2.
Los pasos (2),(3),(4) y (5), en conjunto, son conocidos como ciclo generacional. También es necesario mencionar que existe una equivalencia entre los términos usados en genética y en un problema de optimización matemática.
Problema de optimización Genética.
Solución (configuración) Cromosoma.
Variable Gene
Solución alelo
A continuación se desarrolla el algoritmo genético elemental y usamos el ejemplo de la mochila para ilustrar la aplicación.
82
5.1.2. El problema de la codificación
Los primeros algoritmos genéticos usaron básicamente codificación binaria, o sea, las variables enteras y reales de un problema eran transformadas, de alguna manera, en variables binarias. En este contexto, se puede intentar realizar la representación binaria de varios tipos de variables a través de un ejemplo.
Ejemplo 5.1
Suponer que se tiene un problema con 3 variables que se desean codificar en forma binaria, entera o real: 1 2 3, ,x x x .
X =1x 2x 3x
Un caso particular asumiría la siguiente forma:
X= 1 0 1
Caso 2: Cuando las variables son enteras y limitadas: Caso 1: Cuando las
variables son binarias. En este caso se tiene 1 2 3, , 0,1x x x Este es el caso más
trivial y la configuración tiene la siguiente forma:
Se supone entonces que: 1 2 3, , 1, 2,3, 4,5,6,7x x x
En este caso, cada variable entera puede ser representada por un equivalente binario ocupando hasta 3 celdas binarias. Así una configuración típica asume la siguiente forma.
1 0 0 0 1 0 1 1 1X=
1x 2x 3x
Figura 5.3. Configuración típica
En este caso particular representa los números enteros 1 2 34, 2, 7.x x x
Caso 3: Cuando las variables son reales:
Para representar este caso se supone que las variables pueden asumir valores reales en un intervalo especificado. Por ejemplo: 1 2 3, , 0, 0.31x x x .
En este caso, se inventan nuevas variables 'jx haciendo la equivalencia:
' 100j jx x . Después se trabaja con las nuevas variables jx que pueden asumir
83
valores reales en un intervalo [0,31], de tal forma que: ' ' '1 2 3, , 0, 31x x x . Así una
configuración típica asume la siguiente forma:
x= 1 0 0 1 1 1 1 1 0 0 0 0 0 1 0
1x 2x 3x
Figura 5.4. Codificación binaria
En este caso particular representa los números enteros: ' ' '1 2 319, 28, 2x x x ó
también a las variables reales originales 1 2 30.19, 0.28, 0.02x x x . Estas
variables reales se representaron con 2 cifras significativas.
La mayoría de las veces, una codificación correcta es la clave de una buena solución del problema. Generalmente, la regla heurística que se utiliza es la llamada regla de los bloques de construcción, es decir, parámetros relacionados entre sí deben de estar cercanos en el cromosoma. Por ejemplo, si se quieren codificar los pesos de una red neuronal, una buena elección será poner juntos todos los pesos que salgan de la misma neurona de la capa oculta también llamada codificación “fregona”. (En esta, todos los pesos señalados con trazo doble se codifican mediante grupos de bits o bytes sucesivos en el cromosoma).
Normalmente, la codificación es estática, pero en casos de optimización numérica, el número de bits dedicados a codificar un parámetro puede variar, o incluso los que representen los bits dedicados a codificar cada parámetro.
5.1.3. Cálculo de la función objetivo o algún equivalente
Se debe tener una estrategia adecuada para encontrar el valor de la función objetivo (o un equivalente) que determine la calidad de una configuración. Es frecuente usar un equivalente de la función objetivo para que exista selectividad entre las configuraciones. Los valores de la función objetivo se utilizan durante la implementación del operador selección, para que sea posible la selección debe haber un subconjunto de funciones objetivo significativamente diferentes a las demás, pues en caso contrario se perdería la selectividad del operador selección, esto quiere decir que se perdería la capacidad de diferenciar funciones objetivo de excelente calidad de funciones objetivo de baja calidad. También es frecuente normalizar la función objetivo para que asuma valores en el intervalo [0,1]
Ejemplo 5.2
Retomando el problema de la mochila para n=12. Se calculan varias alternativas para cuantificar la calidad de las configuraciones (función objetivo y equivalentes).
84
Se usa una población de 4 configuraciones en donde la población inicial es generada aleatoriamente teniendo en cuenta la siguiente nomenclatura:
R.U = Recurso usado.
F.O = Función objetivo
R.UF.O
1P 1 1 1 1 1 1 0 0 1 1 0 0 ' 35b 43
2P 0 1 0 1 1 0 0 1 0 1 1 0 ' 34b 39
3P 0 1 1 0 0 0 1 1 0 0 0 1 ' 29b 33
4P 0 0 1 0 0 0 1 0 0 1 1 0 ' 34b 45
Figura 5.5. Población inicial
En este caso se generaron, aleatoriamente, 4 configuraciones factibles que representan la población inicial. Aquí se observa un límite superior de la función objetivo encontrado sumando todos los elementos del vector c, así se tiene que el límite superior z(x)= 81. Se usa este valor para normalizar y encontrar un equivalente de la función objetivo. También se puede encontrar un equivalente de la función objetivo restando un valor constante K de la función objetivo. Estas dos alternativas y la función original se presentan en la tabla 5.1:
Configuración
I
Z(x)
II
1
( )( )
( )
z xz x
z x
III
2 ( ) ( ( ) )z x z x K
1P 43 0.53 13
2P 39 0.48 9
3P 33 0.41 3
4P 45 0.55 15
Tabla 5.1. Formas de calcular la función objetivo
En la tabla anterior se usó un K=30. En general, K es una constante elegida teniendo en cuenta la función objetivo de peor calidad.
5.1.4. Selección
Este operador genético permite seleccionar las configuraciones de la población actual que deben participar en la generación de las configuraciones de la nueva población (nueva generación). Por tanto la función del operador de selección termina después de decidir el número de descendientes que debe tener cada configuración de la población actual. En algunos casos las configuraciones puede
85
generar varios descendientes mientras que en otras ninguno, desapareciendo la información de estas configuraciones que son consideradas de baja calidad.
Selección proporcional
La forma más simple de implementar la selección es usando el denominado esquema de selección proporcional. En esta estrategia cada configuración tiene derecho a generar un número de descendientes que es proporcional al valor de la función de adaptación. Así se tiene la siguiente relación.
( )
( )i
im
z xNd
z x(5.1)
iNd = Número de descendientes de la configuración i.
n = número de configuraciones de la población.
( )iz x = Función de adaptación. ( )mz x = Media de la función objetivo
1
1( ) ( )
n
m ii
z x z xn
(5.2)
1
( )
ii n
ii
zNd n
z x(5.3)
La propuesta inicial y aún usada para resolver el problema de número de descendientes no entero es el denominado esquema de selección de la ruleta.
En el esquema de selección de la ruleta a cada configuración se le asigna una parte de la ruleta que es proporcional al número de descendientes, calculada con la siguiente relación:
12 iNd
n(5.4)
Selección por torneo
El segundo algoritmo, denominado selección por torneo, es bastante simple y consiste en escoger la mejor alternativa de las k alternativas seleccionadas aleatoriamente. El éxito de aplicar esta metodología radica en escoger
86
adecuadamente un valor de k que se ajuste a cada problema en particular teniendo en cuenta tamaño y complejidad del problema, así como el tamaño de la población inicial. Un valor de k muy alto y la generación de una población inicial pequeña puede, eventualmente, hacer elitista el proceso de selección y ocasionar convergencias locales. Un valor muy bajo de k puede ocasionar un mayor esfuerzo computacional [44].
5.1.5. Recombinación (Crossover)
Las configuraciones seleccionadas en el proceso de selección son sometidas a recombinación. Este operador consiste en intercambiar partes de dos vectores para formar dos nuevos vectores donde uno de los vectores nuevos tiene parte de los elementos de un vector y parte de los elementos de otro vector. Este operador se denomina también cruzamiento e intenta simular el fenómeno del crossing over en genética. Generalmente a las configuraciones seleccionadas (originales) se les denomina configuraciones padres y a las nuevas configuraciones se les denomina configuraciones hijos.
Recombinación de Punto Simple
Es la forma más simple de recombinación y consiste en escoger un único punto para realizar la recombinación. Para explicar el concepto, se supone que una configuración tiene k elementos o celdas binarias; una vez elegidas las dos configuraciones para realizar recombinación, se genera un número aleatorio entre 1 y (k-1), y ese número indica el punto de recombinación. La parte que se encuentra hacia la derecha de ambas configuraciones son intercambiadas para formar las dos nuevas configuraciones. Las configuraciones que deben ser sometidas a recombinación son escogidas aleatoriamente entre las configuraciones seleccionadas que todavía tienen derecho a recombinación. Aquí están nuevamente presentes dos nuevas decisiones de carácter aleatorio: (1) Se escoge de forma aleatoria, las configuraciones que deben ser sometidas a recombinación y (2) Se escoge aleatoriamente el punto de recombinación. Aunque algunas decisiones determinísticas son usadas en algunos casos.
Ejemplo 5.3
Las configuraciones seleccionadas en el ejemplo anterior que corresponden al problema de la mochila con n = 12, son sometidas a recombinación: En forma aleatoria se han seleccionado los siguientes pares: P1 con P4 y P2 con P4
1P 1 1 1 1 1 1 0 0 1 1 0 0 ' 35b 43
4P 0 0 1 0 0 0 1 0 0 1 1 0 ' 34b 45
Punto de recombinación
Figura 5.6. Punto de recombinación
87
Elementos después de la reconfiguración
'1P 1 1 1 1 1 1 0 0 0 1 1 0 ' 45b 52
'4P 0 0 1 0 0 0 1 0 1 1 0 0 ' 24b 36
Figura 5.7. Elementos recombinados
1. 1P y 4P son sometidas a recombinación para generar dos configuraciones
candidatas. Generamos un número aleatorio 1,11p y resulta escogido p = 8.
Recombinación genera las siguientes configuraciones candidatas:
Se observa que después de la configuración candidata '1P resulta infactible porque
45>36 (la restricción es violada).
2. 2 4P y P son sometidas a recombinación para generar dos configuraciones
candidatas. Generamos un número aleatorio 1,11p y resulta escogido p = 3.
Recombinación genera las siguientes configuraciones candidatas:
Punto de recombinación.
2P 0 1 0 1 1 0 0 1 0 1 1 0 ' 34b 39
4P 0 0 1 0 0 0 1 0 0 1 1 0 ' 34b 45
'2P 0 1 0 0 0 0 1 0 0 1 1 0 ' 34b 39
'4P 0 0 1 1 1 0 0 1 0 1 1 0 ' 34b 45
Figura 5.8. Recombinación de un punto
En este caso las dos configuraciones candidatas son factibles.
Algunos problemas que se presentan con este operador son:
a. El mismo par de configuraciones pueden ser escogidas varias veces, especialmente cuando existen configuraciones que tienen derecho a generar muchos descendientes.
b. Una misma configuración puede ser escogida para implementar recombinación con ella misma. Un mecanismo simple elimina este problema escogiendo otra configuración cada vez sucede este problema.
Para eliminar estos dos problemas se puede escoger una estrategia más determinística. Por ejemplo, se puede iniciar la recombinación escogiendo primero
88
aquella configuración que tiene derecho a generar un mayor número de descendientes hasta agotar todas las recombinaciones a que esta configuración tiene derecho, después se escoge la segunda en prioridad y así sucesivamente.
5.1.6. Mutación
En la codificación binaria la mutación significa simplemente cambiar el valor de una variable de 0 para 1 ó viceversa. En los trabajos teóricos iniciales de algoritmos genéticos la mutación siempre se consideró un operador secundario, hoy en día se está reevaluando este concepto.
La tasa de mutación m indica la probabilidad de que una posición (celda binaria)
puede tener su valor actual modificado. En el análisis teórico, y en las propuestas originales, se sugiere que la mutación debe ser intentada bit por bit (celda por celda) y así la decisión de mutación de una posición binaria es independiente de la mutación realizada de otras celdas binarias de una configuración.
En el caso del problema de la mochila, tanto la recombinación como la mutación pueden producir configuraciones candidatas infactibles. En este tipo de situaciones existen dos alternativas:
1. Formular alguna estrategia que permita transformar en factibles aquellas configuraciones candidatas infactibles.
2. Considerar todas esas configuraciones como “factibles” y penalizar las infactibles en la función objetivo para que ellas sean eliminadas por el operador selección.
5.1.7. Ciclo Generacional
Es el conjunto de procesos de selección, recombinación y mutación que permiten encontrar las configuraciones de la nueva generación (población) a partir de la población actual. El ciclo generacional es controlado por el programa de control del algoritmo genético.
5.1.8. Criterio de Parada
Existen varios criterios de parada.
Se ha realizado un número específico de generaciones. La incumbente alcanza un valor de una calidad mínima especificada. La población es demasiada homogénea, es decir, las configuraciones son
similares y no existe más evolución.
En implementaciones prácticas de problemas complejos se especifican criterios de parada más objetivos y generalmente se especifica más de un criterio de parada en un mismo algoritmo.
89
5.1.9. Algoritmo Genético modificado – Chu-Beasley
Las principales características del Algoritmo Genético (AG) de Chu-Beasley consisten en mantener constante el tamaño de la población de alternativas de solución, de manera que en cada iteración se reemplaza una alternativa de la población usando un eficiente mecanismo de modificación de la misma pero teniendo en cuenta que no se admiten configuraciones repetidas dentro de la población. En cada iteración la población es reemplazada sistemáticamente por un único descendiente generado [24,44]. Esta estrategia tiene la ventaja de permitir encontrar múltiples soluciones y además conservar la diversidad del conjunto de alternativas. El algoritmo que describe el método es el siguiente:
Se genera, aleatoriamente, una población inicial de soluciones.
Se obtienen las funciones objetivo, penalizando las soluciones infactibles.
Se seleccionan dos padres usando el método de selección por torneo. En este método, dos configuraciones son elegidas aleatoriamente y se elige uno de los padres considerando el mejor valor en función objetivo, el otro es descartado. El proceso se ejecuta dos veces para obtener dos padres.
El proceso de recombinación y mutación se realiza de forma integrada ya que se deben tener en cuenta consideraciones especiales del problema. Estos operadores actúan sobre los padres escogidos en el paso anterior. En esta fase se realizan mejoras en la factibilidad y en la optimalidad, teniendo en cuenta la filosofía de bloques constructivos.
Se reemplaza un individuo de la población por la solución encontrada tomando como base lo siguiente:
Si la alternativa actual es infactible y a su vez es menos infactible que la peor infactible de la población, entonces reemplazar la peor infactible por la alternativa actual. Es decir, entre dos soluciones infactibles se prefiere la solución menos infactible.
Si la configuración es factible y existe por lo menos una infactible en la población actual, entonces reemplazar la peor infactible por la alternativa actual. Es decir, entre una solución factible y una infactible se prefiere la solución factible.
Si la configuración es factible y todas las alternativas de la población actual son factibles, entonces reemplazar la alternativa con peor función objetivo por la alternativa actual. Lo anterior se realiza sólo si la alternativa actual es de mejor calidad que la peor de la población. Es decir, entre dos soluciones factibles se prefiere la solución con mejor función objetivo.
90
5.2. Implementación del algoritmo genético al problema de empaquetamiento bidimensional restricto tipo guillotina
En esta implementación se usó la codificación propuesta en la sección 4.4.2 donde se proponen dos vectores: uno de placas y otro de secciones para garantizar el corte tipo guillotina
Los operadores recombinación y mutación no pueden ser aplicados de la forma tradicional porque hay una alta probabilidad de obtener configuraciones en las que una pieza podría ocupar dos posiciones diferentes sobre el tablero.
Por tanto se propone incorporar la filosofía de la recombinación a través de la conservación de bloques constructivos. El proceso consiste en usar dos puntos de corte sobre los padres seleccionados por torneo los cuales son representados por el vector .piezas, como el mostrado en la figura 5.9. Posteriormente se aplica un operador de cruzamiento especial denominado cruce parcialmente combinado o PMX por su significado en inglés (Partially Matched Crossover). Este operador permite recombinar dos cromosomas sin perder los bloques del cromosoma que ya se había construido [59].
En el algoritmo tradicional PMX los puntos de corte son escogidos aleatoriamente. Para este problema los puntos de corte son determinados por el vector .piezas de una de las alternativas escogida aleatoriamente, en donde se selecciona una sección para que la recombinación se realice conservando la sección escogida. La escogencia de la sección se hace usando selección por ruleta y se da mayor probabilidad a la sección de mejor calidad, es decir, se trata de conservar las secciones con menor desperdicio o de buena calidad. Así por ejemplo, la recombinación entre dos alternativas i y j se lleva a cabo como se muestra en la figura 5.9
91
Figura 5.9. Recombinación en el problema de empaquetamiento bidimensional
Resultan dos descendientes, donde el primero conserva la sección conformada por las piezas (7, 9, 10): El segundo descendiente conserva la sección conformada por las piezas (6, 2, 3):
En la figura 5.10 se muestran los individuos obtenidos.
Figura 5.10. Descendientes generados después de la recombinación
El proceso de mutación en el algoritmo genético tradicional es bastante simple. Consiste en intercambiar aleatoriamente dos genes de los cromosomas obtenidos anteriormente. En el problema que se maneja en este artículo, el proceso de mutación es un poco distinto, debido a que es posible afectar cualquiera de los dos cromosomas que conforman una alternativa de solución (ver figura 4.14).
La mutación consiste en escoger por ruleta una de las secciones del hijo seleccionado. Se da mayor probabilidad a las secciones de peor calidad y se modifica la sección escogida siguiendo las siguientes estrategias:
placasi .placasj .
Sección escogida por ruleta
1310740secciones.i
Puntos de recombinación
13410911232671185
38121124109761513
92
Modificar el vector .piezas original haciendo permutaciones suaves usando el operador de mutación tradicional. Es decir, escogiendo de forma aleatoria dos elementos del vector .piezas, de la sección ganadora en la ruleta, eintercambiándolos entre sí.
Modificar el vector .piezas original quitando de la sección uno de sus elementos de forma aleatoria.
Modificar el vector .piezas original reemplazando uno de sus elementos por una de las placas que no pertenecen a la alternativa actual. Esto se hace de forma aleatoria y afectando la sección actual.
Modificar el vector .secciones original reduciendo o aumentando el tamaño de la sección actual. Este procedimiento es de gran importancia porque permite realizar búsquedas redimesionando las secciones. El impacto de realizar este paso sobre la alternativa de solución es el de pasar placas de una sección a otra.
De los descendientes anteriores, se escoge uno usando selección proporcional (ruleta) dando mayor probabilidad a las alternativas con mejor valor de función objetivo, incluyendo la alternativa original.
5.3. Búsqueda Tabú
5.3.1. Definición
Búsqueda tabú (BT) es un procedimiento metaheurístico, perteneciente a la familia de los métodos de optimización combinatorial, inventado por Fred Glover en la década de los 80 basado en conceptos que pertenecen al dominio de la inteligencia artificial y que incorpora los conceptos de memoria adaptativa y exploración sensible con el fin que durante el proceso de búsqueda se evite parar en óptimos locales y entrar en un ciclo repetitivo.
La filosofía del BT es obtener un conjunto de reglas o principios para resolver un problema de la manera más inteligente. El BT se caracteriza por ser una técnica determinística y su proceso de búsqueda se basa en un individuo, al contrario de otras técnicas que son de carácter aleatorio y trabajan con poblaciones. Además de lo anterior, en el BT se debe definir claramente el concepto de vecindad, ya que de ello depende el éxito de la búsqueda [19].
El método resuelve problemas de la forma:
Min f( x )s.a. x X
Donde f es una función, en general, no lineal y el conjunto de restricciones X también puede ser no lineal. Las variables x involucradas en el problema pueden ser continuas, enteras o mixtas, aunque tradicionalmente la técnica es utilizada
93
para variables enteras en donde la explosión combinatorial y la imposibilidad de utilizar teoremas matemáticos basados en la continuidad de las funciones muestran la potencialidad del método.
La memoria adaptativa contrasta con otras técnicas como Algoritmos Genéticos y Simulated Annealing, las cuales son algoritmos de búsqueda sin memoria y con otras técnicas que utilizan memoria rígida como Branch and Bound. Además, a diferencia de otros algoritmos combinatoriales, el BT es una técnica determinística y no se fundamenta en procesos físicos ni biológicos.
BT inicia su proceso de búsqueda igual que un algoritmo heurístico de búsqueda local, definiendo como vecindad, todas las posibles configuraciones que se obtengan al utilizar un mecanismo de transición. En un algoritmo de búsqueda local, a partir de la configuración inicial, se pasa a la configuración que presente la mayor disminución en la función objetivo (en caso de un problema de minimización). La utilización repetitiva de este procedimiento, conlleva a que el algoritmo se detenga una vez no exista ninguna configuración vecina que produzca una disminución de la función objetivo, lo cual, significa que se ha encontrado un óptimo local.
BT explora el espacio de soluciones de manera eficiente a través de la estructura de vecindad. El BT selecciona de forma agresiva el mejor de los movimientos posibles en cada paso, a pesar de esto, al contrario de lo que ocurre en una búsqueda local, aunque el movimiento seleccionado no sea tan bueno como el actual, permite escapar de óptimos locales y continúa la búsqueda en otras regiones. Gran parte de la potencialidad del método está basada en la manera como se define el conjunto de vecinos N(X). El conjunto de vecinos, no se caracteriza por ser estático, por el contrario, el número de vecinos varía dinámicamente durante el proceso de optimización. La figura ilustra el concepto anterior.
N1(x) x x`
N(X)
Figura 5.11. Concepto de vecindad
Donde:
X: Configuración actual.
94
X’: Configuración vecina.
N(X): Conjunto de vecinos posibles.
N1(X): Vecindario reducido.
En la mayoría de los casos el vecindario N(X) puede ser muy grande, lo cual, implica un elevado esfuerzo computacional en el proceso de búsqueda. Debido a esto, se debe reducir el número de vecinos redefiniendo las reglas de construcción del vecindario.
El algoritmo Tabú involucra los siguientes aspectos
5.3.2. Configuración Inicial
Una configuración es el conjunto de variables del problema dispuesto en un arreglo (vector o matriz). La configuración inicial puede ser generada de manera aleatoria o puede ser obtenida utilizando un algoritmo constructivo que utilice factores de sensibilidad o cierta lógica heurística.
Una configuración inicial aleatoria puede tener la ventaja de que evita, en parte, la posibilidad de que el método tenga una convergencia prematura o, en otras palabras, quede atrapado en un óptimo local. Por otro lado, una configuración inicial de mala calidad o infactible puede incrementar considerablemente el esfuerzo computacional, minimizando así, la posibilidad de explorar otras regiones que puedan contener soluciones de buena calidad.
Cuando se utilizan algoritmos constructivos basados en indicadores de sensibilidad, generalmente se obtienen configuraciones iniciales de buena calidad que le permiten al método realizar una búsqueda eficiente y así mejorar las soluciones iniciales. Adicionalmente, se puede intensificar la búsqueda hacia nuevas regiones construidas a partir de configuraciones élite que le permiten encontrar nuevas soluciones las cuales, posiblemente, pueden tener una calidad igual o superior a las soluciones ya encontradas. No obstante, el uso de índices de sensibilidad, puede sesgar el espacio de soluciones, haciendo que el método jamás pueda visualizar regiones promisorias que le permitan acercarse a la mejor solución posible.
5.3.3. Generación del vecindario
Un vecino de una configuración X es una configuración X0 obtenida a partir de X por medio de una transición simple. En la mayoría de los casos el vecindario N(X) puede ser muy grande lo que implica un elevado esfuerzo de cómputo en el proceso de búsqueda. Debido a esto, se requiere reducir el número de vecinos a N1(X), redefiniendo las reglas de construcción del vecindario. Esta etapa es fundamental en el proceso ya que de ella depende, en gran parte, el éxito de la búsqueda.
95
Existen estrategias para la reducción del vecindario:
Analizar un número específico de configuraciones seleccionadas aleatoriamente del vecindario N(X).
Aspiración adicional. Para esta estrategia se utiliza algún criterio; por ejemplo, la reducción de la función objetivo hasta cierto valor. Una vez se encuentra la configuración que satisface ese valor se evalúan configuraciones adicionales (’plus’). Para controlar el proceso se deben fijar un número mínimo y máximo de configuraciones a ser analizadas.
Lista de reducción de candidatos de Elite. En esta estrategia se selecciona un conjunto de configuraciones vecinas con atributos particulares, las cuales son llamadas configuraciones de élite.
5.3.4. Implementación de listas tabú
Dependiendo del tipo y complejidad del problema, se utiliza una o varias listas tabú. El tamaño de la lista puede variar a lo largo del proceso, teniendo en cuenta que no todas las configuraciones vecinas deben ser almacenadas sino las más atractivas en cuanto al valor de su función objetivo. La razón es la de reducir el esfuerzo computacional y la eficiencia del proceso.
En estas listas se almacenan configuraciones tabú y configuraciones que no lo son, ordenadas de acuerdo a su función objetivo, teniendo en cuenta la característica del problema de optimización.
5.3.5. Selección del mejor vecino
Una vez que el vecindario es definido, cada vecino es evaluado para determinar el valor de su función objetivo y verificar si cumple o no con las restricciones planteadas, de esta manera se determina la factibilidad de la configuración vecina. Los vecinos son clasificados en una lista de acuerdo al valor de la función objetivo y el proceso selecciona el mejor candidato. El primer candidato de la lista (de mejor función objetivo) es seleccionado si él no es tabú (prohibido) y si es factible, este modo de selección se denomina selección agresiva la cual imita las características de un algoritmo goloso.
Si el mejor vecino de la lista de candidatos esta clasificado como tabú por el proceso de optimización, aún existe la posibilidad de que sea seleccionado siempre que mejore la mejor solución encontrada hasta el momento por el proceso (incumbente). Este modo de selección se denomina criterio de aspiración.
Si en el vecindario generado no existe ninguna configuración que mejora la función objetivo, entonces es seleccionada la mejor de las peores pero que no haya sido clasificada como tabú durante el proceso de optimización. Esta estrategia evita que el algoritmo sea atrapado por óptimos locales.
96
5.3.6. Duración Tabú
Por el término tabú se entiende prohibición, por consiguiente, la duración tabú indica que un atributo no puede cambiar de estado durante un número de iteraciones determinado. La definición del valor de la duración tabú es importante para evitar que el proceso quede atrapado en óptimos locales de baja calidad. Duraciones tabú cortas pueden causar ciclaje, es decir, se analizan configuraciones que habían sido estudiadas anteriormente. Por el contrario, duraciones tabú muy largas pueden ocasionar infactibilidad durante el proceso o de algún modo se restringe la posibilidad de aceptar configuraciones vecinas de buena calidad.
Una forma simple de determinar la duración tabú consiste en especificar un valor constante para todos los atributos de la configuración. Sin embargo, existe la posibilidad de utilizar valores diferentes de duración tabú, lo que se conoce con el nombre de estado tabú adaptativo.
5.3.7. Criterio de Aspiración
Los criterios de aspiración se introducen en el BT para determinar cuando pueden ser reemplazadas las restricciones tabú, eliminando así un estado tabú aplicado a un atributo y su finalidad es la de proporcionarle mayor flexibilidad al proceso. Con lo anterior, se intenta relajar la rigidez de las listas tabú que almacenan atributos prohibidos. Una configuración candidata de excelente calidad puede tener un atributo prohibido por que comparte este atributo con una configuración ya visitada en el pasado reciente. De este modo, la lista tabú, al prohibir regresar de nuevo a configuraciones visitadas anteriormente, puede también prohibir visitar configuraciones nuevas de buena calidad. Esta característica es atenuada parcialmente con el criterio de aspiración que elimina la prohibición de una configuración candidata, si la misma produce una función objetivo de buena calidad.
El uso apropiado de estos criterios puede ser muy importante para permitirle al método mejores niveles de ejecución. Las primeras aplicaciones empleaban sólo un tipo simple de criterio de aspiración, que consiste en eliminar una clasificación tabú de un movimiento de ensayo cuando el movimiento conduce a una solución mejor que la incumbente obtenida hasta el momento. Aunque el criterio anterior todavía se aplica, existen otros criterios de aspiración efectivos para mejorar la búsqueda.
Una base para uno de estos cambios surge introduciendo el concepto de influencia, que mide el grado de cambio inducido en la estructura de la solución. La influencia a menudo se asocia a la idea de distancias de movimiento, es decir, donde se concibe que un movimiento de mayor distancia tiene mayor influencia. Tal movimiento puede no mejorar la solución actual, aunque es menos probable conducir a una mejora cuando la solución actual es relativamente buena. De cualquier manera, los movimientos de alta influencia son importantes, especialmente durante intervalos de separación de optimalidad local, porque con
97
una serie de movimientos que se limita solamente a hacer pequeños cambios estructurales es poco probable obtener una oportunidad para la mejora significativa.
5.3.8. Actualización de la estructura tabú
El proceso de búsqueda tabú requiere de una estructura tabú que tiene la misma codificación de la configuración X y que almacena la información de los atributos del vector X que han cambiado o que han permanecido sin cambio alguno. Esta información se almacena en las memorias de corto y largo plazo, las cuales pueden tener un criterio de almacenamiento fijo o variable a lo largo del proceso dependiendo del comportamiento de la búsqueda. Esto es lo que constituye la memoria adaptativa.
5.3.9. Memoria de corto plazo
La memoria de corto plazo usa básicamente la información de atributos de configuraciones que han cambiado recientemente. Esta información es conocida como memoria basada en hechos recientes. La idea básica de este tipo de memoria es evitar volver a configuraciones ya visitadas.
En la memoria de corto plazo, los elementos del vector X que han cambiado recientemente son clasificados como prohibidos o tabú durante un número determinado de iteraciones. Este número es almacenado en la memoria de corto plazo y es conocido como Status Tabú. Varias posiciones de la configuración X pueden estar prohibidas y el Status Tabú puede no ser variable a lo largo del proceso y es una característica que previene el ciclaje haciendo que el proceso de búsqueda sea inteligente.
Un vecino que sea generado a partir de una posición prohibida no puede ser seleccionado de la lista de candidatos a no ser que su función objetivo sea mejor que la incumbente encontrada hasta el momento durante el proceso. El criterio de aspiración compensa, en parte, el hecho de que al establecer posiciones tabú se reduce el espacio de búsqueda y pueden ser ignoradas configuraciones de buena calidad.
Cuando el mejor vecino es seleccionado, la posición de la configuración X a partir de la cual fue generado se debe prohibir durante k iteraciones y los sitios que están restringidos deben disminuir su estado tabú en una iteración. Esto corresponde al proceso de actualización de la estructura tabú de corto plazo [19].
5.3.10. Memoria de largo plazo
La implementación de la memoria de largo plazo permite al BT un desempeño mejor en la mayoría de las aplicaciones. Esta memoria se relaciona con tres aspectos fundamentales:
La memoria basada en frecuencia.
98
La estrategia de intensificación. La estrategia de diversificación.
La memoria basada en frecuencia consiste en almacenar la información del número de veces en que un atributo ha sido seleccionado, para participar en la formación de las configuraciones, durante el proceso. Por tal razón existen dos tipos de memoria basada en frecuencia. La primera almacena información histórica de los atributos de X que han cambiado cierto número de veces dentro del proceso (memoria de largo plazo por transición). La segunda almacena información de los atributos que han permanecido inalterados (memoria de largo plazo por permanencia). Esta estrategia permite, que en determinada etapa del proceso, el algoritmo explore nuevas regiones, proporcionando mayor diversidad a la búsqueda.
La estrategia de intensificación consiste en cambiar los criterios de selección de las nuevas configuraciones candidatas para incentivar la formación de nuevas configuraciones, aprovechando la información almacenada en el proceso. La intensificación se puede realizar de varias maneras:
Eliminando o incorporando nuevos vecinos, considerando las configuraciones élite.
Regresando a las regiones atractivas para realizar una búsqueda más intensa en su vecindad.
Realizando intensificación por descomposición, la cual consiste en imponer nuevas restricciones sobre los atributos buscando disminuir el espacio de configuraciones del problema.
Por último la estrategia de diversificación permite que el proceso de búsqueda se traslade a regiones nuevas y atractivas. Esta estrategia es implementada cambiando la definición de vecindad o de configuraciones candidatas, incorporando vecinos constituidos por atributos que han sido poco usados
En la figura 5.12 se muestra el esquema básico del algoritmo.
5.3.11. Oscilación estratégica
La oscilación estratégica es un excelente mecanismo para realizar una interacción entre intensificación y diversificación a mediano o largo plazo. Esta técnica opera cuando se ha logrado un nivel crítico, es decir, cuando la búsqueda se realiza en la región infactible, en el que normalmente la metodología se detendría. Así, antes de parar, después de lograr un nivel crítico, se pueden cambiar las reglas de selección de nuevas configuraciones candidatas para pasar a una región fuera de la región infactible. Una vez pasado el nivel crítico, se cambian nuevamente las reglas de selección de configuraciones candidatas tanto en el alejamiento como en el retorno al nivel crítico. Un proceso repetitivo de esta estrategia produce un movimiento oscilatorio en torno del nivel crítico.
99
Configuración inicial (X)Configuración inicial (X)
Explotación (Generar un vecindario N(X))
Explotación (Generar un vecindario N(X))
Funcion objetivo actual no mejora en k iteraciones?
Fin
Funcion objetivo actual no mejora en k iteraciones?
Fin
¿Vecino Xj es mejor que Xi?
¿Vecino Xj es mejor que Xi?
Actualizar estructura tabú y hacer Xj=Xi=XActualizar estructura tabú y hacer Xj=Xi=X
Aleatoria
Basado en una regla empírica
Basado en índice de sensibilidad
AleatoriaAleatoria
Basado en una regla empíricaBasado en una regla empírica
Basado en índice de sensibilidadBasado en índice de sensibilidad
Memoria de corto plazo
Memoria de largo plazo
Memoria de corto plazoMemoria de corto plazoMemoria de corto plazo
Memoria de largo plazo
Selección agresiva
Criterio de aspiración
Selección con criterio Tabú
Selección agresivaSelección agresiva
Criterio de aspiraciónCriterio de aspiración
Selección con criterio Tabú
Figura 5.12. Esquema básico del algoritmo de Búsqueda Tabú
5.3.12. Encadenamiento de trayectorias
El encadenamiento de trayectorias o “Path Relinking” (PR) permite encontrar nuevas configuraciones usando las trayectorias que interconectan configuraciones élite. En esta estrategia se selecciona una configuración élite denominada configuración base y otra u otras configuraciones guía. Así, se pueden obtener nuevas configuraciones a partir de la configuración base incorporando atributos presentes en las configuraciones guía. Las configuraciones así obtenidas, pueden ser usadas para intensificación o diversificación dependiendo de la cantidad de atributos incorporados en la configuración base.
La idea del PR es obtener configuraciones constituidas por atributos de alta calidad, pertenecientes a configuraciones élite. Así, en la implementación del PR, para encontrar una configuración atractiva para continuar el proceso, en cada paso es seleccionado, de manera preferencial, el atributo más atractivo presente en las configuraciones guía, usando los criterios usuales de BT.
PR también puede aplicarse en la generación de nuevas configuraciones de una manera más rápida. Así, se puede incorporar en la configuración base, en una única operación, todos los atributos considerados atractivos y presentes en las configuraciones guía. Dependiendo de la cantidad de atributos incorporados, la
100
configuración así obtenida puede ser usada para intensificación o diversificación. Otra estrategia es producir una configuración para realizar intensificación usando configuraciones élite que poseen muchos atributos similares y, entonces, producir una configuración para diversificación usando configuraciones élite que posean atributos significativamente diferentes.
5.4. Definición de criterios de vecindad aplicados a la solución del problema de empaque bidimensional restricto tipo guillotina
Para la implementación de esta técnica se utilizó la codificación propuesta en 4.4.3
Se deben definir antes dos conceptos desperdicio general y desperdicio individual.
El desperdicio general se presenta cuando se han dispuesto las piezas sobre el tablero y se generan espacios al exterior de las piezas. Los desperdicios individuales se generan cuando se ubican varias piezas y quedan espacios al interior de ellas [55].
DesperdicioIndividual
DesperdicioGeneral
Figura 5.13. Tipos de desperdicio
5.4.1. Primer criterio
Si la configuración es factible y hay desperdicio general pero ningún cluster presenta desperdicio individual, generar configuraciones vecinas insertando piezas en los clusters vacíos. Si el número de vecinos generado es menor al requerido, pasar al segundo criterio.
101
Figura 5.14. Primer criterio de vecindad
5.4.2. Segundo criterio
Si la configuración es factible y presenta clusters con desperdicios individuales, buscar e insertar piezas con áreas menores o iguales a los desperdicios de los clusters que los presenten. Si no hay por lo menos una pieza que se ajuste a estas condiciones o el número de vecinos generado es menor al requerido.
Figura 5.15. Segundo criterio de vecino
5.4.3. Tercer criterio.
Si la configuración es factible y presenta clusters con desperdicios individuales, intercambiar piezas de la configuración actual con las aún disponibles, procurando disminuir el desperdicio de los clusters que los presenten (opcional: sin alterar las dimensiones de los mismos). Si no hay por lo menos una pieza que se ajuste a estas condiciones, o el número de vecinos generado es menor al requerido o la configuración es infactible, pasar al Cuarto criterio.
102
Se retira pieza
Ingresa pieza quedisminuye el desperdicio
Figura 5.16. Tercer criterio de vecindad
5.4.4. Cuarto criterio:
Si la configuración es infactible o si en los anteriores tres criterios no se generó el número requerido de vecinos, generar configuraciones vecinas retirando las piezas que generan infactibilidad.
En la figura 5.17 las líneas rojas representan el área disponible del tablero.
Figura 5.17. Cuarto criterio de vecindad
5.4.5. Quinto criterio:
Si con los tres primeros criterios (configuración factible) o con el cuarto criterio (configuración infactible) no se generaron las configuraciones vecinas
103
requeridas, crear las configuraciones restantes intercambiando piezas entre los clusteres básicos vecinos no nulos completos (con por lo menos una pieza).
Figura 5.18. Quinto criterio de vecindad
5.4.6. Sexto criterio:
Si con ninguno de los anteriores criterios (casos de configuración factible o infactible) se generó el número requerido de configuraciones vecinas, realizar cambios en los tipos de cortes de los clusters básicos dando prioridad a los que generen infactibilidad (caso infactible) y/o a los que presenten desperdicios (caso factible).
En la figura 5.19 se observa el cluster horizontal formado por las piezas 10 y 11, cambiando el tipo de corte a vertical se factibiliza la configuración y queda un espacio donde se puede ubicar la pieza 12.
Corte Horizontal
Corte vertical
1
2
3
45
6
12
3
45
6
789789
10
11
10
11
12
13
14
13
14
Figura 5.19. Sexto criterio de vecindad
104
1
2
3
45
6
789
10
1113
14
12
Figura 5.20. Nueva disposición ubicando la pieza 12
5.4.7. Cálculo de la función objetivo
Este cálculo se hace con base en el área no utilizada del tablero y las infactibilidades generadas en la ubicación de cada cluster sobre el tablero Ec.(5.5)[55].
. desperdicios+ *(infactibilidades)F O (5.5)
El parámetro corresponde a un valor de penalización de las infactibilidades.
Según la ubicación de los clusters se pueden presentar los siguientes casos:
i) Que el cluster no genere infactibilidad Ancho cluster +coordenada de inicio en el eje X < ancho del tablero y además que
Altura cluster +coordenada de inicio en el eje Y < altura del tablero.
ii) Que el cluster sea infactible por ancho
Ancho cluster +coordenada de inicio en el eje X >ancho del tablero, y
Altura cluster +coordenada de inicio en el eje Y < altura del tablero.
iii) Que el cluster sea infactible por altura
Altura cluster +coordenada de inicio en el eje Y > altura del tablero, y
Ancho cluster +coordenada de inicio en el eje X < ancho del tablero
iv) Que el cluster sea infactible por ancho y por alto.
105
Altura cluster +coordenada de inicio en el eje y > altura del tablero, pero la coordenada de inicio en el eje y < altura del tablero ó el ancho cluster +coordenada de inicio en el ejes > ancho del tablero, pero la coordenada de inicio en el eje X< ancho del tablero.
v) Que el cluster generado quede por fuera del tablero Coordenada de inicio en el eje X >ancho del tablero y la coordenada de inicio en el eje y > altura del tablero.
Este cluster se tiene en cuenta en el cálculo de las infactibilidades.
Para calcular la función objetivo basta con calcular las infactibilidades porque a partir de estas se pueden determinar los desperdicios.
De acuerdo a los casos anteriores la infactibilidad se calcula de la siguiente forma:
Si se está en el caso i) donde el cluster es factible, la infactibilidad aportada por este es cero.
Si el cluster es infactible y se está en los casos ii), iii) y iv) el cálculo de la infactibilidad aportada por este cluster se hará ubicando el área por fuera del tablero de la pieza que está traslapada.
Si se está en el caso v), la infactibilidad aportada por este cluster es igual al área efectiva del mismo.
Obtenida la infactibilidad total (Infac) mediante la suma de las infactibilidades individuales, se calcula el área efectiva del tablero (Efec_tablero) como se muestra a continuación:
Efec_tablero= Efec - Infac (5.6)
Donde Efec es la suma de todas las áreas de las piezas que constituyen la configuración actual.
Con Efec_tablero se procede a calcular el valor de las áreas sin utilizar (Desp) con la Ec (5.7)
Desp =Área_tablero- Efec_tablero (5.7)
Donde:
Área_tablero: Largo por ancho del tablero
Así, mediante la ecuación 5.8 se calcula la función objetivo.
106
. Desp+ InfacF O (5.8)
El valor del parámetro se calcula experimentalmente.
5.5. Recocido simulado
El método de recocido simulado o simulated annealing (SA) por sus siglas en inglés, es una técnica de optimización combinatorial que se usa para afrontar problemas de gran complejidad matemática, de modo que se obtengan soluciones cercanas a la óptima.
La idea original que dio lugar al SA es llamada algoritmo de Metrópolis, el que a su vez está basado en el método de Montecarlo, con el cual se estudian las propiedades de equilibrio en el análisis del comportamiento microscópico de los cuerpos [19].
Se fundamenta en el proceso físico de calentamiento de un sólido, seguido por un enfriamiento hasta lograr un estado cristalino con una estructura perfecta. Durante este proceso, la energía libre del sólido es minimizada. A una temperatura T, en el estado con nivel de energía Eì, se genera el estado siguiente j a través de de una pequeña perturbación. Si la diferencia de energía Ej – Ei es menor o igual a cero, el estado j es aceptado. Si la diferencia de energía es mayor que cero, el estado j es aceptado con una probabilidad dada por (5.9), donde KB es la constante de Boltzmann. Si la disminución de la temperatura es hecha de manera paulatina, el sólido puede alcanzar el estado de equilibrio en cada nivel de temperatura.
Tk
EE
B
ji
e (5.9)
El SA aplica la simulación de la secuencia de estados en el proceso de enfriamiento para la solución de problemas de minimización. El costo de la configuración se asocia a la energía y T corresponde al parámetro de control.
A partir del estado i con costo f(i), se genera el estado j con costo f(j). El criterio de aceptación determina si el nuevo estado es aceptado; para esto se calcula la probabilidad:
f(i)si f(j)e
f(i)si f(j)job. Acep.
T
f(j)f(i)
1Pr (5.10)
107
Con esta estrategia se evita el quedar atrapado en mínimos locales. Inicialmente cuando T es grande, se permiten nuevas configuraciones que deterioren la función objetivo. A medida que disminuye la temperatura, la probabilidad de aceptar soluciones peores que la que se tiene es cada vez menor. Es clave la determinación de la temperatura inicial To, así como la velocidad de enfriamiento y la longitud Nk de la cadena de tentativas para cada nivel de temperatura Tk. Estos parámetros se calibran para adaptarse al tipo y tamaño del problema.
Algoritmo simulated annealing.
A continuación se presenta el algoritmo en el que se implementa el Simulated Annealing. En la figura 5.21 se muestra el diagrama de flujo correspondiente.
para h desde 1 hasta Nk
generar Rj a partir de Ri
si f(j)<=f(i)
entonces Ri = Rj
de lo contrario
si exp{[(f(i)-f(j)]/T} > aleatorio [0,1]
entonces Ri = Rj
fin_si
fin_si
fin_para
incrementar k
cálculo de Nk
cálculo de Tk
fin_para
108
Figura 5.21. Algoritmo Recocido simulado.
5.5.1. Temperatura.
La temperatura debe ser tal en el proceso que permita una adecuada exploración en las etapas del SA. Existen diferentes formas para calcular la temperatura inicial, siendo una de ellas simular el proceso para la primera cadena de Markov.
También es necesario definir la tasa B de disminución de la temperatura, para tener un enfriamiento controlado. Tomándose Tk+1= B Tk. Se acostumbra usar tasas de 0.8 a 0.99.
La temperatura final de enfriamiento es aquella en la que ya es muy poco probable que se acepten soluciones que empeoren la actual.
5.5.2. Longitud de la cadena.
La longitud de la cadena Nk define el número de tentativas para el nivel de temperatura Tk. Como regla general se maneja una longitud creciente a medida
iniciar To, N0
generar configuración inicial Ri
iniciar h
generar Rj a partir de Ri
f(j)<=f(i)
Ri=Rj
incrementar h
calcular probabilidad
Pk>
h<Nk
actualizar Tk, Nk
criterio de parada
Soluciónencontrada: Ri
NO
SI
SI
SI
NO
NO
SI
NO
109
que la temperatura disminuye, con el fin de permitir una exploración más intensa a temperaturas bajas. Por lo cual se toma Nk+1= p Nk, con p 1.
Para definir la longitud inicial N0 de la cadena, este se escoge proporcional al tamaño del problema, por ejemplo k veces el número de variables, N0=k x
#variables.
5.5.3. Criterio de parada
Se pueden usar varios criterios de parada:
Se fija un número determinado de niveles de temperatura, usualmente entre 6 y 50.
Si la función objetivo no mejora para varios niveles consecutivos, entonces se termina el proceso.
Si no se cumple con un número mínimo de aceptaciones en el nivel de temperatura.
5.5.4. Generación de una nueva configuración.
Se debe definir una estructura de vecindad, de la cual se toma la nueva configuración a partir de la actual. La estructura de vecindad está conformada por aquellas configuraciones -no necesariamente todas- que se pueden generar mediante pequeñas modificaciones, como sacar un elemento activo, agregar uno, o intercambiar un elemento que está presente en la configuración por otro que no lo está.
La escogencia de la nueva configuración en la estructura de vecindad se hace aleatoriamente, pero se puede incrementar la probabilidad de selección para aquellas configuraciones que tienen un índice de sensibilidad que las identifica como atractivas para conseguir un mejoramiento en la función objetivo.
5.5.5. Adaptación al tipo de problema
En principio el algoritmo presentado está dirigido a solucionar problemas de minimización sin restricciones. Haciendo unas pequeñas modificaciones se puede adaptar a problemas de maximización o que tengan restricciones. La maximización es convertida en minimización multiplicando la función objetivo por un factor de -1.
Cuando se tienen restricciones, el modelo matemático puede ser solucionado de dos formas. La primera es resolver el modelo en su conjunto, función objetivo y restricciones. La segunda consiste en llevar las restricciones a la función objetivo a través de un factor de penalización.
110
5.6. Búsqueda de entorno variable
La Búsqueda de Entorno Variable (Variable Neighbourhood Search, VNS) es una metaheurística para resolver problemas de optimización cuya idea básica es el cambio sistemático de entorno dentro de una búsqueda local.[26]
Los procesos de búsqueda heurística están generalmente basados en transformaciones de las alternativas que determinan una estructura de entornos en el espacio de soluciones. La Búsqueda de Entorno Variable (Variable Neighbourhood Search, VNS) es una metaheurística propuesta sólo hace unos años [27], [37] que está basada en un principio simple: cambiar sistemáticamente de estructura de entornos dentro de la búsqueda [28]. Su desarrollo ha sido rápido, con muchos artículos ya publicados o pendientes de aparecer. Se han realizado muchas extensiones, principalmente para permitir la solución de problemas de gran tamaño [29]. En la mayoría de ellas, se ha hecho un esfuerzo por mantener la simplicidad del esquema básico.
5.6.1. Esquemas fundamentales
Un problema de optimización consiste en encontrar, dentro de un conjunto X desoluciones factibles, la que optimiza una función f(x). Si el problema es de minimización se formula como
min ( ) /f x x X (5.11)
Donde x representa una solución alternativa, f es la función objetivo y X es el espacio de soluciones factibles del problema. Una solución optima xo (o mínimo global) del problema es una solución factible donde se alcanza el mínimo de Ec (5.11).
Una estructura de entornos en el espacio de soluciones X es una aplicación : 2xN X que asocia a cada solución x X un entorno de soluciones ( )N x X ,
que se dicen vecinas de x. Las metaheurísticas de búsqueda local aplican una transformación o movimiento a la solución de búsqueda y por tanto utilizan, explícita o implícitamente, una estructura de entornos. Denotando por
max, 1,...,kN k k a un conjunto finito de estructuras de entornos en el espacio X. Los
entornos kN pueden ser inducidos por una o más métricas introducidas en el
espacio de soluciones X. La mayoría de las heurísticas de búsqueda local usan sólo una estructura de entornos.
Una solución 'x es un mínimo global del problema (5.11) si no existe una solución x X tal que *( ) ( )f x f x . Se dice que 'x X es un mínimo local con respecto a Nk,
si no existe una solución ( ')kx N x X tal que ( ) ( ')f x f x
111
Una búsqueda local descendente cambia la solución actual por otra solución mejor de su entorno, por tanto tienen el peligro de quedarse atascada en un mínimo local. Las metaheurísticas basadas en procedimientos de búsqueda local aplican distintas formas de continuar la búsqueda después de encontrar el primer óptimo local.
La VNS está basada en tres hechos simples:
Un mínimo local con una estructura de entornos no lo es necesariamente con otra.
Un mínimo global es mínimo local con todas las posibles estructuras de entornos.
Para muchos problemas, los mínimos locales con la misma o distinta estructura de entornos están relativamente cerca.
Esta última observación, que es empírica, implica que los óptimos locales proporcionan información acerca del óptimo global. Puede ser, por ejemplo, que ambas soluciones tengan características comunes. Sin embargo, generalmente no se conoce cuales son esas características. Es procedente, por tanto, realizar un estudio organizado en las proximidades de este óptimo local, hasta que se encuentre uno mejor Los hechos 1 a 3 sugieren el empleo de varias estructura de entornos en las búsquedas locales para abordar un problema de optimización. El cambio de estructura de entornos se puede realizar de forma determinística, estocástica, o determinística y estocástica a la vez.
5.6.2. VNS Descendente (VND)
Una búsqueda local determina una mejor solución del entorno de la solución actual. La clásica búsqueda greedy descendente consiste en reemplazar iterativamente la solución actual por el resultado de la búsqueda local, mientras se produzca mejora. Si se realiza un cambio de estructura de entornos de forma determinística cada vez que se llega a un mínimo local, se obtiene la búsqueda de entorno variable descendente (Variable Neighbourhood Descent, VND). Los pasos de la VND se muestran a continuación.
Inicialización: Seleccionar el conjunto de estructuras de entornos según la Ec. 5.12, que se usarán en el descenso; encontrar una solución inicial x
m a x, 1 , . . . ,kN k K(5.12)
Iteraciones: Repetir, hasta que no se obtenga mejora, la siguiente secuencia:
(1) Hacer 1k
(2) Repetir, hasta que maxk=k , los pasos:
112
(a) Exploración del entorno. Encontrar la mejor solución x’ del k-ésimo entorno de x 1k k ( ' ( ))kx N x ;
(b) Moverse o no Si la solución obtenida x’ es mejor que x hacer x= x’ y 1k
En otro caso, hacer 1k k
La solución final proporcionada por el algoritmo es un mínimo local con respecto a todas las kmax estructuras de entornos, y por tanto la probabilidad de alcanzar un mínimo global es mayor que usando una sola estructura. Además del orden secuencial de las estructuras de entornos en la VND anterior, se puede desarrollar una estrategia anidada. Si se supone, por ejemplo, que kmax = 3. Entonces una posible estrategia anidada es: ejecutar la VND mostrada anteriormente para las dos primeras estructuras de entornos, sobre cada x0 que pertenezca al tercer entorno de 3( ' ( ))x x N x . Esta VNS ha sido aplicado en [5], [8].
5.6.3. VNS Reducida (RVNS)
La búsqueda de entorno variable reducida (Reduced Variable Neighbourhood Search, RVNS) se obtiene si se seleccionan soluciones aleatorias de Nk(x), sin aplicarles a continuación un descenso. Los pasos de la RVNS se presentan a continuación
Inicialización: Seleccionar el conjunto de estructuras de entornos Nk; k = 1..,;
kmax, que se usaran en la búsqueda; Encontrar una solución inicial x ;
Iteraciones: Repetir, hasta que se cumpla la condición de parada, la siguiente secuencia:
(1) Hacer 1k
(2) Repetir, hasta que maxk k x, los pasos:
(a) Agitación Generar al azar una solución ox del k-´esimo entorno de
; ( ' ( ));kx x N x
(b) Moverse o no. Si la solución obtenida 'x es mejor que x ,
Hacer 'x x y 1k
En otro caso, hacer 1k k .
La RVNS es útil para instancias muy grandes de problemas en las que la búsqueda local es muy costosa. Se observa que el mejor valor para el parámetro kmax es
113
frecuentemente 2. Como condición de parada se usa generalmente el máximo número de iteraciones entre dos mejoras.
La RVNS se ha mostrado superior a un método de Monte-Carlo en un problema mínimas continuo [38] y a la heurística del intercambio rápido de [60] al aplicarla al problema de la p-mediana.
5.6.4. VNS Básica (BVNS)
La búsqueda de entorno variable básica (Basic Variable Neighbourhood Search,BVNS)
Combina cambios determinísticos y aleatorios de estructura de entornos. Los pasos de la VNS básica se presentan a continuación.
La condición de parada puede ser, por ejemplo, el máximo tiempo de CPU permitido, el máximo número de iteraciones, o el máximo número iteraciones entre dos mejoras. [60] Frecuentemente los entornos kN sucesivos están anidados.
Obsérvese que la solución 'x se genera al azar en el paso (2ª) para evitar el ciclado, que puede ocurrir si se usa cualquier regla determinística.
Inicialización: Seleccionar un conjunto de estructuras de entornos
max, 1,...,kN k k , que se usaran en la búsqueda;
Encontrar una solución inicial x ;
Iteraciones: Repetir, hasta que se cumpla la condición de parada, la siguiente secuencia:
(1) Hacer 1k
(2) Repetir, hasta que maxk k , los pasos:
(a) Agitación Generar al azar una solución 'x del k-´esimo entorno de ( ' ( ));kx x N x
(b) Búsqueda local Aplicar algún método de búsqueda local con x0 como solución inicial;
Denótese con ''x el mínimo local así obtenido.
(c) Moverse o no Si la solución obtenida ''x es mejor que xhacer ''x x y 1k ;
En otro caso, hacer 1k k .
114
5.6.5. VNS General
La búsqueda local del paso (2b) de la BVNS puede ser sustituida por la VND. Los pasos de la búsqueda de entorno variable general (General Variable Neighbourhood Search,GVNS) se muestran a continuación:
Inicialización Seleccionar un conjunto de estructuras de entornos
max, 1,...,kN k k que se usarán en la agitación;
Seleccionar un conjunto de estructuras de entornos max,' , 1,...,jN para j j
que se usarán en el descenso;
Encontrar una solución inicial x ;
Iteraciones: Repetir, hasta que se cumpla la condición de parada, La siguiente secuencia:
(1) Hacer 1k
(2) Repetir, hasta que maxk k , los pasos
(a) Agitación: Generar al azar una solución 'x del entorno ( )kN x ;
(b) Búsqueda local Aplicar la VND con las estructuras de entornos para max,' , 1,...,jN para j j denótese con ''x la
solución así obtenida.
(c) Moverse o no Si la solución obtenida ''x es mejor que xhacer ''x x y 1k ;
En otro caso, hacer 1k k .
El uso de la búsqueda de entorno variable general (GVNS) ha dado lugar a las aplicaciones más exitosas aparecidas recientemente (ver, por ejemplo, [5], [8], [1], [43], [44],
5.7. Adaptación de las técnicas de Recocido simulado y Búsqueda en vecindario variable a la solución del problema de empaquetamiento bidimensional restricto tipo guillotina
La codificación propuesta en la sección 4.4.4 garantiza la factibilidad en cuanto al corte guillotina, esto permite que el problema de optimización con restricciones se transforme en un problema de minimización irrestricto entero mixto en donde las
115
variables T y H son independientes entre sí, esto significa que para cada conjunto de valores de T existe una solución H óptima:
(5.13)
De esta forma se puede utilizar cualquier algoritmo combinatorial para encontrar valores óptimos de T siempre y cuando se utilice un segundo algoritmo que permita encontrar los valores óptimos de H a partir de los valores de T. La ubicación final de las piezas se realiza mediante un tercer algoritmo, esta vez un constructivo que garantiza una solución única para cada conjunto de valores (T,H), este algoritmo es basado en arreglos del mismo tipo como se mostró en la figura 3.8 (b). La figura 5.22 esquematiza el proceso
AlgoritmoI
AlgoritmoII
AlgoritmoIII
T H
Figura 5.22. Secuencia de los algoritmos
5.7.1. Algoritmo de búsqueda aleatoria binaria
El algoritmo I determina el valor de la variable binaria T la cual representa el tipo de corte a utilizar, para este algoritmo se utilizó un esquema de vecindario variable [26].
Algortimo I: Búsqueda aleatoria binaria
Datos de entrada IG
Tinc Aleatorio Binario
Incumbente 0
Vecindario 1
For k = 1 To IG
T Tinc
For i = 1 To Vecindario
j Aleatorio Entero
T[j] Not(T[j])
EndFor
Vecindario Vecindario + 1
116
[F, H] AlgoritmoII(T)
If F > Incumbente
Incumbente F
Tinc T
Hinc H
Vecindario 1
EndIf
EndFor
EndFor
Result Hinc, Tinc
Inicialmente el vecindario de búsqueda consiste en modificar de forma aleatoria una posición en el vector T, posteriormente, si esta modificación no genera una mejora en la función objetivo se procede a modificar dos posiciones y así sucesivamente, en el momento en que la incumbente sea actualizada se regresa nuevamente al primer vecindario. Esta metodología de búsqueda local permite diversificar cuando la función objetivo no es mejorada y hacer una búsqueda local más detallada en el momento de actualizarse la incumbente, de esta forma se logra un algoritmo computacionalmente eficiente.
5.7.2. Algoritmo de búsqueda aleatoria real
El segundo algoritmo determina la variable H a partir un vector T, para ello utiliza un algoritmo de búsqueda aleatoria que modifica iterativamente una posición del vector H reduciendo paulatinamente el ancho de búsqueda, para ello se utiliza una función delta definida como
(5.14)
En donde R corresponde a un número aleatorio en el intervalo [-1,1], mientras que k es la iteración actual e IP es el número total de iteraciones del algoritmo. En las primeras iteraciones, el factor que multiplica a R es cercano a 1, por tanto los movimientos son altamente aleatorios, a medida que el algoritmo evoluciona se hace mas determinístico por lo cual este factor se acerca a cero. El valor de Hi
estará dado por
117
(5.15)
Este algoritmo está inspirado en la filosofía del recocido simulado [19] en donde a medida que evoluciona el grado de aleatoriedad disminuye.
Algoritmo II: Búsqueda aleatoria real
Datos de entrada IP, T
Hinc Aleatorio
Incumbente 0
For k = 1 To IP
H Hinc
j Aleatorio Entero
delta aleatorio(-1,1)*((1-k/(IP+1))^0.5)
H[j] H[j] + delta
If H[j] > 1 Or H[j] < 0
H[j] Aleatorio
EndIf
F AlgoritmoIII(T,H)
If F > Incumbente
Incumbente F
Hinc H
EndIf
EndFor
Result Hinc
5.7.3. Algoritmo constructivo
El algoritmo constructivo ubica las piezas en los diferentes sub-espacios definidos por los vectores H y T. Como cada sub-espacio debe ubicar arreglos del mismo tipo solo vasta determinar cuál es el desperdicio para cada tipo de arreglo asegurando se cumpla la restricción de demanda como se muestra a continuación.
118
Algoritmo III: Constructivo
Datos de entrada T,H
For k = 1 To Ns
(Xk,Yk) Tamaño del sub-espacio k
Max 0
For i = 1 To n
a Entera( Xk / xi )
b Entera ( Yk / yi )
z min(a*b, Di)
If z*Ai > Max
Max = z*Ai
Result(k) [z,i]
EndIf
EndFor
EndFor
119
6. PRUEBAS Y RESULTADOS OBTENIDOS
Figura 6. Tabla 6.
6.1. Solución mediante el algoritmo genético modificado de Chu-Beasley
Se usó la codificación propuesta en 4.4.2. Se propusieron dos casos de prueba para evaluar la eficiencia de la codificación y hacer una revisión de las soluciones obtenidas validando que las respuestas obtenidas cumplieran con la restricción de tipo guillotina [54]
Caso 6.1
Tipo depieza
Alto Ancho Cantidad
Tablero 24 38 1
1 12 19 2
2 14 19 2
3 2 4 25
4 3 38 2
5 5 19 1
6 2 2 1
Tabla 6.1. Dimensiones y cantidad de placas para caso 1.
En la figura 6.1 se muestra el vector de piezas, el tamaño de este corresponde al número de piezas a ubicarse para este caso es de 33, en el gráfico sólo se ubicará hasta la posición 25 quiere decir que de la 26 a la 33 los valores en esas casillas son iguales a cero, además se presenta el vector de secciones que indica donde inicia cada nivel. En la figura 6.2 se grafica la disposición de las piezas sobre el tablero y en la tabla 6.2 se presenta la respuesta obtenida indicando el número de piezas ubicadas con el fin de calcular la función objetivo
120
Solución caso 6.1
Vector de piezas
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
3 3 3 3 3 6 3 3 3 3 0 3 3 3 3 3 3 3 3 3 4 0 0 2 2 4
Vector de Secciones
0 11 20 24 25
Figura 6.1. Vector de piezas y secciones para el caso 1
0 5 10 15 20 25 30 35 400
5
10
15
20
25
Figura 6.2. Solución obtenida para el caso 6.1
Tipo pieza Alto Ancho ÁREA CANTIDAD
ÁREA
OCUPADA
2 14 19 266 2 532
3 2 4 8 18 144
4 3 38 114 2 228
6 2 2 4 1 4
Totales 23 908
Tabla 6.2. Resultado caso 6.1
Cálculo de la función objetivo Área disponible – Área utilizada=912-908=4
Lo que indica un porcentaje de utilización del 99.12%
121
Caso 6.2
Vector de piezas
9 1 0 0 0 2 0 4 0 2 2 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Vector de secciones
0 4 11
Figura 6.3. Vector de piezas y secciones para el caso 6.2
0 1 2 3 4 5 6 7 8 9 100
1
2
3
4
5
6
7
8
9
10
Figura 6.4. Solución obtenida para el caso 2.
Tipo Alto Ancho Cantidad
Tablero 10 10 1
1 3 2 4
2 7 2 4
3 4 2 4
4 6 2 4
5 9 1 4
6 8 4 4
7 4 1 4
8 1 10 4
9 3 7 4
10 4 5 4
Tabla 6.3. Dimensiones y cantidad de piezas.Caso 6.2
En la tabla 6.3 se muestran los datos del caso 6.2, en la figura 6.3 se presenta el vector de solución, en la figura 6.4 se presenta de forma gráfica la disposición de las piezas sobre el tablero y finalmente en la tabla 6.4 las piezas ubicadas sobre el tablero
122
Tipo pieza Alto Ancho Área Cantidad Áreaocupada
1 3 2 6 1 6
2 7 2 14 4 56
4 6 2 12 1 12
9 3 7 21 1 21
Total 7 95
Tabla 6.4. Solución caso 6.2
Caso Áreadisponible
Área Usada % utilización
6.1 912 908 99.12
6.2 100 95 95%
Tabla 6.5. Resultados con propuesta de solución 6.1
Tamaño Pob. Factor de penalización
Caso1 10 2
Caso 2 20 2
Tabla 6.6. Parámetros usados
6.2. Solución mediante el algoritmo Tabú
Para resolver el problema mediante esta técnica se usó la codificación propuesta en 4.4.3, esta metodología requiere una solución de inicio que se encontró usando el algoritmo constructivo BL modificado para corte guillotina propuesto en [57] que aparece en la sección 4.32 pagina 48 de este documento. Se usaron cuatro casos de prueba para validar la metodología: los casos 6.1 y 6.2 y los sistemas de prueba 1 y 3 presentados en [11]. En la tabla 6.7 se presentan las características de ellos.
Caso Número piezas Tipos de piezas Dimensiones
6.1 34 6 24*38
6.2 40 10 10*10
6.3 106 20 2002*1001
6.4 107 20 2275*1191
Tabla 6.7. Características de los casos de prueba.
6.2.1. Caso 6.1
Para este problema se tomó como solución de inicio la obtenida después de aplicar el constructivo BL para corte guillotina.
123
Figura 6.5. Solución de inicio caso 6.1
Esta solución se debe representar de acuerdo a la codificación propuesta así:
Para este caso se tienen 34 piezas , lo que indica que se pueden formar 17 clusters básicos, en este caso se cuenta con 6 tipos de piezas, por tanto para iniciar el vector de codificación se enumera así:
6 tipos de pieza +código para pieza nula=7. Lo que indica que el vector inicia en el cluster 8.
La codificación se inicia con los clusters básicos, es decir los que están formados por las piezas demandadas en cada caso. La pieza nula se representa por el número 7 y se utiliza cuando no es posible formar parejas de piezas reales como en el caso del cluster 11 donde se ubica la pieza 1 con la pieza 7. .
Cuando se acaban de ubicar todas las piezas, es decir, cuando se han formado todos los clusters básicos, se ubica el número del cluster donde terminan los clusters básicos, para este caso es el número 15, según el cálculo que se hizo al inicio es posible realizar 17 clusters, por tanto de 8 a 15 se han creado 8 clusters, hacen falta 9 clusters; de allí se deduce que para formar el siguiente nivel se inicia en Cluster 15+9 clusters que faltan =24, el número para el nuevo cluster es 25.
124
En el cluster 25 se inician los clusters de segundo nivel que representan combinaciones de clusters básicos
8 9 10 11 12 13 14 15 …………….. Clusters
3,6 3,3 3,3 1,7 4,7 3,3 3,3 3,7 Piezas
25 26 27 28 29 30 31
8,9 10,25 11,26 12,27 13,14 29,15 30,28
Figura 6.6. Solución de inicio obtenida para el caso 6.1
125
63 33 3
8 9
25
3
10
71
11
74
12
3
13
26
27
28
3 33
14
73
15
29
30
31
Figura 6.7. Árbol asociado a la codificación de la figura 6.5
126
Figura 6.8. Solución final para el caso 6.1
6.2.2. Caso 6.2
Para este caso se tomó una solución de inicio aleatoria infactible para observar como se comportaba el sistema partiendo de una solución de mala calidad y además infactible.
Figura 6.9. Solución de inicio para el caso 6.2
127
Figura 6.10. Solución final caso 6.2
6.2.3. Caso 6.3
Este caso corresponde al caso 1 de los problemas de prueba que aparecen en [11], anexo1.
La solución de inicio se construyó con el constructivo BL.
Figura 6.11. Inicial caso 6.3
128
Figura 6.12. Solución Final caso 6.3
6.2.4. Caso 6.4
Corresponde al caso 3 de la referencia [11], anexo 1. Solución de inicio obtenida con el constructivo BL para corte guillotina
Figura 6.13. Inicial caso 6.4
129
Figura 6.14. Solución final caso 6.4
En la sección 5.4 se definieron los criterios de vecindad, a continuación se recordarán para explicar los resultados obtenidos.
Criterio 1 (C1): Si la configuración es factible y hay desperdicio general pero ningún cluster presenta desperdicio individual, generar configuraciones vecinas insertando piezas en los clusters vacíos, es decir en los clusters que aún no han sido utilizados en la configuración actual.
Criterio 2 (C2): Si la configuración es factible y presenta clusters con desperdicios individuales, buscar e insertar piezas con áreas menores o iguales a los desperdicios de los clusters que los presenten.
Criterio 3 (C3): Si la configuración es factible y presenta clusters con desperdicios individuales, intercambiar piezas de la configuración actual con las aún disponibles, procurando disminuir el desperdicio de los clusters que los presenten.
Criterio 4 (C4): Si la configuración es infactible o si en los anteriores tres criterios no se generó el número requerido de vecinos, generar configuraciones vecinas retirando las piezas que generan infactibilidad.
Criterio 5 (C5): Si con los tres primeros criterios (configuración factible) o con el cuarto criterio (configuración infactible) no se generaron las configuraciones vecinas requeridas, crear las configuraciones restantes intercambiando piezas entre los clusters básicos vecinos no nulos completos (con por lo menos una pieza).
Criterio 6 (C6): Si con ninguno de los anteriores criterios se generó el número requerido de configuraciones vecinas, realizar cambios en los tipos de cortes
130
de los clusters básicos dando prioridad a los que generen infactibilidad (caso infactible) y/o a los que presenten desperdicios (caso factible).
En la tabla 6.8 se observan las iteraciones usadas con cada criterio de vecindad y el factor de penalización utilizado en la función objetivo usado para las configuraciones infactibles y denotado por .
C1 C2 C3 C4 C5 C6
Caso 1 10 10 10 15 0 0 25
Caso 2 10 10 40 0 0 0 5
Caso 3 20 20 10 0 0 10 7
Caso 4 10 10 30 10 10 10 20
Tabla 6.8. Número de vecinos y penalización
Una parte importante de BT requiere la definición del número de iteraciones durante las cuales un atributo (en este caso una pieza) permanecerá tabú, es decir, sin poderse mover de su posición, ya sea dentro o fuera de la configuración actual o cualquier otra con relación inclusive con otros atributos, como por ejemplo, de intercambio. En el presente trabajo se definieron cuatro tipos de iteraciones tabú:
K1 = Iteraciones tabú para piezas que entran a la configuración actual.
K2 = Iteraciones tabú para que piezas salen de la configuración actual.
K3 = Iteraciones tabú para piezas que se intercambian (dentro y fuera de la configuración actual).
K4= Iteraciones tabú para piezas que intercambian (dentro de la configuración actual).
En la tabla 6.9 se muestran los valores usados como iteraciones tabú para los cuatro casos de prueba.
Tradicionalmente la configuración inicial puede ser generada aleatoriamente, pero hay muchas otras alternativas basadas en métodos constructivos como la estrategia BL modificado para corte guillotina que entregan respuestas satisfactorias [57]. En el desarrollo del trabajo surgió la inquietud acerca de la incidencia de la calidad de la solución de inicio sobre la respuesta final con base en esto se realizaron pruebas para los distintos casos usando diferentes soluciones de inicio, para observar el efecto sobre la respuesta encontrada después de varias iteraciones. En las tablas 6.10 se presentan las respuestas encontradas.
131
Caso K1 K2 K3 K4
Caso 6.1 7 7 7 7
Caso 6.2 7 7 7 7
Caso 6.3 5 5 5 5
Caso 6.4 7 7 7 7
Tabla 6.9. Iteraciones tabú
Caso Estrategia
de inicio
Calidad Solución
Inicio (%)
Calidad
Solución Fin (%)
Número
Iteraciones
6.1 aleatoria 62.00 100 500
6.1 aleatoria 69.19 100 500
6.1 BL mod 95.39 100 500
6.2 aleatoria 22 92 500
6.2 aleatoria 31 96 500
6.2 aleatoria 78 88 500
6.2 BL mod 92 96 500
6.3 aleatoria 48.94 79.78 5000
6.3 aleatoria 75.66 88.44 5000
6.3 BL mod 96.87 98.93 5000
6.4 aleatoria 52.06 78.59 5000
6.4 aleatoria 74.16 79.49 5000
6.4 BL mod 93.57 98.34 5000
Tabla 6.10. Respuestas obtenidas desde diferentes soluciones de inicio
132
6.3. Solución usando un algoritmo híbrido constructivo de búsqueda en vecindad variable y recocido simulado
En la implementación de este algoritmo se utilizó la codificación propuesta en 4.4.4 Se tomaron 50 casos de prueba de la literatura especializada que pueden ser obtenidos de [11]. Cada caso presenta 20 tipos de piezas rectangulares a ser ubicadas sin permitir rotación.
Después de calibrar los parámetros a través de 1000 corridas del algoritmo para distintos casos, los mejores resultados se obtuvieron con los siguientes valores
Número de capas 3
Iteraciones globales (IG) 5000
Iteraciones parciales (IT) 1000
Tabla 6.11. Valor de los parámetros
Las iteraciones globales se refieren al número de iteraciones del algoritmo I mientras que las iteraciones parciales se refieren al número de iteraciones del algoritmo II. Este algoritmo está descrito en la sección 5.7
En las tablas 6.12 y 6.13 se muestran los 50 casos donde se comparan las respuestas obtenidas en función del área utilizada y el porcentaje de utilización. Para 42 de ellos se obtuvieron mejores respuestas que las mejores conocidas. Cada caso se corrió 10 veces con los parámetros de la tabla 6.11.
133
Caso de Prueba Respuesta de la Literatura Respuesta algoritmo propuesto
Caso Área Disponible Área utilizada Porcentaje
de uso
Área utilizada Porcentaje
de uso
Diferencia
1 2004002 1964584 0.9803 1990174.386 0.9931 25590.3862
2 2941249 2867218 0.9748 2887424.143 0.9817 20206.1433
3 2709525 2656454 0.9804 2679178.32 0.9888 22724.3200
4 2479752 2370496 0.9559 2443299.646 0.9853 72803.6456
5 2319604 2281600 0.9836 2275995.445 0.9812 -5604.5552
6 2976190 2918503 0.9806 2931249.531 0.9849 12746.5310
7 2265650 2227422 0.9831 2240954.415 0.9891 13532.4150
8 2272792 2238658 0.9849 2247791.288 0.989 9133.2880
9 2764384 2690038 0.9731 2717389.472 0.983 27351.4720
10 2624232 2574750 0.9414 2579620.056 0.983 4870.0560
11 3235950 3115873 0.9628 3162817.53 0.9774 46944.5300
12 2921333 2837743 0.9713 2856771.541 0.9779 19028.5407
13 2553588 2501400 0.9795 2525753.891 0.9891 24353.8908
14 2436480 2343169 0.9617 2350959.552 0.9649 7790.5520
15 3072540 3017184 0.9819 3031675.218 0.9867 14491.2180
16 2174340 2102756 0.9670 2136723.918 0.9827 33967.9180
17 2401595 2276323 0.9478 2317299.016 0.9649 40976.0155
18 2827455 2736919 0.9679 2751961.952 0.9733 15042.9515
19 2181600 2145051 0.9832 2149966.8 0.9855 4915.8000
20 3157786 2994717 0.9483 3050737.055 0.9661 56020.0546
21 2953340 2900376 0.9820 2892501.196 0.9794 -7874.8040
22 3204790 3066344 0.9568 3086853.728 0.9632 20509.7280
23 2763800 2676037 0.9682 2686966.36 0.9722 10929.3600
24 2408892 2287330 0.9495 2292060.738 0.9515 4730.7380
25 3163699 3037774 0.9601 3108967.007 0.9827 71193.0073
Tabla 6.12. Resultados para los casos del 1 al 25
134
Caso de Prueba Respuesta de la Literatura Respuesta algoritmo propuesto
Caso Área
Disponible
Área
utilizada
Porcentaje
de uso
Área
utilizada
Porcentaje
de uso Diferencia
26 2805712 2695345 0.9606 2748756.046 0.9797 53411.0464
27 2526230 2383242 0.9433 2479747.368 0.9816 96505.3680
28 2532060 2446799 0.9663 2490027.804 0.9834 43228.8040
29 2230605 2158548 0.9676 2186885.142 0.9804 28337.1420
30 2514609 2471150 0.9827 2462305.133 0.9792 -8844.8672
31 2727200 2583155 0.9471 2666656.16 0.9778 83501.1600
32 2699860 2618956 0.9700 2628853.682 0.9737 9897.6820
33 2262910 2216886 0.9796 2224666.821 0.9831 7780.8210
34 2330028 2279436 0.9782 2284359.451 0.9804 4923.4512
35 2882646 2787529 0.9670 2798761.001 0.9709 11232.0014
36 2658656 2508545 0.9435 2588999.213 0.9738 80454.2128
37 2817192 2667081 0.9467 2738592.343 0.9721 71511.3432
38 2618181 2566844 0.9803 2567650.107 0.9807 806.1067
39 2097396 2029177 0.9674 2068032.456 0.986 38855.4560
40 2597700 2540141 0.9778 2531198.88 0.9744 -8942.1200
41 2718228 2686780 0.9884 2677182.757 0.9849 -9597.2428
42 2379541 2306316 0.9692 2339088.803 0.983 32772.8030
43 2519286 2419778 0.9605 2454036.493 0.9741 34258.4926
44 2575800 2493761 0.9681 2507026.14 0.9733 13265.1400
45 2497225 2418204 0.9683 2414067.408 0.9667 -4136.5925
46 2817360 2693446 0.9560 2750588.568 0.9763 57142.5680
47 2484896 2388374 0.9611 2414821.933 0.9718 26447.9328
48 3007466 2943027 0.9785 2933482.336 0.9754 -9544.6636
49 2868953 2819262 0.9826 2815016.684 0.9812 -4245.3164
50 2234752 2161976 0.9674 2194973.414 0.9822 32997.4144
Tabla 6.13. Resultados para los casos del 26 al 50
135
En las gráficas 6.14 y 6.15, se comparan las mejores respuestas obtenidas para todos los casos con la mejor respuesta conocida en la literatura.
0.9400
0.9500
0.9600
0.9700
0.9800
0.9900
1.0000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Casos de prueba
Po
rcen
taje
de
uso
Literatura especializada
Algoritmo propuesto
Figura 6.15. Comparación resultados del 1 al 25
0.9400
0.9500
0.9600
0.9700
0.9800
0.9900
1.0000
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
Casos de prueba
Po
rcen
taje
de
uso
Literatura especializada
Algoritmo propuesto
1
Figura 6.16. Comparación de resultados del 26 al 50
136
En la tabla 6.14 y la figura 6.16, se presenta un resumen de los resultados obtenidos con base en el porcentaje de mejora. Se observan respuestas de mejor calidad para la gran mayoría de los casos reportados en [11] y los no superados quedaron muy próximos a la mejor respuesta conocida.
Resumen de Respuestas Número de casos
Soluciones no superadas 8
Soluciones superadas entre 0 y 1 % 21
Soluciones superadas entre 1 y 2 % 14
Soluciones superadas entre 2 y 3 % 3
Soluciones superadas entre el 3 y 4 % 3
Soluciones superadas en mas de 4 % 1
Tabla 6.14. Resumen de respuestas
-8
21
14
3 31
-10
-5
0
5
10
15
20
25
1 2 3 4 5 6
Figura 6.17. Resumen de respuestas
Con el fin de conocer la eficiencia del algoritmo propuesto se realizaron 90 corridas para el caso 25 cuyos resultados fueron agrupados según la distribución de frecuencias mostrada en la tabla 6.17. En las figura 6.17 se presenta la salida del algoritmo, en la figura 6.18 se grafico el árbol correspondiente a la salida teniendo en cuenta que V representa un corte horizontal y H representa un corte vertical y en la figura 6.19 se presenta la disposición final sobre el tablero obtenida para el caso de prueba 10 de la referencia [11]
137
Figura 6.18. Salida del algoritmo para el caso 10
1
2 3
8 14131211109 15
4 5 6 7
H(68.98%)
H(52.50%)H(0.0003%)
V(88.28%) V(43.99%) V(0.011%) V(90.53%)
Capa 1
Capa 2
Capa 3
Figura 6.19. Diagrama de árbol de la figura 6.17
Entre las figuras 6.20 y 6.22 se muestra paso a paso como se divide el tablero por capas para obtener los subespacios
138
2
3
H(68.98%)
Figura 6.20. Capa 1
4
5
7
6
Figura 6.21. Capa 2
12 y 13
8 9
10 11
14 15
Figura 6.22. Capa 3
139
0 500 1000 1500 2000 25000
200
400
600
800
1000
1200
1400Funcion objetivo:98.835 %
2028
1294
2:de tipo:16:de tipo:15
5:de tipo:74:de tipo:9
6:de tipo:118:de tipo:13
Figura 6.23. Solución obtenida para el caso 10.
1
95 1409 95 9543 95 5476 6 6 67
95 9543 95 7678 95 8611 4 4 44
95 7678 96 0813 95 9245 8 8 89
96 0813 96 3949 96 2381 5 5 56
96 3949 96 7084 96 5516 13 14 44
96 7084 9
i i i il ,l x n Probabilidad de ocurrencia
. , . . . %
. , . . . %
. , . . . %
. , . . . %
. , . . . %
. , 7 0219 96 8652 5 5 56
97 0219 97 3354 97 1787 25 27 78
97 3354 97 6489 97 4922 7 7 78
97 6489 97 9625 97 8057 13 14 44
97 9625 98 2760 98 1192 4 4 44
. . . %
. , . . . %
. , . . . %
. , . . . %
. , . . . %
Tabla 6.15. Distribución de frecuencias caso 25
Para realizar el ajuste a una distribución de probabilidad fue usado el programa crystall ball 2000.2.2 obteniéndose el resultado mostrado en la figura 6.24.
140
Figura 6.24. Distribución de probabilidad caso 25
Esta distribución pertenece a una normal con parámetros:
96 8567 0 7585. .
Con base en estos parámetros se calcula la probabilidad de encontrar un valor igual o mejor a la mejor solución reportada en la literatura que para este caso es de 96.019
96 0197 96 856796 0197 1 10 1 1 10
0 7585
. .P X . P Z P Z . P Z .
.
1 10 0 8643P Z . .
De acuerdo con lo anterior hay una probabilidad de 86.43% de obtener una respuesta mejor o igual a la reportada en la literatura.
141
7. Conclusiones y recomendaciones
Se propusieron tres tipos de codificación que garantizan respuestas tipo guillotina: Codificación a través de dos vectores uno de piezas y otro de secciones, codificación en diagrama de árbol mediante clusters y codificación en diagrama de árbol por secciones.
El tipo de codificación para representar el problema bidimensional restricto basado en árboles binarios facilita la generación de soluciones vecinas y el cálculo del valor de la función objetivo.
Los tipos de codificación propuestos basados en árboles binarios permiten implementar otras técnicas metaheurísticas tales como los Algoritmos Genéticos y Colonia de Hormigas sólo con una adaptación a los operadores específicos de cada método.
Fueron implementados tres algoritmos para la solución del problema de corte bidimensional tipo guillotina: algoritmo genético modificado de Chu-Beasley, algoritmo de búsqueda tabú y un algoritmo híbrido que combina técnicas inspiradas en búsqueda en vecindario variable, recocido simulado y técnicas constructivas
El desempeño del algoritmo genético modificado de Chu-Beasley muestra que los bloques constructivos son beneficiados con este tipo de codificación ya que se preservan, a través de selección proporcional, al manejar división por secciones. La optimalidad total se mejora cuando el área desperdiciada en una sección es reducida. Por esta razón, el algoritmo presenta un mejor desempeño cuando el factor de penalización por secciones es escogido adecuadamente.
En el algoritmo genético modificado de Chu-Beasley la optimalidad se mejora haciendo mutaciones suaves a los bloques de mala calidad hasta que mejore o hasta un número de intentos determinado. Este paso es similar a una búsqueda intensiva. Cuando una sección no tiene área desperdiciada se debe procurar mantener sus elementos unidos como un bloque. Esto se logra dándole a esta sección una baja probabilidad de ser modificada.
Se ha determinado el conjunto de parámetros que hacen que tanto el algoritmo de búsqueda Tabú como el algoritmo híbrido tengan un mejor desempeño
142
computacional para cada uno de los casos de prueba calibrándolos por ensayo y error.
Fueron estudiados algoritmos de inicialización para el problema de corte bidimensional tipo guillotina con el fin de observar su impacto sobre el resultado final.
Para las técnicas metaheurísticas, en la literatura especializada se establece que el óptimo global es obtenido independientemente de la solución inicial. En la práctica se ha observado que esta afirmación podrá ser válida en problemas de baja y mediana complejidad matemática. Por el contrario, para problemas de gran tamaño y alta complejidad matemática la solución inicial influye en la calidad de la solución final.
La metodología de BL modificado propuesta es una adecuada técnica de inicialización, para el problema de corte bidimensional tipo guillotina, fácil de implementar y de bajo consumo computacional.
Los patrones de corte obtenidos son de fácil implementación práctica, especialmente cuando no se cuenta con máquinas de corte de control numérico ya que se entregan disposiciones homogéneas para cortar las piezas de acuerdo a la demanda.
Se observó en el desarrollo de este trabajo que para obtener una buena alternativa para la solución de este tipo de problema se debe aplicar conjuntamente una codificación eficiente con técnicas metaheurísticas.
En la implementación del algoritmo de búsqueda Tabú Se superaron las mejores respuestas reportadas para los casos 6.1,6.2 obtenidas con la propuesta del algoritmo genético modificado de Chu- Beasley adicionalmente se superó el caso 6.3, de la literatura especializada
La escala de los problemas de prueba 6.3, 6.4 y todos los de la referencia [11] son comparables con muchos problemas prácticos de corte.
Los resultados computacionales obtenidos con el algoritmo híbrido fueron superados para la mayoría de los casos y los no superados presentan respuestas cercanas a las reportadas en la literatura especializada.
Se ha realizado un análisis estadístico para demostrar la eficiencia de la metodología propuesta para el caso del algoritmo híbrido con el fin de tener conocimiento sobre el porcentaje de mejora al momento de realizar un ensayo en particular. Para ello se tomaron 90 muestras de un mismo caso, cuyos parámetros se ajustan a una distribución normal. Los resultados obtenidos muestran que el algoritmo propuesto presenta una alta eficiencia en la gran mayoría de los casos estudiados.
143
Para trabajos futuros se recomienda analizar el comportamiento de otros algoritmos combinatoriales con diferentes tipos de inicializadores.
Dentro de los trabajos futuros podrían resolverse casos de prueba en donde las condiciones del problema permitan rotación de las piezas; además, se podría hacer la extensión para el problema de corte bidimensional cuando las figuras demandadas son polígonos, planteando que puede realizarse una reducción del problema a uno de empaquetamiento de rectángulos con algunas consideraciones.
Otros tipos de problemas de empaquetamiento pueden ser abordados a partir de los resultados presentados en este trabajo, entre ellos el empaquetamiento tridimensional rectangular, cilíndrico y empaquetamiento en rollos de material.
144
8. Bibliografía
[1]ANDREATTA,A. RIBEIRO,C. Heuristics for the phylogeny problem.Journal of Heuristics,8:429-447,2002.
[2]ARENALES,M.MORABITO,R. An graph approach to the solution of two dimensional non-guillotine cutting problems. European Journal of Operational Research, 84:599-617,1995
[3]BEASLEY,J.E A population heuristic for constrained two-dimensional nonguillotine cutting, European Journal of Operational Research 156 601-627,2004.
[4] BEASLEY,J An exact two-dimensional non-guillotine cutting tree search procedure, Operational Research 33: 49-64.1985.
[5] BELACEL,N ,HANSEN,P AND MLADENOVIC,N Fuzzy J-means: a new heuristic for fuzzy clustering. Pattern Recognition, 35(10):2193–2200, 2002.
[6]BELTRAN E,. CALDERÓN Procedimientos Constructivos Adaptativos (Grasp) Para El Problema Del Empaquetado Bidimensional. IX Conferencia De La Asociación Española Para La Inteligencia Artificial. VI Jornadas De Transferencia Tecnológica De Inteligencia Artificial (Volumen II)), pp. 755-764. Gijón, España. Del 14 Al 16 De Nov. De 2001.
[7] BIRGIN, E. Empaquetamiento usando herramientas de programación no lineal X ELAVIO Escuela Latinoamericana de Verano de Investigación Operativa Montevideo, Uruguay 16 - 20 de febrero, 2004.
[8] BRIMBERG,J HANSEN,P MLADENOVíC,N,Taillard E. Improvements and comparison of heuristics for solving the multisource weber problem. Operations Research, 48(3):444–460, 2000.
[9]CAPRARA,A. Y MONACI,M.On the two dimensional knapsack problem. Operations Research Letters, 32 (1):5-14.2004
[10]CHEN, C. S., LEE, S. M., SHEN, Q. S.. “An Analytical Model for the Container Loading Problem”, European Journal of Operational Research, v. 80, pp. 68-76, 1993
145
[11]CUI Y... An exact algorithm for generating homogenous T-shape cutting patterns. Computers & Operations Research. 2007, 34(4): 1107-1120. Disponible en Internet en : http://www.gxnu.edu.cn/Personal/ydcui/English/Paper.htm
[12]DA SILVA ARAUJO,R Uma Abordagem para o Problema de Corte Guilhotinado Bi-dimensional para Peças Regulares com a Utilização de P-Medianas e Pesquisa Tabu. Universidade Do Vale Do Rio Dos Sinos Centro De Ciências Exatas E Tecnológicas Curso De Informática São Leopoldo, novembro de 2004
[13] DOWSLAND, K DOWSLAND. W Packing Problems. European Journal of
Operational Research, 56(1):2-14, 1992.
[14]DYCKHOFF,H Classification of real world trim loss problems. En:G.Fandel et al.(Eds), Essays on Production Theory and Planning, Springer-Verlag, Berlin, páginas 191-208.1990
[15]ESPEJO, L. ACOSTA ,G., GALVÃO, “Uma Aproximação da Fronteira Eficiente para um Problema de Localização Hierárquico de Máxima Cobertura”, Pesquisa Operacional, v. 24, n. 2, pp. 303-321, 2004.
[16]FEKETE, S.P.;SCHEPERS J.On more-dimensional packing III: Exact algoritms. Submitted to: Discrete Applied Mathematics.1997
[17] FERNÁNDEZ,A DUARTE,A. Método Multi-Arranque aplicado al problema del Strip Packing Problem bidimensional dispopnible en Internet V Congreso de Metaheurísticas, Algoritmos Evolutivos y Bioinspirados. Puerto de la Cruz (Tenerife), 14-16/02/2007
[18] FU, CHEN ,LIM A, RODRIGUES B. Two-Dimesional Packing for irregular shaped objects. 36th Hawaii International Conference on System sciencies. Computer Society. IEEE. 2002
[19] GALLEGO R. ESCOBAR A. ROMERO R. Técnicas de optimización combinatorial. Textos universitarios. Universidad Tecnológica de Pereira. Abril 2006.
[20] GEORGE, J.A., GEORGE J.M., LAMAR.,B.W. Packing different-sized circles into a rectangular container. European Journal of Operational Research 84, 693-712
[21]GILMORE, P. GOMORY R, A linear programming approach to the cutting stock problem, Operations Research 9 :849-859.1961
[22]GILMORE, P. GOMORY R, Gomory, A linear programming approach to the cutting stock problem-partII, Operations Research 1194-119.1963
[23]GILMORE;P. GOMORY.R The Theory and Computation of Knapsack Functions. Operations Research, 14:1045-1074, March 1966.
146
[24]GILMORE, P. GOMORY R, Multistage cutting problems of two and more dimensions, Operations Research 13 : 94-119 .1965
[25] HADJICONSYANTINOU , N CHRISTOFIDES, An exact algorithm for general, orthogonal,two dimensional knapsack problems. European Journal of Operacional Research 83:39-56.
[26]HANSEN,P., NENAD M. MORENO J. Búsqueda de entorno variable. Inteligencia Artificial, Revista Iberoamericana de Inteligencia Artificial. No.19 (2003),pp. 77-92]
[27]HANSEN,P., NENAD,M. MLADENOVIC. Variable neighborhood search for the p-median. Location Science, 5:207–226, 1997.
[28]HANSEN,P., NENAD,M. MLADENOVIC An introduction to variable neighborhood search. In S. Voss et al., editor, Metaheuristics Advances and Trends in Local Search Paradigms for Optimization, pages 433– 458. Kluwer, 1999.
[29]HANSEN,P.,MLADENOVIC. Developments of variable neighborhood search. Les Cahiers du GERAD, G-2001-24, 2001.
[30]HINXMAN, A.I.(1977). A two dimensional trim-loss problem with sequencing constraints. Advanced Paper of IJCAI-77 MTI, páginas 859-854.
[31]HOPPER, E.TURTON, B. An empirical investigation of meta-heuristic and heuristic algorithms for a 2D packing problem. European Journal of Operational Research, 128 (2001) 34. Disponible en internet en: http://www.diku.dk/pisinger/bouknap.c.
[32] JAKOBS,S Theory And Methodology On Genetic Algorithms For The Packing Of Polygons. European Journal Of Operational Research. Vol.88, p87-100. 1996.
[33] LAI,K.K., CHAN,J.W.M. A evolutionary algorithm for the rectangular cutting stock problem. International Journal of Industrial Engineering, 4:130-139.1997
[34]LEUNG,T.W.,YUNG,C.H.,TROUTT,M.D.. Applications of genetic search and simulated annealing to the two-dimensional non-guillotine cutting stock problem. Computers and Industrial Engineering, 40:201-214.2001
[35]LITVINENKO, Vladimir I., BURGHER, J. A., et al. ”The Application of the Distributed Genetic Algorithm to the Decision of the Packing in Containers Problem”, In: Proceeding of the 2002 IEEE International Conference on Artificial Intelligence Systems (ICAIS’02), v.1, Divnomorskoe, September, 2002.
[36]LODI,A.,MARTELLO S,,VIGO D, Models and bounds for two dimensional level packing problems, Journal of Combinatorial Optimization, to appear
147
[37]MLADENOVÍC. A variable neighborhood algorithm - a new metaheuristic for combinatorial optimization. In Abstracts of Papers Presented at Optimization Days,, page 112, 1995.
[38]MLADENOVÍC,N PETROVÍC,J KOVACEVÍC- VUJCÍC. Solving spread spectrum radar polyphase code design problem by tabu search and variable neighborhood search. European Journal of Operational Research, 2004 (to appear).
[39]MORABITO; R. y MORALES, A. A simple and effective recursive procedure for manufacturer’s ballet loading problem. Journal of the Operational Research Society, 49: 819-828.1998
[40]MORABITO; R. y MORALES, A. Errata ´A simple and effective recursive procedure for manufacturer’s ballet loading problem’. Journal of the Operational Research Society, 50:876.1999
[41] PARREÑO F Algoritmos Heurísticos Y Exactos Para Problemas De Corte No Guillotina En Dos Dimensiones. Tesis Doctoral. Universidad De Valencia, Servei De Publicacions. España 2004
[42]RAIDL, GÜNTHER R.. “A Weight-Coded Genetic Algorithm for the Multiple Container Packing Problem”. In: Proceeding of the 14th ACM Symposium on Applied Computing, v. 1, pp. 596-603, San Antonio, July, 1999.
[43]RESENDE M,CANUTO,S,RIBEIRO,C Local search with perturbations for the prize-collecting Steiner tree problem in graphs. Networks, 38:50–58, 2001
[44]C.C. Ribeiro and M.C. Souza. Variable neighborhood descent for the degree constrained minimum spanning tree problem. Discrete Applied Mathematics, 118:43–54, 2002.
[45]RODRIGUES, Rosiane de Freitas. Complexida de Computacional – NP-Completude. ICE – Departamento da Ciência da Computação, 2000.
[46] RODRIGUES, L. . Un Algoritmo Genético para o Problema de Carregamento de Container. Disertación de (Meaestría en Ingeniería Eléctrica) | Universidade Federal do Rio de Janeiro, Rio de Janeiro, 2005.
[47] SALKIN,H KLUYVER,C The snapsack Problem: A survey*. Naval Research Logistics Quartely, (22):127-144, 1975.
[48]SCHEITHAUER, G., TERNO,J. Modeling of packing problems. Optimization, 28:63-84.1993
[49]SWEENEY,P PATERNOSTER,R. Cutting and Packing Problems: A categorized, application-orientated research bibliography. Journal of the
Operational Research Society, 43(7):691-706, 1992.
148
[50] TORO E GRANADA M.,.ROMERO R, Algoritmo memético aplicado al problema de asignación generalizada, Revista Tecnura No 16, Universidad Distrital F.J.C., I-2005, Colombia.
[51]TORO E, GRANADA M, FRANCO J. Programación óptima de horarios de clase usando un algoritmo memético. Revista Scientia et Technica, 2006
[52] TORO E.,GRANADA M. Solución al Problema de la Asignación Generalizada Usando el Método de Búsqueda Tabú. Revista Scientia et Technica (24), 61-67, U.T.P., Colombia.2004
[53] TORO E. M . GRANADA M, Método Híbrido Entre El Algoritmo Genético De Chu-Beasley Y Simulated Annealing Para La Solución Del Problema De Asignación Generalizada, Revista Scientia et Technica (27), 61-67, U.T.P., Colombia
[54] TORO, E. GRANADA M. Problema de empaquetamiento rectangular bidimensional tipo guillotina resuelto por algoritmos genéticos. Revista Scientia et Techica. Universidad Tecnológica de Pereira año XIII. número 35. Agosto 2007.
[55] TORO E. RUEDA A., GRANADA M. Algoritmo de Búsqueda Tabú aplicado a la solución del problema de corte bidimensional guillotinado. Revista Scientia et Techica. Universidad Tecnológica de Pereira. Artículo en revisión.
[56] TORO E., GARCESA.,RUIZ H.. Solución al problema de empaquetamiento bidimensional usando un algoritmo híbrido constructivo de búsqueda en vecindad variable y recocido simulado. Artículo en revisión Revista Ingeniería y Competitividad Universidad del Valle
[57]TORO E. RUEDA A RUIZ H. Efecto de la configuración inicial en la solución del problema de corte bidimensional usando el algoritmo búsqueda tabú. Revista Scientia et Techica. Universidad Tecnológica de Pereira. Artículo en revisión.
[58]TSAI, R.D. MALSTROM, E.M. y MEEKS, H.D. (1988). A two dimensional palletizing procedure for warehouse loading operations. IIE Transactions, 20:418-425.
[59]VENDRAMINI E. “Optimización del problema de cargamento de contenedores usando una metaheurística eficiente”.Tesis Doctoral. UNESP.Brasil.2007
[60]WHITTAKER,R.. A fast algorithm for the greedy interchange for large-scale clustering and median location problems. INFOR, 21:95–108, 1983.
149
9. ANEXOS
9.1. CUI Yadoing . An exact algorithm for generating homogenous T-shape cutting patterns. Computers & Operations Research. 2007, 34(4): 1107-1120
1
Heuristic and exact algorithms for generating homogenous constrained three-staged cutting patterns
Yaodong Cui , a,
aDepartment of Computer Science, Guangxi Normal University, Guilin 541004, China
Available online 3 April 2006.
Abstract
An approach is proposed for generating homogenous three-staged cutting patterns for the constrained
two-dimensional guillotine-cutting problems of rectangles. It is based on branch-and-bound procedure
combined with dynamic programming techniques. The stock plate is divided into segments. Each segment
consists of strips with the same direction. Only homogenous strips are allowed, each of which contains
rectangles of the same size. The approach uses a tree-search procedure. It starts from an initial lower
bound, implicitly generates all possible segments through the builds of strips, and constructs all possible
patterns through the builds of segments. Tighter bounds are established to discard non-promising
segments and patterns. Both heuristic and exact algorithms are proposed. The computational results
indicate that the algorithms are capable of dealing with problems of larger scale. Finally, the solution to a
cutting problem taken from a factory that makes passenger cars is given.
Keywords: Cutting; Packing; Cutting stock; Constrained two-dimensional cutting
Article Outline
1. Introduction
2. Some basic concepts
3. The approach
3.1. Generating strips
3.2. Generating segments through vertical build of strips
3.3. Generating three-staged patterns through horizontal build of segments
3.3.1. Builds of segments
3.3.2. The upper bound of the patterns related to a segment
3.3.3. The lower bound of the patterns related to a segment
3.3.4. The upper and lower bounds of the full patterns related to a partial pattern
3.3.5. The initial lower bound
3.3.6. Inferior blocks
3.4. The exact algorithm
3.5. The heuristic algorithms
4. The computational results
4.1. Test on benchmark problems
4.2. Test on random problems of larger scale
4.3. Solution to a real cutting problem
5. Conclusions
Acknowledgements
References
1. Introduction. The constrained two-dimensional cutting (CTDC) problem discussed is as follows: mtypes of rectangles are to be cut from a rectangular plate with size L×W, where any cuts that are made are
restricted to be guillotine cuts. The ith type has size li×wi, value ci and demand di, i=1,…,m. Assume that
pattern A includes zi pieces of type i. Assume that N is the set of natural numbers. The mathematical
model for the CTDC problem is
The related unconstrained two-dimensional cutting problem (UTDC) is
2
Both problems are denoted as the two-dimensional, rectangular SLOPP type, where SLOPP means single
large object placement problem [1]. They appear in several industrial areas, such as the cutting of metal
plate, wood plate, or plate glass into smaller rectangles. Good algorithms for these problems are important
for the improvement of material usage.
This paper proposes the homogenous three-staged patterns shown in Figs. 1 and 2, where the numbers
indicate the piece types. A three-staged pattern can be divided into pieces in three stages. For the pattern
in Fig. 1, vertical cuts divide the plate into four segments at the first stage (Fig. 1a), horizontal cuts divide
the segments into strips at the second stage (Fig. 1b), and vertical cuts divide the strips into pieces at the
third stage (Fig. 1c). A pattern is referred to as a homogenous one if only pieces of the same type can
appear in a strip; otherwise it is a general one. The pattern in Fig. 1a is an X-pattern, where the segments
are arranged horizontally from left to right. Whereas the pattern in Fig. 2 is a Y-pattern, where the
segments are arranged vertically from bottom to top.
Fig. 1. Three-staged X-pattern. (a) First stage. (b) Second stage. (c) Third stage.
Fig. 2. Three-staged Y-pattern.
Sometimes the shearing and punching process is used to divide the plate into pieces [2] and [3]. It
includes two stages. At the first stage, a guillotine shear cuts the plate into strips. At the second stage, a
stamping press punches out the pieces from the strips. Typically, a strip is fed into a stamping press that
cuts a piece from the strip with each stroke, moves the strip forward, and cuts the next piece. The feeding
distance between two adjacent pieces is referred to as a step. Fig. 3 shows two strips that may be
processed at the second stage. The approach of this paper can directly deal with the cutting of a plate into
strips with equal steps (Fig. 3a). In generating cutting patterns, the strip in Fig. 3b can be treated as a strip
consisting of rectangles. The first rectangle has a length longer than that of the others. The approach of
3
this paper can be easily adapted for the case where the strips with unequal steps (Fig. 3b) are required.
The approach for the basic constrained staged cutting problem [4] cannot efficiently deal with the
problem discussed in this paper, because it is not specialized.
Fig. 3. Strips for punching. (a) A strip with equal steps. (b) A strip with unequal steps.
The homogenous three-staged patterns are applicable even if a guillotine shear is used to cut the strips
into pieces at the second stage. To cut a homogenous strip into pieces, the feeding distance for each cut
can be gauged at the start and will not change during the cutting process of the strip. Fig. 4 shows a
uniform strip and a general strip. A uniform strip contains pieces of the same width. Changing the feeding
distance becomes necessary during the cutting of a uniform strip. This makes the cutting process more
complex than that of a homogenous strip. A general strip consists of pieces of different sizes. Changing
the feeding distance is also necessary during the cutting process. Furthermore, the pieces must be trimmed
horizontally to produce the exact widths. Trimming is not necessary for homogenous or uniform strips.
For these three types of strips, the cutting process of the general strip is the most complex one, and that of
the homogenous strip is the simplest one.
Fig. 4. Uniform and general strips. (a) A uniform strip. (b) A general strip.
To simplify the cutting process of homogenous three-staged patterns, a constraint on the minimum strip
length can be used. For the pattern in Fig. 1a, the plate length is 1800. Fig. 5a shows the pattern obtained
when the minimum strip length allowed is 350, and Fig. 5b shows that when the minimum strip length
allowed is 500. Although using constraint on the minimum strip length can simplify the cutting process, it
may increase the amount of waste. Balance should be made between the simplicity of the cutting process
and the level of waste.
Fig. 5. Patterns for different minimum strip lengths. (a) A pattern of three segments. (b) A pattern of two
segments.
Many authors have investigated the CTDC problem. There exist two exact approaches: the top-down
approach [4] and [5] and the bottom-up one [6], [7], [8], [9], [10] and [11]. The top-down approach was
4
first presented in [4]. It uses a tree-search procedure. All possible cuts that can be made on the stock plate
are enumerated by means of a tree in which branching corresponds to guillotine cuts and nodes represent
sub-rectangles obtained through the guillotine cut. The approach was improved in [5], in which the search
space is limited by using a bound derived from a state space relaxation of a dynamic programming
formulation of the problem. The bottom-up approach is based on the observation that any pattern
satisfying the guillotine constraint can be obtained through horizontal and vertical builds of rectangles.
All possible combinations of smaller rectangles are generated to obtain larger rectangles until no more
guillotine patterns can be obtained. Both approaches can use upper and lower bounds to discard some
non-promising branches. The patterns generated are usually difficult to cut. The approach proposed in this
paper is a bottom-up one. It can generate relatively simple cutting patterns.
Hifi and Roucairol [12] presented an approach for generating two-staged constrained cutting patterns.
Morabito and Arenales [13] proposed an AND/OR-graph approach for staged and constrained two-
dimensional guillotine cutting problems. The former is a bottom-up approach and the later a top-down
approach. Lodi and Monaci [14] presented integer and linear programming models for two-staged
constrained cutting patterns, and their algorithms are comparable to Hifi and Roucairol's exact algorithm
in computation time. These approaches can simplify the cutting process in some degree for that strips are
used. It cannot efficiently deal with the case where the strip in Fig. 3a is required. Furthermore, for
problems of relatively larger scale, the computation time of these algorithms is too long to afford because
of the tremendous solution space.
Vanderbeck [15] discussed a three-staged two-dimensional cutting-stock problem where various
constraints coming from practice are considered. He also used homogenous three-staged cutting patterns
and generated them heuristically. Only a small portion of the solution space is considered because of the
practical considerations.
This paper presents heuristic and exact algorithms for homogenous three-staged patterns. The
computational results indicate that the algorithms are efficient in computation time. The algorithms are
described only for X-patterns, which can be easily adapted for Y-patterns.
2. Some basic concepts
Assume that the sizes of the pieces and the stock plate are integers. To facilitate presentation, the
algorithms will be described only for the case where the pieces have fixed direction.
Definition 1
Strips, segments, patterns, and partial patterns: Only horizontal strips are used in X-patterns. A strip
contains one or more pieces of the same type, a segment consists of one or more strips, and a pattern
includes one or more segments. The value of a strip is the sum of the values of the pieces included, the
value of a segment is the sum of the values of the strips included, and the value of a pattern is the sum of
the segments included.
The pattern in Fig. 5a includes three segments, the third segment (counted from left to right) consists of
six strips, and the bottom strip in this segment contains five pieces of type 6.
Sometimes it is necessary to differentiate between full patterns and partial patterns. A partial pattern is
realized on a partial plate x×W, where x L. A full pattern is realized on the original stock plate L×W.
Definition 2
Normal lengths: A normal length is the multiple of a piece length. Assume that Lp is the minimum strip
length allowed, which is used to simplify the cutting pattern. Normal lengths related to the ith piece type
are
5
Assume that P is the set of normal lengths. To facilitate the design of the algorithms, add 0 and L to the
above set, and arrange the elements in ascending order, namely P={p1,…,pM}, p1=0, pM=L, and pi<pi+1 for
i=1,…,M-1.
Normal lengths have the following property [8] and [16]: the optimal value of segment x×y is the same as
that of segment p(x)×y, where p(x) is the maximum normal length not larger than x.
Definition 3
Normal segments and normal patterns: The strips in a normal segment are arranged from bottom to top in
non-increasing order of their lengths. The segments in a normal pattern are arranged from left to right in
non-increasing order of their lengths. In searching for the optimal pattern, it is sufficient to consider only
normal patterns and normal segments. The reason is that any non-normal pattern can be transformed to a
normal one through position interchanging of the segments, without changing the value of the pattern, and
any non-normal segment can be transformed to a normal one through position interchanging of the strips,
without changing the value of the segment. The pattern in Fig. 5a can be transformed to the normal
pattern shown in Fig. 6.
Fig. 6. A normal pattern.
3. The approach
The approach for generating the optimal homogenous three-staged patterns consists of the following
stages: (1) Generate all possible strips; (2) Obtain all possible segments through vertical build of strips;
(3) Generate all possible three-staged patterns through horizontal build of segments, and select the best
one as the optimal solution. These three stages will be described, respectively, in Sections 3.1–3.3.
Section 3.4 presents the exact algorithm, and Section 3.5 describes the heuristic algorithms.
3.1. Generating strips
Definition 4
Possible strips for building up segments: In order to obtain all possible segments through vertical build of
strips, all possible strips must be considered. For the ith piece type, the width of the strip is wi, the number
of different strips is gi=min[di,int(L/li)]. The kth strip contains k pieces, and its value is kci, 1 k gi.
When Lp>0, the range of k should be modified to Lp/li k gi.
3.2. Generating segments through vertical build of strips
Definition 5
Vertical build of strips: Two strips A=lA×wA and B=lB×wB can form a segment C=lC×wC through vertical
build, where lC=max(lA,lB), wC=wA+wB, lC L and wC W. Moreover, the numbers of pieces in C must not
exceed the demands. The segment in Fig. 7a is obtained from the vertical build of two strips in Fig. 7b.
6
Fig. 7. Vertical build of strips. (a) A segment. (b) Two strips.
Vertical build can also be performed between a segment and a strip. It should not be performed between
two segments; otherwise duplicate segments will be produced. For example, a segment with four strips
can be obtained through the vertical build of two segments, each of which contains two strips. It can also
be generated through the vertical build of a strip and a segment with three strips. Furthermore, from
Definition 3 it is sufficient only to generate normal segments.
3.3. Generating three-staged patterns through horizontal build of segments
3.3.1. Builds of segments
Definition 6
Horizontal build of segments: Segments A=lA×wA and B=lB×wB can form a partial pattern C=lC×W through
horizontal build, where lC=lA+lB, wC=max(wA,wB) W, lC L. Moreover, the numbers of pieces in C must
not exceed the demands. The pattern in Fig. 8a is obtained from the horizontal build of the two segments
in Fig. 8b.
Fig. 8. A partial pattern obtained from the horizontal build of two segments. (a) A partial pattern. (b) Two
segments.
Horizontal build can also be performed between a segment and a partial pattern. Similar to the vertical
build of strips, horizontal build of segments should not be performed between two partial patterns, and it
is sufficient only to generate normal partial patterns.
3.3.2. The upper bound of the patterns related to a segment
All possible segments can be generated through the vertical build of strips according to Definition 5.
Some of them may not appear in the optimal solution. To cut down the number of segments explicitly
considered, it is helpful to use tighter upper bound.
Assume that val(R), the value of segment R=lR×wR, is already known. Let ubound(R) be the upper bound
of a full pattern that contains R. The strips that will be combined with R later through vertical build have
lengths not longer than lR, because only normal segments will be considered. Divide the plate into the
three regions shown in Fig. 9, where a=W-wR, b=L-lR, and the arrows indicate the strip directions of the
related regions. When the full pattern is generated, region A contains only horizontal strips, and region B
7
contains a partial pattern. Let UA be the upper bound of the total value of the pieces included in segment
lR×a, and UB be that in region b×W. Then
ubound(R)=val(R)+UA+UB. (1)
UA and UB must be determined before ubound(R) can be estimated.
Fig. 9. Upper bound for a pattern containing segment R.
First consider how to estimate UA. A constrained solution will be used. In a constrained solution, the
numbers of pieces must not exceed the demands. Assume that E(x,y) is the value of the optimal
constrained solution for segment x×y, where x is a normal length. To determine E(x,y), it is necessary to
consider some of the strips obtained from Definition 4. Index all possible strips of lengths not longer than
x from 1 to n. Let S={s1,…,sn} be the set of the widths and T={t1,…,tn} be the set of the values of these
strips. Let zi be the number of the ith strip included in the segment, and e(k,x,y) be the number of the kth
piece type in this segment. The number of the kth piece type in the ith strip is ik, k=1,…,m. Recall that
each strip contains only one piece type. For a specific i, there exists only one integer j so that ik>0 for
k=j, and ik=0 for k j. Assume that N is the set of natural numbers. The following knapsack model
determines the constrained solution of the segment:
(2)
The algorithms for solving Model (2) can be easily found in the literature [17]. After solving the model, it
is reasonable to let UA=E(lR,a).
Now consider how to estimate UB. The pattern in region b×W may be a three-staged pattern. Assume that
F(x) is the value of the optimal three-staged pattern on partial plate x×W. To determine F(x), it is
necessary to consider all possible segments of lengths between 0 and x. Assume that zi is the number of
the ith segment included in the partial plate. The following model determines the partial-constrained
solution for partial plate x×W:
8
(3)
From the property of the normal lengths, zi can be set to equal zero if i P. Model (3) is an unbounded
knapsack problem, algorithms for it can also be found in the literature. The solution obtained from Model
(3) is referred to as partial-constrained, for that the numbers of pieces in each segment are constrained,
and that the numbers of pieces in the pattern are unconstrained. After solving the model, it is reasonable
to let UB=F(b). Eq. (1) can be rewritten as
ubound(R)=val(R)+E(lR,W-wR)+F(L-lR). (4)
3.3.3. The lower bound of the patterns related to a segment
For the optimal pattern on partial plate x×W, let G(x) be the value of the approximate solution, zi be the
number of segment pi×W included in the partial plate, ik be the number of piece type k yielded by
segment pi×W, and g(k,x) be the number of piece type k included in the approximate solution. Then
(5)
Let lbound(R) be the lower bound of the full patterns containing segment R=lR×wR. Consider the three
regions in Fig. 9. Let n(k,R) be the number of the kth piece type included in R. Determine e(k,lR,W-wR),
the number of piece type kin region A, from Model (2). Determine g(k,L-lR), the number of piece type k in
region B, from Model (5). Let lbound(R)=val(R)+E(lR,W-wR)+G(L-lR) if the following equations hold:
Otherwise let lbound(R)=val(R).
3.3.4. The upper and lower bounds of the full patterns related to a partial pattern
All possible patterns can be generated through the horizontal build of segments according to Definition 6.
Some of them may not appear in the optimal solution. In order to reduce the number of patterns explicitly
considered, it is helpful to use tighter upper and lower bounds.
Assume that val(R), the value of partial pattern R=lR×W is already known. Let ubound(R) be the upper
bound of a full pattern that contains R. As shown in Fig. 10, divide plate L×W into two regions R and
A=(L-lR)×W. Region A contains a partial pattern. The upper bound of its value is F(L-lR). Therefore,
ubound(R)=val(R)+F(L-lR). (6)
9
Fig. 10. Upper bound for a full pattern containing partial pattern R.
Let lbound(R) be the lower bound of a full pattern containing partial pattern R=lR×W. If n(k,R)+g(k,L-
lR) dk holds for k=1,…,m, let lbound(R)=val(R)+G(L-lR); otherwise let lbound(R)=val(R).
3.3.5. The initial lower bound
During the searching process, when the upper bound for a pattern containing segment or partial pattern R
is less than or equal to the value of the best pattern obtained so far, R can be discarded. Initially the value
of the best pattern is set to the value of a feasible pattern, which is referred to as the initial lower bound.
Starting from a good initial lower bound can shorten the searching space greatly. In the algorithms of this
paper, the initial lower bound is set equal to G(L), which is determined from Model (5).
3.3.6. Inferior blocks
Assume that block A=lA×wA and block B=lB×wB are two blocks of the same type (either segments or
partial patterns). Assume that DA(i) is the number of piece type i in segment A, and DB(i) is that in
segment B. Refer A as an inferior segment if lA lB, wA wB, and DA(i) DB(i) holds for any i between 1
and m. It is obvious that inferior blocks can be discarded in searching for the optimal solution. In the
searching process, inferior blocks should be discarded immediately after detecting them.
3.4. The exact algorithm
Assume that pmax=maxi{ci/(liwi)} is the maximum value of the unit area of the pieces. Use blocks to
denote strips, segments, and partial patterns. A partial pattern here contains at least two segments. Let V*
be the value of the best three-staged pattern obtained so far, ubound(R) be the upper bound, and
lbound(R) the lower bound of the pattern containing block R. Let Open, Closed, ClosedA and ClosedB be
four sets to keep blocks. ClosedA contains segments. ClosedB contains partial patterns. The exact
algorithm (the EA for short) consists of the following steps:
Step 1. Obtain P={p1,…,pM}, the set of normal lengths, from Definition 2.
Step 2. Solve Model (2) to obtain E(x,y), value of the constrained solution for segment x×y, x P and 0
y W. Solve Model (3) to obtain F(x), value of the partial-constrained solution for partial plate x×W, 0
x L. Get G(x) from Model (5), which is the lower bound for the pattern on partial plate x×W, 0 x L.
Step 3. Let V*=F(L). Generate all possible strips from Definition 4, and add them to Open. Let the upper
bound of each initial strip in Open be pmaxLW.
Step 4. Go to Step 9 if Open is empty. Otherwise take one block RA from Open having the highest upper
bound ubound(RA). Go to Step 9 if ubound(RA) V*.
Step 5. If RA is a segment, put all blocks in ClosedA and ClosedB together to form a big set Closed,
transfer RA from Open to ClosedA, and go to Step 6. Otherwise transfer RA from Open to ClosedB, let
Closed=ClosedA and go to Step 7.
Step 6. Vertical build of strips: Consider the blocks in ClosedA one by one, until ubound(RA) V* or all
blocks have been considered. When finished, go to Step 7. For each block RB taken from ClosedA, skip it
10
if ubound(RB) V*. Otherwise perform vertical build between RA and RB according to Definition 5.
Determine the upper bound of the resulting block RC according to Eq. (4). Discard RC if ubound(RC) V*
or it is an inferior block. Otherwise determine lbound(RC) according to Section 3.3.3, and let
V*=max[V*,lbound(RC)].
Step 7. Horizontal build of segments: Consider the blocks in Closed one by one, until ubound(RA) V* or
all blocks have been considered. Go to Step 8 when finished. For each block RB taken from Closed, skip it
if ubound(RB) V*. Otherwise from Definition 6, obtain partial pattern RC through the horizontal build of
RA and RB. Determine ubound(RC) according to Section 3.3.4. Discard RC if ubound(RC) V* or it is an
inferior block; otherwise, determine lbound(RC) according to Section 3.3.4, and let
V*=max[V*,lbound(RC)].
Step 8. Go to Step 4.
Step 9. Output V* and stop.
The exact algorithm is basically a branch-and-bound procedure, in which dynamic programming
techniques are used to solve the knapsack problems for the lower and upper bounds. The search for the
optimal solution starts from an initial feasible lower bound (Step 3). Steps 4–8 are performed repeatedly.
Each time a block is selected from Open. If it is a partial pattern, perform horizontal build with each
segment in ClosedA to form new partial patterns (steps 5 and 7). If it is a segment, perform vertical build
with each segment in ClosedA to form new segments, and perform horizontal build with the blocks in
ClosedA and ClosedB to form new partial patterns (steps 5–7). The blocks generated in steps 6 and 7
should be add to Open for further consideration, if they are not inferior blocks and have upper bounds
larger than the value of the best pattern obtained so far. The searching process ends when Open is empty
or the maximum value of the upper bounds of the blocks in Open is not larger than the value of the best
pattern obtained so far (Step 4).
The construction process is similar to that presented in [12] except that: (1) The former considers the
builds of both strips and segments, the later considers only the build of strips; and (2) The former
estimates the bounds from the property of the homogenous three-staged patterns, the later does this from
the property of two-staged patterns.
3.5. The heuristic algorithms
Two heuristic algorithms (HA1 and HA2 for short) are straightforward. One (HA1) is to solve Model (5)
to obtain the approximate solution, which is used as the initial lower bound in the EA. The other (HA2) is
the same as the EA, except that the upper bounds of the blocks generated are underestimated. Let
uBound(R) be the upper bound used in HA2, it is set equal to r×ubound(R), where 0<r 1. HA2 is an
exact algorithm if r=1; otherwise it is a heuristic one.
It should be noted that the idea of underestimating the upper bound is also used by other authors [7] and
[13].
4. The computational results
This section presents the computational results of the test problems, and give the solution to a real cutting
problem taken from a factory that makes passenger cars. The computer used has clock rate
and main memory . Both X and Y patterns are generated for each problem, the better one of
which is taken as the solution.
4.1. Test on benchmark problems
There are no algorithms for homogenous three-staged patterns in the literature. The purpose of the test on
benchmark problems here is to demonstrate that the exact algorithm can solve the benchmark problems in
a few seconds.
11
Two-staged patterns of general strips (referred to as general two-staged patterns) are the special case of
the homogenous three-staged patterns. If it is constrained that each strip contains only one piece, the EA
will actually generate general two-staged patterns.
Hifi and Roucairol [12] presented an exact algorithm (the HRA for short) for generating general two-
staged patterns for CTDC problems. In Ref. [12, Table 5], they gave the computational results of some
test problems. The EA solved these problems in . Table 1 lists the computational results.
Where VHRA is the value of the general two-staged pattern obtained from HRA, VEA is the value and tEA is
the time for homogenous three-staged patterns generated by the EA. VEA>VHRA for 23 problems, and
VEA=VHRA for the others.
Table 1.
The computational results for benchmark problems
Problem VHRA VEA tEA Problem VHRA VEA tEA
HH 10 689 11 211 0 STS4s 9481 9700 0
2 2535 2672 0.125 OF1 2713 2713 0
3 1740 1860 0 OF2 2522 2690 0
A1 1820 1840 0 W 2623 2700 0
A2 2315 2390 0.015 CHL1s 13 036 13 036 0.094
STS2 4620 4620 0.016 CHL2s 3198 3244 0
STS4 9468 9700 0 A3 5403 5403 0
CHL1 8360 8395 0.156 A4 5905 6043 0.016
CHL2 2235 2292 0.016 A5 12 553 12 778 0.015
CW1 6402 6402 0 CHL5 363 376 0
CW2 5354 5354 0.031 CHL6 16 572 16 623 0
CW3 5689 5689 0.031 CHL7 16 728 16 728 0.110
Hch12 9630 9630 10.844 CU1 12 312 12 330 0
Hch19 5100 5100 3.985 CU2 26 100 26 100 0.015
2s 2450 2583 0.125 Hch13s 11 961 12 209 0
3s 2623 2623 0 Hch14s 11 408 11 964 0.016
A1s 2950 2950 0 Hch16s 60 170 60 828 0.031
A2s 3451 3451 0 Hch17s 62 845 62 845 0.125
12
Problem VHRA VEA tEA Problem VHRA VEA tEA
STS2s 4625 4637 0.015 Hch18s 791 876 0.172
It should be noted that the quality and runtimes of the solutions are not strictly comparable to other results
of the literature, since they relate to a particular problem class.
4.2. Test on random problems of larger scale
Two groups of problems are used. Once the paper is published, these problems will be made available on
the Internet at http://www.gxnu.edu.cn/Personal/ydcui/index.htm.
The first group includes 20 weighted problems. The variables are uniformly distributed in the following
ranges: plate length L and width W both in [1000,5000], number of piece types m in [50,100], piece
length li in [0.05L,0.3L], piece width wi in [0.05W,0.3W], piece demand di in [3,10], and piece value ci in
[0.15liwi,0.65liwi].
The computational results are summarized in Table 2, where ID is the problem index; VEA, VHA1 and VHA2
are the pattern values obtained from algorithms EA, HA1 and HA2, respectively; tEA, tHA1 and tHA2 are the
average computation times; 1=VHA1/VEA and 2=VHA2/VEA. The mark “ ” means that the value is equal
to VEA.
Table 2.
The computational results for the weighted problems
ID VEA VHA1 VHA2 tEA tHA1 tHA2 1 (%) 2 (%)
1 631 863 6 24 068 6 31 852 6.140 1.484 1.422 98.77 100.00
2 4 544 395 4 536 642 4 539 683 68.531 6.469 7.000 99.83 99.90
3 1 833 000 1 831 637 1450.282 7.921 9.875 99.93 100
4 4 339 083 9.265 9.391 9.203 100 100
5 2 676 651 3600.000 4.250 4.703 100 100
6 4 245 663 225.656 4.078 4.609 100 100
7 4 305 010 4 288 035 3600.000 12.985 15.047 99.61 100
8 3 610 441 3 604 959 3 608 015 15.860 6.969 7.891 99.85 99.93
9 7 446 330 11.031 9.203 10.047 100 100
10 6 038 211 6 005 147 6 011 779 3600.000 11.657 12.937 99.45 99.56
11 1 168 284 1 158 550 1 162 898 3.968 2.266 2.688 99.17 99.54
12 2 567 171 2 493 280 3600.000 3.875 4.312 97.12 100
13 2 795 973 5.609 4.047 4.422 100 100
14 3 152 403 3 106 495 3600.000 2.625 2.891 98.54 100
15 5 018 587 29.563 11.843 13.484 100 100
13
ID VEA VHA1 VHA2 tEA tHA1 tHA2 1 (%) 2 (%)
16 2 157 408 237.688 8.891 10.718 100 100
17 6 881 547 6 827 062 6 854 864 17.625 7.032 7.407 99.21 99.61
18 7 548 827 7 350 498 7 495 558 113.532 7.282 7.796 97.37 99.29
19 5 704 261 14.922 10.922 11.938 100 100
20 5 726 840 5 643 652 5 676 748 1293.094 12.844 14.640 98.55 99.13
For Algorithm EA, the maximum computation time allowed for a problem was set equal to , and
the initial lower bound was obtained from considering both X and Y patterns. The problem is referred to
as non-optimized if its computation time exceeds . There are five non-optimized problems
(problems 5, 7, 10, 12 and 14). If the non-optimized problems are counted and their average computation
time is taken as , then the average computation time is .
As mentioned in Section 3.5, the initial lower bound for EA is obtained from HA1 that is a heuristic
algorithm. From Table 2 it is seen that the initial lower bounds are very tight, where 1 is in the range of
[97.12%,100%] and its average value is 99.37%. The average computation time of HA1 is .
Algorithm HA2 solved these problems with r=0.90. The average computation time is . 2 is in
the range of [99.13%,100%] and its average value is 99.85%.
From the above computational results, it is clear that both the HA1 and the HA2 can give solutions very
close to those of the exact algorithm, and the average computation times of them are much more shorter
than that of the EA.
The second group includes 20 unweighted problems, which are the same as those in the first group,
except that the value of each piece is equal to its area. Use material usage u to evaluate the quality of the
solution. It is determined as
u=(Total area of pieces in the pattern)/(Area of the plate)×100%.
The computational results are summarized in Table 3. The average material usage is 99.7528% for EA,
99.7479% for HA1, and 99.7518% for HA2. The average computation time is for EA,
for HA1, and for HA2. HA1 solved 17 problems to optimality, and HA2 solved 19
problems to optimality.
Table 3.
The computational results for the unweighted problems
ID VEA VHA1 VHA2 tEA tHA1 tHA2
1 1 019 835 2.297 1.469 1.734
2 7 358 781 8.140 7.157 7.360
3 2 927 244 13.547 8.859 1.109
4 6 941 162 10.922 10.297 11.140
5 4 397 252 4 396 075 9.171 4.673 5.297
14
ID VEA VHA1 VHA2 tEA tHA1 tHA2
6 6 877 807 6.000 4.578 4.984
7 6 873 621 22.672 14.437 16.891
8 5 816 240 10.766 7.750 8.906
9 11 961 700 49.406 10.187 11.297
10 10 072 864 13.516 12.953 13.531
11 1 879 621 1 878 993 1 879 245 4.578 2.515 2.985
12 4 485 532 4.296 4.297 4.406
13 4 501 274 5.188 4.422 4.891
14 5 140 614 5 138 684 4.890 2.891 3.203
15 7 964 178 14.625 13.187 14.485
16 3 443 493 11.109 9.922 11.203
17 11 120 468 145.953 7.625 8.468
18 12 314 542 15.735 8.078 8.969
19 9 177 535 15.328 12.218 12.750
20 9 124 739 17.406 14.281 16.344
The scale of the problems is comparable to that of most practical problems. The computational results in
Table 3 indicate that the computation times of the algorithms are reasonable for problems of such scale.
4.3. Solution to a real cutting problem
The example below is taken from a factory that makes passenger cars. Pieces of 49 types are to be cut
from a stock plate of 2600×1300. Table 4 shows the piece data. The value of each piece is equal to its
area. Fig. 11 shows the cutting patterns and the computational results. In interpreting the computation
times, it should be noted that for this example, the original main memory is exhausted and
virtual memory is created in the hard disk, a portion of the computation time is consumed in
interchanging data between the main memory and the virtual memory.
Table 4.
The piece data of the example (li×wi×di)
990×235×6, 220×113×6, 288×250×6, 1160×868×3, 1000×868×3, 868×598×6, 1160×258×3,
1000×96×15, 1000×152×15, 185×160×3, 1183×521×3, 815×521×3, 1012×571×3, 455×180×3,
540×192×3, 555×210×3, 253×143×3, 442×420×3, 240×90×3, 330×182×3, 800×133×3, 800×403×6,
803×333×3, 778×116×3, 778×78×3, 1200×241×3, 1020×262×3, 1300×121×3, 1300×83×3, 800×120×3,
700×133×3,1200×85×3, 480×480×6, 965×705×3, 800×390×3, 680×185×3, 840×410×3, 800×73×3,
800×40×3, 930×78×3, 930×50×3, 600×88×3, 1200×146×6, 822×465×3, 876×318×3, 755×147×3,
15
990×235×6, 220×113×6, 288×250×6, 1160×868×3, 1000×868×3, 868×598×6, 1160×258×3,
460×180×3, 270×117×3, 215×145×3
Fig. 11. Cutting patterns for the example. (a) Fixed direction, computation time , value
3 375 050, material usage 99.85%. (b) Rotation allowed, computation time , value 3 376 597,
material usage 99.90%.
5. Conclusions
Because of the simplicity of the cutting process, cutting patterns of homogenous strips have gotten wider
use in practice. They are especially appropriate for the case where non-numerical controlled guillotine
shears are used, or the shearing and punching process is applied.
16
Other exact algorithms exist for the CTDC problems. Usually the patterns generated do not consist of
strips, and are not adequate for the shearing and punching process. The staged patterns of general or
uniform strips are not adequate either. If cutting patterns consisting of homogenous strips are required, the
algorithms of this paper may be helpful.
The scale of the random test problems is comparable to that of most practical cutting problems. The
computational results indicate that the computation time of the algorithms is reasonable for unweighted
problems. The heuristic algorithms are extremely efficient in solving weighted problems. They can give
solutions close to those of the exact algorithm in a short time period.
Acknowledgment
This paper is part of the project supported by Guangxi Science Foundation. The author wish to express
his appreciation to the supporter.
References
[1] Wascher G, Haussner H, Schumann H. An improved typology of cutting and packing problems.
European Journal of Operational Research, forthcoming.
[2] Cui Y, Huang L. Dynamic programming algorithms for generating optimal strip layouts.
Computational Optimization and Applications, 2006;33, forthcoming, http://dx.doi.org/10.1007/s10589-
005-3067-y .
[3] Z. Zhao and Y. Peng, Development of a practical blank layout optimization system for stamping die
design, International Journal of Advanced Manufacturing Technology 20 (2002), pp. 357–362.
[4] N. Christofides and C. Whitlock, An algorithm for two-dimensional cutting problems, Operations
Research 25 (1977), pp. 31–44.
[5] N. Christofides and E. Hadjiconstantinou, An exact algorithm for orthogonal 2-D cutting problems
using guillotine cuts, European Journal of Operational Research 83 (1995), pp. 21–38. Abstract
[6] K.V. Viswanathan and A. Bagehi, Best-first search methods for constrained two-dimensional cutting
stock problems, Operations Research 41 (1993), pp. 768–776. View Record in Scopus | Cited By in
Scopus
[7] P.Y. Wang, Two algorithms for constrained two-dimensional cutting stock problems, Operations
Research 32 (1983), pp. 573–586. View Record in Scopus | Cited By in Scopus
[8] V.-D. Cung, M. Hifi and B.L. Cun, Constrained two-dimensional cutting stock problems a best-first
branch-and-bound algorithm, International Transactions in Operations Research 7 (2000), pp. 185–210.
Abstract | Full Text via CrossRef
[9] M. Hifi, An improvement of Viswanathan and Bagchi's exact algorithm for constrained two-
dimensional cutting stock, Computers & Operations Research 24 (1997), pp. 727–736. Abstract | View
Record in Scopus | Cited By in Scopus
[10] A.R.S. Amaral and M. Wright, Efficient algorithm for the constrained two-dimensional cutting stock
problem, International Transactions in Operations Research 8 (2001), pp. 3–13.
[11] V.P. Daza, A.G. Alvarenga and J. Diego, Exact solutions for constrained two-dimensional cutting
problems, European Journal of Operational Research 84 (1995), pp. 633–644.
[12] M. Hifi and C. Roucairol, Approximate and exact algorithms for constrained (un)weighted two-
dimensional two-staged cutting stock problems, Journal of Combinatorial Optimization 5 (2001), pp.
465–494. Full Text via CrossRef | View Record in Scopus | Cited By in Scopus
17
[13] R. Morabito and M.N. Arenales, Staged and constrained two-dimensional guillotine cutting
problems—An AND/OR-graph approach, European Journal of Operational Research 94 (1996), pp.
548–560. Abstract | View Record in Scopus | Cited By in Scopus
[14] A. Lodi and M. Monaci, Integer linear programming models for 2-staged two-dimensional Knapsack
problems, Mathematical Programming B94 (2003), pp. 257–278. Full Text via CrossRef
[15] F. Vanderbeck, A nested decomposition approach to a three-stage, two-dimensional cutting-stock
problem, Management Science 47 (2001), pp. 864–879. Full Text via CrossRef | View Record in Scopus |
Cited By in Scopus
[16] M. Hifi, Exact algorithms for large-scale unconstrained two and three staged cutting problems,
Computational Optimization and Applications 18 (2001), pp. 63–88. Full Text via CrossRef | View
Record in Scopus | Cited By in Scopus
[17] H. Kellerer, U. Pferschy and D. Pisinger, Knapsack problems, Springer, Berlin (2004).
Tel.: +86 773 5851286.
Computers & Operations ResearchVolume 35, Issue 1, January 2008, Pages 212-225
Part Special Issue: Applications of OR in Finance
150
9.2. Algunos Casos de prueba de la referencia [11]
Se presentan 50 casos de prueba los cuales incluyen 20 piezas rectangulares:
La base de datos para cada problema consta de los siguientes campos globales:
Identificador
Ancho del tablero
Alto del tablero
Numero de tipos de piezas
Cada sub-campo presenta los datos de cada pieza:
Espacio nulo
Ancho de la pieza
Alto de la pieza
Demanda
0 que indica sin rotación
Área
Caso 6.3
1,2002,1001, 20
53,67,1,0,3551
135,194,1,0,26190
119,407,7,0,48433
160,382,5,0,61120
194,410,8,0,79540
205,86,6,0,17630
297,319,3,0,94743
449,414,8,0,185886
81,223,2,0,18063
151
195,78,9,0,15210
400,172,4,0,68800
429,216,1,0,92664
170,217,4,0,36890
386,275,8,0,106150
51,324,4,0,16524
424,77,9,0,32648
92,416,4,0,38272
240,111,5,0,26640
383,160,8,0,61280
269,203,9,0,54607
Caso 6.4
3,2275,1191, 20
132,209,4,0,27588
382,313,10,0,119566
129,97,6,0,12513
448,123,6,0,55104
247,299,6,0,73853
80,51,3,0,4080
195,239,7,0,46605
91,287,9,0,26117
251,77,5,0,19327
317,196,1,0,62132
397,115,7,0,45655
169,293,1,0,49517
70,260,10,0,18200
360,141,6,0,50760
389,305,5,0,118645
152
381,322,9,0,122682
51,336,6,0,17136
235,335,1,0,78725
287,128,1,0,36736
365,234,4,0,85410
Los siguientes 48 casos pueden ser descargados de la dirección de Internet
http://www.gxnu.edu.cn/Personal/ydcui/English/Problems/RecPubC_G3.DTXT
153
9.3. Implementación y desarrollo de los programas de computador.
9.3.1. Usando Búsqueda Tabú clc
clear all
% En un archivo de texto se definen los datos correpondientes a la configuración inicial
% (piezas_arbol y orien_clus) además de los parámetros v1, v2, v3, v4, v5, v6, k1, k2, k3,
% k4 y alpha; los seis primeros son el número de vecinos por cada criterio, los cuatro
% siguientes son las iteraciones tabú para cada una de las listas menejadas y el último
% parámetro es la penalización.
% Carga datos desde archivo de texto:
fid = fopen('caso_1.txt', 'r');
eval(fread(fid, '*char'));
fclose(fid);
% Dimensiones de la placa:
altura_placa=dim_placa(1);
anchura_placa=dim_placa(2);
% Organización de datos:
num_tipos_piezas=size(stock,2);
num_clusters_basicos=size(find(piezas_arbol<=num_tipos_piezas),2)/2;
% Disponibilidad de piezas original:
disponib=stock(3,:);
154
grafica=0; % 1 si se requiere graficar resultados de cada iteración.
hay_factible=0; % Toma el valor de 1 cuando encuentra la primera configuración
% factible.
% Creación con valores nulos de vectores necesarios en la implementación:
criterios=[]; % Almacena los valores correspondientes a los criterios generados.
vecinos=[]; % Almacena los valores correspondientes a los vecinos generados por
% cada criterio.
criterio_opt=[]; % Almacena el valor correspondientes al criterio óptimo.
vecino_opt=[]; % Almacena el valor correspondientes al vecino óptimo.
% Inicialización de las listas tabú:
tabu_entradas=zeros(1,num_tipos_piezas-1);
tabu_salidas=zeros(1,num_tipos_piezas-1);
tabu_intercambios=zeros(num_tipos_piezas,num_tipos_piezas);
tabu_cambios_cortes=zeros(1,num_clusters_basicos);
% Inicialización de valores necesarios en la implemantación:
iteracion=1; % Lleva el conteo de las iteraciones.
iter_fo_cte=1; % Lleva el conteo de las iteraciones durante las cuales la función
% objetivo permanece constante.
max_iteraciones=5000; % Máximo número de iteraciones permitido.
max_iter_fo_cte=500; % Máximo número de iteraciones permitido con la función objetivo
% constante.
optimo=0; % Toma el valor de 1 si se ha hallado la configuración óptima.
% Vectores que almacenan la disposición de las piezas y los tipos de cortes de la configuración incumbente:
incumbente_arbol=piezas_arbol;
incumbente_orien=orien_clus;
% Esta función entrega los valores de desperdicio e infactibilidad presente en la
155
% configuración actual, además de las dimensiones de los clusters:
[desp, infact, infactibilidades, alturas_clusters, anchuras_clusters] = ...
eval_fo_arbol(stock, dim_placa, piezas_arbol, rot, orien_clus);
% Inicialización de valores relacionados con la función objetivo:
val_fo_actual=desp+alpha*infact; % Valor de la función objetivo actual.
incumbente_fo=val_fo_actual; % Valor de la función objetivo incumbente.
fo_mejor_factible=val_fo_actual; % Valor de la mejor función objetivo factible.
% Esta función actualiza el vector de disponibilidad de piezas:
[disponib] = actualiz_disponib_piezas(stock, disponib, piezas_arbol);
% Grafica la configuración inicial (si grafica tiene es igual a 1):
if grafica==1
clf
graficar(stock, dim_placa, piezas_arbol, rot, orien_clus)
title([num2str(val_fo_actual) ' --> ' num2str((altura_placa*anchura_placa-desp)*100/...
(altura_placa*anchura_placa)) ', ' num2str(infact)])
pause
end
% Comienzo del algoritmo:
while iteracion<=max_iteraciones && iter_fo_cte<=max_iter_fo_cte && ...
optimo==0
% El proceso de solución culminará si se cumple cualquiera de los tres criterios de % parada:
% 1. Se alcanza el máximo número de iteraciones.
% 2. Se alcanza el máximo número de iteraciones con la función objetivo constante. % 3. Se encuentra la configuración óptima (desperdicio e infactibilidad iguales a
% cero).
% La siguiente función compacta la configuración actual agrupando los clusters que
156
% contienen piezas reales:
[piezas_arbol, orien_clus] = comprimir(piezas_arbol, orien_clus, stock);
% la siguiente función entrega los valores de desperdicio e infactibilidad presente en
% la configuración actual, además de las dimensiones de los clusters:
[desp, infact, infactibilidades, alturas_clusters, anchuras_clusters] = ...
eval_fo_arbol(stock, dim_placa, piezas_arbol, rot, orien_clus);
% valores relacionados con la función objetivo:
val_fo_actual=desp+alpha*infact; % Valor de la función objetivo actual.
desp_actual=desp; % Valor de la función objetivo incumbente.
infact_actual=infact; % Valor de la mejor función objetivo factible.
% Generación de las configuraciones vecinas:
[piezas_vecin_1, piezas_vecin_2, piezas_vecin_3, piezas_vecin_4, ...
piezas_vecin_5, piezas_vecin_6, orien_vecin_1, orien_vecin_2, ...
orien_vecin_3, orien_vecin_4, orien_vecin_5, orien_vecin_6, ...
piezas_entradas_1, piezas_entradas_2, piezas_entradas_3, ...
piezas_salidas_3, piezas_salidas_4, piezas_intercambios_5, ...
clusters_cambios_6] = ...
generar_vecinos(stock, piezas_arbol, orien_clus, infactibilidades, ...
desp, infact, disponib, alturas_clusters, anchuras_clusters, v1, ...
v2, v3, v4, v5, v6, altura_placa, anchura_placa);
% Inicialización de los vectores que almacenan los valores de la función objetivo de
% cada vecino generado:
valores_fo=[];
criterios=[];
vecinos=[];
% Evaluación de la función objetivo para cada uno de los vecinos
157
% generados:
m=1;
for i=1:6 %<-- Seis criterios de vecindad.
if i~=5
n=1;
ind_repetidos=[];
for j=1:size(eval(['piezas_vecin_' num2str(i)]),1)
[desp, infact, infactibilidades, alturas_clusters, ...
anchuras_clusters] = eval_fo_arbol(stock, dim_placa, ...
eval(['piezas_vecin_' num2str(i) '(' num2str(j) ',:)']) , rot, ...
eval(['orien_vecin_' num2str(i) '(' num2str(j) ',:)']));
if (desp+alpha*infact)==val_fo_actual
ind_repetidos(n)=j;
n=n+1;
end
end
if size(ind_repetidos,2)==size(eval(['piezas_vecin_' num2str(i)]),1)
eval(['piezas_vecin_' num2str(i) '=[];']);
eval(['orien_vecin_' num2str(i) '=[];']);
else
if size(ind_repetidos,2)>0
eval(['piezas_vecin_' num2str(i) '('...
mat2str(ind_repetidos) ',:)='''';']);
eval(['orien_vecin_' num2str(i) '('...
mat2str(ind_repetidos) ',:)='''';']);
end
end
end
end
for i=1:6 %<-- Seis criterios de vecindad.
for j=1:size(eval(['piezas_vecin_' num2str(i)]),1)
158
[desp, infact, infactibilidades, alturas_clusters, ...
anchuras_clusters] = eval_fo_arbol(stock, dim_placa, ...
eval(['piezas_vecin_' num2str(i) '(' num2str(j) ',:)']) , rot, ...
eval(['orien_vecin_' num2str(i) '(' num2str(j) ',:)']));
valores_fo(m)=desp+alpha*infact;
criterios(m)=i;
vecinos(m)=j;
m=m+1;
end
end
% Determinación de las configuraciones vecinas tabú:
num_vecinos=size(valores_fo,2);
vecinos_tabu=zeros(1,num_vecinos);
m=1;
for i=1:size(piezas_vecin_1,1) % Primer criterio.
if tabu_entradas(piezas_entradas_1(i,1))~=0
vecinos_tabu(m)=1;
end
m=m+1;
end
m=size(piezas_vecin_1,1)+1;
for i=1:size(piezas_vecin_2,1) % Segundo criterio.
if tabu_entradas(piezas_entradas_2(i,1))~=0
vecinos_tabu(m)=1;
end
m=m+1;
end
m=size(piezas_vecin_1,1)+size(piezas_vecin_2,1)+1;
for i=1:size(piezas_vecin_3,1) % Tercer criterio.
if tabu_entradas(piezas_entradas_3(i,1))~=0 || ...
159
tabu_salidas(piezas_salidas_3(i,1))~=0
vecinos_tabu(m)=1;
end
m=m+1;
end
m=size(piezas_vecin_1,1)+size(piezas_vecin_2,1)+size(piezas_vecin_3,1)+1;
for i=1:size(piezas_vecin_4,1) % Cuarto criterio.
if tabu_salidas(piezas_salidas_4(i,1))~=0
vecinos_tabu(m)=1;
end
m=m+1;
end
m=size(piezas_vecin_1,1)+size(piezas_vecin_2,1)+...
size(piezas_vecin_3,1)+size(piezas_vecin_4,1)+1;
for i=1:size(piezas_vecin_5,1) % Quinto criterio.
if tabu_intercambios(piezas_intercambios_5(i,1), ...
piezas_intercambios_5(i,2))~=0
vecinos_tabu(m)=1;
end
m=m+1;
end
m=size(piezas_vecin_1,1)+size(piezas_vecin_2,1)+...
size(piezas_vecin_3,1)+size(piezas_vecin_4,1)+...
size(piezas_vecin_5,1)+1;
for i=1:size(piezas_vecin_6,1) % Sexto criterio.
if tabu_cambios_cortes(clusters_cambios_6(i,1))~=0
vecinos_tabu(m)=1;
end
m=m+1;
end
160
% Organización de los valores de las funciones objetivo de los vecinos generados
% en orden ascendente:
[valores_fo, indices_asc]=sort(valores_fo, 'ascend');
criterios_temp=[];
vecinos_temp=[];
vecinos_tabu_temp=[];
for i=1:num_vecinos
criterios_temp(i)=criterios(indices_asc(i));
vecinos_temp(i)=vecinos(indices_asc(i));
vecinos_tabu_temp(i)=vecinos_tabu(indices_asc(i));
end
criterios=criterios_temp;
vecinos=vecinos_temp;
vecinos_tabu=vecinos_tabu_temp;
% Constancia de la incumbente:
incumbente_anterior=incumbente_fo;
% Grafica la configuración actual (si grafica es igual a 1):
if grafica==1
clf
graficar(stock, dim_placa, piezas_arbol, rot, orien_clus)
title([num2str(val_fo_actual) ' --> ' num2str((altura_placa*...
anchura_placa-desp_actual)*100/...
(altura_placa*anchura_placa)) ', ' num2str(infact_actual)])
scrsz = get(0,'ScreenSize');
figure('Position',[1 scrsz(4) scrsz(3) scrsz(4)])
axis off
% Valores que son mostrados si se habilita la opción de graficar (grafica=1):
text(-0.15,1.05,'Iteración actual: ') % Iteración actual.
text(0,1.05,num2str(iteracion))
161
text(-0.15,1.025,'Valor FO actual: ') % Valor de la función objetivo actual.
text(0,1.025,num2str(val_fo_actual))
text(-0.15,1,'Conf. actual: ') % Configuración actual.
text(0,1,mat2str(piezas_arbol))
text(-0.15,0.975,'Iter. FO constante: ') % Iteraciones con función objetivo
% constante.
text(0,0.975,num2str(iter_fo_cte))
text(-0.15,0.9,'Incumbente: ') % Valor de la incumbente.
text(0,0.9,mat2str(incumbente_fo))
text(-0.15,0.87,'Valores fo vecinos: ', 'FontSize', 6.5) % Valores de la función
% objetivo de los vecinos
% generados a partir de la
% configuración actual.
text(0,0.87,mat2str(valores_fo), 'FontSize', 6.5)
text(-0.15,0.825,'Vecinos tabú: ') % Vector que indica cuáles son los vecinos tabú.
text(-0.15,0.8,'Criterios: ')
text(-0.15,0.775,'Vecinos: ')
m=0;
for i=1:size(vecinos_tabu,2)
text(m,0.825,num2str(vecinos_tabu(i)))
text(m,0.8,num2str(criterios(i)))
text(m,0.775,num2str(vecinos(i)))
m=m+0.025;
end
text(-0.15,0.725,'Lista tabú de entradas:') % Lista tabú de piezas ingresadas.
text(0.05,0.725,mat2str(tabu_entradas))
text(-0.15,0.7,'Lista tabú de salidas:') % Lista tabú de piezas retiradas.
text(0.05,0.7,mat2str(tabu_salidas))
text(-0.15,0.675,'Lista tabú de intercambios:') % Lista tabú de piezas
% intercambiadas.
for i=1:size(tabu_intercambios,1)
162
text(0.05,0.7-i*0.025,mat2str(tabu_intercambios(i,:)))
end
text(0.4,0.7,'Entradas criterio 1: ') % Piezas ingresadas de acuerdo al primer
% criterio.
text(0.6,0.7,mat2str(piezas_entradas_1))
text(0.4,0.65,'Entradas criterio 2: ') % Piezas ingresadas de acuerdo al segundo
% criterio.
text(0.6,0.65,mat2str(piezas_entradas_2))
text(0.4,0.6,'Entradas criterio 3: ') % Piezas ingresadas de acuerdo al tercer
% criterio.
text(0.6,0.6,mat2str(piezas_entradas_3))
text(0.4,0.55,'Salidas criterio 3: ') % Piezas retiradas de acuerdo al tercer
% criterio.
text(0.6,0.55,mat2str(piezas_salidas_3))
text(0.4,0.5,'Salidas criterio 4: ') % Piezas retiradas de acuerdo al cuarto
% criterio.
text(0.6,0.5,mat2str(piezas_salidas_4))
text(0.4,0.45,'Intercambios criterio 5: ') % Piezas intercambiadas de acuerdo al
% quinto criterio.
text(0.6,0.45,mat2str(piezas_intercambios_5))
pause
closereq
end
% Selección de la nueva configuración actual tomada de los vecinos generados:
i=1;
while i<=num_vecinos && optimo==0
if valores_fo(i)==0
disp('')
disp(['***************************************************' ...
163
'*****************************************************'])
disp(['¡Configuración óptima encontrada en la iteración ' ...
num2str(iteracion) '!'])
disp(['***************************************************' ...
'*****************************************************'])
piezas_arbol_optimo=eval(['piezas_vecin_' ...
num2str(criterios(i)) '(' num2str(vecinos(i)) ',:)']);
orien_clus_optimo=eval(['orien_vecin_' num2str(criterios(i)) '(' ...
num2str(vecinos(i)) ',:)']);
optimo=1;
end
if valores_fo(i)<incumbente_fo && valores_fo(i)>0 && optimo==0
incumbente_fo=valores_fo(i); % Nuevo valor de la fo incumbente.
% Compresión de la nueva configuración incumbente:
[incumbente_arbol, incumbente_orien] = comprimir(eval(['piezas_vecin_' ...
num2str(criterios(i)) '(' num2str(vecinos(i)) ',:)']), ...
eval(['orien_vecin_' num2str(criterios(i)) '(' ...
num2str(vecinos(i)) ',:)']), stock);
if vecinos_tabu(i)==1
% Criterio de aspiración:
j=1;
if criterios(i)==1 || criterios(i)==2
while j<=num_clusters_basicos*2
if piezas_arbol(j)~=incumbente_arbol(j)
tabu_entradas(incumbente_arbol(j))=0;
j=num_clusters_basicos*2;
end
j=j+1;
end
end
164
if criterios(i)==3
j=1;
while j<=num_clusters_basicos*2
if piezas_arbol(j)~=incumbente_arbol(j)
tabu_entradas(incumbente_arbol(j))=0;
tabu_salidas(piezas_arbol(j))=0;
j=num_clusters_basicos*2;
end
j=j+1;
end
end
if criterios(i)==4
j=1;
while j<=num_clusters_basicos*2
if piezas_arbol(j)~=incumbente_arbol(j)
tabu_salidas(piezas_arbol(j))=0;
j=num_clusters_basicos*2;
end
j=j+1;
end
end
if criterios(i)==5
j=1;
while j<=num_clusters_basicos*2
if piezas_arbol(j)~=incumbente_arbol(j)
tabu_intercambios(piezas_arbol(j),...
incumbente_arbol(j))=0;
tabu_intercambios(incumbente_arbol(j),...
piezas_arbol(j))=0;
j=num_clusters_basicos*2;
end
165
j=j+1;
end
end
if criterios(i)==6
j=1;
while j<=num_clusters_basicos
if orien_clus(j)~=incumbente_orien(j)
tabu_cambios_cortes(j)=0;
j=num_clusters_basicos;
end
j=j+1;
end
end
else % Actualización de las listas tabú:
[tabu_entradas, tabu_salidas, tabu_intercambios] = ...
listas_tabu(stock, incumbente_arbol, k1, ...
k2, k3, k4, tabu_entradas, tabu_salidas, ...
tabu_intercambios, tabu_cambios_cortes, criterios(i), ...
vecinos(i), piezas_entradas_1, piezas_entradas_2, ...
piezas_entradas_3, piezas_salidas_3, piezas_salidas_4, ...
piezas_intercambios_5, clusters_cambios_6);
end
% Actualización de los valores relacionados con la función objetivo:
val_fo_actual=incumbente_fo;
piezas_arbol=incumbente_arbol;
orien_clus=incumbente_orien;
% Actualización de la disponibilidad de piezas:
[disponib] = actualiz_disponib_piezas(stock, disponib,...
166
incumbente_arbol);
salida=1;
end
if valores_fo(i)>incumbente_fo && optimo==0 ...
&& valores_fo(i)~=val_fo_actual % Nuevo valor de la función objetivo
% actual.
if vecinos_tabu(i)==0
val_fo_actual=valores_fo(i);
% Actualización de la disponibilidad de piezas:
[disponib] = actualiz_disponib_piezas(stock, disponib,...
eval(['piezas_vecin_' num2str(criterios(i)) '(' ...
num2str(vecinos(i)) ',:)']));
% Actualización de las listas tabú:
[tabu_entradas, tabu_salidas, tabu_intercambios] = ...
listas_tabu(stock, eval(['piezas_vecin_' ...
num2str(criterios(i)) '(' num2str(vecinos(i)) ',:)']), ...
k1, k2, k3, k4, tabu_entradas, tabu_salidas, ...
tabu_intercambios, tabu_cambios_cortes, criterios(i), ...
vecinos(i), piezas_entradas_1, piezas_entradas_2, ...
piezas_entradas_3, piezas_salidas_3, piezas_salidas_4, ...
piezas_intercambios_5, clusters_cambios_6);
% Compresión de la configuración actual:
[piezas_arbol, orien_clus] = comprimir(eval(['piezas_vecin_' ...
num2str(criterios(i)) '(' num2str(vecinos(i)) ',:)']), ...
eval(['orien_vecin_' num2str(criterios(i)) '(' ...
num2str(vecinos(i)) ',:)']), stock);
salida=1;
end
end
i=i+1;
167
end
% Muestra resultados de cada iteración:
if optimo==0 % En caso de haberse encontrado la configuración óptima.
[desp, infact, infactibilidades, alturas_clusters, anchuras_clusters] = ...
eval_fo_arbol(stock, dim_placa, piezas_arbol, rot, orien_clus);
disp ([num2str(iteracion) ' ' num2str(infact) ' ' ...
num2str((altura_placa*anchura_placa-desp)...
*100/(altura_placa*anchura_placa)) ])
if infact==0
if val_fo_actual<fo_mejor_factible
fo_mejor_factible=val_fo_actual;
arbol_mejor_factible=piezas_arbol;
orien_clus_mejor_factible=orien_clus;
porc_mejor_factible=(altura_placa*anchura_placa-desp)*100/...
(altura_placa*anchura_placa);
hay_factible=1;
end
end
else % En caso de no haberse encontrado la configuración óptima.
clf
subplot(2,1,1);
graficar(stock, dim_placa, piezas_arbol_optimo, rot, orien_clus_optimo)
title('0')
subplot(2,1,2);
axis off
text(-0.15,1.2,'Incumbente: ')
text(0.1,1.2,mat2str(incumbente_fo))
text(-0.15,1.1,'Valores fo vecinos: ')
text(0.1,1.1,mat2str(valores_fo))
text(-0.15,1,'Vecinos tabú: ')
168
text(0.1,1,mat2str(vecinos_tabu))
text(-0.15,0.9,'Criterios: ')
text(0.1,0.9,mat2str(criterios))
text(-0.15,0.8,'Vecinos: ')
text(0.1,0.8,mat2str(vecinos))
end
% Constancia de la incumbente:
if incumbente_fo==incumbente_anterior
iter_fo_cte=iter_fo_cte+1;
end
if incumbente_fo<incumbente_anterior
iter_fo_cte=1;
end
% Muestra los resultados obtenidos en caso de que la incumbente no haya cambiado
% durante un número de iteraciones previamente definido:
if iter_fo_cte==max_iter_fo_cte
[desp, infact, infactibilidades, alturas_clusters, anchuras_clusters] = ...
eval_fo_arbol(stock, dim_placa, incumbente_arbol, rot, incumbente_orien);
if infact==0
mejor_solucion=(altura_placa*anchura_placa-desp)*100/(altura_placa...
*anchura_placa);
end
disp(['***************************************************' ...
'*****************************************************'])
disp(['¡No ha cambiado la incumbente desde hace ' ...
num2str(max_iter_fo_cte) ' iteraciones' '!'])
disp(['El porcentaje de uso de la incumbente es ' ...
169
num2str((altura_placa*anchura_placa-desp)*100/(altura_placa...
*anchura_placa)) ' con infactibilidad de ' num2str(infact) '.'])
disp(['***************************************************' ...
'*****************************************************'])
end
iteracion=iteracion+1;
end
A continuación se muestra cada una de las funciones utilizadas en el código anterior.
Evaluación de la función objetivo
[desp, infact, infactibilidades, alturas_clusters, anchuras_clusters] = ...
eval_fo_arbol(stock, dim_placa, piezas_arbol, orien_clus)
Los resultados entregados por esta función permiten la evaluación de la función objetivo.
El argumento de esta función es:
a. La matriz stock que contiene las dimensiones y cantidad de las piezas. b. El vector dim_placa que contiene las dimensiones de la placa en la cual se ubicarán las
piezas.c. El vector piezas_arbol donde se encuentran las piezas presentes en la configuración
acutal.d. El vector orien_clus donde se encuentran los tipos de cortes de cada cluster de la
configuración actual.
Los resultados proporcionados por esta función son:
a. El valor desp: desperdicio total en la configuración actual. b. El valor infact: infactibilidad total en la configuración actual. c. El vector infactibilidades: infactibilidades presentes en cada cluster de la
configuración actual. d. Los vectores alturas_clusters y anchuras_clustes: dimensiones de cada uno de
los clusters de la configuración actual.
170
Disponibilidad de piezas
[disponib] = actualiz_disponib_piezas(stock, disponib, piezas_arbol)
Esta función actualiza el vector que contiene la disponibilidad de piezas.
El argumento de esta función es:
a. La matriz stock que contiene las dimensiones y cantidad de las piezas. b. El vector disponib sin actualizar con la disponibilidad de las piezas. c. El vector piezas_arbol donde se encuentran las piezas presentes en la configuración
acutal.
Esta función entrega un único resultado: el vector disponib actualizado con la nueva disponibilidad de piezas.
Gráfica de la configuración
graficar(stock, dim_placa, piezas_arbol, orien_clus)
Mediante esta función se realiza la gráfica de la configuración actual.
El argumento de esta función es:
a. La matriz stock que contiene las dimensiones y cantidad de las piezas. b. El vector dim_placa que contiene las dimensiones de la placa en la cual se ubicarán las
piezas.c. El vector piezas_arbol donde se encuentran las piezas presentes en la configuración
acutal.d. El vector orien_clus donde se encuentran los tipos de cortes de cada cluster de la
configuración actual.
Compresión de la configuración
[piezas_arbol, orien_clus] = comprimir(piezas_arbol, orien_clus, stock)
Esta función agrupa todos los clusters que contengan piezas reales. Por ejemplo, en la configuración siguiente:
piezas_arbol=[5 4 2 1 7 7 3 6 7 7 7 7 . . .]
los primeros cuatro clusters están formados por las piezas 5 – 4, 2 – 1, 7 – 7, 3 – 6, 7 – 7, 7 – 7, etc. Suponiendo que la pieza nula o ficticia es la tipo 7, se puede apreciar que tercer cluster de izquierda a derecha, el cual es un cluster formado por piezas nulas, está entre dos clusters formados por piezas reales. La configuración entregada por la función comprimir, es decir, la función comprimida es:
171
piezas_arbol=[5 4 2 1 3 6 7 7 7 7 7 7 . . .]
Lo buscado con la compresión de la configuración es impedir cualquier desorden en la misma que aumente su tamaño innecesariamente.
El argumento de esta función es:
a. El vector piezas_arbol donde se encuentran las piezas presentes en la configuración acutal.
b. El vector orien_clus donde se encuentran los tipos de cortes de cada cluster de la configuración actual.
c. La matriz stock que contiene las dimensiones y cantidad de las piezas.
Generación de las configuraciones vecinas
[piezas_vecin_1, piezas_vecin_2, piezas_vecin_3, piezas_vecin_4, ...
piezas_vecin_5, piezas_vecin_6, orien_vecin_1, orien_vecin_2, ...
orien_vecin_3, orien_vecin_4, orien_vecin_5, orien_vecin_6, ...
piezas_entradas_1, piezas_entradas_2, piezas_entradas_3, ...
piezas_salidas_3, piezas_salidas_4, piezas_intercambios_5, ...
clusters_cambios_6] = ...
generar_vecinos(stock, piezas_arbol, orien_clus, infactibilidades, ...
desp, infact, disponib, alturas_clusters, anchuras_clusters, v1, ...
v2, v3, v4, v5, v6, altura_placa, anchura_placa)
Esta función genera las configuraciones vecinas a la configuración actual según los criterios de vecindad.
El argumento de esta función es:
a. La matriz stock que contiene las dimensiones y cantidad de las piezas. b. El vector piezas_arbol donde se encuentran las piezas presentes en la configuración
acutal.c. El vector orien_clus donde se encuentran los tipos de cortes de cada cluster de la
configuración actual. d. El vector infactibilidades: infactibilidades presentes en cada cluster de la
configuración actual. e. El valor desp: desperdicio total en la configuración actual. f. El valor infact: infactibilidad total en la configuración actual. g. El vector disponib sin actualizar con la disponibilidad de las piezas.
172
h. Los vectores alturas_clusters y anchuras_clustes: dimensiones de cada uno de los clusters de la configuración actual.
i. Los valores v1, v2, v3, v4, v5 y v6: número de vecinos a generar según cada uno de los criterios.
j. Los valores altura_placa y anchura_placa: dimensiones de la placa donde se ubican las piezas.
Los resultados entregados por esta función son:
a. Las matrices piezas_vecin_1, piezas_vecin_2, piezas_vecin_3,piezas_vecin_4, piezas_vecin_5 y piezas_vecin_6 con las piezas de las configuraciones vecinas generadas según los criterios primero, segundo, tercero, cuarto, quinto y sexto respectivamente.
b. Las matrices orien_vecin_1, orien_vecin_2, orien_vecin_3, orien_vecin_4,orien_vecin_5 y orien_vecin_6 con los tipos cortes en los clusters de cada configuración vecina.
c. El vector piezas_entradas_1: piezas que ingresadas en las configuraciones vecinas generadas según el primer criterio.
d. El vector piezas_entradas_2: piezas que ingresadas en las configuraciones vecinas generadas según el segundo criterio.
e. El vector piezas_entradas_3: piezas que ingresadas en las configuraciones vecinas generadas según el tercer criterio.
f. El vector piezas_salidas_3: piezas que retiradas en las configuraciones vecinas generadas según el tercer criterio.
g. El vector piezas_salidas_4: piezas que retiradas en las configuraciones vecinas generadas según el cuarto criterio.
h. El vector piezas_intercambiadas_5: piezas que se intercambian en las configuraciones vecinas generadas según el quinto criterio.
i. El vector clusters_cambios_6: cortes que se cambian en las configuraciones vecinas generadas según el cuarto criterio.
Actualización de las listas tabú
[tabu_entradas, tabu_salidas, tabu_intercambios, tabu_cambios_cortes] = ...
listas_tabu(stock, incumbente_arbol, k1, k2, k3, k4, tabu_entradas, tabu_salidas, ...
tabu_intercambios, tabu_cambios_cortes, criterios(i), vecinos(i), ...
piezas_entradas_1, piezas_entradas_2, piezas_entradas_3, piezas_salidas_3, ...
piezas_salidas_4, piezas_intercambios_5, clusters_cambios_6)
Mediante esta función se actualizan las listas tabú en cada iteración.
El argumento de esta función es:
a. La matriz stock que contiene las dimensiones y cantidad de las piezas. b. El vector incumbente_arbol donde se encuentran las piezas presentes en la
configuración incumbente. c. Los valores k1, k2, k3 y k4: número de iteraciones durante las cuales permanecerá tabú
una pieza ingresada, extraída, intercambiada con una pieza externa o intercambiada con una pieza de la misma configuración.
173
d. El vector sin actualizar tabu_entradas con las piezas tabú por ingreso. e. El vector sin actualizar tabu_salidas con las piezas tabú por extracción. f. El vector sin actualizar tabu_intercambios con las piezas tabú por intercambio. g. El vector sin actualizar tabu_cambios_cortes con los cortes tabú por cambio de los
mismos.h. El valor criterios(i) donde está el índice del criterio analizado, por lo tanto este valor
puede ser 1, 2, 3, 4,5 ó 6. i. El valor vecinos(i) donde está el índice de la configuración vecina generada según el
criterio criterios(i).j. El vector piezas_entradas_1: piezas que ingresadas en las configuraciones vecinas
generadas según el primer criterio. k. El vector piezas_entradas_2: piezas que ingresadas en las configuraciones vecinas
generadas según el segundo criterio. l. El vector piezas_entradas_3: piezas que ingresadas en las configuraciones vecinas
generadas según el tercer criterio. m. El vector piezas_salidas_3: piezas que retiradas en las configuraciones vecinas
generadas según el tercer criterio. n. El vector piezas_salidas_4: piezas que retiradas en las configuraciones vecinas
generadas según el cuarto criterio. o. El vector piezas_intercambiadas_5: piezas que se intercambian en las
configuraciones vecinas generadas según el quinto criterio. j. El vector clusters_cambios_6: cortes que se cambian en las configuraciones vecinas
generadas según el cuarto criterio.
Los resultados de esta función son:
a. El vector actualizado tabu_entradas con las piezas tabú por ingreso. b. El vector actualizado tabu_salidas con las piezas tabú por extracción. c. El vector actualizado tabu_intercambios con las piezas tabú por intercambio. d. El vector actualizado tabu_cambios_cortes con los cortes tabú por cambio de los
mismos.
174
9.3.2. Usando el algoritmo híbrido
Ejemplo de prueba 1
Xm = 2002; % ancho de la hojaYm = 1001; % largo de la hojaNm = 20; % numero máximo de configuraciones distintas% DimensionesE = [53, 67, 1, 0, 3551 135, 194, 1, 0, 26190 119, 407, 7, 0, 48433 160, 382, 5, 0, 61120 194, 410, 8, 0, 79540 205, 86, 6, 0, 17630 297, 319, 3, 0, 94743 449, 414, 8, 0, 185886 81, 223, 2, 0, 18063 195, 78, 9, 0, 15210 400, 172, 4, 0, 68800 429, 216, 1, 0, 92664 170, 217, 4, 0, 36890 386, 275, 8, 0, 106150 51, 324, 4, 0, 16524 424, 77, 9, 0, 32648 92, 416, 4, 0, 38272 240, 111, 5, 0, 26640 383, 160, 8, 0, 61280 269, 203, 9, 0, 54607];
Algoritmo 1: Búsqueda en entorno variable.
clcclear allE1 % Sistema de pruebaP = E(:,1:2); % DimensionesD = E(:,3); % Demanda de cada tipoA = P(:,1).*P(:,2); % Area de cada configuracionNP = length(D); % Numero de piezasNC = 3 ; % Numero de capasNn = 2^(NC); % numero de nodos finales: los que
finalmente contienen elementosNc = Nn-1;X.TC = round(rand(Nc,1)); X.Ds = rand(Nc,1); [fo nf] = funcionobjetivo(X,Nn,Xm,Ym,NC,Nc,P,A,Nm,D);
maxiter = 1000; sm = 0; for iter = 1:100 sm = sm + 1; if sm > Nc
sm = 1;end
Xt = X; s(iter) = round(rand*(sm-1))+1; for u = 1:s(iter)
175
yt = round(rand*(Nc-1))+1; Xt.TC(yt) = not(Xt.TC(yt)); end;
Incumbente = Aleatorio(Xt,Nn,Xm,Ym,NC,Nc,P,A,Nm,D,maxiter); ft = Incumbente.fo; Xt = Incumbente.X;
if ft > fo fo = ft; X = Xt; disp(strcat(num2str(fo*100),': ',num2str(sm),':',num2str(iter))); sm = 1;
endend
Algoritmo 2: Simulated Annealing para el cálculo de las longitudes de los cortes
function [Incumbente] = Aleatorio(Xu,Nn,Xm,Ym,NC,Nc,P,A,Nm,D,maxiter); %% Inicializar la poblaciónIncumbente.X = Xu; Incumbente.fo = funcionobjetivo(Xu,Nn,Xm,Ym,NC,Nc,P,A,Nm,D);
%% Calcular la funcion objetivo for iter = 1:maxiter XA = Incumbente.X;
for ss = 1:round(rand*5) yt = round(rand*(Nc-1))+1; XA.Ds(yt) = (XA.Ds(yt) + fdelta(iter,maxiter));
if (XA.Ds(yt) > 1) XA.Ds(yt) = rand;
endif (XA.Ds(yt) < 0)
XA.Ds(yt) = rand*rand; end
end; [fa nf] = funcionobjetivo(XA,Nn,Xm,Ym,NC,Nc,P,A,Nm,D);
if fa > Incumbente.fo Incumbente.fo = fa; Incumbente.nf = nf; Incumbente.X = XA;
end
end
function y = fdelta(x,maxiter); y = (rand-0.5)*((1-x/maxiter)^0.5+0.001);
Algoritmo 3. Constructivo para el cálculo de la función objetivo.
function [fo nf] = funcionobjetivo(X,Nn,Xm,Ym,NC,Nc,P,A,Nm,D); % nf : 1 : elemento 2: cantidadp = 1; u = 1; v = 1; nodo(u,:) = [0 0 Xm Ym];
176
for k = 1:Nc if X(p).TC(k) == 0 % vertical
v = v + 1; nodo(v,:) = nodo(u,:).*[1 1 X(p).Ds(k) 1]; v = v + 1; nodo(v,:) = nodo(u,:); nodo(v,1) = nodo(u,1) + nodo(v-1,3); nodo(v,3) = nodo(u,3)*(1-X(p).Ds(k));
else % horizontal v = v + 1; nodo(v,:) = nodo(u,:).*[1 1 1 X(p).Ds(k)]; v = v + 1; nodo(v,:) = nodo(u,:); nodo(v,2) = nodo(u,2) + nodo(v-1,4); nodo(v,4) = nodo(u,4)*(1-X(p).Ds(k));
end u = u + 1;endu = length(nodo(:,1)); nf = zeros(Nn,2); AREA = 0; for k = 1:Nn na = nodo(u,:);
% revisar cual elemento cabe Au = 0;
for j = 1:Nm fx = floor(na(3)/P(j,1)); fy = floor(na(4)/P(j,2));
if (fx >= 1)&(fy >= 1) % cabe al menos una unidad ne = min(fx*fy, D(j)); % numero maximo de elementos Aut = ne*A(j); % area usada
if Aut > Au Au = Aut; nf(k,1) = j; nf(k,2) = ne; D(j) = D(j) - ne;
endend
end u = u - 1; AREA = AREA + Au; endfo = AREA/(Xm*Ym);
Toda la codificación relacionada aparece en la página 45 y 46 en la descripción del modelo matemático
177
9.4. Problema de empaquetamiento rectangular bidimensional tipo guillotina resuelto por algoritmos genéticos
Artículo publicado en revista tipo C.
Revista Scientia et Techica. Universidad Tecnológica de Pereira año XIII. número 35. Agosto 2007.
Scientia et Technica Año X, No x, Mes 200x. UTP. ISSN 0122-1701 1
Fecha de Recepción: (Letra Times New Roman de 8 puntos)
Fecha de Aceptación: Dejar en blanco
PROBLEMA DE EMPAQUETAMIENTO RECTANGULAR BIDIMENSIONAL TIPO GUILLOTINA RESUELTO POR ALGORITMOS GENÉTICOS
RESUMEN
En este artículo, se considera el problema de encontrar un patrón de
empaquetamiento de rectángulos de diferentes tamaños, en un rectángulo de
mayor tamaño tal que el área desperdiciada sea mínima. Las aplicaciones se
encuentran en industrias de perfiles metálicos, corte de maderas, papel, plástico o
vidrio en donde las piezas deben ser cortadas desde grandes hojas de material.
El problema es de tipo NP-completo, dado que los patrones de empaquetamiento
incrementan exponencialmente con el número de rectángulos que deben ser
empacados. Se utiliza el algoritmo genético modificado y se sugiere una
estrategia de codificación basada en cortes por secciones.
PALABRAS CLAVES: Problema de empaquetamiento, corte guillotina,
optimización combinatorial, metaheurísticas.
ABSTRACT
We consider problem to find a pattern to allocate a set of rectangular items of
different sizes, within a rectangle of greater size so that the wasted area is
minimum. The applications can be observed in metallic profiles industries, wood
cut, paper, plastic or glass in where the rectangular components must be cut from
great leaves of material.
It is a problem NP-hard, since the packing patterns increase exponentially with
the number of rectangles that must be allocated. A Genetic algorithm is used
and codification strategy of the problem based on cuts by sections is suggested
KEYWORDS: Packing problem, guillotine cutting, combinatorial optimization,
metaheuristics.
ELIANA MIRLEDY TORO O Ingeniera Industrial, Ms.C
Profesora catedrática.
Facultad de Ingeniería Industrial
Universidad Tecnológica de Pereira
elianam@utp.edu.co
MAURICIOGRANADA ECHEVERRI Ingeniero Electricista, Ms.C
Profesor
Facultad de Ingeniería Eléctrica
Universidad Tecnológica de Pereira
magra@utp.edu.co
1. INTRODUCCIÓN
El problema de corte de piezas rectangulares pertenece a
la familia de problemas de corte y empaque y sus
aplicaciones se pueden observar en industrias de perfiles
metálicos, corte de maderas, papel, plástico o vidrio en
donde los componentes rectangulares tienen que ser
cortados desde grandes hojas de material.
En este artículo, se considera el problema de encontrar un
patrón de empaquetamiento de rectángulos de diferentes
tamaños, dentro de un rectángulo de mayor tamaño cuyo
objetivo consiste en que el área desperdiciada sea
mínima. Este problema de empaquetamiento en dos
dimensiones es de interés científico y académico ya que
sirve como plataforma para problemas de mayor
complejidad, como el de tres dimensiones. Es un
problema de tipo NP-completo, dado que los patrones de
empaquetamiento incrementan exponencialmente con el
número de rectángulos que deben ser empacados. La
magnitud del espacio de búsqueda es mayor que el del
problema del agente viajero. Por ejemplo, si el número de
placas a ser ubicadas es de 25, el tamaño del espacio de
soluciones está dado por !25225 . Mientras que el espacio
de soluciones del agente viajero es del orden de 3110 para
un caso con igual número de ciudades considerando que
todas las ciudades estén conectadas entre si. 3125 10!252 . Esta es una de las razones para usar las
técnicas metaheurísticas como herramienta de
solución[1].
El problema descrito considera un alto grado de
diversidad en los tipos de placas o piezas rectangulares y
una única paleta en las que deben ser empacadas.
Además, sin pérdida de generalización, se asume que
todas las entradas son enteros positivos. La posibilidad de
rotar las placas un ángulo de 90º no es considerada en
este trabajo. Sin embargo, para una placa en particular es
posible resolver este problema generando un nuevo tipo
de placa con dimensiones equivalentes a ésta rotada 90º.
Este documento se presenta de la siguiente manera. El
problema de empaquetamiento bidimensional es
presentado en la sección 2. lLa Sección 3 explica el
modelo matemático , en la sección 4 se presentan el
algoritmo de solución adaptado al problema específico,
en la sección 5 se muestran las pruebas y resultados y en
Scientia et Technica Año X, No x, Mes 200x. UTP 2
la sección 6 se presentan las conclusiones con base a los
resultados obtenidos.
2. PLANTEAMIENTO DEL PROBLEMA En un problema de empaquetado de rectángulos se
dispone de un conjunto de piezas rectangulares o placas
con longitudes conocidas y se desean distribuir estas en
un objeto rectangular de mayor tamaño, denominado
paleta, de forma que se minimice el área desperdiciada
en la paleta. Una forma alternativa de interpretar el
problema supone que se dispone de un objeto rectangular
desde el que hay que obtener un conjunto de piezas
realizando cortes perpendiculares a los ejes.
Este problema se conoce comúnmente como el problema
restringido bi-dimensional de corte guillotina. Un corte es
de tipo guillotina si cuando se aplica sobre un rectángulo
produce dos nuevos rectángulos, es decir, si el corte va de
un extremo a otro del rectángulo original. En la figura 1
se muestran los diferentes tipos de problema, el área
sombreada representa las áreas sin utilizar [2].
La consideración de diferentes tipos de restricciones
puede originar problemas de empaquetamiento
totalmente distintos.
1(a) Corte Guillotina 1(b) Corte no guillotina
Figura 1. Tipos de Cortes
Pueden considerarse las siguientes tres situaciones
referidas al conocimiento que se tiene del objeto en que
hay que distribuir las piezas[3]:
1. El largo y el ancho de la paleta son conocidos. Se
pretende, por tanto, distribuir en el objeto aquellas piezas
que optimicen la función objetiva considerada. Esta
situación es la que se aborda en este artículo.
2. Sólo es conocido el ancho de la paleta mientras que el
largo se considera flexible. En este tipo de problema se
desea encontrar la distribución de piezas que minimice el
largo de la paleta. En [4] y [5] se plantean algunos
ejemplos de este problema.
3. No son conocidos ni el largo ni el ancho de la paleta.
El propósito es distribuir las piezas de tal forma que el
rectángulo que esta distribución determina sea el de
menor área. En [6] se plantean algunos ejemplos de este
problema.
3. MODELO MATEMÁTICO El problema ha sido formulado como un problema lineal
entero en [7], en este trabajo se aborda un nuevo
planteamiento. Para una adecuada formulación
matemática del problema, se implementa la siguiente
notación:
L: altura de la paleta rectangular de almacenamiento.
W: ancho de la paleta.
M: número total de piezas rectangulares o placas a ser
ubicadas.
i {1,2,…,m}: conjunto de índices de los tipos de placas.
li: altura de la placa rectangular de tipo i.
wi: ancho de la placa de tipo i.
k: alternativa de solución k conformada por dos vectores
como se muestra en la figura 3.
Sk: número máximo de secciones de la alternativa de
solución k.
La expresión matemática de la función objetivo para una
alternativa de solución k es:
.secciones( 1)
.placas( ) .placas( )
1 .secciones( ) 1
- k k
k k
k
S s
k m m
s m s
Fobj L W l w (1)
La minimización de la función objetivo mostrada en (1)
está sujeta al cumplimiento de las siguientes
restricciones, a fin de obtener una solución factible:
1. Todas las piezas tienen una orientación fija, es decir,
no se permiten rotaciones de 90ª. Esto significa que
una placa de ancho w y altura l es distinta a una pieza
de ancho l y altura w.
2. La placas deben ser ubicadas dentro de la paleta de
forma ortogonal. Esto quiere decir que los lados de
las placas son paralelos a los lados de la paleta.
3. El ancho y la altura de cada placa no debe exceder
las dimensiones de la paleta.
4. Las dimensiones de las placas y las de la paleta son
números enteros positivos.
5. Todos los cortes realizados sobre la paleta se
consideran perfectos, sin grosor.
6. Pueden haber varias placas del mismo tipo.
El objetivo del problema consiste en ubicar las placas
sobre la paleta de forma que la diferencia entre el área de
la paleta y el área total ocupada por las placas sea mínima
(minimizar el desperdicio)[8]. Una alternativa factible de
solución será aquella en la que todas las placas quedan
contenidas dentro de la paleta, ubicadas ortogonalmente y
sin traslaparse unas con otras. Por lo tanto, se pretende
encontrar una solución factible que minimice el área
desperdiciada.
4 ALGORITMO GENÉTICO DE CHU-BEASLEY
Scientia et Technica Año X, No x, Mes 200x. U.T.P
____________________________
1. Las notas de pie de página deberán estar en la página donde se citan. Letra Times New Roman de 8 puntos
3
Las principales características del Algoritmo Genético
(AG) de Chu-Beasley consisten en mantener constante el
tamaño de la población de alternativas de solución, de
manera que en cada iteración se reemplaza una
alternativa de la población usando un eficiente
mecanismo de modificación de la misma pero teniendo
en cuenta que no se admiten configuraciones repetidas
dentro de la población. En cada iteración la población es
reemplazada sistemáticamente por un único descendiente
generado[9,10]. Esta estrategia tiene la ventaja de
permitir encontrar múltiples soluciones y además
conservar la diversidad del conjunto de alternativas. El
algoritmo que describe el método es el siguiente:
1. Se genera, aleatoriamente, una población inicial de
soluciones.
2. Se obtienen las funciones objetivo, penalizando las
soluciones infactibles.
3. Se seleccionan dos padres usando el método de
selección por torneo. En este método, dos
configuraciones son elegidas aleatoriamente y se
elige uno de los padres considerando el mejor valor
en función objetivo, el otro es descartado. El
proceso se ejecuta dos veces para obtener dos
padres.
4. El proceso de recombinación y mutación se realiza
de forma integrada ya que se deben tener en cuenta
consideraciones especiales del problema. Estos
operadores actúan sobre los padres escogidos en el
paso anterior. La idea se amplia en la sección 4.2.
En esta fase se realizan mejoras en la factibilidad y
en la optimalidad, teniendo en cuenta la filosofía de
bloques constructivos.
5. Se reemplaza un individuo de la población por la
solución encontrada tomando como base lo
siguiente:
a. Si la alternativa actual es infactible y a su vez
es menos infactible que la peor infactible de la
población, entonces reemplazar la peor infactible
por la alternativa actual. Es decir, entre dos
soluciones infactibles se prefiere la solución
menos infactible.
b. Si la configuración es factible y existe por lo
menos una infactible en la población actual,
entonces reemplazar la peor infactible por la
alternativa actual. Es decir, entre una solución
factible y una infactible se prefiere la solución
factible.
c. Si la configuración es factible y todas las
alternativas de la población actual son factibles,
entonces reemplazar la alternativa con peor
función objetivo por la alternativa actual. Lo
anterior se realiza sólo si la alternativa actual es
de mejor calidad que la peor de la población. Es
decir, entre dos soluciones factibles se prefiere la
solución con mejor función objetivo.
4.1 Representación del Cromosoma
Se tiene una paleta rectangular de 24x38, donde se desean
ubicar m placas rectangulares de menor tamaño y de
diferentes tipos, en la tabla 1 se presentan los datos de
largo y ancho de cada una de las piezas y la cantidad de
piezas demandadas, una configuración factible es aquella
donde se ubiquen algunas piezas de las demandadas de
forma que se minimice el área sin utilizar.
Una alternativa de solución está codificada por dos
vectores. El primero, denominado “Placas”, contiene una
secuencia de ubicación de placas según el tipo. Dicho
vector es de un tamaño igual al número total de placas. El
segundo vector se denomina “Secciones” y contiene los
intervalos para los cuales el primer vector ubica las
placas en una misma sección. El número total de
secciones de cada alternativa es determinado de forma
aleatoria. Por lo anterior, una alternativa es un arreglo
de dos vectores a los cuales se puede hacer referencia
como .Placas y .Secciones. La altura de una sección
está determinada por la placa de mayor altura.
Largo Ancho Cantidad demandada
Paleta 24 38
Pieza tipo 1 14 19 2
Pieza tipo2 9 6 2
Pieza tipo 3 3 6 2
Pieza tipo 4 6 6 4
Pieza tipo 5 9 3 2
Pieza tipo 6 10 1 4 Tabla 1.Datos del ejemplo
Así, por ejemplo, la alternativa infactible mostrada en la
figura 2 corresponde a la ubicación de placas mostrada en
la figura 3.
.Placas= 2 0 1 5 1 0 6 6 4 0 7 3 4 7 2 7 0 6 4 5
.Secciones = 0 6 15 20
Figura 2. Alternativa de solución .
El vector Secciones indica que esta alternativa posee 3
secciones, la primera comprendida entre las posiciones 0
y 6 del vector Placas, la segunda entre 7 y 15 y la tercera
entre 16 y 20. Esto implica que, por ejemplo, la segunda
sección contiene las placas 6, 6, 4, 7, 3, 4, 7 y 2. De esta
forma, una alternativa de solución está completamente
definida por los vectores Placas y Secciones los cuales
representan la forma de ubicación de las placas en la
paleta principal. La secuencia de llenado de las placas
siempre se realiza de izquierda a derecha en cada sección.
Nótese que en el vector Placas existe la posibilidad de
encontrar campos con un valor 0. Esta posibilidad
permite que el algoritmo de optimización pueda,
eventualmente, excluir placas de la alternativa de
solución. Es decir, no es necesario que todas las placas
tengan que ser ubicadas en la paleta para una alternativa
de solución dada.
Scientia et Technica Año X, No x, Mes 200x. UTP 4
Sección 1
D1 D2
T2
T1T5
T1
T6 T4T7 T3
T4T7
T2 Sección 2D3
D4
T4T7
T5
T6
Sección 3
Figura 3. Representación de una alternativa de solución
A cada sección se asigna un área utilizada por las placas
contenidas en la misma. Además, si existen placas que se
salen de la paleta, la sección es penalizada incrementando
el área desperdiciada en un área igual a la suma de las
áreas de las placas que están por fuera de la paleta. Esto
sirve como factor de sensibilidad para orientar la
búsqueda de mejores soluciones. En otras palabras, es
necesario calcular el área desperdiciada en cada sección
con el fin de tener un indicador de las peores secciones y
por lo tanto preferir cambios, de forma probabilística, en
estas secciones.
En la figura 3 se muestra una alternativa de solución
dónde el área disponible que corresponde a la paleta está
representada por líneas rojas, y las áreas sombreadas
corresponden a los desperdicios, dentro de cada uno de
los rectángulos se indica el tipo de pieza que se está
ubicando, y las líneas punteadas en negro indican las
secciones de corte; en la sección 1 de la alternativa
mostrada se puede apreciar que el área desperdiciada es
la suma de los rectángulos nombrados como D1 y D2 ,
D1 tiene dimensiones de 5 por 6, y D2 tiene dimensiones
de 5 por 3, lo que da un total de área sin utilizar en esta
sección de 45 unidades.
Sin embargo, la segunda pieza tipo 1 está ubicada por
fuera de la paleta por lo cual esta sección es penalizada
en un valor igual al área de la placa que causa la
violación y corresponde a 14x19= 266. El área total
desperdiciada en la sección 1 es 45 +266=311.
4.2 Proceso de recombinación y mutación
El proceso de recombinación, en este problema en
particular, debe ser realizado cuidadosamente ya que es
posible obtener soluciones infactibles al implementar este
operador de la forma tradicional. Si se aplicara este tipo
de recombinación se corre el riesgo de obtener una
configuración en la cual una placa podría ocupar dos
posiciones diferentes sobre la paleta.
En este artículo se propone incorporar la filosofía de la
recombinación a través de la conservación de bloques
constructivos. El proceso consiste en usar dos puntos de
corte sobre los padres seleccionados por torneo los cuales
son representados por el vector .placas, como el
mostrado en la figura 2. Posteriormente se aplica un
operador de cruzamiento especial denominado cruce
parcialmente combinado o PMX por su significado en
inglés (Partially Matched Crossover). Este operador
permite recombinar dos cromosomas sin perder los
bloques del cromosoma que ya se había construido. En el
algoritmo tradicional PMX los puntos de corte son
escogidos aleatoriamente. Para este problema los puntos
de corte son determinados por el vector .placas de una
de las alternativas escogida aleatoriamente, en donde se
selecciona una sección para que la recombinación se
realice conservando la sección escogida. La escogencia
de la sección se hace usando selección por ruleta y se da
mayor probabilidad a la sección de mejor calidad, es
decir, se trata de conservar las secciones con menor
desperdicio o de buena calidad. Así por ejemplo, la
recombinación entre dos alternativas i y j se lleva a cabo
como se muestra a continuación:
Resultan dos descendientes, donde el primero conserva la
sección conformada por las placas (7, 9, 10):
El segundo descendiente conserva la sección conformada
por las placas (6, 2, 3):
El proceso de mutación en el algoritmo genético
tradicional es bastante simple. Consiste en intercambiar
aleatoriamente dos genes de los cromosomas obtenidos
anteriormente. En el problema que se maneja en este
artículo, el proceso de mutación es un poco distinto,
debido a que es posible afectar cualquiera de los dos
cromosomas que conforman una alternativa de solución
(ver figura 2).
La mutación consiste en escoger por ruleta una de las
secciones del hijo seleccionado. Se da mayor
probabilidad a las secciones de peor calidad y se
modifica la sección escogida siguiendo las siguientes
estrategias:
13410911232671185
38121124109761513
placasi .
placasj .
Sección escogida
por ruleta
1310740secciones.i
Puntos de recombinación
Scientia et Technica Año X, No x, Mes 200x. U.T.P
____________________________
1. Las notas de pie de página deberán estar en la página donde se citan. Letra Times New Roman de 8 puntos
5
1. Modificar el vector .placas original haciendo
permutaciones suaves usando el operador de
mutación tradicional. Es decir, escogiendo de
forma aleatoria dos elementos del vector
.placas, de la sección ganadora en la ruleta, e
intercambiándolos entre si.
2. Modificar el vector .placas original quitando de
la sección uno de sus elementos de forma
aleatoria.
3. Modificar el vector .placas original
reemplazando uno de sus elementos por una de
las placas que no pertenecen a la alternativa
actual. Esto se hace de forma aleatoria y
afectando la sección actual.
4. Modificar el vector .secciones original
reduciendo o aumentando el tamaño de la
sección actual. Este procedimiento es de gran
importancia porque permite realizar búsquedas
redimesionando las secciones. El impacto de
realizar este paso sobre la alternativa de solución
es el de pasar placas de una sección a otra.
De los descendientes anteriores, se escoge uno usando
selección proporcional (ruleta) dando mayor probabilidad
a las alternativas con mejor valor de función objetivo,
incluyendo la alternativa original.
5. PRUEBAS Y RESULTADOS
Para demostrar la eficiencia del algoritmo, se probó con
diferentes casos de prueba y se obtuvieron los siguientes
resultados.
Caso 1. Paleta de altura=24 y ancho=38.
Tipo Alto Ancho Cantidad 1 12 19 2
2 14 19 2
3 2 4 25
4 3 38 1
5 5 19 2
6 2 2 1 Tabla 2. Dimensiones y cantidad de placas para caso 1.
Para este caso se utilizó una población de 10 individuos
generando aleatoriamente tanto el vector de ubicación de
placas como el vector de secciones El algoritmo
propuesto penaliza la infactibilidad de modo que la
respuesta final contiene todas las placas dentro de la
paleta
0 5 10 15 20 25 30 35 400
5
10
15
20
25
Figura 4. Solución obtenida para el caso 1.
El factor de penalización usado es igual a 2.
Caso 2. Paleta de altura=10 y ancho=10.
Tipo Alto Ancho Cantidad 1 3 2 4
2 7 2 4
3 4 2 4
4 6 2 4
5 9 1 4
6 8 4 4
7 4 1 4
8 1 10 4
9 3 7 4
10 4 5 4 Tabla 3. Dimensiones y cantidad de placas para caso 2.
0 1 2 3 4 5 6 7 8 9 100
1
2
3
4
5
6
7
8
9
10
Figura 5. Solución obtenida para el caso 2.
Esta respuesta se obtuvo con parámetros idénticos a los
del caso 1. Cada caso se corrió 20 veces y en el 99% de
ellas se llegó a las soluciones mostradas. Para ambos
casos se obtuvo un porcentaje de utilización del material
disponible de 99.5% que comparados con la literatura
especializada son muy satisfactorios debido a que las
respuestas observadas presentan un factor de utilización
en promedio de 98%.
Scientia et Technica Año X, No x, Mes 200x. UTP 6
El caso 1 tiene un tamaño del espacio de soluciones del
orden de 332 33! y el caso 2 de 402 40!. Lo cual los
hace problemas de difícil solución con un grado mayor
de complejidad que el problema del agente viajero.
Los tiempos computacionales involucrados en la solución
de estos casos, para un equipo con procesador Intel
Pentium de 1.6 GHz, fueron de 20 y 28 segundos,
respectivamente.
6. CONCLUSIONES
La codificación presentada es de fácil implementación y
muestra un buen comportamiento cuando el problema es
resuelto por algoritmos genéticos.
Los bloques constructivos son beneficiados con este tipo
de codificación ya que se preserva, a través de selección
proporcional, al manejar división por secciones. La
optimalidad total se mejora cuando el área desperdiciada
en una sección es reducida. Por esta razón, el algoritmo
presenta un mejor desempeño cuando el factor de
penalización por secciones es escogido adecuadamente.
La optimalidad se mejora haciendo mutaciones suaves a
los bloques de mala calidad hasta que mejore o hasta un
número de intentos determinado. Este paso es similar a
una búsqueda intensiva. Cuando una sección no tiene
área desperdiciada se debe procurar mantener sus
elementos unidos como un bloque. Esto se logra dandole
a esta sección una baja probabilidad de ser modificada.
En el proceso de mutación se considera agregar, quitar y
modificar tanto el vector de ubicación de placas como el
de secciones.
Es posible mejorar el resultado de los datos obtenidos
empleando otros tipos de codificación para una
alternativa de solución. Una propuesta para trabajos
futuros consiste en implementar una codificación basada
en grafos[11] o en ubicación estratégica, como lo
propone el algoritmo de BL[8,12,13]. La codificación de
este problema usando grafos permite abordar su solución
usando optimización por colonia de hormigas.
7. AGRADECIMIENTOS
Los autores expresan su agradecimiento a la Universidad
Tecnológica de Pereira por el apoyo prestado al grupo de
desarrollo en investigación operativa (DINOP).
8. BIBLIOGRAFÍA
[1] S. Jakobs, Theory And Methodology On Genetic
Algorithms For The Packing Of Polygons. European
Journal Of Operational Research. Vol.88, p87-100.
1996.
[2]F. Parreño. Algoritmos Heurísticos Y Exactos Para
Problemas De Corte No Guillotina En Dos Dimensiones.
Tesis Docotoral. Universidad De Valencia, Servei De
Publicacions. España 2004
[3] C. Beltrán E. Calderón Procedimientos Constructivos
Adaptativos (Grasp) Para El Problema Del Empaquetado
Bidimensional. IX Conferencia De La Asociación
Española Para La Inteligencia Artificial. VI Jornadas De
Transferencia Tecnológica De Inteligencia Artificial
(Volumen II)), pp. 755-764. Gijón, España. Del 14 Al 16
De Nov. De 2001
[4] S. Benati. An Algorithm For A Cutting Stock
Problem On A Strip. Journal Of Operational Research
Society Vol. 48 Pp. 288- 294 (1997)
[5] E. Hopper, B. Turton. An Empirical Investigation
Of Meta-Heuristic And Heuristic Algorithms For A 2d
Packing Problem. European Journal Of Operational
Research Vol. 128 Pp. 34-57 (2001)
[6] I. Hwang. An Efficient Processor Allocation
Algorithm Using Two Dimensional Packing.Journal Of
Parallel And Distributed Computing Vol. 42 Pp. 75-81
(1997)
[7] Beasley, J.E., An exact two-dimensional non-
guillotine cutting tree search procedure. Operations
Research 33, 49–64. 1985.
[8] T.W. Leung , Chi Kin Chan, M. Troutt Application
Of A Mixed Simulated Annealing-Genetic Algorithm
Heuristic For The Two-Dimensional Orthogonal Packing
Problem. European Journal Of Operational Research 145
(2003) 530–542
[9] Vendramini E. “Optimización del problema de
cargamento de contenedores usando una metaheur+istica
eficiente”.Tesis Doctoral. UNESP.Brasil.2007
[10] Toro E., Granada M., Romero R. Algoritmo
Memético Aplicado A La Solución Del Problema
Deasignación Generalizada.Revista Tecnura. Año 8
No 16 Semestre I -2005.
[11] Diego-Mas.J.E. “Optiomización de la distribución
en planta de instalaciones industriales mediante
algoritmos genéticos. Aportación al control de la
geometría de actividades”. Tesis doctoral. Universidad
Politécnica de Valencia.España. 2006
[12] J.E. Beasley, A population heuristic for constrained
two-dimensional nonguillotine cutting, European Journal
of Operational Research 156 (2004) 601-627.
[13] Andrea Lodi , Silvano Martello, Michele Monaci.
Two-dimensional packing problems: A survey. European
Journal of Operational Research 141 (2002) 241–252
178
9.5. Algoritmo de búsqueda tabú aplicado a la solución del problema de corte bidimensional guillotinado
Artículo en revisión en revista tipo C.
Revista Scientia et Techica. Universidad Tecnológica de Pereira
Scientia et Technica Año XIII, No x, Mes de 200x. Universidad Tecnológica de Pereira. ISSN 0122-1701 1
Fecha de Recepción: (Letra Times New Roman de 8 puntos) Fecha de Aceptación: Dejar en blanco
ALGORITMO DE BÚSQUEDA TABÚ APLICADO A LA SOLUCIÓN SOLUCIÓN DEL PROBLEMA DE CORTE BIDIMENSIONAL GUILLOTINADO
Tabu Search algorithm for solution of two dimensional guillotined problem
RESUMEN El problema de corte de piezas guillotinadas bidimensional restringido es un problema clásico de optimización caracterizado por su alta complejidad computacional y sus aplicaciones prácticas en el área de la ingeniería. En este documento se presenta la eficiencia de la técnica de Búsqueda Tabú, utilizando una propuesta de codificación basada en árboles binarios adaptada a la estructura del problema. Con el fin de evaluar el desempeño del algoritmo utilizado, se presentan casos de prueba de la literatura especializada evaluando el porcentaje de uso del material disponible, este valor mide la calidad de la respuesta obtenida.
PALABRAS CLAVES: Búsqueda tabú, corte guillotina, empaquetamiento bidimensional, codificación de árbol binario.
ABSTRACT The problem of cut of guillotined pieces bidimensional restricted, is a classic problem of optimization characterized by its high computacional complexity, and its practical applications in the engineering area. In this document the efficiency of the technique appears Tabú search, using a proposal of codification based on binary trees adapted to the structure of the problem. With the purpose of evaluating the performance of the used algorithm, cases of test of specialized Literature appear evaluating the percentage of use of the available material, this value measures the quality of the obtained answerKEYWORDS: Tabú search, two dimensional packing, bidimensional packing, codification of binary tree.
ELIANA M. TORO O Ingeniera Industrial, M. Sc. Profesor Asistente Universidad Tecnológica de Pereira elianam@utp.edu.co
AUGUSTO C. RUEDA M. Ingeniero Electricista, M. Sc.(C) Profesor catedrático Universidad Tecnológica de Pereira aucer@ohm.utp.edu.co
MAURICIO GRANADA Ingeniero Electricista, Ms.C Profesor Facultad de Ingeniería Eléctrica Universidad Tecnológica de Pereira magra@utp.edu.co
1. INTRODUCCIÓN
El problema de corte de piezas se ha estudiado ampliamente en el campo de la Investigación de operaciones. A partir de unos modelos básicos, existen gran cantidad de variantes, derivadas de la amplia gama de aplicaciones prácticas existentes y dependiendo de quién lo esté tratando.
Existen diferentes criterios para clasificar los problemas de corte y empaquetado, como son: el tamaño, la cantidad de las piezas, las dimensiones del problema, etc. Dyckhoff [1] desarrolló un esquema que generaliza la clasificación presentada por Hinxman [2] a finales de los años 80; el principal objetivo del artículo consiste en unificar las distintas notaciones existentes en la literatura relacionada con este tipo de problemas. En el documento, además, se pretende describir una clasificación de las diversas tipologías y clases de problemas relacionados.
Aunque este tipo de problemas se ha resuelto mediante técnicas heurísticas, el mayor número de procedimientos desarrollados para encontrar soluciones adecuadas a los
diferentes problemas de corte y empaquetamiento se basan en metaheurísticas muy variadas.
El objetivo de este documento es presentar las soluciones obtenidas al aplicar el algoritmo de Búsqueda Tabú (BT) al problema de corte bidimensional tipo guillotina, usando codificación con árboles binarios en sistemas de prueba disponibles en la literatura especializada, donde el objetivo es obtener patrones de corte que generen el menor desperdicio posible de material.
Este trabajo se presenta de la siguiente forma: en la siguiente sección se explica el tipo de problema que se está resolviendo y su modelo matemático, en la sección 3 se muestra una heurística empleada como herramienta para obtener una solución de inicio, en la sección 4 se describe la codificación en árboles binarios, en la sección 5 se expone la adaptación al problema de la técnica BT, en la sección 6 se presentan las pruebas y resultados obtenidos comparándolos con casos de prueba de la literatura especializada, finalmente, se presenta una sección con conclusiones y recomendaciones para trabajos futuros.
Scientia et Technica Año XIII, No x, Mes de 200x. Universidad Tecnológica de Pereira. 2
2. PROBLEMA BIDIMENSIONAL DE CORTE TIPO GUILLOTINA
El problema de corte de piezas bidimensional restricto pertenece a la clase de problemas NP-completo, por lo tanto no existe ningún algoritmo polinomial para determinar la solución óptima del mismo.
Definiendo el problema formalmente se tiene (W, L) y (wi, li) pares ordenados que denotan las dimensiones del tablero y de la pieza i a cortar respectivamente. Sea xi la cantidad máxima demandada de cada una de las piezas y se denota con n el número total de piezas demandadas. La formulación del problema se describe con las siguientes ecuaciones [3]:
.
1
,
i i i
i
M in W L w l x
s a
i n
x e n te r o i
C o r te s fa c t ib le s
(1)
( 2 )
(3 )
( 4 )
La figura 1 muestra dos patrones de corte, uno factible (1a) y uno infactible (1b).
Figura 1. 1(a) Corte guillotina, 1(b) Corte no guillotina
3. TÉCNICA DE INICIALIZACIÓN
Para resolver los problemas de corte bidimensional se encuentran algunas técnicas heurísticas que proporcionan configuraciones iniciales tales como el Bottom-Left (BL), Bottom Left Fill (BLF), Difference Process (DP), las heurísticas de nivel (First Fit Decrease Height y Next Fit Decrease Height) y hill-climbing, entre otras[4].
La estrategia BL dicta que cada pieza a colocar se posiciona inicialmente en la esquina superior derecha de la estructura. A continuación, se desplaza hasta la posición más profunda posible. Una vez allí, la pieza es movida hacia la izquierda tanto como sea posible, repitiéndose esta rutina hasta que la pieza alcance una posición inamovible [4]. Este procedimiento debe realizarse pieza por pieza garantizando que la configuración que se obtenga conserve el corte tipo guillotina.
Debido a que con la implementación de estas técnicas se pueden obtener cortes factibles o infactibles, se hizo una adaptación del BL para encontrar patrones de tipo guillotina empleándola como un método constructivo inicializador de la técnica BT.
4. CODIFICACIÓN DE ÁRBOL
La creación de la estructura de árbol de cortes se realiza aplicando técnicas numéricas de conglomerados (clusters) y tiene por objeto ordenar elementos (piezas) en grupos. Cada nodo interno del árbol representa la forma en que se realiza el corte y los elementos que pertenecen a cada grupo [5]. En la figura 2 se muestra la representación del cluster 5 con las piezas 1 y 2.
21
cluster5
Figura 2. Representación de un cluster
En la figura 3 se observa la configuración con cuatro piezas. En el vector de configuración, la flecha vertical orientada hacia arriba indica la posición límite de ubicación de piezas; los valores en las siguientes posiciones representan los clusters formados. El tamaño del vector de configuración se define como:
Tamaño del vector = número piezas del árbol*2-2 Tamaño del vector = (4*2) -2=6
21 43
7
5 6
1 2 3 4 5 6
Clusters
Vector deconfiguración
Inicio de cluster
Cluster 5
Cluster 7
Cluster 6
Figura 3. Árbol de 4 piezas y codificación
Obtenida la codificación de piezas y cluster se asocia a esta un vector (vector de cortes) que indica el tipo de corte de cada cluster. En la formulación de esta codificación de consideran dos tipos de corte: vertical, asociado al número cero en el vector de cortes, y horizontal, asociado al número uno en el mismo vector (figura 4).
0 para corte horizontal
Izquierda
Derecha
1 para corte vertical
Izq. Der
Figura 4. Tipos de corte
Scientia et Technica Año XIII, No x, Mes de 200x. Universidad Tecnológica de Pereira.
____________________________ 1. Las notas de pie de página deberán estar en la página donde se citan. Letra Times New Roman de 8 puntos
3
Si el tipo de corte de un cluster es horizontal, la pieza que está encima irá en la parte izquierda del par de posiciones del vector de codificación asociado a este cluster y la pieza que está debajo irá en la parte derecha del mismo. Si el corte es vertical, la ubicación real de cada pieza (lado izquierdo o lado derecho) indicará su ubicación en el par de posiciones del vector de codificación asociado al cluster que forman. En la figura 5 se muestran dos ejemplos de codificación de piezas según el tipo de corte.
Pieza 3 Pieza
4Pieza 1
Pieza 2
2 1 3 4 5 6
Clusters
Vector deconfiguración
Inicio de cluster
Cluster 5
Cluster 7
Cluster 6
0 1 1 Vector decortes
Figura 5. Clusters formados por corte vertical
Ejemplo 1
En este ejemplo se ilustra la codificación descrita.
En la tabla 1 se muestran las dimensiones del tablero y las piezas del ejemplo.
Tipo de pieza
Largo Ancho Número de piezas
Tablero 70 42 1 Pieza 1 22 18 2 Pieza 2 8 29 3 Pieza 3 19 19 2 Pieza 4 16 13 2 Pieza 5 4 16 1
Tabla 1. Datos del ejemplo 1
6
7 8 9 10 11
1 1 5
12
3 3 4 4 2 2 2 7 9 8
6 13 14
11 10 12 13
1 0 0 0 1 1 1 0 1 Orientacióndel corte
Cluster
Piezas
(35,29) (79,29) (16,0) (0,0) (35,0)Coordenadasde inicio delcluster
cluster cluster cluster cluster cluster cluster cluster cluster cluster
Figura 6. Codificación de una posible configuración
Con base en la figura 6 se puede observar que los cluster se clasifican por niveles a saber:
Cluster básico: Es aquel que contiene dos piezas. Para el ejemplo, los nodos básicos son 6, 7, 8, 9 y 10.
Cluster de segundo nivel: Está conformado por dos cluster básicos. Nodos 11 y 12. Cluster de tercer nivel: Nodo 13. Cluster raíz o nodo de inicio: Es el cluster que conforma todo el conjunto de piezas.
En la figura 7 se demarca el tablero con líneas rojas. Los clusters 8 y 10 son factibles, debido a que no superan el área del tablero, los demás clusters (9, 6 y 7) sobrepasan el área o están por fuera del mismo por lo que se consideran infactibles. Las áreas achuradas representan las áreas que aún no han sido utilizadas. Las coordenadas indican la ubicación de cada cluster.
8
29
16
13
16
13
19
19
8
29
9
12 8
10
22
18
22
18
6
19
19
4
16
7
1 1
24
3
2
414
13
5
3
2
11
(0,0) (16,0) (35,0)
(35,29) (79,29)
Desperdicio
Desperdicio Desperdicio Desperdicio
Figura 7. Gráfico de la configuración de la figura 7
Cálculo de la función objetivo
Para el cálculo de la función objetivo se debe conocer primero:
Las dimensiones de cada cluster. Alto y ancho de un cluster. Para calcular las dimensiones de cada cluster se debe tener en cuenta su tipo de corte. Por ejemplo, si su corte es horizontal el ancho mayor de las dos piezas se escoge el como el ancho del cluster y la altura es la suma de las alturas de las dos piezas. En la tabla 2 se muestran los cálculos realizados para todos los clusters básicos del ejemplo 1.
Cluster Tipo de corte
Tipos de piezas que lo
forman
Largo Alto
6 Vertical 1 y 1 7 Horizontal 5 y 3 8 Horizontal 3 y 4 9 Horizontal 4 y 2
10 Vertical 2 y 2 Tabla 2. Largos y anchos de los cluster
Scientia et Technica Año XIII, No x, Mes de 200x. Universidad Tecnológica de Pereira. 4
Las coordenadas de cada cluster. Coordenada cartesiana de cada cluster considerando como origen el extremo inferior izquierdo del tablero. Para la determinación de las coordenadas de cada cluster se empieza el análisis de derecha a izquierda en el vector de codificación, observando el tipo de corte y dimensiones de cada cluster. El primer cluster es el cluster raíz, por tanto, la coordenada de éste siempre es la del origen. Así, por ejemplo, en la figura 9 el nodo de inicio o cluster raíz es el 14 que corresponde al primer valor (en el extremo derecho) del vector de codificación mostrado en la figura 6.
24 43 1
9 8
12
13
14
1
6
35
7
11
22
10
Figura 8. Árbol asociado al ejemplo 1
Este cálculo de la función objetivo se hace con base en el área no utilizada del tablero y las infactibilidades generadas en la ubicación de cada cluster (ecuación 5).
. . desperdicios+ (infactibilidades)F O (5)
El parámetro corresponde al valor de penalización de las infactibilidades.
Según la ubicación de los clusters se pueden presentar los siguientes casos:
i) Que el cluster no genere infactibilidad. El ancho del cluster más la coordenada de inicio del mismo en el eje X es menor que el ancho del tablero. Además, la altura del cluster más la coordenada de inicio del mismo en el eje Y es menor que la altura del tablero. ii) Que el cluster sea infactible por ancho. El ancho del cluster más su coordenada de inicio en el eje X es mayor que el ancho del tablero. Además, la altura del cluster más su coordenada de inicio en el eje Y es menor que la altura del tablero. iii) Que el cluster sea infactible por altura. La altura del cluster más la coordenada de inicio del mismo en el eje Y es mayor que la altura del tablero. Además, el ancho del cluster más la coordenada de inicio del mismo en el eje X es menor que el ancho del tablero. iv) Que el cluster sea infactible por ancho y por alto. La altura del cluster más la coordenada de inicio del mismo en el eje Y es mayor que la altura del tablero, pero la coordenada de inicio del cluster en el eje Y es menor que la altura del tablero.
Además, el ancho del cluster más la coordenada de inicio de este en el eje X es menor que el ancho del tablero, pero la coordenada de inicio del cluster en el eje X es menor que el ancho del tablero. v) Que el cluster generado quede por fuera del tablero. En este caso la coordenada de inicio del cluster en el eje X es mayor que el ancho del tablero y la coordenada de inicio del cluster en el eje Y es mayor que la altura del tablero.
Para calcular la función objetivo basta con calcular las infactibilidades porque a partir de estas, tal como se explica a continuación, se pueden determinar los desperdicios. De acuerdo a las posibles ubicaciones de los cluster, las infactibilidades individuales (infactibilidades de cada cluster) se calculan de la siguiente forma:
Si se está en el caso i), donde el cluster es factible, la infactibilidad aportada por este es cero. Si el cluster es infactible y se está en los casos ii), iii) ó iv), la infactibilidad aportada por este cluster se encontrará calculando el área por fuera del tablero de la pieza que está traslapada. Si se está en el caso v), la infactibilidad aportada por este cluster es igual al área efectiva del mismo, es decir, la suma de las áreas de las piezas que lo forman.
Obtenida la infactibilidad total (Infac) mediante la suma de las infactibilidades individuales, se calcula el área efectiva del tablero (Efec_tablero) como se muestra a continuación:
_ - Efec tablero Efec Infac (6)
donde Efec es la suma las áreas de todas las piezas que constituyen la configuración actual.
Con Efec_tablero se procede a calcular el valor de las áreas sin utilizar (Desp) a través de la ecuación 7.
_ - _Desp Área tablero Efec tablero (7)
Donde: Área_tablero es igual al largo por el ancho del tablero.
Así, mediante la ecuación 8 se encuentra el valor de la función objetivo.
.F O Desp Infac (8)
El valor del parámetro se determina experimentalmente.
Scientia et Technica Año XIII, No x, Mes de 200x. Universidad Tecnológica de Pereira.
____________________________ 1. Las notas de pie de página deberán estar en la página donde se citan. Letra Times New Roman de 8 puntos
5
5. Búsqueda Tabú
Búsqueda Tabú utiliza una estrategia de búsqueda local que le permite explorar el espacio de soluciones de manera eficiente a través de la estructura de vecindad. Gran parte de la potencialidad del método está basada en la manera como se define el conjunto de vecinos [6].
La idea básica es ir cambiando en forma sistemática la vecindad al momento de realizar la búsqueda mediante la imposición de reglas.
Criterios de vecindad
Para abordar los criterios de vecindad generados se deben definir dos conceptos: desperdicio general y desperdicio individual. El desperdicio individual es el presente en cada cluster calculado como el área del cluster (producto del alto por el ancho del cluster) menos la suma de las áreas de las piezas que lo forman. El desperdicio general es el área del tablero menos el área efectiva del mismo.
Los criterios de vecindad que se definieron son los siguientes:
Criterio 1 (C1): Si la configuración es factible y hay desperdicio general pero ningún cluster presenta desperdicio individual, generar configuraciones vecinas insertando piezas en los clusters vacíos, es decir en los clusters que aún no han sido utilizados en la configuración actual. Criterio 2 (C2): Si la configuración es factible y presenta clusters con desperdicios individuales, buscar e insertar piezas con áreas menores o iguales a los desperdicios de los clusters que los presenten. Criterio 3 (C3): Si la configuración es factible y presenta clusters con desperdicios individuales, intercambiar piezas de la configuración actual con las aún disponibles, procurando disminuir el desperdicio de los clusters que los presenten. Criterio 4 (C4): Si la configuración es infactible o si en los anteriores tres criterios no se generó el número requerido de vecinos, generar configuraciones vecinas retirando las piezas que generan infactibilidad. Criterio 5 (C5): Si con los tres primeros criterios (configuración factible) o con el cuarto criterio (configuración infactible) no se generaron las configuraciones vecinas requeridas, crear las configuraciones restantes intercambiando piezas entre los clusters básicos vecinos no nulos completos (con por lo menos una pieza). Criterio 6 (C6): Si con ninguno de los anteriores criterios se generó el número requerido de configuraciones vecinas, realizar cambios en los tipos de cortes de los clusters básicos dando prioridad a los que generen infactibilidad (caso
infactible) y/o a los que presenten desperdicios (caso factible).
6. Pruebas y Resultados
Se hicieron pruebas con cuatro casos. Los Casos 1 y 2 aparecen en [7]. Los casos 3 y 4 corresponden a los casos 1 y 3 de la referencia [8].
Una parte importante de BT requiere la definición del número de iteraciones durante las cuales un atributo (en este caso una pieza) permanecerá tabú, es decir, sin poderse mover de su posición, ya sea dentro o fuera de la configuración actual o cualquier otra con relación inclusive con otros atributos, como por ejemplo, de intercambio. En el presente trabajo se definieron cuatro tipos de iteraciones tabú:
K1 = Iteraciones tabú para piezas que entran a la configuración actual. K2 = Iteraciones tabú para que piezas salen de la configuración actual. K3 = Iteraciones tabú para piezas que se intercambian (dentro y fuera de la configuración actual). K4= Iteraciones tabú para piezas que intercambian (dentro de la configuración actual).
En la tabla 3 se muestran los valores usados como iteraciones tabú para los cuatro casos de prueba.
K1 K2 K3 K4
Caso 1 7 7 7 7 Caso 2 7 7 7 7 Caso 3 5 5 5 5 Caso 4 7 7 7 7
Tabla 3. Iteraciones tabú
La cantidad de vecinos según cada criterio y el valor de utilizados se especifican en la tabla 4.
C1 C2 C3 C4 C5 C6
Caso 1 10 10 10 15 0 0 25 Caso 2 10 10 40 0 0 0 5 Caso 3 20 20 10 0 0 10 7 Caso 4 10 10 30 10 10 10 20
Tabla 4. Número de vecinos y penalización
En la figura 9 aparece la configuración inicial obtenida para el caso 3 con el constructivo BL modificado y en la figura 10 se ilustra la configuración final obtenida para el mismo caso después de aplicar el algoritmo BT.
Scientia et Technica Año XIII, No x, Mes de 200x. Universidad Tecnológica de Pereira. 6
Figura 9. Configuración inicial del constructivo caso 3.
Para los casos que se corrieron se obtuvieron mejoras comparadas con las mejores soluciones reportadas, como se observa en la tabla 5.
Figura 10. Configuración final con BS caso 3.
Mejor
Solución
Inicial Final reportada
F. O. % uso
F. O. % uso
F. O. % uso
Caso1
869.95 95.39 0 100 2 99.78
Caso2
419 36.71 0 100 5 99.12
Caso3
62618 96.87 21354 98.93 39418 98.03
Caso4
173958 93.57 44847 98.34 53071 98.04
Tabla 5. Comparación de resultados
7. Conclusiones y recomendaciones
El tipo de codificación para representar el problema bidimensional restricto basado en árboles binarios garantiza que los patrones que se obtengan sean de tipo guillotina; por la estructura de la misma, se facilita la generación de soluciones vecinas y el cálculo del valor de la función objetivo.
Se ha determinado el conjunto de parámetros que hacen que el método tenga un mejor desempeño computacional
para cada uno de los casos de prueba calibrándolos por ensayo y error.
Se superaron las mejores respuestas reportadas para los casos 1, 2 y 3, siendo el más representativo el caso 3 que corresponde a un caso de la literatura especializada.
El tipo de codificación propuesta permite implementar otras técnicas metaheurísticas tales como los Algoritmos Genéticos y Colonia de Hormigas que requieren de una adaptación a los operadores específicos de cada método.
Dentro de los trabajos futuros podrían resolverse casos de prueba en donde las condiciones del problema permitan rotación de las piezas; además, se podría hacer la extensión para el problema de corte bidimensional cuando las figuras demandadas son polígonos, planteando que puede realizarse una reducción del problema a uno de empaquetamiento de rectángulos con algunas consideraciones.
Bibliografía [1] DYCKHOFF, H. Classification of real world trim loss problems. En:G.Fandel et al.(Eds), Essays on Production Theory and Planning, Springer-Verlag, Berlin, páginas 191-208.1990 [2] HINXMAN, A.I. A two dimensional trim-loss problem with sequencing constraints. Advanced Paper of IJCAI-77 MTI, páginas 859-854.1977 [3] PARADA V., SEPÚLVEDA M.,GÓMEZ A. Solution for the Constrained Guillotine Cutting Problem by Simulated Annealing. Journal on computers and operations research, 25 37-47. 1998. [4]FERNÁNDEZ T, DUARTE A. Método Multi- arranque aplicado al problema del Strip Packing Problem bidimensional V Congreso de Metaheurísticas, Algoritmos Evolutivos y Bioinspirados. Puerto de la Cruz (Tenerife), 14-16/02/2007 [5] DIEGO-MAS, J.A., “Optimización de la distribución de planta en instalaciones industriales mediante algoritmos genéticos. Aportación al control de la geometría de actividades”. Tesis doctoral, Universidad Politécnica de Valencia, 2006. [6] GALLEGO R. ESCOBAR A. ROMERO R. Técnicas de optimización combinatorial. Textos universitarios. Universidad Tecnológica de Pereira. Abril 2006. [7] TORO, E. GRANADA M. Problema de empaquetamiento rectangular bidimensional tipo guillotina resuelto por algoritmos genéticos. Revista Scientia et Technica. Universidad Tecnológica de Pereira año XIII. número 35. Agosto 2007. [8]CUI Y. An exact algorithm for generating
homogenous T-shape cutting patterns. Computers & Operations Research. 2007, 34(4): 1107-1120. Disponible en Internet: www.gxnu.edu.cn/Personal/ydcui/English/index.htm
179
9.6. Efecto de la configuración inicial en la solución del problema de corte bidimensional usando el algoritmo búsqueda tabú
Artículo en revisión en revista tipo C
Revista Tecnologías de avanzada. Universidad de Pamplona
EFECTO DE LA CONFIGURACIÓN INICIAL EN LA SOLUCIÓN DEL PROBLEMA DE CORTE BIDIMENSIONAL USANDO EL ALGORITMO BÚSQUEDA TABÚ
MSc. Eliana M. Toro O.*, Ing. Augusto C. Rueda M.** Ing. Hugo Andrés Ruiz F.***
Universidad Tecnológica de Pereira
*Docente Asistente Facultad de Ingeniería Industrial
** Docente Catedrático Programa de Ingeniería Eléctrica
*** Docente Catedrático Programa de Ingeniería de Sistemas
Vereda La Julita, Pereira, Risaralda, Colombia Tel.: 57-6-3137122, Fax: 57-6-3137122
mail: {eliana, aucer, hugor} @ohm.utp.edu.co
Abstract: Tabu Search algorithm is a metaheuristic used for problems of global
optimization, but there are few investigations that are concentrated in the initial
solution. This document try to show the roll that plays the initial solution in the
performance of the algorithm, based on the problem of two-dimensional guillotined
cutting, using different initial solutions to observe the effect on the best solution
found after several iterations. Traditionally the initial configuration can be generated
randomly, but there are many other alternatives, this paper considers an initialization
strategy using a constructive algorithm.
KEYWORDS: Initial solutions, metaheuristics, Tabu Search, Two dimensional cut
problem.
Resumen: El algoritmo de Búsqueda Tabú es una metaheurística usada para
problemas de optimización global, pero hay pocas investigaciones que se concentren
en la solución de inicio. En este documento se pretende mostrar el papel que juega la
solución de inicio en el desempeño del algoritmo, tomando como base el problema
de corte bidimensional tipo guillotina, usando diferentes soluciones de inicio para
observar el efecto sobre la incumbente encontrada después de varias iteraciones.
Tradicionalmente la configuración inicial puede ser generada aleatoriamente, pero
hay muchas otras alternativas, aquí se plantea una estrategia de inicialización
utilizando un algoritmo constructivo.
PALABRAS CLAVES: Búsqueda Tabú, metaheurísticas, soluciones de inicio,
problema de corte bidimensional.
1. INTRODUCCIÓN
El proceso de solución de problemas típicamente
implica las fases de modelar, simular y optimizar.
El modelamiento matemático de un problema de la
vida real es a menudo complejo, y la función
objetivo planteada puede ser no convexa y tener
varios mínimos locales. Los métodos globales de
optimización son necesarios para prevenir el
estancamiento a un mínimo local [6]. En los años
recientes se ha manifestado un creciente interés en
métodos que permitan solucionar este tipo de
problemas [3] y [4].
Los algoritmos de optimización combinatorial son
considerados como eficientes métodos de
optimización global [3]. Un factor importante en la
implementación de un algoritmo de solución lo
constituye un adecuado punto de inicio.
Las configuraciones iniciales se pueden obtener de
diversas formas entre ellas: generación aleatoria, o
a través de algoritmos constructivos que utilicen
factores de sensibilidad o cierta lógica heurística.
Los problemas matemáticos pueden ser clasificados
según el grado de complejidad. El primer grupo
está conformado por casos de baja complejidad
matemática, en estos el espacio de solución puede
ser enumerado explícitamente y ser resueltos
usando métodos exactos en tiempos de computo
aceptables; por lo tanto la configuración inicial no
presenta efecto en la calidad de la solución final,
sólo incide en el número de iteraciones que se
requieren para llegar al óptimo global.
El segundo grupo lo constituyen casos de mediana
complejidad matemática, para estos el número de
posibles alternativas crece obstenciblemente, sin
embargo, pueden ser solucionados en tiempos
computacionales aceptables usando un buen
algoritmo exacto de programación matemática. En
este la solución inicial incide en el número de
iteraciones para la convergencia del algoritmo.
El tercer grupo está conformado por casos de alta
complejidad matemática, en este grupo están
incluidos muchos de los problemas reales de
ingeniería. Entre estos se encuentran algunos
casos del problema de corte bidimensional, en los
que el espacio de solución crece de forma
exponencial, siendo catalogados como problemas
NP-completo, donde la solución final depende de la
calidad de la solución inicial.
El interés de este trabajo es observar el efecto de la
solución de inicio sobre la respuesta final. Para
desarrollar esta idea se trabajará el problema
específico de corte bidimensional tipo guillotina
resuelto mediante la metaheurística de Búsqueda
Tabú (BT) utilizando diferentes soluciones de
inicio para casos de prueba extraídos de [1] y [8].
La estructura de este documento es: en la siguiente
sección se muestra un resumen sobre las técnicas de
solución, en la sección 3 se expone la esencia del
algoritmo de búsqueda Tabú, en la sección 4 se
presenta el problema bajo el que se realizó el
estudio, en la sección 5 se explica la
implementación de la técnica Búsqueda Tabú a la
solución del problema, en la sección 6 se describen
algunas heurísticas utilizadas en la solución del
problema de corte bidimensional, en la sección 7 se
comentan los resultados obtenidos usando casos de
prueba de la literatura especializada y finalmente se
presenta una sección con conclusiones y
recomendaciones.
2. TÉCNICAS DE SOLUCIÓN
Las técnicas de solución para problemas prácticos
de optimización combinatorial se pueden clasificar
en métodos exactos y aproximados. Vendramini
[10] resume los métodos de solución de los
problemas clásicos de optimización combinatorial
en un organigrama que se presenta en la figura 1.
Los métodos de solución pueden ser dependientes
del problema o independientes del mismo. Las
primeras, conocidas como heurísticas, son válidas
únicamente para el problema particular para el que
han sido diseñadas, mientras que las segundas, las
llamadas metaheurísticas, pueden aplicarse a
cualquier problema.
El desarrollo de metaheurísticas, junto al avance de
las tecnologías de información que proveen de
computadores cada vez más rápidos, han permitido
a investigadores y profesionales de la industria
resolver problemas combinatorios complejos y de
gran escala. En general, estas metaheurísticas
toman inicialmente una solución, la cual es luego
mejorada usando heurísticas de mejoramiento
embebidas en una estructura más general, por
ejemplo: Simulated Annealing (SA), Algoritmos
Genéticos (AG), Búsqueda Tabú (BT). La
característica común de estos enfoques es el uso de
mecanismos para evadir óptimos locales [7].
Métodos de solución
Métodos
Exactos
Branch
and Bound
Branch
and Cut
Branch
and Price
Métodos
aproximados
Heurísticas EspecialesMetaheurísticas
Constructivo
(Greedy)
Mejoría
Particionar
Descompos
Formulación
Matemática
Algoritmos
genéticos
Simulated
Annealing
Búsqueda
Tabú
GRASP
Colonia
de hormigas
Partícula
Swarm
Scatter
Search
Algoritmos
Culturales
Vecindad
Variable
Lógica
Fuzzy
Redes
neuronales
Máquinas
de soporte
Vectorial
Figura 1. Clasificación de los métodos de solución.
La teoría matemática de los algoritmos
combinatoriales afirma que independientemente de
la solución inicial, generalmente hallada
aleatoriamente, siempre se obtiene la solución
óptima global, premisa que ha sido adoptada por la
mayoría de los investigadores en sus desarrollos.
En la aplicación de algoritmos de búsqueda
combinatorial, es primordial que exista la suficiente
diversidad para asegurar que se parte de distintas
regiones en las que se puede encontrar el óptimo.
Cuando se usa un inicializador se deja actuar en el
problema a través del mismo método colocando la
solución inicial en una región atractiva
garantizándole que en ella va a encontrar
subóptimos de buena calidad y eventualmente uno
de ellos puede ser el óptimo global.
Se comprueba que un inicializador es bueno si al
usar la metodología de búsqueda se encuentran
finalmente soluciones de muy buena calidad, en
virtud de la región donde se localice la solución
inicial aunque aparentemente no sea tan buena. Por
esto son importantes los inicializadores para la
metodología de optimización, usados en conjunto
con las técnicas metaheurísticas.
3. BÚSQUEDA TABÚ
Búsqueda Tabú (BT) es un procedimiento
metaheurístico, perteneciente a la familia de los
métodos de optimización combinatorial, inventado
por Fred Glover en la década de los 80 basado en
conceptos que pertenecen al dominio de la
inteligencia artificial y que incorpora los conceptos
de memoria adaptativa y exploración sensible con
el fin que durante el proceso de búsqueda se evite
parar en óptimos locales y entrar en un ciclo
repetitivo. El método resuelve problemas de la
forma:
(1)Min f( x ) s.a. x X
Donde f es una función, en general, no lineal y el
conjunto de restricciones X también puede ser no
lineal. Las variables x involucradas en el problema
pueden ser continuas, enteras o mixtas, aunque
tradicionalmente la técnica es utilizada para
variables enteras en donde la explosión
combinatorial y la imposibilidad de utilizar
teoremas matemáticos basados en la continuidad de
las funciones muestran la potencialidad del método.
3.1 Descripción del algoritmo
El algoritmo de BT básico involucra los siguientes
elementos:
Configuración Inicial. Una configuración es el
conjunto de variables del problema dispuesto en un
arreglo (vector o matriz). La configuración inicial
puede ser generada de manera aleatoria o puede ser
obtenida utilizando un algoritmo constructivo que
utilice factores de sensibilidad o cierta lógica
heurística.
Generación del vecindario. Un vecino de una
configuración X es una configuración X0 obtenida
a partir de X por medio de una transición simple.
En la mayoría de los casos el vecindario N(X)
puede ser muy grande lo que implica un elevado
esfuerzo de cómputo en el proceso de búsqueda.
Debido a esto, se requiere reducir el número de
vecinos a N1(X), redefiniendo las reglas de
construcción del vecindario. Esta etapa es
fundamental en el proceso ya que de ella depende,
en gran parte, el éxito de la búsqueda.
Implementación de listas tabú. Dependiendo del
tipo y complejidad del problema, se utiliza una o
varias listas tabú. El tamaño de la lista puede variar
a lo largo del proceso, teniendo en cuenta que no
todas las configuraciones vecinas deben ser
almacenadas sino las más atractivas en cuanto al
valor de su función objetivo. La razón es la de
reducir el esfuerzo computacional y la eficiencia
del proceso.
Selección del mejor vecino. Una vez que el
vecindario es definido, cada vecino es evaluado
para determinar el valor de su función objetivo y
verificar si cumple o no con las restricciones
planteadas, de esta manera se determina la
factibilidad de la configuración vecina.
Duración Tabú. Por el término tabú se entiende
prohibición, por consiguiente, la duración tabú
indica que un atributo no puede cambiar de estado
durante un número de iteraciones determinado. La
definición del valor de la duración tabú es
importante para evitar que el proceso quede
atrapado en óptimos locales de baja calidad.
Criterio de Aspiración. Al igual que las costumbres
sociales pueden cambiar con el tiempo, las
soluciones tabú pueden dejar de serlo sobre la base
de una memoria cambiante, debe existir una forma
de “olvido estratégico” es decir, que una solución o
atributo pueda salir de la lista antes de que se
cumpla la duración tabú. Esto se implementa a
través del criterio de aspiración, el cual, permite
que un movimiento sea admisible aunque esté
clasificado como tabú.
Actualización de la estructura tabú. El proceso de
búsqueda tabú requiere de una estructura tabú que
tiene la misma codificación de la configuración X y
que almacena la información de los atributos del
vector X que han cambiado o que han permanecido
sin cambio alguno. Esta información se almacena
en las memorias de corto y largo plazo, las cuales
pueden tener un criterio de almacenamiento fijo o
variable a lo largo del proceso dependiendo del
comportamiento de la búsqueda. Esto es lo que
constituye la memoria adaptativa.
Memoria de corto plazo. La memoria de corto
plazo usa básicamente la información de atributos
de configuraciones que han cambiado
recientemente. Esta información es conocida como
memoria basada en hechos recientes. La idea básica
de este tipo de memoria es evitar volver a
configuraciones ya visitadas, penalizando la
búsqueda para evitar el ciclaje.
En la figura 2 se presenta un esquema de
funcionamiento del algoritmo.
Configuración inicial (X)Configuración inicial (X)
Explotación (Generar un
vecindario N(X))
Explotación (Generar un
vecindario N(X))
Funcion objetivo actual no
mejora en k iteraciones?
Fin
Funcion objetivo actual no
mejora en k iteraciones?
Fin
¿Vecino Xj es mejor que
Xi?
¿Vecino Xj es mejor que
Xi?
Actualizar estructura
tabú y hacer Xj=Xi=X
Actualizar estructura
tabú y hacer Xj=Xi=X
Aleatoria
Basado en una regla empírica
Basado en índice de sensibilidad
AleatoriaAleatoria
Basado en una regla empíricaBasado en una regla empírica
Basado en índice de sensibilidadBasado en índice de sensibilidad
Memoria de corto plazo
Memoria de largo plazo
Memoria de corto plazoMemoria de corto plazoMemoria de corto plazo
Memoria de largo plazo
Selección agresiva
Criterio de aspiración
Selección con criterio Tabú
Selección agresivaSelección agresiva
Criterio de aspiraciónCriterio de aspiración
Selección con criterio Tabú
Figura 2. Algoritmo de búsqueda Tabú.
4. PROBLEMA DE CORTE BIDIMENSIONAL TIPO GUILLOTINA
Se tiene un tablero de dimensiones (W,L) y (wi, li)
pares ordenados que identifican la pieza i a cortar
respectivamente. Sean además xi la cantidad
máxima demandada de cada una de las piezas y se
denota con n el número total de piezas demandadas.
La formulación del problema se describe con las
siguientes ecuaciones:
.
1
,
i i i
i
M in W L w l x
s a
i n
x e n te r o i
C o r te s fa c t ib le s
( 2 )
(3 )
( 4 )
(5 )
Se entiende como cortes factibles aquellos que
entregan una configuración tipo guillotina. El
objetivo al resolver el problema es encontrar una
configuración que minimice los desperdicios de
material o área sin utilizar garantizando que las
piezas elegidas estén contenidas en el tablero. En la
figura 3 se muestra un tablero al que se le ha
dispuesto un patrón tipo guillotina, donde el área
subrayada corresponde al material sin utilizar.
Figura 3. Corte tipo guillotina.
5. IMPLEMENTACIÓN DE BT AL PROBLEMA DE EMPAQUETAMIENTO BIDIMENSIONAL
En [9] se explica la codificación de árbol propuesta
para garantizar que las soluciones obtenidas sean de
tipo guillotina, adicionalmente en ese trabajo se
presentan los seis criterios de vecindad definidos.
Entre los criterios mencionados están:
Vecino 2: Si la configuración es factible y presenta
clusters con desperdicios individuales, buscar e
insertar piezas con áreas menores o iguales a los
desperdicios de los clusters que los presenten. En
la figura 4 las áreas sombreadas representan
desperdicios individuales.
Vecino 3: Si la configuración es factible y presenta
clusters con desperdicios individuales, intercambiar
piezas de la configuración actual con las aún
disponibles, procurando disminuir el desperdicio de
los clusters que los presenten (opcional: sin alterar
las dimensiones de los mismos). En la figura 5 se
ilustra este criterio.
Figura 4. Segundo criterio de vecindad
Pieza que sale
Ingresa disminuyendoel desperdicio
Figura 5. Tercer criterio de vecindad
6. TÉCNICAS DE INICIALIZACIÓN
Se pueden distinguir los siguientes métodos que
han sido empleados en la solución del problema:
El procedimiento más empleado para colocar
las piezas es el algoritmo Bottom-left (BL). A
partir de un orden de las piezas a cortar, el
algoritmo consiste en colocar cada pieza en el
tablero lo más abajo posible y una vez hecho
esto mover la pieza todo lo que pueda hacia la
izquierda. Al aplicar este método pueden
quedar áreas no aprovechables (desperdicios).
Figura 6
Una modificación de la estrategia anterior que
intenta aprovechar las áreas no aprovechables
es la estrategia Bottom-left-fill(BLF). Este
procedimiento antes de colocar una pieza
según la estrategia BL comprueba si se puede
colocar en alguna de las áreas no
aprovechables que se han generado hasta el
momento. Figura 6
Otro método utilizado en la literatura para
construir una solución a partir de un orden de
las piezas, es el mecanismo Difference Process(DP) de Lai y Chan [5]. La estrategia
Difference Process(DP) intenta colocar cada
pieza en la esquina posible del resto del diseño
más cercana a la esquina inferior izquierda del
tablero. Para medir cuál es la posición se
emplea la distancia euclídea. Al igual que con
el método anterior existen patrones que no
puede alcanzarse con esta estrategia.
BLF
BL
Trayectoria
Figura 6. Estrategia BL Y BLF
Todos ellos son constructivos que entregan
soluciones del tipo no guillotina, razón por la cual
es necesario implementar alguna estrategia que
permita adaptar la herurística el tipo de corte.
6.1 BL modificado para corte guillotina
1. Se ordenan las piezas de acuerdo a sus
alturas en orden descendente.
2. Se ubica la pieza más alta en la parte inferior
izquierda, en las coordenadas de origen
(0,0), teniendo en cuenta que la altura de
esta pieza debe ser menor ó igual que la
altura del tablero. El ancho de la pieza
insertada indica la primera coordenada guía
en el eje X.
3. La siguiente pieza se elige como la más alta
entre las que no hacen parte aún de la
configuración actual; el ancho de esta pieza
es evaluado y si sumado a la coordenada
guía en el eje X el valor obtenido es menor
que el ancho del tablero, se posiciona al lado
derecho de la última pieza insertada en las
coordenada guías en los ejes X e Y. Este
procedimiento se repite hasta ubicar la
mayor cantidad de piezas permitidas por el
ancho del tablero, conformando así el nivel
actual. La nueva coordenada guía en el eje X
es la acumulación de los anchos de las
piezas del presente nivel.
4. A continuación se evalúa la diferencia de
alturas de piezas consecutivas, con el fin de
identificar espacios donde se pueden encajar
piezas respetando el límite superior
impuesto por la pieza más alta del nivel
actual.
5. Cuando ya no es posible ubicar más piezas
en un nivel el proceso descrito
anteriormente es iniciado de nuevo a partir
del paso 3. La nueva coordenada guía en el
eje Y es la acumulación de alturas de las
piezas más altas de los niveles anteriores y
la nueva coordenada guía en el eje X es 0.
6. El proceso para cuando no es posible ubicar
más piezas sin sobrepasar la altura del
tablero.
Una implementación del BL modificado para dos
niveles es mostrada en la figura 7.
Trayectoria
Pieza 1
Pieza 2
Pieza 4 Pieza 5
Pieza 3
Figura 7. Botton Left para corte guillotina
Algunas otras ideas que se plantean en la literatura
es ordenar las piezas de mayor a menor de acuerdo
al área que ocupan e irlas ubicando en el tablero
con base en una matriz de distancias que se forma
para determinar cuál es la pieza que se puede ubicar
contigua de forma que esa dupla obtenga el menor
desperdicio como se plantea en [10] hasta ubicar
todas las piezas posibles, y siempre garantizando la
factibilidad de la configuración.
7. ANÁLISIS DE RESULTADOS
La función objetivo se calcula con base en el total
de área utilizada, la calidad de las soluciones
corresponde al porcentaje utilizado del material
disponible. Los Casos 1 y 2 aparecen en [8]. Los
casos 3 y 4 corresponden a los casos 1 y 3 de la
referencia [1]. En la tabla 1 aparecen las
generalidades de los casos y en la tabla 2 se
muestran los resultados obtenidos desde diferentes
configuraciones de inicio.
Tabla 1. Datos de los casos de prueba
Caso Número piezas
Tipos de piezas
DimensionesTablero(L*A)
1 36 6 24*38
2 40 10 10*10
3 106 20 2002*1001
4 107 20 2275*1191
Tabla 2. Resultados de los casos
Caso Estrategia de inicio
Calidad SoluciónInicio (%)
Calidad SoluciónFin (%)
Número Iteraciones
1 aleatoria 62.00 100 500
1 aleatoria 69.19 100 500
1 BL mod 95.39 100 500
2 aleatoria 22 92 500
2 aleatoria 31 96 500
2 aleatoria 78 88 500
2 BL mod 92 96 500
3 aleatoria 48.94 79.78 5000
3 aleatoria 75.66 88.44 5000
3 BL mod 96.87 98.93 5000
4 aleatoria 52.06 78.59 5000
4 aleatoria 74.16 79.49 5000
4 BL mod 93.57 98.34 5000
Los casos 1 y 2 pueden ser considerados de baja
complejidad matemática y los casos 3 y 4 de alta
complejidad matemática
En las figuras 8 y 9 se muestran las soluciones de
inicio y final del caso 4 utilizando como estrategia
de inicio el BL modificado.
Figura 8. Configuración inicial caso 4.
Aplicando un algoritmo constructivo como el BL
modificado para el problema de corte
bidimensional tipo guillotina, se obtienen en
promedio soluciones iniciales con porcentaje de
utilización de un 94%. Para los casos 3 y 4 las
mejores soluciones se encuentran cuando es
utilizado el algoritmo BL modificado como
inicializador. La solución de inicio definitivamente
no incide en la calidad de la respuesta final para
casos de baja complejidad matemática.
8. CONCLUSIONES Y RECOMENDACIONES
Fueron estudiados algoritmos de inicialización para
el problema de corte bidimensional tipo guillotina y
se usó el algoritmo de Búsqueda Tabú para
solucionarlo.
Figura 9. Configuración final caso 4.
Para las técnicas metaheurísticas, en la literatura
especializada se establece que el óptimo global es
obtenido independientemente de la solución inicial.
En la práctica se ha observado que esta afirmación
podrá ser valida en problemas de baja y mediana
complejidad matemática. Por el contrario, para
problemas de gran tamaño y alta complejidad
matemática la solución inicial influye en la calidad
de la solución final.
Por la observación hecha durante el desarrollo del
algoritmo se constató la complejidad matemática
del problema de corte bidimensional. En la
implementación se verificó que soluciones iniciales
aleatorias presentaban soluciones finales pobres
La metodología de BL modificado es una adecuada
técnica de inicialización, para el problema de corte
bidimensional tipo guillotina, fácil de implementar
y de bajo consumo computacional.
Para trabajos futuros se recomienda analizar el
comportamiento de otros algoritmos
combinatoriales con diferentes tipos de
inicializadores.
BIBLIOGRAFÍA
1] CUI Y. An exact algorithm for generating
homogenous T-shape cutting patterns. Computers
& Operations Research. 2007, 34(4): 1107-1120.
Disponible en Internet en :
http://www.gxnu.edu.cn/Personal/ydcui/English/Pa
per.htm
[2] DA SILVA R. Uma Abordagem para o
Problema de Corte Guilhotinado Bi-dimensional
para Peças Regulares com a Utilização de P-
Medianas e Pesquisa Tabu. Monografia, Universida
de Do Vale Do Rio Dos Sinos Centro De Ciências
Exatas E Tecnológicas. 2004.
[3] FLOUDAS, C. A., PARDALOS, P. M. (eds.):
Recent Advances in Global Optimization. Princeton
University Press, Princeton, NJ (1992)
[4] HORST, R., PARDALOS, P. M. (eds.):
Handbook of Global Optimization. Kluwer
Academic Publishers, Dordrecht (1995)
[5] LAI, K. K. Y CHAN, J. W. M (1997). A
evolutionary algorithm for the rectangular cutting
stock problem. International Journal of Industrial
Engineering, 4:130-139.
[6] MAAREN, H: MIETTINEN K, PENTINEN, A.
On initial populations of a genetic algorithm for
continuous optimization problems. J Glob Optim
(2007) 37:405–436
[7] MORAGA, R. WHITEHOUSE G, Depay G.
Metaraps: Un enfoque de solución eficaz para
problemas combinatorios. Revista Ingeniería
Industrial. Universidad del Bio-Bio. Concepción,
Chile. Año 2 No1. 2003.
[8] TORO, E. GRANADA M. Problema de
empaquetamiento rectangular bidimensional tipo
guillotina resuelto por algoritmos genéticos.
Revista Scientia et Techica. Universidad
Tecnológica de Pereira año XIII, número 35.
Agosto 2007.
[9] TORO E. RUEDA A., GRANADA M.
Algoritmo de Búsqueda Tabú aplicado a la
solución del problema de corte bidimensional
guillotinado. Revista Scientia et Techica.
Universidad Tecnológica de Pereira. Universidad
Tecnológica de Pereira año XIII, número 37.
Diciembre 2007.
[10] VENDRAMINI E. Optimización del problema
de cargamento de contenedores usando una
metaheurística eficiente. Tesis de maestría en
Ingeniería Eléctrica. UNESP, Ilha Solteira. Brasil.
Febrero 2007.
180
9.7. Solución al problema de empaquetamiento bidimensional usando un algoritmo híbrido constructivo de búsqueda en vecindad variable y recocido simulado
Artículo en revisión revista tipo B.
Revista Ingeniería y Competitividad Universidad del Valle
1
Solución al problema de empaquetamiento
bidimensional usando un algoritmo híbrido constructivo
de búsqueda en vecindad variable y recocido simulado.Eliana M. Toro -Ocampo.* Alejandro Garcés-Ruiz.** §
Hugo A. Ruiz –Flórez*** *Facultad de Ingeniería Industrial, Universidad Tecnológica de Pereira, Risaralda, Colombia
**Programa de Ingeniería Eléctrica, Universidad Tecnológica de Pereira, Risaralda, Colombia
§ e-mail: alejandrog@ohm.utp.edu.co
Resumen Por empaquetamiento de rectángulos se entiende una clase de problemas de corte y empaquetado con variadas
aplicaciones en la Industria. Uno de los problemas más conocidos de esta clase es el de empaquetado rectangular bi-
dimensional tipo guillotina. En este se pretende ubicar, sin solapamientos, un conjunto dado de rectángulos en un
objeto rectangular de anchura y altura conocidas. El propósito es obtener una configuración que maximice el área
utilizada. Dada su dificultad y su gran aplicabilidad, existe un creciente interés en disponer de procedimientos
eficaces y eficientes para resolver este problema. En este trabajo, se modela el problema con base a divisiones del
área disponible, se utiliza una codificación de árbol binario para disponer las piezas de forma que se garantice el
corte de tipo guillotina y se propone un algoritmo dividido en tres etapas que trabajan con estrategias individuales
inspiradas en algoritmos de vecindad variable, recocido simulado y técnicas constructivas para lograr la solución del
problema. Se comparan las respuestas obtenidas con base a la función objetivo que cuantifica el área utilizada y el
porcentaje de utilización del material disponible para cincuenta casos de prueba de la literatura especializada frente a
sus respectivas respuestas reportadas obteniéndose excelentes resultados
Palabras claves: empaquetamiento bidimensional, vecindad variable ,recocido simulado,metaheurísticas, heurísticas, optimización ABSTRACT Packing of rectangles is a class of problems about packing and cutting with varied industrial application. One of the
most known problems of this class is the rectangular two dimensional guillotine cutting packing problem. In this
case, it is tried to locate a given set of rectangles in a rectangular object in which width and height are known and
without overlapping. The objective is to obtain a configuration which maximizes the used area. Due to its difficulty
and its great applicability, there is an increasing interest in develop effective and efficient procedures which solve
this problem. In this work, the problem is modeled based on divisions of the available area, a binary tree codification
is used to arrange the pieces so that the guillotines type cutting is guaranteed. A three stages algorithm with
individual strategies inspired by algorithms of variable neighborhood search, simulated annealing and constructive
techniques are used to obtain the solution of the problem. The answers obtained are compared base on the objective
function and percentage used of available area with fifty test cases of the specialized literature and their respective
well-known answer with excellent results.
Keywords: Guillotine; Optimization; Two-dimensional cutting; Variable neighborhood search;
1. Introducción
Los problemas de corte y empaquetamiento pertenecen a la categoría de problemas de optimización
combinatoria denominados Np- completos debido a que el espacio de soluciones crece de forma
exponencial de acuerdo al número de piezas a ser ubicadas. Si por ejemplo se tienen n piezas a ser
ubicadas, entonces el espacio de soluciones estará dado por 2 . !n n [1] Este tipo de problemas es fácil de
definir intuitivamente aunque no son fáciles de modelar formalmente y presentan grados de dificultad que
hacen difícil el manejo computacional. En ellos se tiene un conjunto de piezas de diferentes tamaños y
formas que deben ser localizadas sobre un tablero de material de mayor tamaño sin superponerse unas
sobre otras. El objetivo de tal disposición es maximizar el área utilizada de forma que se generen la
2
menor cantidad de área desperdiciada. Existen diferentes criterios para clasificar los problemas de
empaquetado, como son el tamaño y la cantidad de las piezas, las dimensiones del problema, etc.
Un caso particular de esta familia de problemas, lo constituye el problema de corte de piezas
rectangulares desde tableros también rectangulares con el fin de satisfacer una demanda predefinida y
determinada con base en las solicitudes de los clientes. Además, todos los cortes deben ser de tipo
guillotina, es decir, cortando el tablero o parte de él ortogonalmente de lado a lado se obtiene una pieza o
un conjunto de piezas. Se exige además, que el número de veces que una determinada pieza sea cortada
desde la placa no supere un valor preestablecido. Los problemas de empaquetado tienen una amplia
aplicación en distintas facetas industriales: textil, cristal, piel, madera, entre otras. Sin embargo, diferentes
inconvenientes particulares a cada problema determinan la disposición de las piezas sobre el patrón. Entre
estos inconvenientes se pueden destacar las propiedades del material del patrón (falta de uniformidad en
el color, calidad, textura), la tecnología de corte (que obliga a que exista una determinada distancia entre
las piezas).
Para resolver el problema la mayor parte de procedimientos reportados en la literatura se basan en técnicas
metaheurísticas. En 1977 Christofides y Withlock [2] , propusieron un algoritmo exacto de búsqueda en
árbol para resolverlo, utilizando para ello el algoritmo previamente propuesto en 1966 por Gilmore y
Gomory [3] quienes resuelven un problema de características similares. Por otro lado en 1983 Wang [4],
propone un algoritmo de desarrollo incremental del patrón solución. Tal algoritmo es posteriormente
mejorado en los trabajos de Vasko en 1989 [5] y en 1990 Oliveira y Ferreira [6]. En 1997, Lai y Chan [7]
presentan un procedimiento basado en simulated annealing.
En 1998 Parada [8] presenta la solución del problema mediante el simulated annealing usando una
codificación de árbol binario. En 2001 Leung [9] utilizan un algoritmo evolutivo, en el que usan la
representación de las soluciones de Lai y Chan . En 2003 Beasley [10] presenta un algoritmo genético
para el caso general. El algoritmo está basado en una nueva formulación no lineal para el problema. La
formulación también admite extensiones para el problema con más de un tablero, el problema con algunas
zonas del tablero que no se pueden utilizar y el problema donde las piezas se pueden rotar.
En 2007 Yaodong Cui [11] presenta un algoritmo exacto que genera cortes homogéneos en dos segmentos
de los que publica las características de los casos de prueba y las respuestas obtenidas.
En este trabajo se presenta una propuesta que emplea la codificación de árbol binario y un algoritmo
dividido en tres etapas que trabajan con estrategias individuales inspiradas en algoritmos de vecindad
variable, recocido simulado y técnicas constructivas para lograr la solución del problema, para evaluar la
eficiencia de la técnica de solución propuesta se utilizan los casos de prueba usados de la referencia [11].
Este artículo está organizado de la siguiente forma. El problema de empaquetamiento bidimensional tipo
guillotina y la codificación propuesta son presentados en la sección 2. La sección 3 explica el la
metodología de solución, en la sección 4 se presentan los resultados encontrados y en la sección 5 se
comentan las conclusiones y recomendaciones de acuerdo a los resultados obtenidos.
2. Problema De Corte Bidimensional Tipo Guillotina
El problema de corte de piezas bidimensional restricto para cortes guillotinados consiste en la obtención
de un patrón de cortes del tipo guillotina, para una lámina o tablero rectangular, desde donde se desea
obtener un conjunto determinado de piezas rectangulares más pequeñas bajo una demanda establecida,
con el propósito de minimizar la pérdida de material cortado ó maximizar el área utilizada.
2.1 Definición del problema
3
Dado un número finito n de piezas rectangulares de área Ai x i Ay i que deben ser ubicadas en un
tablero igualmente rectangular de área AT xT AyT . El problema se define como restringido cuando se
limita el número máximo de piezas (D) a ubicar de cada tipo. No es necesario que todas las piezas sean
ubicadas en el tablero. La función objetivo consiste en maximizar el área efectiva utilizada en el tablero
principal. Una variante al problema considera la rotación de piezas, aspecto que no será tenido en cuenta
en este trabajo.
El modelo propuesto divide el tablero principal en sub-espacios (S) asegurando que en cada sub-espacio se
ubiquen piezas de un mismo tipo formando una matriz rectangular de piezas como se muestra en la figura
1(a).
Sub
espacio
A
Sub
Espacio
B
(a) (b)
Figura 1 Generación de subespacios Adicional a esto, los sub-espacios deben ser seleccionados de tal forma que el corte sea tipo guillotina. Un
corte es factible de tipo guillotina si cuando al ser aplicado sobre un rectángulo produce dos nuevos
rectángulos, es decir, si el corte va de un extremo a otro del rectángulo original; en otro caso se denomina
de tipo no guillotina [3].
En cada sub-espacio generado por los cortes tipo guillotina debe ser ubicada la mayor cantidad de piezas
del mismo tipo de tal forma que el desperdicio total sea minimizado, un forma de lograrlo consiste en
ubicar piezas del mismo tipo en un arreglo matricial como se muestra en la figura 1(b). Un arreglo de estas
características puede ser generado por una secuencia de cortes guillotina aún en los casos en donde la
demanda restrinja posiciones nulas (espacio sin utilizar).
Cuando se entra a resolver un problema de tipo no guillotina el valor de la función objetivo considerada
como el máximo de área utilizada será mayor que si se resuelve el problema donde se consideren los
cortes de tipo guillotina, esta restricción hace más complejo el modelo matemático y la solución del
mismo. El problema del corte de piezas ha sido ampliamente estudiado, debido a la variedad de
aplicaciones prácticas que este presenta en el ámbito de la Ingeniería y muchas de ellas requieren que los
cortes sean de tipo guillotina.
2.1 Modelo matemático El problema propuesto puede ser modelado matemáticamente de la siguiente forma:
(1)
4
Sujeto a: (2)
(3)
(4)
(5)
(6)
(7)
(8)
(9)
En donde
f: función objetivo : desperdicio total
Ai : área de cada una de las posibles piezas.
Uki : numero de piezas del tipo i colocadas en el sub espacio k horizontalmente
Vki: numero de piezas del tipo i colocadas en el sub espacio k verticalmente
Ns: número de subespacios.
N: números naturales (enteros positivos).
n: número de tipos de piezas.
Di :demanda por cada tipo de pieza.
Xk : ancho del subespacio.
Yk: : altura del subespacio.
El producto corresponde al número de piezas totales del tipo i localizadas en el sub-espacio k,mientras que el número de piezas ubicadas debe ser un número natural tal como se muestra en la Ec.(2).
El total el número de elemento de cada tipo debe ser inferior a la demanda del mismo Ec.(3) y en cada
sub-espacio los elementos ubicados en forma de arreglo matricial deben ser factibles lo cual significa que
el número de elementos horizontales multiplicados por la longitud de cada elemento debe ser menor a la
longitud del sub-espacio ( ) como se muestra en la Ec.(4) y análogamente en la Ec.(5) para el caso
vertical.
Para asegurar que las piezas ubicadas en cada subespacio sean del mismo tipo se plantean las Ecs. (6) y
(7). Esa restricción además de permitir el desarrollo de un constructivo eficiente, garantiza que los cortes
en los subespacios sigan siendo de tipo guillotina. Así mismo, la Ec.(8) indica que el corte debe ser tipo
guillotina. La Ec.(8) es la restricción de mayor dificultad a ser modelada matemáticamente por tanto se
propone un tipo de codificación que garantice su cumplimiento como se muestra a continuación.
2.2 Codificación
5
Para asegurar que los subespacios creados presenten cortes de tipo guillotina se define una codificación de
árbol binario complementario el cual además permite un manejo eficiente de la información al utilizar un
reducido número de variables para representar una solución.
El número de capas (c) es definido de forma aleatoria y determina el número de variables en la
codificación así como el número de subespacios (S) creados. El número de cortes (p) está dado por la
ecuación
(10)
El número de subespacios (NS) está dado por
(11)
Para representar la estructura que genera el subespacio son definidos dos vectores de tamaño igual al
número de cortes: el primero ( ) es un vector de tipo binario que define el tipo de corte (vertical u
horizontal), el segundo ( ) es un vector real con valores entre 0 y 1 que determina la distancia porcentual
a la cual se produce el corte con respecto al patrón superior.
Por ejemplo si se decide que el número de capas es 2 entonces se generarán tres cortes que a su vez darán
lugar a 4 sub-espacios figura (3). Un conjunto de posibles vectores generados aleatoriamente es el
siguiente:
(12)
(13)
Una ventaja de este tipo de codificación es que cualquier conjunto es factible siempre y cuando
sea binario y este en el intervalo . Por ejemplo, si las dimensiones del tablero base son de 70x42,
estas dimensiones representan el 100 % de la primera capa; el primer corte con parámetros T1 = 0 y H1 = 0,65 indica que se hace un corte horizontal al 65% del tablero, esto genera dos espacios de dimensiones
70x14,7 y 70x27,3; el segundo corte T2 = 1 y H2 = 0,4 indica un corte vertical sobre el espacio de
70x27,3. El último corte es aplicado sobre el espacio de 70x14,7. Estos cortes sucesivos generan cuatro
subespacios de dimensiones S = { 28x27,3 42x27,3 21x14,7 49x14,7}. El proceso se representa mediante
el árbol mostrado en la figura 2. Finalmente la figura 3 muestra la división del tablero base.
6
70x42
70x27,3 70x14,7
28x27,3 42x27,3 21x14,7 49x14,7
T = 0H = 0,65
T = 1H = 0,40
T = 1H = 0,30
Figura 2. Árbol binario que representa el proceso
D E
F G
B
C
A
30%
40%
65%
Figura 3. Cortes sobre el tablero según el árbol de corte propuesto en la figura 2.
3. Metodología de solución.
La codificación propuesta garantiza la factibilidad en cuanto al corte guillotina, esto permite que el
problema de optimización con restricciones se transforme en un problema de minimización irrestricto
entero mixto en donde las variables T y H son independientes entre sí, esto significa que para cada
conjunto de valores de T existe una solución H la cual es óptima:
(14)
De esta forma se puede utilizar cualquier algoritmo combinatorial para encontrar valores óptimos de T
siempre y cuando se utilice un segundo algoritmo que permita encontrar los valores óptimos de H a partir
de los valores de T. La ubicación final de las piezas se realiza mediante un tercer algoritmo, esta vez un
constructivo que garantiza una solución única para cada conjunto de valores (T,H), este algoritmo es
basado en arreglos del mismo tipo como se mostró en la figura 1(b). La figura 4 esquematiza el proceso
AlgoritmoI
AlgoritmoII
AlgoritmoIII
T H
7
Figura 4. Secuencia de los algoritmos
3.1 Algoritmo de búsqueda aleatoria binaria
El algoritmo I determina el valor de la variable binaria T la cual representa el tipo de corte a utilizar, para
este algoritmo se utilizó un esquema de vecindario variable [12].
Algortimo I: Búsqueda aleatoria binaria
Datos de entrada IG
Tinc Aleatorio Binario
Incumbente 0
Vecindario 1
For k = 1 To IG
T Tinc
For i = 1 To Vecindario
j Aleatorio Entero
T[j] Not(T[j])
EndForVecindario Vecindario + 1
[F, H] AlgoritmoII(T)
If F > Incumbente
Incumbente F
Tinc T
Hinc H
Vecindario 1
EndIfEndForEndForResult Hinc, Tinc
Inicialmente el vecindario de búsqueda consiste en modificar de forma aleatoria una posición en el vector
T, posteriormente, si esta modificación no genera una mejora en la función objetivo se procede a
modificar dos posiciones y así sucesivamente, en el momento en que la incumbente sea actualizada se
regresa nuevamente al primer vecindario. Esta metodología de búsqueda local permite diversificar cuando
la función objetivo no es mejorada y hacer una búsqueda local más detallada en el momento de
actualizarse la incumbente, de esta forma se logra un algoritmo computacionalmente eficiente.
3.2 Algoritmo de búsqueda aleatoria real
El segundo algoritmo determina la variable H a partir un vector T, para ello utiliza un algoritmo de
búsqueda aleatoria que modifica iterativamente una posición del vector H reduciendo paulatinamente el
ancho de búsqueda, para ello se utiliza una función delta definida como
(15)
En donde R corresponde a un número aleatorio en el intervalo [-1,1], mientras que k es la iteración actual
e IP es el número total de iteraciones del algoritmo. En las primeras iteraciones, el factor que multiplica a
R es cercano a 1, por tanto los movimientos son altamente aleatorios, a medida que el algoritmo
8
evoluciona se hace mas determinístico por lo cual este factor se acerca a cero. El valor de Hi estará dado
por
(16)
Este algoritmo está inspirado en la filosofía del recocido simulado [13] en donde a medida que evoluciona
el grado de aleatoriedad disminuye.
Algoritmo II: Búsqueda aleatoria real
Datos de entrada IP, T
Hinc Aleatorio
Incumbente 0
For k = 1 To IP
H Hinc
j Aleatorio Entero
delta aleatorio(-1,1)*((1-k/(IP+1))^0.5)
H[j] H[j] + delta
If H[j] > 1 Or H[j] < 0
H[j] Aleatorio
EndIf F AlgoritmoIII(T,H)
If F > Incumbente
Incumbente F
Hinc H
EndIf EndForResult Hinc
3.3 Algoritmo constructivo
El algoritmo constructivo ubica las piezas en los diferentes sub-espacios definidos por los vectores H y T.
Como cada sub-espacio debe ubicar arreglos del mismo tipo solo vasta determinar cuál es el desperdicio
para cada tipo de arreglo asegurando se cumpla la restricción de demanda como se muestra a
continuación.
Algoritmo III: Constructivo
Datos de entrada T,H
For k = 1 To Ns (Xk,Yk) Tamaño del sub-espacio k
Max 0
For i = 1 To n a Entera( Xk / xi )
b Entera ( Yk / yi )
z min(a*b, Di)
If z*Ai > Max
Max = z*Ai
9
Result(k) [z,i]
EndIfEndFor
EndFor
La solución encontrada por este algoritmo es única ya que no incluye ninguna sentencia con aleatoriedad;
por ejemplo para el tablero de 70x42 anteriormente descrito con los valores de T y H dados por las
ecuaciones 12 y 13 y los parámetros mostrados en la tabla I, el algoritmo constructivo obtiene el corte
mostrado en la figura:
Tipo de pieza Largo Ancho Número de piezasPieza 1 22 18 6
Pieza 2 8 29 5
Pieza 3 19 19 2
Pieza 4 16 13 2
Pieza 5 4 16 1
Tabla 1. Datos del problema
3 de tipo 5 1 de tipo 5
4 de tipo 5
7 de tipo 6 65 %
40 %
30 %
Figura 5. Solución obtenida
10
4. Resultados obtenidos.
Se tomaron 50 casos de prueba de la literatura especializada que pueden ser obtenidos de [11]. Cada caso
presenta 20 tipos de piezas rectangulares a ser ubicadas sin permitir rotación.
Después de calibrar los parámetros a través de 1000 corridas del algoritmo para distintos casos, los
mejores resultados se obtuvieron con los siguientes valores
Número de capas 3
Iteraciones globales (IG) 5000
Iteraciones parciales (IT) 1000
Tabla 2. Valor de los parámetros
Las iteraciones globales se refieren al número de iteraciones del algoritmo I mientras que las iteraciones
parciales se refieren al número de iteraciones del algoritmo II.
En las tablas 3 y 4 se muestran los 50 casos donde se comparan las respuestas obtenidas en función del
área utilizada y el porcentaje de utilización. Para 42 de ellos se obtuvieron mejores respuestas que las
mejores conocidas. Cada caso se corrió 10 veces con los parámetros de la tabla 2.
Caso de Prueba Respuesta de la Literatura Respuesta del algoritmo propuesto
Caso Area Disponible Area utilizada Porcentaje de uso Area utilizada Porcentaje de uso Diferencia 1 2004002 1964584 0.9803 1990174.386 0.9931 25590.3862
2 2941249 2867218 0.9748 2887424.143 0.9817 20206.1433
3 2709525 2656454 0.9804 2679178.32 0.9888 22724.3200
4 2479752 2370496 0.9559 2443299.646 0.9853 72803.6456
5 2319604 2281600 0.9836 2275995.445 0.9812 -5604.5552
6 2976190 2918503 0.9806 2931249.531 0.9849 12746.5310
7 2265650 2227422 0.9831 2240954.415 0.9891 13532.4150
8 2272792 2238658 0.9849 2247791.288 0.989 9133.2880
9 2764384 2690038 0.9731 2717389.472 0.983 27351.4720
10 2624232 2574750 0.9414 2579620.056 0.983 4870.0560
11 3235950 3115873 0.9628 3162817.53 0.9774 46944.5300
12 2921333 2837743 0.9713 2856771.541 0.9779 19028.5407
13 2553588 2501400 0.9795 2525753.891 0.9891 24353.8908
14 2436480 2343169 0.9617 2350959.552 0.9649 7790.5520
15 3072540 3017184 0.9819 3031675.218 0.9867 14491.2180
16 2174340 2102756 0.9670 2136723.918 0.9827 33967.9180
17 2401595 2276323 0.9478 2317299.016 0.9649 40976.0155
18 2827455 2736919 0.9679 2751961.952 0.9733 15042.9515
19 2181600 2145051 0.9832 2149966.8 0.9855 4915.8000
20 3157786 2994717 0.9483 3050737.055 0.9661 56020.0546
21 2953340 2900376 0.9820 2892501.196 0.9794 -7874.8040
11
22 3204790 3066344 0.9568 3086853.728 0.9632 20509.7280
23 2763800 2676037 0.9682 2686966.36 0.9722 10929.3600
24 2408892 2287330 0.9495 2292060.738 0.9515 4730.7380
25 3163699 3037774 0.9601 3108967.007 0.9827 71193.0073
Tabla 3. Resultados para los casos del 1 al 25
En las gráficas 6 y 7, se comparan las mejores respuestas obtenidas para todos los casos con la mejor
respuesta conocida en la literatura.
0.9400
0.9500
0.9600
0.9700
0.9800
0.9900
1.0000
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
Casos de prueba
Po
rcen
taje
de u
so
Literatura especializada
Algoritmo propuesto
Figura 6. Comparación resultados del 1 al 25
Caso de Prueba Respuesta de la Literatura Respuesta del algoritmo propuesto Diferencia
12
Caso Area Disponible Area utilizadaPorcentaje de uso Area utilizada Porcentaje de uso
26 2805712 2695345 0.9606 2748756.046 0.9797 53411.0464
27 2526230 2383242 0.9433 2479747.368 0.9816 96505.3680
28 2532060 2446799 0.9663 2490027.804 0.9834 43228.8040
29 2230605 2158548 0.9676 2186885.142 0.9804 28337.1420
30 2514609 2471150 0.9827 2462305.133 0.9792 -8844.8672
31 2727200 2583155 0.9471 2666656.16 0.9778 83501.1600
32 2699860 2618956 0.9700 2628853.682 0.9737 9897.6820
33 2262910 2216886 0.9796 2224666.821 0.9831 7780.8210
34 2330028 2279436 0.9782 2284359.451 0.9804 4923.4512
35 2882646 2787529 0.9670 2798761.001 0.9709 11232.0014
36 2658656 2508545 0.9435 2588999.213 0.9738 80454.2128
37 2817192 2667081 0.9467 2738592.343 0.9721 71511.3432
38 2618181 2566844 0.9803 2567650.107 0.9807 806.1067
39 2097396 2029177 0.9674 2068032.456 0.986 38855.4560
40 2597700 2540141 0.9778 2531198.88 0.9744 -8942.1200
41 2718228 2686780 0.9884 2677182.757 0.9849 -9597.2428
42 2379541 2306316 0.9692 2339088.803 0.983 32772.8030
43 2519286 2419778 0.9605 2454036.493 0.9741 34258.4926
44 2575800 2493761 0.9681 2507026.14 0.9733 13265.1400
45 2497225 2418204 0.9683 2414067.408 0.9667 -4136.5925
46 2817360 2693446 0.9560 2750588.568 0.9763 57142.5680
47 2484896 2388374 0.9611 2414821.933 0.9718 26447.9328
48 3007466 2943027 0.9785 2933482.336 0.9754 -9544.6636
49 2868953 2819262 0.9826 2815016.684 0.9812 -4245.3164
50 2234752 2161976 0.9674 2194973.414 0.9822 32997.4144
Tabla 4. Resultados para los casos del 26 al 50
13
0.9400
0.9500
0.9600
0.9700
0.9800
0.9900
1.0000
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
Casos de prueba
Po
rcen
taje
de u
so
Literatura especializada
Algoritmo propuesto
Figura 7. Comparación de resultados del 26 al 50
En la tabla 5 y la figura 8, se presenta un resumen de los resultados obtenidos con base en el porcentaje de
mejora. Se observan respuestas de mejor calidad para la gran mayoría de los casos reportados en [11] y los
no superados quedaron muy próximos a la mejor respuesta conocida.
Resumen de Respuestas Número de casos
Soluciones no superadas 8
Soluciones superadas entre 0 y 1 % 21
Soluciones superadas entre 1 y 2 % 14
Soluciones superadas entre 2 y 3 % 3
Soluciones superadas entre el 3 y 4 % 3
Soluciones superadas en mas de 4 % 1
Tabla 5 Resumen de respuestas
14
-8
21
14
3 31
-10
-5
0
5
10
15
20
25
1 2 3 4 5 6
Figura 8. Resumen de respuestas
Con el fin de conocer la eficiencia del algoritmo propuesto se realizaron 90 corridas para el caso 25 cuyos
resultados fueron agrupados según la siguiente distribución de frecuencias:
1
95 1409 95 9543 95 5476 6 6 67
95 9543 95 7678 95 8611 4 4 44
95 7678 96 0813 95 9245 8 8 89
96 0813 96 3949 96 2381 5 5 56
96 3949 96 7084 96 5516 13 14 44
96 7084 9
i i i il ,l x n Probabilidad de ocurrencia
. , . . . %
. , . . . %
. , . . . %
. , . . . %
. , . . . %
. , 7 0219 96 8652 5 5 56
97 0219 97 3354 97 1787 25 27 78
97 3354 97 6489 97 4922 7 7 78
97 6489 97 9625 97 8057 13 14 44
97 9625 98 2760 98 1192 4 4 44
. . . %
. , . . . %
. , . . . %
. , . . . %
. , . . . %
Tabla 6. Distribución de frecuencias caso 25
Para realizar el ajuste a una distribución de probabilidad fue usado el programa crystall ball 2000.2.2
obteniéndose el resultado mostrado en la figura 9.
15
Figura 9. Distribución de probabilidad caso 25
Esta distribución pertenece a una normal con parámetros:
96 8567 0 7585. .
Con base en estos parámetros se calcula la probabilidad de encontrar un valor igual o mejor a la mejor
solución reportada en la literatura que para este caso es de 96.019
96 0197 96 856796 0197 1 10 1 1 10
0 7585
. .P X . P Z P Z . P Z .
.
1 10 0 8643P Z . .
De acuerdo con lo anterior hay una probabilidad de 86.43% de obtener una respuesta mejor o igual a la
reportada en la literatura.
5. Agradecimientos
Los autores desean expresar su agradecimiento a la Maestría en Investigación de Operaciones y
Estadística de la Facultad de Ingeniería Industrial y al grupo DINOP adscrito al programa de Ingeniería
Eléctrica de la Universidad Tecnológica de Pereira por su apoyo en la realización de esta investigación.
6. Conclusiones y recomendaciones
Fue implementado un algoritmo para la solución del problema de corte bidimensional tipo guillotina y
solucionado usando un algoritmo híbrido que combina técnicas inspiradas en búsqueda en vecindario
variable, recocido simulado y técnicas constructivas.
16
Los patrones de corte obtenidos son de fácil implementación práctica, especialmente cuando no se cuenta
con máquinas de corte de control numérico ya que se entregan disposiciones homogéneas para cortar las
piezas de acuerdo a la demanda.
La escala de los problemas de prueba es comparable con muchos problemas prácticos de corte. Los
resultados computacionales fueron satisfactorios comparados con las mejores respuestas conocidas de la
literatura especializada.
Se ha realizado un análisis estadístico para demostrar la eficiencia de la metodología propuesta y tener
conocimiento sobre el porcentaje de mejora al momento de realizar un ensayo en particular. Para ello se
tomaron 90 muestras de un mismo caso, cuyos parámetros se ajustan a una distribución normal. Los
resultados obtenidos muestran que el algoritmo propuesto presenta una alta eficiencia en la gran mayoría
de los casos estudiados.
El tipo de codificación para representar el problema bidimensional restricto basado en árboles binarios
garantiza que los patrones que se obtengan sean de tipo guillotina; por la estructura de la misma, se
facilita la generación de soluciones vecinas y el cálculo del valor de la función objetivo.
Dentro de los trabajos futuros podrían resolverse casos de prueba en donde las condiciones del problema
permitan rotación de las piezas; además, se podría hacer la extensión para el problema de corte
bidimensional cuando las figuras demandadas son polígonos, planteando que puede realizarse una
reducción del problema a uno de empaquetamiento de rectángulos con algunas consideraciones.
se constituye en un método de solución eficiente para resolver este tipo de problemas.
Se observó en el desarrollo de este trabajo que para obtener una buena alternativa para la solución de este
tipo de problema se debe aplicar conjuntamente una codificación eficiente con técnicas metaheurísticas.
7. Referencias bibliográfícas
[1] Jakobs S, Theory And Methodology On Genetic Algorithms For The Packing Of Polygons. European
Journal Of Operational Research. Vol.88, p87-100. 1996.
[2] Christofides, N., Whitlock, A. An algorithm for twodimensional cutting problems, Operational
Research 25, pp 30 -44, (1977).
[3]. P.C. Gilmore y R.E. Gomory, The theory and computation of knapsack functions", Operations
Research, 1045-1074 (1966).
[4] Wang, P. Two algorithms for constrained twodimensional cutting stock problems, Operations
Research 31, 573-586 (1983).
[5] Vasko, F.A computational improvement to Wang's two-dimensional cutting stock algorithm,
Computers and Industrial Engineering 16, 109-115 (1989).
[6] Oliveira, J. F, Ferreira , J. S. An improved version of Wang's algorithm for two - dimensional Cutting
Problems, EJOR 44, 256-266 (1990).
[7]Lai. K., Chan, J.. A evolutionary algorithm for the rectangular cutting stock problem. International
Journal of Industrial Engineering, 4:130-139. 1997
[8] Parada V., Sepúlveda M.,Gómez A. Solution for the Constrained Guillotine Cutting Problem by
Simulated Annealing. Journal on computers and operations research, 25 37-47. 1998.
[9] Leung,T.W.,Yung,C.H, Troutt,M.D.(2001). Applications of genetic search and simulated annealing to
the two-dimensional non-guillotine cutting stock problem. Computers and Industrial Engineering, 40:201-
214.
[10] Beasley J.E, A population heuristic for constrained two-dimensional nonguillotine cutting, European
Journal of Operational Research 156 (2004) 601-627.
17
[11] Yaodong Cui. An exact algorithm for generating homogenous T-shape cutting patterns. Computers &
Operations Research. 2007, 34(4): 1107-1120
Disponible en Internet en : http://www.gxnu.edu.cn/Personal/ydcui/English/Paper.htm
[12] Hansen,P., Nenad M. Moreno J. Búsqueda de entorno variable. Inteligencia Artificial, Revista
Iberoamericana de Inteligencia Artificial. No.19 (2003),pp. 77-92
[13] Gallego, R. Escobar, A. Romero, R. Técnicas de optimización combinatorial. Textos universitarios.
Universidad Tecnológica de Pereira. Abril 2006.