tabu search para job shop scheduling - ime.unicamp.brchico/mt852/luispinto.pdf · trata-se de...

13
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.

Upload: vunguyet

Post on 30-Nov-2018

216 views

Category:

Documents


0 download

TRANSCRIPT

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