• Nenhum resultado encontrado

5. METODOLOGIA PROPOSTA PARA OTIMIZAÇÃO DE

5.2 DESCRIÇÃO GERAL

5.2.1 Algoritmo de Corrida Orientada por Heurística

A estrutura geral do algoritmo HORA é ilustrada por meio de um pseudocódigo na Figura 22.

Figura 22 - Pseudocódigo do algoritmo HORA.

Entrada: S0, BS, K // Configuração candidata inicial, espaço de busca de configurações candidatas e número máximo da vizinhanças

Saída : S* // Melhor configuração encontrada

1. S ← S0; // Melhor configuração candidata sobrevivente 2. S' ← {}; // Configurações candidatas vizinhas

3. S'' ← {}; // Conjunto de configurações candidatas sobreviventes 4. C ← {}; // Desempenho das configurações candidatas

5. Repetir

6. e ← criarExemplar(); 7. S' ← criarVizinho(S, BS, K); 8. S'' ← S'' ∪ S';

9. // Avaliar o desempenho de cada configuração candidata com o exemplar "e" 10. Para s ∈ S'' Faça

11. c ← C ∪ MH(s, e); // Meta-heurística (MH) alvo sob avaliação 12. Fim Para;

13. F ← testeEstatístico(C); // coletar estatísticas 14. // Selecionar configurações candidatas sobreviventes 15. S'' ← selecionarElite(S'', C, F);

16. S ← identificarMelhor(S'', C, F); 17. Até atingir um critério de parada; 18. S*

← S; 19. Retornar S*;

O algoritmo segue um ciclo principal (linhas 5-17), em que são criadas diferentes alternativas respeitando-se os limites do espaço de busca de configurações candidatas (linha 7). As alternativas compõem um conjunto de configurações candidatas (linha 8), cujas soluções são coletadas por meio de execuções da meta-heurística alvo (MH) sobre diferentes exemplares (linhas10-12). A solução de cada configuração candidata é avaliada por meio do teste estatístico não paramétrico de Friedman (Seção 4.3.2), e aqueles candidatos de qualidade inferior, isto é, com os piores desempenhos, são descartados do processo (linha 15). O

processo iterativo segue até atingir um critério de parada (linha 17) e a melhor configuração candidata é aquela com o menor valor médio das classificações ao longo do processo.

Dentre as funções que compõem o HORA, o procedimento criarExemplar() (linha 6, Figura 22) consiste na criação de sequências de exemplares de um problema ou na escolha de alguns exemplares a partir de um benchmark de problemas de otimização.

O procedimento para criação de alternativas (linha 7, Figura 22) é muito relevante para o HORA, pois define os novos candidatos que serão avaliados durante os ciclos. A estrutura geral para criação de configurações candidatas é ilustrada no pseudocódigo da Figura 23.

Figura 23 - Pseudocódigo do algoritmo para criação de novas configurações candidatas. Entrada: S, BS, K // Melhor configuração candidata sobrevivente, espaço de busca de

configurações candidatas e número máximo da vizinhanças

Saída : S' // Configurações candidatas

1. P ← sortearParametros(|S|); // Sortear os parâmetros que serão alterados 2. S' ← {};

3. Para K vezes Faça 4. Para p' ∈ P Faça

5. Pn ← S(p') − aleatório()*(max(BS) − min(BS)); // Limite mínimo tolerável de S(p') 6. Px ← S(p') + aleatório()*(max(BS) − min(BS)); // Limite máximo tolerável de S(p') 7. // Verificar consistências dos parâmetros com relação aos limites originais

8. Se Pn < min(BS) Então 9. Pn ← min(BS); 10. Fim Se; 11. Se Px > max(BS) Então 12. Px ← max(BS); 13. Fim Se;

14. // Criar novas configurações candidatas 15. Se aleatório() < 0.5 Então 16. P'' ← Px − aleatório()*(Px − Pn); 17. Senão 18. P'' ← Pn + aleatório()*(Px − Pn); 19. Fim Se; 20. S''(p') ← P''; 21. Fim Para; 22. S' ← S' ∪ S''; 23. Fim Para; 24. Retornar S';

