Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para...

12
Algoritmos para os Problemas da Mochila e do Corte de Estoque Tridimensional Guilhotinado Thiago A. de Queiroz, Flávio K. Miyazawa, Instituto de Computação, IC, UNICAMP, 13084-971, Campinas, SP e-mail: [email protected], [email protected] Yoshiko Wakabayashi, Instituto de Matemática e Estatística, IME, USP 05508-090, São Paulo, SP e-mail: [email protected] Eduardo C. Xavier Instituto de Computação, IC, UNICAMP, 13084-971, Campinas, SP e-mail: [email protected] RESUMO Neste trabalho consideramos os problemas da Mochila Ilimitada e do Corte de Estoque, em suas versões tridimensionais, restritos a cortes guilhotinados. Consideramos tanto o caso em que os objetos a serem cortados ou empacotados têm uma orientação fixa, bem como o caso em que ro- tações ortogonais são permitidas. Ambos os problemas são computacionalmente difíceis. Para o problema da Mochila Ilimitada Tridimensional, apresentamos um algoritmo exato que faz uso do conceito de reduced raster points e da estratégia de programação dinâmica. Para o problema do Corte de Estoque Tridimensional, apresentamos uma heurística baseada em geração de colunas que usa o algoritmo exato do problema da Mochila Ilimitada Tridimensional para gerar colunas. As soluções inteiras são obtidas da relaxação do programa inteiro, da reaplicação do método em in- stâncias residuais e por uma heurística construtiva. Os testes computacionais que realizamos com diversas instâncias adaptadas do mundo real e da literatura foram bastante satisfatórios: obtivemos soluções dentro de um pequeno tempo de processamento, indicando a viabilidade prática dos algo- ritmos propostos. PALAVRAS-CHAVE. Otimização Combinatória. Problema de Corte de Estoque Tridimensional. ABSTRACT This paper investigates the (Unbounded) 3D Knapsack and 3D Cutting Stock problems restricted to guillotine cuts. We consider the oriented case and also the case where orthogonal rotations are allowed. Both problems are computationally hard. For the 3D Knapsack problem, we present an exact algorithm that uses the concept of reduced raster points and dynamic programming strategy. For the 3D Cutting Stock problem, we present a column generation heuristic that uses the exact algorithm for the 3D Knapsack problem to generate columns. Integer solutions were obtained using the relaxation of the integer formulation, reapplication of the method for residual instances and by a constructive heuristic. Computational tests on instances adapted from real world and from the literature support the applicability of the approach. KEYWORDS. Combinatorial Optimization. Three-Dimensional Cutting Stock Problem. XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2527

Transcript of Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para...

Page 1: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

Algoritmos para os Problemas da Mochilae do Corte de Estoque Tridimensional Guilhotinado

Thiago A. de Queiroz, Flávio K. Miyazawa,Instituto de Computação, IC, UNICAMP,

13084-971, Campinas, SPe-mail: [email protected], [email protected]

Yoshiko Wakabayashi,Instituto de Matemática e Estatística, IME, USP

05508-090, São Paulo, SPe-mail: [email protected]

Eduardo C. XavierInstituto de Computação, IC, UNICAMP,

13084-971, Campinas, SPe-mail: [email protected]

RESUMONeste trabalho consideramos os problemas da Mochila Ilimitada e do Corte de Estoque, em suasversões tridimensionais, restritos a cortes guilhotinados. Consideramos tanto o caso em que osobjetos a serem cortados ou empacotados têm uma orientação fixa, bem como o caso em que ro-tações ortogonais são permitidas. Ambos os problemas são computacionalmente difíceis. Para oproblema da Mochila Ilimitada Tridimensional, apresentamos um algoritmo exato que faz uso doconceito de reduced raster points e da estratégia de programação dinâmica. Para o problema doCorte de Estoque Tridimensional, apresentamos uma heurística baseada em geração de colunas queusa o algoritmo exato do problema da Mochila Ilimitada Tridimensional para gerar colunas. Assoluções inteiras são obtidas da relaxação do programa inteiro, da reaplicação do método em in-stâncias residuais e por uma heurística construtiva. Os testes computacionais que realizamos comdiversas instâncias adaptadas do mundo real e da literatura foram bastante satisfatórios: obtivemossoluções dentro de um pequeno tempo de processamento, indicando a viabilidade prática dos algo-ritmos propostos.PALAVRAS-CHAVE. Otimização Combinatória. Problema de Corte de Estoque Tridimensional.

ABSTRACTThis paper investigates the (Unbounded) 3D Knapsack and 3D Cutting Stock problems restrictedto guillotine cuts. We consider the oriented case and also the case where orthogonal rotations areallowed. Both problems are computationally hard. For the 3D Knapsack problem, we present anexact algorithm that uses the concept of reduced raster points and dynamic programming strategy.For the 3D Cutting Stock problem, we present a column generation heuristic that uses the exactalgorithm for the 3D Knapsack problem to generate columns. Integer solutions were obtainedusing the relaxation of the integer formulation, reapplication of the method for residual instancesand by a constructive heuristic. Computational tests on instances adapted from real world and fromthe literature support the applicability of the approach.KEYWORDS. Combinatorial Optimization. Three-Dimensional Cutting Stock Problem.

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2527

Page 2: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

1 Introdução

O problema de cortar ou empacotar objetos ocorre rotineiramente em diversas situações práticas: nocarregamento de contêineres ou caminhões, em cortes de vidro, madeira, espuma, etc. O objetivoconsiste em minimizar as perdas no corte e/ou maximizar a ocupação do espaço utilizado no em-pacotamento. Em muitas aplicações reais, os objetos a serem cortados (ou empacotados) possuemtrês dimensões, e neste caso, os objetos grandes (os recipientes) são denominados contêineres, e osobjetos pequenos são denominados caixas ou itens.

