Sunteți pe pagina 1din 13

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/201212123

Un Algoritmo GRASP de corte guillotina 2D con Agrupamiento y Rotación

Conference Paper · January 2007

CITATIONS READS
0 1,792

3 authors, including:

David Mauricio Glen Dario Rodriguez


National University of San Marcos Universidad Nacional de Ingeniería (Peru)
34 PUBLICATIONS   96 CITATIONS    43 PUBLICATIONS   118 CITATIONS   

SEE PROFILE SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Regression Testing of Applications under an Incremental Software Development Setting View project

Software Testing Techniques Recommender System View project

All content following this page was uploaded by Glen Dario Rodriguez on 31 May 2014.

The user has requested enhancement of the downloaded file.


Un Algoritmo GRASP de corte guillotina 2D con
Agrupamiento y Rotación
José E. Cevallos
David S. Mauricio
Glen D. Rodríguez
Universidad Inca Garcilaso de la Vega,
Facultad de Ingeniería de Sistemas, Cómputo y Telecomunicaciones
Av. Bolívar 1848, Lima, Perú, Lima 21
jcevallos@maestro.com.pe
{davidmauricio,glenrodriguez}@uigv.edu.pe

Abstract
A common problem in many industries is to minimize the wasted material in the cutting of rectangular
elements of variable size and amount from a stock of fixed size sheet or plate. The case discussed here is
the guillotine cut, and where the rectangular element has no preferred orientation, which creates more
possible combinations because the addition of more options with 90 degrees rotations. Before this paper,
many researchers have approached this problem with many methods: linear programming, exact methods,
various heuristics and metaheuristics. In this paper we present a GRASP algorithm with a grouping
heuristic that solves this problem: Its results compare favourably against previous works results, in
minimizing the wasted material.

Keywords: GRASP, stock cutting and packing 2D, grouping, rotation, orthogonal packing

Resumen
Un problema común a muchas industrias es minimizar los desperdicios en el corte de elementos
rectangulares de cantidad y tamaño variables desde láminas de tamaño fijo. El caso que tratamos es el corte
de tipo guillotina, y donde el elemento rectangular no tiene un requerimiento de orientación, por lo que las
combinaciones posibles aumentan al añadirse la posibilidad de rotación en 90 grados. Anteriormente, otros
investigadores han abortado este problema con muchos métodos: programación lineal, métodos exactos,
heurísticas y metaheurísticas variadas. En este artículo presentamos un algoritmo GRASP con una
heurística de agrupamiento que resuelve este problema. Sus resultados se comparan favorablemente con
respecto a los resultados de otras investigaciones, en minimización del desperdicio.

Palabras clave: GRASP, corte y empaquetado 2D, agrupamiento, rotación, empaquetado ortogonal

1 Introducción

En diversas industrias hay la necesidad de cortar los materiales en piezas de distintos tamaños para
satisfacer la demanda de sus clientes. El problema consiste entonces en hallar una forma eficiente para
efectuar dichos cortes, es decir, cubrir todos los requerimientos de cortes mientras se minimiza los recursos
y se satisfacen ciertas restricciones.

La estructura de un problema de corte de dos dimensiones contiene los datos de un conjunto L, cuyos
elementos definen cuerpos geométricos en dos dimensiones y que se asocian con la materia prima.
Asimismo, hay otro conjunto D de parejas ordenadas, las cuales se refieren a la lista de pedidos o demanda
donde para toda pareja (b, l), b indica la cantidad de elementos o piezas requeridas y l sus dimensiones.
Finalmente, es necesario identificar la forma en que se harán los cortes sobre la materia prima. En resumen,
se dispone de un conjunto finito de objetos rectangulares de dos dimensiones que se requiere encajar en
tableros de ancho y largo conocidos. El cálculo considerado se realizará considerando la posibilidad de
rotar 90 grados la posición del objeto en el tablero, si ello ayuda a la minimización del desperdicio.

En este artículo se presenta una solución al problema mediante un novedoso algoritmo que usa meta-
heurística GRASP (Greedy Randomize Adaptative Search Procedure) junto a una novedosa “mejora
después de la mejora” que intenta evitar el uso del tablero con más desperdicio (el más vacío) y una poco
estudiada heurística complementaria de agrupamiento de elementos o piezas similares. Por razones de
simplicidad el algoritmo propuesto no considera el orden de los cortes, pero mantiene la restricción de
corte guillotina. Hay muchas aplicaciones en la industria: en carpintería industrial para el corte de piezas
para la fabricación de muebles, en el corte de vidrio, papel, cartones, etc., así como en actividades menos
obvias como el optimizar la ubicación de avisos publicitarios en un periódico.

2 El problema de cortes

El término “Cortar y embalar” se ha vuelto sinónimo de un amplio rango de problemas parecidos, que son
descritos en el año 2004 por Glenn Whitwell [15] e incluyen el de empaquetado o bin packing, el problema
de la mochila, el de asignación de espacio / asignación de capacidad, el de empaquetado ortogonal /
empaquetado de tiras, problema de pérdida en los cortes, de nesting, problema de cargamento y el de
Marker Layout. El problema a discutir en este artículo es una variante del empaquetado ortogonal. El
problema de cortes es un problema de optimización, cuya solución no ha podido ser obtenida por ningún
algoritmo de complejidad polinomial. Este tipo de problemas es considerado dentro del grupo de problemas
NP difícil.

