Você está na página 1de 93

Busca Tabu

Busca Tabu (Tabu Search - TS) é também um al-


goritmo adequado para resolver problemas complexos.
Basicamente é um procedimento metaheurı́stico usado
para gerenciar um algoritmo heurı́stico de busca local,
que usa estratégias adequadas para contornar ou sair de
soluções ótimas locais. De maneira parecida com as me-
taheurı́sticas já analisados, TS realiza um conjunto
de transições através do espaço de soluções
do problema e, nesse processo de transições,
deve-se passar pela solução ótima ou soluções
quase ótimas de problemas complexos. TS foi
desenvolvido por Glover a partir de conceitos usados na
inteligência artificial. Portanto, este algoritmo não teve
sua origem relacionada a processos de otimização biológi-
co ou fı́sico.
TS foi inventado por Fred Glover na década de 80 e,
na década de 90, está sendo intensamente usado para
resolver problemas complexos em áreas muito variadas
da pesquisa operacional. Entretanto, a aplicação de TS
em problemas de sistemas de energia elétrica ainda se
encontra em pleno desenvolvimento.

1
Princı́pios Básicos de Busca Tabu
Busca Tabu foi desenvolvido inventando um conjunto
de princı́pios (funções) que, em forma integrada, permi-
tem resolver um problema da maneira mais inteligente.
O princı́pio filosófico de Busca Tabu pode ser
explicado com as próprias palavras de Glover:
TS está baseada na premissa de que a resolução de um
problema pode ser considerada inteligente se esse proces-
so incorpora a memória adaptativa e a exploração
sensı́vel. O uso de memória adaptativa contrasta
com as técnicas sem memória (como SA e o AG) e com
as técnicas de memória rı́gida (como IA e B & B). De
igual maneira, a idéia de exploração sensı́vel em TS
está inspirada na suposição de que uma escolha ruim
realizada por uma estratégia produz mais informação
que uma boa escolha aleatória (numa crı́tica evidente,
por exemplo, a SA que faz escolhas aleatórias). Assim,
se a estratégia que guia um algoritmo que usa memória
(como TS) faz uma escolha ruim (passa a uma configu-
ração de baixa qualidade) então, pode-se aproveitar essa
informação (escolha ruim) para evitar voltar a visitar
essa configuração (ruim) e, ainda melhor, para modi-
ficar (melhorar) a própria estratégia que guia o
processo de busca para ter capacidade de encontrar ou
escolher configurações de melhor qualidade.

2
PRINCIPAIS CARACTERÍSTICAS DE BUSCA TABU

Memória Adaptativa
Seletividade (incluindo esquecimento estratégico)
Abstração e decomposição (usando memória explı́cita e por atributos)
Tempo:
Recencia de eventos
Frequência de eventos
Diferenciação entre curto e longo prazo
Qualidade e impacto:
Atração relativa quanto a escolhas alternativas
Impacto de mudanças de relações em estrutura ou restrições
Contexto
Interdependência regional
Interdependência estrutural
Interdependência seqüencial

Exploração Sensı́vel
Imposição estratégica de proibições e induções
(condições tabu e nı́veis de aspiração)
Enfoque concentrado em boas regiões e em boas caracterı́sticas das soluções
(processos de intensificação)
Caracterização e exploração de novas regiões promissoras
(processo de diversificação)
Padrões de busca não monótonos
(oscilação estratégica)
Integração e geração de novas soluções
(path relinking)

Figura 8.1: Funções de TS

3
A figura 8.1 mostra os elementos principais
(funções) de TS. Portanto, as pesquisas em
TS consistem em usar as funções indicadas na
figura 8.1 de maneira integrada e eficiente pa-
ra resolver cada problema especı́fico, levando
em conta que cada uma das funções podem ser imple-
mentadas de várias formas diferentes dependendo das
caracterı́sticas do problema e do nı́vel de sofisticação da
implementação do algoritmo TS. Outra linha de pes-
quisa muito ativa consiste em inventar outras
funções para que sejam incorporadas como parte da es-
trutura de TS da figura 8.1 e/ou encontrar variantes de
implementação das funções mostradas na figura 8.1. Um
algoritmo TS para um problema especı́fico po-
de usar algumas ou todas as funções mostradas
na figura 8.1 integradas das formas mais variadas. As ca-
racterı́sticas especı́ficas de cada problema e a experiência
do pesquisador devem determinar a forma e a qualidade
do algoritmo TS implementado. É oportuno lembrar que
TS nasceu somente com algumas das funções indicadas
na figura 8.1.

4
Apresentamos brevemente a essência da lógica de tra-
balho de Busca Tabu. TS resolve problemas genéricos do
tipo:

M in f (x) (1)
s.a. x∈X

TS resolve (1) iniciando com um processo si-


milar a qualquer algoritmo heurı́stico de bus-
ca local. Na busca local, dada uma configuração x (so-
lução), define-se uma vizinhança de x como sendo o con-

junto de todas as configurações x ∈ N (x) que podem
ser obtidas pela aplicação de um mecanismo de tran-
sição a partir de x. A estrutura de vizinhança define as

condições para que x seja vizinho de x. No algorit-
mo de busca local, a partir da configuração
corrente, passa-se para a configuração vizin-
ha que apresenta uma maior diminuição da
função objetivo. Um procedimento repetitivo desta
estratégia leva o algoritmo de busca local a parar no
momento em que não existe nenhuma configuração vi-
zinha que produz uma diminuição da função objetivo o
que significa que foi encontrado um ótimo local.

5
TS é diferente de um algoritmo de busca
local em dois aspectos fundamentais:

1. A partir da configuração corrente, passa-se à mel-


hor configuração vizinha ou à menos pior,
o que implica que é permitida uma degradação da
qualidade da função objetivo.
2. O conjunto de vizinhos de x não se carac-
teriza de maneira estática. Assim, TS define
uma nova estrutura de vizinhança, N ∗(x) que varia
dinamicamente em estrutura e tamanho durante
todo o processo de otimização. Esta estratégia per-
mite a TS realizar uma busca eficiente e inteligente.
Os elementos de N ∗(x) são determinados de várias
formas. Como ilustração, pode-se indicar as seguintes
formas:

6
Usando uma lista tabu que armazena atri-
butos de configurações consideradas tabu (proibi-
das). Neste caso N ∗(x) ⊂ N (x) pois alguns vizinhos
definidos pela estrutura de vizinhança e cujos atribu-
tos fazem parte da lista tabu estão proibidos. Esta
estratégia evita retornar a configurações já visitadas
e a ciclagem.
Usando estratégias para diminuir a vizin-
hança ou a lista de configurações candida-

tas. Geralmente o número de configurações x ∈
N (x) pode ser muito grande e avaliar a função ob-
jetivo de todas essas configurações, para encontrar
aquela que apresenta melhor desempenho, pode pre-
cisar de elevado esforço computacional. TS apresenta
pelo menos 4 métodos diferentes para encontrar uma
vizinhança de tamanho reduzido tal que N ∗(x) ⊂
N (x). Esta estratégia visa diminuir o esforço compu-
tacional necessário em cada transição.
Usando configurações de elite e path re-
linking para caracterizar e encontrar novas
configurações candidatas. Esta estratégia visa
encontrar novas configurações de alta qualidade que
dificilmente seriam encontradas a partir da definição
de N ∗(x).
Redefinir o conjunto N (x) durante o pro-
cesso de otimização.
7
Relacionadas com TS, assim como no caso dos ou-
tros algoritmos combinatoriais, existem alguns tópi-
cos que devem ser analisados tais como a re-
presentação e a codificação do problema que
permitem identificar, claramente, a forma e
estrutura de uma solução ou configuração e
a possibilidade de aparecimento de configu-
rações factı́veis e infactı́veis. Também, a repre-
sentação e codificação determina a forma em que deve
ser determinada a função objetivo. Um outro aspecto,
mais delicado, é a definição e caracterização da vizin-
hança de uma configuração. Esses assuntos podem ser
crı́ticos na formulação de algoritmos TS eficientes. Por-
tanto, apresenta-se esses tópicos usando dois exemplos
para ilustrar a lógica da implementação.

8
Representação e Codificação do
Problema para TS
Este tópico é analisado usando dois problemas. Um
problema é conhecido na literatura de pesquisa opera-
cional, o problema das n rainhas, e foi escolhido por-
que permite analisar com maior simplicidade os aspectos
básicos de representação e codificação. O outro, o pro-
blema que interessa, é o problema de planejamento de
sistemas de transmissão.

9
Problema 8.1: O problema das n rainhas:
Este problema consiste em colocar n rainhas num ta-
buleiro de xadrez de dimensão n ×n de maneira que não
exista ataque entre as rainhas ou minimizar o número de
ataques.
Uma topologia ótima do problema das n rainhas de-
ve ser tal que não deve existir mais de uma rainha na
mesma linha, coluna ou diagonal do tabuleiro. A figura
8.3 mostra uma topologia, para o problema de 7 rain-
has, onde existem 4 ataques ou colisões entre as rainhas
e a figura 8.4 mostra uma topologia em que não existe
colisão entre rainhas representando a solução ótima do
problema das 7 rainhas.
1 2 3 4 5 6 7 1 2 3 4 5 6 7
1 R 1 R

2 R 2 R

3 R 3 R

4 R 4 R

5 R 5 R

6 R 6 R

7 R 7 R

Figura 8.3: Topologia inicial Figura 8.4: Topologia ótima

10
Problema 8.2: O problema de planejamento:
Neste caso consideramos o sistema de 6 barras de Gar-
ver e o modelo DC. A figura 8.5 mostra a topologia ini-
cial e a figura 8.6 a topologia ótima. Cada um desses
problemas são analisados em detalhe.

11
r5 = 240 g1 = 50
v v
6 240 6 80
? 5 - 37.903 ? 1


g3 = 165
37.903
v

? 3 5.645
? 40

H
HH
HH 87.097
HHH
HHj
H
H r2 = 145
HH
HH v
H
6 240 2.258
? 2 ?
w = 545

v1∗ = 0 @
@
@
@
@ 2.258
@
@@I@
@ @
@
@
@
@
@
@
r4 = 160 @
v

6 ? 4
6
v g6 = 0 160 ?

12
g1 = 50
v
6 240 6 80
5  52.999 ? 1

n35 = 1

g3 = 165
187.001
v

? 3 51.251 
? 40
H
HH
HH
HH 62.001
HHH Y
HH
H H
HH
H
6 240 31.748 6

