• Nenhum resultado encontrado

Algoritmos de aproximação para problemas de empacotamento em faixa com restrições de descarregamento

N/A
N/A
Protected

Academic year: 2021

Share "Algoritmos de aproximação para problemas de empacotamento em faixa com restrições de descarregamento"

Copied!
90
0
0

Texto

(1)
(2)

FICHA CATALOGRÁFICA ELABORADA PELA BIBLIOTECA DO IMECC DA UNICAMP Bibliotecária: Maria Fabiana Bezerra Müller – CRB8 / 6162

Silveira, Jefferson Luiz Moisés da

Si39a Algoritmos de aproximação para problemas de empacotamento em faixa com restrições de descarregamento/Jefferson Luiz Moisés da Silveira-- Campinas, [S.P. : s.n.], 2011.

Orientador : Eduardo Candido Xavier; Flávio Keidi Miyazawa. Dissertação (mestrado) - Universidade Estadual de Campinas, Instituto de Computação.

1.Algoritmos. 2. Problema de empacotamento. I. Xavier, Eduardo Candido. II.Miyazawa, Flávio Keidi. III. Universidade Estadual de Campinas. Instituto de Computação. IV. Título.

Título em inglês: Approximation algorithms for the strip packing problem with unloading constraints

Palavras-chave em inglês (Keywords): 1.Algorithms. 2.Packing problem. Área de concentração: Teoria da Computação

Titulação: Mestre em Ciência da Computação

Banca examinadora: Prof. Dr. Eduardo Candido Xavier (IC – UNICAMP)

Prof. Dr. Victor Fernandes Cavalcante (IBM Research – Brasil) Prof. Dr. Orlando Lee (IC - UNICAMP)

Data da defesa: 25/03/2011

Programa de Pós-Graduação: Mestrado em Ciência da Computação ii

(3)
(4)

Instituto de Computação Universidade Estadual de Campinas

Algoritmos de Aproximação para Problemas de

Empacotamento em Faixa com Restrições de

Descarregamento

Jefferson Luiz Moisés da Silveira

1

Março de 2011

Banca Examinadora:

• Eduardo Candido Xavier (Orientador) • Victor Fernandes Cavalcante

IBM Research, Brasil • Orlando Lee

Instituto de Computação, UNICAMP • Yoshiko Wakabayashi

Instituto de Matemática e Estatística, USP (suplente) • Guilherme Telles

Instituto de Computação, UNICAMP (suplente)

(5)

Resumo

Neste trabalho estudamos problemas de empacotamento com restrições de descarrega-mento considerados NP-difíceis. Estes problemas possuem aplicações nas áreas de logís-tica e roteamento. Assumindo a hipótese de que P 6= N P , sabemos que não existem algoritmos eficientes para resolver tais problemas. Uma das abordagens consideradas para tratar tais problemas é a de algoritmos de aproximação, que são algoritmos eficien-tes (complexidade de tempo polinomial) e que geram soluções com garantia de qualidade. Estudamos técnicas para o desenvolvimento de algoritmos aproximados e também alguns algoritmos para problemas de empacotamento online que podem ser utilizados na reso-lução do problema estudado. Propomos também algumas heurísticas para o problema e, além disto, provamos que duas destas heurísticas possuem garantias de aproximação com fatores constantes. Realizamos testes computacionais com estes algoritmos propostos. Dentre estes, a heurística GRASP foi a que obteve melhores resultados para as instâncias de teste consideradas.

(6)

Abstract

In this work we study some NP-hard packing problems with unloading constraints. These problems have applications in logistics and routing problems. Assuming P 6= N P , there are no efficient algorithms to solve these problems. On way to deal with these problems is using approximation algorithms, that are efficient algorithms (polynomial time com-plexity) that produce solutions with quality guarantee. We study techniques used in the development of approximation algorithms and some algorithms for online packing pro-blems which can be used to solve the considered problem. We propose some heuristics for the problem and prove that two of them have constant approximation guarantees. We also perform computational tests with the proposed algorithms. Among them, the GRASP heuristic achieved the best results on the considered instances.

(7)

Ao meu pai, Joaquim Silveira (in memoriam).

(8)

Agradecimentos

Esta é, sem dúvida alguma, a parte mais “pessoal” de uma tese/dissertação e, exatamente por este motivo, achei-a a parte mais interessante em boa parte dos trabalhos que já tive o prazer de folhear. Aqui vemos o autor, não os seus resultados. Espero que, ao ler estas poucas palavras, o leitor consiga sentir o quanto devo a cada uma das pessoas citadas, seja profissional ou pessoalmente. São muitas pessoas, então, inevitavelmente, esquecerei alguém.

Em primeiro lugar, gostaria de agradecer ao meu orientador, o professor Eduardo Xa-vier, pela orientação e apoio no decorrer destes 2 anos no IC. Agradeço principalmente pela sua atenção, dedicação e paciência. Agradeço também ao meu coorientador, Flá-vio Miyazawa, pelo apoio especial durante os dois semestres em que o Eduardo esteve viajando. Agradeço também por me ensinar Algoritmos Aproximados.

Agradeço a toda minha família pelo apoio, direto e indireto, para a realização deste trabalho. Para ser mais conciso: “mainha”, “Tó”, “Nay”, “Mi”, “Tali”, Osmar, “Hudson”, “Coquinho”, “Quinho”, Paula e “Victorssauro” ... Esse trabalho também é de vocês. Muito obrigado pelo carinho, amor, recepções, decepções, brincadeiras, gargalhadas e choros.

Serei eternamente grato a Mari, por me incentivar a vir e não me deixar voltar. Esse trabalho é tão meu, quanto dela. Obrigado por tudo, sempre. Eu obviamente, não conseguiria agradecer tanto quanto queria, então agradeço em forma de confissão. Te amo. Agradeço também a toda família da Mari, por sempre me querer e receber tão bem em qualquer ocasião, Severino, Maria Luiza, Marcela, Yuri, “Dudinha” e Davi, muito obrigado.

Agradeço também aos amigos do São Francisco que, mesmo distantes, sempre es-tiveram próximos em lembranças ou pelo Gtalk, Rodolpho, Alisson, Fagner e Kleber. Aproveito para agradecer as tantas pessoas que conheci aqui em Campinas desde que cheguei, em especial, Roberto, Juliana, Victor, Thaís, Clarissa, dona Lúcia, Hugo, João, Robinho, Rafael, Tiago(s) e Aline.

Agradeço aos professores João Meidanis e Arnaldo Moura por me ensinarem Teoria da Computação e Algoritmos tão bem. Agradeço aos meus professores da graduação, em particular a Mirele e Luis pelas cartas que me ajudaram tanto. Agradeço ao professor

(9)

Luis pelos anos de orientação.

Não poderia deixar de agradecer à algumas pessoas que me fizeram esquecer dos meus problemas tantas vezes, John Lennon, Paul McCartney, George Harrison, Ringo Star, Arnaldo Baptista, Chico Buarque e Caetano Veloso. Muito obrigado.

Por fim, agradeço ao povo brasileiro por ter contribuído, mesmo que contra a sua von-tade, com recursos financeiros para o desenvolvimento deste trabalho (por consequência agradeço ao CNPq).

(10)

Eu falo de ultrapassar a velocidade da luz pra pessoas que nunca ultrapassaram "duzentos por hora", então isso pode ser distante demais...

(Arnaldo Baptista)

(11)

Sumário

Resumo v Abstract vi vii Agradecimentos viii x 1 Introdução 1 1.1 Objetivos do Trabalho . . . 2 1.2 Organização do Texto . . . 2 2 Fundamentação Teórica 4 2.1 Algoritmos de Aproximação . . . 4 2.2 Meta-heurística GRASP . . . 6 2.3 Problemas de Empacotamento . . . 9

2.3.1 O Problema Strip Packing com Restrições de descarregamento (SPU) 10 2.4 Revisão da Bibliografia . . . 13

3 Algoritmos Aproximados 18 3.1 Uma 4-Aproximação com Restrições Tetris . . . 18

3.1.1 Análise do Algoritmo ORP . . . 19

3.1.2 Adaptação para o problema SPUH . . . 22

3.2 Uma 2.6154-Aproximação para a Versão Restrita a Quadrados . . . 24

3.2.1 Análise do Algoritmo OSP . . . 25

3.2.2 Adaptação para o problema SPU . . . 30

4 Heurísticas para o problema SPU 32 4.1 Uma 6.75-aproximação . . . 32

(12)

4.1.1 Análise do Algoritmo LBP . . . 35

4.2 Uma 2-aproximação para o caso com número de classes constante . . . 39

4.2.1 Análise do Algoritmo SO . . . 40 4.2.2 Heurísticas no Algoritmo SO . . . 44 4.3 Heurísticas GRASP . . . 44 4.3.1 Algoritmo Construtivo . . . 45 4.3.2 Escolhendo o valor de ρ . . . 47 4.3.3 Busca Local . . . 48 4.3.4 As Heurísticas G e Gr . . . 49 5 Experimentos Computacionais 51 6 Resumo dos Resultados 64 7 Conclusões 65 Bibliografia 67 A 71 A.1 Minimizando a Função (3.1) do Lema 3.1.2 . . . 71

A.2 Minimizando a Função (4.3) do Lema 4.1.3 . . . 72

(13)

Lista de Tabelas