2.1 Métodos exactos aplicados en el problema de corte

Los métodos exactos fueron investigados por Gilmore y Gomory [4], originalmente en la década del 60 y
constituyen la primera etapa de investigación en el área de cortar y llenar. Usaron técnicas de programación
lineal para solucionar problemas de optimización unidimensionales. Se han realizado mejoras y
modificaciones a lo largo del tiempo [2]. Sin embargo, en general los métodos exactos son buenos sólo
para problemas pequeños y medianos, debido a los altos requerimientos computacionales.

2.2 Métodos Heurísticos aplicados al problema de corte

En 1998, Faggioli y Bentivoglio [3], investigaron los métodos tanto heurísticos como exactos en un
enfoque de tres fases. Esto suponía producir una buena solución de arranque en primer lugar con un
algoritmo goloso, mejorar con búsqueda tabú y luego usar procedimientos de enumeración implícitos
exactos. El método es bueno pero involucra un esfuerzo computacional muy grande para 40 o más piezas.

Los enfoques heurísticos más documentados son el (LB) inferior - izquierdo y los métodos de (LBF) mejor
- inferior - izquierdo [15]. En 1980, Brown [1] revisó el límite inferior de la estrategia de colocación
inferior - izquierda y demostró que hay grupos de rectángulos para los que es imposible producir la
solución óptima. Ésta es la desventaja principal de la heurística de colocación LB. El segundo método,
LBF, es una versión modificada de la heurística de colocación inferior - izquierda. El método LBF, puede
llenar espacios libres usando rectángulos en el empaquetamiento, mientras que en LB este espacio nunca
será llenado (incluso si un rectángulo posterior quedara bien) y por lo tanto el espacio puede ser
considerado desperdicio. El algoritmo LBF es perjudicado por su peor complejidad de tiempo de O (N3),
por consiguiente, el tiempo de ejecución puede ser muy grande en problemas de mayor tamaño.

2.3 Métodos Metaheurísticos aplicados al problema de corte

Existen una gran variedad de métodos metaheurísticos aplicados a la resolución del problema de cortes, que
como su nombre lo indica son heurísticas superiores, es decir algoritmos aproximados a una resolución
óptima. A continuación describimos algunos de ellos, que nos permitirán analizarlos y evaluarlos:

2.3.1. Algoritmos Genéticos


En el año 1999 Ramesh Babu y Ramesh Babu, [12] utilizan el método genético para resolver del problema
de cortes. En 2003, Onwubolu y Mutingi [10], propusieron un enfoque genético para el problema de
embalaje de rectángulos de tipo guillotina. El enfoque pone un rectángulo inicial en primer lugar y luego
busca un rectángulo que puede ser adjuntado al primero mientras mantiene restringida el corte de
guillotina. Los cromosomas dentro del algoritmo genético representan las piezas que pueden ser adjuntados
por pares y la orientación en la que deben ser puestas. Los autores informaron sobre una mejora de más de
60 % de los problemas usados en trabajos anteriores.

2.3.2. Algoritmos GRASP

El algoritmo GRASP, fue desarrollado por Feo y Resende [13]. Es un procedimiento iterativo que combina
una fase constructiva y una fase de mejora. En la fase constructiva, una solución es construida paso a paso,
añadiendo elementos a una solución parcial. Para escoger el elemento para ser añadido, una función golosa,
que dinámicamente es adaptada como la solución parcial es construida. Sin embargo, la selección del
elemento no es determinista, pero sujeta a una randomización del proceso. De este modo, cuando repetimos
el proceso podemos obtener soluciones diferentes. Después de cada fase constructiva, la fase de mejora, por
lo general consiste en una búsqueda simple local, que trata de substituir algunos elementos de la solución,
que están allí como el resultado de la ordenación aleatoria, con otros, produciendo así una mejor solución
total.

Una propuesta de este método es la desarrollada por Mauricio y Rivera [9] en el año 2002 y 2003. Los
algoritmos propuestos de construcción Grasp son basados en los algoritmos golosos FFD y BFD de
Mauricio [7], pero se diferencian en el criterio de selección, y no se utiliza el criterio decreciente, por
cuanto no existe un ordenamiento para atender los requerimientos, sino que se efectúa por una selección
aleatoria desde RCL.

Es posible introducir variantes mediante el uso de parámetros de relajación. La segunda componente de un


algoritmo GRASP es un algoritmo de búsqueda local, el cual tiene por objetivo, mejorar la construcción
encontrada por el algoritmo de construcción GRASP. Si se utilizan adecuadamente los parámetros de
relajación, permite diversificar las soluciones, lo que significa que puede obtenerse mejores soluciones que
los algoritmos FFD y BFD [9].

2.4 Rotaciones

Con el propósito de mejorar el empaquetamiento y reducir el desperdicio, se propuso la rotación de las


piezas que van a ser encajadas en las láminas. Una muestra de esta estrategia se da en el año 2000, cuando
Nagao, Sawa, Shigehiro y Shirakawa, citados por Whitwell [15], abordan el problema de
empaquetamiento de rectángulos desde la perspectiva de diseño de chips VLSI. Este tipo de problema tiene
la propiedad que el tamaño de la lámina no es pre-especificada, pero su área rectangular debe estar
minimizada (un factor importante en la Microelectrónica). Sin rotación se obtiene una solución 2.91%
superior al óptimo, con rotación la solución mejora al 1.65% superior al óptimo.

