• Nenhum resultado encontrado

5 ALGORITMO GENÉTICO EVOLUCIONÁRIO ESPECIALIZADO:

5.6 IMPLEMENTAÇÃO COMPUTACIONAL DO AGE-E

Os métodos utilizados na implementação computacional da meta-heurística AGE-E são os mesmos que foram apresentados na Seção 5.5.1. Alterações foram realizadas ao final das etapas de implementação, apresentadas inicialmente na Seção 5.5.2, e, para demais etapas, no que concerne à dimensão de Apop. As Etapas da implementação do AGE-E são apresentadas na Subseção 5.6.1, o pseudo-código na Subseção 5.6.2, e visão global, na Subseção 5.6.3. Os dados computacionais e parâmetros iniciais de controle são os mesmos que utilizados para o AGE, e apresentados na Subseção 5.5.5.

5.6.1 Etapas da implementação do AGE-E

A implementação do algoritmo AGE-E foi dividida em um conjunto de oito passos, um a mais do que o estipulado para o algoritmo AGE, devido à inserção da Etapa 3(f), ao final da implementação. Além disso, os passos anteriores são semelhantes em ambos os algoritmos, com exceção da Etapa 3(e), que é alterada de AGE para AGE-E, e das dimensões da matriz Apop, que inclui o espaço para inserção de w vizinhos. Todos os passos do algoritmo AGE-E são apresentados a seguir.

136

Passo 0 (Etapa 1 - Definição dos Parâmetros Iniciais e População Inicial): O método

GetTickCount inicia a contagem de tempo de execução do algoritmo para cada exemplo testado. Definem-se o parâmetro inicial de controle, p = αn, bem como os demais valores de entrada secundários e matrizes auxiliares, através do método AlimentarValores. Uma população inicial de vetores é gerada pelo método gerarPopulacaoInicial, que é armazenada na matriz Apopde dimensão (p+w+1)×3n, em que a i-ésima linha da matriz corresponde ao

i-ésimo indivíduo da população, para todo i = 1, ..., p, e tal que a linha p + w + 1 inicializa com valores nulos. As linhas 1 a 𝑃

2 são preenchidas com números aleatórios da seguinte forma: colunas 1 a n com valores inteiros aleatórios de 1 a n (sequência 1a-S); colunas n + 1 a 2n com valores booleanos 0 ou 1 (sequência 2a-S); e colunas 2n + 1 a 3n, com valores inteiros de 1 a 6 (sequência 3a-S). As linhas 𝑃

2 + 1 a p são preenchidas de acordo com a Heurística HFPI: primeiramente, geram-se os valores aleatórios de maneira idêntica ao estabelecido para as

𝑃

2primeiras linhas; depois, geram-se valores aleatórios ki∈ [0, 1), i = 1, . . . , n, para o cálculo dos parâmetros ri; e, por último, reordena-se 1a-S (e os genes correspondentes de 2a-S e de 3a-S) de acordo com a ordenação crescente dos valores riassociados ao índice i dos respectivos genes.

Passo 1 (Etapa 2 - Decodificação e Cálculo da Fitness): Utilização do Decodificador

Carregamento, composto pelos métodos 4 a 11, CarregarCaixa, VerificarSobreposicao,

CalcularEMSsobrepostos, TestarEMSsobrepostos, CalcularEMS, TestarEMS, OrdenarEMS e calcularFitness, para decodificar todos os cromossomos contidos nas primeiras p linhas da matriz

Apop(em formato codi-ficado), obtendo-se também os valores de fitness associados que são armazenadas em um vetor ffitness, de dimensão (p + 1) × 1. Esse vetor é reorganizado, contendo suas componentes em ordem crescente de valores, bem como as linhas da matriz Apop, por meio do método ordenarPopulacaoInicial.

Passo 2 (Etapa 3(a) - Início do Ciclo Geracional): Verificação do Critério de Parada