w = 0, 0 2

v1∗ = 200 @
@
@
 @
@ 3.630
@
@@
n26 = 4 356.882 @@ R
@
@
@
@
@
@
- @
188.118 @

6 4
6 n46 = 2
v g6 = 545 160 ?

Figura 8.6: Topologia ótima.

13
Para o problema das n rainhas é possı́vel encontrar
uma forma de codificar uma configuração de
maneira eficiente. A forma mais interessante consis-
te em codificar uma configuração usando um vetor P
de tamanho n, onde um elemento desse vetor, chamado
P (i) representa a coluna do tabuleiro que ocupa a rain-
ha i, que sempre ocupa a linha i. Usando este tipo de
proposta, a codificação para a configuração mostrada na
figura 8.3 assume a seguinte forma:


1 2 3 4 5 6 7 rainha

P1 = 4 5 3 6 7 1 2 coluna

onde a rainha 1 está na coluna 4, a rainha 2 está na


coluna 5, etc.

14
A codificação anteriormente apresentada pa-
ra o problema das n rainhas é muito interes-
sante pelos seguintes motivos:

A codificação proposta sempre é factı́vel porque qual-


quer arranjo dos n primeiros números inteiros sempre
representa uma configuração factı́vel para o proble-
ma das n rainhas.
As configurações encontradas com a codificação pro-
posta nunca apresentam colisão entre rainhas através
das linhas ou colunas do tabuleiro, assim o problema
se reduz a calcular o número de colisões através das
diagonais do tabuleiro. Pode-se verificar facilmente
que não existe colisão através das colunas porque os
elementos do vetor P são diferentes o que signifi-
ca que sempre uma coluna é ocupada por uma única
rainha. Também não existe colisão através das linhas
porque as rainhas sempre permanecem numa mesma
linha do tabuleiro.
Novas configurações encontradas a partir de uma
configuração factı́vel podem ser factı́veis ou infactı́veis
dependendo da forma proposta para encontrar essas
novas configurações. No algoritmo TS, pode-se de-
senvolver várias estratégias de vizinhança que sem-
pre geram configurações factı́veis.

15
O problema da codificação e representação
do problema das n rainhas termina quando
é encontrada uma forma simples de determi-
nar a função objetivo de uma configuração que, pa-
ra o caso da codificação proposta, agora foi reduzida
a calcular o número de colisões através da diagonal do
tabuleiro que na verdade é uma matriz de n × n. Pa-
ra encontrar a função objetivo do problema, define-se o
conceito de diagonal positiva e negativa no arranjo ma-
tricial. Para o arranjo de 7 × 7 as diagonais positivas e
negativas são mostradas nas figuras 8.7 e 8.8.

1 2 3 4 5 6 7 1 2 3 4 5 6 7
1 @@ @@ @@ @@ @@ @@ @@ 1       
R
@
@ @ @ @ @ @
2 @@ @ @ @ @ @ @ 2 
@ @ @ @ @ @
R
@
@ @ @ @ @ @
@ @ @ @ @ @ @ 
3 @ 3
@ @ @ @ @ R
@
@ @ @ @ @ @
@ @ @ @ @ @ @ 
4 @ 4
@ @ @ @ @ R
@
@ @ @ @ @ @
@ @ @ @ 
5 @ @ @ @ 5
@ @ @ @ @ @ R
@ @ @ @
@ @ @ @ 
6 @ @ @ @ @ 6
@ @ @ @ R
@
@ @ @
@ @ @ @
@ @ @ @ 
7 @ @ @ @ 7
@R
@ @R
@ R
@ R
@ R
@ R
@ R
@

Figura 8.7: Diagonais positivas Figura 8.8: Diagonais negativas

16
Para encontrar o número de colisões de uma
configuração é suficiente percorrer as diago-
nais positivas e negativas de um arranjo matricial
e fazer a contagem do número de colisões. Esta tarefa
é simplificada pelo fato de que é fácil identificar cada
diagonal verificando que a soma do ı́ndice da fila
e do ı́ndice da coluna dos elementos de uma
diagonal negativa é constante, assim como a
diferença desses ı́ndices de uma diagonal posi-
tiva é constante. Estas caracterı́sticas são mostradas
nas figuras 8.9 e 8.10 para o arranjo de 7 × 7.

1 2 3 4 5 6 7 1 2 3 4 5 6 7
1 0 -1 -2 -3 -4 -5 -6 1 2 3 4 5 6 7 8

2 1 0 -1 -2 -3 -4 -5 2 3 4 5 6 7 8 9

3 2 1 0 -1 -2 -3 -4 3 4 5 6 7 8 9 10

4 3 2 1 0 -1 -2 -3 4 5 6 7 8 9 10 11

5 4 3 2 1 0 -1 -2 5 6 7 8 9 10 11 12

6 5 4 3 2 1 0 -1 6 7 8 9 10 11 12 13

7 6 5 4 3 2 1 0 7 8 9 10 11 12 13 14

Figura 8.9: Números das diagonais positivas Figura 8.10: Números das diagonais negativas

17
Para a configuração mostrada na figura 8.3, pode-se
verificar facilmente que existem 4 colisões percorrendo as
diagonais positivas e negativas. Na verdade existe colisão
nas diagonais positivas 5, -2 e -3, assim como na diago-
nal negativa 7. Assim, termina o processo de codificação
e representação do problema das n rainhas. Em relação
a esse problema é importante fazer as seguintes obser-
vações:

As informações de diagonais positivas e ne-


gativas podem ser facilmente armazenadas
em duas estruturas de dados permitindo
uma fácil determinação do número de colisões
de uma configuração através de uma subrotina ade-
quada.
A forma escolhida para a codificação permite identi-
ficar facilmente uma configuração assim como a de-
terminação da função objetivo (número de colisões).
Na verdade as duas propostas eliminam a necessi-
dade de uma representação do problema através de
uma modelagem matemática.
O problema das n rainhas pode ser modelado mate-
maticamente como um problema 0-1 que minimiza o
número de colisões ou como um problema que maxi-
miza o número de rainhas que pode ser alocado num
tabuleiro de dimensão n × n.

18
Para o problema de planejamento de sistemas de trans-
missão, a forma mais adequada de implementar a codi-
ficação é equivalente à codificação proposta
para o algoritmo SA, isto é, uma configuração é re-
presentada através de um vetor de tamanho n, onde n
representa o número de circuitos ou caminhos candidatos
a adição e cada elemento do vetor representa o núme-
ro de circuitos adicionados nesse caminho na topologia
corrente. Em outras palavras, os elementos do vetor são
somente os novos circuitos adicionados. Usando este tipo
de proposta, a codificação para a topologia mostrada na
figura 8.6 pode ser representada pelo vetor P1:

1-2 1-3 1-4 1-5 1-6 2-3 2-4 2-5 2-6 3-4 3-5 3-6 4-5 4-6 5-6  circuito

P1 = 0 0 0 0 0 0 0 0 4 0 1 0 0 2 0 adição

19
A codificação, anteriormente apresentada, para o pro-
blema de planejamento de sistemas de transmissão não
apresenta as grandes vantagens que apresentava a codi-
ficação proposta para o problema das n rainhas. Assim,
deve-se levar em conta os seguintes aspectos:

A codificação proposta nem sempre é factı́vel,


na verdade frequentemente é infactı́vel, porque estão
sendo representadas apenas as variáveis inteiras do
problema. Na verdade, para o problema de planeja-
mento, não é simples encontrar uma codificação que
represente apenas configurações factı́veis.
Novas configurações encontradas a partir
de uma configuração corrente podem ser
factı́veis ou infactı́veis. Como o aparecimento de
configurações infactı́veis é muito mais frequente que
as configurações factı́veis, então a melhor estratégia
consiste em realizar transições através de configu-
rações factı́veis e infactı́veis e guiadas pelo algoritmo
TS.

20
No problema de planejamento, para encontrar a
função objetivo de uma configuração, deve-se
resolver um problema de PL de maneira equi-
valente ao realizado no algoritmo SA e genético. Pode-
se verificar o grau de dificuldade, em termos de esforço
computacional, ao calcular a função objetivo de um pro-
blema de planejamento comparado com o problema das
n rainhas. No problema de planejamento, deve-se resol-
ver um PL de grande porte e no problema das n rainhas
deve-se percorrer apenas algumas das diagonais positivas
e negativas do arranjo matricial para determinar a va-
riação do número de colisões. Deve-se lembrar que para
o problema do caixeiro viajante também é muito simples
encontrar a variação da função objetivo para uma confi-
guração candidata onde, deve-se realizar apenas quatro
somas algébricas.
A necessidade de resolver um PL de grande porte para
determinar a função objetivo de uma configuração é um
dos maiores problemas na implementação de um algorit-
mo TS para o problema de planejamento de sistemas de
transmissão porque incrementa o esforço computacional
do processo TS de maneira significativa.

21
A Estrutura de Vizinhança em Busca
Tabu
Uma transição do algoritmo TS consiste em
passar da configuração corrente para uma con-
figuração vizinha. Idealmente, essa configu-
ração vizinha deve ser uma configuração que
ainda não foi visitada e a melhor das confi-
gurações vizinhas. Em caso de que não exista uma
configuração vizinha de melhor qualidade, deve-se passar
para a configuração vizinha menos pior, isto é, é permiti-
da a menor degradação possı́vel da função objetivo. Esta
estratégia exige uma adequada caracterização da vizin-
hança da configuração corrente, isto é, quantos e quais
são os vizinhos da configuração corrente. Para cada ti-
po de problema, existem várias formas de caracterizar a
vizinhança da configuração corrente.

22
Neste contexto, é importante mencionar os
seguintes aspectos:

TS é agressivo no sentido de que exige que seja iden-


tificado o melhor vizinho ou o menos pior. Este fa-
to exige de que sejam avaliados todos os vizinhos
da configuração corrente, isto é, deve-se calcular as
funções objetivos de todos os vizinhos.
A forma de caracterizar a vizinhança pode ser de-
cisiva na qualidade de um algoritmo TS e pode ser
determinante no esforço computacional do algoritmo
TS.

Das observações anteriores, pode-se concluir que


o ideal é dispor de vizinhos de elevada qua-
lidade mas em pequeno número, aspectos que
são conflitantes num problema real e complexo. Este as-
pecto, a caracterização da estrutura de vizinhança da
configuração corrente, é um dos problemas mais
crı́ticos em busca tabu. Analisamos estruturas de
vizinhança para o problema das n rainhas e para o pro-
blema de planejamento de sistemas de transmissão.