5.1 Aproximação dos algoritmos LBP, SOur, Gr, SOu e G para o conjunto S1 . 53

5.2 Ocupação média de área dos algoritmos LBP, SOur, Gr, SOu e G para o

conjunto S1 . . . 54

5.3 Instância N1Burke gerada. . . 55 5.4 Aproximação dos algoritmos LBP, SOur, Gr, SOu e G para o conjunto S8 . 57

5.5 Ocupação média de área dos algoritmos LBP, SOur, Gr, SOu e G para o

conjunto S8 . . . 57

5.6 Aproximação dos algoritmos LBP, SOur, Gr, SOu e G para o conjunto S4 . 58

5.7 Ocupação média de área dos algoritmos LBP, SOur, Gr, SOu e G para o

conjunto S4 . . . 58

5.8 Aproximação dos algoritmos LBP, SOur, Gr, SOu e G para o conjunto S3 . 59

5.9 Ocupação média de área dos algoritmos LBP, SOur, Gr, SOu e G para o

conjunto S3 . . . 59

5.10 Aproximação dos algoritmos LBP, SOur, Gr, SOu e G para o conjunto S2 . 60

5.11 Ocupação média de área dos algoritmos LBP, SOur, Gr, SOu e G para o

conjunto S2 . . . 60

5.12 Aproximação dos algoritmos LBP, SOur, Gr, SOu e G para o conjunto S7 . 61

5.13 Ocupação média de área dos algoritmos LBP, SOur, Gr, SOu e G para o

conjunto S7 . . . 61

5.14 Aproximação dos algoritmos LBP, SOur, Gr, SOu e G para o conjunto S5 . 62

5.15 Ocupação média de área dos algoritmos LBP, SOur, Gr, SOu e G para o

conjunto S5 . . . 62

5.16 Aproximação dos algoritmos LBP, SOur, Gr, SOu e G para o conjunto S6 . 63

5.17 Ocupação média de área dos algoritmos LBP, SOur, Gr, SOu e G para o

conjunto S6 . . . 63

6.1 Resumo dos resultados de aproximação. . . 64

(14)

Lista de Figuras

2.1 O problema SPU. . . 11

2.2 Exemplos de soluções para o SPU . . . 12

2.3 Exemplos de soluções para o SPUH . . . 13

3.1 Movimentos permitidos no modelo utilizado em [3]. . . 19

3.2 Representação dos itens e da faixa no algoritmo OSP. . . 26

3.3 Representação de itens da sequência B1, . . . , Bm. . . 28

4.1 Empacotamento gerado pelo algoritmo LBP. . . 35

4.2 Representação das configurações c e c0. . . 37

4.3 Representação dos itens empacotados pelo algoritmo SC. . . 41

4.4 Representação dos Níveis Fµi no algoritmo SO. . . 43

4.5 Representação e escolhas do algoritmo construtivo. . . 46

5.1 Exemplo de aplicação do limitante inferior lb3 e soluções encontradas pelos algoritmos. . . 56

(15)

Lista de Algoritmos

2.1 Fase-Construtiva . . . 7

2.2 Busca local (Minimização) . . . 7

2.3 GRASP . . . 8

3.1 Online Rectangle Packing - ORP . . . 20

3.2 Unloading Online Rectangle Packing - UORP . . . 23

3.3 Online Square Packing OSP . . . 24

3.4 Unloading Online Square Packing - UOSP . . . 30

4.1 Bin Packing Decreasing Order - BPDO . . . 33

4.2 Level Bin Packing - LBP . . . 34

4.3 Slot Class - SC . . . 40

4.4 Slot - SO . . . 40

4.5 Algoritmo Construtivo . . . 46

4.6 Escolha . . . 47

(16)

Lista de Siglas e Abreviações

SPU - Strip Packing with Unloading constraints

SPUH - SPU com moviementos horizontais

GRASP - Greedy Randomized Adaptative Search Procedure

PTAS - Polynomial Time Approximation Scheme

FPTAS - Fully Polynomial Time Approximation Scheme

APTAS - Asymptotic Polynomial Time Approximation Scheme

AFPTAS - Asymptotic Fully Polynomial Time Approximation Scheme

LRC - Lista Restrita de Candidatos

2L-CVRP - The Vehicle Routing Problem with Two Dimensional Loading Constraints

NFDH - Next-Fit Decreasing Height

FFDH - First-Fit Decreasing Height

BL - Bottom-Left

ORP - Online Rectangle Packing

UORP - Unloading Online Rectangle Packing

(17)

UOSP - Unloading Online Square Packing

LBP - Level Bin Packing

BPDO - Bin Packing Decreasing Order

SC - Slot Class

SO - Slot Order

SOu - SO empacotando como o OSP

SOur - SOur com rotações

G - Heurística GRASP sem rotações

Gr - Heurística GRASP com rotações

(18)

Capítulo 1

Introdução

Neste trabalho estudamos algoritmos de aproximação e heurísticas para alguns problemas de empacotamento. Em geral, problemas de empacotamento são problemas de otimização que pertencem à classe NP-difícil. Problemas de otimização, na sua forma geral, têm como objetivo maximizar ou minimizar uma função definida sobre um certo domínio. A teoria clássica de otimização é voltada para o caso em que o domínio é infinito. Já os chamados problemas de otimização combinatória tratam do caso em que o domínio é finito e, além disto, em geral é “fácil” listar os seus elementos e também testar se um dado elemento pertence a esse domínio. Ainda assim, a ideia ingênua de listar e testar todos os elementos deste domínio na busca pelo melhor (aquele que maximiza ou minimiza a função objetivo do problema) mostra-se inviável na prática, mesmo para instâncias de tamanho moderado. Neste trabalho, assumimos a hipótese de que P 6= N P . Portanto, não existem al-goritmos eficientes para tais problemas de empacotamento que são NP-difíceis. Muitos destes problemas aparecem em aplicações práticas e a busca por bons algoritmos para estes é fortemente motivada por razões econômicas. Problemas de empacotamento apare-cem no arranjo de caixas em caminhões, problemas de corte de insumos (metais, tecidos e vidros por exemplo) em indústrias, alguns problemas específicos de escalonamento, entre outros. Neste trabalho consideramos problemas de empacotamento de itens em uma única faixa de tal forma a maximizar a área da faixa preenchida pelos itens, ou seja, minimizar a altura total do empacotamento. Este problema é conhecido como empacotamento em faixa ou Strip Packing Problem. Consideramos também casos em que os itens podem estar sujeitos a vários tipos de restrições, como por exemplo a orientação fixa (impossibilidade de rotacionar os itens), caso online, restrição de gravidade, dentre outras. Uma outra restrição que pode ser considerada é a restrição de descarregamento. Neste caso, além das informações de largura e altura, cada item possui uma ordem (classe) e o empacotamento final deve ser tal que pode-se remover itens em ordem sem movimentar outros itens e usando apenas a área livre da faixa.

(19)

1.1. Objetivos do Trabalho 2

Dada a impossibilidade de resolver tais problemas de maneira exata e eficiente, busca-se alternativas que busca-sejam úteis. Na prática vários métodos são utilizados como pro-gramação inteira, heurísticas e meta-heurísticas, algoritmos de aproximação (algoritmos aproximados), dentre outros. Boa parte destes métodos sacrificam a otimalidade em troca da garantia de uma solução aproximada computável eficientemente. Dentre os métodos citados, destacamos os algoritmos de aproximação, cujo interesse é, apesar de sacrificar a otimalidade, fazê-lo de forma que ainda possamos dar boas garantias sobre o valor da solução obtida, procurando ganhar o máximo em termos de eficiência computacional.

Em linhas gerais, algoritmos aproximados são aqueles que possuem complexidade po-linomial e que não necessariamente produzem uma solução ótima, mas soluções que estão dentro de um certo fator da solução ótima. Como esta garantia deve ser satisfeita para todas as instâncias do problema, devemos dar uma demonstração formal deste fato.

1.1

Objetivos do Trabalho

O objetivo principal deste trabalho é estudar técnicas usadas no desenvolvimento de algo-ritmos aproximados e aplicá-las ao problema específico de empacotamento chamado Strip Packing Problem with Unloading Constraints (SPU). Buscamos desenvolver heurísticas para o SPU e provar fatores de aproximação para estas. A fim de demonstrar a viabi-lidade dos algoritmos propostos, realizamos diversos experimentos computacionais com instâncias tanto novas como obtidas na literatura.

1.2

Organização do Texto

Primeiramente, damos uma breve introdução a algoritmos aproximados e falamos sobre a meta-heurística GRASP (Cap. 2). Neste mesmo Capítulo, apresentaremos as notações utilizadas e definiremos formalmente os problemas SPU e SPUH (uma versão mais rela-xada que veremos adiante), além de descrever os principais resultados relacionados aos problemas atacados neste trabalho.

No Capítulo 3, apresentamos algoritmos de aproximação para dois problemas de em-pacotamento online. Ao final da análise de cada algoritmo apresentamos, caso existam, ideias de como aplicá-lo diretamente aos problemas SPU ou SPUH , ou quais ideias são interessantes para serem utilizadas. Estudamos problemas de empacotamento em faixa online com restrições Tetris. Nestes caso os itens são apresentados de maneira online e, assim como no conhecido jogo Tetris, devem percorrer um caminho livre na faixa até encontrar a sua posição final de empacotamento. Os algoritmos estudados para este pro-blema possuem características muito interessantes para serem aproveitadas no propro-blema