(CP). Caso CP = falso, dar continuidade ao Ciclo Geracional contido nos Passos 3 a 6.

Passo 3 (Etapa 3(b) - Seleção): No método GerarPais, executa-se o operador Seleção

aleatória em quatro linhas da matriz Apope compara-se, duas a duas, entre as componentes associadas às linhas selecionadas do vetor ffitness(dois torneios de dois possíveis propostas de solução pais). Os ganhadores dos dois torneios são aqueles que possuem menores

fitness dos dois conjuntos de três valores fitness. As linhas de Apop que forneceram as menores fitness são selecionadas e guardadas como índice das linhas p1 e p2,

constituindo-137 se, portanto, como os cromossomos pais da iteração atual que irão gerar um único descendente, no Passo 4.

Passo 4 (Etapa 3(c) - Recombinação PMX): Uma única nova solução é obtida através da

Recombinação PMX (método recombinacaoPMX) geram-se dois valores inteiros aleatórios

k1 e k2 no intervalo 1 a 𝑛

2 , para k1, e k1 a n, para k2; criam-se os vetores s1 e s2

(subsequências s1 e s2 da Subseção 5.3.2) tal que s1(i) = Apop(p1, k1 + i − 1) e s2(i) =

Apop(p2, k1 + i − 1), i = 1, . . . , k2k1 + 1; em seguida, cria-se o vetor cromo-filho de 3n

componentes e de genes iguais a zero, que é atualizado de acordo com a estratégia PMX. Para essa atualização, inicialmente copiam-se para os genes de cromo-filho os valores das componentes de s1: cromo-filho(k1 + i − 1) = s1(i). Se k1 ƒ= 0, então existem genes antes da subsequência de genes de k1 a k2 para serem atualizados no vetor cromo-filho. Para isso, conta-se o número l1 de genes de p2, das posições 1 a k − 1, que possuem valores iguais aos armazenados no vetor s1, copiando-se nas componentes de posição 1 a k1 − 1 do

cromo-filho, que são diferentes dos genes de s1, os genes de p2 de índices associados:

cromo-filho(j) = p2(j), j = 1, . . . , k1 − 1, quando p2(j) =ƒ s1(i), para todo i = 1, . . . , k2

k1 + 1. Para as l1 posições não copiadas, copiam-se os l1 primeiros valores de s2 que também são distintos dos valores de s1. Um contador armazena o número de posições de s1, l3, que obtiveram valores de s2 iguais aos de s1, até obter as l1 primeiras posições

de genes distintos. De forma análoga, se k2≠ n, então existem genes depois da subsequência de genes de k1 a k2 para serem atualizados no vetor cromo-filho. Então, conta-se o número l2 de genes de p2, das posições k2 + 1 a n, que possuem valores iguais aos armazenados no vetor s1, copiando-se nas componentes de posição k2 + 1 a n do cromo-filho, que são diferentes dos genes de s1, os genes de p2 de índices associados: cromo-filho(j) = p2(j), j = k2 + 1, . . . , n, quando

p2(j) ƒ= s1(i), para todo i = 1, . . . , k2k1 + 1. Para as l2 posições não copiadas, copiam-se os

l2 valores de s2, investigados a partir das posições l1 + l3 + 1 até k2, que também são distintos dos valores de s1. Essa estratégia da Recombinação PMX refere-se estritamente à formação dos primeiros n componentes do cromo-filho (sequência 1a-S): cromofilho(l),

l = 1, . . . , n. Porém, as sequências 2a-S e 3a-S também são formadas em cromo-filho

(posições n + 1 a 3n), de acordo com o que foi determinado na formação de 1a-S. Isto quer dizer que se cromo-filho(l) é atualizado como um gene m de p1, p1(m), para algum m = 1, . . . , n, ou seja, cromo-filho(l) = p1(m), então também atualizam-se cromo-filho(l + n) = p1(m + n) e cromo-filho(l + 2n) = p1(m + 2n). Análogo, se a atualização de cromo-filho for a partir de p2.