23
A forma mais conhecida de definir a estrutura de vizin-
hança do problema das n rainhas é a seguinte: é vizin-
ha da configuração corrente toda configuração
que pode ser encontrada trocando as colunas
ocupadas por duas rainhas. Assim, por exemplo,
uma configuração vizinha da configuração mostrada na
figura 8.3 é obtida trocando as colunas ocupadas pe-
las rainhas 2 e 6. A figura 8.11 mostra as configurações
corrente e vizinha.

? ?


P1 = 4 5 3 6 7 1 2 configuração corrente


P2 = 4 1 3 6 7 5 2 configuração vizinha

1 2 3 4 5 6 7

Figura 8.11 Configuração vizinha.

Para a estrutura de vizinhança definida anteriormente


para o problema das n rainhas, a configuração corrente
tem n(n − 1)/2 configurações vizinhas. Assim, a confi-
guração mostrada na figura 8.3, com n = 7, possui 21
configurações vizinhas.

24
Existem outras formas de caracterizar a vi-
zinhança de uma configuração para o proble-
ma das n rainhas. Por exemplo, pode-se considerar
configuração vizinha da configuração corrente toda confi-
guração encontrada: (1) inserindo um elemento do vetor
P em outra posição, por exemplo, na figura 8.11 inse-
rindo 4 entre 3 e 6, o que significa que a rainha 1 passa
para a coluna 5, a rainha 2 passa para a coluna 3 e a
rainha 3 passa para a coluna 4, (2) trocando de coluna
3 rainhas simultaneamente, (3) considerando o conjunto
de vizinhos encontrados em (1) e (2), e (4) consideran-
do os vizinhos obtidos em (3) mais os vizinhos obtidos
trocando duas rainhas de coluna. É evidente que quan-
to mais complexa é a definição da vizinhança de uma
configuração, mais complexa é a identificação dos vizin-
hos assim como o crescimento excessivo do número de
vizinhos.

25
A caracterização mais usada de vizinhança
no problema das n rainhas, isto é, a troca
de colunas de duas rainhas já é explosiva. Por
exemplo, supor que se pretende resolver o problema das
n rainhas para n = 1000. Neste caso, a configuração
corrente tem 499500 vizinhos!. Em outras palavras, um
algoritmo TS deve identificar esse número de vizinhos,
assim como calcular a função objetivo desses vizinhos
para identificar a melhor configuração vizinha e depois
realizar uma simples transição, trocando as colunas ocu-
padas por duas rainhas. Esta parte do algoritmo TS é a
mais crı́tica. Logicamente, um algoritmo TS eficiente não
deve realizar essa tarefa. Assim, existem duas alter-
nativas para contornar esse problema: (1) anali-
sar somente uma parcela desses vizinhos ou, (2) redefinir
a vizinhança de uma forma mais inteligente. Na litera-
tura básica de TS existem várias propostas para imple-
mentar a proposta (1). A proposta (2) deve levar em
conta as caracterı́sticas especı́ficas do problema e, por
esse motivo, é altamente dependente do tipo de proble-
ma e da experiência do pesquisador. Este ponto deve ser
retomado posteriormente.

26
Exemplo 8.1: Identificando vizinhos:
Encontre os 21 vizinhos do problema das 7 rainhas
mostrada na figura 8.1 assumindo como configuração
corrente a configuração mostrada na figura 8.3 e usan-
do a vizinhança encontrada trocando as colunas de duas
rainhas. Determine também a variação da função obje-
tivo e identifique o melhor vizinho.
Considerando a seguinte topologia como sendo a con-
figuração corrente:

1 2 3 4 5 6 7 rainha

P1 = 4 5 3 6 7 1 2 coluna

os 21 vizinhos são mostradas na tabela 8.1.

27
Tabela 8.1: Configurações vizinhas

No rainhas v ∆v No rainhas v ∆v No rainhas v ∆v


trocadas trocadas trocadas
1 1-7 2 -2 8 3-5 3 -1 15 1-4 5 1

2 2-4 2 -2 9 3-6 3 -1 16 2-3 5 1

3 2-6 2 -2 10 4-7 3 -1 17 3-7 5 1

4 5-6 2 -2 11 6-7 3 -1 18 4-6 5 1

5 1-5 3 -1 12 2-5 4 0 19 5-7 5 1

6 1-6 3 -1 13 1-2 5 1 20 4-5 6 2

7 2-7 3 -1 14 1-3 5 1 21 3-4 7 3

Na tabela 8.1, v representa a função objetivo (núme-


ro de colisões) e ∆v a variação da função objetivo e
as configurações vizinhas foram ordenadas em ordem de
qualidade. Existem 4 configurações vizinhas de melhor
qualidade que diminuem o número de colisões de 4 para
2.

28
Na tabela 8.1 aparece um novo conceito muito usado
em TS: armazenamento de atributos. Em TS, deve-se
armazenar a informação do histórico do processo para
orientar o processo de busca. Supor que o processo TS
é iniciado na configuração do exemplo 8.1 e que foi es-
colhido o vizinho No. 1 que consiste na troca de colunas
das rainhas 1 e 7. Nesse caso, TS deve armazenar al-
gum tipo de informação que evite voltar posteriormente
a uma configuração já visitada. Assim existem duas
alternativas para armazenar a informação: (1)
armazenar a topologia completa da configuração, isto é,
o vetor P ou, (2) armazenar o atributo relacionado com
a configuração corrente onde, no caso analisado, é re-
presentado pela troca das rainhas 1 e 7. Neste último
caso, uma nova troca das rainhas 1 e 7 poderia produzir
o retorno a uma configuração já visitada. Os algoritmos
TS não armazenam topologias completas, eles armaze-
nam atributos que no caso do problema das n rainhas
significa armazenar a informação das rainhas que estão
trocando de coluna. As vantagens e desvantagens de ar-
mazenar somente atributos são analisados em detalhe
posteriormente.

29
Para o problema de planejamento de siste-
mas de transmissão, a definição da estrutura
de vizinhança é muito mais complexa que no
caso do problema das n rainhas. Uma primeira
tentativa de definir uma configuração vizinha da confi-
guração corrente pode ser realizada da mesma maneira
em que foi definida a vizinhança no algoritmo de Si-
mulated Annealing. Assim, pode-se definir como vizinho
da configuração corrente toda configuração que pode ser
obtida a partir da configuração corrente após realizar
uma das seguintes operações: (1) adicionar um circuito,
(2) trocar circuitos retirando um circuito já adicionado
e adicionando um circuito ou, (3) retirando um circuito
já adicionado. Entretanto, uma caracterização da vizin-
hança dessa forma é pobre em qualidade e em quantida-
de, isto é, existem muitos vizinhos e a maioria deles é de
pobre qualidade.
Esta forma de definir vizinhança para o problema de
planejamento é inaceitável quando é usado um algoritmo
TS, o que não acontece quando é usado um algoritmo
de Simulated Annealing (por quê?). No problema de pla-
nejamento, uma forma inteligente de gerar vizinhos da
configuração corrente, em pequeno número mas de qua-
lidade, é apresentada em detalhe posteriormente.

30
Exemplo 8.2: Identificando vizinhos:
Encontre o número de vizinhos para o problema de
planejamento de sistemas de transmissão do sistema de
Garver quando a configuração corrente é a seguinte:

1-2 1-3 1-4 1-5 1-6 2-3 2-4 2-5 2-6 3-4 3-5 3-6 4-5 4-6 5-6  circuito

P1 = 0 0 0 1 0 1 0 0 2 0 1 0 0 1 0 adição

Considere como vizinho toda configuração que pode


ser obtida a partir da configuração corrente: (1) adicio-
nando um circuito, (2) retirando um circuito já adicio-
nado ou (3) troca de circuitos, adicionando um circuito
e retirando um circuito já adicionado.
É fácil verificar que a configuração corrente
possui 70 vizinhos ( 15 obtidos adicionando um cir-
cuito, 5 retirando um circuito e 50 trocando circuitos).
Portanto, um algoritmo TS deve resolver 70 PL’s para
identificar a melhor configuração vizinha para realizar
uma simples transição que pode consistir, por exemplo,
em adicionar um circuito no caminho 2-6. Muitas des-
sas configurações vizinhas são irrelevantes e de péssima
qualidade.

31
No problema de planejamento também, pode-
se armazenar a informação usando a infor-
mação completa das configurações visitadas
ou simplesmente armazenando atributos. No
exemplo anterior supor que a nova configuração foi iden-
tificada com a adição de um circuito no caminho 2-6, isto
é, o circuito número 15. Portanto, quando é armazenada
a informação através de atributos, deve-se armazenar a
informação de que foi realizada uma adição do circuito
15 e que a retirada desse circuito pode produzir uma
transição de retorno a uma configuração já visitada. Pe-
la forma em que foi caracterizada a vizinhança, no pro-
blema de planejamento, deve-se armazenar 3 listas de
atributos independentes: (1) uma lista para as adições
de circuitos, (2) uma lista para as retiradas de circuitos
e, (3) uma lista para as trocas de circuitos. Esta infor-
mação deve ser usada no algoritmo TS com memória de
curto prazo.

32
Algoritmo Busca Tabu com Memória
de Curto Prazo
O algoritmo TS mais simples é o chama-
do algoritmo TS com memória de curto pra-
zo e que usa uma lista de atributos proibi-
dos e um critério de aspiração. A maioria das
pesquisas iniciais utilizaram algoritmos desse tipo. A
memória de curto prazo consiste em arma-
zenar informação do passado recente do pro-
cesso (recency), isto é, deve-se armazenar informação
das ultimas k transições. Neste contexto aparece um as-
pecto importante: que significa armazenar informação
do passado recente, como armazenar essa informação
e para que armazenar. A forma mais elementar
de armazenar informação recente consiste em
armazenar a informação completa das confi-
gurações visitadas. Por exemplo, para o problema
das n rainhas com k = 10, deve-se armazenar 10 ve-
tores onde cada vetor representa a codificação de uma
configuração visitada. Esta proposta praticamente não
é usada porque leva a problemas de memória para ar-
mazenamento e de esforço computacional para analisar
a informação armazenada. Portanto, a proposta mais
viável consiste em armazenar os atributos das
configurações visitadas. TS armazena atributos de
configurações já visitadas no passado recente.
33
Para ilustrar o armazenamento de informação através
de atributos usamos o problema das n rainhas com n =
7 e assumimos a configuração corrente como sendo a
mostrada na figura 8.3. Essa configuração é codificada
da seguinte forma:

1 2 3 4 5 6 7 rainha

P1 = 4 5 3 6 7 1 2 coluna

Os 21 vizinhos dessa configuração são mostrados na ta-


bela 8.1. Assim, o melhor vizinho é aquela confi-
guração vizinha encontrada trocando as colu-
nas das rainhas 1 e 7. Neste contexto, TS armazena
a informação desse atributo que significa que as rainhas 1
e 7 não podem trocar de coluna novamente durante, por
exemplo, k = 5 transições para evitar retornar a uma
configuração já visitada (P1 no caso). Essa informação
pode ser facilmente armazenada no arranjo matricial:
2 3 4 5 6 7
1 5
2

Figura 8.12: Armazenamento de atributos

34
O mesmo arranjo da figura 8.12 pode ser
usado para armazenar todos os atributos e,
em cada transição, os valores armazenados são
atualizados. Portanto, o valor 5 armazenado
no arranjo da figura 8.12 significa que as rain-
has 1 e 7 não podem ser trocadas durante as
próximas 5 transições. Existe uma forma mais
eficiente ainda de armazenar atributo e con-
siste em colocar no arranjo o número da tran-
sição em que foi acionado esse atributo. Por
exemplo, se as rainhas 1 e 7 trocam de coluna na im-
plementação da transição 231 então na posição (1,7) do
arranjo é armazenado o valor 231. Assim, a transição
corrente é usada para verificar se um atributo está proi-
bido. Assim, se assumimos que k = 5, então na transição
233 o atributo analisado ainda está proibido mas após a
transição 238 o atributo é liberado.

35
O armazenamento da informação através de
atributos apresenta a vantagem de pequena
memória para armazenamento e facilidade de
manipulação e verificação. Entretanto, apre-
senta a grande desvantagem de que um atri-
buto proibido evita retornar a uma configu-
ração já visitada mas também impede que se-
jam visitadas um conjunto de configurações
que compartilham atributos proibidos com con-
figurações já visitadas. Por exemplo, quando a troca
de coluna das rainhas 1 e 7 está proibida não é possı́vel
voltar para a configuração P1 assim como outras con-
figurações, ainda não visitadas, que podem ser encon-
tradas trocando as colunas das rainhas 1 e 7. Este
fato é uma limitação porque algumas confi-
gurações de excelente qualidade (inclusive a
ótima global) podem estar temporariamente
proibidas porque compartilham atributos proi-
bidos com configurações já visitadas.

36
Este problema é contornado de duas maneiras: (1) eli-
minando a proibição após k transições mas criando um
novo problema porque faz possı́vel o acontecimento de
ciclagem visitando novamente configurações já visitadas
e, (2) usando uma nova função ou estratégia TS
chamada de critério de aspiração. Esta estratégia
simplesmente estipula que se uma configuração vizinha
é encontrada acionando um atributo proibido mas es-
sa configuração vizinha é de excelente qualidade então,
deve-se eliminar a proibição. Corresponde a cada pes-
quisador especificar o que significa configuração de exce-
lente qualidade. Por exemplo, pode ser considerada uma
configuração vizinha de excelente qualidade quando: (1)
apresenta uma função objetivo melhor que a incumbente
do processo TS, (2) apresenta uma função objetivo mel-
hor que as encontradas no processo TS com memória
de curto prazo, (3) apresenta uma função objetivo de
melhor qualidade dentre as últimas k1 transições ou, (4)
a função objetivo foi reduzida em um valor previamente
especificado. Cada estratégia escolhida leva, obviamente,
a processos TS diferentes.

37
Em resumo, um algoritmo TS com memória
de curto prazo apresenta as seguintes carac-
terı́sticas:

É um processo de kT transições através das configu-


rações de um problema. O valor de kT que determina
o critério de parada pode ser previamente ou adap-
tativamente especificado.
Em cada transição são identificadas e calculadas as
funções objetivo de todos os vizinhos da configuração
corrente.
A transição é realizada para a configuração vizinha
de melhor qualidade desde que não se encontre proi-
bida ou, estando proibida, cumpra com o critério de
aspiração.
Em cada transição são armazenados os atributos proi-
bidos usando listas adequadas e, deve-se especificar o
número de transições em que os atributos permane-
cem proibidos. Podem ser armazenados vários tipos
de listas tabu e o tamanho dessas listas podem ser
previamente ou adaptativamente especificados.
Deve-se definir uma estrutura de vizinhança adequa-
da e eficiente.

38
A qualidade de um algoritmo TS que usa memória de
curto prazo depende da forma em que é especificada a
estrutura de vizinhança, do tipo de atributo escolhido,
da duração da proibição dos atributos e do critério de
aspiração adotado.
Exemplo 8.3: TS para o problema das n rain-
has
Os passos básicos para resolver esse problema são os
seguintes:

1. Escolher o critério de aspiração e a duração da proi-


bição dos atributos.
2. Definir a estrutura de vizinhança.
3. Escolher a topologia inicial.
4. Gerar todos os vizinhos, calcular a função objetivo e
ordenar esses vizinhos colocando primeiro o de mel-
hor qualidade.
5. Passar para o melhor vizinho desde que não se en-
contre proibido ou estando proibido cumpra com o
critério de aspiração.
6. Atualizar a lista de atributos proibidos.
7. Repetir os passos 4 a 6 até encontrar uma topologia
com função objetivo zero, isto é, sem colisões.

39
O problema pode ser facilmente resolvido
usando os seguintes critérios: (1) duração da proi-
bição: 3 transições, (2) critério de aspiração: eliminar a
proibição se aparece uma configuração candidata mel-
hor que a incumbente, (3) caracterização da vizinhança:
é vizinho da configuração corrente toda configuração en-
contrada trocando as colunas de duas rainhas, isto é,
existem 21 vizinhos e, (4) escolhendo a topologia inicial
mostrada na figura 8.3.
Os resultados do processo de solução são mostrados
na tabela 8.2.

40
Tabela 8.2: Solução do problema das 7 rainhas
Iter. Topologia corrente Melhor vizinho Atributo proibido
Configuração v atributo v (duração)
1 2 3 4 5 6 7
1 4 5 3 6 7 1 2 4 1-7 2 1 − 7 (3)

2 2 5 3 6 7 1 4 2 2-4 1 1 − 7 (2); 2 − 4 (3)

3 2 6 3 5 7 1 4 1 1-3 1 1 − 7 (1); 2 − 4 (2); 1 − 3 (3)

4 3 6 2 5 7 1 4 1 5-7 2 2 − 4 (1); 1 − 3 (2); 5 − 7 (3)

5 3 6 2 5 4 1 7 2 4-7 1 1 − 3 (1); 5 − 7 (2); 4 − 7 (3)

6 3 6 2 7 4 1 5 1 1-3 0 5 − 7 (1); 4 − 7 (2); 1 − 3 (3)

7 2 6 3 7 4 1 5 0

41
No processo de solução os vizinhos foram ordenados
em ordem de qualidade e mantendo a ordem natural,
assim se os atributos 1-7 e 2-4 produzem configurações
vizinhas de igual qualidade então é ordenado primeiro 1-
7 e se essas configurações são as melhores seria escolhida
a configuração com atributo 1-7 para realizar a transição
que é o que acontece na primeira transição do processo.
O exemplo permite mostrar o trabalho de cada um dos
componentes de um algoritmo TS com memória de curto
prazo. Assim, deve-se observar os seguintes aspectos:

A solução ótima foi encontrada após 6 transições. Nas


duas primeiras transições aconteceu uma melhoria
da função objetivo e na terceira transição a função
objetivo permaneceu inalterada.

42
Na quarta transição não existe nenhuma configu-
ração vizinha de melhor qualidade. Entretanto, exis-
tem duas configurações com atributos 1-3 e 1-7 que
produzem funções objetivo de igual qualidade, mas
ambas se encontram proibidas. Veja que o atributo
1-3 produziria o retorno a uma configuração já vi-
sitada (a configuração anterior) mas o atributo 1-7
não produziria o retorno a uma configuração já vi-
sitada. Mas essa configuração vizinha está proibida
porque compartilha o mesmo atributo (1-7) de uma
configuração já visitada. Entretanto, a proibição não
é eliminada porque não funciona o critério de aspi-
ração.
Na quarta transição é realizada uma transição para
o vizinho menos pior com uma degradação da função
objetivo. Na quinta transição aconteceu uma melho-
ria na função objetivo.
Finalmente a última transição é realizada mesmo que
o atributo 1-3 se encontre proibido porque o critério
de aspiração funciona já que foi encontrada uma to-
pologia cuja função objetivo é melhor que a incum-
bente. Neste caso foi encontrada a topologia ótima
que estava proibida.
Embora o exemplo seja muito simples permite veri-
ficar o trabalho de cada um dos elementos do algo-
ritmo TS com memória de curto prazo.
43
A figura 8.14 mostra uma iteração do algoritmo TS
que usa memória de curto prazo, sendo que uma iteração
significa que, a partir da configuração corrente, deve-se

avaliar todas as configurações candidatas x ∈ N ∗(x) e
escolher o melhor vizinho como sendo a nova configu-
ração corrente.
Na parte A da figura 8.14 são geradas todas as confi-

gurações candidatas x ∈ N (x). Na parte B é acionada a
lista tabu. Podem ser criadas uma ou várias listas tabu
dependendo do tipo do problema e do nı́vel de sofisti-
cação do algoritmo. A lista tabu pode ser operada de
duas formas: (1) uma implementação contı́nua que não
elimina automaticamente uma configuração candidata
que possui atributos proibidos; assim configurações deste
tipo são penalizadas na função objetivo (o seu equivalen-
te) em C para que se tornem pouco atrativas, e (2) uma
implementação discreta, como foi usada no problema das
n rainhas, em que toda configuração com atributos proi-
bidos é eliminada automaticamente. Neste último caso,
deve-se eliminar o bloco D e da saı́da de C voltar dire-
tamente ao bloco A. O número k de iterações que um
atributo permanece proibido é chamado de estado tabu
(tabu tenure) e o tamanho de k pode variar em cada lis-
ta e durante o processo produzindo algoritmos TS com
diferentes tipos de desempenho.

44
Avaliação da Lista de Candidatos:
- ′
Gerar uma configuração candidata x ∈ N ∗∗ (x)
da configuração corrente.
A
?PP
  PP
  PP
  Teste tabu:
