VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood...

37
VARIABLE NEIGHBOURHOOD SEARCH Nuno Miguel Duarte Sequeira André Optimization and decision support techniques PDEEC 2007

Transcript of VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood...

Page 1: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

VARIABLE NEIGHBOURHOOD

SEARCH

Nuno Miguel Duarte Sequeira André

Optimization and decision support techniquesPDEEC 2007

Page 2: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Introdução

● A meta-heurística VNS (Variable Neighbourhood Search) é bastante recente

● Esta meta-heurística tem por base a pesquisa em vizinhanças diferentes

● Nesta exploração o objectivo será descer até mínimos locais e tentar escapar dos vales que os contêm

Page 3: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Pesquisa local● A meta-heurística VNS faz uso da pesquisa

local● Uma pesquisa local consiste na movimentação

de uma solução para a outra de acordo com regras pré estabelecidas

● Uma estratégia de pesquisa local possível começa com uma solução arbitrária e em cada passo uma nova solução é escolhida sendo testada

Page 4: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Vizinhança● Isto pressupõe a escolha de uma vizinhança

que pode ser considerada como todas as soluções que se obtêm ao fazer uma troca 2opt por exemplo

● Podemos testar todas as possibilidades de uma vizinhança, nesse caso vamos explorar totalmente a vizinhança

● Para descer até um mínimo local podemos tentar alterações aleatórias ou sistemáticas do caminho e testar se essa solução é menor que a actual

Page 5: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Vizinhança● Temos assim a função F(x) que queremos

minimizar, na vizinhança V(xn) encontramos o mínimo local xn mas temos um vale próximo

Page 6: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Vizinhança● Com as alterações aleatórias podemos ou não

conseguir achar melhoria, mas se não acharmos melhoria não garantimos que chegamos ao mínimo local da vizinhança, a não ser que exploremos a vizinhança toda, o que é mais complicado de fazer com números aleatórios

● Com uma pesquisa sistemática podemos pesquisar até não conseguirmos melhoria, assim sendo chegamos ao mínimo local

Page 7: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Introdução

● Para conseguir chegar a um vale temos de implementar alguma forma de pesquisa que deve ser bastante rápida

● No VNS podemos considerar dois tipos de evolução na pesquisa– Steepest descent - descida mais inclinada– First descent - primeira descida

Page 8: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Steepest Descent

● Escolhemos uma vizinhança

● (Repetir)● Testamos a vizinhança completamente● Achamos o mínimo da vizinhança● Esse mínimo passa a ser a nova solução

Page 9: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

First Descent

● Escolhemos uma vizinhança

● (Repetir)● Testamos a próxima alteração● Se for menor que a solução actual essa passa

a ser a nova solução

Page 10: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Variable Neighbourhood Descent

● A combinação das duas heurísticas anteriores dá origem ao VND (Variable Neighbourhood Descent)

● Ao aplicar o VND vamos tentar chegar ao mínimo local o mais rápido possível em termos de descida, não em termos de tempo computacional

● Em cada alteração de solução queremos a maior descida possível

Page 11: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Variable Neighbourhood Descent

● Devemos antes de aplicar fazer as seguintes questões:– Qual a complexidade das diferentes trocas– Qual a melhor ordem para as aplicar– São as trocas consideradas suficientes para

permitir uma exploração satisfatória da solução?– Quão precisa queremos que a solução seja

Page 12: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Variable Neighbourhood Descent● Ao aplicar o VND devemos conseguir chegar a

um mínimo local em tempo útil ● Quando chegamos ao mínimo local quer dizer

que nas vizinhanças exploradas no VND não conseguimos melhorar, sendo assim podemos tentar o mesmo tipo de trocas que nunca conseguiremos sair do vale

● Isto é problemático no sentido em que geralmente usamos trocas simples para o VND

Page 13: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Variable Neighbourhood Descent● Para sair do vale e tentar achar um mais

profundo teremos inevitavelmente de usar trocas mais complexas 3opt, 4opt, 5opt ou outras, gerando assim vizinhanças mais distantes

● O grande problema que temos com estas trocas mais complexas é que para explorarmos sistematicamente a vizinhança temos muito mais combinações possíveis, logo o tempo de pesquisa vai crescer

Page 14: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Reduced VNS● No entanto o VNS apresenta uma solução● Fazemos uma troca mais complexa obtendo