(20)

1.2. Organização do Texto 3

em questão. Primeiramente estudamos um algoritmo para a versão geral do problema que considera que os itens podem ser rotacionados e depois um algoritmo para o caso específico onde os itens são quadrados.

É importante lembrar que existem inúmeros algoritmos aproximados para problemas de empacotamento online e não é nossa intenção mostrar todos estes algoritmos. Neste trabalho buscamos estudar os algoritmos com técnicas mais interessantes que possam ser usadas no problema SPU.

No Capítulo 4 apresentamos as heurísticas originais propostas para o SPU. Primei-ramente apresentamos um novo algoritmo 6.75-aproximado para o problema. Após isto, apresentamos um algoritmo 2-aproximado para o caso específico onde instâncias são tais que o número de classes dos itens é constante. Por fim, apresentamos uma heurística GRASP para o SPU que é fortemente baseada no algoritmo que possui o melhor resul-tado prático para o Strip Packing Problem sem rotações.

Em seguida, são apresentadas as instâncias utilizadas e os experimentos computacio-nais realizados com os algoritmos (Cap. 5).

No Capítulo 6 são apresentados tanto um resumo dos estudos dos algoritmos aproxi-mados quanto os resultados dos experimentos realizados com os algoritmos propostos.

(21)

Capítulo 2

Fundamentação Teórica

Neste Capítulo apresentamos, de maneira resumida, definições e noções básicas que se-rão utilizadas no decorrer do trabalho. Definimos os conceitos básicos sobre algoritmos aproximados, dando definições relacionadas ao tema e discutindo brevemente algumas técnicas que serão utilizadas. Introduzimos também a meta-heurística GRASP (greedy randomized adaptative search procedure), ressaltando suas ideias fundamentais. Também apresentamos os problemas de empacotamento considerados neste trabalho, definindo-os formalmente, além de definir também a notação que será utilizada no trabalho. Por fim, descrevemos os principais resultados da literatura relacionados aos problemas abordados neste trabalho.

2.1

Algoritmos de Aproximação

Nesta Seção introduzimos brevemente o tema algoritmos de aproximação apresentando a notação utilizada e também conceitos básicos sobre o tema. Nas definições a seguir, consideramos sempre problemas de minimização, lembrando que as mesmas definições podem ser adaptadas para o caso de problemas de maximização.

Dado um algoritmo A com complexidade de tempo polinomial, se I for uma instância para este problema, denotaremos por A(I) o custo da solução devolvida pelo algoritmo A aplicado à instância I e OP T (I) o custo de uma solução ótima de I. Um algoritmo A tem um fator de aproximação α se A(I) ≤ αOP T (I), para toda instância I. Neste caso, A é dito ser α-aproximado ou uma α-aproximação. Neste trabalho consideramos também algoritmos ditos α-aproximados assintoticamente. Nestes casos, vale que A(I) ≤ αOP T (I) + β, onde α é o fator de aproximação e β é uma constante aditiva, para toda instância I. Neste caso, dizemos que o algoritmo é assintoticamente α-aproximado, pois

lim OP T (I)→∞supI  A(I) OP T (I)  = α. 4

(22)

2.1. Algoritmos de Aproximação 5

Dois passos básicos devem ser seguidos no desenvolvimento de um algoritmo apro-ximado A. Primeiramente, deve-se demonstrar que A possui complexidade de tempo polinomial. Em seguida, para o caso não assintótico, buscar uma prova do seu fator de aproximação (α), ou seja, demonstrar que para qualquer instância do problema em questão vale que A(I) ≤ αOP T (I). Outro aspecto interessante é verificar se o fator α demonstrado é o melhor possível. Para tanto, devemos apresentar pelo menos uma ins-tância onde vale que A(I)/OP T (I) = α ou A(I)/OP T (I) = α +  (para  tão próximo de zero quanto se queira). Neste caso, o fator de aproximação do algoritmo não pode ser melhorado e é considerado justo.

Algoritmos aproximados são geralmente combinatórios, ou seja, algoritmos que usam técnicas convencionais para o projeto de algoritmos, como algoritmos gulosos, programa-ção dinâmica, etc. Nestes casos, não são empregadas técnicas específicas para o desenvol-vimento de algoritmos de aproximação. Entretanto, nos últimos anos, surgiram várias téc-nicas de caráter geral para o desenvolvimento de algoritmos aproximados. Algumas delas são: arredondamento de soluções via programação linear, dualidade em programação li-near e método primal dual, algoritmos probabilísticos e sua desaleatorização, programação semidefinida, provas verificáveis probabilisticamente e a impossibilidade de aproximações, dentre outras (Veja [25, 44, 20, 41]).

Programação linear tem sido usado para a obtenção de algoritmos aproximados de diversas maneiras. Em geral os problemas são formulados utilizando-se programação linear inteira e a relaxação destes é resolvida, uma vez que isto pode ser feito em tempo polinomial. A partir disto, pode-se arredondar os valores fracionários da solução. Outra técnica, é formular o dual do programa linear e obter soluções a partir das variáveis duais. No caso do uso da técnica primal-dual o algoritmo projetado é combinatório, porém fortemente baseado nas formulações primal e dual do problema.