PP
PP B
  P

  Identificar os atributos de x que foram PPPP
  PP
PP 

modificados para gerar a configuração candidata x
PP 
PP Os atributos identificados estão 
PP 
PP classificados como tabu?.  Sim
PP 
PP 
PP 
P ?
QQ
Não  Q
E ?  Teste de Q
 Q C
 aspiração: QQ
Avaliação Tabu sem Penalização: 
Sim  A configuração
Q
Q
Q 
Q candidata x satisfaz 

Avaliar a função objetivo (o seu Q 
equivalente) sem penalização ou Q o critério de 
Q aspiração?. 
considerando uma pequena penalização. Q 
Q 
QQ

F ? Não
?
D
Atualização da Melhor Avaliação Tabu com
Configuração Candidata: Penalização:
Se a função objetivo (o seu equivalente)  Avaliar a função objetivo
′ (o seu equivalente) com uma
de x é a melhor entre os já avaliados, alta penalização dos
então armazenar esta informação. atributos proibidos.

? HH
  HH
 HH Passar para a Melhor

 Teste de Fim: HH G
Configuração Encontrada:
 HH
Passar da configuração x
Não  Foram avaliadas todas as HH Sim-
para a melhor configuração
HH configurações candidatas 
HH x′ da lista (x′ ∈ N ∗∗ (x))?. 

candidata x encontrada.
HH 
HH 
HH  H
HH 

Figura 8.14: Execução de um movimento TS com memória de curto prazo

45
No bloco C é implementado o chamado critério de
aspiração cuja finalidade é fornecer maior flexibilida-
de ao processo. Neste caso uma configuração que possui
atributo(s) proibido(s) pode ter a proibição descartada
se essa configuração satisfaz um critério de aspiração. Na
verdade aqui se tenta contornar a “rigidez” da lista ta-
bu que armazena atributos proibidos. Uma configuração
candidata de excelente qualidade pode ter um atributo
proibido porque compartilha esse atributo com uma con-
figuração já visitada no passado recente. Assim, a lista
tabu ao proibir revisitar configurações visitadas no pas-
sado recente pode também proibir visitar configurações
novas de excelente qualidade. Este fato é contornado pe-
lo critério de aspiração que elimina a proibição de uma
configuração candidata se ela produz uma função obje-
tivo de boa qualidade.
Existem várias formas de definir o critério
de aspiração. Obviamente, o critério mais rı́gido é de-
finir o critério de aspiração da seguinte forma: se uma
configuração candidata produz uma função objetivo mel-
hor que a incumbente (melhor configuração já encontra-
da) então deve-se eliminar a proibição e armazenar essa
configuração candidata no bloco F.

46
Na figura 8.14, no bloco E é realizada a avaliação da
função objetivo (o seu equivalente) para cada configu-
ração candidata. No bloco F é armazenada a melhor
configuração candidata encontrada, no bloco G é veri-
ficada se todas as configurações vizinhas já foram ana-
lisadas e em H é realizada a transição em que a confi-
guração corrente é substituı́da pela melhor configuração
candidata, isto é, a configuração corrente é substituı́da
pela melhor configuração vizinha encontrada.
Existe um último aspecto importante no algoritmo
TS com memória de curto prazo: a diminuição do
tamanho de configurações candidatas ou vi-
zinhas que devem ser analisadas. Para ilustrar
este fato sejam: N (x) as configurações candidatas defi-
nidas pelo critério ou a estrutura de vizinhança, N ∗∗(x)
um subconjunto reduzido de N (x) obtido usando algum
critério de redução de configurações candidatas e N ∗(x)
os elementos de N ∗∗(x) que não estão proibidos pela lista
tabu. Para o problema de planejamento de sistemas de
transmissão podemos definir, por exemplo, N (x) como
todas as configurações que podem ser obtidas a partir
da configuração corrente da seguinte forma: adicionan-
do um circuito, retirando um circuito ou trocando dois
circuitos (adicionando um circuito e retirando outro cir-
cuito previamente adicionado).

47
Para um sistema real esta definição de vizin-
ho significa que N (x) teria milhares de con-
figurações candidatas e como a avaliação de
cada configuração candidata precisa da reso-
lução de um problema de PL, é evidente que esta
definição de vizinho é impraticável pois precisaria da re-
solução de vários milhares de PL para realizar um sim-
ples passo do algoritmo TS. Uma forma de contornar
este problema seria redefinir a vizinhança.
TS contorna o problema anterior de uma
forma mais eficiente encontrando um subconjunto
reduzido N ∗∗(x) de N (x), por exemplo da ordem de
algumas dezenas no caso do problema de planejamen-
to. TS possui quatro estratégias para realizar este pro-
cesso de redução de configurações candidatas: aspiração
plus, conformação de uma lista reduzida de configurações
candidatas de elite, filtros sucessivos e estratégia de mu-
dança limitada. Entretanto, é possı́vel implementar uma
estratégia de redução de configurações candidatas ainda
mais eficiente para o problema de planejamento de siste-
mas de transmissão e cujos detalhes serão apresentadas
na próxima seção.

48
Algoritmo de Busca Tabu com
Memória de Longo Prazo
Um algoritmo TS sofisticado deve usar a maioria das
estratégias propostas na figura 8.1, de maneira integrada
e eficiente, levando em conta as caracterı́sticas especı́ficas
do problema. Nesse tipo de algoritmos, o algoritmo TS
com memória de curto prazo apresentado anteriormente
é, geralmente, um módulo básico dentro de uma estru-
tura mais geral. Uma proposta muito usada pelos pes-
quisadores consiste em incorporar estratégias de longo
prazo. Portanto, além da memória de curto pra-
zo (estratégia de todo algoritmo TS básico)
é incorporada uma estratégia adicional cha-
mada de estratégia de longo prazo no algorit-
mo TS. Existem três aspectos fundamentais
relacionados com a memória de longo prazo:
(1) a memória baseada em freqüência, (2) a
estratégia de intensificação, e (3) a estratégia
de diversificação.

49
Memória Baseada em Frequência
A memória baseada em frequência consiste ba-
sicamente em armazenar a informação do número de ve-
zes em que um atributo foi escolhido para gerar ou par-
ticipar na conformação das configurações durante o pro-
cesso TS. Assim existem dois tipos de memória basea-
das em freqüência: as frequências de transição que
armazenam o número de vezes em que um atributo é re-
tirado ou adicionado para formar novas configurações, e
a frequência de residência ou permanência que
armazena a informação do número de vezes em que um
atributo permanece nas novas configurações ou em to-
das as configurações geradas durante o processo TS. Esta
informação baseada em frequência pode ser utilizada pa-
ra penalizar ou incentivar configurações constituı́das por
determinados atributos.

50
A figura 8.15 mostra uma forma de armazenar memória
baseado em frequência para o problema das n rainhas
com n = 7. Neste caso é usada a parte inferior da estru-
tura matricial para armazenar a frequência de transição
e a parte superior para armazenar a memória de curto
prazo.

Estrutura tabu Os cinco melhores


1 2 3 4 5 6 7 vizinhos
1 3 Rainhas v vp
Solução corrente
1 2 3 4 5 6 7 2 1-6 0 1

1 3 6 2 7 5 4 3 5 2 1-3 1 6
No. de colisões = 1 4 3 1 1-5 1 3
5 2 4 2-7 1 5
6 1 2 3-7 1 4
7 4 3 1
Figura 8.15: Memória baseada em frequência

51
Na figura 8.15 é armazenado o número de
vezes em que duas rainhas trocaram de colu-
nas para realizar uma transição durante todo
o processo. No caso mostrado na figura foram imple-
mentadas 25 transições e 5 dessas transições foram reali-
zadas trocando as colunas das rainhas 1 e 3, 2 transições
trocando as rainhas 1 e 5, etc. A informação basea-
da em frequência pode ser usada de várias for-
mas. Por exemplo, a partir da configuração mostrada
na figura 8.15, pode-se decidir implementar uma diversi-
ficação que consiste em visitar configurações encontradas
usando atributos que não foram usados ou foram pouco
usados levando o processo a regiões ainda não visita-
das. Uma forma simples de implementar esta
estratégia consiste em mudar a função obje-
tivo penalizando as configurações que podem
ser encontradas usando atributos muito utili-
zados durante o processo. Assim, a partir da con-
figuração da figura 8.15, pode-se usar a seguinte função
objetivo: vp = v + nf em que vp é a função objetivo
modificada, v é a função objetivo convencional (número
de colisões) e nf é o número de vezes em que foi usado
um atributo.

52
Os resultados de vp para os 5 melhores vizinhos são
mostrados na figura 8.15. É fácil verificar que o processo
TS, com a nova função objetivo, deve priorizar atributos
não usados ou pouco usados levando o processo a novas
regiões. Essa é uma forma simples de implementar diver-
sificação usando memória baseada em frequência. Logi-
camente, após um número determinado de transições,
pode-se mudar novamente a estratégia e também po-
dem ser usadas outras formas de memória baseada em
frequência como, por exemplo, as seguintes: (1) arma-
zenar a frequência de permanência de um atributo du-
rante todo o processo para depois usar na implemen-
tação de intensificação ou diversificação e, (2) armaze-
nar a freqüência de permanência em configurações de
elite encontradas durante o processo que pode ser usa-
da em diversificação, e (3) armazenar a frequência de
transição somente de atributos que permitem identificar
configurações de qualidade. Obviamente, devem ser ne-
cessárias a utilização de novos arranjos para armazenar
essas informações e maiores requerimentos de memória.

53
No problema de planejamento de sistemas
de transmissão é possı́vel armazenar a infor-
mação baseada em frequência de várias for-
mas, levando em conta ainda que a estrutura de vizin-
hança pode ser mais complexa que no problema das n
rainhas porque no problema de planejamento geralmente
são usados vários tipos de atributos (adição, retirada e
troca de circuitos ou conjunto de circuitos). Por exem-
plo, pode-se armazenar o número de vezes em
que um circuito é adicionado ou retirado na
construção das configurações no processo TS
(seria a frequência de transição), assim como
também é possı́vel armazenar o número de ve-
zes em que um circuito permanece adiciona-
do em configurações consecutivas ou o número
de configurações em que um circuito participa
com adição (seria a frequência de residência).
Essa informação pode ser posteriormente usada para im-
plementar diversas estratégias tais como a intensificação
e a diversificação.

