BUSCA LOCAL ITERADA (ILS ITERATED LOCAL SEARCH) Francisco A. M. Gomes 1º sem/2009 MT852 Tópicos em pesquisa operacional
Iterated local search (ILS) Método que gera uma sequência de soluções obtidas por uma heurística de busca local. De forma mais geral, pode ser aplicado quando possuímos um método otimização local. É mais eficiente que a busca com recomeços (na qual escolhemos aleatoriamente vários pontos que pertencem ao espaço de soluções e aplicamos o algoritmo de busca local).
Busca com recomeços Algoritmo: Seja S o conjunto de soluções factíveis para o problema em questão. Dado um conjunto de soluções iniciais s 1, s 2,..., s m S. Para cada solução inicial s k, aplica-se um algoritmo de busca local, obtendo s k * S, mínimo local mais próximo de s k. O melhor s k* é considerado a solução do problema. Dificuldades: Não é eficiente quando resolvemos problemas grandes, porque: As soluções têm custo médio acima do ótimo (por um percentual fixo). A distribuição dos custos das soluções tem um pico em torno da média que fica mais pronunciado à medida em que o problema cresce.
Princípio da busca local iterada Idéia do algoritmo: Fazer uma busca no espaço S* dos mínimos locais do problema. Ingredientes do algoritmo: Um método de busca local que parta de s e atinja s *. Um método para sair de s * e atingir outro mínimo local s * que usa Uma estratégia de perturbação para gerar s a partir de s *. O algoritmo de busca local para obter s * a partir de s. Um teste para decidir se s * deve ou não ser aceito.
Representação gráfica da ILS
ILS - Algoritmo 1 s 0 Gera_Solução_Inicial; 2 s * Busca_Local(s 0 ); 3 Enquanto não é satisfeito um critério de parada, 3.1 s Perturbação(s *, histórico); 3.2 s * Busca_Local(s ); 3.3 s * Critério_de_Aceitação(s *, s *, histórico); 4 Fim-Enquanto;
Problema do caixeiro viajante (TSP) Dados: V = {v 1,..., v m } conjunto de cidades (nós) A = {(r, s) r, s V} conjunto de arestas (caminhos entre cidades) c rs = custo associado à aresta (r, s) Propósito: O caixeiro deve visitar todas as cidades Passando uma só vez em cada cidade Com o menor custo possível TSP simétrico
Solução inicial A solução inicial pode ser gerada: aleatoriamente; usando-se um algoritmo guloso ou heurística de construção. Geralmente, é melhor usar uma boa solução inicial. Se permitimos que o número de iterações seja muito grande, a solução inicial perde importância.
Solução inicial para o TSP Normalmente, usa-se uma heurística de construção: método da inserção mais barata; método do vizinho mais próximo; muitas outras presentes na literatura.
Heurística da inserção mais barata Escolher dois nós, v n1 e v n2 (os mais distantes, por exemplo). Ligar esses nós por meio das arestas (n1, n2) e (n2, n1). Guardar os nós em s, na ordem em que são percorridos (ex: s={n1, n2}). Guardar em V os demais nós do problema. Enquanto V, Escolher um nó v k V. Calcular o custo de inserir v k entre cada par de nós sucessivos de s. Introduzir v k em s, na posição em que o aumento do custo seja o menor possível. Retirar v k de V.
Heurística do vizinho mais próximo Escolher um nó, v n1. Guardar este nó em s. Guardar em V os demais nós do problema. Enquanto V, Escolher o nó v k V mais próximo do último nó inserido em s. Retirar v k de V e introduzi-lo ao final de s. Há variantes mais sofisticadas desta heurística, nas quais: escolhe-se o nó v k mais próximo de algum nó de s; a posição em que v k é inserido depende do custo de inserção.
Busca local Às vezes, é tratada como uma caixa preta, ou seja, usa-se qualquer heurística já existente para o problema que resolveremos. A única exigência é que o método seja capaz de melhorar uma solução dada. Pode-se, inclusive, usar metaheurísticas como a busca tabu, a têmpera simulada e o VND (variable neighborhood descent). Geralmente, quanto mais eficiente o algoritmo de busca, melhor. Entretanto, há casos em que um algoritmo barato e simples é preferível (dependendo da estratégia de perturbação).
Busca local para o TSP Para definir a busca, é preciso escolher qual vizinhança será vasculhada. Heurísticas mais usadas: 2-opt. Or-opt. 3-opt. Lin e Kernighan (que executa um movimento 3-opt seguido por uma sucessão de movimentos 2-opt, podendo, eventualmente, alterar vários arcos da solução).
Perturbação A perturbação: Não pode ser grande demais a ponto de fazer com que o ILS se torne uma busca local com recomeços. Deve ser suficientemente potente para que a busca local não seja capaz de revertê-la. Desta forma, é preciso que a busca local e a perturbação sejam definidas de forma coordenada. Alternativas mais complexas para a perturbação: Pode-se variar a perturbação ao longo das iterações, como no VNS. Pode-se alterar alguns dados do problema (ex: custos) e aplicar o algoritmo de busca local para obter s.
Perturbação para o TSP Cross-exchange: retira 4 arcos e religa o ciclo formando uma cruz (movimento 4-opt particular). Não pode ser desfeito pela busca local que usa 2-opt, 3-opt, Oropt ou LK. Figura extraída de Applegate et alii, Finding tours in the TSP.
Critério de aceitação Usualmente, exige-se que solução melhore. Neste caso, s * só é aceito se f(s * ) < f(s * ). Esta é a estratégia geralmente empregada para o TSP. Também é possível: Aceitar s * pior que s * com uma certa probabilidade baixa. Usar uma regra de aceitação semelhante à da têmpera simulada, definindo a probabilidade de aceitação em função da temperatura. Muitas vezes, essas estratégias de diversificação são aplicadas apenas quando a regra usual não dá certo por muitas iterações.
Recorrendo aos recomeços Em certos casos, o algoritmo estagna. Geralmente, isso ocorre quando: o problema é muito grande ou complexo; o algoritmo de busca local não permite uma diversificação adequada. Nestes casos, pode-se adotar recomeços: Uma solução aleatória é gerada sempre que a solução ótima permanece inalterada por um certo número fixo de iterações.