No início do procedimento, os parâmetros que serão utilizados para criar novas alternativas são sorteados arbitrariamente. Para cada parâmetro sorteado é definido um intervalo de valores toleráveis (linhas 5 e 6, Figura 23), respeitando-se os limites originais do espaço de busca. A partir das definições iniciais são criadas novas alternativas na vizinhança da melhor configuração candidata sobrevivente.

As alternativas criadas durante os ciclos do HORA são avaliadas com o teste estatístico não paramétrico de Friedman (linha 13, Figura 22). O procedimento de avaliação (Figura 24) é iniciado a partir das soluções da meta-heurística alvo coletados sob diferentes configurações candidatas e exemplares. As soluções produzidas por cada configuração candidata são classificadas em blocos de acordo com seu desempenho. Em seguida, são calculados os valores médios das classificações nos blocos e, então, a soma quadrática desses valores. A estatística de Friedman é computada (linha 13, Figura 24) de acordo com a equação (16).

Figura 24 - Pseudocódigo do algoritmo para avaliação de configurações candidatas. Entrada: C // Soluções da meta-heurística alvo sob diferentes configurações candidatas

Saída : F // Resultado das avaliações estatísticas 1. n ← |C|;

2. k ← |C(1,.)|; // Número de colunas em C 3. R ← criarClassificações(C);

4. M ← {}; // Conjunto de valores médios associados com as classificações 5. Para k vezes Faça

6. M ← M ∪ média(R(.,k)); 7. Fim Para; 8. T ← 0; 9. Para m' ∈ M Faça 10. T ← T + soma(m')^2; 11. Fim Para;

12. // Teste estatístico de Friedman

13. F = ((12 * n)/(k * (k + 1))) * (T − (k * (k + 1)^2)/4); 14. Retornar F;

A partir do resultado do teste estatístico, as alternativas são comparadas em pares e aquelas de qualidade inferior são excluídas do conjunto de configurações candidatas (linha 15, Figura 22). Inicialmente, a hipótese nula é verificada ao nível de significância de 90% para confirmar se as classificações dos candidatos nos blocos são iguais. Se a hipótese nula é

rejeitada, então, pelo menos, uma configuração candidata deve ter o desempenho melhor do que os demais. Duas configurações candidatas são consideradas diferentes se o resultado das comparações efetuadas por meio da equação (17) exceder a estatística t-Student. Neste caso, o candidato de qualidade inferior é excluído do conjunto de configurações candidatas. Por outro lado, se a hipótese nula é aceita, nenhuma alternativa é excluída do conjunto de configurações candidatas. A estrutura geral para comparações de configurações candidatas é ilustrada no pseudocódigo da Figura 25.

Figura 25 - Pseudocódigo do algoritmo para seleção de configurações candidatas sobreviventes.

Entrada: S, C, F // Configurações candidatas, soluções da meta-heurística alvo sob diferentes configurações candidatas e valor do teste estatístico de Friedman

Saída : S' // Configurações candidatas sobreviventes 1. α ← 0.90; // Nível de significância 2. R ← criarClassificações(C); 3. M ← computarMédia(R); 4. S' ← min(M); 5. p ← χ( −2k 1)(F); 6. q ← 1 − p;

7. // Comparações de configurações candidatas em pares 8. Se q < (1 − α) Então

9. Para k vezes Faça

10. test ← comparar(S', M(k)); 11. Se test > t1-α,ν Então 12. S ← S \ S(k); 13. Fim Se; 14. Fim Para; 15. S' ← S' ∪ S; 16. Senão 17. S' ← S; 18. Fim Se; 19. Retornar S';

O melhor candidato presente no conjunto de configurações candidatas é escolhido com base no menor valor médio das classificações obtidas ao longo dos ciclos (linha 16, Figura 22).

A seção a seguir apresenta um exemplo de uso do método HORA proposto a fim de esclarecer e ilustrar os algoritmos apresentados nas Figuras 22 a 25.