• Nenhum resultado encontrado

Algoritmo 6 Heurística 1-interchange

1. Partindo de uma solução inicial e sendo fopt o valor da função objetivo.

2. Encontre todas as entidades não ocupadas, neste caso, são todas as entidades xi que

não coincidem com qualquer outra mediana yj.

3. Para cada entidade não ocupada xi, adicione uma nova mediana yM+1na localidade xi

e encontre o índice da melhor mediana a ser removida. Denote vi j como o impacto na

função objetivo referente a esta mudança.

4. Encontre o melhor i0e j0onde vi j é mínimo.

5. Mude a posição de yj0 para xi0 e atualize as atribuições de cada entidade a seu cluster

com o intuito de obter a nova solução f0= fopt+ vi0j0.

6. Se f0> foptentão pare. Caso contrário, mova para a nova solução obtida, faça fopt= f0

e recomece o passo 2 partindo desta nova solução.

2.6

Metaheurística de Busca em Vizinhança Variável

Uma metaheurística é um algoritmo desenvolvido para resolver, aproximadamente, uma grande diversidade de problemas, sem ter uma adaptação profunda para cada pro- blema [Boussaïd et al. 2013]. Apresentada por Mladenovi´c & Hansen (1997), a metaheu- rística busca em vizinhança variável, do inglês Variable Neighborhood Search (VNS) consiste na exploração de estruturas de vizinhanças em busca da solução ótima (ou pró- xima da ótima). Na literatura é possível encontrar o VNS associado a um elevado número de aplicações para o problema de agrupamento de dados [Belacel et al. 2002, Hansen et al. 2012, Hansen & Mladenovi´c 2001, Santi et al. 2016].

De forma genérica, a vizinhança de uma solução S pode ser descrita como um con- junto de soluções próximas, definidas por uma função de vizinhança B. Desta forma, toda solução contida em B(S) pode ser dita vizinha de S. Em geral, vizinhanças de uma solução dependem do problema que está sendo estudado e nenhuma regra geral pode ser utilizada. Para um problema específico, diferentes estruturas de vizinhanças podem ser utilizadas, inclusive a associação de diferentes estruturas. No caso do MSSC, podemos definir uma estrutura de vizinhança que apresenta o conjunto de soluções obtidas através de uma simples modificação na atribuição das entidades aos clusters.

20 CAPÍTULO 2. REVISÃO DA LITERATURA

observações:

• O mínimo local de uma estrutura de vizinhança, não necessariamente é o mínimo local de outra estrutura de vizinhança.

• Um ótimo global é um ótimo local em relação a todas a estruturas de vizinhanças • A maioria dos ótimos locais estão relativamente próximos uns dos outros.

Para aplicação da metaheurística VNS, é necessária a definição de alguns procedi- mentos essenciais, o procedimento de pertubação, procedimento de melhoria e o passo de mudança de vizinhança. O VNS é descrito no Algoritmo 7 de forma genérica.

Algoritmo 7 VNS genérico

1. Partindo de uma solução inicial S.

2. Defina b ← 1 para início da exploração de vizinhanças.

3. Encontre S0como resultado da aplicação do procedimento de pertubação da solução S na estrutura de vizinhança Bb

4. Encontre S00 como resultado da aplicação do procedimento de melhoria na solução S0 com a estrutura de vizinhança Bb.

5. Mude de vizinhança seguindo os critérios do passo de mudança de vizinhança.

6. Se b ≤ bmaxretorne para o Passo 3.

7. Caso o critério de parada tenha sido alcançado, pare; senão recomece pelo Passo 2.

O procedimento de perturbação tem o objetivo de evitar que o algoritmo fique preso em mínimos locais. Supondo uma sequência de vizinhanças B1, B2, ..., Bmax, para evitar

a prisão em ótimos locais, a perturbação, partindo de uma solução S, seleciona aleatoria- mente uma solução na vizinhança Bb, 1 ≤ b ≤ bmaxpara ser explorada. Desta forma, caso

o algoritmo tenha ficado preso na vizinhança anterior, a exploração poderá ser feita na nova vizinhança em busca de um melhor mínimo local.

Para o passo de mudança de vizinhança podem ser encontradas várias estratégias sendo a mais comum e utilizada o passo de mudança sequencial. O passo sequencial de- fine que as estruturas de vizinhanças sejam exploradas de forma sequencial, dessa forma, definida uma sequência de vizinhanças {B1, B2, B3} o VNS explora cada uma delas na

ordem definida. Caso uma melhoria seja encontrada em alguma delas a sequência volta a ser explorada a partir da primeira estrutura de vizinhança da sequência, caso contrário a exploração continua para a próxima vizinhança.

2.6. METAHEURÍSTICA DE BUSCA EM VIZINHANÇA VARIÁVEL 21

Nos procedimentos de melhoria podemos destacar dois tipos, a busca local e a descida em vizinhança variável (do inglês, Variable Neighborhood Descent - VND).

Um procedimento de melhoria pela busca local consiste na exploração de uma única estrutura de vizinhança de uma solução S em cada iteração. Em uma busca local, partindo de uma solução S, em cada iteração é encontrada uma solução melhor S0 (caso exista) dentro da mesma estrutura de vizinhança. A busca local tem sua finalização quando um ótimo local, da estrutura de vizinhança utilizada, é encontrado. Como busca local na metaheurística VNS, diferentes heurísticas podem ser utilizadas, por exemplo, K-means, H-means, J-means e até mesmo outras metaheurísticas.

Ao aplicar a busca local como procedimento de melhoria para o VNS, este passa a ser chamado de VNS básico. No Algoritmo 8 é apresentada a nova estrutura desta metaheurística.

Algoritmo 8 VNS básico

1. Partindo de uma solução inicial S.