2.5 Agrupamiento

Otra de las técnicas que aun no ha sido muy difundida, es el agrupamiento. Un acercamiento de esta
estrategia fue presentada en 1995 por Kroger [6], quien en 1995 usó algoritmos genéticos para el embalaje
de recipiente de guillotina y lanzó la idea de "Meta-rectángulos", que son agrupaciones de rectángulos que
pueden empaquetar bien juntos y pueden ser tratado como un único objeto solo en futuras repeticiones de
búsqueda. En el 2003, Lins y Morabito, citados por Whitwell [15], recurren a su experiencia con el
problema de carga de paletas para aplicar un acercamiento recursivo para embalaje de rectángulo no-
guillotina congruente (copias múltiples de sólo un rectángulo). El algoritmo agrupa rectángulos en
rectángulos más grandes o artículos de Formas-L. En el año 2003, D. Mauricio [8], propone la idea de
agrupamiento para su algoritmo FFD que supone la opción de juntar rectángulos de dimensiones parecidas
que permitan tratarlos como piezas mayores a ser incluidas en una lámina.

2.6 Comparación de métodos

Las técnicas exactas son sumamente eficientes para problemas pequeños, pero no puede utilizarse para
problemas medianos o de mayor complejidad por su alto costo computacional en procesamiento. En cuanto
a los métodos heurísticos, estos han mostrado un mejor desempeño sobre todo en tiempo computacional,
las soluciones encontradas son óptimas y permiten utilizarlos en problemas de mayor tamaño, con un
tiempo computacional bastante eficiente. Las metaheuristicas son heurísticas superiores que mejoran las
soluciones anteriores pero tienen mayor complejidad y probablemente algunas de ellas muestren un
comportamiento lento sobre todo si trabajan con poblaciones de soluciones como en el caso de los
algoritmos genéticos.

Podemos concluir que las opciones más eficientes podrían obtenerse utilizando combinación de
metaheurísticas como los métodos constructivos como GRASP, (por su rapidez y por dar soluciones
confiables), con algoritmos de búsqueda local, tales como una derivación del mismo Grasp, tabú search,
algoritmos genéticos o simulated annealing, Asimismo la técnica de agrupamiento de piezas y la rotación
son opciones que pueden mejorar la solución del problema propuesto.

3 El algoritmo propuesto

En la presente sección se hace una descripción de los procesos involucrados en el algoritmo propuesto, que
incluyen el proceso de corte, la definición de variables utilizadas, las estrategias utilizadas para desarrollar
el algoritmo, que involucra la construcción de una solución inicial, que luego intentará ser mejorada
mediante una variante del algoritmo Grasp. Asimismo, las estrategias de rotación y agrupamiento que están
incluidas en los procesos de Construcción y mejoría. En el proceso de mejoría se ha incluido dos etapas o
fases, la primera que es de propiamente de mejoría y la segunda de reubicación que será descrita mas
adelante.

3.1 Definición formal del problema

El problema de corte de dos dimensiones consta de datos de un conjunto T, cuyos elementos definen
tableros rectangulares y que se asocian con la materia prima. Asimismo, hay otro conjunto E de parejas
ordenadas, las cuales se refieren a la lista de pedidos o demanda de dimensiones l,a. O sea, se dispone de
un conjunto finito de objetos rectangulares de dos dimensiones, que se requiere encajar en tableros de largo
y ancho conocido. Se desea minimizar el número de tableros usados para satisfacer la demanda.
Datos de entrada:
Lámina = Rectángulo de largo L y ancho A (L, A)
Pieza = Rectángulo de dimensiones inferiores a la lámina (l, a)
dg = Número de requerimientos (Piezas) con iguales dimensiones
Variables utilizadas durante el proceso:
E = Conjunto de requerimientos por atender
Hi = Conjunto de piezas horizontales de la lámina i
Vi = Conjunto de piezas verticales de la lámina i
Fi = Conjunto de piezas fijas de la lámina i
Bi = Conjunto de requerimientos atendidos por la lámina i
k = Requerimiento a ser atendido
j = Lámina usada
i = Lámina seleccionada
m+1 = Lámina seleccionada nueva
P = Pieza seleccionada
p1,..., v1 = Coordenadas de la Pieza
nl, na = Número de requerimientos (piezas) que pueden ser colocados a lo largo y ancho de P
nl na = Número total del mismo requerimiento (piezas) que pueden ser atendidos desde P
nl S na S = Número de piezas sin rotación (para estrategia de agrupamiento)
nl R na R = Número de piezas con rotación (para estrategia de agrupamiento)
g = Grupo formado

3.2 Estrategias de corte

Los procesos de corte sobre láminas nuevas, láminas usadas y la generación de láminas horizontales,
verticales y fijas, así como la rotación, se basan en el trabajo presentado en 2002 y 2003, por Mauricio, D y
Rivera, L [7], y se describen a continuación: Dado un requerimiento, el algoritmo seleccionará la primera
lámina usada que pueda atender a dicho requerimiento, y atenderá a este a través del proceso de corte sobre
lámina usada. Caso no exista tal lámina usada, el proceso de corte se realizará sobre una lámina nueva. Este
proceso se repetirá para cada requerimiento, hasta atender a todos ellos.

3.2.1. Lamina horizontal, vertical y fija

