• Nenhum resultado encontrado

O algoritmo FFD recebe como entrada um conjunto G de itens que possuem a mesma altura e devolve como sa´ıda o conjunto de blocos de itens B. Este algoritmo ordena os itens de G crescentemente pela largura obtendo uma lista LI de itens ordenados. O objetivo ´e empacotar os itens de LI dentro do primeiro recipiente que ele couber, respeitando a ordem da lista LI e a sequˆencia de recipientes dispon´ıveis. Desta forma, o primeiro item de LI ´e empacotado dentro do primeiro recipiente dispon´ıvel.

Em seguida, verifica-se o pr´oximo item de LI caber´a dentro do primeiro recipiente dispon´ıvel, somando a largura deste item com a largura de todos os itens que fazem parte do recipiente verificando se o resultado obtido n˜ao excede a capacidade deste recipiente. Em caso afirmativo, o item ser´a empacotado dentro do recipiente. Caso contr´ario, esta mesma an´alise ser´a feita para o pr´oximo recipiente e se repetir´a at´e que o algoritmo consiga encontrar um recipiente para o qual este item possa ser alocado.

Ap´os empacotar todos itens, cada recipiente que possuir pelo menos um item dentro dele ser´a considerado um bloco de item e ser´a inserido dentro do conjunto B. A capacidade atingida de cada recipiente corresponder´a `a largura deste bloco de item. J´a altura do bloco ser´a igual `a altura de seus itens. O algoritmo 4 descreve a heur´ıstica para Recipientes em linhas gerais.

5.3

Heur´ıstica de Torre

A heur´ıstica de Torre obt´em um empacotamento est´avel de itens formando uma ou v´arias torres de itens dentro de seu empacotamento. Temos uma torre quando um item i de dimens˜oes (li, ci, oi) ´e empacotado no ponto p(a, b) e um item j de dimens˜oes (lj, cj, oj),

tal que lj ≤ li, ´e empacotado no ponto p1(a, b + ci). Para obtermos um empacotamento

utilizando esta heur´ıstica adotamos a seguinte estrat´egia.

Primeiro ordenamos os itens em ordem n˜ao crescente de largura e obtemos a lista S que cont´em os itens ordenados. Seja o item S(1) de dimens˜oes (l1, c1) o primeiro item

desta lista, selecionamos este item e o empacotamos no ponto (0, 0) do recipiente.

Quando empacotamos o item S(1) obtemos a primeira faixa vertical que se localizar´a na reta x = l1. Faixa vertical ´e uma reta vertical que delimita as faixas de intervalos na