Para definir os problemas e apresentar os algoritmos que serão tratados aqui, consideramoso espaço Euclidiano R3, com sistema de coordenadas (x,y,z), em que a largura de um objeto édefinida sobre o eixo x, o comprimento no eixo y e a altura no eixo z. As posições (0,0,0) e (L,C,A)do sistema de coordenadas representam, respectivamente, o canto inferior esquerdo frontal e o cantosuperior direito da parte de trás do contêiner em consideração. A posição de uma caixa dentro docontêiner é especificada pelo seu canto inferior esquerdo frontal. Claramente, as caixas devem sercolocadas nos contêineres, sem que ocorra sobreposição. As dimensões de um contêiner ou umacaixa x são dadas por uma tripla (lx,cx,ax), indicando que x tem largura lx, comprimento cx e alturaax. Definimos a seguir os problemas e as siglas que usaremos para denotá-los.

PROBLEMA DA MOCHILA ILIMITADA TRIDIMENSIONAL (3DM): São dados uma mochila/contêi-ner B = (L,C,A) e uma lista T de n (tipos de) caixas i com dimensões (li,ci,ai) e valores vi, parai = 1, . . . ,n. O objetivo é determinar como empacotar — num único contêiner B — caixas cujasdimensões são iguais às de alguma caixa em T , de maneira a maximizar o valor total das caixasempacotadas.

PROBLEMA DO CORTE DE ESTOQUE TRIDIMENSIONAL (3CE): São dados contêineres de dimen-sões B = (L,C,A), e uma lista T de n (tipos de) caixas i com dimensões (li,ci,ai) e demanda di,para i = 1, . . . ,n. O objetivo é determinar como cortar o menor número possível de contêineres Bpara produzir di unidades de cada caixa i.

Consideramos também as correspondentes versões destes problemas, denotadas por 3DMr e3CEr, nas quais as caixas podem sofrer rotações ortogonais. Neste caso, se uma caixa com di-mensões (li,ci,ai) faz parte da instância, então é permitido empacotar/cortar a mesma em uma daspermutações de (li,ci,ai). Também supomos que cada caixa possa ser empacotada em pelo menosuma das orientações possíveis.

Todos os problemas acima são NP-difíceis, porém, não se sabe se as respectivas versões dedecisão estão em NP.

Conforme as definições acima, uma instância para o problema 3DM ou 3DMr (respectivamente3CE ou 3CEr) é dada por uma tupla da forma (L,C,A, l,c,a,v) (respectivamente (L,C,A, l,c,a,d)).Supomos aqui que os números dados na instância são inteiros positivos, pois se não forem, podemosobter uma instância equivalente com valores inteiros fazendo uma mudança de escala.

Observamos que os poblemas 3DM e 3DMr também podem ser vistos como problemas decorte: neste caso, considera-se que o objetivo é cortar o contêiner B para produzir caixas conformeas dimensões especificadas. Doravante, vamos usar a terminologia de corte. Vamos tratar do casoem que os cortes devem ser ortogonais e guilhotinados: cada corte deve ser paralelo ou ortogonala cada um dos lados do contêiner e pode ser visto como um plano que é aplicado sobre toda aextensão do contêiner. Assim, se um corte é paralelo ao plano (x,y) por exemplo, para o especificaré suficiente indicar qual é a altura (entre 0 até A) desse corte. Cada parte residual do contêiner podeser cortada novamente através de cortes guilhotinados, e o processo pode ser repetido até a obtençãodas caixas desejadas. Na prática, tais tipos de corte são comuns, devido a restrições impostas pelasmáquinas de corte.

As versões uni- e bidimensionais do problema da mochila ilimitada que descrevemos vêm sendoestudadas desde a década de 60. Herz (1972) apresentou um algoritmo recursivo para a versão

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2528

Page 3: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

bidimensional, denotada por 2DM, que obtém padrões, denominados canônicos, através do uso depontos de discretização. Beasley (1985) propôs um algoritmo de programação dinâmica que usa ospontos de discretização para resolver variantes do problema 2DM. Cintra et al. (2008) apresentaramalgoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver empouco tempo computacional instâncias para as quais as soluções ótimas eram desconhecidas.

Os primeiros algoritmos baseados em geração de colunas para o problema de Corte de Estoqueuni- e bidimensionais, que denotamos respectivamente por 1CE e 2CE, foram desenvolvidos porGilmore e Gomory (1961, 1963, 1965). Alvarez-Valdes et al. (2002) também trataram do problema2CE apresentando um algoritmo baseado em geração de colunas, que faz uso da fórmula de recor-rência proposta por Beasley (1985). Para o problema 3CE com demandas unitárias, existem váriosalgoritmos de aproximação. Csirik e van Vliet (1993) obtiveram um algoritmo com limite de de-sempenho assintótico 4,84. Miyazawa e Wakabayashi (2009) mostram que a versão com rotaçõesé tão difícil de ser aproximada quanto a versão orientada e apresentam um algoritmo com fatorde aproximação assintótico 4,89, também para o caso com demanda unitária. Cintra et al. (2007)mostram que estes fatores de aproximação também são válidos para o caso de demandas genéricas.

Para os problemas 3DM e 3DMr, apresentamos aqui um algoritmo exato que faz uso do conceitode reduced raster points e da estratégia de programação dinâmica de Beasley. Para os problemas3CE e 3CEr, apresentamos uma heurística baseada em geração de colunas que usa o algoritmo exatodo problema da Mochila Ilimitada Tridimensional para gerar colunas. Neste trabalho estendemos afórmula de recorrência proposta por Beasley, combinada com o conceito de reduced raster pointsde Scheithauer para o caso tridimensional, seguindo a mesma linha proposta em Cintra et al. (2008).

Os algoritmos foram testados com instâncias reais adaptadas e obtidas de repositórios da In-ternet. Os resultados computacionais foram bastante satisfatórios para instâncias com poucos itense grande demanda: soluções foram obtidas dentro de um tempo razoável de processamento, indi-cando a viabilidade prática dos algoritmos descritos. Para as instâncias adaptadas de Cintra et al.(2008), as soluções obtidas para os problemas 3CE e 3CEr estão a menos de 3% da solução ótima.

Os algoritmos para os problemas 3DM e 3DMr são apresentados na Seção 2. Na Seção 3apresentamos os algoritmos para os problemas 3CE e 3CEr. Na Seção 4 apresentamos os resultadoscomputacionais. Por fim, algumas considerações finais são apresentadas na Seção 5.