Sea B un requerimiento que puede ser atendido desde una lámina i, se asocia una pieza horizontal y una
vertical, como se muestra en la figura 1. Se asume que el requerimiento siempre será encajado en la parte
inferior izquierda de la lámina i.

VERTICAL
HORIZONTAL

Figura 1. Pieza sobrante horizontal y vertical asociado a un requerimiento

Cuando el requerimiento es atendido desde la pieza horizontal, la pieza vertical asume nuevas dimensiones
y se llamará pieza fija. La figura 2 (derecha) nos muestra una pieza fija .

P. FIJA

Figura 2. Lámina sin pieza sobrante fija (izquierda) y lámina con pieza fija (derecha)

3.2.2. Estrategia de rotación

Consiste en rotar el requerimiento siempre que sea posible encajar el mayor número entero piso (aquí lo
representaremos como [r]=max{e ∈ Z | e ≤ r} ) de éste en la pieza o lámina a cortar. Sea el requerimiento B
= ( l, a ), a ser atendido desde una pieza B = ( L, A ). La estrategia de rotación se define como sigue:

Si Max ⎧ ⎡ L ⎤ ⎡ A ⎤ ⎡ L ⎤ ⎡ A ⎤⎫ ⎡ L ⎤ ⎡ A ⎤
⎨⎢ ⎥ ⎢ ⎥, ⎢ ⎥ ⎢ ⎥ ⎬ = ⎢ ⎥ ⎢ ⎥ entonces rotar 90º , esto es B : = ( l, a ) : = ( a, l )
⎩⎣ l ⎦ ⎣ a ⎦ ⎣ a ⎦ ⎣ l ⎦ ⎭ ⎣ a ⎦ ⎣ l ⎦

3.2.3. Cortes sobre una lámina nueva

Sea un requerimiento B := ( l a ); que puede ser atendido desde una lámina i. El procedimiento de corte
B

k k k
sobre una lámina nueva “i”, consiste en dos pasos: Primero se aplica la estrategia de rotación si fuera el
caso sobre el requerimiento, con el fin de determinar la mejor posición de este, luego se encaja el
requerimiento B en el extremo inferior izquierdo de la lámina i. Este proceso puede generar piezas
horizontales y/o verticales, los cuales deberán ser adicionados respectivamente en los conjuntos H i, y V i.

Procedimiento Corte_Lámina_Nueva (B , i) B

⎧⎡ L ⎤ ⎡ A ⎤ ⎡ L ⎤ ⎡ A ⎤ ⎫ ⎡ L ⎤ ⎡ A ⎤
1. Si Max ⎨ ⎢ ⎥ ⎢ ⎥, ⎢ ⎥ ⎢ ⎥ ⎬ = ⎢ ⎥ ⎢ ⎥ entonces ( lK , aK ) : = (aK, , lK );
⎩⎣ l k ⎦ ⎣ a k ⎦ ⎣ a k ⎦ ⎣ l k ⎦ ⎭ ⎣ a k ⎦ ⎣ l k ⎦
2. B := ((0, 0) , ( l , a )) ;
B B i := { B };
K K K K
3. Sí (a < A ) entonces H ik : = ((0, a ), (L, A)), H i : = { H ik };
K K
4. Sí (l < L ) entonces V ik : = (( l , 0), (L, A)), V i : = { V ik };
K K
5. Fi := ∅
Observe que se ha denotado por Hik y Vik respectivamente, las piezas horizontales y verticales asociadas al
requerimiento. Observe también que en el corte sobre una lámina nueva no se origina pieza fija.

3.2.4. Cortes sobre una lámina usada

Sea un requerimiento B := ( l a ) que puede ser atendido desde una lámina i. El procedimiento de corte
B

K K K
sobre una lámina usada consiste en tres pasos: Primero, se selecciona una pieza desde los conjuntos de las
piezas horizontales H i, verticales V i o fijas F i. La pieza seleccionada debe ser tal que pueda atender al
mayor número de requerimientos Bk, esto significará un menor desperdicio. Segundo, se aplica la estrategia
B

de rotación para determinar la mejor posición del requerimiento Bk, respecto a la pieza seleccionada. Y
B

tercero, se realiza el corte sobre la pieza seleccionada para obtener el requerimiento; este paso es similar al
proceso de corte sobre una lámina nueva y podría generar nuevas piezas verticales, horizontales y fijas H i,
V i , F i, B i

Procedimiento Corte_Lámina_Usada (BK ,i)


1. Seleccione una pieza P = ( ) de H i ∪ V i ∪ F i, tal que P contenga B el mayor número de veces
B

K
(Pieza P que permite en teoría mayor número de Bk iguales; usamos la que genera menor desperdicio).
2. Aplique la estrategia de rotación sobre el requerimiento B en la pieza P. B

K
3. Realice el corte sobre la pieza P para atender el requerimiento B . determine las piezas Hki ∪Vki ∪Fki
B

K.
i i i i
asociadas a B , y actualice los conjuntos H ,V ,F y B .
B

El proceso de corte de la pieza seleccionada P para atender el requerimiento Bk, (paso 3) es similar cuando
B

P es una pieza horizontal o vertical. A continuación se describe el proceso de corte cuando P es una pieza
horizontal, esto es P pertenece a Hi

