5 Algoritmos Avaliados
5.4 Breakout Local Search
O BLS tem uma abordagem conceitualmente simples, a qual usa as estratégias de busca local e perturbação adaptativa para melhor explorar o espaço de busca. Esse algo- ritmo foi proposto por (BENLIC; HAO, 2013), e é uma abordagem usada para resolução do QAP que vem apresentando bons resultados quando comparado com os melhores resulta- dos conhecidos na literatura, usando as instâncias disponíveis no benchmark do QAPLIB1 (BURKARD; KARISCH; RENDL, 1997).
Vale salientar que o BLS não é um algoritmo proposto para resolução do MP, mas sim do QAP, logo, conceitos como espaço de busca, ótimo local, região de exploração, entre outros aqui abordados, não estão ligados à arquitetura da NoC. O que o BLS faz neste trabalho é gerar soluções de mapeamento a partir de dois grafos genéricos, um da aplicação e outro que representa a NoC. As soluções geradas não levam em conta o modo como as tarefas são alocadas e nem em qual parte da NoC as tarefas estão agrupadas, são levados apenas em consideração o custo das informações trocadas entre cada par de tarefas e a distância dos núcleos onde elas foram alocadas com o único objetivo de fazer a minimização do somatório total do produtos entre esses custos e distâncias.
O BLS alterna entre duas fases, a primeira é a fase de busca local, que tem o objetivo de alcançar um ótimo local, e a segunda é a da perturbação dedicada, com o objetivo de descobrir regiões ainda não percorridas. De forma mais detalhada, o algoritmo parte de uma solução inicial π0, na qual é aplicado um procedimento chamado de steepest descent,
que detalharemos melhor no decorrer deste texto, para encontrar um ótimo local π. A cada
passo de iteração do procedimento steepest descent, é percorrida toda a vizinhança de π0 e
com isso, é selecionada a melhor solução vizinha que tenha o melhor valor objetivo, quando comparado com π0 e suas outras soluções vizinhas. Caso tal solução com melhor valor
objetivo não exista na vizinhança, um ótimo local foi alcançado, ou seja, foi encontrado o π. Neste ponto, se encerra a primeira fase do BLS, e então se inicia a segunda fase, onde o BLS tenta escapar deste ótimo local π, aplicando uma quantidade adequada de movimentos de perturbação dedicada em π. O π resultante após aplicação da perturbação torna-se o π0 da próxima execução do procedimento steepest descent.
Segundo (BENLIC; HAO, 2013), para se obter sucesso em qualquer abordagem de busca local, é necessária uma escolha correta do grau de diversificação aplicado na busca. Além disso, um grau de diversificação ótimo para um determinado estágio da busca, não necessa- riamente é ótimo para outro estágio. O grau de diversificação aplicado por um mecanismo de perturbação depende do número de movimentos de perturbação e do tipo de movi- mento usado, pois se a diversificação é muito fraca, a busca, muito possivelmente, poderá ficar oscilando entre dois ou mais ótimos locais, conduzindo a uma estagnação. Por outro lado, uma diversificação muito forte, tem o mesmo efeito que um reinício randômico, o que pode prejudicar a descoberta de melhores soluções nas fases seguintes da busca local. O mecanismo de perturbação empregado pelo BLS tem a ideia básica de introduzir graus de diversificação adequados, que são requeridos por determinadas fases da busca. Isso é feito dinamicamente, através da determinação do número de movimentos de perturba- ção, o qual representamos pelo símbolo L, e pela escolha adaptativa entre três tipos de movimentos de perturbação, cada qual com uma determinada intensidade.
O Algoritmo 3 apresenta o algoritmo BLS, assim como descrito em (BENLIC; HAO,
2013). Ele apresenta as seguintes seções: começando com a solução randômica inicial, o BLS aplica o procedimento steepest descent para encontrar um ótimo local π (linhas 10 - 16). O número de movimentos de perturbação L, é determinado dependendo se a busca conseguiu escapar do ótimo local, se ela retornou para o ótimo local anterior ou se a busca estagnou em uma região não promissora (linhas 26 - 39). Por último, a aplicação de L movimentos de perturbação com o objetivo de obter um novo ponto inicial para a próxima aplicação do procedimento steepest descent.
Algoritmo 3: Breakout Local Search
Data: Matrizes de fluxos F e de distâncias D com dimensões n x n. Result: Uma permutação π sobre um conjunto de locais.
1 π ←− permutação randômica de {1, ..., n}
2 c ←− C(π) /* c guarda o valor objetivo da solução atual */ 3 Computa a matriz δ inicial n x n de movimentos de ganho
4 πmelhor←− π /* πmelhorguarda a melhor solução encontrada até agora */
5 cmelhor←− C(π) /* cmelhor guarda o valor objetivo da melhor solução encontrada até agora */ 6 cp←− c /* cpguarda o melhor valor objetivo da última aplicação do steepest descent */ 7 ω ←− 0 /* ω é um contador dos consecutivos locais ótimos não melhorados */
8 L ←− L0 /* coloca em L (número de movimentos de perturbação) o seu valor default */ 9 while Condição de parada não alcançada do
10 while ∃ swap(u, v) tal que (c + δ(π, u, v) < c) do
11 π ←− π ⊕ swap(π, u, v) /* aplica o melhor movimento de troca */ 12 c ←− c + δ(π, u, v)
13 Huv←− Iter /*atualiza a quantidade de iterações de quando o movimento uv foi feito */ 14 Atualiza a matriz δ
15 Iter ←− Iter + 1
16 end
17 if c < cmelhor then
18 πmelhor←− π /* atualiza a melhor solução */ 19 cmelhor←− c /* atualiza o melhor valor objetivo */
20 ω ←− 0 /* reseta o contador dos consecutivos locais ótimos não melhorados */
21 else
22 if c ! = cpthen
23 ω ←− ω + 1
24 end
25 end
26 /* Determina L para ser aplicado em π */ 27 if ω > T then
28 /* a busca parece ter estagnado */
29 L ←− Lmax /* atribui a L um valor muito grande*/
30 ω ←− 0
31 else
32 if c = cpthen
33 /* A busca retornou para o ótimo local anterior */
34 L ←− L + 1 /* Incrementa em 1 o número de movimentos de perturbação */
35 else
36 /* A busca escapou do ótimo local anterior */
37 L ←− L0 /* Reinicia o número de movimentos de perturbação */
38 end
39 end
40 /* Aplica a perturbação no ótimo local atual π com L movimentos de perturbação */ 41 cp←− c /* Atualiza o valor objetivo do ótimo local anterior */
42 π ←− Perturbation(π, L, H, Iter, δ, ω) 43 end
Dada a ideia geral do algoritmo e a apresentação de sua implementação em Algoritmo 3, podemos agora detalhar melhor cada uma de suas partes:
Para a exploração da vizinhança, foi usado o método de trocar dois elementos de posição, o qual é chamado de dois-troca, dado que, como já visto na formulação do QAP, uma solução para o problema, π, é uma permutação de {1, ..., n}, tal que πi,
denota o local atribuído ao recurso i ∈ {1, ..., n}. (BENLIC; HAO, 2013) dá a seguinte definição para vizinhança:
Definicão 1. Vizinhança (BENLIC; HAO, 2013)
Define-se a vizinhança N (π) de uma determinada solução π, como todas as permu- tações que podem ser obtidas pela troca de quaisquer dois valores πu e πv, ou seja,
N (π) = {π0|π0
u = πv, πv0 = πu, u 6= v e π0i = πi, ∀i 6= u, v}.
O BLS usa o procedimento steepest descent para explorar toda essa vizinhança até que um ótimo local seja alcançado, ou seja, a cada iteração, o procedimento steepest descent identifica a melhor troca e a aplica em π com o objetivo de obter a melhor solução (observe as linhas de 10 a 16 do Algoritmo 3). Note que, a vizinhança N (π) possui n(n−1)2 elementos e que o algoritmo tem um custo de O(n4) para avaliar todas as soluções da vizinhança.
• Atualização do movimento de ganho:
Seja π uma solução. Definimos swap(r, s) como um movimento de troca, e π ⊕ swap(r, s) como a solução da vizinhança de π obtida pela aplicação de swap(r, s) em π, tal que r, s, ∈ {1, ..., n} e r 6= s. (BENLIC; HAO, 2013) apresenta uma forma de
calcular a variação do custo entre as duas soluções π e π0, δ(π, r, s) = C(π) − C(π0), também chamado de movimento de ganho de swap(r, s), de forma eficiente. Por simplicidade, aqui omitimos mais detalhes sobre essa abordagem feita por (BENLIC; HAO, 2013), porém citamos que ela simplifica a complexidade dos cálculos feitos,
dando um tempo de O(n2), em vez de O(n4), como é feito se for calcular a δ(π, r, s) usando diretamente a equação da própria formulação do QAP.
• Mecanismo de perturbação adaptativa:
Dado que o procedimento steepest descent, aplicado no BLS, sozinho não pode sair de ótimos locais, um mecanismo de perturbação torna-se crucial. Nas subseções seguintes, descrevemos esses mecanismos aplicados no BLS, que são dados pela variação do número de movimentos de perturbação e por três tipos de movimentos de perturbação, que são aplicados dependendo do atual estado da busca. Nas subseções também apresentamos os pseudocódigos destes mecanismos.
– Número de movimentos de perturbação:
No BLS, depois de cada fase de busca, é feito um determinado número de movimentos de perturbação L, já especificado, ou randômico, que asseguram a saída do ótimo local atual e também que não haja nenhum tipo de atração para esse ótimo local, através de sua vizinhança. Porém, se após essa aplica- ção, ainda não foi possível escapar do ótimo local, o número de movimentos de perturbação L é incrementado e a perturbação é aplicada novamente. Caso contrário, é atribuído a L o seu valor def ault. Uma perturbação mais forte é aplicada, caso se tenha uma certa quantidade T de ótimos locais sem nenhum melhoramento na qualidade de seu resultado, quando comparado ao melhor re- sultado encontrado até o dado momento. Essa perturbação mais forte assegura que a trajetória da busca não se restringe a apenas uma subparte do espaço de busca, fazendo a busca migrar para outra região ainda não avaliada. Na Figura 16, apresentamos uma ilustração de como a estratégia de busca empregada pelo BLS tenta explorar o espaço de busca.
Figura 16: Ilustração da trajetória da busca aplicada pelo BLS. Imagem obtida de (BEN- LIC; HAO, 2013).
– Os três tipos de movimentos de perturbação:
Evitando a repetida aplicação de movimentos randômicos de perturbação, o BLS alterna entre três tipos de movimentos, os quais são: direto, recente e o movimento randômico.
A perturbação direta se baseia nos princípios da busca tabu, a qual usa uma lista de movimentos proibidos. Apesar disso, o algoritmo permite a aplicação
de alguns movimentos, caso algum deles não tenha sido aplicado em uma de- terminada quantidade de iterações e a sua aplicação gere uma solução com melhor valor objetivo do que a solução atual. Logo, essa perturbação aplica os seguintes critérios: informação histórica sobre cada movimento, de acordo com o tempo em que ele foi aplicado, e a qualidade dos movimentos aplicados na perturbação, com o objetivo de não prejudicar a solução que foi perturbada. A solução escolhida por essa perturbação é obtida pela seguinte formulação:
A = {swap(u, v) | min{δ(π, u, v)}, (Huv + γ) < Iter ou (δ(π, u, v) + c) <
cmelhor, u 6= v e 1 ≤ u, v ≤ n}
onde H é a matriz que mantém o controle da quantidade de iterações quando o movimento foi feito pela última vez, Iter é a quantidade de iterações atual, c é o custo da solução atual e cmelhor é o custo da melhor solução encontrada até o
momento. Note que um alto valor para γ, implica em uma forte diversificação das soluções.
A perturbação recente, ou seja, baseada apenas em informações históricas pro- vidas pela matriz H, aplica a perturbação considerando apenas os movimentos feitos recentemente, não levando em consideração se a solução é degradada devido ao movimento de perturbação. Mais formalmente, é definido como:
B = {swap(u, v) | min{Huv}, u 6= v e 1 ≤ u, v, ≤ n}
A permutação randômica, simplesmente aplica a troca nas posições que são selecionados uniformemente de forma randômica. Mais formalmente, temos:
C = {swap(u, v) | u 6= v e 1 ≤ u, v ≤ n}
Para assegurar o melhor balanceamento possível entre a intensificação e a diversifi- cação da busca, o BLS aplica dinamicamente, dependendo do estado da busca, as probabilidades de aplicar uma das três estratégias de perturbação. A seguir apre- sentamos como é feita a probabilidade P , que é aplicada para escolha do tipo de perturbação:
P = (
e−ω/T, se e−ω/T > P0
onde ω é a quantidade de ótimos locais não melhorados, T o número máximo de ótimos locais não melhorados e P0 é um limiar que garante o menor valor que P
pode assumir.
Com isso, dado uma probabilidade P , para a aplicação da perturbação direta, a probabilidade de aplicar a perturbação recente é (1 − P ) ∗ Q e a da perturbação randômica é (1 − P ) ∗ (1 − Q), onde Q é uma constante no intervalo de [0, 1].
Algoritmo 4: Perturbation
Data: Ótimo local π, intensidade da perturbação L, matriz H, contador global de iterações Iter, matriz de movimentos de ganho δ e número de ótimos locais consecutivos não melhorados ω.
Result: Uma perturbação da solução π
1 Determina a probabilidade P , de acordo com a fórmula apresentada
2 Com probabilidade P , π ←− P erturb(π, L, H, Iter, δ, ω, A) /* Perturbação direta */ 3 Com probabilidade (1 − P ) ∗ Q, π ←− P erturb(π, L, H, Iter, δ, ω, B) /* Perturbação
recente */
4 Com probabilidade (1 − P ) ∗ (1 − Q), π ←− P erturb(π, L, H, Iter, δ, ω, C) /*
Perturbação randômica */
Algoritmo 5: Perturb
Data: Ótimo local π, intensidade da perturbação L, matriz H, contador global de iterações Iter, matriz de movimentos de ganho δ, número de ótimos locais consecutivos não melhorados ω e o conjunto de movimentos de perturbação M . Result: Uma perturbação da solução π
1 for i := 1 até L do 2 Aplique swap(u, v) 3 π ←− π ⊕ swap(π, u, v) 4 c ←− c + δ(π, u, v) 5 Huv←− Iter
6 Atualize matriz de movimentos de ganho δ e M 7 if c < cmelhor then
8 π ←− π /* Atualiza a melhor solução encontrada */
9 cmelhor ←− c /* Atualiza o valor objetivo referente a melhor solução encontrada
*/
10 ω ←− 0 /* Reseta o contador de ótimo locais consecutivos não melhorados */
11 end
12 end 13 Return π
No próximo capítulo, serão apresentados e discutidos os resultados obtidos através da execução desses algoritmos na ferramenta SiNoC, com o objetivo de avaliar os seus desempenhos com relação a algumas métricas, tais como latência da aplicação e taxa de reuso dos enlaces.