2 Problema da Mochila Ilimitada Tridimensional

Em um algoritmo exato para um problema de corte, uma questão fundamental é como gerar — demodo mais eficiente possível — todos os padrões de corte para uma dada instância desse problema.Um modo natural de gerar tais padrões é considerar os chamados pontos de discretização (definidosa seguir), que são nada mais do que posições no contêiner, em que um corte pode ser realizado(supondo que este corte vai gerar um item cujo canto inferior esquerdo frontal coincide com talposição). Veremos, no entanto, que podemos nos restringir a um subconjunto de tais pontos.

Considere uma instância do problema 3DM, dada por uma tupla da forma (L,C,A, l,c,a,v),conforme definimos anteriormente. Um ponto de discretização de largura (resp., de comprimentoe de altura) é um valor i≤ L (resp., j ≤C e k≤ A) obtido através de uma combinação linear inteiranão-negativa de l = (l1, . . . , ln) (resp., c = (c1, . . . ,cn) e a = (a1, . . . ,an)). Denotamos por P, Q e R,o conjunto de todos os pontos de discretização de largura, comprimento e altura, respectivamente.

Nos algoritmos desta seção, restringimo-nos a padrões de corte gerados através de pontos dediscretização mais especializados, conhecidos por reduced raster points. Esses pontos foram in-troduzidos por Scheithauer (1997); e usados por Birgin et al. (2008), com bons resultados, notratamento do problema de empacotamento de retângulos idênticos num retângulo.

O conjunto de reduced raster points P̃ (relativo a P) é definido como P̃ = {〈L− r〉 : r ∈ P},em que 〈s〉 = max{t ∈ P : t ≤ s}. Os conjuntos Q̃ (relativo a Q) e e R̃ (relativo a R) são definidos

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2529

Page 4: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

analogamente.Para cada padrão que não usa os reduced raster points, existe um padrão equivalente cujos

cortes são realizados (itens são empacotados) apenas em posições definidas por tais pontos. Onúmero de padrões considerados desta maneira é em geral, bem menor que os definidos por pontosde discretização. Assim, para quaisquer números racionais xr ≤ L, yr ≤ C e zr ≤ A, definimos asrespectivas funções:

p(xr) = max{i| i ∈ P̃, i≤ xr}; q(yr) = max{ j| j ∈ Q̃, j≤ yr}; r(zr) = max{k| k ∈ R̃, k≤ zr}. (1)

Denotamos por RRP o algoritmo que calcula os reduced raster points usados para a geração dospadrões. Este algoritmo gera primeiro os pontos de discretização através do algoritmo de progra-mação dinâmica DDP (Discretization using Dynamic Programming) apresentado por Cintra et al.(2008), e em seguida seleciona aqueles que são reduced raster points.

A complexidade de tempo do algoritmo RRP é a mesma do algoritmo DDP: O(nD) onde Dassume o valor máximo da dimensão sendo considerada: L, C ou A. Temos assim um algoritmopseudo-polinomial. Quando D é pequeno, ou quando as dimensões das caixas não são tão pequenasem relação às dimensões do contêiner, ou se o número de itens não é grande, o algoritmo temdesempenho bastante satisfatório, como poderá ser visto nos testes computacionais.

É possível diminuir o número de padrões e configurações de cortes evitando configuraçõesdominadas por outras, conforme mencionado por Andonov et al. (2000). Neste trabalho não imple-mentamos estas otimizações. Porém, como apresentado nos testes computacionais, o uso de padrõespor reduced raster points são bastante simples e permitiram obter soluções muito rapidamente.

2.1 Algoritmo para o Problema 3DM

Para calcular o valor ótimo de um padrão guilhotinado no caso tridimensional, estendemos a fór-mula proposta por Beasley (1985). Assim, dado um contêiner de dimensões (l∗,c∗,a∗), temos aseguinte fórmula de recorrência para Gc(l∗,c∗,a∗), o valor de uma solução ótima:

Gc(l∗,c∗,a∗) := max

gc(l∗,c∗,a∗);max({Gc(l′,c∗,a∗)+Gc(p(l∗− l′),c∗,a∗)| l′ ∈ P̃, l′ ≤ l∗/2});max({Gc(l∗,c′,a∗)+Gc(l∗,q(c∗− c′),a∗)| c′ ∈ Q̃, c′ ≤ c∗/2});max({Gc(l∗,c∗,a′)+Gc(l∗,c∗,r(a∗−a′))| a′ ∈ R̃, a′ ≤ a∗/2})

. (2)

Na fórmula acima, gc(l∗,c∗,a∗) é o valor máximo de uma única caixa que pode ser obtida/cortadaconsiderando um contêiner de dimensões (l∗,c∗,a∗). Este valor pode ser 0, caso nenhuma caixapossa ser obtida/cortada. Os conjuntos P̃, Q̃ e R̃ são obtidos a partir da execução do algoritmo RRPe as funções p(), q() e r() estão descritas em (1). Com isso, para uma instância I = (L,C,A, l,c,a,v),temos que Gc(L,C,A) é o valor de uma solução ótima para tal instância.

A seguir, descrevemos o algoritmo PD3DM (Programação Dinâmica para o problema da Mo-chila Ilimitada Tridimensional) que resolve de forma iterativa a recorrência (2) utilizando os con-juntos de reduced raster points P̃, Q̃ e R̃, anteriormente descritos.