Procedimiento Corte_sobre_pieza_horizontal
1. Sea P = H ij : = ((p1, p2 ), ( p3 , p4 )) para algún j ∈ {1,..., k - 1}
2. H i : = H i - {H ij};
3. Si ∃ V ij = ((v1, v2 ), ( v3 , v4 )) ∈V i
entonces F ik : = ((v1, v2 ), ( p3 , p2 )), F i = F ij ∪ {F ij}, V i : = V i - {V ij};
4. Si ( p2 + a < p4 ) entonces H ik : = ((p1, p2 + a ), ( p3 , p4 )), H i = H i ∪ {H ik};
K K
5. Si ( p1 + l < p3 ) entonces V ik : = ((p1 + l , p2 ), ( p3 , p4 )), V i = V i ∪ {V ik};
K K

Identificado la pieza horizontal seleccionada (paso 1), pasamos a eliminar este del conjunto de piezas
horizontales (paso 2), en forma similar se elimina la pieza vertical asociada caso exista (paso 3). El proceso
de corte podrá generar una nueva pieza fija, horizontal o vertical, los cuales son definidos en los pasos 3, 4
y 5 respectivamente. Observe que asociado a una pieza horizontal puede existir una pieza vertical y
viceversa. Entretanto esto no ocurre con una pieza fija, siendo así el procedimiento de corte sobre una pieza
fija es como se detalla a continuación:

Procedimiento Corte_sobre_pieza_fija
1. Sea P = F ij : = ((p1, p2 ), ( p3 , p4 )) para algún j ∈ {1,..., k - 1}
2. F i : = F i - {F ij};
3. Si ( p2 + a < p4 ) entonces H ik : = ((p1, p2 + a ), ( p3 , p4 )), H i : = H i ∪ {H ik};
K K
4. Si ( p1 + l < p3 ) entonces V ik : = ((p1 + l , p2 ), ( p3 , p4 )), V i : = V i ∪ {V ik};
K K

Las coordenadas del requerimiento atendido Bk, y la actualización de Bi , es dado por:

Bk : = ((p1, p2 ), ( p1 + l , p2 + a )) ;
B B i : = B i ∪{Bk}; B

K K
3.3 Estrategia de agrupamiento

En muchos casos, se tienen muchos elementos del mismo tamaño. Si se procesan como elementos
individuales pueden crearse esquemas de corte indeseables, como se ve en la figura 3. Los dos elementos
menores son iguales, y si se tratan en forma independiente pueden dar origen a la distribución de la
izquierda, con un desperdicio poco deseable (muchos retazos delgados). Si se fuerza a que las dos
permanezcan juntas, esta distribución no es posible, pero si la de la derecha, con una pieza sobrante única.

Figura 3. Distribución menos deseable (izquierda) y más deseable (derecha).

Sea P la pieza seleccionada, y d el número de piezas requeridas con iguales dimensiones. Sean también nl y
na, los números de piezas requeridas que pueden ser colocadas a lo largo y ancho de P respectivamente; por
otro lado, nl na , es el número total del mismo requerimiento que pueden ser atendidos desde P. Se usará
agrupamiento simple, que consiste en agrupar elementos iguales que no excedan una lámina.

El proceso consiste primero, en obtener el máximo numero de piezas que pueden caber en una lámina de
largo L y ancho A, para lo que se utiliza la estrategia de rotación, de manera que podamos obtener el mejor
resultado posible de agrupamiento, y luego en base a estos datos, se aplicarán 3 casos de agrupamiento. Las
posibilidades son: que el número de requerimientos con iguales dimensiones exceda el tamaño de una
lámina (Caso 1, d >= nl na); o que el número de requerimientos con iguales dimensiones sea menor al
tamaño de una lámina (d < nl na). En este último caso puede ocurrir a su vez: que el número de
requerimientos con iguales dimensiones exceda el número máximo de requerimientos permitidos (Caso2, d
>= max{nl, na}), o que el número de requerimientos con iguales dimensiones sea menor al número máximo
de requerimientos permitidos (Caso3, d < max{nl, na}).

Procedimiento Agrupar_Elementos_iguales
Máximo número de piezas sin rotación

⎡L⎤ ⎡ A⎤
nl S = ⎢ ⎥ na S = ⎢ ⎥
⎣ lk ⎦ ⎣ ak ⎦
Máximo número de piezas con rotación

⎧⎡ L ⎤ ⎡ A ⎤ ⎡ L ⎤ ⎡ A ⎤ ⎫ ⎡ L ⎤ ⎡ A ⎤
Si Max ⎨⎢ ⎥ ⎢ ⎥, ⎢ ⎥ ⎢ ⎥ ⎬ = ⎢ ⎥ ⎢ ⎥ entonces ( lK , aK ) : = (aK, , lK );
⎩⎣ l k ⎦ ⎣ a k ⎦ ⎣ a k ⎦ ⎣ l k ⎦ ⎭ ⎣ a k ⎦ ⎣ l k ⎦
⎡L⎤ ⎡ A⎤
nl R = ⎢ ⎥ na R = ⎢ ⎥
⎣ lk ⎦ ⎣ ak ⎦
Máximo número de piezas por lámina
na nl = Max { nl S na S, nl R na R }

3.3.1. Caso 1

El número de piezas iguales excede el número total de requerimientos permitidos por lámina na nl , en este
caso agruparemos únicamente el numero total de requerimientos na nl que puedan caber en una lámina; y
el resto de piezas, se consideran como piezas individuales.
El largo del grupo formado, está definido por el largo de uno de los requerimientos iguales multiplicado por
el número de largos que caben en una lámina. El ancho del grupo, de igual forma, está definido por el
ancho de uno de los requerimientos iguales, multiplicado por el número de anchos máximo que puede
contener una lámina.
d g ≥ nl na para este caso se considera nl na requerimientos
Si d g ≥ nl na entonces l = ( l nl ), a = ( a na );
k k

