Post on 30-Nov-2018
Tabu Search para Job Shop Scheduling
1. Introdução Este documento tem como objetivo apresentar o projeto desenvolvido para a matéria MT852 -
Tópico em Pesquisa Operacional no 1º Semestre de 2009.
Ao longo do curso, foram apresentadas diversas metaheurísticas (Tabu Search, Ant Colony
Optimization, Simulated Annealing,etc.) e suas muitas aplicações. Foi proposto que, ao final do
semestre, cada aluno deveria selecionar uma metaheurística entre as apresentadas e uma
aplicação prática para a mesma. Deveria se em seguida planejar e executar um projeto
computacional para demonstração da metaheurística escolhida. O aluno poderia adotar uma
publicação relevante ao assunto para basear a sua implementação.
Neste âmbito, o projeto que será apresentado demonstra uma aplicação da metaheurística Tabu
Search para problemas do tipo Job Shop Scheduling. Muitos artigos foram consultados ao longo do
desenvolvimento do projeto, porém as principais características adotadas para a aplicação
computacional vêm do artigo escrito em abril 1994 (e revisado em Junho de 1996) por John B.
Chambers e J. Wesley Barnes que leva o título “New Tabu Search Results for the Job Shop
Scheduling Problem” (livremente traduzido para “Novos resultados em Tabu Search para
problemas de Job Shop Scheduling”).
2. Tabu Search Tabu Search é uma metaheurística de busca local. Na busca por um equilíbrio entre intensificação
e diversificação, uma estrutura de memória especializada é utilizada, o que também lhe fornece
mecanismo de evitar mínimos locais.
A partir de uma solução x, o Tabu Search utiliza procedimentos de busca na vizinha de x para obter
possíveis novas soluções. No entanto para que uma nova solução seja adotada ela não pode
pertencer a lista de movimentos “tabu”, ou seja, ela deve ser um movimento permitido.
Assim que um novo x’, é encontrado adiciona-se a lista tabu características do movimento que
levou a esta nova solução, com intuito de impedir que, nos próximos movimentos, voltemos ao
nosso x original. Estes movimentos “tabus” são mantidos na lista por um número definido de
iterações.
Alguns critérios de aspiração podem ser adotados para que um movimento possa ser adotado
mesmo sendo tabu, como por exemplo, se este movimento gera uma solução melhor do que
qualquer uma obtida até então.
3. Job Shop Scheduling Job Shop Scheduling Problem (JSSP), como é comumente denominado, trata do problema em que
temos n tarefas (Jobs) que devem ser processadas (até o fim) em m máquinas (machines)
independentes. Para cada tarefa, um conjunto de operações (seqüências) deve ser realizado em
uma seqüência fixa de máquinas distintas e conhecidas a priori. O tempo de processamento em
cada máquinas também é fixo e conhecido a priori, e independe da seqüência de operações
realizadas nas máquinas. Todas as máquinas estão disponíveis desde o início e são processadas
sem tempo de setup. O objetivo adotado neste projeto é o de minimizar o tempo máximo de
realização de todas as tarefas (conhecido como makespan). O número total de operações será a
soma das seqüências de máquinas de todas as tarefas.
JSSP irrestrito, ou seja, sem restrições de tarefas e máquinas, é fortemente NP-Hard [Garey,
Johnson and Sethi 1976; Garey and Johnson 1979].
4. Representação como Grafo É comum na literatura representar o problema de Job Shop Scheduling na forma de um grafo
(V,A). A sua representação se dá da seguinte maneira:
Cada uma das operações é mapeada diretamente aos vértices dos grafos. Em seguida são
adicionados arcos direcionados entre operações que possuem precedência direta (ou seja, duas
operações que pertencem a uma mesma tarefa em que uma operação precede a outra na
seqüência de máquinas), de maneira que uma operação precedente é a origem do arco e o
destino a operação precedida (veja Figura 1 retirada de [RINTANEN 2004]).
Figura 1: Passo 1 na representação de JSSP na forma de grafo
Em seguida deve se adicionar arcos direcionados entre todas as operações referentes a uma
mesma máquina. Estes arcos devem ser adicionados de maneira a não formar nenhum ciclo (veja
Figura 2 e Figura 3).
Figura 2: Representação de um JSSP na forma de grafo
A partir deste grafo é possível avaliar o makespan do JSSP, adicionando-se dois vértices
imaginários: um deles (s) ligado a todos os vértices por arcos que possuem sua origem nele; e
outro vértice (t) ligado a todos os outros vértices com arcos com destino nele.
Figura 3: Reorganização da representação
Considerando que o peso de cada arco direcionado é o tempo de processamento da operação
origem, podemos calcular o makespan buscando o caminho mais longo possível entre s e t.
Um algoritmo eficiente e com pouco consumo de memória pode ser encontrado em [Michiels,
Aarts, Korst 2006].
5. Estratégias e Parâmetros Adotados Existem muitas estratégias e parâmetros que podem ser utilizados/modificados para melhorar a
eficácia do Tabu Search. São apresentadas abaixo algumas estratégias adotadas e comparadas
neste projeto:
Múltiplos geradores de solução inicial
Foram adotadas duas entre muitas possíveis heurísticas construtoras de solução inicial: SPT
(Shortest Processing Time) e LPT (Longest Processing Time).
A primeira estratégia busca entre as tarefas ainda não agendadas aquela que apresenta o menor
tempo de processamento total e realiza o seu agendamento de maneira a garantir sua
precedência com relação a todas as outras tarefas ainda não agendadas.
A segunda estratégia é semelhante, porém a tarefa a ser agendada é aquela que possui o maior
tempo de processamento total.
Busca de movimentos
A geração da vizinhança de soluções e, conseqüentemente, a lista de possíveis movimentos a
serem realizados, é gerada a partir do caminho critico (critical path), também obtido a partir do
grafo do JSSP. Ao calcular o makespan, guarda-se o caminho de vértices mais longo do grafo. A
inversão de um arco (que liga operações de tarefas diferentes) pertencente a este caminho gera
uma solução factível e, possivelmente, melhor que a anterior. A inversão de arcos não
pertencentes ao caminho crítico não pode render uma solução melhor que a atual (veja [Balas
1969; van Laarhoven, Aarts, and Lenstra 1992] e, eventualmente, infactibiliza a solução.
Estratégia “Best move”
Foi adotada a estratégia de escolher o melhor movimento entre a lista de movimentos possíveis
para obter-se a nova solução. Isto se deve a um ao critério de parada da busca adotado, que foi o
número de iterações e não tempo gasto.
Critério de Aspiração: Melhor solução até o momento
O critério de aspiração adotado autoriza a utilização de um movimento tabu se ao adotá-lo, a
solução obtida é melhor do que todas até o momento.
Critério Tabu
Após um movimento (inversão de um arco), o movimento que reverte este (uma nova inversão de
arco) é considerado Tabu.
Tamanho de lista variável de maneira determinística e dinâmica
O tamanho da lista tabu será variável e limitado a dois parâmetros (stm_lo e stm_hi, que assumem
inicialmente os valores pré-definidos stm_lo_original e stm_hi_original). Ao obter-se uma nova
solução, se esta apresentar melhora em relação à última, devemos diminuir o tamanho da lista
(para intensificar a busca). Caso contrário, devemos aumentar o tamanho da lista numa tentativa
de buscar outras regiões. Um esboço do algoritmo (incluindo passos de outras estratégias
adotadas) segue abaixo.
AjusteNoTamanhoDaLista{ Se ( ValorNovaSolucao < ValorSolucaoAntiga ) então
Se( TamanhoDaListaTabu > stm_lo ) então TamanhoDaListaTabu = TamanhoDaLista – 1; fim-se Se ( ValorNovaSolucao < ValorMelhorSolucao ) então SolucoesSemMelhora = 0; fim-se
CasoContrário Se( TamanhoDaListaTabu < stm_hi ) então TamanhoDaListaTabu = TamanhoDaLista + 1; fim-se SolucoesSemMelhora++; Se(SolucoesSemMelhora > LimiteSemMelhora) então Diversificação() fim-se
fim-se }
Estratégia de diversificação (devido a movimentos sem melhora)
Uma estratégia adotada para estimular a diversificação de soluções, utiliza um mecanismo de
gerador de históricos. Trata-se de armazenar numa lista LIFO (last in, first out) soluções que ao
serem encontradas representavam as melhores soluções até aquele momento. Se após um
número determinado de movimentos não houver melhora na melhor solução, a última solução
inserida na pilha é recuperada e a lista tabu é zerada. Um esboço do algoritmo (incluindo passos
de outras estratégias adotadas) segue abaixo.
Diversificação{ Se( ListaDeSolucoesDeMelhora não vazia) então
ÚltimaSolução = RetiraÚltimaInserida(ListaDeSolucoesDeMelhora); SoluçãoAtual = ÚltimaSolução ; stm_lo = stm_lo_original; stm_hi = stm_hi_original; TamanhoDaListaTabu = stm_hi; SolucoesSemMelhora = 0; Esvazia(ListaTabu); Esvazia(HistóricoDeMakespan);
fim-se }
Estratégia de anti-ciclagem
Para evitar ciclagem, são armazenados os últimos 30 makespans encontrados em soluções. A cada
nova solução é verificado se a seqüência dos últimos 5 makespans e o novo makespan já foi
encontrada na mesma ordem entre os armazenados. Caso sim, aumenta-se o stm_lo em 1. Se
stm_lo for = stm_hi, então a mesma estratégia (acima) de diversificação é adotada. . Um esboço
do algoritmo (incluindo passos de outras estratégias adotadas) segue abaixo.
AntiCiclagem{ Se(stm_lo >= stm_hi) então Diversificação() CasoContrário stm_lo++; TamanhoDaListaTabu = stm_hi; Esvazia(HistóricoDeMakespan); fim-se }
6. Estudo para determinar o tamanho da lista tabu Muitos artigos referentes a aplicações de Tabu Search em Job Shop Scheduling dedicam muitas
linhas para explicar os critérios adotados para a utilização de um tamanho de lista tabu ou outro.
Alguns sugerem valores aleatórios, enquanto que outros preferem utilizar-se de fórmulas
baseados nas características do problema (número de tarefas, máquinas ou operações, por
exemplo).
Na tentativa de melhorar o desempenho da metaheurística frente ao meu problema mais difícil
(FT10), o tamanho do caminho crítico encontrado a cada iterações foi medido (veja Figura 4). A
média do tamanho foi de 19,6.
Figura 4: Tamanho do caminho crítico
É possível verificar que a partir da iteração 200, o tamanho do caminho crítico é limitado pelo
mínimo 15 e máximo 25 (vide Figura 5).
Figura 5: Tamanho crítico com limitantes de 15 e 25
A partir dessa informação, foi estipulado que:
A lista tabu para este problema não deveria ultrapassar 25 para evitar bloquear todos os possíveis movimentos críticos. Para tal, stm_hi_original (tamanho máximo da lista tabu não ultrapassa 25).
0
10
20
30
40
50
60
15
11
01
15
12
01
25
13
01
35
14
01
45
15
01
55
16
01
65
17
01
75
18
01
85
19
01
95
11
00
11
05
11
10
11
15
11
20
11
25
11
30
11
35
11
40
11
45
11
50
11
55
11
60
11
65
11
70
11
75
11
80
11
85
11
90
11
95
12
00
12
05
12
10
12
15
12
20
12
25
12
30
12
35
12
40
12
45
12
50
12
55
12
60
12
65
12
70
12
75
12
80
12
85
12
90
12
95
1
0
10
20
30
40
50
60
1 51
10
11
51
20
12
51
30
13
51
40
14
51
50
15
51
60
16
51
70
17
51
80
18
51
90
19
51
10
01
10
51
11
01
11
51
12
01
12
51
13
01
13
51
14
01
14
51
15
01
15
51
16
01
16
51
17
01
17
51
18
01
18
51
19
01
19
51
20
01
20
51
21
01
21
51
22
01
22
51
23
01
23
51
24
01
24
51
25
01
25
51
26
01
26
51
27
01
27
51
28
01
28
51
29
01
29
51
Uma lista tabu muito pequena (<< 15) seria pouco eficaz frente a um caminho crítico maior que este tamanho. Para evitar isto, o menor tamanho máximo da lista tabu foi de 15.
7. Aplicação Computacional A aplicação computacional foi construída em Java e o framework open source OpenTS da COIN-OR
(http://www.coin-or.org/Ots/index.html) foi usada como base.
O também open source JUNG — the Java Universal Network/Graph Framework, foi usado para
construção de visualizações de soluções (vide Figura 6).
Figura 6: Grafo Solução do Problema LA01
Um notebook com processador Intel Core 2 Duo T5250 a 1.5 GHz e 2 GB de memória RAM
rodando Windows Vista Ultimate foi usado para executar a metaheurística.
Três problemas bastante citados na literatura (FT06, FT10 e LA01) foram usados para os testes.
FT06 possui 6 Tarefas e 6 Máquinas. FT10 (um problema proposto em 1963, porém apenas
resolvido na década de 80, e historicamente considerado difícil) possui 10 tarefas e 10 máquinas.
Por último, o problema LA01 possui 10 Tarefas e 5 Máquinas. Estes problemas podem ser
considerados de pequeno, grande e médio porte, respectivamente.
Foram comparadas rodadas do Tabu Search com limitante de 3000 iterações e variando alguns
parâmetros do mesmo:
1) Tabu Search com tamanho de lista tabu fixo (7, 10 e 15, sugeridos na literatura).
2) Tabu Search com tamanho de lista tabu variável de maneira determinística e dinâmica (3 a
15, 7 a 15, 7 a 25 e 15 a 25).
3) Tabu Search com tamanho de lista tabu variável de maneira determinística e dinâmica (7 a
15, 7 a 25 e 15 a 25), com estratégia de diversificação (devido a 700 ou 200 movimentos
sem melhora) e estratégias anti-ciclagem.
8. Resultados As tabelas abaixo apresentam os resultados obtidos.
Tabela 1: Lista Tabu simples
Tabela 2: Lista Tabu dinâmica e reativa
Tabela 3: Lista Tabu dinâmica e reativa com estratégias de diversificação e anti-ciclagem
Problema Ótimo Iterações Tempo makespan s/i ter. Iterações Tempo makespan s/i ter. Iterações Tempo makespan s/i ter
FT06 6x6 55 100 5,6 0,06 110 6,1 0,06 36 3,8 0,11
FT10 10x10 930 3000 4614,4 1032 1,54 3000 4794,2 991 1,60 3000 4493,6 1018 1,50
LA01 10x5 666 364 101,1 0,28 481 131,4 0,27 581 158,1 0,27
Simples (TABU = 7) Simples (TABU = 10) Simples (TABU = 15)
Problema Ótimo Iterações Tempo makespan s/i ter. Iterações Tempo makespan s/i ter.
FT06 6x6 55 3000 212,5 58 0,07 497 25,9 0,05
FT10 10x10 930 3000 4776,8 1058 1,6 3000 4427,4 977 1,5
LA01 10x5 666 3000 889,4 678 0,3 471 131,7 0,3
Problema Ótimo Iterações Tempo makespan s/i ter. Iterações Tempo makespan s/i ter.
FT06 6x6 55 140 7,6 0,05 423 24,0 0,06
FT10 10x10 930 3000 4607,6 977 1,54 3000 4658,9 990 1,55
LA01 10x5 666 471 141,1 0,30 402 113,3 0,28
Dinamica (15-25)
Dinamica (3-15) Dinamica (7-15)
Dinamica (7-25)
Problema Ótimo Iterações Tempo makespan s/i ter. Anti -Ciclo Divers i fica
FT06 6x6 55 497 26,4 0,05 0 0
FT10 10x10 930 3000 4525 951 1,51 2 0
LA01 10x5 666 471 131,4 0,28 0 0
Problema Ótimo Iterações Tempo makespan s/i ter. Anti -Ciclo Divers i fica
FT06 6x6 55 423 22,01 0,05 0 0
FT10 10x10 930 3000 3200 969 1,07 0 2
LA01 10x5 666 402 111,5 0,28 0 0
Problema Ótimo Iterações Tempo makespan s/i ter. Anti -Ciclo Divers i fica
FT06 6x6 55 140 7,6 0,05 0 0
FT10 10x10 930 3000 3024 997 1,01 0 1
LA01 10x5 666 471 130,3 0,28 0 0
Diversificação (700) Anti-Ciclagem Dinamica (7-15)
Diversificação (200) Anti-Ciclagem Dinamica (15-25)
Diversificação (200) Anti-Ciclagem Dinamica (7-25)
Como esperado, o problema FT10 apresentou a maior dificuldade de resolução. Mesmo adotando
estratégias mais avançadas de diversificação e anti-ciclagem a metaheurística não obteve a
solução ótima.
Os gráficos abaixo comparam o desempenho para as diversas configurações adotadas.
Figura 7: Número de iterações até o ótimo
0
100
200
300
400
500
600
Simples (TABU =
7)
Simples (TABU =
10)
Simples (TABU =
15)
Dinamica (3-15)
Dinamica (7-15)
Dinamica (7-25)
Dinamica (15-25)
Div (700) AC
Dinamica (7-15)
Div (200) AC
Dinamica (15-25)
Div (200) AC
Dinamica (7-25)
FT06
Figura 8: Número de iterações até o ótimo
Obs: Para os problemas FT06 e LA01, a estratégia Dinâmica (3-15) não obteve solução ótima em
3000 iterações, demonstrando sinais de ciclagem. Logo, não possui valor para apresentar nas
tabelas acima.
Por fim, o gráfico abaixo compara o melhor makespan obtido para cada uma das configurações
adotadas para o problema FT10.
0
100
200
300
400
500
600
700
Simples (TABU =
7)
Simples (TABU =
10)
Simples (TABU =
15)
Dinamica (3-15)
Dinamica (7-15)
Dinamica (7-25)
Dinamica (15-25)
Div (700) AC
Dinamica (7-15)
Div (200) AC
Dinamica (15-25)
Div (200) AC
Dinamica (7-25)
LA01
Figura 9: Melhora Makespan obtido para cada configuração em 3000 iterações
9. Conclusões Para problemas de pequeno e médio porte, a metaheurística Tabu Search oferece plenas
condições de obter a solução ótima em tempo hábil. Não seriam necessárias muitas modificações
para obter um resultado satisfatório.
Para o problema FT10, considerado de grande porte, é necessário um “tunning” refinado de
parâmetros e estratégias, caso contrário, a metaheurística pode apresentar ciclagem, ou
dificuldade na busca pela solução ótima. Na Figura 10, é apresentado o valor do makespan para
cada iteração realizada na configuração Diversificação a cada 700 iterações sem melhora, anti-
ciclagem e lista tabu dinâmica de 7-15. É fácil perceber que o espaço de solução com GAP ótimo
entre 10%-20% é bastante grande e que a metaheurística teve dificuldades de ultrapassar estas
barreiras.
Outra observação é que as estratégias anti-ciclagem e diversificação foram pouco acionadas. Duas
hipóteses para isto são plausíveis:
Os parâmetros adotados para o acionamento das estratégias foi ruim.
O número de iterações foi pequeno comparado com o necessário para que as estratégias
fossem eficazes.
A primeira hipótese é mais fraca, dado que os valores utilizados foram obtidos de artigos.
880
900
920
940
960
980
1000
1020
1040
1060
1080
Simples (TABU =
7)
Simples (TABU =
10)
Simples (TABU =
15)
Dinamica (3-15)
Dinamica (7-15)
Dinamica (7-25)
Dinamica (15-25)
Div (700) AC
Dinamica
(7-15)
Div (200) AC
Dinamica
(15-25)
Div (200) AC
Dinamica
(7-25)
FT10
Já a segunda hipótese parece mais realista, pois em [CHAMBERS e BARNES, 1996] a metaheurística
adotada conseguiu resolver o problema FT10 em tempo hábil.
Figura 10: Makespan obtido a cada iteração
10. Bibliografia BALAS, E. 1969. Machine sequencing via disjunctive graphs: An implicit enumeration algorithm.
Operations Research, 17, 941-957.
CHAMBERS, J.B., AND J.W. BARNES. 1996. New tabu search results for the job shop scheduling
problem. http://citeseer.ist.psu.edu/chambers96new.html
GAREY, M.R., D.S. JOHNSON, and R. SETHI. 1976. The complexity of flowshop and jobshop
scheduling. Mathematics of Operations Research, 1, 117-129.
GAREY, M.R., and D.S. JOHNSON. 1979. Computers and Intractability: A Guide to the Theory of NP-
Completeness. W.H. Freeman, New York.
MICHIELS, W., AARTS, E. AND Jan KORST. 2006. Theoretical aspects of local search. Springer.
RINTANEN, Jussi . July 21, 2004. Principles of AI Planning: Scheduling Lecture 20.
http://www.informatik.uni-freiburg.de/~ki/lehre/ss04/aip/lecture23.4.pdf
VAESSENS, R.J.M., E.H.L. AARTS, AND J.K. LENSTRA. 1994. Job shop scheduling by local search.
Memorandum COSOR 94-05, Department of Mathematics and Computing Science,
Eindhoven University of Technology.
0
500
1000
1500
2000
2500
3000
1
10
1
20
1
30
1
40
1
50
1
60
1
70
1
80
1
90
1
10
01
11
01
12
01
13
01
14
01
15
01
16
01
17
01
18
01
19
01
20
01
21
01
22
01
23
01
24
01
25
01
26
01
27
01
28
01
29
01
FT10