• Nenhum resultado encontrado

Palubeckis, Rubliauskas e Targamadzé (2010)

Adjacência de Arestas

2.4 Revisão da Literatura para os Problemas da AGMQ e da AGMQA

2.4.10 Palubeckis, Rubliauskas e Targamadzé (2010)

Palubeckis, Rubliauskas e Targamadzé (2010) apresentam três abordagens heurísticas para a AGMQ, a saber: um simulated annealing multistart, um algoritmo genético híbrido e uma busca tabu iterativa. Essas implementações são discutidas, respectivamente, nas Subseções 2.4.10.1, 2.4.10.2 e 2.4.10.3.

2.4.10.1 Simulated annealing multistart

O algoritmo de simulated annealing multistart implementado pelos autores se inicia gerando aleatoriamente uma árvore geradora AG. AG∗ , variável que representa a melhor solução encontrada até um determinado momento, é inicializada com AG. z∗ , o valor da função-objetivo de AG∗, é inicializado com z(AG).

A seguir, calcula-se a (alta) temperatura inicial, denominada t . O procedimento para obtenção de t passa pela avaliação de um determinado número de vizinhos de AG. A estrutura de vizinhança adotada considera vizinho de AG a árvore geradora AG′ que

difere de AG em apenas uma aresta. Ou seja, AG′ pode ser obtida a partir de AG pela

troca de uma aresta er que está em AG por uma aresta eg que não pertence a AG. De

maneira geral, esse procedimento de assemelha à vizinhança Nk

(AG), quando k igual a 1,

apresentada por Öncan e Punnen (2010) e discutida na Subseção 2.4.8.

Seja δ(AG, r, g) = z(AG′) − z(AG), a mudança no valor da função objetivo quando

movemos de AG para AG′ em função da remoção da aresta e

r e inserção da eg. O valor

atribuído a t é o maior valor absoluto de δ(AG, r, g) obtido de uma amostra de 10000 árvores geradoras escolhidas aleatoriamente dentre os vizinhos de (PALUBECKIS; RUBLI- AUSKAS; TARGAMADZÉ, 2010).

Outros parâmetros do algoritmo são: a taxa de resfriamento α, a temperatura mínima t0(próxima de 0) e o fator de repetição R0. Esses parâmetros são empregados para definir o

número de reduções de temperatura K = (log(to) − log(t)))/logα



, bem como o número de árvores avaliadas a cada nível de temperatura R = R0n.

Após a inicialização desses parâmetros, o procedimento de Simulated Annealing (SA) propriamente dito é invocado. Esse procedimento, denominado pelos autores de SA será explicado em detalhes a seguir.

O primeiro passo de SA verifica se é a primeira execução do simulated annealing. Em caso negativo, a variável foa é inicializada com z∗. Senão, gera-se uma árvore aleatória AG e f oa é inicializada com z(AG). A variável f oa representa o valor da função-objetivo da árvore atual. O fato de o SA sempre executar a partir de uma solução gerada aleato- riamente caracteriza o multistart.

Depois de gerada a solução inicial, arestas er e eg são selecionadas aleatoriamente

de maneira que a árvore resultante da substituição de er por eg, AG′ = AG(er, eg), seja

vizinha de AG . Seja δ′ = δ(AG, e

r, eg). Se δ′ ≤ 0, a troca resultou em uma melhor solução,

então a árvore AG = AG′ e foa = foa + δ. Se a nova solução é melhor que o ótimo atual,

o ótimo também é atualizado. Caso a árvore obtida pela troca entre as arestas er e eg

não resulte em uma solução melhor, a solução AG ainda pode ser atualizada com AG′

com uma probabilidade de exp(−δ′/t), em que t é a temperatura corrente, inicializada, a

princípio, com o valor de t .

A escolha aleatória de arestas er e eg ocorre iterativamente, até que o número de

árvores avaliadas por nível de temperatura (R) seja atingido. Quando isso ocorre, o número de reduções de temperatura i é incrementado e t = αt. No caso de o número máximo de reduções de temperatura K ter sido atingido, o SA pára e retorna AG∗ e z∗. Senão, o algoritmo volta a gerar arestas aleatórias er e eg a serem trocadas de forma a gerar

vizinhos de AG que serão avaliados.

Após a execução do SA, o algoritmo de Palubeckis, Rubliauskas e Targamadzé (2010) checa a condição de parada. Para fins de comparação entre as três abordagens propostas neste artigo, os autores definiram o mesmo critério de parada para todos os algoritmos, a saber: um determinado período de tempo transcorrido. Se a referida condição for satisfeita, o algoritmo retorna a árvore AG∗ com valor de função objetivo igual a z∗. Caso contrário, SA é novamente aplicado.

2.4.10.2 Algoritmo genético

O algoritmo genético proposto por Palubeckis, Rubliauskas e Targamadzé (2010) co- difica a solução (ou seja, uma árvore) em um cromossomo seguindo a representação de lista de arestas. Na realidade, os autores apresentam dois algoritmos genéticos: um gené-

tico puro e a hibridização do mesmo com um procedimento de busca local. Vale salientar que a única diferença entre os dois métodos é a existência da busca local no algoritmo híbrido. Nesse sentido, a descrição a seguir corresponde ao algoritmo híbrido, pois assim teremos explicado as duas versões propostas.

