Escolar Documentos
Profissional Documentos
Cultura Documentos
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
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.
1. Introdução
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.
Como carregar o máximo volume de caixas dentro dos contêineres disponíveis? (2)
2. Modelagem do problema
m
max ∑ vi ai (3)
i =1
s.a.: (a1, a2, ..., am) corresponde a um padrão de carregamento tridimensional (4)
Considere agora apenas um contêiner de tamanho (L, W, H). Note que se vi em (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 bi não for suficientemente grande
(i.e. bi < Lk / li W / wi H / hi ), então a variável ai deve ser limitada superiormente por
bi. Neste caso o problema (3)-(4) é chamado restrito, dado por:
m
max ∑ v i a i (5)
i =1
s.a.: (a1, a2, ..., am) corresponde a um padrão de carregamento tridimensional (6)
com: ai ≤ bi, i= 1, ..., m (7)
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):
m
X= x| x = ∑ α i li , x ≤ L − l0 , α i ≥ 0, inteiro (8)
i =1
m
Y= y| y = ∑ β i wi , y ≤ W − w0 , β i ≥ 0, inteiro (9)
i =1
m
Z= z|z = ∑ γ i hi , z ≤ H − h0 , γ i ≥ 0, inteiro (10)
i =1
1 se x j ≤ x p ≤ x j + li − 1, yk ≤ yq ≤ yk + wi − 1, e zl ≤ zr ≤ zl + hi − 1,
gijklpqr =
0 caso contrario.
que deve ser computada a priori para cada caixa do tipo i (i = 1, ..., m), para cada posição
(xj, yk, zl) (j = 1, ..., |X|, k = 1, ..., |Y| e l = 1, ..., |Z|), e para cada posição (xp, yq, zr) (p = 1,
..., |X|, q= 1, ..., |Y| e r= 1, ..., |Z|).
Sejam J(i) = arg maxj=1, ..., |X| {xj | xj ≤ L - li }, K(i) = arg maxk=1,...,| Y| { yk | yk ≤ W - wi } e
L(i) = arg maxl=1,...,|Z| {zl | zl ≤ H - hi}, e as variáveis de decisão aijkl definidas como:
com: aijkl ∈ {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
3.1. Etapa 1
Na primeira etapa, caixas com altura hj são escolhidas e arranjadas para formar
camadas de dimensões (L, W, hj) (veja figura 3a). Seja λ ij o número de caixas do tipo i na
camada j (i.e. uma camada com dimensões (L, W, hj)) e:
Hj = { i | hi = hj, i = 1, ... , m }
V j = max ∑ vi λ ij (15)
i ∈H j
m
max ∑V µ
j =1
j j (17)
m
s.a .: ∑ hj µj ≤ H (18)
j =1
m
ai = ∑ λ ij µ j , i = 1, ..., m
j =1
4. Carregamento em pilhas
4.1. Etapa 1
Seja λ ijk o número de caixas do tipo i na pilha jk (i.e. uma pilha com dimensões
(lj, wk, H)). Definimos Vjk como:
V jk = max ∑v λ
i∈LWjk
i ijk (21)
s. a.: ∑hλ
i ∈LWjk
i ijk ≤H (22)
4.2. Etapa 2
Na segunda etapa, pilhas jk com valor Vjk são escolhidas e arranjadas sobre a base
(L,W) do contêiner (figura 4b). Seja µ jk denotando o número de vezes que a pilha jk é
utilizada neste arranjo. O seguinte problema bidimensional deve ser resolvido:
m j
max ∑ ∑V
j =1 k =1
jk µ jk (24)
m j
ai = ∑ ∑ λ ijk µ jk ,i = 1,...,m
j =1 k =1
m j
5. Programação dinâmica
onde
x y z
H(x, y,z) = max vi (32)
i = 1,...,m
li wi hi
x x = max{x1 | x1 ≤ x, x1 ∈ X } (33)
y y = max{y1 | y1 ≤ y, y1 ∈Y } (34)
z z = max{z1 | z1 ≤ z, z1 ∈Z } (35)
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 = {(c1, c2, ..., cm) | 0 ≤ ci ≤ bi e 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
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 bi, i = 1, ..., m). Para cada caixa sucessora,
um subproblema similar ao original é obtido (mas com tamanho menor).
Seja bi (N) o 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 bi (N) = bi, i=1, ..., m. Seja (N1, N2) um par de
sucessores de N, obtidos por um corte guilhotinado. O seguinte problema deve ser
resolvido:
max ∑ vi (ai1 + ai2 )
m
(37)
i =1
Não é uma tarefa trivial resolver este problema. Note que se b i (N), 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 N1 e N2, e voltamos ao caso anterior
do problema irrestrito.
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
m
X (N) = { x 1 | x 1 = ∑ α i li e ( se wi > y ou hi > z ⇒ α i = 0 ),
i =1 (41)
1 ≤ x 1 ≤ x − l0 , 0 ≤ α i ≤ bi e int eiro}
x
Fi(x1)= min{Fi-1(x1); max{wi; min ρ {Fi-1(x1- ρ li), 1 ≤ ρ ≤ min 1 ,bi e ρ inteiro}}},
li
li ≤ x1 ≤ L - l0
Fi(x1)= Fi-1(x1), x1 < li
Considere que a caixa (x, y, z) seja cortada em x1 ∈X(N), produzindo (x1,y,z) e (x-
x1,y,z). Depois disto, considere que (x-x1, y,z) seja cortado em x2 ∈ X(N), produzindo (x2,
y, z) e (x-x1-x2, y, z). Note que estes três nós também poderiam ter sido produzidos
cortando (x,y,z) em x2 e depois disto, cortando (x-x2, x, z) em x1. 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).
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 z2, composta de duas caixas iguais). Ao aplicar a
parte (ii), as camadas z1, z2 e z3 sã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).
M(N) = { i | li ≤ x, wi ≤ y, hi ≤ z, i = 1, ..., m }
onde b j (N) é definido conforme apresentado na seção 6.2. Note, entretanto, que se b j (N)
x y z
é muito menor do que o produto , o padrão homogêneo conterá muito
l j w j h j
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 ∈M(N)
i i (44)
s. a.: ∑ (l w h )a ≤ xyz
i ∈M(N)
i i i i (45)
x y z
U (N) = max vi , i ∈ M (N)
li wi hi
Apesar de serem simples, os limitantes L(N) e U(N) são efetivos, conforme resultados
computacionais em Morabito e Arenales (1994).
6.4.3. Heurísticas
Heurística H1
Heurística H2
Heurística H3
Esta é uma heurística gulosa para tratar o problema (37)-(40). Inicialmente consideramos
o nó N1 com o limite bi (N), i=1, ..., m e, após determinar um padrão de carregamento
para a caixa representada por N1, consideramos o nó N2 com o limite bi (N) -
1 1
a i , i = 1,...,m, onde a i é a quantidade de caixas do tipo i utilizadas em N1. Observe que
as regras de simetria e ordenação de cortes (seção 6.3.3), em conjunto com H3, tornam-se
uma nova heurística, dado que a ordem em que os nós são percorridos agora é relevante
para se obter uma solução.
Heurística H4
Uma estratégia de busca híbrida pode ser utilizada para percorrer o grafo-E/OU,
que combina duas estratégias básicas: back-tracking (BT) e hill-climbing (HC) (Morábito
et al, 1992; Morábito e Arenales, 1994). Seja DB um inteiro positivo denotando o limite
de profundidade para a estratégia BT. Por simplicidade, o algoritmo descrito a seguir foi
implementado como uma busca em árvore-E/OU:
Algoritmo BT-HC
1. Defina DB para cada árvore-E/OU a ser gerada. Seja RAIZ uma lista que inicialmente
contém apenas o nó inicial.
i li wi hi bi
1 785 139 273 400
2 901 185 195 160
3 901 195 265 40
4 1477 135 195 40
5 614 480 185 8
6 400 400 135 16
7 264 400 400 80
8 385 365 290 40
784 caixas
A melhor solução obtida pela heurística proposta por George e Robinson (1980)
carregou 783 caixas (com valor 0,8974 e volume 26,283 m3), deixando apenas uma caixa
do tipo 7 para fora do contêiner (i.e. 0,0422 m3).
Note que ao fixarmos a orientação das caixas, nenhuma solução foi superior à
solução obtida por George e Robinson (1980). Note também que, a medida que
aumentamos os valores de M e DB, esperamos encontrar uma solução melhor. No
entanto, devido à presença das outras heurísticas envolvidas, não temos garantia de que
esta solução será de fato melhor (compare p.e. a segunda e terceira linhas da tabela 2,
com M=20 e M=50, respectivamente).
i li wi hi bi
1 60 15 30 6
2 45 30 30 6
3 15 15 15 5
17 caixas
Agradecimentos
Os autores agradecem aos dois árbitros anônimos da revista pelos seus
comentários pertinentes e úteis. Esta pesquisa contou com o apoio do CNPq (processos
522973/95-7 e 680082/95-6) e FAPESP (processo 1995/9522-0).
Referências
(7) Bischoff, E.; F. Janetz; S. W. Ratcliff (1995). Loading pallets with non-identical
items. Eur.J.Oper.Res. 84, 681-692.
(8) Brooke, A.; D. Kendrick; A. Meeraus (1992). Release 2.25 GAMS - User's guide.
The Scientific Press, San Francisco.
(15) EJOR (1995). Special issue on cutting and packing problems, Eur.J.Oper.Res. 84.
(16) Gehring, H.; K. Menschner; M. Meyer (1990). A computer based heuristic for
packing pooled shipment containers. Eur.J.Oper.Res. 44, 277-288.
(17) George, J. e D. Robinson (1980). A heuristic for packing boxes into a container.
Computers and Oper.Res. 7, 147-156.
(20) Haessler, R. e F. Talbot (1990). Load planning for shipments of low density
products. Eur.J.Oper.Res. 44, 289-299.
(21) Han, C. P.; K. Knott; P. Egbelu (1989). A heuristic approach to the three-
dimensional cargo loading problem. Int.J.Prod.Res. 27(5), 757-774.
(27) Morabito, R. e M. Arenales (1995). Performance of two heuristics for solving large
scale two-dimensional guillotine cutting problems. INFOR 33(2), 145-155.
(30) Pearl, J. (1984). Heuristics: Intelligent search strategies for computer problem
solving. Addison-Wesley Co., Reading, MA.
(32) Tsai, R.; E. Malstrom; W. Kuo (1993). Three dimensional palletization of mixed box
sizes. IIE Trans. 25(4), 64-75.
Figura 2 - Colocação da Caixa tipo i (li, wi, hi) na posição (xj, yk, zl) do contêiner.
Figura 3 - Carregamento de caixas em camadas.
(a) (b)
Figura 4 - Carregamento de caixas em pilhas