54
Estratégia de Intensificação
A estratégia de intensificação consiste em mudar
os critérios de seleção das novas configurações candida-
tas, isto é, mudar N ∗∗(x) ( ou N ∗(x) ) para incentivar a
busca de novas configurações aproveitando a informação
acumulada no processo TS. Intensificação pode ser
implementada de várias formas diferentes tais
como:

Eliminando vizinhos ou incorporando novos vizinhos



x para a configuração corrente x, tipicamente consi-
derando configurações de elite ou configurações com
esses atributos como sendo “vizinhos” de x.
Modificando a caracterização de configuração vizin-
ha, isto é, redefinindo o conjunto N (x).
Retornando a regiões atrativas para realizar uma bus-
ca mais intensa na vizinhança dessas regiões atrati-
vas. A figura 8.4 mostra uma estratégia para esta
alternativa.
Realizando intensificação por decomposição.

55
As duas primeiras alternativas dispensam comentários
adicionais. Na intensificação retornando a regiões atra-
tivas, mostrada na figura 8.16, a parte mais importante
é o bloco B identificado como estratégia de seleção
de configurações de elite. Este bloco identifica a es-
tratégia que deve ser implementada para encontrar um
conjunto de configurações de elite em que cada uma de-
las identifica uma região promissora. Assim, a partir de
cada uma das configurações de elite armazenadas na lis-
ta, deve-se implementar um novo processo de busca de
excelentes configurações guiada por uma estratégia TS
de memória de curto prazo como mostra o bloco D.

56
Existem três estratégias para encontrar as k
configurações de elite que devem ser armaze-
nadas na lista do bloco B:

Introduzir alguma forma de diversificação para en-


contrar e armazenar configurações significativamen-
te diferentes, apagar toda a memória de curto prazo
e reinicializar o processo a partir da última configu-
ração armazenada.
Formar e manter uma lista de tamanho especificado
e adicionar uma nova configuração como último ele-
mento da lista somente se ela é melhor que alguma
configuração já armazenada. O último elemento da
lista sempre é o primeiro escolhido para reinicializar a
busca. Neste caso é necessário armazenar a memória
de curto prazo da última configuração armazenada
para evitar voltar a visitar essa configuração.
Uma terceira variante consiste em construir e man-
ter em forma ordenada uma lista com as k melhores
configurações encontradas durante um número deter-
minado de iterações. Depois o processo é reiniciado,
durante um número de iterações especificado, com a
pior configuração e usando busca tabu probabilı́sti-
ca. Durante este processo, qualquer configuração que
seja melhor que a pior da lista deve ser incorporada
na lista, substituindo a pior configuração.

57
Aplicar memória TS de curto prazo.

Usar uma estratégia de seleção de configurações de elite:


Gerar e armazenar uma lista de k configurações
de elite (entre 5 e 30 configurações de elite).
B

?
Quando a chance de encontrar novas configurações de
qualidade usando memória TS de curto
prazo diminuem abaixo de um nı́vel desejado:
-
Parar se foi atingido o limite de iterações ou
se a lista de configurações de elite está vazia.
Em caso contrário, escolher uma nova configuração
elite da lista e eliminar essa configuração da lista.
C

?
Reiniciar TS com memória de curto prazo
a partir da configuração de elite escolhida:
Se as novas configurações satisfazem a
exigência da estratégia de seleção então
adicionar essas configurações na lista
(substituindo outras se a lista está cheia).
D

Figura 8.16: Implementação simples de intensificação em TS.

58
Outro tipo de intensificação é a técnica de intensi-
ficação por decomposição que consiste em impor
novas restrições sobre atributos, estruturas ou partes do
problema visando diminuir o espaço de configurações do
problema. Assim, por exemplo, no problema de planeja-
mento de sistemas de transmissão em algum momento
do processo TS (por exemplo após terminar um TS de
memória de curto prazo), pode-se usar intensificação por
decomposição das seguintes formas:

Fixando no valor zero o número de circuitos candida-


tos que nunca foram adicionados, isto é, eliminando
um conjunto de circuitos como candidatos a adição.
Incorporando para a configuração base aqueles cir-
cuitos que aparecem em todas as configurações de
elite.
Fixando estruturas completas de alguma configuração
de elite. Por exemplo, se para eliminar uma gran-
de demanda foi necessário adicionar um conjunto de
circuitos que se encontram formando uma espécie de
bloco construtivo, então toda essa estrutura pode ser
incorporada para a configuração base.

59
As três propostas anteriores podem ser im-
plementadas em conjunto ou separadamente
na estratégia de intensificação por decompo-
sição. Todas essas estratégias visam diminuir o número
de alternativas para exploração, permitindo focalizar a
busca num número mais reduzido de alternativas. As-
sim, esta estratégia de intensificação por decomposição
produz um efeito que pode ser chamado de implosão
combinatorial, em contraste com explosão combinato-
rial.
Uma forma esquemática de mostrar um processo de
intensificação é apresentada na figura 8.17. Neste caso
inicialmente é realizado um processo TS com memória
de curto prazo fazendo o processo de transições A-1-2-3-4
e armazenando nesse processo as configurações de elite 1,
2, 3 e 4. Depois é implementada a intensificação a partir
de cada uma das configurações de elite e modificada a
estrutura de vizinhança para priorizar a busca em torno
de pontos ótimos locais como é mostrado pelos processos
indicados por I na figura 8.17. Na figura, a intensificação
iniciada a partir da configuração de elite 4(B) encontra
o ótimo global.

60
Estratégia de Diversificação
A estratégia de diversificação foi projetada para levar
o processo de busca para regiões novas e atrativas. Es-
ta estratégia é implementada mudando a definição de
vizinhança ou de configurações candidatas N (x), incor-
porando “vizinhos” constituı́dos por atributos que foram
pouco usados. Nesta parte podem ser usadas as estrutu-
ras de memória usadas em intensificação ou em memória
de curto prazo mas com critérios de duração modifica-
dos. A figura 8.18 mostra uma estratégia simples de di-
versificação que usa uma memória baseada em
frequência sobre todo o passado do processo.

61
Usar TS com memória de curto prazo.

Armazenar a memória baseada em freqüência


dos atributos das configurações visitadas.

?
Quando a taxa de aparecimento de novas configurações
excelentes diminui abaixo de um valor especificado
implementar o seguinte laço.

- Usar TS com memória de curto prazo (armazenando também


a memória de freqüência) até encontrar um ótimo local.

Penalizar aqueles atributos que são acionados freqüentemente


(multiplicando o fator de penalização pela freqüência relativa).
Se o limite de iterações foi excedido, pare.

Continuar aplicando penalização até que seja


encontrada uma configuração melhor que seu
predecessor. Então elimine as penalizações.

Figura 8.18: Implementação simples de diversificação em TS.

62
É possı́vel encontrar melhorias significativas usando
diversificação no algoritmo TS. A maioria dos al-
goritmos que usam diversificação estão basea-
dos no uso de memória de longo prazo, usan-
do memória baseada em frequência. Entretanto,
as estratégias de diversificação podem também ser im-
plementadas usando memória de longo prazo ba-
seada en recência que consiste basicamente em in-
crementar o número de transições em que um atributo
permanece proibido. Por exemplo, no problema das n
rainhas foi implementado um algoritmo com memória
de curto prazo com k = 3 transições proibidas. Trocan-
do o valor para k = 10 após terminar o processo TS com
memória de curto prazo, o processo pode entrar numa
fase de diversificação devido ao aumento de número de
transições em que os atributos permanecem proibidos.
Esse valor de k força o processo a entrar em regiões não
visitadas. O valor de k pode ser modificado novamente
para k = 3 quando foi satisfeito um critério de aspiração
forte que pode consistir em encontrar, por exemplo, uma
configuração com função objetivo de boa qualidade ou
uma configuração de elite.

63
Uma forma esquemática de mostrar um processo de
diversificação é apresentada na figura 8.17. Neste caso
inicialmente é realizado um processo TS com memória
de curto prazo fazendo o processo de transições C-D. A
partir da configuração D, são iniciados 3 processos de
diversificação diferentes: (1) os processos D-E e D-F que
terminam em soluções ótimas locais e, (2) o processo
D-A que encontra a solução ótima global.

64
Oscilação Estratégica
Oscilação estratégica fornece um excelente mecanismo
para realizar uma interação entre intensificação e diver-
sificação a médio ou longo prazo. Esta técnica geralmen-
te é implementada quando foi atingido um nı́vel crı́tico
em que o método TS normalmente pararia. Assim, an-
tes de parar após atingido o nı́vel crı́tico, pode-se mudar
as regras de escolha de novas configurações candidatas
(mudar N (x)) para passar fora do limite do nı́vel crı́tico.
Uma vez passado o nı́vel crı́tico, muda-se novamente as
regras de escolha de configurações candidatas tanto no
afastamento como no retorno ao nı́vel crı́tico. Um pro-
cesso repetitivo desta estratégia produz um movimento
oscilatório em torno do nı́vel crı́tico. O nı́vel crı́tico
pode ser determinado pela qualidade da con-
figuração (função objetivo) ou pela fronteira
de factibilidade e infactibilidade das configu-
rações.

65
No problema de planejamento de sistemas de trans-
missão, pode-se usar a oscilação estratégica de uma ma-
neira mais eficiente. Assim, por exemplo, pode-se iniciar
o processo a partir de uma configuração infactı́vel e usar
uma estratégia TS com memória de curto prazo até en-
contrar uma configuração factı́vel. Uma vez encontrada
uma configuração factı́vel, pode-se realizar um processo
de intensificação aceitando simplesmente configurações
factı́veis que permitam encontrar o ótimo local corres-
pondente a essa região. Uma vez terminada a intensi-
ficação, pode-se implementar uma rápida diversificação
para entrar novamente na região infactı́vel e reiniciar a
estratégia TS de memória de curto prazo para voltar
novamente a uma nova região factı́vel e reiniciando a es-
tratégia de busca oscilatória. Em cada parte do processo
devem ser implementadas regras especı́ficas para defi-
nir as configurações candidatas e evitar voltar a visitar
regiões já visitadas. Obviamente, é possı́vel implemen-
tar esta estratégia com um maior nı́vel de sofisticação.
Assim, o processo integral TS pode ser um processo de
oscilação estratégica modificando as regras em cada fase
do processo de oscilação estratégica.