Inicialmente, nas linhas 1.1 e 1.2, o algoritmo PD3DM invoca o algoritmo RRP e obtém osconjuntos P̃, Q̃ e R̃. Nas linhas 1.3-1.8, armazena-se em Gc(i, j,k) para cada contêiner de dimen-sões (pi,q j,rk), com pi ∈ P̃, q j ∈ Q̃ e rk ∈ R̃, o valor de uma caixa mais valiosa que pode serobtida/cortada nestas dimensões, além de especificar qual é esta caixa através de item(i, j,k). Avariável guil(i, j,k) indica a direção do corte da guilhotina (horizontal, vertical ou em profundi-dade). Se o valor é nulo, então nenhum corte deve ser feito. Já pos(i, j,k) indica a posição/pontono eixo x, y ou z onde o corte de guilhotina deve ser feito. Nas linhas 1.9–1.32, o algoritmo en-contra a solução ótima de forma iterativa a partir de soluções para contêineres menores. A soluçãopara o contêiner da iteração atual é obtida através da melhor combinação de soluções já conheci-das para contêineres menores. Em outras palavras, dado um contêiner de dimensões (pi,q j,rk), asolução ótima é obtida assim: para cada possível ponto px onde um corte vertical Vr pode ser feito,

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2530

Page 5: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

Algoritmo 1: PD3DMEntrada: instância I = (L,C,A, l,c,a,v) do problema 3DMSaída: solução ótima para IFaça P̃← RRP(L, l1,...,n), Q̃← RRP(C,c1,...,n), R̃← RRP(A,a1,...,n),1.1

onde P̃ = (p1 < p2 < .. . < pm), Q̃ = (q1 < q2 < .. . < qs), R̃ = (r1 < r2 < .. . < ru)1.2

para i← 1 até m faça1.3

para j← 1 até s faça1.4

para k← 1 até u faça1.5

Gc[i, j,k]←max({vk|1≤ k ≤ n; lk ≤ pi, ck ≤ q j e ak ≤ rk}∪{0})1.6

item[i, j,k]←max({k|1≤ k ≤ n; lk ≤ pi, ck ≤ q j, ak ≤ rk e vk = Gc[i, j,k]}∪{0})1.7

guil[i, j,k]← nulo1.8

para i← 2 até m faça1.9

para j← 2 até s faça1.10

para k← 2 até u faça1.11

nn←max(k|1≤ k ≤ i e pk ≤ bpi/2c)1.12

para x← 1 até nn faça1.13

t←max(k|1≤ k ≤ m e pk ≤ pi− px)1.14

se Gc[i, j,k] < Gc[x, j,k]+Gc[t, j,k] então1.15

Gc[i, j,k]← Gc[x, j,k]+Gc[t, j,k]1.16

pos[i, j,k]← px1.17

guil[i, j,k]← ′V ′r1.18

nn←max(k|1≤ k ≤ j e qk ≤ bq j/2c)1.19

para y← 1 até nn faça1.20

t←max(k|1≤ k ≤ s e qk ≤ q j−qy)1.21

se Gc[i, j,k] < Gc[i,y,k]+Gc[i, t,k] então1.22

Gc[i, j,k]← Gc[i,y,k]+Gc[i, t,k]1.23

pos[i, j,k]← qy1.24

guil[i, j,k]← ′H ′z1.25

nn←max(k|1≤ k ≤ k e rk ≤ brk/2c)1.26

para z← 1 até nn faça1.27

t←max(k|1≤ k ≤ u e rk ≤ rk− rz)1.28

se Gc[i, j,k] < Gc[i, j,z]+Gc[i, j, t] então1.29

Gc[i, j,k]← Gc[i, j,z]+Gc[i, j, t]1.30

pos[i, j,k]← rz1.31

guil[i, j,k]← ′P′d1.32

devolva Gc(m,s,u).1.33

o algoritmo testa e determina a melhor solução comparando a melhor solução já conhecida comuma solução que poderia ser obtida com o corte vertical Vr (linhas 1.12–1.18); as linhas 1.19–1.25repetem o mesmo processo, porém para um corte na horizontal, Hz; e as linhas 1.26–1.32, para umcorte em profundidade, Pd . Por fim, na linha 1.33 o algoritmo devolve o valor de uma solução ótima.

Podemos evitar a geração de padrões simétricos, considerando apenas os reduced raster pointsaté a metade da respectiva dimensão do contêiner (feito nos passos 1.12, 1.19 e 1.26.) De fato,considere um contêiner de comprimento L e um corte de guilhotina ortogonal ao eixo x na posiçãot ∈ P̃, com t > L

2 . Tal corte separa o contêiner corrente em dois contêineres menores, um de com-

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2531

Page 6: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

primento t e outro de comprimento L− t. Os padrões que podem ser obtidos considerando essesdois contêineres menores, também podem ser obtidos fazendo um corte de guilhotina na posiçãot ′ = L− t do contêiner original. Assim, se t ′ ∈ P̃, tal corte é certamente considerado (já que t ′ ≤ L

2 );e se t ′ /∈ P̃, então o corte na posição 〈t ′〉, que é considerado, gera dois contêineres que possibilitamobter os mesmos padrões que o corte em t ′ permitiria.

A complexidade de tempo do algoritmo PD3DM é influenciada diretamente pela complexidadede tempo do algoritmo RRP (linha 1.1). Se o número total de pontos de discretização para cada umadas dimensões L, C e A da mochila for m, s e u, respectivamente, então a complexidade de tempo doalgoritmo PD3DM é O(nL+nC+nA+m2su+ms2u+msu2), sendo portanto um algoritmo pseudo-polinomial. Por outro lado, a complexidade de espaço do algoritmo PD3DM é O(L+C+A+msu).

2.2 Problema 3DMr

Na versão bidimensional do problema, em que rotações ortogonais são permitidas, cada caixa i comdimensões (li,ci) pode ser cortada em sua orientação original ou com as dimensões (ci, li), desdeque li 6= ci, li ≤C e ci ≤ L. Já para o caso tridimensional, dada uma caixa i de dimensões (li,ci,ai),é possível obter até outras cinco novas dimensões através de rotações em torno de todos os eixos.

O algoritmo PD3DM pode ser utilizado, sem sofrer modificações, para resolver o problema3DMr. Para tanto, dada uma instância I do 3DMr, constrói-se outra instância I′ para o problema3DM, tal que para cada caixa i em I de dimensões (li,ci,ai) e valor vi, adicionam-se às n caixasjá existentes, novas caixas (viáveis) obtidas por rotações, de mesmo valor vi. Vamos denotar porPD3DMr esta variante que considera rotações. Note que foi possível considerar a versão comrotações desta maneira por se tratar do problema da mochila ilimitada, o qual permite que váriascópias de um mesmo item possam ser cortadas (ou empacotadas).

