• Nenhum resultado encontrado

5.4

Heurística Com e Sem Restrição de Ordem

Descreveremos nesta seção a heurística de empacotamento utilizada para testar a viabilidade de rotas encontradas pelo algoritmo branch-and-cut. Esta heurística procura um empacotamento válido de todos os itens dos clientes em uma rota considerando a restrição sequencial. Ou seja, como o veículo possui apenas uma saída para efetuar o descarregamento, os itens são empacotados de modo que não sejam bloqueados por itens que serão servidos posteriormente.

O problema de empacotamento do 2L-CVRP é abordado de modo heurístico utilizando-se do procedimento2DLP ga (Two-dimensional loading problem general algorithm). Este proce-

dimento consiste em chamar a heurística de empacotamento2DLP h (Two-dimensional loading

problem heuristic) de quatro modos diferentes, até encontrar o empacotamento dos itens da rota

ou não conseguir verificar a sua viabilidade. Caso não consiga encontrar um empacotamento viável, uma abordagem exata é utilizada, descrita na seção 5.5.

O algoritmo2DLP h recebe como parâmetros a lista de itens T = (t1, t2, . . . , tn), cada item

ti com dimensões (wi, li), um contêiner F de dimensões (W , L), um vetor C com clientes

associados aos itens emT , uma variável booleana ordenaPorComprimento para definir o modo

primário de ordenação e os fatores de tolerância α, β e γ. O algoritmo devolve um Empa-

cotamentoP de T em F obedecendo a ordem dos clientes em C ou que o empacotamento é inviável.

O 2DLP h inicialmente ordena a lista T em ordem crescente de cliente. Em seguida os

itens são ordenados novamente, mas mantendo a ordem de clientes. Ou seja, um item só troca de lugar com itens do mesmo cliente. Nesta ordenação o parâmetro ordenaPorComprimento é considerado: caso este seja definido como verdadeiro, a ordenação é feita em ordem não cres- cente de comprimento. Caso contrário, a ordenação é feita em ordem não crescente de largura. Mais detalhadamente, sejam dois itensr e s de dimensões (wr,lr) e (ws,ls), respectivamente.

O itemr é posicionado antes do item s caso a seguinte condição seja satisfeita:

lr− (γ × L) < ls e lr+ (γ× L) > ls. (5.14)

Em caso de empate, o desempate é feito pela largura do item. Caso o parâmetro ordenaPorCom-

primento seja igual a falso, troca-se comprimento por largura e consequentemente o desempate

é feito pelo comprimento.

O próximo passo do algoritmo consiste em iniciar o empacotamento dos itens. Para cada itemti ∈ T é chamada a função calculaPontosFronteira, que encontra as possíveis posições

onde este item pode ser empacotado. Esta função possui duas etapas: na primeira etapa encontra todos os pontos superiores direitos dos itens que se encontram na fronteira do empacotamento e os projeta o mais à esquerda quanto for possível. Ou seja, até encontrar a aresta direita de um item já posicionado ou a aresta do contêiner. Na segunda etapa a função efetua a remoção dos pontos nos quais não é possível posicionar o item devido a largura ou comprimento disponível e pontos que não possuam contato com a fronteira do empacotamento após a sua projeção. Note que o fundo do contêinerF é considerado como se fosse um único item de largura W . A

5.4. Heurística Com e Sem Restrição de Ordem 36

verdadeiro, mas o raciocínio é análogo para o caso que este seja definido como falso. A figura 5.1 exemplifica o cálculo dos pontos de fronteira:

Figura 5.1: Exemplo do cálculo dos pontos de fronteira.

Considere o item localizado fora do contêiner. Após encontrar os pontos de fronteira para este item, os pontos são projetados o mais a esquerda possível, gerandoP′

1,P2′,P3′,P4′ eP5′. Em

seguida, o algoritmo percorre estes pontos verificando a viabilidade da colocação do item em cada um deles. Os pontosP′

1eP2′ são mantidos, sendo viáveis para o posicionamento do item.

Os pontosP′

3 eP5′ são removidos porque as larguras disponíveis são menores que a largura do

item. O pontoP′

4 é removido por não possuir contato com a fronteira do empacotamento atual

e por não ser largo o suficiente para se apoiar no item relativo ao pontoP′ 4.

O algoritmo devolve um indicador de inviabilidade se não for encontrada nenhuma posição onde o itemti pode ser colocado. Se forem encontrados pontos viáveis, o algoritmo inicia uma

nova fase. Dado um ponto selecionado, este é comparado aos pontos à sua direita. A cada comparação um novo ponto pode substituir, ou não, o ponto temporariamente selecionado para a colocação do item. Isto ocorre em duas etapas: na primeira etapa um ponto é selecionado se o valor de seu eixoy for menor que o do ponto previamente escolhido. Esta comparação é