66
Path Relinking
Path relinking (PR) é uma função TS inven-
tada recentemente e é usada para gerar con-
figurações potencialmente atrativas para ini-
ciar um processo de intensificação ou diver-
sificação. Path relinking permite gerar novas confi-
gurações usando como base duas ou três configurações
de qualidade chamadas de configurações de elite. Neste
contexto, path relinking é muito parecido com a recombi-
nação dos algoritmos genéticos. Entretanto, a diferença
fundamental acontece em dois aspectos importantes: (1)
as configurações são escolhidas em forma determinı́stica
e dentre as configurações de qualidade (configurações de
elite) e, (2) pode-se implementar um processo de tran-
sições a partir de uma configuração até encontrar a ou-
tra configuração, gerando nesse processo novas configu-
rações que podem ser de melhor qualidade que as confi-
guraçõe escolhidas.

67
Durante o processo TS com memória de curto prazo
são armazenadas as melhores configurações encontradas,
chamadas de configurações de elite dentre as
quais está obviamente a incumbente. Duas ou
mais configurações de elite podem ser usadas para gerar
uma configuração atrativa como é mostrada na figura
8.19. A forma mais simples de implementar path relin-
king é copiando uma parcela dos atributos ou elementos
de uma configuração de elite em outra configuração de
elite.

68
Configurações de Elite em Busca
Tabu
TS armazena um conjunto reduzido de configurações
de elite que foram visitadas durante o processo de tran-
sição. Estas configurações de elite são usadas de várias
formas. Uma configuração de elite pode ser usa-
da para reiniciar um processo de intensificação,
mas também pode ser usada para gerar con-
figurações atrativas através de path relinking
para reiniciar processos de intensificação e de
diversificação. Adicionalmente, esta estratégia permi-
te dispor no final do processo de um conjunto de confi-
gurações quase-ótimas além da melhor configuração en-
contrada (incumbente). Para identificar e armazenar as
configurações de elite, deve-se dispor de uma estratégia
adequada. Assim, por exemplo, uma configuração en-
contrada durante o processo TS é considerada de elite
e substitui a pior configuração de elite já armazenada
na lista de configurações de elite se satisfaz os seguintes
critérios: (1) possui uma função objetivo de melhor qua-
lidade que alguma das já armazenadas e, (2) possui um
número mı́nimo de atributos diferentes com cada uma
das configurações já armazenadas.

69
O Algoritmo GRASP
O nome GRASP vem do inglês Greedy Ran-
domized Adaptive Search Procedure, isto é,
um algoritmo heurı́stico construtivo do tipo
guloso mas que usa uma componente aleatória
e adaptativa. GRASP foi usado para resolver vários
problemas complexos de engenharia elétrica como o pro-
blema de planejamento da expansão de sistemas de trans-
missão. Apresentamos uma breve teoria sobre o algorit-
mo GRASP assim como a proposta apresentada em para
o problema de planejamento de sistemas de transmissão.

70
Teoria Básica de GRASP
A idéia básica do algoritmo GRASP é apresentada
no contexto do problema de planejamento da expansão
de sistemas de transmissão. GRASP é uma evo-
lução dos algoritmos heurı́sticos construtivos,
especialmente do algoritmo guloso. Um algorit-
mo heurı́stico construtivo guloso encontra uma boa so-
lução factı́vel de um problema complexo adicionando em
cada passo uma componente da solução. Em cada passo
do algoritmo é escolhido o melhor componente identifica-
do por um indicador de sensibilidade. Para o caso do pro-
blema de planejamento de sistemas de transmissão, em
cada passo é adicionado um circuito ao sistema, aquele
circuito que apresenta o melhor critério de desempenho
ou indicador de sensibilidade.

71
Um dos principais problemas dos indicadores de sensi-
bilidade de um algoritmo heurı́stico é que, além de serem
indicadores aproximados, o conceito de melhor circuito
a ser adicionado é dependente da configuração corrente
que está sendo analisada, isto é, existe a melhor proposta
para a topologia corrente o que não significa que seja a
melhor proposta para encontrar a topologia ótima. En-
tretanto, em cada passo do processo heurı́stico, é muito
provável que o melhor circuito que deve ser adicionado
ao sistema, em termos de topologia ótima, se encontre
entre os melhores classificados pelo indicador de sensibi-
lidade mas nem sempre deve ser o melhor classificado.
Portanto, GRASP sugere escolher um circuito
de uma lista dos k circuitos melhores classifi-
cados pelo indicador de sensibilidade porque
é altamente provável que nessa lista de k cir-
cuitos existam circuitos que fazem parte da
topologia ótima.

72
A escolha do circuito, na formulação bási-
ca, é realizada em forma aleatória mas exis-
tem várias formas de realizar essa escolha,
por exemplo, usando funções de probabilidade
que, fundamentalmente, fornecem maior pro-
babilidade na escolha aos circuitos melhores
classificados. A escolha aleatória de um circuito, de
uma lista de k circuitos, permite encontrar muitas to-
pologias de qualidade através de processos repetitivos
usando sementes diferentes para gerar a sequência de
números aleatórios. O conceito adaptativo apare-
ce quando é usada uma lista de tamanho va-
riável e que depende da evolução do processo. Esse tipo
de algoritmo que usa tamanho de lista k variável duran-
te o processo é chamado de algoritmo GRASP reativo.
Obviamente, cada nova topologia encontrada pode ser
submetida a um processo de busca local tentanto encon-
trar um ótimo local a partir da topologia encontrada.

73
O algoritmo GRASP, para um problema genéri-
co, assume a seguinte forma:

1. Implementar a fase de pré-processamento.


2. Realizar a fase de busca construtiva.
3. Realizar a fase de pós-processamento de busca local.
Atualizar a incumbente caso seja possı́vel.
4. Se o critério de parada não for satisfeito, voltar ao
passo 2. Caso contrário, pare. A resposta do algorit-
mo é a incumbente armazenada.

O pre-processamento tenta identificar deter-


minadas subestruturas, isto é, atributos ou conjun-
to de atributos, que permitem iniciar o processo de busca
construtiva ou diminuir o espaço de soluções do proble-
ma. Por exemplo, no problema da árvore de expansão
mı́nima, pode-se formar uma lista com as arestas de me-
nor peso. Cada elemento dessa lista pode ser usado para
iniciar um processo de busca na fase construtiva.

74
A fase de busca construtiva consiste em en-
contrar uma solução de qualidade para o proble-
ma usando um algoritmo heurı́stico construtivo escol-
hendo, em cada passo, um elemento de uma lista de ta-
manho k. A fase construtiva do algoritmo GRASP apre-
senta os seguintes passos:

1. Escolha a solução inicial que pode ser vazia, isto é,


sem adição de variáveis, que se transforma na solução
corrente.
2. Para a solução corrente e usando umı́ndice de desem-
penho ou indicador de sensibilidade, elaborar uma
lista com as k variáveis mais atrativas.
3. Escolha uma variável da lista de k elementos e atua-
lizar a solução corrente com a adição da variável es-
colhida.
4. Se a solução corrente é factı́vel ou foi satisfeito o
critério de parada (sem encontrar uma solução factı́vel)
terminar com a fase construtiva. Caso contrário vol-
tar ao passo 2.

75
Analisamos, brevemente, uma forma adequada para
encontrar os elementos da lista. Seja z(x) a função obje-
tivo de um problema com variáveis x. Tipicamente, uma
função de mérito ou indicador de sensibilidade apresenta
a seguinte forma:

∂z
h(xi) ∝
∂xi

A função h(xi) permite encontrar a lista de variáveis


atrativas que fazem parte do conjunto RCL. Consideran-
do que o problema é de minimização da função objetivo
z(x), então a variável mais atrativa, xi, identificado por
um algoritmo guloso, é aquele que apresenta um menor
valor de h(xi).

76
Portanto, fazem parte do conjunto RCL todas as va-
riáveis cujos ı́ndices satisfazem a seguinte relação:

min min max min


 
RCL = i ∈ X/. h ≤ h(xi) ≤ h + α(h −h )
(2)
em que X é o conjunto de ı́ndices das variáveis que ainda
podem ser adicionadas e α é um parâmetro fornecido pe-
lo usuário com valores 0 ≤ α ≤ 1. hmax e hmin assumem
a seguinte forma:

hmax = máx {h(xi)}


i∈X

hmin = mı́n {h(xi)}


i∈X

77
Logicamente, um algoritmo heurı́stico cons-
trutivo (guloso) escolheria a variável xi com
h(xi) = hmin. O parâmeto α representa um compromis-
so entre escolha aleatória e gulosa e, pode-se verificar
que α = 1 representa um processo totalmente aleatório
e α = 0 um processo guloso. A escolha da variável da lis-
ta pode ser realizada de duas formas: (1) aleatoriamente
e, (2) usando uma função de distribuição de probabi-
lidade como, por exemplo, a função de distribuição de
probabilidade linear bi = 1/ri em que ri representa a po-
sição que ocupa a variável i na lista de variáveis atrativas
RCL. Portanto, a probabilidade de escolha da variável i
é encontrada usando a relação:

bi
pi = (3)
bj
X

j∈RCL

78
Exemplo 8.4: Escolha de uma
variável da lista
Na resolução de um problema usando GRASP foram
selecionadas as seguintes variáveis ordenadas em ordem
de qualidade: x2, x4, x32, x9 e x7. Calcular a probabi-
lidade de escolha de cada variável usando a função de
distribuição de probabilidade linear, assim como a escol-
ha aleatória.
Usando a função de distribuição de probabilidade li-
near (bi = 1/ri) e a relação (3) se encontra facilmente a
probabilidade de escolha de cada variável mostrada na
tabela 8.3. Para o caso alatório a probabilidade é igual
para cada uma das variáveis e igual a 0,20.

Tabela 8.3: Probabilidade de escolha das variáveis.


Variável xi ri bi pi
x2 1 1 60/137
x4 2 1/2 30/137
x32 3 1/3 20/137
x9 4 1/4 15/137
x7 5 1/5 12/137

79
Logicamente, a soma de probabilidades deve
ser igual à unidade. A escolha da variável pode ser
implementada usando um gerador de números aleatórios
como na implementação da seleção proporcional no algo-
ritmo genético. O leitor está convidado a refletir sobre as
semelhanças existentes entre a escolha de uma variável
usando uma função de distribuição de probabilidade li-
near em GRASP e a seleção usando escalonamento linear
no algoritmo genético.