3 Problema do Corte de Estoque Tridimensional

Antes de apresentar os algoritmos principais, apresentaremos algumas heurísticas construtivas usa-das como subrotinas e para comparação dos algoritmos baseados na técnica de geração de colunas.

3.1 Heurísticas primais para o problema do corte de estoque tridimensional

A heurística que apresentaremos é uma heurística híbrida. Esta gera um padrão dividido em níveisusando como subrotinas um algoritmo para o problema 2CE e um algoritmo para o problema 1CE.O primeiro algoritmo gera os níveis e o segundo empacota os níveis dentro de contêineres. Particu-larizando estas subrotinas, obteremos os dois algoritmos de interesse nesta seção: HFF3 e HFF3r.

Para definir os algoritmos para o problema 3CE, usaremos como subrotinas os algoritmos FFD(First Fit Decreasing) e o algoritmo HFF (Hybrid First Fit), desenvolvidos respectivamente paraos problemas 1CE e 2CE. O algoritmo HFF usa dois algoritmos: HFFl e HFFc. Por simplicidade,vamos considerar que a demanda de cada item é unitária. Assim, dada uma instância (L,C, l,c)para o problema 2CE, o algoritmo HFFl ordena os itens de maneira decrescente por largura (l1 ≥l2 ≥ . . . ≥ ln) e considera cada item i como um item unidimensional de tamanho ci. Em seguida,aplica o algoritmo FF (First Fit), FF(C,c), para obter o empacotamento dos itens em recipientes,F1, . . . ,Fm. Chamaremos estes recipientes de faixas. Por fim, considera-se cada faixa Fi como umitem unidimensional de tamanho f (Fi) = max{l j : j ∈ Fi} e obtém-se um empacotamento dos itensem placas usando o algoritmo FFD(L, f ). As faixas do algoritmo HFFl são geradas na direçãoda largura; denominamos de HFFc a variante deste algoritmo que gera as faixas na direção docomprimento. O algoritmo HFF executa as duas variantes e devolve uma solução de melhor valor.Para mais detalhes sobre o algoritmo HFFl , veja Chung et al. (1982).

Para a versão com rotações, vamos denotar por HFFx (resp. HFFy) a versão do algoritmo HFF,

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2532

Page 7: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

que rotaciona os retângulos i (que podem ser rotacionados) de maneira a ter ci ≥ li (resp. li ≥ ci)antes de aplicar os algoritmos HFFl e HFFc. O algoritmo HFFr executa estes algoritmos e devolveuma melhor solução.

Baseado no algoritmo HFF, apresentamos o algoritmo H3CE. Este algoritmo primeiramenteordena os itens de maneira decrescente pela altura, e a cada iteração do laço, linha 2.3, gera um novonível usando o algoritmo para o problema 2CE como subrotina, privilegiando o empacotamento deitens mais altos dentro de cada nível. No passo 2.7 procura-se inserir a maior quantidade de itens i,sem violar sua demanda e mantendo o empacotamento em no máximo um nível.

Uma vez que todos os níveis foram gerados, estes são empacotados pelo algoritmo do problema1CE em contêineres. Vamos denotar por HFF3a (resp. HFF3r

a) o algoritmo H3CE que usa osalgoritmos FFD e HFF (resp. HFFr) como subrotinas. Note que os algoritmos HFF3a e HFF3r

ageram e empacotam os níveis na direção do eixo da altura. Assim, vamos denotar por HFF3c eHFF3r

c (resp. HFF3l e HFF3rl ) as correspondentes versões cujos níveis são gerados e empacotados

na direção do comprimento (resp. largura). Denote por HFF3 (resp. HFF3r), o algoritmo queexecuta os algoritmos HFF3a, HFF3c e HFF3l (resp. HFF3r

a, HFF3rc e HFF3r

l ) e devolve o melhorempacotamento obtido.

Algoritmo 2: H3CE.Entrada: instância I = (L,C,A, l,c,a,d) para o problema 3CESaída: uma solução para ISubrotinas: algoritmos A e B para os problemas 1CE e 2CE, respectivamente.Ordene os itens de I de maneira que a1 ≥ a2 ≥ . . .≥ an.2.1

m← 02.2

enquanto existe di > 0, para algum i ∈ {1, . . . ,n} faça2.3

m← m+12.4

faça d′ = (d′i) onde d′i = 0 para i = 1, . . . ,n2.5

para i← 1 até n faça2.6

d′i ←max{t : t ≤ di e |B(L,C, l,c,d′)| ≤ 1}2.7

di← di−d′i2.8

faça Nm←B(L,C, l,c,d′) e h(Nm) = max{ai : d′i > 0}2.9

seja P empacotamento dos níveis (Ni) em contêineres de altura A pelo algoritmo A (A,h).2.10

devolva P2.11

3.2 Heurísticas baseadas em geração de colunas

É bem conhecida a formulação do problema do corte de estoque como um programa linear inteiro.Para isso, considera-se P um conjunto de padrões de corte, |P| = m, e P uma matriz de ordemn×m cujas colunas representam os padrões de corte, e d o vetor de demandas. Fazendo uso de umavariável x j, para cada j ∈P , que indica o número de vezes que o padrão j é selecionado, obtém-seum programa linear inteiro, cuja relaxação linear é a seguinte:

min{∑j∈P

x j : Px≥ d, x j ≥ 0 ∀ j ∈P}. (3)

A ideia do algoritmo para o problema do corte de estoque é: resolver (3) através do método degeração de colunas proposto por Gilmore e Gomory (1961), considerar partes inteiras da solução etratar as partes residuais através de uma heurística combinada com a ideia de geração de colunas. Aestratégia consiste em aplicar o método Simplex, inicialmente com um número pequeno de colunasde P como base, e ir gerando novas colunas à medida que forem necessárias. Ou seja, a cada

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2533

Page 8: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

iteração resolvemos o problema de gerar uma nova coluna a ser inserida. Em linhas gerais, cadacaixa i tem um valor yi e devemos obter uma nova coluna/padrão com ∑