138

Passo 5 (Etapa 3(d) - Mutação): Utilizando-se o método MutacaoFilho, geram-se dois

valores inteiros aleatórios t1 e t2, de 1 a n, que tenham uma distância de t% entre si. O cromossomo filho mutante tem os valores correspondentes à posição t1, t1 + n e t1 + 2n

permutados, respectivamente, com os genes da posição t2, t2 + n e t2 + 2n. Ao final, o método criarCarregamentoMutante é executado para construir um carregamento para o cromossomo mutante.

Passo 6 (Etapa 3(e) - Processo de Melhoria Local por SDH e cálculo da fitness):

Geram-se w cromossomos vizinhos ao cromossomo mutante, por meio da estrutura de vizinhança 2-opt. Para isso, realizam-se w vezes o processo de seleção aleatória de duas componentes da linha p + 1 de Apop, invertendo-se a subsequência Apop(p + 1, i) a Apop(p + 1, j), i, j = 1, . . . , n, e copiando-se os demais genes que não pertencem à subsequência, (armazenando-os na linha l, l = p +2, . . . , p +w +1, respectivamente). Utilizando-se o

Decodificador Carregamento, é efetuado o cálculo das fitness associadas a cada linha

correspondente ao cromossomo mutante e seus vizinhos (linhas p + 1 a p + w + 1). Utilizando o Decodificador Carregamento, calcula-se a fitness do descendente mutante e dos seus vizinhos.

Passo 7 (Etapa 3(f ) - Teste de Comparação e Atualização da população):

Comparam-se as fitness do cromossomo mutante e de seus vizinhos; aquele que possuir menor valor é rearranjado para a linha p + 1 de Apop, com fitness associada para a posição p + 1. Uma segunda comparação entre fitness é realizada, desta vez, entre os valores apresentados pelos cromossomos das linhas p e p+1. Caso ffitness(p+1) < ffitness(p), há uma atualização de

Apop(reordenando-a da linha 1 até p + 1) e de ffitness, incluindo, portanto o cromossomo da posição p + 1 nas linhas 1 a p, e excluindo o cromossomo da posição p para a posição

p + 1 (posteriormente sobre-escrito pelo mutante da próxima iteração), e os valores

fitness, analogamente. Ao final desse processo, retorna-se ao Passo 2. Caso ffitness(p + 1) ≥ ffitness(p), a população não é evoluída, e retorna-se diretamente ao Passo 2.

5.6.2 Pseudocódigo do AGE-E

O pseudocódigo do AGE-E é apresentado na Figura 5.12, que mostra, de maneira unificada, todas as oito etapas da implementação, descritas anteriormente. A estrutura de implementação do AGE-E é idêntica à estrutura do AGE, apresentada na Figura 5.10, com exceção da parte final

139 do Ciclo Geracional que começa em Melhoria SDH e termina em Atualização da População, na Figura 5.12. O Teste de Comparação, apesar de permanecer o nome, também é um método que é modificado do AGE para o AGE-E, devido ao aumento de cromossomos candidatos a evoluir a população atual (considerando o cromossomo mutante descendente e os vizinhos gerados por SDH).

Figura 5.12 - Pseudo-código do AGE-E com detalhamento do Decodificador Carregamento.

140

5.6.3 Visão global da implementação do AGE-E

O esquema que sintetiza a meta-heurística AGE-E é apresentado na Figura 5.13. A principal diferença, se comparado com o esquema do AGE da Figura 5.11, é a inserção da Heurística SDH para a geração dos cromossomos mutantes. Na sequência, o Decodificador Carregamento é aplicado tanto no cromossomo descendente mutante, quanto nos w vizinhos gerados. Com isso, também é introduzido o teste de comparação de fitness que verifica qual dentre estes, será direcionado para a posição p + 1 de Apop.

Figura 5.13 - Estrutura da Implementação do AGE-E.

Fonte: Elaborado pelo próprio autor.