assim uma possível solução, de seguida fazemos uma pesquisa local, na expectativa de que consigamos uma melhoria de relativamente ao mínimo encontrado pelo VND

● Esta troca é designada por Reduced VNS● O Reduced VNS seguido de uma pesquisa

local designa-se por Basic VNS

Page 15: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

General VNS● Se usarmos o Reduced VNS seguido de uma

pesquisa VND teremos assim o General VNS, foi esta a meta-heurística implementada

Page 16: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Exemplo VNS

Page 17: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Tipos de VNS

● Basic VNS - É considerado quando usamos uma pesquisa RVNS seguida de uma pesquisa simples das vizinhanças

● General VNS - É considerado quando usamos uma pesquisa RVNS seguida de uma pesquisa VND

● Na implementação pode-se determinar em minutos quanto tempo é que o RVNS vai correr.

Page 18: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Implementação

● Para o TSP criei quatro heurísticas baseadas em dois tipos de trocas simples.

● 2opt● Troca de cidade

Page 19: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

2opt● O 2opt é bastante simples e é já conhecido

Page 20: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Troca de Cidade● A troca da cidade é melhor explicada no vector

solução

● Escolhe-se uma cidade e qual o ramo onde a vamos introduzir

Page 21: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Troca de Cidade (Exemplo)

● Por exemplo se tivermos a solução: 0 1 2 3 4 5 6● Se escolhermos a cidade na posição 5 e a

quisermos colocar no ramo na posição 0 (ramo entre a posição 0 e 1) ficará

0 5 1 2 3 4 6

Page 22: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Implementação● Para estas duas heurísticas implementei o

steepest descent e o first descent● A cada método é passado o limite de iterações,

como o método termina ao fim de uma iteração em que não consiga melhorar a solução poderíamos pedir infinitas iterações

● A solução inicial é a dada pela heurística do vizinho mais próximo com início no nó zero

steepestdescent2opt(caminho, x.length);firstdescent2opt(caminho);steepestdescentmovecidade(caminho, x.length);firstdescentmovecidade(caminho, 0);

Page 23: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Implementação● Para a heurística de cidade firstdescent

podemos definir uma quantidade de iterações baseadas em números aleatórios, para serem tentados antes da pesquisa sistemática, esta opção nunca foi usada neste trabalho

● As duas heurísticas firstdescent só param quando não conseguem melhoria

steepestdescent2opt(caminho, x.length);firstdescent2opt(caminho);steepestdescentmovecidade(caminho, x.length);firstdescentmovecidade(caminho, 0);

Page 24: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Implementação● Optei por usar o steepest descent primeiro para

nos encaminhar o mais rapidamente possível para o vale mais profundo

● Embora consuma mais tempo, pois é preciso uma iteração para haver um avanço, o avanço será sempre o maior e deve ser usado quando temos uma solução não aleatória

● De seguida uso o first descent para tentar descer ainda mais no vale

● Isto para o 2opt

Page 25: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Implementação

● Com a troca de cidade consegue-se melhorar a solução obtida por 2opt, mas geralmente executa menos iterações, porque grande parte do trabalho de descida já foi feito antes

● Inevitavelmente vai-se chegar a um mínimo local. Embora com o problema de 29 nós consiga chegar à solução óptima, o mesmo não acontece para os outros.

Page 26: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Implementação● Para sair do vale em que nos encontramos

vamos usar o RVNS (Reduced Variable Neighbourhood Search)

● Implementei duas técnicas para isto:– Gero uma troca aleatória na solução inicial e realizo

uma pesquisa VND, se melhorar passa a ser a nova solução (denominei esta técnica de RVNS)

– Gero uma troca aleatória na solução inicial e realizo uma pesquisa VND, gero outra troca aleatória no caminho gerado anteriormente e realizo uma pesquisa VND (denominei esta técnica de RVNS cascata)

Page 27: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Implementação

● Cada tentativa gera sempre uma solução pior seja no RVNS ou no RVNS cascata, mas esta é a única maneira de sair do vale

● Só depois de correr o VND sabemos se chegamos a um vale mais profundo

Page 28: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Implementação

● Quanto mais complexa for a troca mais distante é a vizinhança e mais longe ficará o vale a que vamos tentar aceder.

● Sendo assim começa-se com trocas simples e depois evolui-se para trocas mais complexas

Page 29: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

GVNS

Os dois tipos de RVNS contam com uma função que consegue realizar qualquer troca do tipo kopt, mas implementei trocas 2opt, 3opt, 4opt, 5opt e 6opt