ni=1 yizi > 1, sendo zi o

número de vezes que o item i aparece no padrão. Deste modo, podemos usar um algoritmo parao problema da Mochila Ilimitada Tridimensional para obter tal padrão. O algoritmo usado para aresolução do programa linear (3) será denominado ResolvePL. No passo 3.1, a matriz In×n é a matrizdiagonal correspondente aos n padrões. Cada qual com itens de um tipo e com uma orientação fixa.Para maiores detalhes sobre este método, recomendamos consultar Chvátal (1980).

Algoritmo 3: ResolvePL.Entrada: instância I = (L,C,A, l,c,a,d) para o problema 3CESaída: solução para o programa linear (3) onde colunas de P são os padrões de corte.Subrotina: algoritmo A para os problemas 3DM ou 3DMr.Faça x← d e B← In×n3.1

Resolva : yT B = [1,1, . . . ,1]Tn3.2

z←A (L,C,A, l,c,a,y)3.3

se yT z≤ 1 então devolva (B,x) senão resolva: Bw = z3.4

faça t←min( x jw j| 1≤ j ≤ n, w j > 0) e s←min( j | 1≤ j ≤ n,

x jw j = t)3.5

para i← 1 até n faça3.6

Bi,s← zi3.7

se i = s então xi← t senão xi← xi−wi t3.8

vá para a linha 3.23.9

A seguir, apresentamos o Algoritmo 4, denominado Resolve3CE, que recebe como entrada asolução devolvida pelo algoritmo ResolvePL (que pode ser fracionária). Este devolve uma soluçãointeira para o problema 3CE, utilizando uma heurística primal para obter padrões de corte queperturbem a geração da solução residual.

Algoritmo 4: Resolve3CE.Entrada: instância I = (L,C,A, l,c,a,d) para o problema 3CESaída: uma solução para ISubrotina: algoritmo A para o problema 3CE ou o problema 3CEr.(B,x)← ResolvePL(L,C,A, l,c,a,d)4.1

para i← 1 até n faça x∗i ← bxic4.2

se existe i tal que x∗i > 0 para algum 1≤ i≤ n então4.3

devolva (B,x∗1,...,n) (mas NÃO PARE)4.4

para i← 1 até n faça4.5

para j← 1 até n faça di← di−Bi, jx∗j4.6

n′← 0, l′← (), c′← (), a′← (), d′← ()4.7

para i← 1 até n faça4.8

se di > 0 então4.9

n′← n′+1, l′← l′‖(li), c′← c′‖(ci), a′← a′‖(ai), d′← d′‖(di)4.10

se n′ = 0 então PARE4.11

n← n′, l← l′, c← c′, a← a′, d← d′4.12

vá para a linha 4.14.13

devolva um padrão de A (L,C,A, l,c,a,d) com maior volume e atualize as demandas.4.14

se existe i tal que di > 0 para 1≤ i≤ n então vá para a linha 4.14.15

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2534

Page 9: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

A cada iteração do algoritmo Resolve3CE, resolve-se um sistema linear (linha 4.1) para umadada instância I, para obter B e x. Em seguida, na linha 4.2, o algoritmo obtém o vetor x∗ que rep-resenta as demandas atendidas pela parte inteira da solução fracionária. Então, caso exista algumacaixa i que tenha parte da sua demanda atendida por x∗, devolve-se o par (B,x∗) e os padrões cor-respondentes a B. Em seguida, o algoritmo define uma nova instância (linhas 4.7−4.12), chamadainstância residual, I′ = (L,C,A, l,c,a,d′), sendo que o vetor d′ = (d′1, . . . ,d

′n) contém o valor das

demandas não atendidas de cada caixa i. Caso d′ seja nulo, o algoritmo finaliza (linha 4.11). Casocontrário, a execução continua (linha 4.12) para resolver a nova instância I← I′.

Possivelmente, o vetor x devolvido pelo algoritmo ResolvePL poderá ter todos os seus compo-nentes menores que 1. Neste caso, o vetor x∗ será nulo e a subrotina A (linha 4.14) será usadapara obter um bom padrão de corte. Ao obter tal padrão, as demandas são atualizadas e, nas linhas4.14−4.15, caso exista alguma demanda, reinicia-se a execução na linha 4.1 para a nova instânciaresidual. Note que o número de instâncias residuais resolvidas pelo algoritmo Resolve3CE podeser, no pior caso, exponencial em n. Porém, claramente o algoritmo converge, pois a cada iteração,a demanda total das caixas é estritamente menor. O algoritmo A que usamos como subrotina doalgoritmo Resolve3CE é o algoritmo híbrido HFF3, que descrevemos na Seção 3.1.

3.3 Problema 3CEr

O algoritmo Resolve3CE pode ser usado para resolver o problema 3CEr. Para isto, basta usar umalgoritmo para o problema 3CEr como subrotina do algoritmo Resolve3CE e um algoritmo parao problema 3DMr como subrotina para o problema ResolvePL. Nos nossos testes computacionais,dado o problema 3CEr, usamos os algoritmos HFF3r e PD3DMr como subrotinas. E, então, paradiferenciar, denotamos esta versão por Resolve3CEr.

4 Testes Computacionais

Os testes foram realizados com várias instâncias, algumas obtidas adaptando-se instâncias de tra-balhos da literatura. Por limitação de espaço, apresentamos apenas os resultados para as instânciasadaptadas do trabalho de Cintra et al. (2008). Tais instâncias foram inicialmente desenvolvidas parao caso bidimensional. Deste modo, para cada caixa dessa instância, adicionamos uma terceira di-mensão, obtida de forma aleatória ou sorteada de alguma das dimensões já usadas por alguma caixa.Realizamos o mesmo procedimento para obter a terceira dimensão do contêiner. No total, consid-eramos apenas as 12 primeiras instâncias devido às limitações do hardware para tratar contêinerescom dimensões maiores que 2000 unidades.

Os algoritmos propostos foram codificados na linguagem C e os testes executados em um com-putador com processador Intelr CoreT M 2 Duo 1,66 GHz, memória de 2 GB e sistema operacionalLinux. Os sistemas lineares (na geração de colunas) foram resolvidos pelo pacote Coin-OR CLP.