3.3.2. Caso 2

El número total de piezas permitidas por lámina nl na , es mayor que el número de requerimientos iguales
d, y este a su vez, es mayor que el máximo numero de requerimientos nl , na que pueden caber en una
lámina. En este caso agruparemos únicamente el máximo número de requerimientos posibles nl , na.
El largo del grupo formado está definido por el largo de uno de los requerimientos iguales multiplicado por
el máximo largo o ancho requerido. El ancho del grupo, de igual forma, está definido por el ancho de uno
de los requerimientos iguales, multiplicado por el máximo largo o ancho requerido.
nl na ≥ d g ≥ max { nl , na } atender máximo numero de requerimientos
Si nl na ≥ d g ≥ max { nl , na }
⎡d g ⎤ ⎡d g ⎤
A1 = min { na, ⎢ ⎥} L1 = min { nl, ⎢ ⎥}
⎣ na ⎦ ⎣ A1 ⎦

A2 = min { na, [ d ]}g


L2 = min { nl, ⎢
⎡d g ⎤
⎥}
⎣ A2 ⎦
⎡d g ⎤ ⎡d g ⎤
A3 = min { na, ⎢ ⎥} L3 = min { nl, ⎢ ⎥}
⎣ nl ⎦ ⎣ A3 ⎦
req1 = A1 L1
req2 = A2 L2
req3 = A3 L3
Req = max {req1, req2, req3}
l = ( l L ), a = ( a A );
k req k req

3.3.3. Caso 3

El número de requerimientos iguales, es menor que el máximo número de requerimientos que puede
contener una lámina, en este caso agruparemos únicamente todos los requerimientos iguales.
Si el número de largos es mayor que el número de anchos, el largo del grupo formado está definido por el
largo de uno de los requerimientos iguales multiplicado por el número de requerimientos iguales, y el
ancho del grupo será igual al ancho de uno de los requerimientos iguales.
En caso contrario, el ancho del grupo formado; está definido por el ancho de uno de los requerimientos
iguales multiplicado por el número de requerimientos iguales, y el largo del grupo será igual al largo de uno
de los requerimientos iguales.
d g < max { nl , na } atender d g requerimientos
Si d < max { nl , na } entonces
Si nl > na entonces l = ( l d g ), a = a
k k
Sino l= l , a=(a dg );
k k

3.4 Algoritmo GRASP

Se considera E como el conjunto de requerimientos (piezas) por atender, por lo que al inicio este
contendrá todos los elementos: E := {1, 2, ..., n}. El algoritmo GRASP construye una solución usando un
criterio de selección golosa – aleatoria. Primero se construye un conjunto de elementos candidatos a ser
parte de la solución llamado RCL. Luego se selecciona el elemento desde RCL en forma aleatoria. RCL
contiene los requerimientos que presentan área próxima a la mayor área de los requerimientos por atender.
Alfa es el parámetro de relajación, importante en la formación de la RCL. En líneas generales, el GRASP
construcción inicializa las variables y el conjunto E, luego realiza el agrupamiento asignado el grupo
formado a un tablero, y va construyendo una solución tentativa una pieza a la vez hasta que E quede vacío.
Luego deshace el grupo para que las piezas vuelvan a ser individuales antes de la fase de GRASP Mejoría.

3.4.1. GRASP Construcción

1. Leer (n,l ,a ,...,l ,a ,L,A, )


1 1 n n
2. E := {1, 2, ..., n}; G := ∅
3. H1 := V1 := ∅ F1 := {((0,0) , (L,A))}; m := 0;
4. Agrupar_elementos_iguales
5. Mientras E :≠ ∅
5.1 S := Max{ l a : h ∈E };
h h
5.2 S := Min{ l a : h ∈E };
h h
5.3 RCL := { h ∈E : S – α ( S – S ) ≤ l a ≤ S };
h h
5.4 k := RANDOM ( RCL );
5.5 B := ( l a );
B

k k k
5.6 i = Min{ j ∈{1, 2, ..., m + 1}: H j ∪V j ∪F j ⊇ B }; B

k
5.7 Sí i=m+1
Entonces Corte_Lámina_Nueva (B , m + 1), m:=m+1, F m+ 1 := {((0,0) , (L,A))}
B

k
Si no Corte_Lámina_Usada (B , i); B

k
5.8 E := E - { k };
6. Desagrupar_elementos_iguales
7. Escribir (m, B i V i )

3.4.2. GRASP Mejoria

En este procedimiento, se parte del resultado Grasp_construccion, donde el nuevo conjunto E, contendrá
los elementos ya ubicados en las láminas correspondientes. Se ordenan las láminas en forma ascendente (de
mayor área usada a menor), y las piezas de mayor a menor área. Este procedimiento consta de dos fases:

FASE 1 Reubicación de piezas en tableros superiores: El procedimiento de mejoría se ejecuta lámina por
lámina, partiendo de la segunda lámina y se trata de ubicar una o más piezas de la lámina seleccionada, en
el menor de alguno de los conjuntos H,V,F (sobrante horizontal, vertical, fijo) disponibles de la(s)
lámina(s) anterior(es). Si logramos que alguna de las piezas encuentre una ubicación en un conjunto H,V,F,
anterior, se procede a ejecutar el procedimiento Corte_Lamina_usada_Mejoria, (basado en el corte lamina
usada tradicional), que ubicará la pieza movida, y generará nuevas piezas H,V,F. Este procedimiento
concluye cuando no es posible mover ninguna pieza hacia una lámina anterior o se completa la revisión de
las piezas de la lámina.
FASE 2 Reubicación de piezas en tablero mejorado: Las piezas reubicadas en láminas anteriores, dejan
espacios vacíos que pueden ser mejor aprovechados si se reubican y juntan formando nuevos conjuntos
HVF. Para lograr esto, se utiliza el conjunto de las piezas del tablero mejorado y se hace un nuevo proceso
de corte en un tablero nuevo, ubicando las piezas y con nuevos conjuntos HVF, utilizando los procesos de
rotación y agrupamiento, una vez efectuado el corte, se reemplaza el tablero del conjunto solución por el
nuevo tablero generado.

Procedimiento Reubicar: Este procedimiento, permite obtener una mejoría real y significativa y consiste en
que, al haber movido una pieza del tablero hacia una posición anterior, no basta con activar ese espacio,
sino que se logra una mejor optimización, si reubicamos todas las piezas del tablero liberado, utilizando el
procedimiento Corte_lamina_usada_Reubicar que a su vez creará nuevas piezas H,V,F, con mejores
dimensiones, para tratar de reubicar las piezas de los siguientes tableros.
Pseudo código del GRASP Mejoría
1. Leer (m, B i,H i, V i, F i, V i)
2. E := {1, 2, ..., n};
3. Ordenar { B1 < B2 <.... <Bm};
B

4. Fin=0;
5. Para todo j = 2, m
5.1 Proceso Mejoría;
5.2 Si mejoría = 1 Entonces Proceso Reubicar;
6. Fin proceso

Mejoría
1. Leer (m k, B i,H i, V i, F i, V i)
2. E1 := {1, 2, ..., n};
3. Fin=0;
4. Mientras E1 :≠ ∅
4.1 B := ( l a );
B

k k k
4.2 i = Min{ j ∈{1, 2, ..., m-1 }: H j ∪V j ∪F j ⊇ B };
B

k
4.3 Sí i < m Entonces Corte_Lámina_Usada_Mejoria (B , i) B

k
Si no Fin=1;
4.4 E1 := E1 - { k };
5. Escribir (m, B i V i )

Reubicar
1. Leer (m k, B i,H i, V i, F i, V i)
2. E2 := {1, 2, ..., n};
3. Agrupar_elementos_iguales_reubicar
4. Mientras E2 :≠ ∅
4.1 S := Max{ l a : h ∈E2 }; h h
4.2 S := Min{ l a : h ∈E2 };
h h
4.3 RCL := { h ∈E2 : S – α ( S – S ) ≤ l a ≤ S };
h h
4.4 k := RANDOM ( RCL );
4.5 B := ( l a );
B

k k k
4.6 i = Min{ j ∈{1, 2, ..., m + 1}: H j ∪V j ∪F j ⊇ B };B

k
4.7 Sí i = m Entonces Corte_Lámina_Usada_reubicar (B , i);
B

k
5. E2 := E2 - { k };
6. Desagrupar_elementos_iguales_reubicar
7. Escribir (m, B i V i )

4 Resultados computacionales
En esta sección se muestran algunas pruebas computacionales comparativas con algunos resultados de otros
autores, así como las propias pruebas con números grandes de tableros.

4.1.1. Problema propuesto en 1990, por Olivera J.F., citado en el 2002, por Mauricio y Rivera [9]

Se tienen tableros de tamaño 74 x 40. Los requerimientos (piezas) son: una de 55x9, tres de 23x21, una de
31x15, cuatro de 29x14, seis de 9x36, tres de 19x16, dos de 11x16, una de 29x5 y dos de 22x4. Olivera
obtuvo una solución con 4 tableros, como se muestra en la figura 4. Nuestro algoritmo, con un alfa de
0.40, obtuvo una solución con 3 tableros, como se muestra en la figura 5.

4.1.2. Problema propuesto por Parreño en 2003 [11]

Se tienen tableros de 20x30. Hay cinco requerimientos (piezas): 20x10, 10x5, 10x10, 11x6 y 10x12.
Parreño aplica algoritmos constructivos y obtiene soluciones de 2 tableros. Nuestro algoritmo obtiene una
solución de un tablero con un alfa de 0.80, como se ve en la figura 6.
Figura 4. Solución por el algoritmo FFD del problema de Olivera [9]

Figura 5. Resultados con el algoritmo propuesto en este artículo para el problema de Olivera

Figura 6. Resultados para el problema de Parreño. Izq. y centro: Parreño, derecha: algoritmo propuesto

4.1.3. Pruebas propias

Se realizaron pruebas con 4500 piezas, con tableros de dimensiones 80x40 y requerimientos de 9 conjuntos
de 500 piezas, cada conjunto con los siguientes tamaños: 50x30, 30x20, 20x10, 20x20, 40x10, 50x12,
36x18, 44x22 y 38x14. Los mejores resultados se obtuvieron con un alfa de 0.40, obteniendo 1099 tableros
(desperdicio del 16.86% del área total de los tableros) y con tiempo de ejecución de 205 segundos en una
Pentium 4 de 1.8 MHz con 512 Mb RAM. Cabe resaltar que hasta el momento no hemos hallado ningún
problema de esta magnitud abordado en la literatura científica; el más cercano es un problema de Hopper y
Turton mencionado en [15] de 3152 piezas.