80
Um tipo especial do algoritmo GRASP é o
chamado algoritmo GRASP reativo que usa
um valor de α adaptativo, isto é, são usados va-
lores diferentes de α durante o processo e, portanto, o
tamanho da lista RCL também deve ser variável. A idéia
básica consiste em escolher um conjunto de valores pa-
ra α e usar, preferencialmente, aquele valor de α que
está apresentando melhor desempenho durante o pro-
cesso. Foi mostrado experimentalmente que o GRASP
reativo apresenta melhor desempenho comparado com o
GRASP convencional. Seja A um conjunto de m valores
para α previamente especificados. Pretende-se encontrar
uma estratégia para identificar aquele valor de α mais
atrativo. Assim, deve-se determinar a probabilidade pi
de que o valor especificado αi seja escolhido numa ite-
ração do algoritmo GRASP.

81
No GRASP reativo, o processo é iniciado dando igual
probabilidade para cada um dos m valores de α espe-
cificados, isto é, pi = 1/m; i = 1, . . . , m. Durante o
processo, a distribuição de probabilidades é atualizada
com o histórico do processo. Para um problema de mi-
nimização com função objetivo v(x) são calculados os
valores médios da função objetivo para cada um dos va-
lores αi usados durante as últimas np transições para
encontrar a distribuição qi da seguinte forma:

∗ δ
v
 

qi =   i = 1, . . . , m (4)
vi
em que v ∗ é a incumbente do processo GRASP reativo e
v i é o valor médio dos valores da função objetivo obtidos
usando αi. Para encontrar a distribuição de probabilida-
de padronizada pi deve ser usada a relação:

qi
pi = m (5)
qj
X

j=1

82
A relação anterior permite selecionar o αi que deve
ser usado em cada passo do processo GRASP reativo.
Após np transições, os valores dos pi são atualizados,
recalculando os valores médios v i e usando (4) e (5).
Esses novos valores dos pi são usados para selecionar o
αi nas próximas np transições. Este processo de escolha
também é muito parecido com a seleção por escalona-
mento linear no algoritmo genético. O processo GRASP
deve priorizar o uso daquele αi que está encontrando so-
luções com funções objetivo de melhor qualidade porque
esse αi deve apresentar um maior valor de pi e, portan-
to, com maior chance de ser selecionado. Para selecionar
o αi que deve ser usado pode ser implementada uma
estratégia similar que na seleção proporcional no algo-
ritmo genético usando um gerador de número aleatório
p ∈ {0, 1}.

83
Exemplo 8.5: Escolha do parâmetro
αi
Supor um problema de minimização com função ob-
jetivo v(x), que penaliza as infactibilidades na função
objetivo e usa um valor de αi em cada transição. Na re-
solução desse problema, nas últimas np = 10 transições
foram obtidos os resultados mostrados na tabela 8.4 e
usando 4 valores de α, isto é, A = {α1, α2, α3, α4} =
{1/5, 1/3, 1/2, 3/4}.

Tabela 8.4: Funções objetivo de 10 transições.


Teste 1 2 3 4 5 6 7 8 9 10
αi α3 α2 α4 α1 α1 α2 α1 α2 α4 α2
v(x) 80 52 56 64 60 48 56 51 52 49

84
Calcular os valores de probabilidade pi que permitam
encontrar o αi para continuar o processo GRASP reati-
vo. Considere dois casos: (1) δ = 1 e, (2) δ = 5.
Da tabela 8.4 se encontra facilmente os valores médios:
v 1 = 60, v 2 = 50, v 3 = 80 e v 4 = 54.
Com os valores anteriores e considerando que a incum-
bente é v ∗ = 48 podem ser encontrados os valores dos qi
e os valores de probabilidade pi usando as relações (4) e
(5). Os resultados, para δ = 1 e δ = 5 são apresentados
na tabela 8.5

Tabela 8.5: Valores de probabilidade pi.


δ=1
q1 q2 q3 q4 p1 p2 p3 p4
0,800 0,960 0,600 0,889 0,246 0,295 0,185 0,274
δ=5
0,328 0,815 0,078 0,555 0,185 0,459 0,044 0,312

85
Deve-se observar que o algoritmo GRASP
reativo apresenta em cada passo duas decisões
de caráter aleatório: (1) escolha de uma variável da
lista RCL e, (2) escolha do parâmetro αi que determina
o tamanho da lista RCL.
A fase de busca local no algoritmo GRASP procura
encontrar uma solução ótima local na vizinhança da so-
lução encontrada na fase de busca construtiva. Esta fase
é praticamente equivalente a um processo de intensifi-
cação no algoritmo tabu search. O processo consiste em
definir uma vizinhança da solução encontrada pela fase
construtiva e encontrar uma solução factı́vel de melhor
qualidade nessa vizinhança. Sempre que é encontrada
uma solução factı́vel de melhor qualidade a busca local
deve ser reinicializada encontrando uma nova vizinhança
da nova solução para reiniciar a busca local. Este pro-
cesso, em geral, também pode precisar de um esforço
computacional relativamente elevado dependendo do ti-
po de problema. Em geral, a fase de busca local pode
ser um processo muito simples ou muito complexo, na
implementação e no esforço computacional.
As principais fases do algoritmo GRASP são ilustradas
usando o problema de encontrar o conjunto máximo de
vértices independentes de um grafo.

86
Exemplo 8.6: Conjunto máximo de
vértices independentes de um grafo.
Dado um grafo G = (V, E) em que V é o número de
vértices e E é o número de arestas do grafo, pretende-se
encontrar um conjunto de vértices independentes com o
maior número de elementos. Um vértice é independente
de outro se não existe uma aresta ligando esses vértices.
Seja o grafo mostrado na figura 8.24 com 6 vértices e 7
arestas. Mostramos um passo do algoritmo GRASP para
este problema.

1
a v v b v c

5 |V | = 6
2 3 6 V = {a, b, c, d, e, f }
E = {1, 2, 3, 4, 5, 6, 7}

d v v v f
4 e 7

Figura 8.24: Grafo do exemplo 8.6.

87
Neste problema aparece o conceito de grau
de um vértice v, d(v), como sendo o número de
vértices vizinhos ao vértice v no grafo corren-
te. Assim, na figura 8.24, o grau do vértice a é d(a) = 2
e do vértice e é igual a d(e) = 4.
A fase de pré-processamento pode consistir em sele-
cionar um conjunto reduzido de vértices no grafo inicial
para iniciar a busca a partir de um desses vértices escol-
hidos aleatoriamente. Outra alternativa pode ser identi-
ficar todos os vértices de grau zero (sem ligação através
de arestas) e incorporar esses vértices na solução inicial
ou ainda uma combinação dessas alternativas.

88
A fase construtiva pode ser um algoritmo heurı́stico
construtivo:

1. Seja S ∗ o conjunto de vértices independentes que


deve ser encontrado em forma construtiva. Iniciar o
processo com S ∗ = ∅ ou com um S ∗ montado na fase
de pré-processamento. Seja S ∗ a solução corrente.
Fazer o contador de iterações k = 1.
2. A partir da solução corrente S ∗ montar um subgrafo
Gk após eliminar todos os vértices que estão em S ∗
ou possuem uma aresta comum com um vértice em
S ∗. Seja Vk o conjunto de vértices de Gk . Se Vk = ∅
então foi encontrada uma solução do problema na fa-
se construtiva e terminar o processo. Caso contrário,
ir ao passo 3.
3. Encontre o grau mı́nimo D do subgrafo Gk usando
a relação:
D = mı́n {dk (v); v ∈ Vk }
4. Monte o conjunto reduzido de arestas RCL, que de-
fine os vizinhos atrativos da solução corrente, usando
a relação:
RCL = {v ∈ Vk |. dk (v) < (1 + α)D; α > 0}
5. Selecionar uma aresta j de RCL aleatoriamente e
atualizar o conjunto S ∗: S ∗ = S ∗ ∪ {j}. Atualizar o
contador de iterações e voltar ao passo 2.
89
Usando o algoritmo anterior, usando um valor de α =
0, 6, a fase construtiva do exemplo pode ser resolvida
através dos seguintes passos:
Primeira iteração:
Passo 1: Iniciamos com S ∗ = ∅.
Passo 2: G1 é o grafo completo com V1 = {a, b, c, d, e, f }.
Passo 3: D = mı́n{d1(a), d1(b), d1(c), d1(d), d1(e), d1(f )}

D = mı́n{2, 2, 2, 2, 4, 2} = 2

Passo 4: (1 + α)D = (1 + 0, 6)(2) = 3, 2

−→ RCL = {a, b, c, d, f }

Passo 5: Aleatoriamente é selecionado o vértice a

−→ S ∗ = {a}

k = 2.

90
Segunda iteração:
Passo 2: O subgrafo G2 apresenta a seguinte forma:

u c

u u
f
e
com V2 = {c, e, f }.
Passo 3: D = mı́n{d2(c), d2(e), d2(f )}
D = mı́n{2, 2, 2} = 2.
Passo 4: (1 + α)D = (1 + 0, 6)(2) = 3, 2

−→ RCL = {c, e, f }

Passo 5: Aleatoriamente é selecionado o vértice e

−→ S ∗ = {a, e}

k=3

91
Terceira iteração:
Passo 2: O subgrafo G3 = ∅ −→ S ∗ = {a, e}
é uma solução encontrada na fase construtiva.
A fase construtiva encontrou uma solução factı́vel que
não é uma solução ótima. O leitor está convidado a en-
contrar as soluções ótimas alternativas do problema tais
como os conjuntos: {b, d, f } e {b, c, d}.

92
Na fase de pós-processamento pode ser usado qual-
quer algoritmo de otimização local. Assim, pode-se usar
um processo de busca através de uma vizinhança de ta-
manho k. Esse processo de busca pode ser resumido nos
seguintes passos:

1. Seja S uma solução com m elementos encontrada na


fase construtiva.
2. Encontrar todos os subconjuntos de S com cardina-
lidade k. Supor que existe p subconjuntos desse tipo:
W1, W2, . . . , Wp.
3. Para cada subconjunto Wj fazer seguinte:
a) Identificar o conjunto Sj cujos elementos são ele-
mentos de S que não estão em Wj .
b) Montar um grafo Gj formado pelos vértices do
grafo que não estão em Sj nem são vizinhos de
um vértice que está em Sj .
c) Encontrar o conjunto máximo de tamanho Nj do
grafo Gj por busca exaústiva.
d ) Se a cardinalidade de Sj ∪Nj é maior que m então
foi encontrada uma solução de melhor qualidade
que S.

93

Você também pode gostar