4.1 Testes Computacionais para o Problema da Mochila Ilimitada Tridimensional

Nas tabelas 1 e 2, apresentamos os testes para os problemas 3DM e 3DMr, respectivamente. Ostestes foram realizados usando raster points, uma vez que o número destes pontos foi na média 50%menor que o de pontos de discretização. Isto levou a uma boa economia no tempo de processamento.

Em cada linha, temos os seguintes dados: nome da instância; número de caixas diferentes;dimensões do contêiner; número total de raster points m, s e u nas dimensões L, C e H da mochila;porcentagem da mochila ocupado pelo volume das caixas; e o tempo (de CPU) gasto, em segundos.Caso o tempo seja 0, isto significa que foi gasto menos de 0,001s para resolver a referida instância.Consideramos aqui que o valor vi de cada caixa é o seu volume. Note que para todas as instânciaslistadas, as soluções ótimas foram obtidas em no máximo 0,001s.

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2535

Page 10: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

Instância Num. Caixas Dim. da Mochila m s u Vol. Util. (%) Tempo (s)gcut1_3d 10 (250, 250, 250) 13 5 7 82,649 0,0gcut2_3d 20 (250, 250, 250) 17 24 5 88,127 0,0gcut3_3d 30 (250, 250, 250) 44 26 32 90,417 0,0gcut4_3d 50 (250, 250, 250) 45 50 31 96,352 0,0gcut5_3d 10 (500, 500, 500) 10 13 6 96,826 0,0gcut6_3d 20 (500, 500, 500) 12 18 10 79,781 0,0gcut7_3d 30 (500, 500, 500) 23 19 13 89,172 0,0gcut8_3d 50 (500, 500, 500) 44 59 36 94,074 0,0gcut9_3d 10 (1000, 1000, 1000) 15 7 11 88,224 0,0gcut10_3d 20 (1000, 1000, 1000) 14 20 8 85,986 0,0gcut11_3d 30 (1000, 1000, 1000) 20 38 16 91,344 0,0gcut12_3d 50 (1000, 1000, 1000) 49 42 31 93,303 0,0

Tabela 1: Resultados para as instâncias de 3DM adaptadas de Cintra et al. (2008).

Instância Num. Caixas Dim. da Mochila m s u Vol. Util. (%) Tempo (s)gcut1_3dr 10 (250, 250, 250) 15 15 15 87,067 0,0gcut2_3dr 20 (250, 250, 250) 41 41 41 93,095 0,0gcut3_3dr 30 (250, 250, 250) 58 58 58 94,875 0,0gcut4_3dr 50 (250, 250, 250) 81 81 81 97,625 0,0gcut5_3dr 10 (500, 500, 500) 23 23 23 96,826 0,0gcut6_3dr 20 (500, 500, 500) 28 28 28 90,654 0,0gcut7_3dr 30 (500, 500, 500) 43 43 43 92,562 0,0gcut8_3dr 50 (500, 500, 500) 95 95 95 96,550 0,0gcut9_3dr 10 (1000, 1000, 1000) 17 17 17 92,209 0,0gcut10_3dr 20 (1000, 1000, 1000) 32 32 32 89,151 0,0gcut11_3dr 30 (1000, 1000, 1000) 60 60 60 93,974 0,0gcut12_3dr 50 (1000, 1000, 1000) 85 85 85 96,384 0,0

Tabela 2: Resultados para as instâncias de 3DMr adaptadas de Cintra et al. (2008).

Como era de se esperar, ao permitir rotações, pode ocorrer um melhor aproveitamento do con-têiner. De fato, comparando-se o volume de utilização médio do contêiner para todas as instânciasna Tabela 1 com relação à Tabela 2, nota-se que a diferença percentual chega a 3,96%.

4.2 Testes Computacionais para o Problema do Corte de Estoque Tridimensional

A seguir, apresentamos nas tabelas 3 e 4 os testes para os problemas 3CE e 3CEr. Em cada uma dastabelas, cada coluna refere, respectivamente, a: nome da instância de entrada; solução dada peloalgoritmo Resolve3CE; limitante inferior (LI) para o valor de uma solução ótima inteira, obtido daresolução da relaxação linear (3) pelo algoritmo ResolvePL; diferença percentual entre a soluçãoobtida pelo algoritmo ResolveCE e limitante inferior (LI); o tempo gasto, em segundos; o númerode colunas geradas; a solução obtida apenas pela execução do algoritmo HFF3 (ou HFF3r); melhorapercentual entre a solução obtida pelo algoritmo Resolve3CE (resp. Resolve3CEr) e o algoritmoHFF3 (resp. HFF3r).

Observando as tabelas 3 e 4, é possível notar que a solução do algoritmo Resolve3CE diferede no máximo 3,02% do limitante inferior. Comparando o desempenho do algoritmo Resolve3CE(resp. Resolve3CEr) com a solução obtida pelo algoritmo HFF3 (resp. HFF3r), a melhora nosresultados foi de 16,28% (resp. 23,75%) na média. Em relação ao tempo gasto para resolver cadainstância, no pior caso não se ultrapassaram os 60 segundos para o problema 3CE e 260 segundospara o problema 3CEr.

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2536

Page 11: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

Instância Solução do LI Diferença Tempo Colunas HFF3 Melhora sobreResolve3CE Percentual (s) Geradas HFF3

gcut1_3d 182 182 0,000% 0,06 85 182 0,00%gcut2_3d 285 284 0,352% 1,30 408 340 16,18%gcut3_3d 165 162 1,852% 7,62 1477 217 23,96%gcut4_3d 538 534 0,749% 56,35 3750 715 24,76%gcut5_3d 162 162 0,000% 0,08 68 162 0,00%gcut6_3d 231 230 0,435% 0,35 376 317 27,13%gcut7_3d 348 346 0,578% 1,25 848 461 24,51%gcut8_3d 580 578 0,346% 41,58 2773 668 13,17%gcut9_3d 66 65 1,538% 0,09 123 78 15,38%gcut10_3d 264 264 0,000% 0,13 145 300 12,00%gcut11_3d 222 219 1,370% 3,97 1542 302 26,49%gcut12_3d 505 501 0,798% 29,54 2966 625 19,20%

