2 AG on FPGA
2.3 Módulo Geral do AG
2.3.2 Módulo de Operadores Genéticos
O módulo de Operadores Genéticos agrupa todas as funções que realizam a seleção e os operadores genéticos, cruzamento e mutação, além de módulos que auxiliam esses demais, seqüenciador de indivíduos e o gerador de números aleatórios (GNR).
2.3.2.1 Módulo Seqüenciador de Indivíduos
O módulo seqüenciador de indivíduos seleciona aleatoriamente indivíduos na memória e disponibiliza para os módulos de seleção. Ele deve executar a busca de indivíduos na memória de forma aleatória, através de números oriundos do GNR (ver seção 2.3.2.4) e disponibilizar esses indivíduos, juntamente com a sua aptidão, na entrada dos módulos seletores.
Como será visto adiante, foram utilizados dois módulos seletores para que o fluxo geral do AG ficasse mais rápido. Desse modo, o seqüenciador requisita por vez quatro indivíduos na população t e envia aos pares para os módulos seletores. Na Tabela 9 estão os sinais utilizados pelo seqüenciador de indivíduos.
Tabela 9 - Dados e sinais do Seqüenciador de Indivíduos.
Dado Quantidade Bits Bloco de Origem Tipo
Clk 1 1 Gerador de clock Bit
Enable 1 1 Controle Externo Bit
accMem_R 1 1 Controlador de Leitura Bit
accReqSel 1 1 Seletor Bit
randomNumber 1 7 GNR Bit
chromo1 1 64 Memória Bit
chromo2 1 64 Memória Bit
chromo3 1 64 Memória Bit
chromo4 1 64 Memória Bit
r_Buf2 1 1 Seqüenciador Bit
reqMem_R 1 1 Seqüenciador Bit
reqExecSelection, 1 1 Seqüenciador Bit
done 1 1 Seqüenciador Bit
2.3.2.2 Módulo Seletor (MS)
O MS recebe dois indivíduos do seqüenciador e, a partir da análise da aptidão de cada um deles, seleciona o de melhor aptidão e envia para o Módulo de Cruzamento. Os sinais do MS são representados na Tabela 10.
Como o fluxo geral do AG é realizado com dois cromossomos simultaneamente, foram instanciados dois módulos seletores, um para cada indivíduo. O valor da aptidão é lido como um inteiro, pois o maior inteiro, quando codificado, também representará o maior valor real de aptidão.
Tabela 10 - Dados e sinais do Módulo de Seleção.
Dado Quantidade Bits Bloco de Origem Tipo
Clk 1 1 Gerador de clock Bit
Enable 1 1 Controle Externo Bit
reqSel 1 1 Seqüenciador Bit
accReqSelection 1 1 Seletor Bit
reqExecCross 1 1 Seletor Bit
accReqCross 1 1 Cruzamento Bit
chromosome1 1 32 Seqüenciador Bit chromosome2 1 32 Seqüenciador Bit
Chromo 1 32 Seletor Bit
2.3.2.3 Módulo de Cruzamento (MC)
O MC recebe dois indivíduos oriundos, cada um deles, de um dos módulos de seleção e, a partir da análise de um número aleatório vindo do GNR, ProbCruz, pode realizar ou não um cruzamento entre partes aleatórias dos indivíduos. O ponto onde deve ser feita a divisão (bit pivô do cruzamento em ponto fixo) é determinado através de uma sub-cadeia do
ProbCruz, respeitando a faixa de valores menores que o tamanho do cromossomo. Os sinais
do MC são representados na Tabela 11.
Tabela 11 - Dados e sinais do Módulo de Cruzamento.
Dado Quantidade Bits Bloco de Origem Tipo
Clk 1 1 Gerador de clock Bit
Enable 1 1 Controle Externo Bit
reqCrossing 1 1 Seletor 1 e 2 Bit
reqMem_R 1 1 Cruzamento Bit
accReqMut 1 1 Seletor Bit
randomNumber 1 7 GNR Bits
chromosome1 1 32 Seletor 1 Bits
chromosome2 1 32 Seletor 2 Bits
chromosomeChild1 1 32 Cruzamento Bits
chromosomeChild2 1 32 Cruzamento Bits
reqMem_R 1 1 Cruzamento Bit
accMem_R 1 1 Controlador de Leitura Bit
accReqCrossing 1 1 Cruzamento Bit
r_Buf1 1 1 Cruzamento Bit
2.3.2.4 Módulo de Mutação (MM)
O MM recebe dois indivíduos vindos do módulo de cruzamento e, a partir da análise de um número obtido do GNR, ProbMut, pode efetuar ou não a inversão de um bit em cada um dos indivíduos. O índice do bit que pode ser invertido em cada indivíduo é o mesmo, e é determinado por uma sub-cadeia do ProbMut. A partir daí o módulo encaminha os indivíduos para o cálculo da aptidão.
2.3.2.5 Módulo Gerador de Números Aleatórios
O GNR do AG on FPGA gera seqüências aleatórias de oito bits e armazena-as concomitantemente nos buffers BVPA e BEA (ver seções 2.3.2.6 e 2.3.2.7). O GNR utiliza-se de uma semente fornecida pelo usuário do AG e a partir dela, adicionado ao ID do GNR, gera números usando o mesmo mecanismo do GNR do HGA, descrito na seção 1.5.5. Ao final do processo, após enviar o valor obtido aos buffers, o GNR transforma esse valor na semente do próximo valor que será gerado. Esse processo só finaliza quando o processo do AG é encerrado. O apêndice A dá uma idéia de como é o processo, além de trazer o código em Verilog que implementa a idéia.
Foram instanciados três módulos GNR no projeto. Isso foi definido para que pudessem ser supridas todas as necessidades de números aleatórios dos módulos. A cada oito ciclos de relógio, que é o tamanho da cadeia criada pelo GNR, três novos números randômicos são criados e armazenados nos buffers. Cada módulo possui um ID, iniciando do 0. Essa diferenciação no valor inicial para obtenção do número evita que os GNR gerem sempre os mesmos valores, o que não é desejável.
2.3.2.6 Buffer de Valores Porcentuais Aleatórios (BVPA)
O BVPA armazena os números oriundos do GNR e que serão utilizados pelos módulos de mutação e cruzamento. Os valores são compreendidos entre 0 a 100, por serem comparados com as probabilidades de mutação e cruzamento. Dessa forma, as palavras são formadas por 7 bits e, por decisão de projeto, existem 32 palavras, suficientes para suprir as
necessidades do fluxo geral do AG.
Para os casos onde são sorteados valores maiores que 100, o tratamento de exceções é feito diretamente nos módulos de mutação e cruzamento.
2.3.2.7 Buffer de Endereços Aleatórios dos Indivíduos (BEA)
O BEA armazena os números oriundos do GNR e que serão utilizados pelo seqüenciador de indivíduos. Conforme descrito na seção 2.1, o número máximo de indivíduos N será de 100, o buffer possui, então, 7 bits. Cada AG terá seu próprio valor N, e os valores armazenados no buffer que ultrapassarem N serão tratados no módulo seqüenciador. O BEA possui espaço para 32 palavras.