● Todos serão seguidos de uma pesquisa VND● Pode-se definir qual o tempo de

processamento desejado, sendo que este será dividido igualmente entre cada troca

Page 30: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Tempos de execução VND● Para um máximo de iterações igual ao nº de

nós

53 1002 18512

Iterações

Steep 2opt 10 4,6 46 165 29921,21 4937000 N/A >8h N/AFirst 2opt 2 16 32 2 30000 60000 N/A N/A N/A

5 6,2 31 29 60620,69 1758000 N/A N/A N/A2 8 16 2 60 120 N/A N/A N/A

Tempo total < 1s 114m 36s N/A429 271713 N/A

Algoritmo

Instância

Tempo por iter.

(ms)

Tempo Total (ms)

Iterações Tempo por iter. (ms)

Tempo Total (ms) Iterações

Tempo por iter.

(h)

Tempo Total (ms)

Steep CidadeFirst Cidade

Mínimo

Page 31: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Iterações VND● Para um máximo de iterações igual ao nº de

nós

53 1002 18512Iterações

Steep 2opt 10 440 165 273994 N/A N/AFirst 2opt 2 435 2 273992 N/A N/A

5 429 29 271713 N/A N/A2 429 2 271713 N/A N/A

Tempo <1s 114m 36s N/A

AlgoritmoInstância

Mínimo Iterações Mínimo Iterações Mínimo

Steep CidadeFirst Cidade

Page 32: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Iterações VND● Para um máximo de iterações igual a 10% do

nº de nós (10% calculado com divisão inteira nº de nós/10)

53 1002 18512Iterações

Steep 2opt 5 471 100 278391 N/A N/AFirst 2opt 4 434 4 274100 N/A N/A

4 430 32 271671 N/A N/A2 430 2 271671 N/A N/A

Tempo 1s 85m N/A

AlgoritmoInstância

Mínimo Iterações Mínimo Iterações Mínimo

Steep CidadeFirst Cidade

Page 33: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Iterações VND● Para um máximo de iterações igual a 1% do nº

de nós (10% calculado com divisão inteira nº de nós/100)

53 1002 18512Iterações

Steep 2opt 0 511 10 313165 N/A N/AFirst 2opt 3 438 5 279371 N/A N/A

0 438 10 277082 N/A N/A3 430 3 273887 N/A N/A

Tempo ~0s 20m 27s N/A

AlgoritmoInstância

Mínimo Iterações Mínimo Iterações Mínimo

Steep CidadeFirst Cidade

Page 34: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Condições do teste

● Netbeans 6.0● Java JDK 6● AMD Sempron 2600+● 512MB RAM

Page 35: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Conclusões● Consegui melhorias com o RVNS só para 53

nós, conseguindo 426 ao fim de 1h de RVNS● Para 1002 nós ao fim de 31h não consegui

melhoria relativamente ao VND● O uso de muitas iterações steepestdescent não

garante a escolha de um bom mínimo local mas demora muito mais tempo a executar

● O firstdescent chega a um mínimo muito mais rápido que o steepestdescent

Page 36: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Trabalho futuro● Guardar trocas geradas aleatoriamente no

RVNS para que não sejam repetidas● Implementar Skewed VNS● Implementar Variable Neighborhood

Decomposition Search● Implementar um algoritmo que detecte ramos

cruzados e que os troque● Resolver o problema de o firstdescent fazer

melhoria depois de o steepestdescent ter corrido até ao fim

Page 37: VARIABLE NEIGHBOURHOOD SEARCHmac/ensino/docs/ODST20072008/VNS_Nuno_A… · Variable Neighbourhood Descent A combinação das duas heurísticas anteriores dá origem ao VND (Variable

Bibliografia● José Fernando Oliveira Maria Antónia Carravilla,

“Técnicas aproximadas para a resolução de problemas de Optimização Combinatória”, MEEC – Faculdade de Engenharia da Universidade do Porto

● Pierre Hansen and Nenad Mladenovic, “Search Methodologies - Introductory Tutorials In Optimization And Decision Support Techniques”, Cap. 8, “VARIABLE NEIGHBORHOOD SEARCH”, Springer, 2005

● Marc Pirlot, “General local search methods”, European Journal of Operational Research 92 (1996) 493-511, 1996

● http://www.mi.sanu.ac.yu/VNS/VNS.HTM, visitada em 7 de Janeiro de 2008