Abordagens para o Problema do Carregamento de Contêineres
Reinaldo Morabito
Universidade Federal de São Carlos Departamento de Engenharia de Produção
13565-905 - São Carlos, São Paulo e-mail: morabito@power.ufscar.br
Marcos N. Arenales Universidade de São Paulo
Departamento de Ciências de Computação e Estatística Instituto de Ciências Matemáticas de São Carlos
13560-970 - São Carlos, São Paulo e-mail: arenales@icmsc.sc.usp.br
Resumo
O problema do carregamento de contêineres consiste em arranjar itens (caixas) de diferentes tamanhos dentro de objetos maiores (contêineres), de maneira a otimizar uma função objetivo, p.e., maximizar o volume carregado. Neste artigo estamos interessados no caso especial de arranjar o máximo volume de uma carga, composta de caixas de baixa densidade, dentro de um único contêiner, safistazendo restrições de estabilidade do carregamento. Revemos algumas abordagens conhecidas da literatura, tais como os procedimentos em duas etapas de carregar as caixas em camadas horizontais e em pilhas verticais, a aplicação de técnicas de programação dinâmica e, em particular, métodos de busca baseados na representação do espaço de soluções num grafo-e/ou. Algumas destas abordagens foram implementadas em micromputador para resolver um exemplo real com 784 caixas, e um exemplo pequeno mas difícil, com apenas 17 caixas, cuja solução ótima é do tipo não-guilhotinado.
Palavras-chave: carregamento de contêineres, problemas de corte e empacotamento, busca em grafo-e/ou, padrões de corte tridimensionais.
Abstract
The container loading problem consists of arranging items (boxes) of different sizes
inside large objects (containers), in such a way as optimizing an objective function, e.g.,
maximizing the volume loaded. In this paper we are interested in the special case of
arranging the maximum volume of a cargo, composed of low density boxes, in a single
container, satisfying stability constraints for the cargo loading. We review approaches
known in the literature, such as the two-phase procedures of loading boxes in either
horizontal layers or vertical stacks, the application of dynamic programming techniques and, in particular, search methods based on an and/or-graph representation of the solution space. Some of them were implemented in a microcomputer to solve a large real-life example of 784 boxes, and a hard small example of only 17 boxes, whose optimal solution is known to be of nonguillotine type.
Keywords: container loading, cutting and packing problems, and/or-graph search, three-dimensional cutting patterns
1. Introdução
O problema do carregamento de contêineres (container loading problem) consiste em carregar caixas de diversos tamanhos dentro de contêineres, de maneira a otimizar um certo objetivo, por exemplo, maximizar o aproveitamento do espaço disponível. Além das restrições geométricas envolvidas (o carregamento deve caber dentro do contêiner, duas caixas não podem ocupar o mesmo espaço), outras restrições devem ser eventualmente consideradas, como a estabilidade do carregamento.
Ao estudar o problema, Bischoff e Marriott (1990) distinguiram casos em que uma grande carga deve ser transportada, combinando-se vários contêineres em função do custo-benefício, e casos em que o máximo possível de uma carga deve ser carregada dentro de um único contêiner. Os autores ainda distinguiram casos em que o peso da carga e sua distribuição dentro do contêiner governam as opções de carregamento e casos em que o objetivo é maximizar a utilização do contêiner em termos do volume e do valor da carga carregada. Aspectos de fragilidade e manuseio da carga também podem vir a ser considerados. Em particular, Gehring et al (1990) abordaram um caso com restrições de balanceamento e localização das caixas dentro do contêiner.
Restrições de peso podem ser até certo ponto compensadas pela possibilidade de escolha das dimensões dos contêineres (contêineres menores são escolhidos para cargas mais densas). Uma escolha adequada do tamanho do contêiner em função da densidade da carga permite que sua capacidade volumétrica seja melhor utilizada. Haessler e Talbot (1990) abordaram o problema do carregamento de vagões ferroviários considerando apenas caixas de baixa densidade. Em muitos casos, a capacidade volumétrica limita a quantidade de caixas a ser carregada, antes que as restrições de peso sejam encontradas (George e Robinson, 1980). No presente artigo admitimos que a carga tem baixa densidade.
A figura 1a ilustra dois contêineres e três caixas de tamanhos diferentes. Suponha,
por exemplo, que dispomos de apenas um contêiner de cada tamanho e de duas caixas do
tamanho 1, duas caixas do tamanho 2 e uma caixa do tamanho 3, e que os dois
contêineres juntos sejam suficientes para arranjar todas estas cinco caixas. Considere o seguinte problema de otimização combinatória:
Como carregar todas as caixas dentro dos contêineres,
tal que o volume total dos contêineres utilizados seja mínimo? (1) Um subconjunto de contêineres deve ser escolhido para carregar todas as caixas.
A figura 1b ilustra uma solução para este simples exemplo, com todas as cinco caixas arranjadas dentro do contêiner menor. Note que se os contêineres forem idênticos, então o problema (1) consiste em minimizar o número de contêineres utilizados.
Suponha agora que dispomos de cinco caixas do tamanho 1, três caixas do tamanho 2 e dez caixas do tamanho 3, e assim, os dois contêineres juntos não são mais suficientes para arranjar todas estas 18 caixas. Considere este segundo problema de otimização combinatória:
Como carregar o máximo volume de caixas dentro dos contêineres disponíveis? (2) Um subconjunto de caixas deve ser escolhido e arranjado dentro dos contêineres disponíveis. A figura 1c ilustra uma possível solução, com parte das 18 caixas carregadas nos dois contêineres. Um caso importante do problema (2) é quando temos um único contêiner disponível.
Os problemas (1) e (2) podem ser vistos como problemas de corte e empacotamento (PCE) tridimensionais (Dyckhoff, 1990). Há décadas muitos autores têm apresentado diferentes abordagens para resolver os PCE; entretanto, poucos autores se preocuparam com os casos tridimensionais. Para uma lista de referências, veja os exames de Dyckhoff e Finke (1992), Dowsland e Dowsland (1992), Sweeney e Paternoster (1992) e Morábito e Arenales (1992); veja também a edição especial recente dos PCE em EJOR (1995). Para uma discussão da relação entre problemas de carregamento de contêineres e de carregamento de paletes do distribuidor, veja p.e. Bischoff e Ratcliff (1995) e as referências lá citadas.
Neste artigo estamos particularmente interessados no problema (2) com um único
contêiner disponível. Admitimos que a carga tenha baixa densidade e consideramos
restrições espaciais (restrições geométricas das caixas dentro do contêiner) e de
estabilidade do carregamento (veja figura 8). Restrições de estabilidade do carregamento
são difíceis de serem modeladas (os autores não têm conhecimento de qualquer tentativa
na literatura)---na prática, elas são verificadas movimentando-se o carregamento
produzido. Apesar de uma definição formal de estabilidade do carregamento estar além
do escopo deste trabalho, nas abordagens a serem apresentadas discutiremos brevemente
como certas regras podem produzir carregamentos com maior chance de estabilidade,
pois permitem um rearranjo de peças sobrepostas de modo que soluções alternativas
podem ser submetidas à prática de movimentação do carregamento.
Na seção 2 modelamos (2) como um subproblema de (1) (conforme Gilmore e Gomory, 1965), distinguindo os casos irrestrito e restrito (veja problemas (3)-(4) e (5)- (7) na seção 2). Também apresentamos um programa linear 0-1 para estes casos, que é uma extensão do modelo de Beasley (1985b) originalmente proposto para um PCE bidimensional.
Para resolver o problema irrestrito, três métodos aproximados são apresentados nas seções 3, 4 e 5, respectivamente. Os dois primeiros são generalizações do método em duas etapas de Gilmore e Gomory (1965): o primeiro arranja as caixas em camadas e o segundo, em pilhas. Ambos os métodos em geral produzem carregamentos estáveis. O terceiro é uma generalização das fórmulas recursivas de programação dinâmica de Beasley (1985a), e não tem garantia de estabilidade do carregamento.
Para resolver tanto o problema irrestrito quanto o restrito, apresentamos na seção 6 a abordagem em grafo-E/OU (Morábito e Arenales, 1994), que é um método aproximado que realiza uma busca num grafo-E/OU para tentar encontrar um bom carregamento estável. No final do artigo (seção 7) apresentamos alguns resultados computacionais de um exemplo real e de um exemplo construído, comparando as soluções produzidas pelos métodos (exceto programação dinâmica).
2. Modelagem do problema
Considere um conjunto de caixas agrupadas em m tipos. Para cada tipo i, caracterizado pelo comprimento, largura e altura (l
i, w
i, h
i), temos uma quantidade b
ide caixas. Considere também um conjunto de contêineres agrupados em n tipos. Para cada tipo k, caracterizado pelas dimensões (L
k, W
k, H
k), estão disponíveis B
kcontêineres. As caixas devem ser carregadas ortogonalmente dentro dos contêineres. Por simplicidade e sem perda de generalidade, admita que as caixas sejam carregadas com uma orientação fixada, isto é, com l
i, w
ie h
iparalelos a L
k, W
ke H
k, respectivamente.
Gilmore e Gomory (1963, 1965) apresentaram um método para resolver o problema (1) baseado no método simplex (dado que ele pode ser modelado como um programa linear) e num subproblema que deve ser resolvido em cada iteração do simplex para produzir um padrão de carregamento. Este subproblema é dado por:
max v a
i ii 1 m
∑
=(3) s.a.: (a
1, a
2, ..., a
m) corresponde a um padrão de carregamento tridimensional (4) onde a
ié uma variável inteira representando o número de caixas do tipo i no padrão, e v
ié o multiplicador simplex (ou uma função dele) associado com uma base particular. Seja
z denotando o maior inteiro menor ou igual a z. Este método funciona bem quando b
ié
consideravelmente maior do que o produto L / l W / w
k i
k i H / h
k i , que corresponde ao número máximo de caixas do tipo i no contêiner (L
k, W
k, H
k).
Considere agora apenas um contêiner de tamanho (L, W, H). Note que se v
iem (3) for o volume da caixa do tipo i, então o problema (3)-(4) é o caso particular do problema (2) com um único contêiner disponível. Se a quantidade b
inão for suficientemente grande (i.e. b
i< L / l
k i W / w
i H / h
i ), então a variável a
ideve ser limitada superiormente por b
i. Neste caso o problema (3)-(4) é chamado restrito, dado por:
max v ai i
i 1 m
∑
=(5)
s.a.: (a
1, a
2, ..., a
m) corresponde a um padrão de carregamento tridimensional (6) com: a
i≤ b
i, i= 1, ..., m (7) A restrição adicional (7) impõe consideráveis dificuldades para resolver o problema acima, em relação ao problema (3)-(4), conforme será visto.
Tanto o problema (3)-(4) quanto o problema (5)-(7) podem ser escritos como um programa 0-1, estendendo-se para o caso tridimensional o programa 0-1 proposto originalmente em Beasley (1985b) para o caso bidimensional. Cada variável 0-1 do programa representa a decisão de colocar ou não uma caixa do tipo i na coordenada (x,y,z) dentro do contêiner. Sem perda de generalidade, pode ser mostrado que x, y e z pertencem respectivamente aos conjuntos de discretização (veja seção 6.3.1):
X= x| x
i il , x L l ,
0 i0, inteiro
i 1 m
= ≤ − ≥
∑
=α α
(8)
Y= y| y
iw , y W w ,
i 0 i0, inteiro
i 1 m
= ≤ − ≥
∑
=β β
(9)
Z= z|z
i ih , z H h ,
0 i0, inteiro
i 1 m
= ≤ − ≥
∑
=γ γ
(10)
onde l
0= min{l
i, i = 1, ..., m} (similarmente para w
0e h
0).
No texto que segue denotamos por |A| o número de elementos do conjunto A.
Sejam x
jo j-ésimo elemento do conjunto X, y
ko k-ésimo elemento do conjunto Y, e z
lo
l-ésimo elemento do conjunto Z (note que x
j, y
ke z
lnão são incógnitas, isto é, são
determinados a priori). Se decidirmos colocar uma caixa do tipo i, com o canto conforme
a figura 2 na posição (x
j, y
k, z
l), então não podemos colocar outra caixa em qualquer
posição (x
p, y
q, z
r) satisfazendo x
j≤ x
p≤ x
j+ l
i- 1, y
k≤ y
q≤ y
k+ w
i- 1 e z
l≤ z
r≤ z
l+ h
i- 1, com p = 1, ... , |X|, q = 1, ..., |Y| e r = 1, ..., |Z| (verifique na figura 2).
Para evitar a sobreposição de caixas, definimos a matriz de incidência g
ijklpqrcomo:
g
x x x l 1, y y y w 1 e z z z h 1
ijklpqr
j p j i k q k i , l r l i
= ≤ ≤ + − ≤ ≤ + − ≤ ≤ + −
1 0
se
caso contrario
, .
que deve ser computada a priori para cada caixa do tipo i (i = 1, ..., m), para cada posição (x
j, y
k, z
l) (j = 1, ..., |X|, k = 1, ..., |Y| e l = 1, ..., |Z|), e para cada posição (x
p, y
q, z
r) (p = 1, ..., |X|, q= 1, ..., |Y| e r= 1, ..., |Z|).
Sejam J(i) = arg max
j=1, ..., |X|{x
j| x
j≤ L - l
i}, K(i) = arg max
k=1,...,| Y|{ y
k| y
k≤ W - w
i} e L(i) = arg max
l=1,...,|Z|{z
l| z
l≤ H - h
i}, e as variáveis de decisão a
ijkldefinidas como:
a
x , y , z
ijkl
j k l
=
1 0
se uma caixa do tipo e colocada na caso contrario
i ' posicao ( )
.
Note que, necessariamente, a
ijkl= 0 para todo j>J(i), ou k>K(i), ou l>L(i).. O problema pode ser formulado como:
max v a
i ijkll 1 L(i)
k 1 K(i)
j 1 J(i)
i 1 m
=
=
=
=
∑ ∑ ∑
∑ (11)
s a . .: g
ijklpqra
ijkl1, p 1, ..., | | , q 1, ..., | | , r 1, ..., | |
l 1 L(i)
k 1 K(i)
j 1 J(i)
i 1 m
=
=
=
=
∑ ∑ ∑
∑ ≤ = X = Y = Z (12)
a
ijklb , i
i1, ..., m
l 1 L(i)
k 1 K(i)
j 1 J(i)
≤ =
=
=
=
∑ ∑
∑ (13)
com: a
ijkl∈ {0, 1}, i=1, ..., m, j=1, ..., J(i), k=1, ..., K(i), l=1, ..., L(i) (14) O modelo (11)-(14) contém O(m|X| |Y| |Z|) variáveis e O(|X| |Y| |Z|) restrições. Se uma orientação não for fixada para carregar as caixas dentro do contêiner, o modelo acima pode ser estendido porém com um número ainda maior de variáveis e restrições.
Nos casos práticos estes números chegam facilmente a ordem de milhões, o que
desestimula o emprego das técnicas usuais de programação linear inteira. Além disso, a
solução do modelo (11)-(14) não tem garantia de produzir um carregamento estável.
Outro modelo 0-1 para os problemas (3)-(4) e (5)-(7) pode ser encontrado em Tsai et al (1993), porém, com número de variáveis e restrições que cresce exponencialmente com o número de caixas a serem carregadas e também sem garantia de produzir um carregamento estável. Estas dificuldades em parte justificam a coleção de métodos heurísticos encontrados na literatura, como por exemplo em George e Robinson (1980), Han et al (1989), Correia et al (1992), Mohanty et al (1994), Morabito e Arenales (1994) e Bischoff et al (1995). Algoritmos de aproximação com limite de desempenho assintótico também são encontrados; veja p.e. Miyazawa (1997) e as referências nele citadas.
Os métodos das próximas três seções tratam apenas o problema (3)-(4), enquanto que o método da seção 6 trata ambos os problemas (3)-(4) e (5)-(7). Todos os métodos são heurísticos.
3. Carregamento em camadas
A seguir apresentamos um procedimento em duas etapas para se obter padrões de carregamento tridimensional em geral estáveis. Na primeira etapa, camadas horizontais são formadas arranjando-se caixas de mesma altura (i.e. no máximo m problemas bidimensionais são resolvidos) e na segunda etapa, estas camadas são escolhidas para serem empilhadas ao longo da altura do contêiner (i.e. um problema da mochila unidimensional é resolvido).
3.1. Etapa 1
Na primeira etapa, caixas com altura h
jsão escolhidas e arranjadas para formar camadas de dimensões (L, W, h
j) (veja figura 3a). Seja λ
ijo número de caixas do tipo i na camada j (i.e. uma camada com dimensões (L, W, h
j)) e:
H
j= { i | h
i= h
j, i = 1, ... , m }
Se h
k= h
j, k ≠ j, então a camada k pode ser desconsiderada. Seja V
jdefinido como:
V
jv
i iji Hj
=
∑
∈max λ (15)
s.a.: ( λ λ
1j, 2j,..., λ
mj) corresponde a um padrão de carregamento bidimensional, onde
retângulos (l
i, w
i), i ∈ H
jsão escolhidos e arranjados em (L, W) (16)
3.2. Etapa 2
Na segunda etapa, camadas j com valor V
jsão escolhidas e empilhadas ao longo da altura H do contêiner (figura 3b). Seja µ
jo número de vezes que a camada j é utilizada. O seguinte problema da mochila deve ser resolvido:
max V
j jj 1
m
µ
∑
=(17)
s a . .: h
j jH
j 1
m
µ ≤
∑
=(18)
com: µ
j≥ 0 e int eiro , j = 1, ..., m (19) O valor da variável a
iem (3)-(4) é finalmente obtido por:
a
i ij j, i 1, ..., m
j 1 m
= =
∑
=λ µ
Este procedimento generaliza o método de Gilmore e Gomory (1965) proposto para problemas bidimensionais com padrões de corte em 2-estágios. Cada problema bidimensional (15)-(16) da primeira etapa ainda pode ser resolvido heuristicamente por meio da solução de um conjunto de problemas da mochila (Gilmore e Gomory, 1965), e assim, as duas etapas envolvem apenas problemas unidimensionais. Na seção a seguir apresentamos uma outra maneira de generalizar o método de Gilmore e Gomory.
4. Carregamento em pilhas
Outro procedimento em duas etapas, similar ao procedimento da seção 3, pode ser definido para resolver (3)-(4). Na primeira etapa, pilhas com altura máxima H do contêiner são formadas empilhando-se caixas, uma sobre a outra (i.e. vários problemas da mochila unidimensionais são resolvidos) e na segunda etapa, estas pilhas são escolhidas para serem arranjadas sobre a base (L,W) do contêiner (i.e. um problema de carregamento bidimensional é resolvido). Os padrões de carregamento obtidos em geral são estáveis.
4.1. Etapa 1
Admita sem perda de generalidade que l
1≤ l
2≤ ... ≤ l
m. Na primeira etapa, pilhas de dimensões (l
j, w
k,, H) são formadas com caixas (l
i, w
i, h
i), i ∈ LW
jk, empilhadas uma sobre a outra, onde:
LW
jk= { i | l
i≤ l
je w
i≤ w
k, i = 1, ..., m }, j = 1, ..., m, k = 1, ..., j (20)
Note em (20) que não precisamos considerar LW
jk, k>j, uma vez que: (a) as caixas do tipo i, i>j, não cabem na pilha (l
j, w
k,, H) quando l
i> l
j, e (b) tal pilha não deixa de ser considerada em (20) quando l
i= l
j.
No caso de resultarem pilhas com mesmas dimensões, apenas uma pilha é considerada. Por exemplo, se w
k= w
j, k < j, então a pilha (l
j, w
k, H) pode ser desconsiderada, uma vez que ela é igual à pilha (l
j, w
j, H). Se o número de pilhas ainda for muito grande, podemos reduzí-lo, sob pena de perder soluções melhores, ao considerar apenas as m pilhas (l
j, w
j, H), j = 1, ..., m (conforme figura 4a).
Seja λ
ijko número de caixas do tipo i na pilha jk (i.e. uma pilha com dimensões (l
j, w
k, H)). Definimos V
jkcomo:
V
jkv
i ijki LWjk
=
∈
∑
max λ (21)
s a . .: h
i ijkH
i LWjk
λ
∈
∑ ≤ (22)
com : λ
ijk≥ 0 e int eiro , i = 1, ..., m (23) 4.2. Etapa 2
Na segunda etapa, pilhas jk com valor V
jksão escolhidas e arranjadas sobre a base (L,W) do contêiner (figura 4b). Seja µ
jkdenotando o número de vezes que a pilha jk é utilizada neste arranjo. O seguinte problema bidimensional deve ser resolvido:
max V
jk jkk 1 j
j 1 m
µ
=
=
∑
∑ (24)
s.a.: ( µ
jk, j=1, ..., m, k=1, ..., j) corresponde a um padrão de carregamento bidimensional, onde os retângulos (l
j, w
k), j=1, ..., m,
k=1, ..., j são escolhidos e arranjados em (L, W) (25)
O valor da variável a
iem (3)-(4) é finalmente obtido por:
a
i ijk jk, i 1, ..., m
k 1 j
j 1
=
m=
=
=
∑
∑ λ µ
Note que tanto o carregamento em camadas (15)-(19) quanto o carregamento em
pilhas (21)-(25) são métodos heurísticos para o problema irrestrito (3)-(4), e que ambos
envolvem resolver problemas unidimensionais e bidimensionais. Se os problemas
bidimensionais forem aproximados por um conjunto de problemas unidimensionais (Gilmore e Gomory, 1965), então os dois métodos envolvem resolver apenas problemas da mochila.
Convém salientar que, para estender o carregamento em pilhas para resolver o problema restrito (5)-(7), precisamos incorporar no modelo (21)-(25) as restrições não- lineares:
λ µ
ijk jk i k 1j
j 1 m
b , i 1, ..., m
≤ =
=
=
∑
∑ (26)
e isto dificulta significativamente a aplicação do procedimento em duas etapas (similarmente para o carregamento em camadas (15)-(19)).
5. Programação dinâmica
Beasley (1985a) propôs uma fórmula recursiva de programação dinâmica para o problema bidimensional com cortes guilhotinados (um corte é guilhotinado se, ao ser realizado sobre um retângulo, produz dois retângulos). Esta fórmula pode ser estendida para resolver o problema (3)-(4) ao impormos artificialmente a restrição de cortes guilhotinados (ao ser produzido sobre o paralelepípedo, o corte guilhotinado produz dois paralelepípedos). A solução obtida não tem garantia de estabilidade (veja p.e. as figuras 8a e 8b). Note também que, mesmo que a solução seja estável, ela não tem garantia de otimalidade, uma vez que o carregamento ótimo para o problema (3)-(4) pode ser não guilhotinado.
Seja F(x,y,z) o valor do melhor carregamento tridimensional (guilhotinado) para um paralelepípedo de dimensões (x,y,z), dado por (para maiores detalhes veja Beasley, 1985a):
F(x,y,z) = max{H(x,y,z); (27)
F(x
1,y,z) + F( x − x
1
x, y, z), x
1∈ X, 0 < x
1≤ x-1; (28) F(x,y
1,z) + F(x, y − y
1
y, z), y
1∈ Y, 0 < y
1≤ y-1; (29) F(x,y,z
1) + F(x,y, z − z
1
z, y, z), z
1∈ Z, 0 < z
1≤ z-1} (30) x ∈ X ∪ {L}, y ∈ Y ∪ {W}, z ∈ Z ∪ {H} (31) onde
H(x, y,z) max v x l y
w z h
i 1,...,m i
i i i
=
=
(32)
x
xmax{x | x =
1 1≤ x, x
1∈ X } (33)
y
ymax{y | y =
1 1≤ y, y
1∈ Y } (34) z max{z | z
z=
1 1≤ z, z
1∈ Z } (35) e X, Y e Z são definidos conforme (8)-(10) na seção 2.
Note que F(L,W,H) requer memória computacional de O(|X| |Y| |Z|), o que nos casos práticos dificulta sua computação. Uma maneira de reduzir o esforço da computação de F(L,W,H) sob pena de perder a otimalidade é utilizar a heurística H4 descrita na seção 6.4.3, que reduz os conjuntos X, Y e Z. Esta abordagem, no entanto, possui uma deficiência em relação à abordagem da próxima seção, conforme mostrado em Morábito e Arenales (1995).
A fórmula recursiva (27)-(31) pode ser estendida para tratar o problema restrito (5)-(7) definindo-se F(x,y,z,c) de maneira similar à F(x,y,z), onde c denota qualquer elemento do conjunto C = {(c
1, c
2, ..., c
m) | 0 ≤ c
i≤ b
ie inteiro, i = 1, ..., m} que permita produzir um padrão factível para o paralelepípedo (x,y,z) (veja Christofides e Hadjiconstantinou, 1995). Entretanto, devido ao número exponencial de elementos deste conjunto, o cálculo de F(L,W,H, C) torna-se inviável computacionalmente. A heurística H3 (seção 6.4.3) reduz a busca a um pequeno subconjunto de C.
6. Abordagem em grafo-E/OU
Um grafo G = (V, E) consiste de um conjunto finito e não vazio V = {1, 2, ..., r } e um conjunto E = {e
1, e
2, ..., e
s} cujos elementos são subconjuntos de V de tamanho 2, isto é, e
u= (i, j), onde i, j ∈ V. Os elementos de V são chamados vértices (ou nós), e os elementos de E são chamados arestas (ou arcos).
Uma maneira de generalizar um grafo é permitir arcos em E de qualquer tamanho; por exemplo, um arco e
u= (i, j, k) onde i, j, k ∈ V. Para esta generalização, G
= (V, E) é chamado hipergrafo. Uma outra maneira de generalizar um grafo é definir os arcos como pares e
u= (i, V
u), onde i ∈ V e V
u⊂ V; por exemplo, um arco e
u= (i, {j, k}) onde i ∈ V e {j, k} ⊂ V. Se V
utem cardinalidade maior do que 1, então e
ué chamado de arco-E e G de grafo-E/OU (caso especial de um hipergrafo orientado). Note que um arco de um grafo define uma relação entre dois nós, um arco de um hipergrafo define uma relação entre um subconjunto de nós, e um arco de um grafo-E/OU define uma relação entre um nó e um subconjunto de nós. Para maiores detalhes de grafos, hipergrafos, e grafos-E/OU, veja por exemplo Berge (1973) e Pearl (1984).
A seguir definimos um grafo-E/OU particular para representar todos os possíveis
padrões de carregamento tridimensional guilhotinados. Ambos os casos irrestrito e
restrito (seção 2) são abordados.
6.1. Padrão guilhotinado irrestrito
A figura 5a esquematiza uma sequência de cortes guilhotinados feitos sobre o contêiner (L,W,H) (A na figura), para produzir o padrão de carregamento guilhotinado da figura 5b. Primeiro, um corte é feito no comprimento L do contêiner (corte 1 da figura), produzindo duas caixas intermediárias B e C, chamadas sucessoras de A. Em seguida, ambas B e C são cortadas independentemente. A caixa B é cortada na sua altura H (corte 2), produzindo D e E. A caixa C é cortada na sua largura W (corte 3), produzindo F e G.
Note neste exemplo que as caixas B e C são caixas intermediárias e não aparecem na figura, enquanto que as D, E, F e G são supostas caixas (l
i, w
i, h
i), i=1, ..., m, ou caixas que correspondem a espaço não utilizado no padrão.
Definimos o 0-corte como a opção de não cortar uma caixa, ou seja, ao ser aplicado sobre a caixa, deixa-a intacta. Obviamente, outros cortes alternativos poderiam ter sido feitos sobre cada caixa da figura 5, gerando diferentes padrões de carregamento.
Se todas estas alternativas de corte fossem consideradas, incluindo o 0-corte, poderíamos ter gerado todos os padrões guilhotinados irrestritos (note que nenhuma consideração foi feita com respeito às quantidades disponíveis b
i, i = 1, ..., m). Para cada caixa sucessora, um subproblema similar ao original é obtido (mas com tamanho menor).
As caixas e os cortes ilustrados na figura 5a podem ser representados respectivamente como nós e arcos num grafo-E/OU orientado (i.e. uma árvore-E/OU neste exemplo particular). A caixa (L,W,H) corresponde ao nó inicial e as caixas após o 0-corte, aos nós finais. Cada corte guilhotinado feito sobre um nó não final corresponde a um arco-E ligando o nó aos seus dois sucessores. Além disto, cada 0-corte aplicado sobre um nó não final corresponde a um arco ligando o nó e uma réplica de si mesmo. Note que um nó não final (l,w,h) tal que l < l
0ou w < w
0ou h < h
0aceita apenas o 0-corte --- tal nó representa o espaço vazio no padrão de carregamento, onde l
0= min{l
i, i = 1, ..., m}
(similarmente para w
0e h
0).
Considere agora a seguinte sequência de arcos (ou cortes): A partir do nó inicial, escolhemos um arco-E (corte guilhotinado) ou o 0-corte e, a partir de cada nó sucessor, escolhemos um arco-E ou o 0-corte, e assim por diante, até que todos os nós sejam finais.
Esta sequência é chamada caminho completo no grafo-E/OU (note que todos os nós finais
do caminho completo são obtidos por 0-cortes). Para cada padrão de carregamento existe
pelo menos um caminho completo no grafo-E/OU cuja sequência de arcos (cortes) resulta
no padrão de carregamento. Se o nó final corresponde a uma caixa do tipo i (i.e. o nó
corresponde a (l
i, w
i, h
i)), então o seu valor é v
i; caso contrário é nulo. O valor do
caminho completo é definido como a soma dos valores dos seus nós finais. Portanto, o
melhor padrão guilhotinado irrestrito corresponde ao caminho completo mais valioso do
grafo-E/OU descrito.
6.2. Padrão guilhotinado restrito
Se existe um limite b
ipara o número de caixas do tipo i no padrão e
b
i< L / l
iW / w
iH / h
i, então o problema é restrito (seção 2). Considere um nó N do grafo. Note agora que a decisão de produzir caixas do tipo i a partir de N não é mais independente da decisão de produzir outras caixas do tipo i a partir de outros nós que pertencem ao mesmo caminho que inclue N.
Seja b (N)
io máximo número de caixas do tipo i que podem ser produzidas a partir de N. Se N for um nó inicial, então b (N)
i= b
i, i=1, ..., m. Seja (N
1, N
2) um par de sucessores de N, obtidos por um corte guilhotinado. O seguinte problema deve ser resolvido:
max v a
i( a )
i 1 m
i 1
i 2
∑
=+ (37)
s.a.: ( a , a , ..., a
11 21 m1) é um padrão guilhotinado para N
1(38) ( a , a , ..., a
12 22 m2) é um padrão guilhotinado para N
2(39) ( a
ia
ib N
i( ), i , ..., m )
1 2
+ ≤ = 1 (40)
Não é uma tarefa trivial resolver este problema. Note que se b (N), i
i= 1, ..., m , for grande o suficiente, a restrição (40) será redundante e o problema (37)-(39) pode ser decomposto em dois problemas independentes para N
1e N
2, e voltamos ao caso anterior do problema irrestrito.
Uma estratégia de busca é uma maneira particular de percorrer o grafo-E/OU (ou
enumerar seus nós). Nos casos práticos a enumeração completa dos nós é, em geral,
computacionalmente infactível. Uma maneira de reduzir a busca é evitar os padrões
equivalentes, isto é, padrões diferentes que resultam no mesmo número de peças do tipo
i, i=1, ..., m (figura 6). Na seção 6.3 descrevemos algumas regras para evitá-los e
incluímos regras para garantir a estabilidade do carregamento. A busca também pode ser
reduzida utilizando limitantes para evitar caminhos ruins ou pouco promissores (método
branch-and-bound). Entretanto, mesmo utilizando regras e limitantes, a busca ainda
assim pode ser inviável, e heurísticas precisam ser definidas para reduzí-la. Na seção 6.4
apresentamos limitantes, heurísticas e uma estratégia de busca que, combinados, nos
permite encontrar soluções boas e computacionalmente factíveis para os problemas
guilhotinados irrestrito e restrito.
6.3. Regras para evitar padrões equivalentes e tentar produzir padrões estáveis
Nesta seção apresentamos resumidamente algumas regras para evitar os padrões equivalentes. Para maiores detalhes, veja Herz (1972), Christofides e Whitlock (1977) e Morabito e Arenales (1994). No final da seção incluímos regras para tentar garantir que os padrões sejam estáveis.
6.3.1. Padrões normais
Herz (1972) e depois Christofides e Whitlock (1977) mostraram que, sem perda de generalidade, os cortes guilhotinados podem ser reduzidos às combinações lineares não negativas e inteiras dos tamanhos das caixas. Isto é, podemos reduzir os cortes ao longo do comprimento L, da largura W e da altura H do contêiner pelos elementos contidos nos conjuntos de discretização X, Y e Z em (8)-(10). Os padrões obtidos por cortes contidos nestes conjuntos são chamados padrões normais.
6.3.2. Exclusão
Christofides e Whitlock (1977) também mostraram que, sem perda de generalidade, o conjunto X pode ser reduzido definindo para cada nó N o conjunto X(N), considerando os efeitos de exclusão. Admita que N representa uma caixa de tamanho (x, y, z). Note que se uma caixa (l
i, w
i, h
i) é tal que w
i> y ou h
i> z, então seu comprimento l
ipode ser desconsiderado ao gerar X(N) (veja na figura 7 um exemplo com h
i> z). O conjunto X(N) é definido por:
}
X (N) x | x l ( w y ou h z 0
1 x x l , 0 b
1 1 i i i i i
i 1 m
1 0 i i
= = > > ⇒ =
≤ ≤ − ≤ ≤
∑
={ ),
int
α α
α e se
e eiro
(41)
(similarmente para Y(N) e Z(N)).
A fórmula proposta por Christofides e Whitlock (1977) para o problema bidimensional pode ser aqui estendida para gerar os conjuntos X(N), Y(N) e Z(N).
Primeiro, os conjuntos são determinados para o nó inicial e depois, são facilmente
determinados para cada nó N. Admita que l
1≤ l
2≤ ... ≤ l
m. Para cada combinação dos
comprimentos que somam x
1, considere a máxima largura. Seja F
i(x
1) a menor entre as
máximas larguras das caixas 1, 2, ..., i cujos comprimentos combinados somam x
1. Assim,
F
i(x
1)= min{F
i-1(x
1); max{w
i; min ρ {F
i-1(x
1- ρ l
i), 1 ≤ ρ ≤ min x l
1, b
i i
e ρ inteiro}}}, l
i≤ x
1≤ L - l
0F
i(x
1)= F
i-1(x
1), x
1< l
ionde F
0(x
1) = ∞ , x
1= 1, 2, ..., L - l
0, e F
i(0) = 0, i = 0, 1, ..., m (similarmente, seja G
i(x
1) a menor das máximas alturas das caixas 1, 2, ..., i cujos comprimentos combinados somam
x
1).
Se F
i(x
1) < ∞ e G
i(x
1) < ∞ , então x
1= ∑
ij 1=α
i jl , 0 ≤ α
j≤ b
je inteiro;
consequentemente, x
1∈ X(N). Uma vez que F
i(x
1) é independente do nó, ela pode ser gerada antes do início da busca. Depois disso, o conjunto X(N) pode ser facilmente obtido usando F
m(x
1) e G
m(x
1): Se F
m(x
1) ≤ y e G
m(x
1) ≤ z, então x
1∈ X(N). Podemos reescrever X(N) em (41) como:
X(N) = {x
1| F
m(x
1) ≤ y e G
m(x
1) ≤ z, 1 ≤ x
1≤ x - l
0} (42) (similarmente para Y(N) e Z(N)).
6.3.3. Simetria e ordenação de cortes
Considere novamente o nó N representando uma caixa de tamanho (x,y,z). Note que para cada corte x
1∈ X(N), se (x-x
1) ∈ X(N) então um deles pode ser desconsiderado, uma vez que ambos, ao serem aplicados sobre (x, y, z), produzem as mesmas caixas (x
1, y, z) e (x-x
1, y, z). Isto pode ser feito simplesmente substituindo 1 ≤ x
1≤ x - l
0por 1 ≤ x
1≤ x 2
em X(N) (42).
Considere que a caixa (x, y, z) seja cortada em x
1∈ X(N), produzindo (x
1,y,z) e (x- x
1,y,z). Depois disto, considere que (x-x
1, y,z) seja cortado em x
2∈ X(N), produzindo (x
2, y, z) e (x-x
1-x
2, y, z). Note que estes três nós também poderiam ter sido produzidos cortando (x,y,z) em x
2e depois disto, cortando (x-x
2, x, z) em x
1. Christofides e Whitlock (1977) observaram que, sem perda de generalidade, esta duplicação pode ser evitada simplesmente introduzindo uma ordem (arbitrária) na sequência dos cortes ao longo de x (similarmente nos cortes ao longo de y e z).
Se o problema for irrestrito conforme (3)-(4), então as regras de simetria e
ordenação de cortes podem ser aplicadas sem perda de generalidade. Se o problema for
restrito conforme (5)-(7), então estas regras tornam-se heurísticas quando combinadas com a heurística gulosa H3, apresentada na seção 6.4.3 para resolver o problema (37)- (40).
6.3.4. Estabilidade do carregamento
Também é necessário considerar a estabilidade das caixas que são empilhadas. A figura 8a ilustra um carregamento instável devido ao espaço vazio debaixo da caixa 3.
Note que os métodos apresentados nas seções 3 e 4 em geral produzem carregamentos estáveis, por outro lado, o método na seção 5 pode produzir um carregamento como o da figura 8a.
Uma regra heurística adicional pode ser imposta no processo de busca para tentar evitar carregamentos instáveis: (i) Após um corte ao longo da altura, todas as caixas sucessoras só podem ser cortadas ao longo de suas alturas, para garantir que tenhamos camadas (caixas intermediárias) compostas apenas de uma ou várias caixas iguais (veja padrão homogêneo descrito na seção 6.4.1). (ii) Se o carregamento não for estável, permutar estas camadas entre si na tentativa de obter um carregamento estável.
A parte (i) da regra acima evita o carregamento instável da figura 8a, uma vez que após o corte zz', a caixa intermediária que resulta abaixo de zz' não pode sofrer o corte xx' (note na figura que esta caixa corresponde à camada composta de caixas diferentes 1 e 2).
Por outro lado, apenas a parte (i) da regra não evita o carregamento instável da figura 8b (note o espaço vazio debaixo da camada z
2, composta de duas caixas iguais). Ao aplicar a parte (ii), as camadas z
1, z
2e z
3são permutadas e obtemos um carregamento equivalente estável (figura 8c). Notamos, entretanto, que apesar da regra proposta acina, carregamentos instáveis podem ainda ocorrer, bem como no método de carregamento em pilhas (seção 4).
6.4. Limitantes, heurísticas e estratégia de busca
Considere o nó N representando uma caixa (x, y, z) e seja M(N) = { i | l
i≤ x, w
i≤ y, h
i≤ z, i = 1, ..., m } o conjunto de tipos de caixas que podem ser carregados na caixa do nó N.
6.4.1. Limitantes inferior e superior
Um simples limitante inferior para o nó N pode ser definido a partir de padrões
triviais que utilizam apenas um tipo de caixa (padrões homogêneos):
L(N) max v min x l
y w
z
h , b (N) v min x
l y w z
h , b (N)
i M(N) i
i i i
i
j
j j j
j
=
=
∈
(43)
onde b (N)
jé definido conforme apresentado na seção 6.2. Note, entretanto, que se b (N)
jé muito menor do que o produto x l y
w z
j j
h
j
, o padrão homogêneo conterá muito espaço vazio. Neste caso outros limitantes inferiores, combinando padrões homogêneos, podem ser descritos (veja Morábito e Arenales, 1994, 1996).
Um simples limitante superior para o nó N usado por outros autores (p.e. Beasley, 1985a) também pode ser aqui utilizado. Considere a relaxação do problema (5)-(7) levando em conta apenas a restrição de volume. Temos o seguinte limitante superior:
U(N) max v a
i ii M(N)
=
∈
∑ (44)
s a . .: (l w h )a xyz
i i i ii M(N)
≤
∈
∑ (45)
com : 0 ≤ a
i≤ b (N)
ie int eiro , i ∈M (N) (46) Relaxando as condições a
i≤ b
i(N) e inteiro em (46), obtemos um limitante superior fácil de ser computado:
U (N) max v x M
l y w
z
h , i (N)
i
i i i
=
∈
Apesar de serem simples, os limitantes L(N) e U(N) são efetivos, conforme resultados computacionais em Morabito e Arenales (1994).
6.4.2. Método branch-and-bound
Os limitantes inferior e superior da seção anterior podem ser usados para enumerar implicitamente os nós do grafo. Seja V(N) o melhor valor atual obtido para o nó N. V(N) é dado por um limitante inferior ou por algum caminho completo conhecido a partir do nó N, e é atualizado assim que uma solução melhor for obtida por meio dos sucessores de N. Por exemplo, se V(N) < L(N
1) + L(N
2), onde (N
1, N
2) é um par de sucessores de N, então V(N) é atualizado para L(N
1) + L(N
2).
Além disso, se V(N) ≥ U(N
1) + U(N
2), então N
1e N
2não precisam ser
explicitamente considerados. Note que se V(N) = U(N), então V(N) fornece o melhor
valor para o nó N. Estas observações caracterizam um método branch-and-bound onde a ramificação foi definida nas seções 6.1-6.3. Existem várias estratégias para percorrer o grafo-E/OU, isto é, diferentes maneiras para escolher um nó a ser ramificado. Antes de descrever uma estratégia de busca, discutimos outras heurísticas para descartar caminhos não promissores durante a busca.
6.4.3. Heurísticas
Três heurísticas apresentadas em Morábito e Arenales (1994), além de uma heurística devida a Beasley (1985a), podem ser utilizadas para reduzir o espaço de busca.
Heurística H
1Considere o nó N e um par de sucessores (N
1, N
2), e seja λ
1uma fração previamente definida. A heurística H
1pode ser definida como:
Se (1 + λ
1) V(N) ≥ U(N
1) + U(N
2)
Então: Abandone a ramificação que leva a N
1e N
2. Note que se λ
1= 0, o procedimento acima deixa de ser heurístico.
Heurística H
2Seja λ
2uma outra fração previamente definida. A heurística H2 é definida como:
Se λ
2L(N) ≥ L(N
1) + L(N
2)
Então: Abandone a ramificação que leva a N
1e N
2. Note que se λ
2= 0, o procedimento acima deixa de ser heurístico.
Heurística H
3Esta é uma heurística gulosa para tratar o problema (37)-(40). Inicialmente consideramos o nó N
1com o limite b
i(N), i=1, ..., m e, após determinar um padrão de carregamento para a caixa representada por N
1, consideramos o nó N
2com o limite b
i(N) -
a , i
i1
= 1,...,m, onde a
i1