efetuada aplicando-se uma tolerânciaα passada como parâmetro, de modo que o ponto precisa

ter um valor dey tão significativamente menor quanto do ponto atualmente escolhido. Utiliza-

remos a figura 5.2 para exemplificar a varredura dos pontos. O algoritmo marca inicialmente o ponto projetadoP′

1 como escolhido. A comparação é efetuada entre o ponto selecionadoP1′ e o

ponto seguinte, o ponto projetadoP′

2. ComoP1′é o ponto escolhido,P2′ só será levado em conta

para a próxima etapa se sua coordenada y, que denotaremos por P′

2.y, for significativamente

menor que a coordenadaP′

1.y, dada uma tolerância α. Mais especificamente, se P2′.y < P1′.y

-α× L, o algoritmo avança para a próxima etapa. Caso contrário, P′

1 continua como o ponto

escolhido e um novo ponto é selecionado para a comparação. Independente da escolha deP′ 2,

o pontoP′

3 será descartado por possuirP3′.y maior que ambos P1′.y e P2′.y. Sabemos que se

P′

1.y− P2′.y for relevante, então P4′ será considerado para a comparação.

Encontrado um ponto com um valor dey significativamente menor que do ponto atualmente

selecionado, o algoritmo inicia a segunda etapa da comparação, utilizando a função areaPer-

5.4. Heurística Com e Sem Restrição de Ordem 37

Figura 5.2: Exemplo da varredura dos pontos de fronteira.

Ou seja, a função encontra a área entre o item posicionado em um ponto e a fronteira do em- pacotamento atual. A figura 5.3 demonstra o cálculo da função areaPerdida. SejaP′

1 o ponto

atualmente selecionado eP′

2 o ponto a ser comparado. Neste passo sabemos que há uma re-

dução significativa do valor dey entre os dois pontos, já que P2′ está sendo considerado. Para

queP′

2 substituaP1′ como o ponto selecionado, a área perdida com a colocação do item emP2′

pode ser atéβ× W × L maior que a área perdida com a colocação em P

1. Ou seja, o algoritmo

2DLP h procura baixar o valor de y do ponto selecionado, e mesmo que a área desperdiçada

pelo novo ponto seja um pouco maior, tanto quanto o cálculo de tolerância permitir, este ponto é escolhido.

Figura 5.3: Exemplo do cálculo da área desperdiçada

Após percorrer todos os pontos, o item é colocado no ponto selecionado ao fim de todas as comparações. Quando todos os itens foram colocados no contêiner, o empacotamentoP é devolvido.

Também apresentamos uma versão da heurística2DLP h sem restrição de ordem para efetu-

armos testes para o caso irrestrito do 2L-CVRP. É facil notar que a heurística2DLP h pode ser

modificada para não considerar a restrição de ordem, apenas mudando a sua etapa de ordena- ção. Denotamos essa modificação da heurística2DLP h como 2DLP hi. O algoritmo2DLP hi

5.4. Heurística Com e Sem Restrição de Ordem 38

Algoritmo 3: Heurística de empacotamento bidimensional2DLP h

Entrada: ContêinerF de dimensões (W , L), lista T de itens, cada com dimensões (wi,

li), um vetor de clientesC associados aos itens em T , uma constante booleana

ordenaPorComprimento e constantes reaisα, β e γ

Saída: EmpacotamentoP de T em F

Ordena a lista de itens de acordo com o seguinte critério: Dados dois itensr e s da lista T .

se os items são do mesmo cliente, ou seja,Cr=Csentão

se ordenaPorComprimento = Verdadeiro então se (lr - (γ× L) < ls) e (lr+ (γ× L) > ls) então

Colocar e s em ordem não crescente de largura.

senão

Colocar e s em ordem não crescente de comprimento.

senão

se (wr- (γ× W ) < ws) e (wr+ (γ× W ) > ws) então

Colocar e s em ordem não crescente de comprimento.

senão

Colocar e s em ordem não crescente de largura.

senão

Colocar e s em ordem crescente de cliente. P ← ∅

parai← 1 até |T | faça

ψ ← calculaPontosFronteira(F , P, ti)

se|ψ| = 0 então

Devolva Empacotamento inviável

compMin← L + (α × L) desperdicioMin← W × L

paraj ← 1 até |ψ| faça

comp← coordenada y de ψj

se comp < compMin - (α× L) então

desperdicio← areaPerdida(ψj,ti)

se desperdicio < desperdicioMin +× W × L) então

desperdicioMin← desperdicio compMin← comp

pontoEscolhido← ψj

