7. Figura 1.2 Lin105 : solução greedy
A tabela 1.1 Lista alguns resultados do mesmo algoritmo:
Instancia Número de Cidades Custo
Inicial
Custo Final(Ótimo) Tempo(s)1
dantzig42 42 2977.8 1259.4 0.002
lin105 105 124483 44230.4 0.015
tsp255 255 40287 14089.8 0.082
att532 532 512377.4 144217.8 0.55
pcb1173 1173 1405734.2 421106.2 2.96
Tabela 1.1 TSP: Otimização Local
A partir dos dados da tabela 1.1 podese perceber que o algoritmo greedy é
extremamente veloz, mas produz soluções com qualidade insatisfatória. A principal
utilidade do algoritmo é que ele é utilizado por uma técnica que diminui o tempo
computacional gasto pela heurística simulated anneling.
1
Todas as medidas desse trabalho foram feitas em um Pentium 200Mhz com 64Mbtyes utilizando o
sistema operacional Linux K2.0.0 e o compilador C gcc com opção O3.
8. 1.3.2 Quadratic Assignment Problem
O Quadratic Assignment Problem(QAP) constitui em minimizar o custo da
seguinte função:
f f = ∑
i=0
N−1
∑
j=0
N−1
aij b f i f j
,onde N é o tamanho do problema. As soluções são todas as possíveis
permutações φ do intervalo inteiro [0, N 1]. A entrada para o problema são as matrizes
A e B, onde a matriz A representa uma matriz de distância entre duas localidades i e j, e a
matriz B representa uma matriz de fluxo entre duas localidades i e j.Dessa forma, o
problema QAP consiste em minimizar o produto de distância por fluxo. A versão do
problema utilizada nesse trabalho foi a simétrica, ou seja, a matriz A é simétrica.
A estrutura de vizinhança é determinada com base na transformação que efetua a
troca de dois números da permutação. A variação do custo pode então ser determinada
eficientemente como mostrado no pseudocódigo abaixo:
custo_troca(sol, dimensão, A, B, numero1, m, n)
início
variação_custo := 0;
para k := 0 até k < dimensão faça
se k != m e k != n então
variação_custo += (A[n][k] A[m][k])*(B[sol[n]][sol[k]] B[sol[m]][sol[k]]);
k += 1;
fim
variação_custo = 2 * variação_custo;
fim
Similarmente ao problema TSP, um algoritmo greedy foi definido com base na
estrutura de vizinhança descrita. Os resultados para algumas instâncias podem ser vistos
na tabela 1.2.
Instancia N Custo Inicial Custo Final(Ótimo) Tempo(s)
chr15a 15 54663.2 17726(9869) 0.0006
chr25a 25 21367.2 7852(3796) 0.003
tai50 50 5911030 5284871.6
([3854359, 4941410]2
)
0.03
tai100 100 24099888.8 22140872.8
([15824355,21125314])
0.23
2
O ótimo esta no intervalo dado.
13. 2 Simulated Annealing
Descrevese nesse item o algoritmo de otimização simulated annealing.
Inicialmente será apresentado a origem do algoritmo e suas características básicas. Em
seguida, será descrito de forma sucinta as várias decisões a respeito do algoritmo
conhecidas como cooling shecudule e uma técnica para diminuir o tempo computacional
do algoritmo será apresentada. Finalmente, resultados experimentais referentes aos
problemas propostos no item 1 serão relatados.
2.2 Características básicas
O algoritmo simulated annealing foi desenvolvido independentemente por
Kirkpatrick et al. [] e Cerny[] no início da década de 80. Na sua forma original, ele é
baseado na analogia entre a simulação do esfriamento de sólidos e a resolução de
problemas de otimização combinatorial.
A palavra annealing denota o processo físico onde um sólido é submetido à um
banho térmico que eleva sua temperatura a um valor máximo, onde já no estado líquido,
suas moléculas se dispõem randomicamente no material. A partir desse estado, a
temperatura do banho térmico é lentamente diminuída. Dessa forma, todas as partículas
se organizam em grupos com mínima energia. Entretanto, para que isso ocorra, a
diminuição da temperatura deve ser feita de forma apropriada. A cada temperatura, o
sólido deve poder alcançar o equilíbrio térmico, que é caracterizado pela probabilidade
dele estar em um estado de energia e dado pela distribuição de Boltzmann:
P E=e=
1
Z T
.exp−
e
kb T
,onde Z(T) é um fator de normalização, chamado de função de partição, que
depende da temperatura T, e kb é a constante de Boltzmann. Conforme a temperatura é
diminuída, a distribuição de Boltzmann se concentra em estados de menor energia, até
que com a temperatura próxima de zero, apenas os estados de energia mínima possuem
uma probabilidade diferente de zero de ocorrer.
Com o intuito de simular o comportamento de um sólido evoluindo para o
equilíbrio térmico a uma dada temperatura, Metropolis et al. [] propuseram o método de
Monte Carlo. Este método gera uma seqüência de estados que eventualmente irão atingir
o equilíbrio térmico. Um novo estado é determinado a partir do estado atual, que é
caracterizado pelo posicionamento das partículas do sólido, provocandose de forma
aleatória uma pequena perturbação em uma partícula selecionada aleatoriamente. A
diferença entre a energia do novo estado e do estado atual é determinada. Caso essa seja
negativa, o novo estado é aceito, ou seja, ele passa a ser o estado atual. Caso contrário, a
probabilidade do novo estado ser aceito é dado por:
15. Primeiramente são executadas uma série de inicializações relacionadas ao
problema a ser resolvido, como a determinação de uma solução inicial aleatória, calculo
do seu custo, etc. Em seguida determinase o valor inicial do parâmetro de controle. O
algoritmo constituise basicamente de dois nested loops. O loop interno corresponde ao
algoritmo de Metropolis onde a solução atual é perturbada, a variação do valor da função
de custo é calculado, e a solução é aceita ou rejeitada com base no critério de Metropolis.
O critério de Metropolis é dado por:
∆C < 0 ou rand0,1exp
−DC
t
,onde ∆C é o custo da solução perturbada subtraído do custo da solução atual e
rand(0,1) gera um número real no intervalo (0,1). Como já mencionado anteriormente, a
constante de Boltzmann não é utilizada, pois a temperatura é apenas um parâmetro de
controle, sem conotação física. A justificativa para a utilização desse critério. Uma vez
que a solução esteja em equilíbrio térmico, o loop interno é encerrado. Então, a
temperatura é atualizada e todo o processo é repetido. Isso se dá até que um dado critério
de parada seja alcançado.
É importante notar duas características do pseudocódigo acima. Primeiramente,
ele descreve o algoritmo de forma genérica, ou seja, várias decisões como qual será a
temperatura inicial, como diminuila, quando terminar os loops, etc, não foram
especificadas. Essas decisões são denominadas de cooling schedule, e serão descritas
posteriormente.
Outra característica do algoritmo é o critério de Metropolis que aceita não
somente soluções que melhorem o custo da solução atual, mas também soluções que
piorem o custo da solução atual. É dessa forma que o algoritmo pretende escapar de
ótimos locais, tentando assim alcançar soluções com melhor qualidade. A figura 2.1
ilustra a execução do algoritmo para a mesma instância do problema TSP mostrado na
figura 1.2.
17. dinâmico especifica os parâmetros com base em dados coletados durante a execução do
algoritmo.
Abaixo temos a descrição dos parâmetros utilizados nesse trabalho para os
problemas TSP e QAP. O problema de placement utiliza os parâmetros determinados em
[].
2.3.1 A temperatura inicial
Uma regra geral para determinação da temperatura inicial é utilizar uma
temperatura em que praticamente todas as soluções de uma cadeia sejam aceitas. Alguns
estudos determinaram que esse valor é maior ou igual ao desvio padrão dos custos sobre
todas as soluções do espaço de soluções (σ∞). Como é impraticável determinar esse valor
de forma exata, uma boa aproximação é obtida analisandose 1000 soluções
aleatoriamente[]. Para ambos os tipos de schedule a temperatura inicial será igual a σ∞.
2.3.2 A função de diminuição da temperatura
O schedule estático, originário em [], utiliza uma função de diminuição da
temperatura cujos parâmetros são determinados de forma fixa. O caso mais comum de
função é dado por:
tk = tini . αk
O parâmetro α é geralmente 0.95. Um valor menor para esse parâmetro faz com
que a temperatura final seja mais rapidamente alcançada. Consequentemente o tempo de
execução diminui a custo da qualidade da solução. O contrário ira acontecer com um
valor maior para esse parâmetro, uma vez que a diminuição da temperatura é mais lenta
O schedule dinâmico utiliza a seguinte função:
tk=tk−1.1
tk−1.ln1d
3sk−1
−1
,onde σk1 é o desvio padrão das soluções geradas na temperatura tk1, e δ é uma
constante com valor positivo e pequeno, geralmente 0.085[]. A derivação da equação
acima pode ser encontrada em [].
2.3.3 O número de perturbações
O número de perturbações, ou soluções a serem geradas em uma dada
temperatura, afeta diretamente a qualidade da solução obtida, bem como o tempo de
execução. Ele também está diretamente relacionado com a função de redução da
18. temperatura, uma vez que o mais rápido a temperatura é diminuída, maior terá que ser o
número de soluções geradas para que o equilíbrio seja alcançado.
Um valor que foi determinado como sendo apropriado para o número de
perturbações é |N(x, σ)|, ou seja, a cardinalidade do conjunto de soluções vizinhas de uma
dada solução. Ambos os tipos de schedule utilizam essa regra.
2.3.4 Critério de parada
A critério de parada é baseado no fato de que quando a melhora na qualidade da
solução é sucessivamente pequena, o algoritmo deve ser interrompido. O schedule
estático interrompe a execução do algoritmo quando três soluções sucessivas obtiverem o
mesmo valor. Já o schedule dinâmico utiliza a seguinte expressão:
s f
2
t f .m0−m f
q
,onde θ é uma constante pequena e positiva, geralmente 0.00001 e µk a média dos
custos das soluções geradas na temperatura k. A derivação da equação acima pode ser
encontrada em [].
2.4 Acelerando o algoritmo
Um dos principais problemas da heurística simulated annealing é seu alto tempo
de execução, comparado à outras heurísticas. Em [] e [] foi proposta uma técnica eficiente
para reduzir o tempo gasto pela heurística. Em linhas gerais, o método constitui em
inicialmente executar uma heurística do tipo otimização local para o problema dado. Em
seguida, a partir da solução obtida pela heurística, uma temperatura é calculada com base
no custo desse solução. Essa temperatura tenta aproximar a temperatura que o algoritmo
annealing estaria com tal solução. Dessa forma, o algoritmo annealing seria executado
com temperatura inicial e solução inicial dadas pela temperatura calculada e pela solução
da primeira heurística. Essa técnica e denominada de twostage simulated annealing
(TSSA).
O principal ponto da técnica TSSA é o cálculo da temperatura relacionado à
solução da primeira heurística. Uma temperatura muito alta faz com que muitas soluções
com custo pior sejam aceitas, e consequentemente, o trabalho feito pela primeira
heurística seja perdido. Uma temperatura muito baixa faz com que o algoritmo não
consiga escapar do ótimo local e a qualidade da solução não é comparável a do algoritmo
annealing tradicional.