En las tres pruebas se experimentó con varios valores de alfa y los resultados son comparados en función
de tableros utilizados y espacio sobrante. En los casos con número mediano o grande de piezas el mejor
alfa es 0.4, y en el caso de pocas piezas el mejor alfa es 0.8. El alfa debe seleccionarse cercano a 0.4 para
problemas medianos o grandes por que se debe limitar las combinaciones a explorar con el GRASP,
mientras que en problemas chicos una mayor exploración (o sea alfa mayor) es viable.

5 Conclusiones

El presente algoritmo aporta dos innovaciones: la heurística previa a la construcción que crea agrupaciones
de piezas (meta-rectángulos) con el propósito de obtener una mejor solución inicial en la etapa del GRASP
construcción, y una mejoría iterativa que trata de mover piezas de los tableros menos llenos hacia los más
llenos con la esperanza de dejar vació al tablero menos lleno (bajando el número de tableros usados), y
reacomoda las piezas de esos tableros conforme se van vaciando para mejorar la calidad de los espacios
sobrantes.

El algoritmo se compara favorablemente contra trabajos previos y puede manejar fácilmente miles de
piezas requeridas en minutos, pudiendo solucionar el tipo de problemas más demandantes en la industria
real en minutos. La razón de esta mejora al parecer es principalmente la agrupación de piezas en meta-
rectángulos, pues esto disminuye el número de piezas desde el inicio (reduce el tamaño del problema), y en
segundo lugar por que a diferencia de las heurísticas LB o LBF no privilegia una dirección (horizontal vs.
vertical) para tratar de acomodar piezas adicionales, por lo que se examinan más posibilidades. En el futuro
se piensa agregar un algoritmo complementario que indique el orden de los cortes tipo guillotina.

Referencias

[1] Brown, D.J., An improved BL bound, Information Processing Letters, 11, 1, 37-39 262 (1980)
[2] Christofides, N. and Whitlock, C., An Algorithm for Two-Dimensional Cutting Problems, Operations
Research, 25, 1, 3 0-45 (1977)
[3] Faggioli, E., Bentivoglio, C.A., Heuristic and exact methods for the cutting sequencing probl em,
European Journal of Operations Research, 110, 564-575 (1998)
[4] Gilmore, P. and Gomory, R. Multistage cutting stock problems of two and more dimensions. European
Journal of Operation research v.14, 94-120, (1965)
[5] Karelahti, J., Solving the cutting stock problem in the steel industry, Helsinki University of
Technology, Master’s thesis (2002) en http://www.sal.hut.fi/Publications/pdf-files/tkar02.pdf
[6] Kroger, B., Guillotineable bin packing: A genetic approach, European Journal of Operations Research,
84, 645-66 1 (1995)
[7] Mauricio, D., Rivera, L. Una Versión Eficiente del Algoritmo FFD para resolver el Problema de
Cortes. Actas del I Congreso Internacional de Científicos Peruanos, p.40. Lima (2003).
[8] Mauricio, D., Algoritmos GRASP para el problema de Cortes de Guillotina. Relatorio Técnico UPG-
FISI 2003-02 UNMSM (2003) Lima – Perú
[9] Mauricio, D., Rivera, L., Vicente, E., Zamudio, J. FFD and BFD Algorithms to Solve the Guillotinable
Cutting Stock Problem. Actas del I Congreso Internacional de Científicos Peruanos, p.80. Lima (2003)
[10] Onwubolu, G.C. and Mutingi, M. A genetic algorithm approach for the cutting stock problem. Journal
of Intelligent Manufacturing, 14, 209-218 (2003)
[11] Parreño, Francisco. Algoritmos Heurísticos y exactos para problemas de corte no guillotina en dos
dimensiones. Tesis de doctorado. Universitat de Valencia (2003), en http://www.tesisenxarxa.net
/TESIS_UV/AVAILABLE/TDX-0519105-104838//parre%F1o.pdf
[12] Ramesh Babu, A., Ramesh Babu, N. Effective nesting of rectangular parts in multiple rectangular
sheets using genetic and heuristic algorithms. International Journal of Production Researc h, 37, 7,
1625-1643 (1999)
[13] Resende, M., Gonzales, J. GRASP: Procedimientos de búsqueda miopes aleatorizados y adaptativos .
AT&T Labs – Tecnológico de Monterrey. México (2003), en http://www.research.att.com
/~mgcr/doc/sgrasp-spain.pdf
[14] Teodoro, Alan. O problema do corte Bidimensional uma abordagem utilizando o método de geração de
colunas. Tesis de maestría. Instituto de Computação, Universidade Estadual de Campinas. Brasil
(2003), en http://libdigi.unicamp.br/document/?code=vtls000316146
[15] Whitwell, Glenn Bsc, Novel Heuristic and Metaheuristic Approaches to Cutting and Packing,
University of Nottingham, school of Computer Science and Information Technology, Phd Thesis,
London (2004), en http://www.cs.nott.ac.uk/~gxk/papers/gxwPhDthesis.pdf

View publication stats

S-ar putea să vă placă și