No âmbito teórico, os algoritmos de aproximação mais desejados são os que possuem o menor fator de aproximação possível. Para alguns problemas, é possível mostrar que exis-tem famílias de algoritmos com fatores de aproximação (1 + ), no caso de problemas de minimização, e (1 − ), no caso de problemas de maximização, onde  > 0 é uma constante e pode ser tomada tão pequena quanto se deseje. Chamamos PTAS (Polynomial Time Approximation Scheme) uma família de algoritmos que têm tais fatores de aproximação e têm complexidade de tempo polinomial no tamanho da entrada. Se, além de serem polinomiais no tamanho da entrada, os algoritmos forem polinomiais em 1/, dizemos que são FPTAS (Fully Polynomial Time Approximation Scheme). Caso existam constantes aditivas nos fatores de aproximação destes algoritmos, chamaremo-los APTAS (Asympto-tic Polynomial Time Approximation Scheme) e AFPTAS (Asympto(Asympto-tic Fully Polynomial Time Approximation Scheme), respectivamente. Nestes esquemas de aproximação temos uma família de algoritmos aproximados, pois dado um  > 0 fixo podemos construir um

(23)

2.2. Meta-heurística GRASP 6

algoritmo com tal aproximação e tempo de execução polinomial. Dentre os esquemas supracitados, os FPTAS são os mais desejados.

Além de apresentar algoritmos de aproximação para problemas NP-difíceis, também podemos demonstrar que alguns deles não podem ser aproximados além de um certo fator α (fator de inaproximabilidade). Nestes casos, dado um problema P , devemos demonstrar que não pode existir um algoritmo α-aproximado para P . Uma das formas de fazê-lo é através de reduções, demonstrando que caso exista um algoritmo polinomial α-aproximado para P , então podemos resolver algum problema NP-difícil em tempo polinomial. Para mais detalhes em inaproximabilidade veja [2, 41].

Para determinados problemas ditos online, não é possível conhecer toda a instância I de entrada a priori. Nestes casos devemos projetar algoritmos que processem a entrada de maneira sequencial, à medida que ela lhe é apresentada, sem que seja possível modificar escolhas feitas em passos anteriores. A este tipo de algoritmos dá-se o nome de algoritmos online. Para mais detalhes em algoritmos online veja [10].

Um algoritmo A é dito ser α-competitivo se é online e é α-aproximado. Nestes casos o valor A(I) é comparado com o valor da solução ótima offline OP T (I), afim de obtermos uma aproximação.

2.2

Meta-heurística GRASP

Nesta Seção descreveremos as principais ideias da meta-heurística GRASP que serão uti-lizadas em alguns dos algoritmos propostos neste trabalho.

Assim como os algoritmos de aproximação, as heurísticas são algoritmos utilizados para obter soluções aproximadas para problemas computacionalmente difíceis, porém, neste caso, pode não haver garantias formais da qualidade da solução. As meta-heurísticas são procedimentos genéricos utilizados para guiar o desenvolvimento de heurísticas para problemas específicos. Cada uma utiliza um mecanismo diferente para fugir de ótimos locais e tentam se aproximar ou encontrar alguma solução ótima global. Dentre as meta-heurísticas mais conhecidas podemos citar os algoritmos genéticos, a Busca Tabu, simu-lated annealing, GRASP e colônias de formigas.

A meta-heurística GRASP foi proposta por Feo et al. [18], mais formalmente em [19]. Esta meta-heurística é guiada por um procedimento iterativo onde cada iteração é formada por duas fases: Construção e Busca Local. A fase de Construção ou fase construtiva cria uma solução s inicial viável, enquanto que a fase de busca local, por sua vez, busca soluções melhores na vizinhança de s. A melhor dentre todas as soluções encontradas nas iterações realizadas é devolvida como o resultado do algoritmo GRASP. Na fase construtiva, é criada uma lista restrita de candidatos (LRC) formada pelos elementos que quando inseridos na solução parcial levam a novas soluções de baixo custo.

(24)

2.2. Meta-heurística GRASP 7

Após isto, é sorteado, aleatoriamente, um dos elementos da LRC e este é inserido na solu-ção parcial. Este procedimento é repetido enquanto uma solusolu-ção viável não é encontrada. A busca local é um método simples usado para resolver problemas de otimização com-binatória e, devido as suas limitações, na maioria dos casos, serve basicamente como apoio a outros algoritmos mais rebuscados como o GRASP. Seu processo básico é o seguinte: Dada uma solução inicial s, analisar a vizinhança de s (denotada por V(s)) em busca de uma solução de melhor valor. Se uma solução melhor for encontrada, então segue a busca pela vizinhança desta nova solução encontrada. Este processo é repetido até que a solução atual seja um ótimo local na vizinhança. As deficiências deste tipo simples de busca são amenizadas devido a característica de múltiplos pontos iniciais (multistart) do GRASP.

Nos Algoritmos 2.1, 2.2 e 2.3 são apresentados pseudocódigos que sintetizam a meta-heurística GRASP e suas fases.

Algoritmo 2.1 Fase-Construtiva

1: begin

2: input: L a lista de elementos do problema (candidatos).

3: Solução ← ∅

4: while Solução não é viável do

5: Calcule os custos incrementais de cada candidato.

6: Construa a Lista Restrita de Candidatos LRC ⊂ L.

7: Selecione aleatoriamente um elemento e ∈ LRC.

8: Solução ← Solução ∪ {e}.

9: L ← L\{e}.

10: return Solução.

11: end

Algoritmo 2.2 Busca local (Minimização)

1: begin

2: input: s uma solução inicial. 3: while s não é mínimo local do

4: Seja s0 = min(V(s)).

5: s ← s0.

6: return s.

7: end

O algoritmo GRASP é executado por um número máximo de iterações (MaxIter). Dentre as soluções geradas nas iterações do algoritmo é escolhida aquela de menor custo (no caso de problemas de minimização). Na literatura existem alguns exemplos de apli-cação da heurística GRASP em problemas de empacotamento com bons resultados, como [1] e [8]. Neste trabalho esta meta-heurística foi escolhida por possuir bons resultados

(25)

2.2. Meta-heurística GRASP 8

Algoritmo 2.3 GRASP

1: begin

2: input: MaxIter, o número máximo de iterações e L a lista de entrada do problema.

3: Melhor-Solução ← ∞ 4: for i = 1 to MaxIter do 5: Solução ← Fase-Construtiva(L). 6: Solução ← Busca-Local(Solução). 7: Melhor-Solução ← min(Melhor-Solução,Solução). 8: return Melhor-Solução. 9: end

para a versão clássica do Strip Packing utilizando faixas verticais em sua estrutura de empacotamento.

Heurísticas GRASP são consideradas gulosas pois sua fase construtiva gera soluções iterativamente com itens mais promissores. Por vezes são chamadas "semi-gulosas"pois esta escolha é feita de maneira aleatória a partir da LCR. Caso LCR tenha apenas um elemento então o algoritmo seria puramente guloso. Este fator aleatório é muito impor-tante para que soluções diferentes do espaço de soluções sejam encontradas e portanto ajudar na fuga de ótimos locais. Além disto, estas heurísticas são chamadas adaptativas pois os valores (custos) de cada candidato são recalculados no início de cada iteração da fase construtiva, tornando mais ou menos promissores dependendo da configuração atual do algoritmo.

As implementações GRASP geralmente usam valores fixos como parâmetros das es-colhas aleatórias do algoritmo, entretanto isto pode ser melhorado com valores que se ajustem durante a execução da heurística. Nestes casos, ela é chamada GRASP reativa [38], pois, ajusta até os seus parâmetros durante a sua execução, com base nos valores das soluções encontradas. Para o problema de empacotamento em faixa bidimensional, foi proposta uma heurística GRASP reativa [1] com resultados superiores as heurísticas GRASP comuns.

Outra técnica bastante utilizada em conjunto com o GRASP é a conexão de caminhos (Path-relinking). Esta técnica foi proposta por Glover [23] para buscar melhores soluções no “caminho” entre boas soluções encontradas com Busca Tabu e Scatter Search. Esta técnica busca mesclar diferentes características das melhores soluções encontradas pelo GRASP gerando possivelmente, soluções melhores.

(26)

2.3. Problemas de Empacotamento 9

2.3

Problemas de Empacotamento

Nesta seção apresentamos algumas definições sobre problemas de empacotamento e defi-niremos as notações que serão utilizadas no restante do trabalho.

Nos problemas de empacotamento temos um ou mais objetos grandes n-dimensionais, os quais chamamos de recipientes, e vários objetos menores também n-dimensionais os quais chamamos de itens. O nosso objetivo é empacotar itens dentro de recipientes, de forma a maximizar ou minimizar uma dada função objetivo. Tanto os itens quanto os recipientes podem assumir formas regulares ou irregulares. Formas regulares são formas retangulares e irregulares são qualquer forma, ou modelo (retângulos, esferas, formas quaisquer etc.). Além disto, o empacotamento dos itens pode ser submetido a certas restrições (precedência, ordem de remoção, etc.) ou a rotações. O empacotamento deve ser feito de tal maneira que os itens não ocupem um mesmo espaço e que as restrições do recipiente e do problema sejam respeitadas.

Uma tipologia para vários tipos de problemas de empacotamento foi feita por Dyckhoff [16] e mais recentemente uma nova tipologia foi proposta por Wäscher et al. [43].

Definiremos agora três problemas de empacotamento básicos.

O primeiro problema, chamado bin packing, tem como entrada uma lista de itens I = (a1, . . . , am), cada item com tamanho s(ai), e um número B que indica o tamanho

dos recipientes que podem ser utilizados para empacotar os itens. Assumimos que para todo item ai ∈ I, vale que s(ai) ≤ B. Este problema consiste em empacotar todos os

itens de I no menor número possível de recipientes, ou seja, devemos achar uma partição P1, . . . , Pq de I tal que q seja mínimo e Pai∈Pjs(ai) ≤ B, para cada parte Pj.

Existem versões onde os itens e recipientes podem ter mais dimensões, como bin pac-king bidimensional, tridimensional, etc. Nestes casos, cada recipiente ou item possui ta-manho dado por uma tupla, onde cada componente indica seu tata-manho na correspondente dimensão.

Há versões em que cada item ai ∈ I possui uma multiplicidade di. Neste caso devemos

gerar um empacotamento que contém di itens do tipo ai, i = 1, . . . , m. Os problemas com

multiplicidade são conhecidos na literatura como cutting stock.

O segundo problema é conhecido como strip packing. Na versão bidimensional deste problema temos uma lista de itens bidimensionais I = (a1, . . . , am), cada item ai com

tamanho (x(ai), y(ai)), e uma faixa S de largura L e altura infinita. O objetivo do

problema é empacotar todos os itens na faixa de tal maneira que seja minimizada a altura total utilizada para empacotar os itens. Versões multidimensionais podem ser consideradas.

O terceiro problema é conhecido como knapsack, ou problema da mochila. Neste caso temos apenas um recipiente de tamanho B, e uma lista de itens I = (a1, . . . , am),

(27)

2.3. Problemas de Empacotamento 10

cada item ai com tamanho s(ai) e valor p(ai), i = 1, . . . , m. O objetivo do problema é

empacotar um subconjunto dos itens de I em um recipiente de tamanho B de tal forma que a soma dos valores destes itens empacotados seja maximizada. Também podemos considerar as versões multidimensionais deste problema.

O problema, como foi definido, é conhecido como restrito, ou mochila 0/1. Neste caso, cada item pode ser empacotado apenas uma vez. Na versão não-restrita, um item ai ∈ I

pode ser empacotado várias vezes, ou seja, várias cópias do mesmo item.

Diversos aplicações industriais podem ser modelados utilizando estes problemas de empacotamento. Dentre eles podemos citar: problemas de corte de insumos (aço, vi-dro, tecido, etc), alocação de recursos, problemas de carregamento (caminhões, vagões, contêineres, etc), entre outras.

2.3.1

O Problema Strip Packing com Restrições de

descarrega-mento (SPU)

Neste trabalho estamos interessados no problema strip packing bidimensional com itens retangulares e restrições de descarregamento.

O problema básico de strip packing consiste em determinar um arranjo para itens em um recipiente (ambos n-dimensionais), sem haver sobreposição entre os itens mini-mizando a altura (a única dimensão variável) induzida pelo empacotamento. Porém, em determinadas aplicações, a modelagem do problema exige que os itens estejam dispostos de maneira ordenada no recipiente.

Considere, por exemplo, o seguinte problema chamado 2L-CVRP (The Vehicle Routing Problem with Two Dimensional Loading Constraints ) [29, 22, 45, 21]. Neste problema, busca-se minimizar o custo do transporte necessário para realizar entregas de produtos a clientes em diferentes localizações. Estes produtos (itens) são enviados em veículos (recipientes) que estão inicialmente situados no fornecedor dos produtos. Para acomodar os itens nos recipientes é utilizado um algoritmo de empacotamento com restrição de descarregamento, para garantir que, durante a entrega de produtos de cada cliente, não haja nenhum produto de outros clientes bloqueando a saída do recipiente.

Neste caso, os itens devem ser retirados do recipiente em uma ordem preestabelecida e, além disto, esta remoção ocorre por apenas uma das extremidades do recipiente. Portanto, o empacotamento deve garantir que não seja necessário alterar a organização dos itens no recipiente durante a remoção de um item, ou seja, garantir que exista um caminho livre para o item percorrer entre a sua posição e a saída do recipiente no momento de sua remoção.

Na Figura 2.1 é possível ver dois exemplos de empacotamento para este problema. Na parte (a) é apresentado uma sequência de clientes que serão visitados para entrega

(28)

2.3. Problemas de Empacotamento 11

de produtos (A-B-C). Em (b) é apresentado um empacotamento inválido, pois não há como remover todos os itens de A (o primeiro cliente) sem movimentar os outros itens do recipiente, considerando que a saída é realizada pelo topo da faixa. Por fim, em (c) temos um empacotamento válido para o SPU.

A B C Fornecedor (b) (c) B C C B A B A B C C B A B A (a)

Figura 2.1: O problema SPU.

Chamamos este problema de strip packing com restrições de descarregamento e pode-mos defini-lo formalmente da seguinte maneira: Dadas uma faixa S de largura L e altura infinita, e uma lista I = (a1, . . . , an), onde ai = (h(ai), w(ai), c(ai)), i = 1, . . . , n, onde

h(ai), w(ai) e c(ai) são, respectivamente, a altura, largura e ordem (classe) do item ai.

Considere que a faixa (recipiente) S está com seu canto inferior esquerdo na origem do plano cartesiano, então um empacotamento pode ser definido como uma função f : I → R2

que posiciona cada item com seu canto inferior esquerdo na posição (x(ai), y(ai)) deste

plano. O objetivo é encontrar um empacotamento que minimize maxi{y(ai) + h(ai)} e

que respeite as seguintes restrições:

• Todos os itens devem estar completamente contidos em S, ou seja,

0 ≤ x(ai) ≤ L − w(ai), 0 ≤ y(ai) ∀ai ∈ I.

(29)

2.3. Problemas de Empacotamento 12

x(ai) + w(ai) ≤ x(aj) ou x(aj) + w(aj) ≤ x(ai) ou

y(ai) + h(ai) ≤ y(aj) ou y(aj) + h(aj) ≤ y(ai) ∀ai, aj ∈ I, i 6= j.

• Todos os itens devem satisfazer a restrição de descarregamento (Veja a Figura 2.2), ou seja,

x(ai) + w(ai) ≤ x(aj) ou x(aj) + w(aj) ≤ x(ai) ou y(ai) + h(ai) ≤ y(aj)

∀ai, aj ∈ I, onde c(ai) > c(aj).

Na Figura 2.2 são apresentados dois empacotamentos. Assuma que c(aj) > c(ai). Na

parte (a) o empacotamento não é uma solução válida para o problema SPU, porque aj está

bloqueando ai. Por outro lado, em (b) temos um empacotamento válido para o problema

SPU, onde os itens podem ser removidos em ordem (1 e 2).

1 2

a

i

a

j

a

i

a

j (a) (b)

Figura 2.2: Exemplos de soluções para o SPU

Uma versão relaxada do SPU também será discutida em Seções posteriores. Nesta versão, denotada por SPUH, a restrição de remoção é relaxada, permitindo que o item também possa ser movimentado horizontalmente para ser removido do recipiente. Na Figura 2.3 são apresentadas possíveis soluções pra o SPUH. Assuma que c(aj) > c(ak) >

c(ai). Na parte (a) o empacotamento não é uma solução válida para o problema SPUH,

porque aj está bloqueando ai. Por outro lado, em (b) Um empacotamento válido para

o problema SPUH, onde os itens podem ser removidos em ordem (1, 2 e 3). Note que a solução em (b) é inviável para o problema SPU.

(30)

2.4. Revisão da Bibliografia 13 (a)

a

k

a

j

a

i (b)

a

i 1 3 2

a

k

a

j

Figura 2.3: Exemplos de soluções para o SPUH

Os problemas SPU e SPUH são generalizações do clássico Strip Packing, pois se todos os itens pertencerem a mesma classe (apenas um cliente na rota), teremos exatamente a versão clássica do Strip Packing bidimensional. Portanto, estes problemas são NP-difíceis no sentido forte.

2.4

Revisão da Bibliografia

Nesta Seção descreveremos resumidamente os principais resultados de aproximação para o Strip Packing, bem como além de algumas heurísticas que contextualizam o problema atacado.

Em 1980, Coffman et al. [33] estenderam algoritmos aproximados clássicos para o Bin Packing unidimensional para o Strip Packing bidimensional. Neste trabalho eles introduziram dois algoritmos clássicos para o problema: o Next-Fit Decreasing Height (NFDH) e o First-Fit Decreasing Height (FFDH). Ambos os algoritmos são offline, pois assumem que os itens estão ordenados em ordem não crescente de altura. Os algoritmos funcionam de maneira semelhante: o NFDH empacota o próximo item da lista ordenada no nível (level) atual alinhado a base do nível e a esquerda enquanto houver espaço (o primeiro nível é a base de S). Caso o item não caiba no nível atual, este é “desativado” (não receberá mais itens) e um novo nível é criado acima do atual (como se a nova base de S fosse uma linha horizontal acima do item mais alto do nível atual) e o item é empacotado

(31)

2.4. Revisão da Bibliografia 14

alinhado a esquerda na base do novo nível. Enquanto o NFDH fecha os níveis e não os utiliza mais, o FFDH, por outro lado, mantém os níveis abertos, para que o próximo item seja empacotado no nível mais baixo em que caiba. Assim como no NFDH, no FFDH caso um item não caiba em nenhum nível aberto, um novo nível é criado acima de todos os outros e este novo item é empacotado nele.

Tanto o NFDH quanto o FFDH podem ser implementados em O(n log n) utilizando as estruturas de dados apresentadas em [32] para os respectivos casos unidimensionais do Bin Packing. Coffman demonstrou que N F DH(I) ≤ 2OP T (I) + 1 e que F F DH(I) ≤ 1.7OP T (I) + 1, além disto, mostrou que estes fatores de aproximação não podem ser melhorados, ou seja, que os algoritmos são justos, se desconsiderarmos as constantes aditivas.

Fugindo da ideia de níveis, em 1980 também Baker et al. [4] propuseram um algo-ritmo clássico chamado Bottom-Left (BL), para o qual vale que BL(I) ≤ 3OP T (I), e ainda mais, este fator é justo. Este algoritmo funciona da seguinte maneira: Primeira-mente os itens são ordenados em ordem não crescente de largura e, em ordem, os itens são empacotados na posição mais baixa possível, alinhado a esquerda. Implementações comuns do algoritmo BL possuem complexidade de tempo O(n3), porém, Chazelle [13] apresentou uma implementação elegante com complexidade O(n2).

Estes três algoritmos supracitados têm sido reutilizados como rotinas em algoritmos para problemas diversos de empacotamento. Para os problemas atacados neste trabalho, eles podem servir como rotinas de empacotamento de cada classe de itens, porém fica difícil garantir a viabilidade do problema (exceto no caso do NFDH) dado que não há garantias das posições dos itens na faixa. Além disto, ainda há a necessidade de ordenação, que não tem relações com a ordem do item.

Com abordagens diferentes, Steinberg [40], Schiermeyer [39], propuseram algoritmos que são 2-aproximações absolutas para o Strip Packing. Schiermeyer [39] propôs um algo-ritmo chamado Reverse-Fit que também é baseado em níveis, porém com uma diferença básica de que as faixas podem não ser disjuntas. Steinberg [40], por sua vez, definiu sete procedimentos, cada qual divide o problema original (tratável) em outros menores e os resolve recursivamente, gerando novos problemas tratáveis.

Estes dois resultados, são de difícil adaptação para os problemas atacados neste tra-balho devido a ordenação dos itens que se faz necessária e ao alto emaranhamento dos itens nas soluções.

Em 2000, Kenynon et al. [35] propuseram um AFPTAS para o Strip Packing. A solução para uma dada instância é obtida resolvendo-se um programa linear para um outro problema conhecido como Fractional Strip Packing [34]. Depois disso são apresentadas técnicas para se obter uma solução para o problema original. Com isso, eles mostraram que o algoritmo é uma aproximação de A(I) ≤ (1 + ε)OP T (I) + O(ε12), com complexidade

(32)

2.4. Revisão da Bibliografia 15

de tempo polinomial em n e em 1ε. Em 2005, Jansen et al. [31] propuseram um AFPTAS para o caso com rotações. Seu método é baseado no algoritmo proposto por Kenynon et al. [35] para o caso sem rotações e alcança a mesma aproximação. Recentemente, Jansen [30] propuseram um APTAS para o caso sem rotações, com a vantagem de possuir um fator aditivo de 1, ao invés de O(ε12).

Embora estes esquemas de aproximação apresentem os melhores resultados teóricos para o Strip Packing, eles são de difícil adaptação para os casos com restrição de ordem, principalmente devido as reduções e ordenações utilizadas.

Para o caso online, os primeiros resultados são creditados a Baker et al. [5]. Um destes resultados foi provado para o algoritmo First Fit Shelf, o qual possui fator de aproximação assintótico de 1.7. Em 1997, Csirik et al. [15] mostraram que nenhum algoritmo baseado em níveis pode alcançar um fator de aproximação assintótico melhor que H∞ = 1.6913 . . .

e, além disto, apresentaram um algoritmo baseado na série harmônica que pode se aproxi-mar arbitrariamente deste fator. Recentemente, Han et al. [24] utilizaram a relação entre o strip packing e o bin packing unidimensional para mostrar que o strip packing admite um algoritmo online com fator de aproximação assintótico de 1.5888.

Além destas versões clássicas do problema, várias outras vêm sendo estudadas. Dentre estas, duas versões do problema, que consideram as restrições do famoso jogo Tetris, aparecem como boas estratégias para conseguir aproximações para os problemas SPU e SPUH.

Em 1997, Azar et al.[3] estudaram o problema de Strip Packing Online com restrições Tetris. Este problema pode ser informalmente definido da seguinte maneira: Dados n itens, apresentados de maneira online, devemos encontrar um empacotamento de altura induzida mínima, de maneira que um item só pode ser empacotado numa posição que seja “alcançável” por ele a partir do topo da faixa F , no momento em que ele for apresentado na entrada. O termo “alcançável” indica que o item deve ter um caminho livre para percorrer na faixa até encontrar sua posição final de empacotamento, antes que outro item seja apresentado na entrada. Uma vez empacotado, um item não pode mais ser movimentado. é importante ressaltar que apesar do seu trabalho citar as regras Tetris, o fator gravidade não é levado em consideração, ou seja, um item pode ser empacotado sem necessariamente estar suportado por outros itens. Em seu trabalho, eles estudaram os casos com orientação fixa e com rotações. Para o caso com rotações propuseram um algoritmo 4-competitivo baseado em sub-faixas horizontais, resultado este que permanece como o melhor da literatura até os dias atuais. Os autores também provaram um limitante inferior de Ω(

q

log1ε) para o caso com orientação fixa, onde ε é um limitante inferior na largura dos itens. Além disto, para o caso com orientação fixa, apresentaram um algoritmo com fator de aproximação O(log1ε). Estes problemas estão intimamente relacionados ao SPUH e suas ideias podem ser reaproveitadas para ambos os problemas abordados neste

(33)

2.4. Revisão da Bibliografia 16

trabalho.

Em 2009, Fekete et al. [17], estudaram o mesmo problema descrito em [3], porém com duas modificações importantes: A restrição de gravidade é considerada e os itens são quadrados. Para esta versão do problema, eles propuseram um algoritmo 2.6154-competitivo baseado em slots (sub-faixas verticais). Este problema, por sua vez, está relacionado ao SPU e suas ideias podem ser diretamente aplicadas a ambos os problemas abordados neste trabalho, gerando algoritmos aproximados para estas versões restritas dos problemas SPU e SPUH.

Além destes algoritmos, que podem ser reaproveitados, algumas heurísticas já foram utilizadas para resolver o SPU. Estas são utilizadas apenas como parte do problema 2L-CVRP, preocupando-se apenas em verificar a viabilidade do empacotamento de um conjunto de itens. Na verdade, são algoritmos que buscam verificar se um certo conjunto de classes de itens (todos os itens dos clientes em uma rota de entrega) podem ser empa-cotados em um bin de tamanho fixo, respeitando a restrição de ordem. Nestes trabalhos o problema assemelha-se mais ao Knapsack ou ao Bin Packing e, mesmo assim, resultados específicos de empacotamento não são reportados (exceto em [22] que mostrou a ocupação média dos veículos (bins) utilizados no roteamento).

Em [29] Iori et al. propuseram um algoritmo exato para o problema 2L-CVRP. Seu algoritmo de empacotamento é uma heurística simples baseada no bottom-left e um proce-dimento branch-and-bound para checar a viabilidade dos empacotamentos. Esta solução resolveu instâncias com, no máximo 25 clientes e 91 itens em, aproximadamente 24h de tempo de CPU. Nenhum resultado específico para o algoritmo de empacotamento foi fornecido.

Gendreau et al. [22] propuseram uma heurística de Busca Tabu para o 2L-CVRP. O problema do carregamento foi resolvido utilizando-se alguns limitantes inferiores, heurís-ticas, busca-local e um branch-and-bound com tempo limitado. O algoritmo de empacota-mento proposto utiliza iterativamente um procediempacota-mento baseado no algoritmo Touching Perimeter [36] para o Bin Packing bidimensional e também para o Strip Packing [28]. Na primeira chamada do algoritmo, os itens estão ordenados em ordem reversa de visita aos clientes (classe) e em cada chamada subsequente esta ordem trivial é alterada. Os autores reportaram algumas informações sobre o empacotamento produzido por esta es-tratégia. De fato, foi reportada a porcentagem de área ocupada em cada veículo. Porém este resultado não mede, de fato, a qualidade do empacotamento, já que empacotamentos muito ruins podem satisfazer a entrega em uma rota e, além disto, possíveis problemas de empacotamento entre itens de classes diferentes podem ser evitados dividindo as classes em diferentes veículos. Portanto, não é possível comparar diretamente nossos resultados com os fornecidos pelos autores.

(34)

2L-2.4. Revisão da Bibliografia 17

CVRP. Quanto ao problema de empacotamento, foram utilizadas 5 heurísticas diferentes (em ordem): As duas primeiras heurísticas simples são baseadas no bottom-left. A terceira e a quarta heurísticas são similares àquela utilizada por Gendreau et al. [22], baseada na heurística Touching Perimeter. A quinta, e última, heurística tenta obter um alto nível de ocupação do veículo escolhendo sempre a posição que minimiza o desperdício de área em um conjunto de espaços livres para empacotamento. Neste trabalho, os autores não mencionam resultados específicos para estas heurísticas de empacotamento.

Os melhores resultados práticos para o 2L-CVRP encontrados na literatura são cre-ditados a uma heurística Ant Colony Optimization, proposta por Doerner et al. [21]. O algoritmo primeiramente usa alguns limitantes para o Bin Packing com o objetivo de provar a inviabilidade de algumas rotas. Então, se os limitantes não provarem isto, o algoritmo começa a busca por empacotamentos viáveis para esta rota. As heurísticas uti-lizadas são similares àquelas previamente citadas em [22] e [45] (Bottom-left e Touching Perimeter) com a adição de um algoritmo branch-and-bound com tempo de CPU limi-tado. Também neste trabalho, não foi fornecida nenhuma informação específica sobre a qualidade do empacotamento.

Se levarmos em consideração apenas resultados práticos com heurísticas para o Strip Packing (desconsiderando resultados de aproximação), há um algoritmo promissor para ser reutilizado no problema SPU. Em 2008, Alvarez et al. [1] propuseram uma heurística GRASP reativa para o problema Strip Packing com orientação fixa. A fase construtiva da heurística é guiada por uma escolha semi-gulosa baseada na largura dos itens e dos espaços livres no empacotamento atual. Desta forma, o algoritmo gera uma LRC com os melhores itens ainda não empacotados e seleciona aleatoriamente um destes para ser empacotado na solução atual. Esta escolha pode ser modificada caso algumas das estimativas usadas indique que é mais vantajoso empacotar o item mais alto ainda não empacotado. Então, este procedimento é repetido enquanto ainda há algum item não empacotado. A fase de busca local é simples, pois apenas remove e reempacota uma porcentagem dos itens na parte superior do empacotamento, utilizando para isto, o próprio algoritmo construtivo, porém determinístico. Este trabalho contém exaustivos experimentos computacionais e possui os melhores resultados da literatura para o Strip Packing com orientação fixa. A estratégia utilizada na fase construtiva é diretamente aplicável ao problema SPU, pois é baseada em faixas verticais para empacotar os itens, diferentemente de outras heurísticas da literatura.

(35)

Capítulo 3

Algoritmos Aproximados

Neste capítulo apresentamos os principais trabalhos na área de empacotamento online com restrições Tetris. Como já citado anteriormente, estes trabalhos estão intimamente relacionados aos problemas SPU e SPUH devido as restrições impostas na forma do item chegar a sua posição de empacotamento. Após a apresentação de cada resultado formali-zaremos esta relação entre o resultado da literatura e o problema que estamos estudando.

3.1

Uma 4-Aproximação com Restrições Tetris

Nesta seção analisaremos o algoritmo aproximado proposto por Azar et al. [3] para resol-ver o problema Strip Packing Online com restrições Tetris. Neste problema, o caminho que um item percorre, do topo da faixa S até alcançar sua posição final no empacota-mento, é considerado. Isto difere do modelo clássico de empacotaempacota-mento, onde os itens podem ser empacotados em qualquer posição livre no recipiente. A Figura 3.1 apresenta o caminho que um item percorre para chegar a sua posição e um item bloqueado neste modelo, nas partes (a) e (b) respectivamente.

O algoritmo Online Rectangle Packing - ORP (Algoritmo 3.1) apresentado a seguir, permite rotações ortogonais (em 90◦) nos itens. Porém, uma vez empacotado o item não pode mais ser movimentado ou rotacionado dentro do recipiente. Assume-se que a altura e a largura de cada item é limitada por 1. Além disto, sem perda de generalidade, assumimos que a largura da faixa S vale 1.

Sejam 0 < α < 1 e 0 < W < 12 duas constantes. Cada item ak ∈ I pode ser de um

dos seguintes tipos: NonBuffers, que possuem w(ai) < W e Buffers, caso contrário. Além

disto, Buffers dividem-se em SmallBuffers, onde W ≤ w(ak) < 1 − W , e LargeBuffers,

caso 1 − W ≤ w(ak) ≤ 1. O recipiente S é dividido em infinitas faixas horizontais Fi

com a altura h(Fi) = αi, i ≥ 0. Seja F uma faixa, defina w(F ) a sua largura ocupada

pelos itens empacotados em F (a soma das larguras dos itens em F ). Cada faixa Fi será

(36)

3.1. Uma 4-Aproximação com Restrições Tetris 19 Item  empacotado Novo Novo Item  empacotado Novo Novo Novo (a) (b)

Figura 3.1: Movimentos permitidos no modelo utilizado em [3].

utilizada para empacotar os retângulos ak ∈ I de altura αi+1< h(ak) ≤ αi.

O algoritmo ORP opera da seguinte maneira: Ao chegar um novo item ak na entrada,

ele rotaciona-o, caso necessário, para que seu menor lado seja a sua base. Depois disto, classifica-o como um NonBuffer ou Buffer. Se for um NonBuffer o algoritmo busca a faixa Fi atualmente aberta para itens de altura h(ak). Se esta faixa não existir, não for

alcançável ou se empacotar ak em Fi faz com que w(Fi) > 1 − W , então é criada uma

nova faixa, acima de todas existentes, para ak e esta nova faixa receberá novos itens de

Fi. Senão, ak é simplesmente empacotado na faixa Fi. Por outro lado, se ak é um Buffer,

então uma nova faixa de altura h(ak) é criada acima de todas as outras existentes para

acomodar apenas o item ak.

3.1.1

Análise do Algoritmo ORP

Nesta Seção discutiremos sobre a complexidade, corretude e aproximação do algoritmo ORP.

Primeiramente, é fácil ver que ORP possui complexidade de tempo polinomial. Para cada Buffer o algoritmo simplesmente o empacota acima dos outros, operação esta, que pode ser realizada em tempo constante. Para NonBuffers ak, o algoritmo busca uma

faixa aberta alcançável para empacotá-lo. Esta operação pode ser feita verificando se algum LargeBuffer B, com w(B) > 1 − w(ak), está localizado acima da faixa aberta,

(37)

3.1. Uma 4-Aproximação com Restrições Tetris 20

Algoritmo 3.1 Online Rectangle Packing - ORP

1: input: Lista I de itens

2: begin

3: while I 6= ∅ do 4: ak ← primeiro(I).

5: Rotacione ak de forma que h(ak) ≥ w(ak).

6: if (w(ak) < W ) then

7: i ← blogαh(ak)c.

8: if (@ faixa Fi alcançável or w(Fi) + w(ak) > 1 − W ) then

9: Feche uma possível faixa Fi aberta.

10: Crie uma nova faixa Fi acima de todas as outras.

11: Empacote ak na faixa Fi aberta o mais a esquerda e baixo possível.

12: else

13: Crie uma nova faixa B acima de todas as outras, com h(B) = h(ak).

14: Empacote ak em B o mais a esquerda possível

15: I ← I\ak.

16: return altura total da faixa; 17: End

caso esta última exista. De fato, é possível olhar apenas para os LargeBuffers pois as faixas F para NonBuffers possuem w(F ) < 1 − W e faixas F para SmallBuffers também possuem w(F ) < 1 − W e, portanto, não impedirão os NonBuffers de alcançar suas respectivas faixas, já que a largura dos NonBuffers é menor que W . Logo, sejam nlb,

nsb e nf, as quantidades de LargeBuffers, SmallBuffers e faixas abertas em um instante,

respectivamente. Temos que a complexidade de tempo de ORP é limitada por (nlb +

nsb) + (nf · nlb) = O(nlb· n).

Além disto, a corretude do algoritmo (com respeito as restrições) baseia-se no fato de que um novo item é empacotado em uma faixa alcançável ou em uma nova faixa, acima de todos os itens já empacotados. Portanto, há sempre um caminho livre para o item chegar a sua posição final de empacotamento.

Para provar o fator de aproximação do algoritmo vamos utilizar o limitante da área dos itens, visto queP|I|

k=0h(ak)w(ak) ≤ OP T (I). O objetivo é provar que se escolhermos

α = 23 e W = 14 teremos que ORP(I) ≤ 4OP T (I) + 3. Para tanto, classificaremos cada faixa utilizada para empacotar NonBuffers em dois grupos: Faixas Fi Full, são as

que possuem w(Fi) ≥ 1 − 2W , e as Fi0 NonFull, caso contrário. Considere que faixas

para empacotar Buffers também são Full. Para demonstrar a aproximação do algoritmo, mostraremos que ao menos 14 da área de S estará ocupada, exceto por 1−α1 de altura. Lema 3.1.1. Seja F uma faixa Full, então no mínimo 14 da sua área está ocupada. Demonstração. Se F é uma faixa aberta para um Buffer B então a fração mínima de área

(38)

3.1. Uma 4-Aproximação com Restrições Tetris 21

ocupada desta faixa é

h(B)w(B)

h(B) = w(B) ≥ W.

Por outro lado, se F é uma faixa usada para empacotar NonBuffers e sua altura é h(Fi)

então podemos garantir que cada item tem altura mínima de αi+1 e, além disto, w(F ) ≥

1 − 2W . Logo, o mínimo de área ocupada é αi+1w(F )

αi = αw(F ) ≥ α(1 − 2W ) =

1 3, substituindo W = 14 e α = 23, temos a demonstração completa.

Para tratar as faixas NonFull, faremos uma associação entre faixas Full e NonFull. Esta associação criará uma única faixa que possui no mínimo W de área ocupada, exceto por 1−α1 unidades de área.

Toda faixa Fi NonFull (obviamente uma faixa para empacotar NonBuffers) será

asso-ciada, unicamente com uma faixa Full, dependendo da maneira como Fi foi aberta:

1. Fi é a primeira faixa de altura αi.

2. Fi foi aberta para acomodar um NonBuffer que não pode ser empacotado na faixa

Fi0 que no momento estava aberta, pois isto acarretaria que w(Fi0) > 1 − W . Neste caso Fi está associada com Fi0.

3. Fi foi aberta para acomodar um NonBuffer que foi bloqueado por um LargeBuffer

(apenas este tipo de faixa pode bloquear NonBuffers). Neste caso Fi está associada

com a faixa deste LargeBuffer.

Lema 3.1.2. Independente da maneira como uma Faixa NonFull foi aberta, sua união com outra faixa Full fará com que elas ocupem, no mínimo, W de área.

Demonstração. As faixas que encaixam-se no caso 1 serão desconsideradas. Como pode haver apenas uma faixa deste tipo por potência de α, no máximo P

i≥0αi = 1 1−α = 3

unidades de altura serão desconsideradas pelo algoritmo, já que α = 23.

No caso 2, associaremos Fi NonFull com a última faixa aberta Fi0 para a mesma altura.

A cada faixa Full pode estar associada apenas uma NonFull. Como Fi foi aberta porque

a largura de Fi0 excederia 1 − W , então temos que a fracão mínima de área ocupada por Fi e Fi0 é dada por

αi+1· (1 − W ) αi· 2 = α

1 − W 2 , substituindo α = 23 e W = 14, temos que α1−W2 = 23.

3 4

2 = 1 4.

(39)

3.1. Uma 4-Aproximação com Restrições Tetris 22

No caso 3, associaremos Fi com o LargeBuffer B que o impediu de alcançar a sua faixa

correta. A cada LargeBuffer pode estar associada apenas uma faixa de NonBuffers de cada tipo (potência de α). Portanto, no máximo P

i≥0αi = 1

1−α de altura será associada a B.

Além disto, cada faixa Fi associada a B tem w(Fi) > 1 − w(B), pois foi bloqueada por

B. Logo, seja 0 ≤ h ≤ 1−α1 a altura associada, a fração mínima de área ocupada é dada por

h(B)w(B) + αh(1 − w(B))

h + h(B) , (3.1)

com 1 − W ≤ w(B) ≤ h(B) ≤ 1 e 0 ≤ h ≤ 1−α1 . No Apêndice A.1 mostramos que se escolhermos α = 23 e W = 14 temos que o mínimo desta função ocorre quando h(B) = w(B) = 1 e h = 3, com valor mínimo de14, como enunciado. No algoritmo, este é o caso em que temos um LargeBuffer B, com w(B) = h(B) = 1 e 3 unidades de altura preenchidas com faixas Fi, i ≥ 0, com w(Fi) = ε, com ε tão pequeno quanto se queira.

Com estes resultados conseguimos provar a aproximação do algoritmo ORP no Teo-rema 1.

Teorema 1. Seja I uma lista de itens, então temos que ORP(I) ≤ 4OP T (I) + 3. Demonstração. : Seja ORP(I) a altura da faixa gerada pelo algoritmo ORP. Sabemos que OP T (I) ≥ Area =P|I|

i=0h(ai).w(ai), logo, pelo Lema 3.1.2 temos que

 ORP(I) − 1 1 − α  · W ≤ |I| X i=0 h(ai).w(ai), portanto, 1 WArea ≥ ORP(I) − 1 1 − α ⇒ ORP(I) ≤ 1 WOP T (I) + 1 1 − α e, substituindo α = 23 e W = 14, temos que

ORP(I) ≤ 4OP T (I) + 3.

3.1.2

Adaptação para o problema SPUH

(40)

3.1. Uma 4-Aproximação com Restrições Tetris 23

Como o algoritmo ORP é online e sua aproximação é puramente baseada na área dos itens, se impusermos qualquer ordem arbitrária para a lista de itens, ainda assim o Lema 3.1.2 será válido. Note, porém, que se impusermos uma determinada ordem à lista de itens, teremos um algoritmo offline.

O algoritmo UORP (Algoritmo 3.2) é simples: Primeiramente, a lista I de entrada

é ordenada em ordem não crescente de classe, gerando I0. Depois o algoritmo ORP é aplicado em I0.

Algoritmo 3.2 Unloading Online Rectangle Packing - UORP

1: input: Lista I de itens particionados em C classes.

2: begin

3: I0 ← I ordenada por ordem não crescente de classe.

4: P ← ORP(I0).

5: return P ; 6: End

UORP é obviamente polinomial, com complexidade dominada pelo algoritmo ORP. No

Lema 3.1.3 mostraremos que a solução gerada pelo algoritmo UORP satisfaz as restrições

do problema SPUH.

Lema 3.1.3. Seja P um empacotamento gerado pelo algoritmo UORP, então P satisfaz

as restrições do problema SPUH.

Demonstração. Suponha, por absurdo, que o empacotamento P não satisfaz as restrições impostas pelo problema SPUH. é fácil ver que as restrições de sobreposição e limites da faixa S são sempre satisfeitas. Logo, em P existe um item aj que não possui um caminho

livre, com movimentos horizontais e verticais, para ser removido de S sem movimentar outros itens de classes superiores. Considere o momento em que aj foi empacotado no

algoritmo ORP. Neste momento, todos os itens ai ∈ I0 com classe c(ai) > c(aj) já haviam

sido empacotados em S, devido a ordenação de I0. Portanto, como há um caminho livre entre o topo de S e a posição em que aj será empacotado e, como todos os itens posteriores

a aj possuem classe menor, podemos utilizar este mesmo caminho para remover aj sem

movimentar itens de classes superiores. Porém isto é uma contradição.

Portanto, como o preenchimento de área demonstrado no Lema 3.1.2 é válido indepen-dente da ordenação dos itens, podemos garantir que UORP(I) ≤ 4OP T (I) + 3. Por fim,

denote OP Tu(I) como o valor de um empacotamento ótimo para o problema SPUH, então

vale que OP Tu(I) ≥ OP T (I) e, portanto, UORP(I) ≤ 4OP Tu(I) + 3, como queríamos.

Logicamente, esta mesma ideia não pode ser diretamente aplicada ao problema SPU, pois o caminho que os itens percorrem pode conter movimentos horizontais.

(41)

3.2. Uma 2.6154-Aproximação para a Versão Restrita a Quadrados 24

3.2

Uma 2.6154-Aproximação para a Versão Restrita a

Quadrados

Nesta Seção analisaremos o algoritmo proposto por Fekete et al. [17] para resolver o problema do Strip Packing com restrições Tetris para quadrados. Diferentemente do modelo adotado no problema da Seção anterior, agora temos a restrição adicional da gravidade. No algoritmo ORP (Algoritmo 3.1) os itens podem ficar “flutuando no ar”, de forma que a restrição de gravidade pode não estar satisfeita.

O algoritmo Online Square Packing OSP (Algoritmo 3.3) proposto, utiliza uma es-tratégia diferente do algoritmo da Seção anterior. Ao invés de utilizar faixas horizontais disjuntas (níveis) para dividir os itens, o algoritmo proposto por Fekete et al. [17] utiliza faixas verticais sobrepostas (slots). Considere duas linhas paralelas e verticais partindo da base da faixa S (recipiente). A região entre estas duas linhas é chamada de slot e estas linhas recebem o nome de limite esquerdo e direito do slot. A distância entre estes dois limites é a largura do slot.

O algoritmo OSP funciona da seguinte maneira: Divida a faixa S de largura 1 em slots de diferentes larguras. Para j = 0, 1, 2, . . . crie 2j slots de largura 1

2j lado a lado. Logo,

são criadas uma faixa de largura 1, duas faixas de largura 12, quatro faixas de largura 14 e assim por diante. Note que um slot de 2−i contém dois slots de largura 2−i−1. (Ver Figura 3.2). Para cada quadrado ai arredonde l(ai) (como h(ai) = w(ai), denotaremos

por l(ai) o tamanho do lado do quadrado ai) para o menor valor de 2−j maior ou igual

que l(ai). Empacote ai (com o seu tamanho original l(ai)) no slot de largura 2−j que

permita-o ser empacotado o mais baixo possível, movendo-o pelo limitante esquerdo do slot até encontrar outro item. O algoritmo OSP é apresentado em (Algoritmo 3.3). Algoritmo 3.3 Online Square Packing OSP

1: input: Lista I de quadrados

2: begin

3: while I 6= ∅ do 4: ak ← primeiro(I).

5: i ← blog1

2 l(ak)c.

6: Empacote ak alinhado ao limite esquerdo do slot de largura 2i que o permita ser

empacotado o mais baixo possível.

7: I ← I\ak.

8: return altura total da faixa;

(42)

3.2. Uma 2.6154-Aproximação para a Versão Restrita a Quadrados 25

3.2.1

Análise do Algoritmo OSP

Nesta Seção discutiremos sobre a complexidade, corretude e aproximação do algoritmo OSP.

No que diz respeito as restrições do problema, a corretude do algoritmo OSP decorre da forma como cada item alcança a sua posição final de empacotamento. Cada item percorre um caminho, alinhado ao limite esquerdo de um slot, até encontrar outro item (sobre o qual será empacotado) ou a base de S. Primeiramente, isto garante que há um caminho para alcançar esta posição e, obviamente, assegura a restrição de gravidade.

A ideia ingênua de representar os slots explicitamente nos levaria a um algoritmo de complexidade exponencial. Para garantir uma complexidade de tempo polinomial para o algoritmo OSP devemos utilizar uma ideia parecida com a do algoritmo bottom-left. Primeiramente defina C como o conjunto de pontos pi = (xi, yi), i ≤ n, onde n é a

quantidade de itens da entrada, que denotará a superfície do empacotamento, ou seja, o conjunto de segmentos definidos pelos itens nas posições mais altas para cada ponto do eixo das abscissas da faixa S. Inicialmente C contém apenas um ponto p1 = (0, 0)

(inicialmente a base de S). Para cada novo item ak que será empacotado em um slot de

largura 2−k, o algoritmo faz o seguinte: Cria uma lista auxiliar de pontos C0 que conterá cada ponto da superfície em C transladado no eixo x para o próximo múltiplo de 2−k. Com isso os pontos de empacotamento são exatamente alguns dos pontos de início dos slots de largura 2−k. Note que em uma mesma superfície pode haver mais de um slot de largura 2−k mas apenas o ponto de início da superfície (o mais a esquerda) é utilizado, pois se o item for empacotado sobre esta superfície então ele será empacotado o mais a esquerda possível. Após criar a lista C0, realiza-se uma busca para ver em qual destes pontos da lista C0, ak ficará mais próximo da base de S sem inviabilizar a solução por

sobreposição dos itens. Por fim, atualiza-se a lista C com o empacotamento do item ak

na posição escolhida.

A complexidade deste algoritmo é determinada pelas buscas e construções das listas C e C0. Para cada item da instância, o algoritmo pode aumentar em 2 o tamanho de C. Além disto, uma busca em O(n2) encontrará a melhor posição possível de empacotamento,

checando para cada um dos n pontos a interseção dos n itens. Por fim, como o tamanho de C é limitado por O(n), temos que a complexidade do algoritmo OSP implementado desta forma, é O(n3).

Resta-nos mostrar a garantia de aproximação do algoritmo OSP. Seja ai um quadrado

empacotado num slot Ti de largura 2−ki. Defina δi como a distância entre o lado direito

de ai e o limite direito do slot de largura 2−ki+1 que contém ai, enquanto que δi0 =

min{l(ai), δi}. A Sombra de ai, denotada por aiS, é a área obtida pelo aumento da

largura de ai em δi0 do lado direito e l(ai) − δ0i do lado esquerdo. Logo, aiS tem área do

Referências

Documentos relacionados

Prejuízo estético, em grau médio ou máximo, quando atingidos crânios, e/ou face, e/ou pescoço ou perda de dentes quando há também deformação da arcada

O Quantitative susceptibility mapping (QSM) é uma técnica não-invasiva de Imagem por Ressonância Magnética (MRI) recente que, ao mensurar a distribuição espacial de

A geografia esta epistemologicamente alicerçada sobre o espaço geográfico e suas discussões permeiam essas interações sociais e ambientais que ocorrem

23

Consideraremos nesta parte os aspectos sociológicos da religião relatando suas funções para com os indivíduos da Sociedade, as formas como as atividades religiosas se

A análise mostrou a oportunidade de (i) adoção de uma estratégia de planejamento que reflita um modelo sustentável de desenvolvimento que inclua decisões sobre o futuro da Amazônia

The analysis found that there is an opportunity to (i) enact a planning strategy that reflects a sustainable development model and includes decisions about the future of the Amazon

O MOTOR REDUTOR UTILIZADO PERMITE AUTOMATIZAR QUALQUER TIPO DE GRADE DE ENROLAR, NOVA OU JÁ UTLIZADA.. SENDO COLOCADO NO INTERIOR DO TAMBOR FAZ O ACCIONAMENTO