2. Defina b ← 1 para início da exploração de vizinhanças.

3. Encontre S0como resultado da aplicação do procedimento de pertubação da solução S na estrutura de vizinhança Bb

4. Encontre S00 como resultado da aplicação da busca local na solução S0.

5. Mude de vizinhança seguindo os critérios do passo de mudança de vizinhança.

6. Se b ≤ bmax retorne para o Passo 3.

7. Caso o critério de parada tenha sido alcançado, pare; senão recomece pelo Passo 2.

O VND parte do princípio que uma solução que é ótimo local de várias estruturas de vizinhanças, é mais provável que seja um ótimo global do que um ótimo local de apenas uma vizinhança. Mais precisamente, o VND explora várias estruturas de vizinhanças de forma sequencial ou aninhadas para melhorar uma solução dada [Hansen et al. 2016].

O VND sequencial básico, explora várias estruturas de vizinhanças em uma sequên- cia pré-determinada até que uma melhoria na solução inicial S seja encontrada. Quando encontrada uma solução melhor, a lista de estruturas de vizinhanças volta a ser percorrida pelo início. O processo então repete até que o VND explore todas as estruturas de vizi- nhanças sem melhoria na solução. No Algoritmo 9 são apresentados os procedimentos que compõem este passo de melhoria.

22 CAPÍTULO 2. REVISÃO DA LITERATURA

Algoritmo 9 VND sequencial básico

1. Partindo de uma solução inicial S e sendo f (S) o valor da função objetivo.

2. Defina S0← S e b ← 1 para que inicio seja dado pela primeira vizinhança.

3. Encontre uma solução S00 na vizinhança Bb, se existir, de tal forma que f (S00) < f (S).

4. Se f (S00) < f (S), faça S ← S00 e mova para a próxima vizinhança, ou seja, b ← b + 1. Senão, apenas mova para a próxima vizinhança b ← b + 1.

5. Se b < bmaxentão volte para o Passo 3.

6. Se f (S0) ≤ f (S) então pare com a solução resultado S0. Senão recomece pelo Passo 2.

através de uma composição de varias vizinhanças. Basicamente, quando uma estrutura de vizinhança B1é explorada, para cada solução nesta estrutura de vizinhança outra estrutura

de vizinhança pré-definida é explorada, sendo assim B1(B2). A primeira estrutura de

vizinhança B1 então volta a ser explorada após o término da exploração da estrutura de

vizinhança aninhada B2.

Podemos citar como exemplo um VND aninhado com três estruturas de vizinhanças B1, B2e B3. Ao explorar a primeira vizinhança B1, esta mapeia a solução em uma outra

estrutura de vizinhança, por exemplo, B2. Desta forma podemos dizer que, a estrutura de

vizinhança de um VND aninhado pode ser vista como uma combinação de vizinhanças B(S) = (B1(B2(B3))) para o caso em que o número de estruturas de vizinhanças definidas

é três. Para melhor compreensão, no Algoritmo 10 são apresentados os passos deste passo de melhoria.

Algoritmo 10 VND aninhado

1. Partindo de uma solução inicial S, sendo f (S) o valor da função objetivo e B∗= B1◦

B2◦ ... ◦ Bmaxa combinação de todas as estruturas de vizinhanças.

2. Defina S0← S.

3. Encontre uma solução S na vizinhança B∗, se existir, de tal forma que f (S) < f (S0).

4. Se f (S0) ≤ f (S) então pare com a solução resultado S0. Senão recomece pelo Passo 2.

Por fim, temos o VND misto, este é formado quando há tanto estruturas de vizinhan- ças aninhadas como sequenciais. Isto é, dadas estruturas de vizinhanças aninhadas, ao explorar cada uma delas, um VND sequencial é explorado. Seja B0= {B1, ..., Bz} o con-

2.6. METAHEURÍSTICA DE BUSCA EM VIZINHANÇA VARIÁVEL 23

junto de vizinhanças aninhadas, cada vez que uma solução é visitada nesta estrutura, um conjunto de vizinhanças sequenciais B00= {Bz+1, ..., Bmax} é visitado. No Algoritmo 11

são apresentados os passos do funcionamento deste passo de melhoria.

Algoritmo 11 VND misto

1. Partindo de uma solução inicial S, sendo f (S) o valor da função objetivo e B∗= B1◦

B2◦ ... ◦ Bz a combinação das estruturas de vizinhanças aninhadas.

2. Defina S0← S.

3. Para cada solução encontrada na vizinhança B∗

(a) Encontre a solução S00resultado da aplicação do VND sequencial básico na solu- ção S com as estruturas de vizinhanças B00= Bb+1, ..., Bmax

(b) Se f (S00) ≤ f (S0) então S0← S00.

4. Se nenhuma melhoria for encontrada pelo passo 3, pare. Caso contrário retorne para o Passo 2.

Quando o VND é escolhido como procedimento de melhoria no VNS genérico, esta metaheurística passa a ser chamada de busca em vizinhanças variáveis gerais (GVNS), sendo esta aplicada pela primeira vez para o problema de grafos extremos [Caporossi et al. 1999], porém a nomenclatura GVNS ainda não era utilizada. No Algoritmo 12 estão apresentados os passos desta variante.

Algoritmo 12 GVNS

1. Partindo de uma solução inicial S.

2. Defina b ← 1 para início da exploração de vizinhanças.

3. Encontre S0como resultado da aplicação do procedimento de pertubação da solução S na estrutura de vizinhança Bb

4. Encontre S00 como resultado da aplicação do VND na solução S0.

5. Mude de vizinhança seguindo os critérios do passo de mudança de vizinhança.

6. Se b ≤ bmax retorne para o Passo 3.

24 CAPÍTULO 2. REVISÃO DA LITERATURA

Documentos relacionados