P ← P ∪ {pontoEscolhido}

5.4. Heurística Com e Sem Restrição de Ordem 39

Algoritmo 4: Heurística de empacotamento bidimensional2DLP hi

Entrada: ContêinerF de dimensões (W , L), lista T de itens, cada com dimensões (wi,

li), uma constante booleana ordenaPorComprimento e constantes reaisα, β e γ

Saída: EmpacotamentoP de T em F

Ordena a lista de itens de acordo com o seguinte critério: Dados dois itensr e s da lista T .

se ordenaPorComprimento = Verdadeiro então se (lr - (γ× L) < ls) e (lr+ (γ× L) > ls) então

Colocar e s em ordem não crescente de largura.

senão

Colocar e s em ordem não crescente de comprimento.

senão

se (wr- (γ × W ) < ws) e (wr + (γ× W ) > ws) então

Colocar e s em ordem não crescente de comprimento.

senão

Colocar e s em ordem não crescente de largura. P ← ∅

parai← 1 até |T | faça

ψ ← calculaPontosFronteira(F , P, ti)

se|ψ| = 0 então

Devolva Empacotamento inviável

compMin← L + (α × L) desperdicioMin← W × L

paraj ← 1 até |ψ| faça

comp← coordenada y de ψj

se comp < compMin - (α× L) então

desperdicio← areaPerdida(ψj,ti)

se desperdicio < desperdicioMin +× W × L) então

desperdicioMin← desperdicio compMin← comp

pontoEscolhido← ψj

P ← P ∪ {pontoEscolhido}

5.4. Heurística Com e Sem Restrição de Ordem 40

Descreveremos agora o algoritmo 2DLP ga. Este algoritmo consiste em chamar a heu-

rística de empacotamento2DLP h (ou 2DLP hi) de quatro modos diferentes, até encontrar o

empacotamento da rota ou não conseguir verificar a sua viabilidade: (i) Ordenação por comprimento e o sentido original dos clientes (ii) Ordenação por comprimento e o sentido inverso dos clientes (iii) Ordenação por largura e o sentido inverso dos clientes (iv) Ordenação por largura e o sentido original dos clientes

Inicialmente o 2DLP ga chama a heurística 2DLP h com o parâmetro booleano ordenaPor-

Comprimento definido como verdadeiro. Caso não encontre um empacotamento viável, a fun-

ção inverteListaDeClientes é chamada. Esta função recebe o vetor de clientes C como pa-

râmetro e o inverte, de modo que o primeiro cliente torna-se o último a ser visitado. Para compreender o benefício desta inversão, observe a figura 5.4.

Figura 5.4: Exemplo do empacotamento de uma rota em ambos sentidos.

Nesta figura temos a tentativa do empacotamento dos itens de uma rota através de uma heu- rística Bottom Left Decreasing Width (ver [13]) modificada para considerar a restrição de ordem. A imagem à direita mostra que a heurística não foi capaz de encontrar um empacotamento viá- vel dos itens. Invertendo a ordem de visita dos clientes temos a imagem a esquerda. Note que com esta inversão obtemos um empacotamento viável para a rota utilizando-se da heurística mencionada. Após a inversão do vetor de clientesC, o algoritmo chama novamente a heurística 2DLP h. Caso não encontre um empacotamento viável com a rota invertida, o 2DLP ga tenta

mais duas estratégias: a heuristica2DLP h é chamada com ordenação por largura – parâmetro

5.4. Heurística Com e Sem Restrição de Ordem 41

Algoritmo 5: Algoritmo geral para o empacotamento bidimensional2DLP ga

Entrada: ContêinerF de dimensões (W , L), lista T de itens, cada um com dimensões

(wi,li), um vetor de clientesC associados aos itens em T e constantes reais α,

β e γ

Saída: Valor booleano empacotamentoViavel

ordenaPorComprimento← Verdadeiro

se 2DLPh(F , T , C, ordenaPorComprimento, α, β, γ)6= Empacotamento inviável então

empacotamentoViavel← Verdadeiro

senão

inverteListaDeClientes(C)

se 2DLPh(F , T , C, ordenaPorComprimento, α, β, γ)6= Empacotamento inviável

então

empacotamentoViavel← Verdadeiro

senão

ordenaPorComprimento← Falso

se 2DLPh(F , T , C, ordenaPorComprimento, α, β, γ)6= Empacotamento inviável

então empacotamentoViavel← Verdadeiro senão inverteListaDeClientes(C) se 2DLPh(F , T , C, ordenaPorComprimento, α, β, γ)6= Empacotamento inviável então empacotamentoViavel← Verdadeiro senão empacotamentoViavel← Falso Devolva empacotamentoViavel