Trabalho Final
Empacotamento (Bin Packing) Busca Tabu (BT)
Eduardo Simões Lopes Gastal - 141921 Rafael Henkin - 141920
Thiago Winkler Alves - 141946
Problema
Instância: n elementos com tamanhos wi, 1 < i < n, o tamanho de uma caixa W.
Solução: Uma alocação dos elementos para caixas, tal que a soma dos tamanhos dos elementos em cada caixa não ultrapasse W.
Objetivo: Minimizar o número de caixas.
Busca Tabu
Baseada em busca local;
Mantém uma lista de soluções tabu;
Solução tabu depende da regra de ativação tabu;
Permite soluções piores:
Desde que não estejam na lista tabu;
Parâmetros:
Tamanho da lista tabu;
Número máximo de iterações.
Busca Tabu
Geração de nova solução:
Busca local na vizinhança;
Escolhe o melhor vizinho que não está na lista tabu;
Randomização somente em caso extremo:
Todas as soluções possíveis num dado momento estão na lista tabu.
Algoritmo utilizado
Solução Básica Inicial: n caixas, cada uma com um elemento alocado.
Representação da Solução: Lista de caixas, cada uma contendo uma lista de elementos alocados,
ordenados em ordem decrescente de tamanho (i.e.
sempre deixamos os itens mais ”pesados” no ”fundo”
das caixas).
Algoritmo utilizado
Passo Inicial Opcional: Ordena-se a lista de caixas em relação ao espaço alocado de cada caixa.
Constatação: Para a maioria das instâncias, não ordenar a lista no início do processo levou a
resultados melhores.
Entretanto, algumas instâncias chegaram a soluções melhores (algumas ótimas) quando a lista inicial era ordenada.
Busca Local
Lista de m caixas;
Retirar elementos da primeira caixa;
Se há espaço na última caixa, coloca-se nela;
Caso contrário, tenta-se a penúltima e assim por diante;
Repete-se os passos para a segunda caixa, terceira caixa...
Ao final, há uma nova lista de caixas, a Solução Ótima Local, e esta é adicionada à Lista Tabu.
Vizinhança
Primeiro vizinho:
m+1 caixas
nova caixa:
ex:
solução ótima: 3 caixas >> 4 itens, 3 itens, 6 itens.
vizinho: 4 caixas >> 1 item, 4 itens, 3 itens, 5 itens.
Vizinhança
Logo:
Vizinho 1: m+1
Vizinho 2: m+2
Vizinho 3: m+3
...
Vizinho Y: m+Y
Limitado por uma constante y
Vizinhança
(Opcional) Ordenação das caixas contidas em cada vizinho (ordem crescente de espaço ocupado);
Busca local nos vizinhos;
Ordenação dos vizinhos por quantidade de caixas.
Vizinhança
Passos:
Seleciona primeiro vizinho da lista de vizinhos (que está ordenada por quantidade de caixas);
Verifica Lista Tabu;
Se está na Lista Tabu, descartar e testar próximo vizinho;
Caso contrário, esta é a nova solução atual;
Os outros vizinhos são descartados;
Se a nova solução for a melhor até o momento, está é a nova Solução Ótima Global.
Vizinhança
Na Lista Tabu,
Solução [ 1 2 ] [ 3 ]
Solução [ 3 ] [ 1 2 ]
São diferentes!
Duas soluções são iguais se suas listas de caixas são iguais (mesmo tamanho e mesmas caixas na mesma ordem);
Duas caixas são consideradas iguais se possuem o mesmo número de elementos ([ 1 2 ] != [ 3 ]) e o
Vizinhança
Se todas as soluções testadas estão na Lista Tabu,
Retornar à solução básica inicial...
Shuffle nesta solução;
Ex: Shuffle([1] [2] [3]) = [2] [1] [3]
Iniciar novamente com esta nova solução básica.
Extras
Se passarmos z iterações sem obter uma nova Solução Ótima Global,
Gerar uma nova solução através de um Shuffle sobre a Solução Básica Inicial;
Iniciar novamente utilizando a nova solução.
Exemplo
n = 7; W = 6; w1 = 1; w2 = 2; w3 = 2; w4 = 2; w5 = 3; w6 = 3; w7 = 4.
Solução Básica Inicial [1][2][2][2][3][3][4]
Solução Ótima Local [2][3 2][3 2][4 1]
Solução Ótima Global [2][3 2][3 2][4 1]
Lista Tabu [2][3 2][3 2][4 1]
Exemplo
n = 7; W = 6; w1 = 1; w2 = 2; w3 = 2; w4 = 2; w5 = 3; w6 = 3; w7 = 4.
Solução Básica Inicial [1][2][2][2][3][3][4]
Solução Ótima Local [2][3 2][3 2][4 1]
Solução Ótima Global [2][3 2][3 2][4 1]
Lista Tabu [2][3 2][3 2][4 1]
Vizinhança
[1][2][3 2][3 2][4]
Exemplo
n = 7; W = 6; w1 = 1; w2 = 2; w3 = 2; w4 = 2; w5 = 3; w6 = 3; w7 = 4.
Solução Básica Inicial [1][2][2][2][3][3][4]
Solução Ótima Local [2][3 2][3 2][4 1]
Solução Ótima Global [2][3 2][3 2][4 1]
Lista Tabu [2][3 2][3 2][4 1]
Vizinhança
[1][2][3 2][3 2][4]
[2][1][2][3 2][3][4]
Exemplo
n = 7; W = 6; w1 = 1; w2 = 2; w3 = 2; w4 = 2; w5 = 3; w6 = 3; w7 = 4.
Solução Básica Inicial [1][2][2][2][3][3][4]
Solução Ótima Local [2][3 2][3 2][4 1]
Solução Ótima Global [2][3 2][3 2][4 1]
Lista Tabu [2][3 2][3 2][4 1]
Vizinhança
[1][2][3 2][3 2][4]
[2][1][2][3 2][3][4]
[2][2][1][2][3][3][4]
Exemplo
n = 7; W = 6; w1 = 1; w2 = 2; w3 = 2; w4 = 2; w5 = 3; w6 = 3; w7 = 4.
Solução Básica Inicial [1][2][2][2][3][3][4]
Solução Ótima Local [2][3 2][3 2][4 1]
Solução Ótima Global [2][3 2][3 2][4 1]
Lista Tabu [2][3 2][3 2][4 1]
Vizinhança
[1][2][3 2][3 2][4] -> Busca Local -> [2][3 2][3 2][4 1]
[2][1][2][3 2][3][4] -> Busca Local -> [3 2][3 2 1][4 2]
[2][2][1][2][3][3][4] -> Busca Local -> [3 2][3 2 1][4 2]
Exemplo
Ordena-se a lista de vizinhos
Ordem crescente de número de caixas
[2][2][1][2][3][3][4] -> Busca Local -> [3 2][3 2 1][4 2]
[2][1][2][3 2][3][4] -> Busca Local -> [3 2][3 2 1][4 2]
[1][2][3 2][3 2][4] -> Busca Local -> [2][3 2][3 2][4 1]
Exemplo
Ordena-se a lista de vizinhos
Ordem crescente de número de caixas
[2][2][1][2][3][3][4] -> Busca Local -> [3 2][3 2 1][4 2]
[2][1][2][3 2][3][4] -> Busca Local -> [3 2][3 2 1][4 2]
[1][2][3 2][3 2][4] -> Busca Local -> [2][3 2][3 2][4 1]
Testa-se a primeira solução contra a Lista Tabu:
Lista Tabu [2][3 2][3 2][4 1]
Exemplo
Ordena-se a lista de vizinhos
Ordem crescente de número de caixas
[2][2][1][2][3][3][4] -> Busca Local -> [3 2][3 2 1][4 2]
[2][1][2][3 2][3][4] -> Busca Local -> [3 2][3 2 1][4 2]
[1][2][3 2][3 2][4] -> Busca Local -> [2][3 2][3 2][4 1]
Testa-se a primeira solução contra a Lista Tabu:
Lista Tabu [2][3 2][3 2][4 1]
Como não está na lista, é a nova solução ótima local
Exemplo
Solução Ótima Local [3 2][3 2 1][4 2]
Solução Ótima Global [3 2][3 2 1][4 2]
Lista Tabu: [2][3 2 ][3 2][4 1], [3 2][3 2 1][4 2]
Resultado final:
3 caixas
[3 2] [3 2 1] [4 2]
Avaliação Experimental
Instância N1C1W1_A N1W1B1R0 N2C2W1_A N2C2W2_F N2W2B2R2 N2W3B2R6 1196018415 1196016646 1196013689 1196014633 1196015535 1196015536
N N Y Y N N
MAX_STEPS 2000 400 400 400 400 400
RAND_STEPS 250 100 100 100 100 100
TABU_SIZE 1000 150 150 150 150 150
Duração 1.184s 0.224s 1.368s 1.564s 0.900s 0.860s
Resultado 25 18 42 21 14
Seed
Initial Array Shuffled Shuffled Sorted Sorted Sorted Sorted LS Sort?
48 (42)
Onde:
Seed é a semente do gerador randômico;
Initial Array corresponde a solução básica inicial;
LS Sort? indica se o o conjunto de caixas de cada vizinho sofre ou não uma ordenação antes de ser feita a sua busca local;
MAX_STEPS representa o número máximo de iterações que serão realizadas;
RAND_STEPS representa o número de passos que serão realizados até que uma nova solução básica randômica seja gerada (caso não apareça nenhuma nova Solução Ótima Global nesse período de tempo);
Avaliação Experimental
Instância N3C2W4_O N3W3B3R4 N4C3W4_R N4W4B1R6 HARD2 HARD7 1196017511 1196015549 1196028096 1196016090 1196022566 1196020529
Y N Y N Y Y
MAX_STEPS 1000 400 400 400 2000 400
RAND_STEPS 250 100 100 100 250 100
TABU_SIZE 150 150 150 150 500 150
Duração 8.121s 1.244s 4.052s 2.120s 9.273s 1.744s
Resultado 113 29 56 57 (55)
Seed
Initial Array Shuffled Shuffled Shuffled Shuffled Shuffled Shuffled LS Sort?
220 (214) 60 (56)
Onde:
Seed é a semente do gerador randômico;
Initial Array corresponde a solução básica inicial;
LS Sort? indica se o o conjunto de caixas de cada vizinho sofre ou não uma ordenação antes de ser feita a sua busca local;
MAX_STEPS representa o número máximo de iterações que serão realizadas;
RAND_STEPS representa o número de passos que serão realizados até que uma nova solução básica randômica seja gerada (caso não apareça nenhuma nova Solução Ótima Global nesse período de tempo);
TABU_SIZE determina o tamanho da Lista Tabu;
Duração mostra o tempo de duração da execução de cada instância;
Resultado mostra o resultado da aplicação do algoritmo na instância em questão (caso não seja a solução ótima, a