largura do recipiente em que os itens podem ser empacotados. Cada uma destas faixas de intervalo geradas possuir´a uma altura que corresponde `a altura do empacotamento que se encontra dentro desta faixa. Ao empacotar o item S(1) no ponto (0,0) obtemos 2 faixas de intervalo, a primeira se localiza no intervalo de largura que vai de [0,l1) e a segunda

5.3. Heur´ıstica de Torre 49

fica no intervalo [l1,L], onde L ´e largura do recipiente. Como empacotamos o item S(1)

na primeira faixa, neste momento a altura desta faixa ser´a c1, j´a a outra faixa, que n˜ao

possui nenhum item empacotado, possuir´a altura 0. A altura de cada faixa sempre ser´a a soma das alturas dos itens que est˜ao empacotados dentro dela.

A id´eia desta heur´ıstica ´e de sempre tentar empacotar um item da lista S na faixa de largura que apresentar a menor altura e que caiba este item. Posteriormente descobrimos que Morabito & Arenales [35] utiliza o carreagamento em pilhas baseado na solu¸c˜ao de problemas da mochila que possui id´eia an´aloga a heur´ıstica de torre.

A heur´ıstica de torre pode possuir uma ou v´arias faixas verticais. Ela possuir´a uma faixa vertical somente quando o primeiro e o segundo item a serem empacotados possu´ırem larguras iguais a metade da largura do recipiente. As faixas verticais s˜ao obtidas sempre que conseguimos empacotar um item no solo. Para descobrir qual ser´a a reta correspon- dente a esta nova faixa vertical basta somar a largura deste ´ultimo item empacotado no solo com o valor da ´ultima faixa vertical.

Ap´os empacotarmos todos os itens, verificamos qual faixa de largura que possui a maior altura e assim encontramos a altura do empacotamento.

Esta heur´ıstica tamb´em respeita a ordem ou prioridade que cada item possui no empa- cotamento. Para garantir esta ordem, ap´os obter o empacotamento, pegamos cada faixa de largura e ordenamos os itens dentro da sua respectiva faixa em ordem decrescente da ordem o dos itens. Garantimos que este empacotamento ser´a est´avel empacotando cada item desta faixa de forma que o centro de gravidade de cada item desta faixa esteja exatamente acima do centro de gravidade do item que se localiza imediatamente abaixo. A heur´ıstica de Torre pode receber como entrada tanto um conjunto de itens I ou conjunto de blocos de itens B e devolve como solu¸c˜ao um empacotamento E. O algoritmo 5 descreve, em linhas gerais, a heur´ıstica de Torre.

(a) (b) (c) 1 2 3 4 5 6

5.3. Heur´ıstica de Torre 50

Algoritmo 5: Heur´ıstica de Torre

Entrada: Um conjunto de itens I e o recipiente R Sa´ıda: Retorna um empacotamento E

Seja S uma ordena¸c˜ao dos itens de I de forma n˜ao-crescente em li, onde i ∈ I.

5.1

it ← 1; // Seja it o item atual;

5.2

Seja N um conjunto de faixas de intervalo da largura do recipiente ordenadas crescentemente

5.3

em x.

N (0)l← S(it)l;

5.4

larguraInicialDaP roximaF aixa ← 0;

5.5

atingiuLarguraRecipiente ← F ALSE;

5.6

enquanto S 6= ∅ fa¸ca

5.7

se (larguraInicialDaP roximaF aixa < R.L) AND

5.8

(atingiuLarguraRecipiente = F ALSE) ent˜ao

k ← 0; // k ´e o primeiro n´ıvel que cabe o item S(it);

5.9

enquanto k ≤ ultimoN ivel fa¸ca

5.10

k ← k + 1;

5.11

se (atingiuLarguraRecipiente = T RU E) AND

5.12

(larguraInicialDaP roximaF aixa + S(it).l <= R.L) ent˜ao atingiuLarguraRecipiente ← F ALSE; k ← 0;

5.13

while k ≤ ultimoN ivel do

5.14

k ← k + 1;

5.15

se (atingiuLarguraRecipiente = T RU E) OR (R.L for ultrapassada) ent˜ao

5.16

atingiuLarguraRecipiente ← T RU E;

5.17

Seja j a faixa de intervalo de largura de menor altura;

5.18

empacota S(it) na faixa N (j) em E;

5.19

atualiza a altura de N (j);

5.20

retira S(it) da lista; it ← it + 1;

5.21

se atingiuLarguraRecipiente = F ALSE ent˜ao

5.22

se k > ultimoN ivel ent˜ao

5.23

ultimoN ivel ← ultimoN ivel + 1; N (k)l← S(it)l;

5.24

N (k)x← larguraInicialDoP roximoN ivel;

5.25

larguraInicialDoP roximoN ivel ← larguraInicialDoP roximoN ivel + N (k)l;

5.26

empacota S(it) no n´ıvel N (k) em E;

5.27

atualiza a altura de N (k);

5.28

retira S(it) da lista; it ← it + 1;

5.29

devolva Empacotamento E;

5.30

A figura 5.2 mostra um exemplo de empacotamento obtido pela heur´ıstica de Torre. Na figura 5.2.(a) temos o recipiente no qual os itens devem ser empacotados. Em 5.2.(b) temos

Documentos relacionados