Tabela 3: Resultados para as instâncias do problema 3CE adaptadas de Cintra et al. (2008).

Instância Solução do LI Diferença Tempo Colunas HFF3r Melhora sobreResolve3CEr Percentual (s) Geradas HFF3r

gcut1_3dr 156 154 1,299% 0,13 93 182 14,29%gcut2_3dr 197 194 1,546% 8,97 660 288 31,60%gcut3_3dr 140 136 2,941% 193,57 2381 205 31,71%gcut4_3dr 489 479 2,088% 237,69 594 672 27,23%gcut5_3dr 137 137 0,000% 0,20 84 145 5,52%gcut6_3dr 186 184 1,087% 1,77 259 270 31,11%gcut7_3dr 341 339 0,590% 21,58 848 428 20,33%gcut8_3dr 471 458 2,838% 211,90 361 617 23,66%gcut9_3dr 60 59 1,695% 0,17 100 72 16,67%gcut10_3dr 235 234 0,427% 2,42 243 290 18,97%gcut11_3dr 171 166 3,012% 166,82 1871 277 38,27%gcut12_3dr 443 431 2,784% 253,76 514 572 22,55%

Tabela 4: Resultados para as instâncias do problema 3CEr adaptadas de Cintra et al. (2008).

5 Considerações Finais

Para o problema da Mochila Ilimitada Tridimensional (3DM), os resultados obtidos com as instân-cias exibidas e algumas outras mostraram que, no caso em que rotações ortogonais são permitidas,os volumes utilizados são maiores (a melhora na utilização do volume do contêiner chegou aos3,96%, na média). Isto porém é natural, já que o domínio das soluções viáveis cresce. O destaquefica para o fato de que todas as soluções ótimas foram obtidas em tempo muito inferior a 0,1s,mesmo no caso com rotações, onde mais soluções viáveis devem ser testadas. Pretendemos realizarmais testes com instâncias maiores, como as da OR-Library, descrita por Beasley (1990), para ve-rificar até quais tamanhos de instâncias podemos resolver exatamente, em tempo razoável, com oalgoritmo proposto. Para o problema do Corte de Estoque Tridimensional (3CE), foram obtidassoluções dentro de 3% do limitante inferior em poucos minutos para instâncias com poucos itensdiferentes e grande demanda por item. Tal comparação é ainda mais favorável quando comparamoscom uma heurística híbrida.

Os diversos testes realizados, além daqueles apresentados neste trabalho, indicam que os algo-ritmos propostos são bastante úteis para resolver problemas reais de pequeno a médio porte.

Agradecimentos: Os autores agradecem as agências de fomento CAPES, CNPq e FAPESP, peloauxílio financeiro recebido. Além disso, agradecem aos revisores pelas valiosas sugestões.

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2537

Page 12: Algoritmos para os Problemas da Mochila e do Corte de ...algoritmos de programação dinâmica para o problema 2DM, com os quais puderam resolver em pouco tempo computacional instâncias

Referências

R. Alvarez-Valdes, A. Parajon e J. M. Tamarit. A computational study of lp-based heuristic al-gorithms for two-dimensional guillotine cutting stock problems. OR Spectrum, 24(2):179–192,2002.

R. Andonov, V. Poirriez e S. Rajopadhye. Unbounded knapsack problem: Dynamic programmingrevisited. European Journal of Operational Research, 123:394–407, 2000.

J. E. Beasley. Algorithms for unconstrained two-dimensional guillotine cutting. Journal of theOperational Research Society, 36(4):297–306, 1985.

J. E. Beasley. OR-Library: distributing test problems by electronic mail. Journal of the OperationalResearch Society, 41(11):1069–1072, 1990.

E. G. Birgin, R. D. Lobato e R. Morabito. An effective recursive partitioning approach for thepacking of identical rectangles in a rectangle. Journal of the Operational Research Society,2008. Aceito; DOI: 10.1057/jors.2008.141.

F. R. K. Chung, M. R. Garey e D. S. Johnson. On packing two-dimensional bins. SIAM Journal onAlgebraic and Discrete Methods, 3:66–76, 1982.

V. Chvátal. Linear Programming. W. H. Freeman and Company, New York, 1980.

G. Cintra, F. K. Miyazawa, Y. Wakabayashi e E. C. Xavier. A note on the approximability of cuttingstock problems. European Journal on Operations Research (Elsevier Science), 34:2589–2603,2007.

G. F. Cintra, F. K. Miyazawa, Y. Wakabayashi e E. C. Xavier. Algorithms for two-dimensionalcutting stock and strip packing problems using dynamic programming and column generation.European Journal of Operational Research, 191:59–83, 2008.

Coin-OR CLP. Linear programming solver: An open source code for solving linear programmingproblems. http://www.coin-or.org/Clp/index.html.

J. Csirik e A. van Vliet. An on-line algorithm for multidimensional bin packing. OperationsResearch Letters, 13:149–158, 1993.

P. Gilmore e R. Gomory. A linear programming approach to the cutting stock problem. OperationsResearch, 9:849–859, 1961.

P. Gilmore e R. Gomory. A linear programming approach to the cutting stock problem - part II.Operations Research, 11:863–888, 1963.

P. Gilmore e R. Gomory. Multistage cutting stock problems of two and more dimensions. Opera-tions Research, 13:94–120, 1965.

J. C. Herz. A recursive computational procedure for two-dimensional stock-cutting. IBM Journalof Research Development, páginas 462–469, 1972.

F. K. Miyazawa e Y. Wakabayashi. Three-dimensional packings with rotations. Computers andOperations Research, 36:2801–2815, 2009.

G. Scheithauer. Equivalence and dominance for problems of optimal packing of rectangles. RicercaOperativa, 27:3–34, 1997.

XLI SBPO 2009 - Pesquisa Operacional na Gestão do Conhecimento Pág. 2538