O primeiro passo do algoritmo genético é a criação da população de indivíduos. Esse procedimento é realizado por meio de uma versão randomizada do algoritmo de Kruskal (1956). A cada iteração, o algoritmo leva em conta o conjunto de todas as arestas que podem ser utilizadas para ampliar a floresta (GF = (V, Esel)) atualmente composta pelos

vértices e arestas já adicionados ao indivíduo. Nesse sentido, forma-se um subconjunto contendo as melhores candidatas a compor a árvore, ou seja, as arestas que não formam ciclo e que apresentam os menores valores para a soma Qi = wi +Pej∈Eselcij . Uma

das arestas é randomicamente selecionada a partir do subconjunto obtido. Se o novo indivíduo guarda semelhança acentuada com algum outro cromossomo da população, essa nova solução é descartada. Caso contrário, o indivíduo passa a compor a população (PALUBECKIS; RUBLIAUSKAS; TARGAMADZÉ, 2010).

Uma vez que a população foi criada, o algoritmo inicia a fase de evolução da população, constituída pelos seguintes passos: reprodução da população, aplicação de busca local e atualização da população (PALUBECKIS; RUBLIAUSKAS; TARGAMADZÉ, 2010).

Seja a população denotada por Q. A operação de cruzamento é realizada com base em duas soluções escolhidas randomicamente de Q. A princípio, identificam-se as arestas comuns aos dois indivíduos selecionados para reprodução. Essas arestas são inseridas no descendente. Em seguida, o descendente é completado com arestas que pertencem a apenas um dos pais, seguindo a mesma versão randomizada do algoritmo de Kruskal (1956) que já foi descrita.

Após a reprodução, o descendente é submetido a um procedimento de busca local que pode ser entendido como uma mutação. Tal busca local é a implementação do método de melhoria local 1-opt. A cada iteração da busca local, a vizinhança N(AG) da árvore corrente AG é explorada. O algoritmo tenta trocar cada aresta da árvore com cada aresta fora da árvore que não implique a criação de um ciclo.

A estratégia de atualização da população é bastante conhecida da literatura. O pior indivíduo da população é substituído pelo descendente, caso este seja suficientemente diferente dos indivíduos em Q. Senão, o descendente é simplesmente descartado.

2.4.10.3 Busca Tabu Iterativa

Palubeckis, Rubliauskas e Targamadzé (2010) também apresentam uma busca tabu iterativa, denominada IT S (do inglês, Iterated Tabu Search) . O primeiro passo de IT S é obter uma árvore geradora inicial, tal como os autores fazem no algoritmo simulated annealing já descrito. Em seguida, o procedimento T S , a busca tabu propriamente dita, é invocado com os seguintes parâmetros: AG, a árvore inicial; AG∗, a melhor árvore até o momento; z∗, o valor da função objetivo de AG∗ e Itr , o número de iterações de uma execução da busca tabu, cujo valor é escolhido aleatoriamente no intervalo inteiro [Itrmin, Itrmax].

O primeiro passo do T S é a inicialização de variáveis locais. Depois, inicia-se um laço que, em geral, executará Itr vezes. T S pode ter seu término antecipado no caso de o tempo máximo para execução do IT S ter sido atingido. A cada iteração do laço, o algoritmo tenta avaliar toda a vizinhança da árvore atualmente levada em consideração. A estrutura de vizinhança adotada é a mesma já mencionada durante a análise deste artigo. Checa-se, então, se o vizinho gerado melhora a solução corrente. Em caso afirmativo, o mesmo procedimento de busca local do algoritmo genético é empregado (PALUBECKIS; RUBLIAUSKAS; TARGAMADZÉ, 2010).

Após a execução de T S, checa-se a condição de parada do algoritmo. Caso a condição ainda não tenha sido satisfeita, o procedimento GST (do inglês, Generate Spanning Tree) é executado para gerar uma nova árvore inicial. Senão, o algoritmo pára e retorna a melhor solução até o momento.

O procedimento GT S proposto por Palubeckis, Rubliauskas e Targamadzé (2010) realiza uma perturbação na árvore atual AG. Além de AG, os parâmetros de GST incluem p, que representa o número de arestas a serem removidas de AG; e q . O procedimento é randomizado. A cada iteração, escolhem-se aleatoriamente uma aresta da árvore para ser removida e uma aresta que não está na árvore para substituí-la. Esta escolha é realizada a partir de uma lista de candidatos de tamanho, no máximo q . Esta lista é construída pela inclusão de pares de arestas (er, eg) do tipo (aresta na árvore, aresta fora da árvore)

para os quais os valores δ(AG, er, eg) são os menores possíveis. Uma restrição adicional

deste procedimento é que uma aresta só pode ser escolhida uma vez, quer seja para entrar ou para sair da árvore.

Para os experimentos computacionais, os autores levaram em consideração as instân- cias disponibilizadas em Cordone e Passeri (2011), que possuem tamanhos variando entre

10 e 50 vértices, inclusive. Os resultados mostraram que, em relação à qualidade da solu- ção encontrada, o melhor algoritmo foi a busca tabu (IT S), seguida pelo genético híbrido (HGA) e pelo simulated annealing multistart (MSA). O pior algoritmo foi o genético puro. Já em termos de tempo computacionais, o HGA é comparável ao IT S e ambos são significativamente mais rápidos que o MSA.