• Nenhum resultado encontrado

2010.1MonografiaJoaquimRanyere

N/A
N/A
Protected

Academic year: 2021

Share "2010.1MonografiaJoaquimRanyere"

Copied!
65
0
0

Texto

(1)

UNIVERSIDADE ESTADUAL DE FEIRA DE SANTANA – UEFS

JOAQUIM RANYERE SANTANA DE OLIVEIRA

AVALIAÇÃO DINÂMICA DA FUNÇÃO

APTIDÃO PARA UM ALGORITMO GENÉTICO

SIMPLES EXECUTADO EM FPGA

FEIRA DE SANTANA 2010

(2)

JOAQUIM RANYERE SANTANA DE OLIVEIRA

AVALIAÇÃO DINÂMICA DA FUNÇÃO

APTIDÃO PARA UM ALGORITMO GENÉTICO

SIMPLES EXECUTADO EM FPGA

Trabalho de Conclusão de Curso apresentado ao curso de Graduação em Engenharia de Computação da Universidade Estadual de Feira de Santana para a obtenção do título de Bacharel em Engenharia de Computação.

Orientador: Prof.

Dr. Delmar Bróglio Carvalho

FEIRA DE SANTANA 2010

(3)

Dedico todo e qualquer sucesso que surgir deste trabalho a Deus e a minha mãe, Mirian Santana de Oliveira, heroína de minha vida.

(4)

AGRADECIMENTOS

Ao Dr. Delmar Bróglio Carvalho que orientou este trabalho de maneira amiga, segura e compreensiva.

Aos amigos de república, laboratório e Feira VI pelo auxílio e formidável convivência. Em especial a João Marcelo, Nelson, Anderson, Grênivel, Victor e Beth, sem medir a importância, obrigado a vocês todos.

(5)

RESUMO

Os Algoritmos Genéticos (AGs) é uma metodologia de otimização baseada na genética e na seleção natural. Os AGs embora tenham sido aplicados em diferentes contextos, têm seu desempenho fortemente influenciado pela arquitetura do sistema computacional e sua respectiva configuração. O uso de hardware dedicado, que possa substituir as rotinas dos AG em software, permite que sejam usadas suas características para melhorar o desempenho e reduzir o tempo de processamento da otimização em problemas complexos. As implementações em hardware até então disponibilizadas têm limitação na portabilidade do AG devido à exigência da capacidade de reprogramar o hardware para cada nova função de aptidão. O trabalho que será apresentado propõe uma concepção do Algoritmo Genético Clássico (AGC) executado em FPGA com um módulo de avaliação da função aptidão genérico, capaz de receber como parâmetro a própria função a ser avaliada, o que torna desnecessário uma reprogramação do hardware.

O modelo proposto foi simulado para verificar o funcionamento correto e para ser analisado seu desempenho. Os resultados se mostraram satisfatórios e atestaram a corretude do AG desenvolvido e, a partir deles, foram identificadas possíveis melhorias e expansões do trabalho, sendo devidamente sugeridos.

(6)

ABSTRACT

Genetic Algorithms (GAs) is an optimization methodology based on genetics and natural selection. GAs, although applied in different contexts, their performance has being strongly influenced by computer systems’ architecture and corresponding configuration. The use of dedicated hardware can replace the AG software routines , which allowing to use its features to both improve performance’s and complex problems processing time optimization be reduced. Hardware implementations so far available are limited in portability due to the requirement of GA's capability to reprogram the hardware for each new fitness function. The present work proposes a concept of Genetic Algorithm Classic (AGC) implemented in FPGA with an evaluation module for the generic fitness function, capable of receiving as parameter the function itself to be evaluated, making hardware reprogramming unnecessary. The proposed model has been simulated to verify the correct operation and be analyzed its performance. The results were satisfactory and confirmed the AG developed correctness. The results also identified possible improvements and expansions of the work, which were duly suggested.

(7)

LISTA DE FIGURAS

Figura 1 - Diagrama de uma função ou processo a ser otimizado. ... 12

Figura 2 - Gráfico das funções 1-x² e x²-1 para o intervalo [1,1]. ... 13

Figura 3 – As principais categorias de algoritmos de otimização. ... 14

Figura 4 - Estrutura do Algoritmo Genético Clássico. ... 23

Figura 5 - Exemplo de cruzamento em ponto único. ... 26

Figura 6 - Fluxo de dados da arquitetura do HGA (SCOTT, 1997). ... 31

Figura 7 - Exemplo de módulos de seleção paralelos (SCOTT, 1994). ... 33

Figura 8 - Modelo da proposta inicial do AG on FPGA. ... 36

Figura 9 - Campos do parâmetro Limites. ... 37

Figura 10 - Processo de normalização. ... 45

Figura 11 - Exemplo de palavra do buffer circular de execução e seus campos. ... 45

Figura 12 – Campos da operação LOAD. ... 46

Figura 13 - Seqüência de operações da expressão aritmética x² + y². ... 47

Figura 14 - Módulos internos da Unidade Aritmética para o avaliador de aptidão... 48

Figura 15 - Interface de entrada de dados dos parâmetros do AG. ... 49

Figura 16 - Diagrama de estados do módulo de Avaliação da Função Aptidão ... 51

Figura 17 - Diagrama de estados do módulo Controlador do AG. ... 51

Figura 18 - Diagrama de estados do módulo Operadores. ... 51

Figura 19 - Simulação da execução do AG. ... 52

Figura 20 - Objetos do buffer circular durante uma simulação da função x² + y². ... 53

Figura 21 - Melhor indivíduo para a função x² + y². ... 54

Figura 22 - Valor normalizado do melhor indivíduo na geração 10. ... 54

Figura 23 - Valor normalizado do melhor indivíduo na geração 20. ... 55

Figura 24 - Variância do melhor indivíduo em cada geração... 55

Figura 25 - Erro percentual do melhor indivíduo na 10ª geração. ... 56

(8)

LISTA DE TABELAS

Tabela 1 – Exemplo de população inicial. ... 25

Tabela 2 – Exemplo de população após a seleção. ... 25

Tabela 3 – Exemplo de população após o cruzamento (X1-X3 e X2-X4). ... 26

Tabela 4 - População final após mutação. ... 27

Tabela 5 - Parâmetros do AG on FPGA. ... 37

Tabela 6 - Posições reservadas na memória. ... 37

Tabela 7 - Dados do Controlador de Leitura. ... 39

Tabela 8 - Dados e sinais do Controlador de Escrita. ... 40

Tabela 9 - Dados e sinais do Seqüenciador de Indivíduos. ... 41

Tabela 10 - Dados e sinais do Módulo de Seleção. ... 42

Tabela 11 - Dados e sinais do Módulo de Cruzamento. ... 42

Tabela 12 - Operações da Unidade Aritmética. ... 46

Tabela 13 - Endereçamento dos módulos no banco de registradores. ... 47

(9)

SUMÁRIO INTRODUÇÃO ... 9 1 FUNDAMENTAÇÃO TEÓRICA ... 12 1.1 Processos de Otimização ... 12 1.1.1 Categorias de Otimização... 14 1.2 Algoritmos de Busca ... 16 1.2.1 Otimização Natural ... 16 1.2.2 Otimização Biológica ... 17 1.3 Algoritmos Genéticos ... 21

1.3.1 Algoritmo Genético Clássico (AGC) ... 23

1.4 Field Programmable Gate Arrays (FPGA) ... 28

1.5 Algoritmos Genéticos em Hardware ... 30

1.5.1 O Sistema HGA ... 30

1.5.2 O Modelo Geral do HGA ... 31

1.5.3 Os Módulos do HGA e suas Funções ... 31

1.5.4 Modelo Pipelining e em Paralelização do HGA ... 33

1.5.5 O Gerador de Números Aleatórios ... 34

2 AG on FPGA ... 35

2.1 Modelo Arquitetural do AG on FPGA ... 35

2.2 Estrutura da memória para o AG on FPGA ... 36

2.3 Módulo Geral do AG ... 38

2.3.1 Controlador do AG (CAG) ... 38

2.3.1.1 Memória Principal RAM (MP)... 39

2.3.1.2 Controlador de Leitura da MP (CL) ... 39

2.3.1.3 Controlador de Escrita da MP (CE) ... 40

(10)

2.3.2.1 Módulo Seqüenciador de Indivíduos ... 41

2.3.2.2 Módulo Seletor (MS) ... 41

2.3.2.3 Módulo de Cruzamento (MC) ... 42

2.3.2.4 Módulo de Mutação (MM) ... 43

2.3.2.5 Módulo Gerador de Números Aleatórios ... 43

2.3.2.6 Buffer de Valores Porcentuais Aleatórios (BVPA) ... 43

2.3.2.7 Buffer de Endereços Aleatórios dos Indivíduos (BEA) ... 44

2.3.3 Módulo de Avaliação da Função Aptidão ... 44

2.3.3.1 Módulo de Normalização ... 44

2.3.3.2 Módulo de Controle da Avaliação (CA)... 45

2.3.3.3 Buffer circular de Execução ... 45

2.3.3.4 Unidades Aritméticas ... 47

3 RESULTADOS ... 49

3.1 Resultados de Simulação ... 50

4 CONCLUSÕES E TRABALHOS FUTUROS ... 58

REFERÊNCIAS ... 59

(11)

INTRODUÇÃO

Diversos problemas do dia-a-dia, tais como escalonamento de pessoal, gerenciamento de recursos e processos em empresas, problemas de roteamento e gerenciamento de tráfego em redes e de internet, entre outros, nas mais diversas áreas do conhecimento, tornaram-se extremamente complexos devido principalmente ao grande número de variáveis adicionadas às suas formulações. Tais problemas normalmente significam fornecer resultados como menor custo, maior desempenho, menor consumo, maior estabilidade, entre outros, definindo um processo que se denomina otimização (GOLDBERG, 1989).

Em otimização, um conjunto de variáveis do problema deve ser escolhido, de forma a maximizar ou minimizar uma função, a qual representa o critério de otimização (GOLDBERG, 1989). Isto pode ser feito por métodos algébricos, numéricos ou heurísticos, através da busca no espaço multidimensional das variáveis do problema. Para muitos problemas existem métodos convencionais eficazes, porém, tais métodos podem exibir desempenho fraco ou até mesmo falhar quando a natureza do problema envolve não-linearidades, ruído, descontinuidade, multimodalidade ou espaços de busca proibitivamente grandes. É nesta situação que os Algoritmos Genéticos (AG) demonstram a sua utilidade e robustez (GREFENSTETTE, 1986).

Os AGs são algoritmos de busca que empregam um princípio análogo aos mecanismos de seleção natural e da genética natural e que, de um modo geral, são considerados eficientes para busca de soluções ótimas ou aproximadamente ótimas em uma grande variedade de problemas, por não possuir limitações encontradas nos métodos de busca tradicionais (GOLDBERG, 1989; HOLLAND, 1992-a).

Embora os AG tenham sido aplicados em diferentes contextos, demonstrando suas excelentes características de robustez, não se pode afirmar o mesmo sobre o seu desempenho, o qual é fortemente influenciado pela arquitetura do sistema computacional e sua respectiva configuração (CARVALHO, 2002). Para sobrepor este fator e outros que podem surgir ao longo do processo, diversas soluções computacionais são apresentadas na literatura, dentre elas o uso de supercomputadores, de soluções executadas em aglomerados (clusters) de computadores (PITANGA, 2003) ou de grades computacionais (DANTAS, 2005). Embora tais tecnologias tenham ganhado mercado nos últimos anos, seu uso ainda continua restrito a grandes centros de pesquisa ou a laboratórios de excelência, restringindo o acesso a poucos usuários. Outra possibilidade de melhora do desempenho do AG é o uso de hardware

(12)

dedicado, que possa substituir as rotinas dos AG em software e utilize de suas características para vencer as limitações.

A estrutura do AG e a natureza dos operadores (seleção, cruzamento, mutação) são adequadas para a utilização de técnicas de pipelining (TANENBAUM, 2006) e paralelização (NOWOSTAWSKI, 1999). Por exemplo, o operador de seleção, que busca por repetidas vezes possíveis candidatos ao cruzamento dentro de um conjunto de soluções, pode ser paralelizado até se atingir o limite prático da superfície do chip em que tais módulos estejam sendo implementados (SCOTT, 1994). Quando esses módulos completarem a tarefa, podem passar os resultados (membros selecionados) para os módulos que realizam outras operações na seqüência (cruzamento e mutação), os quais também repassam seus resultados (novos membros) para a função de avaliação de aptidão, a qual determina uma característica desejável de uma possível solução. Assim, um pipelining de granularidade grossa pode ser facilmente implementado. Estas características do AG o tornam um excelente candidato a um mapeamento para o hardware.

Dentre as limitações de um AG voltado para implementação em hardware, destaca-se a avaliação da função aptidão. A adequação da função aptidão é, também, um fator limitante na portabilidade de um AG em hardware, uma vez que uma aplicação de propósito geral exige a capacidade de reprogramar o hardware para uma nova função de aptidão, o que inviabiliza a utilização de hardware convencional (SCOTT, 1994).

Por serem reprogramáveis e de baixo custo, os circuitos Field-Programmable Gate

Arrays (FPGA) (SEDRA; SMITH, 2005) contornam o problema da reprogramação mantendo,

simultaneamente, um grande ganho sobre o AG executado em software. Muitos trabalhos demonstraram a viabilidade de mapeamento de rotinas de software em hardware reprogramável (APORNTEWAN; CHONGSTITVATANA, 2001; GRAHAN; NELSON, 1996), alcançando ordens de grandeza consideráveis relativas ao aumento de desempenho sobre as rotinas executadas em hardware de propósito geral.

O FPGA é um dispositivo contendo componentes de lógica programável e interconexões também programáveis, dotado ainda de elementos de memória (SEDRA; SMITH, 2005). Por conta dessas características, os FPGAs suportam a reconfiguração total ou parcial de seu sistema, estando em execução ou não. Isso significa que o projeto inicial pode ser modificado praticamente em qualquer fase, corrigindo falhas e/ou realizando as alterações desejadas.

O propósito de um usuário, com um determinado problema de otimização, em utilizar o poder computacional de um AG em FPGA, posicionado tanto localmente quanto

(13)

remotamente (p. ex. na WEB), é encontrar uma solução específica já problematizada pelo próprio usuário. Em outras palavras, a função que será utilizada no AG é específica do problema. Isso impõe uma limitação aos métodos atuais de implementação de AG em FPGA, pois podem necessitar de uma função (ou funções) de avaliação de aptidão preestabelecida(s). Na prática, esse tipo de implementação é pouco versátil e restringe o uso do FPGA a apenas pesquisas relacionadas à implementação em hardware do AG. Uma aplicação genérica do AG para a otimização de diferentes funções, com avaliação da aptidão in locus, o que o tornaria mais completo, fica prejudicada.

O objetivo deste trabalho, é, portanto, propor uma concepção do Algoritmo Genético Clássico (AGC) executado em FPGA, contendo um módulo de avaliação da função aptidão que seja genérico, o qual permita receber como parâmetro a própria função a ser avaliada e, assim, oferecer uma solução completa para a implementação de Algoritmos Genéticos em

hardware.

O restante deste trabalho é organizado da seguinte maneira. No capítulo 1 são apresentados os conceitos envolvidos na construção de um AG, desde os processos de otimização e fundamentação sobre AG, até os AG mapeados em hardware e os FPGAs. No capítulo 2 é descrito o sistema desenvolvido, enfatizando seus módulos e funcionamento em geral. Os métodos e resultados das simulações e análise de corretude e desempenho do projeto são mostrados no capítulo 3. Por fim, o capítulo 4 apresenta as conclusões e possíveis trabalhos futuros.

(14)

1 FUNDAMENTAÇÃO TEÓRICA

Este capítulo começa com uma explicação elementar de otimização, passando para um desenvolvimento histórico dos algoritmos de busca, onde são mostradas muitas das insuficiências nas suas implementações típicas. Antigos métodos otimizadores locais são limitados e, devido a isto, cientistas e engenheiros passaram a desenvolver métodos mais globais, com base em processos biológicos. O capítulo passa, então, a fazer uma explanação sobre a genética biológica e conceitos que são a base estrutural dos AGs. Tais algoritmos, por sua vez, são discutidos em sua concepção, estrutura e funcionamento. Este último com maior ênfase na explicação do funcionamento do AGC. O capítulo encerra-se com a questão dos AG aplicados em hardware dedicado e os conceitos e características das FPGA.

1.1 Processos de Otimização

Otimização é o processo de ajustar as entradas ou as características de um dispositivo, de um processo matemático ou de uma experiência para encontrar a saída mínima ou máxima como resultado (Figura 1). A entrada consiste de variáveis; o processo ou função é conhecido como a função de custo ou função objetivo; e a saída é o custo ou adequação. Se o processo é um experimento, as variáveis são os insumos para o experimento.

Figura 1 - Diagrama de uma função ou processo a ser otimizado.

Dependendo do resultado do processo ou função, a otimização pode ser uma minimização ou uma maximização. Esses dois conceitos são inversíveis, ou seja, para maximizar uma função, basta colocar um sinal de menos na frente de sua saída e minimizá-la. Como exemplo, maximizar 1-x2 sobre o intervalo -1 ≤ x ≤ 1 é o mesmo que minimizar x2-1 sobre o mesmo intervalo (Figura 2).

FUNÇÃO

(15)

Figura 2 - Gráfico das funções 1-x² e x²-1 para o intervalo [1,1].

As situações cotidianas exigem muitas tomadas de decisões além de estarem sujeitas a ocorrência de eventos aleatórios, fazendo com que a dinâmica da natureza possua uma característica altamente não-linear, na qual pequenas perturbações nas condições iniciais possam resultar em soluções muito diferentes e imprevisíveis para os problemas que surgem. Dessa forma, um alto grau de complexidade é encontrado quando se estuda a natureza ou a concepção de produtos. A ciência desenvolveu modelos simples para representar certos aspectos limitados da natureza. A maioria desses modelos simples (normalmente lineares) foi de alguma forma otimizada. Isto faz da otimização a principal ferramenta para os estudiosos enfrentarem os problemas sem solução do passado, ou que venham a surgir.

A otimização pode ser classificada em dois tipos ((HAUPT; HAUPT, 2004):

• Numérica: opera sobre o valor de retorno de funções matemáticas, com ótimos locais. Por exemplo, forma de corte ótimo para aproveitamento de tecidos ou da proporção ótima tensão/peso de uma ponte; e

• Combinatória: tem como objetivo descobrir qual a melhor combinação dos recursos disponíveis e suas características para otimizar o seu uso. Por exemplo, a descoberta da melhor seqüência de cidades para o problema do caixeiro viajante, ou a distribuição de tarefas entre máquinas em "chão de fábrica".

Por outro lado, existem duas principais classes de algoritmos de otimização:

• Técnicas baseadas no cálculo: empregam mecanismos de busca do tipo gradiente (WIDROW; LEHR, 1995), para percorrer uma superfície de erro ou uma superfície diferençável de uma função objetivo. Porém, no caso de uma função objetivo multimodal, ótimos locais são freqüentemente obtidos; e

(16)

• Técnicas enumerativas: procuram a solução pesquisando, em seqüência, cada ponto do espaço de busca (finito e discreto), tais como a programação dinâmica (BELLMAN, 1957), embora simples e robusta, podem trazer alto custo computacional, principalmente do ponto de vista das operações matemáticas necessárias (NASH, 1996).

1.1.1 Categorias de Otimização

Na Figura 3 são apresentados as principais categorias de otimização. Essas categorias não são mutuamente exclusivas, por exemplo, um problema de otimização dinâmica poderia ser restrito ou irrestrito e algumas das variáveis poderiam ser discretas e outras contínuas.

Figura 3 – As principais categorias de algoritmos de otimização.

Abaixo, descreve-se as seis principais categorias de otimização (HAUPT; HAUPT, 2004):

1- A otimização por tentativa e erro se refere ao processo de ajuste de variáveis que

afetam a produção, sem saber muito sobre o processo que gera a saída. Muitas grandes descobertas, como a da penicilina como antibiótico, resultou desse tipo de otimização. Em contraste, uma fórmula matemática descreve a função que alcança o objetivo da otimização. Várias manipulações matemáticas da função conduzem à solução ótima, sendo esse tipo de abordagem a mais utilizada por teóricos.

2- Se há uma única variável, a otimização é unidimensional. Um problema com mais de

uma variável exige uma otimização multidimensional. A otimização torna-se cada vez

(17)

mais difícil à medida que aumenta o número de dimensões. Muitas abordagens de otimização multidimensional generalizam para uma série de abordagens unidimensionais.

3- Otimização dinâmica significa que a saída é uma função do tempo, enquanto que a

estática significa que a saída é independente do tempo. Um exemplo prático é o problema de melhor caminho, onde a rota mais curta, facilmente encontrada por uma otimização estática, não é, necessariamente, o caminho mais rápido. Encontrar o caminho mais rápido é um problema dinâmico, cuja solução depende da hora do dia, do clima, dos acidentes, e outras variáveis que interferem no processo.

4- Otimização também pode ser diferenciada por variáveis discretas ou contínuas.

Variáveis discretas têm apenas um número finito de valores possíveis, enquanto que as variáveis contínuas têm um número infinito de valores possíveis. Otimização de variável discreta é também conhecida como otimização combinatória, porque a melhor solução consiste em uma combinação de variáveis do conjunto finito de todas as variáveis possíveis. No entanto, ao tentar encontrar o valor mínimo de f(x) em uma reta real, é mais apropriado ver o problema como contínuo.

5- Variáveis muitas vezes são restritas ou limitadas. A otimização restrita

incorpora variáveis dentro de igualdades e desigualdades na função de custo. Já a otimização irrestrita permite que as variáveis tenham qualquer valor. Uma variável restrita muitas vezes se converte em uma variável irrestrita através de uma transformação de variáveis. Muitas rotinas de otimização numérica trabalham melhor com as variáveis sem restrições. Como exemplo, considere minimizar f(x) com a restrição de intervalo -1 ≤ x ≤ 1. A variável x é convertida em uma variável irrestrita u, deixando x = seno (u) e, dessa forma, pode-se minimizar f(seno (u)) para qualquer valor de u. Quando a otimização restrita formula variáveis em termos de equações lineares e restrições lineares ela é chamada de programação linear. Quando as equações custo ou as restrições não são lineares, o problema torna-se um problema de programação não-linear.

6- Alguns algoritmos tentam minimizar o custo a partir de um conjunto inicial de valores

(18)

tendem a ser rápidos. Eles são os algoritmos de otimização tradicionais e geralmente são baseados em métodos de cálculo. Movem-se de um conjunto de variáveis para outro baseados em uma seqüência de passos determinados. Por outro lado, os métodos aleatórios usam alguns cálculos probabilísticos para encontrar um conjunto de variáveis. Eles tendem a ser mais lentos, mas têm maior sucesso em encontrar o mínimo global.

1.2 Algoritmos de Busca

Buscar a superfície de custo (função de todos os valores possíveis) para o custo mínimo está no cerne de todas as rotinas de otimização. Normalmente, uma superfície de custo tem vários picos e vales. Um algoritmo de otimização funciona muito como uma espécie de andarilho que tenta encontrar a altitude mínima em um local qualquer, por exemplo, a Chapada Diamantina. Começando em algum local aleatório dentro da chapada, o objetivo é, de forma inteligente, proceder para encontrar a altitude mínima. Há muitas maneiras de caminhar ou deslizar até a base de um ponto qualquer, contudo, não se tem garantias que, ao se chegar nessa base, não exista um ponto ainda mais baixo em algum outro local. Algumas restrições, como penhascos e rios, influenciam o caminho da pesquisa também.

Existem muitos métodos de busca encontrados na literatura, tais como a busca exaustiva, a otimização analítica, o método ameba, entre outros. Esses métodos têm a mesma abordagem descendente a partir de um ponto inicial arbitrário. Eles diferem em decidir em que direção se mover e até quanto se mover. Melhorias sucessivas aumentam a velocidade dos algoritmos descendentes, mas não adicionam ao algoritmo a capacidade para encontrar um mínimo global em vez de um mínimo local.

1.2.1 Otimização Natural

No conjunto dos algoritmos de busca vem se destacando os chamados métodos de otimização natural, dentre os quais estão o arrefecimento simulado (KIRKPATRICK et al., 1983), otimização por enxame de partículas (PARSOPOULOS; VRAHATIS, 2002), otimização por colônias de formigas (DORIGO; MARIA, 1997), e algoritmos evolucionários

(19)

(SCHWEFEL, 1995). Eles se destacam porque atingem novos pontos no espaço de busca através da aplicação de operadores para os pontos atuais e, estatisticamente, movendo-se para lugares mais promissores no espaço de busca. Eles dependem de uma pesquisa inteligente, mas de um grande espaço de soluções finitas usando métodos estatísticos. Os algoritmos não exigem a tomada de derivadas de função de custo e podem, assim, lidar com variáveis discretas e funções de custo não contínuas. Eles representam os processos na natureza que são notavelmente bem sucedidos na otimização de fenômenos naturais. Os AG também são classificados como otimização natural, e podem ser um pouco mais restringido, ao se classificarem dentro dos métodos de otimização biológica, que usam da seleção natural.

1.2.2 Otimização Biológica

Na seqüência, são abordados conceitos biológicos e analogias que conseguem relacionar os fenômenos de otimização realizados pela natureza com os métodos de otimização usados pelos cientistas, a partir da observação desses fenômenos.

Ao observar o mundo natural, pode-se fazer várias generalizações que conduzem ao ponto de vista sobre as suas origens e funcionamento. Há uma enorme diversidade de organismos, cada qual com alto grau de complexidade, com muitas das características desses organismos apresentando um uso aparentemente abundante.

A função de custo mede a capacidade de sobrevivência, isto é, o que se pretende maximizar. Assim, as características dos organismos do mundo natural se encaixam nesta paisagem topológica (GRANT, 1985). O nível de adaptação, a aptidão, indica a altitude da paisagem. Os maiores pontos correspondem às condições mais adequadas. O ambiente, bem como as diferentes formas que as espécies interagem, prevê as restrições. O processo de evolução é o algoritmo grande, que seleciona as características que uma espécie de organismos produz e são adequadas para a sobrevivência. Os picos da paisagem são povoados por organismos vivos. Alguns picos são amplos e mantém um grande número de características incluindo muitos organismos, enquanto outros picos são muito estreitos e permitem só características muito específicas.

A paisagem natural, ao ser povoada, sofreu processos que se relacionam com dois componentes da seleção natural: a genética e a evolução. Os biólogos modernos estão aderindo cada vez mais para o que é conhecida como a teoria sintética da seleção natural, uma síntese da genética com a evolução. Há duas divisões principais da escala nesta teoria sintética

(20)

da evolução: macroevolução, que envolve o processo de divisão dos organismos em grandes grupos, e a microevolução, que se refere a processos dentro das populações (RIDLEY, 2006). Não é útil tratar neste trabalho sobre a macroevolução, pois não é inerente aos conceitos ligados aos AG. Sobre a microevolução, em primeiro plano, se faz necessário entender um pouco da base sobre a hereditariedade no nível celular. Um gene é a unidade básica da hereditariedade entre organismos, o qual é transportado sobre um par de cromossomos na forma de ácido desoxirribonucléico (DNA). O DNA está na forma de uma dupla hélice, e comporta um sistema simbólico de seqüencias de pares de bases que determina a seqüência de enzimas e outras proteínas no organismo. Isso não varia e é conhecido como o código genético do organismo. Cada célula do organismo contém o mesmo número de cromossomos. Por exemplo, o número de cromossomos por célula corporal é de 6 para mosquitos, 26 para anfíbios, 46 para homem e 94 para peixe dourado. Genes geralmente ocorrem com duas formas funcionais, cada uma representando uma característica diferente. Cada uma dessas formas é conhecida como alelo. Por exemplo, um ser humano pode possuir um alelo de olhos castanhos e outro para os olhos azuis. A combinação de alelos nos cromossomos determina as características do indivíduo. Muitas vezes, um alelo é dominante e o outro recessivo. O alelo dominante é o que se manifesta no organismo, ainda que um recessivo seja transferido para os seus descendentes. Se o alelo para olhos castanhos é dominante, o organismo terá olhos marrons. No entanto, o alelo azul pode está presente na prole. Se o segundo alelo do outro progenitor é também para os olhos azuis, a criança terá olhos azuis.

O estudo da genética iniciou-se com as experiências de Gregor Mendel (RIDLEY, 2006). Mendel revolucionou a experimentação através da aplicação de matemática e estatística para analisar e prever seus resultados.

As experiências de Mendel com ervilhas foram fundamentais para delinear como as características são transmitidas de uma geração para outra. Uma razão para os experimentos de Mendel terem funcionado foi o fato de que ele passou vários anos, antes da experimentação real, documentando as características hereditárias e que eram facilmente separáveis e tornadas puras (RIDLEY, 2006). Isto lhe permitiu cruzar suas plantas e observar as características dos descendentes e da próxima geração. Observando cuidadosamente a distribuição de traços, Mendel foi capaz de supor a sua primeira lei, o princípio da segregação, ou seja, de que deve haver fatores que são herdados em pares, um de cada pai. Esses fatores são, de fato, os genes, e suas diferentes representações são os alelos. O termo genótipo é usado para a combinação real de alelos, sendo a característica observada dessa

(21)

combinação chamada de fenótipo. O genótipo deve ser inferido a partir das porcentagens do fenótipo da geração seguinte (RIDLEY, 2006).

Para entender como os genes se combinam em fenótipos, é útil entender algumas noções básicas de divisão celular. A reprodução em organismos unicelulares é muito simples, ocorre por divisão celular, num processo conhecido como mitose. Durante as fases de mitose, o material cromossômico é fielmente copiado e transferido para o descendente. Em tais organismos simples, as células-filhas são idênticas à mãe. Há pouca oportunidade para a evolução de tais organismos. A menos que uma mutação ocorra, a espécie se propaga sem mudanças (GRANT, 1985).

Organismos superiores desenvolveram um método mais eficiente de transmissão de características à sua prole, a reprodução sexuada. O processo de divisão celular que ocorre em seguida é chamado meiose. Os gametas, ou células reprodutivas, têm metade do número de cromossomos em relação às outras células do corpo. Assim, as células são chamadas gametas haplóides, enquanto as células do corpo são diplóides. Somente essas células diplóides contêm o código genético completo. O número diplóide de cromossomos é reduzido pela metade para formar o número haplóide de gametas. Em preparação para a meiose, as células dos gametas são duplicadas. Então as células gametas da mãe se juntam com as do pai. Eles se organizam em pares homólogos, isto é, cada cromossomo corresponde com outro de mesmo tamanho e forma. Eles se combinam e, à medida que a meiose avança, se dividem de modo que uma porção esquerda do cromossomo da mãe é conjugada com a parte direita do pai, e vice-versa para as outras partes. Este processo é conhecido como cruzamento. A célula resultante tem o número total diplóide de cromossomos. Através deste cruzamento, os materiais genéticos da mãe e do pai são combinados de maneira a produzir um único individuo descendente. Este processo permite que mudanças ocorram nas espécies.

A segunda componente da seleção natural, a evolução, teve como um de seus primeiros proponentes Charles Darwin (GRANT, 1985). A teoria da evolução de Darwin foi baseada em quatro premissas:

1 – Semelhante gera semelhante, de forma equivalente, uma prole tem muita das características dos seus pais. Esta premissa implica que a população é estável.

2 – Há variações nas características entre os indivíduos que pode ser passada de uma geração para a seguinte.

3 – É que apenas uma pequena percentagem dos descendentes produzidos chega à idade adulta.

(22)

4 – Quais descendentes sobrevivem depende das suas características herdadas. Essas premissas se combinam para produzir a teoria da seleção natural.

Na Teoria Evolucionária moderna uma compreensão da genética acrescenta um impulso para a explicação das etapas de seleção natural.

Um grupo de indivíduos híbridos é chamado de população. Sobre condições estáticas, as características da população são definidas pela lei Hardy-Weinberg. Esta lei estabelece que a freqüência de ocorrência dos alelos permanecerá a mesma, com uma população de endogamia, se não houver perturbações. Assim, embora os indivíduos apresentem grande variedade, as estatísticas da população permanecerão as mesmas. No entanto, sabe-se que poucas populações são estáticas por muito tempo. Quando a população já não é estática, a proporção de freqüências alélicas não é mais constante entre as gerações e a evolução ocorre. Esse processo dinâmico requer forças externas. Estas podem ser agrupadas em quatro tipos específicos:

1- As mutações podem ocorrer, ou seja, uma mudança aleatória pode ocorrer nas

características de um gene. Esta pode ser repassada aos descendentes. Mutações podem ser espontâneas ou devido a fatores externos, como a exposição a fatores ambientais.

2- O fluxo de genes pode resultar da introdução de organismos novos dentro da geração

da população.

3- Deriva genética pode ocorrer apenas devido ao acaso. Em pequenas populações com

poucos alelos podem, por vezes, serem eliminadas as combinações aleatórias.

4- Seleção natural opera para escolher os indivíduos mais aptos para posterior

reprodução. Nesse processo, alguns alelos podem produzir um indivíduo que está mais preparado para lidar com seu ambiente. Por exemplo, os animais velozes podem ser melhores na captura de presas ou na fuga dos predadores, sendo assim, terão mais chances de sobreviver na geração. Dessa forma, determinadas características são selecionadas para o conjunto de gerações.

Assim, essas idéias retornam à seleção natural. Os componentes importantes têm sido a forma como os genes se combinam e cruzam para produzir novos indivíduos, com combinações de traços, e como a dinâmica de uma grande população interage para selecionar certas características. Estes fatores podem mover estes descendentes, ou para cima (em direção a um pico) ou para baixo (em direção a um vale). Se eles vão longe demais a um vale, não podem sobreviver para um acasalamento – e então os mais bem adaptados sobreviverão. Depois de um longo período de tempo, o conjunto de organismos se torna bem adaptado ao

(23)

seu ambiente. Entretanto, o ambiente é dinâmico. Os predadores e as presas, assim como fatores climáticos e dos distúrbios geológicos, também estão constantemente mudando. Essas mudanças atuam para revisar e melhorar a equação de otimização.

Nas próximas sessões será visto que a principal meta dos AG é abstrair os processos adaptativos em sistemas naturais, conforme descrito acima, desenvolvendo simulações em computador que retenham os mecanismos originais encontrados em sistemas naturais.

1.3 Algoritmos Genéticos

No AG, uma população de possíveis soluções para o problema em questão evolui de acordo com operadores probabilísticos concebidos a partir de metáforas biológicas, de modo que há uma tendência que, na média, os indivíduos representem soluções cada vez melhores à medida que o processo evolutivo continua (TANOMARU, 1995).

As diferenças dos AGs, em relação aos outros métodos de otimização, normalmente utilizados, podem ser resumidas a seguir (CARVALHO, 2002):

• Trabalham com a codificação do conjunto de parâmetros pertinentes ao problema, ao invés de trabalhar com os próprios parâmetros;

• Executam uma busca a partir de uma população de pontos de forma “paralela”; • Buscam um conjunto solução, não uma única solução;

• Usam informações sobre o problema, ao invés de derivadas e outras técnicas analíticas;

• Usam regras de transição probabilísticas, ao invés de determinísticas;

• São provados ser, teórica e experimentalmente, robustos na busca em espaços complexos.

Os AGs codificam as variáveis de decisão de um problema de busca dentro de uma cadeia de tamanho finito de elementos de certa cardinalidade. As cadeias que são candidatas à solução para o problema de busca são referidas como cromossomos, o alfabeto é referido como genes e os valores dos genes são chamados de alelos (ver seção 1.3.1).

Para desenvolver boas soluções e implementar a seleção natural, se faz necessário distinguir boas de más soluções. Esta medida pode ser uma função objetivo que é um modelo matemático, ou pode ser uma função subjetiva, a partir da qual humanos escolhem as melhores soluções em detrimento das piores. Em suma, a medida da aptidão determina a

(24)

adequação relativa de um candidato a solução do problema, o qual será usado, posteriormente, pelo AG para guiar a evolução das boas soluções.

Outro importante conceito de AG é a noção de população. Diferente de métodos tradicionais, o AG apóia-se em uma população de soluções candidatas. O tamanho da população é usualmente especificado pelo usuário, e é um dos fatores mais importantes que afetam a escalabilidade e desempenho do AG. Uma população reduzida pode, por exemplo, conduzir a uma convergência prematura e produzir soluções sub-ótimas. Por outro lado, populações grandes podem conduzir a gastos desnecessários de tempo computacional.

Uma vez que os problemas são codificados em uma representação cromossômica e a medida da aptidão é capaz de diferenciar as soluções locais da(s) solução(ões) ótima(s), o desenvolvimento da solução para um problema, de modo geral, pode ser representado pelos seguintes passos (GOLDBERG, 1989):

1- Inicialização – a população inicial candidata à solução é geralmente gerada

aleatoriamente dentro do espaço de busca. Contudo, o conhecimento do domínio específico ou outras informações podem ser facilmente incorporados;

2- Avaliação – uma vez que a população é inicializada ou uma geração é criada, os

valores de aptidão das soluções candidatas são avaliados;

3- Seleção – seleções alocadas de muitas cópias com altos valores de aptidão para a

sobrevivência e, portanto, o mecanismo da lei do mais forte para soluções candidatas. A principal idéia da seleção é optar pela melhores soluções em detrimento das piores, e muitos processos de seleção são propostos para realizar esta idéia, incluindo método da roleta, seleção estocástica universal, seleção por ranking e torneio;

4- Recombinação – combina partes de duas ou mais soluções parentais para criar novas

e, possivelmente, melhores soluções ao longo das gerações. Existem muitas formas para implementá-la e um bom desempenho depende diretamente da escolha do mecanismo adequado de recombinação. A geração recombinada não será idêntica a nenhuma parental particular, mas, em vez disso, combinará traços parentais em uma forma nova;

5- Mutação – enquanto a recombinação opera em dois ou mais cromossomos parentais, a

mutação modifica localmente a solução. Entretanto, existem muitas variações da mutação, mas usualmente envolve uma ou mais mudanças, sendo feitos tratamentos individuais em cada solução. Em outras palavras, a mutação realiza um caminho aleatório na vizinhança das soluções candidatas;

(25)

6- Substituição – a geração criada pela seleção, recombinação e mutação substitui a

população parental. Muitas técnicas de substituição são utilizadas para realizar tais tarefas, as principais no AG são: a substituição elitista, substituição generation-wise e substituição steady-state;

7- Repetem-se os passos 2 a 6 até que uma condição pré-estabelecida seja atingida.

Basicamente, toda estrutura proposta de AG é derivada de uma versão original clássica. É uma versão simples do AG, e, por isso, será descrito o funcionamento geral dos AG através do funcionamento específico desta versão, que foi também a utilizada neste trabalho.

1.3.1 Algoritmo Genético Clássico (AGC)

A idéia básica do AGC pode ser descrita de maneira sucinta na Figura 4.

Figura 4 - Estrutura do Algoritmo Genético Clássico.

Apesar do seu poder, o AGC é simultaneamente elegante e simples. É de tal maneira simples que é bastante inesperado o fato de suas curtas rotinas conseguirem realizar tanto (HOLLAND, 1992-a). O AGC contém somente uma estrutura de dados principal: uma população de indivíduos. Cada indivíduo representa um elemento dentro do domínio do espaço de solução para um problema de otimização, ou seja, representa uma possível solução para o problema. A questão de qual a melhor forma de representar um indivíduo é muito complexa e tem enormes implicações para a resolução de problemas. No AGC, os indivíduos são simplesmente cadeias de bits. Cada seqüência de uns e zeros é chamada de cromossomo, e para um determinado indivíduo isso é a única fonte de todas as informações sobre a solução correspondente (HOLLAND, 1992-a). Em termos biológicos, o cromossomo é o genótipo e a

Algoritmo_Genético_Simples (AGC) begin

t=0;

inicializa P(t); avalia P(t);

while (NOT condição_de_término) do begin t=t+1; seleciona P(t) de P(t-1); recombina P(t); avalia P(t); end end

(26)

solução representa o fenótipo de um determinado indivíduo. Associado a cada indivíduo está um valor de aptidão (fitness). Este valor é uma forma de quantificação numérica indicativa do nível que o indivíduo apresenta como solução para o problema de otimização. Indivíduos com seqüências cromossômicas representando melhores soluções têm maior valor de aptidão, enquanto menores valores de aptidão são atribuídos àqueles cujas cadeias de bits representam soluções inferiores. É importante perceber que só dois elementos do AG necessitam ser alterados a fim de aplicar o algoritmo para um novo problema: a representação dos indivíduos e a função objetivo (HOLLAND, 1992-b).

Para exemplificar o funcionamento do AG será utilizado um problema clássico de otimização, Máximos Uns (OneMax ou OM) (SCHAFFER; ESHELMAN, 1991). O objetivo em OM é maximizar o número de ocorrências do algarismo 1 em uma seqüência de bits arbitrariamente longa. Como um exemplo, suponha que as cadeias sejam de oito bits. A representação de um indivíduo é, assim, uma seqüência aleatória de zeros e uns: 10110001,

por exemplo.

A terminologia AG padrão refere-se a cada posição de bit como um locus e para os valores nos locus como alelos. O conjunto de todos os símbolos que pode assumir um alelo é chamado de alfabeto da representação (HOLLAND, 1992-a). Para o exemplo utilizado, o alfabeto é composto de 0 e 1.

Uma vez que o objetivo em OM é maximizar o número de bits 1, se faz necessário um avaliador da função objetivo f(x) que proporcione melhores índices para os indivíduos com mais bits 1s. A escolha óbvia é a função que atribui a aptidão do indivíduo como um valor do número de uns em sua representação, por exemplo, 10110001 tem valor de aptidão quatro,

enquanto 00000000 tem valor de aptidão zero. O objetivo do algoritmo é, dessa forma,

encontrar o indivíduo com valor de aptidão oito: 11111111.

Com uma representação adequada e uma função objetivo adequada, pode-se dizer que a construção do AG está quase concluída. Um dos parâmetros importantes de qualquer AG é o tamanho da população - quantos indivíduos são mantidos em um determinado momento. Como exemplo, suponha uma população de 4 indivíduos. Uma vez que se intenta ter quatro indivíduos "vivos" na população atual, em determinado momento, o AG deve criar quatro indivíduos para formar a população inicial. No AGC, esses indivíduos iniciais são meramente cadeias aleatórias de bits. Assim, a população inicial pode consistir de quatro indivíduos, como na Tabela 1, onde cada Xi é um indivíduo na população (o índice simplesmente distingue um indivíduo do outro).

(27)

Tabela 1 – Exemplo de população inicial. Cadeia do Indivíduo Valor de Aptidão Probabilidade de Seleção X1 = 00101111 5 5/17 X2 = 00111010 4 4/17 X3 = 10111011 6 6/17 X4 = 10000100 2 2/17

Pode-se inferir que alguns dos primeiros indivíduos vão ser melhores do que outros, pois provavelmente são diferentes. Isso porque algumas seqüências de bits terão uma pontuação mais elevada de valor de aptidão, o que significa que eles são melhores soluções para o problema OM. Analogamente, alguns dos indivíduos na população inicial serão mais bem adaptados ao seu meio ambiente. Na natureza, os indivíduos que estão mais bem adaptados sobrevivem mais tempo e, portanto, tem a probabilidade de produzir mais descendentes. Esta sobrevivência do mais forte é espelhada no AG através da seleção.

O AGC cria assim uma segunda geração de indivíduos. Dado que o tamanho da população deve permanecer constante, cada novo indivíduo deve substituir um antigo. No exemplo usado, o AG iria criar quatro novos indivíduos. Cada novo indivíduo será idêntico a um dos indivíduos na geração anterior e a probabilidade disso acontecer é proporcional à aptidão do indivíduo em relação a outros indivíduos na geração anterior (HOLLAND, 1992-a). Especificamente, a probabilidade de um indivíduo Xk na primeira geração reproduzindo é f (Xk) / f ... (Xi).

Pode-se listar para cada um dos indivíduos na população inicial o seu valor de aptidão e a probabilidade de ele reproduzir (Tabela 1). Continuando com o exemplo do OM, suponha que, aleatoriamente, X3 é selecionado duas vezes, que X1 e X2 são selecionados uma vez cada, e que X4 - o indivíduo menos apto - não consegue reproduzir, é obtida, assim, a nova população mostrada na Tabela 2.

Tabela 2 – Exemplo de população após a seleção.

Cadeia do Indivíduo Valor de Aptidão Probabilidade de Seleção X1 = 10111011 6 6/21 X2 = 10111011 6 6/21 X3 = 00101111 5 5/21 X4 = 00111010 4 4/21

(28)

A próxima etapa do AG o diferencia de outras técnicas de otimização que independem do domínio usado. Nesta etapa, o operador de cruzamento (crossover) é repetidamente aplicado a pares de indivíduos dentre aqueles que foram selecionados na etapa anterior. Suponha que, no exemplo da Tabela 2, que em uma iteração o indivíduo um e o indivíduo três sejam escolhidos para acasalar (ou seja, para serem cruzados), os indivíduos restantes (três e quatro) ficariam destinados a serem cruzados também. O processo de cruzamento de dois indivíduos envolve a seleção aleatória de um locus e a troca entre os dois indivíduos do seu material genético após o locus.Se no nosso exemplo, o ponto de cruzamento selecionado para os indivíduos um e três foi o quarto lócus (sentido esquerda para direita), as cadeias resultantes seriam 10111111 e 00101011 (Figura 5). Esse tipo de cruzamento é chamado de

cruzamento em ponto único. Há vários outros tipos.

Figura 5 - Exemplo de cruzamento em ponto único.

Da mesma forma, se o sexto locus foi selecionado como o ponto de cruzamento entre X2 e X4, os indivíduos 10111010 e 00111011 seriam formados, e a população ficaria como na

Tabela 3.

Tabela 3 – Exemplo de população após o cruzamento (X1-X3 e X2-X4).

Cadeia do Indivíduo Valor de Aptidão Probabilidade de Seleção X1 = 10111111 7 7/21 X2 = 10111010 5 5/21 X3 = 00101011 4 4/21 X4 = 00111011 5 5/21

Um cruzamento cria dois novos indivíduos, chamados de descendentes: um contendo a parte inicial do primeiro indivíduo, seguida pela parte final do segundo indivíduo, e outro contendo a parte inicial do segundo indivíduo, seguida pela parte final do primeiro indivíduo

Pais Descendentes

10111011

10111111

00101111

00101011

(29)

Depois de uma parcela da população ser cruzada, tem-se uma nova população de indivíduos, cada um dos quais ou idêntico a um indivíduo da população anterior, ou o produto da recombinação genética através do cruzamento. Preocupa-se com o operador de cruzamento, pois, conforme Holland (1992-b, p. 68) “o objetivo de cruzar cadeias no algoritmo genético é para testar novas partes das regiões-alvo em vez de testar a mesma seqüência repetidamente em sucessivas gerações”.

Antes de avaliar a nova população, um operador genético final é aplicado: mutação. A mutação envolve a inversão (mudança de 0 por 1 e vice-versa) de alelos. A probabilidade de mutação (PM) é normalmente bastante baixa, e é definida como a probabilidade de um dado alelo ser modificado. Cada alelo em cada locus de cada indivíduo é um candidato para ser invertido. Para o exemplo do OM com 4 indivíduos visto antes, tomando-se uma PM = 0,05 arbitrária, como há quatro indivíduos, cada um com oito locos, espera-se 4 X 8 X (PM) = 1,6 ocorrências de mutações. Considerando que duas ocorrem, no locus dois de X1 e no locus sete de X4. Assim, têm-se os indivíduos resultantes 11111111 e 00111001.

Após a mutação, a nova população está no seu estado final (Tabela 4). Os valores de aptidão dos novos indivíduos são avaliados pela função objetivo, bem como a nova população é designada como a população atual, a partir da qual derivam as gerações futuras. Enquanto o critério de conclusão não for cumprido, o processo de três etapas (seleção, cruzamento e mutação) é repetido. O critério de conclusão é geralmente ou uma solução ótima, ou um determinado número de gerações, ou um intervalo de tempo.

Tabela 4 - População final após mutação.

Cadeia do Indivíduo Valor da Aptidão X1 = 11111111 8 X2 = 10111010 5 X3 = 00101011 4 X4 = 00111001 4

Para o OM, por ser bastante simplista, uma seqüência de eventos afortunados rendeu uma solução ótima após apenas uma geração. Em uma aplicação mais realista, não seria incomum para o algoritmo continuar por muito mais. Quando o critério de conclusão é atingido, obtém-se como solução para o problema da otimização o indivíduo presente na última geração (população final) que possui a classificação mais alta de aptidão.

(30)

A aplicação repetida dos três operadores, cada um inspirado por algum aspecto da seleção natural, pode, assim, resolver alguns problemas de otimização.A razão para a eficácia desses operadores é bastante clara, a construção de blocos (seqüências contíguas de alelos) que são úteis para um indivíduo e que serão recombinados com outros blocos de indivíduos de um diferente subespaço dentro do cromossomo. Uma vez que cadeias mais aptas são selecionadas com maior freqüência para a reprodução e cruzamento, os blocos mais aptos irão juntar-se para formar melhores e ainda melhores soluções. A mutação serve para reintroduzir a diversidade na população, garantindo assim que alelos não sejam perdidos. No OM, por exemplo, nenhum dos indivíduos originais continha um bit ‘1’ no segundo locus. A mutação do segundo alelo em alguns indivíduos foi, portanto, necessária antes do cromossomo ótimo

11111111 poder ser produzido.

O sucesso encontrado no OM exemplificado é hipotético e evidentemente atípico. No entanto, as variações dos algoritmos genéticos foram efetivamente aplicadas a diversos problemas, em várias áreas, como no setor de petróleo e gás, musical, telecomunicações, na área de saúde, entre outros (REDUSINO, 2010).

1.4 Field Programmable Gate Arrays (FPGA)

No desenvolvimento de circuitos integrados os FPGA são os Dispositivos de Lógica Programável mais utilizados em projetos que usam linguagem de descrição de hardware, para oferecer uma opção de implementação de hardware que é muito mais flexível do que os já consagrados Circuitos Integrados de Aplicações Específicas (ASIC) (WAIN, 2006).

Um FPGA é um componente de hardware de baixo custo, que permite o usuário programar suas funcionalidades de forma rápida e econômica. Permitem uma prototipação barata e um curto time-to-market para projetos de hardware. FPGA são mais lentas e têm menor densidade de portas que metodologias de projetos customizadas (chips VLSI customizados) e semi-customizadas (mask-programmed gate arrays). ((DESCHAMPS; BIOUL; SUTTER, 2006).

Em geral, FPGA são compostas de blocos lógicos, células de entrada e saída (E/S) e linhas de interconexão. Os blocos lógicos usam primitivas tais como portas NAND, multiplexidadores e lookup-tables.

Dentre os maiores benefícios da tecnologia FPGA, podem ser citados 5: (NATIONAL INSTRUMENTS, 2007)

(31)

1- Desempenho – Aproveitando o paralelismo de hardware, os FPGA excedem o poder

de computação dos processadores digital de sinais (DSP) por quebrar o paradigma da execução seqüencial e realizar mais por ciclo relógio.

2- Time-to-market (Janela de Mercado) – oferece flexibilidade e capacidade de

prototipagem rápida em face do aumento das preocupações com time-to-market. Pode ser testada uma idéia ou conceito e verificá-lo em hardware, sem passar pelo longo processo de fabricação personalizada em ASIC. Em seguida, pode-se implementar mudanças funcionais incrementais e desenvolver sobre um modelo FPGA em tempos bem menores que o ASIC.

3- Custo – Modelos ASIC personalizados custam muito mais que as soluções de hardware baseadas em FPGA. O grande investimento inicial na ASIC só é justificável

para produção em larga escala, milhares de chips por ano, para que se obtenha um retorno. O problema é que muitos usuários finais necessitam de hardware personalizados com funcionalidades diferentes para muitos sistemas em desenvolvimento. Como os requisitos de sistema muitas vezes mudam ao longo do tempo, o custo de fazer mudanças incrementais nos modelos FPGA são bastante insignificantes em relação ao ASIC.

4- Confiabilidade – Enquanto softwares fornecem ferramentas de auxílio, a programação

em circuitos FPGA é realmente difícil de ser implementada. Sistemas baseados em processadores freqüentemente envolvem vários níveis de abstração para ajudar a agendar tarefas e compartilhar recursos entre vários processos. Para um dado núcleo de processamento, somente uma instrução pode ser executada por vez, além disso, sistemas baseados em processadores estão continuamente em risco de tarefas de tempo crítico fazer a preempção uma das outras. FPGA não usam sistemas operacionais, o que minimiza as preocupações com a confiabilidade da execução paralela e determina

hardware dedicado a cada tarefa.

5- Manutenção em longo prazo – Chips FPGA são “atualizáveis”, e não necessitam de

tempo e gastos envolvidos com remodelagem ASIC. Protocolos de comunicação digital, por exemplo, possuem especificações que podem mudar ao longo do tempo, e interfaces baseadas em ASIC podem causar problemas desafiadores de compatibilidade de manutenção e transmissões.

(32)

1.5 Algoritmos Genéticos em Hardware

Um dos precursores do uso de hardware específico para a execução dos AG foi David Scott (SCOTT, 1994). Seu trabalho serve de base para a maioria das evoluções e modificações propostas por trabalhos posteriores. Assim como foi utilizado o AGC para fundamentar o funcionamento do AG, será dada nas próximas seções uma visão geral do

Hardware-Based Genetic Algorithm (HGA) proposto por Scott, pois foi a base para a

proposta desenvolvida. 1.5.1 O Sistema HGA

A concepção do HGA se encaixa em um ambiente de computação em geral da seguinte forma: o front-end do sistema do HGA consiste em um programa de interface simples rodando em um computador pessoal ou estação de trabalho. Esta interface recebe os parâmetros do AG (ver Seção 1.5.2) de forma interativa com o usuário e grava-os em uma memória que é compartilhada com o back-end, que consiste no hardware do HGA. Além disso, o usuário especifica a função de aptidão em alguma linguagem de programação (por exemplo, C, VHDL1 ou Verilog2). Então, o software converte a especificação dentro de uma descrição estrutural de hardware e programa o FPGA que implementa a função de aptidão. Este software tradutor de hardware poderia ser um sintetizador de Linguagem para Descrição de Hardware (HDL), capaz de gerar o arquivo binário de programação do FPGA. Em seguida, o front-end envia um sinal “GO” para o back-end. Quando o sinal é detectado, o AG é executado com base nos parâmetros já atribuídos na memória compartilhada. Quando terminada a execução, o back-end envia um sinal “DONE” ao front-end. Este detecta o sinal e lê a população final da memória compartilhada. A população é então gravada em um arquivo para utilização do usuário.

O hardware do HGA foi projetado usando VHDL, que por ser uma linguagem de descrição de hardware, permitiu que o projeto fosse especificado de forma comportamental e que modelos mais gerais (independentes de parâmetros) fossem criados, facilitando a escalabilidade do projeto. Os modelos específicos implementados a partir de modelos gerais dependem de parâmetros fornecidos pelo projetista no momento da execução, como, por

1 VHDL é um linguagem de descrição de hardware para circuitos integrados de alta velocidade, como as FPGA por exemplo. (VHDL REFERENCE, 2007)

(33)

exemplo, a largura máxima dos membros da população. Quando os parâmetros são especificados, o modelo pode ser implementado com um sintetizador de VHDL como Autologic da Mentor Graphics ou Quartus II da ALTERA.

1.5.2 O Modelo Geral do HGA

Scott desenvolveu uma implementação descrita em VHDL de um AG geral de forma semelhante ao modelo apresentado na Figura 6, permitindo que o usuário do HGA escolha diversos parâmetros do AG. Esses parâmetros controlados pelo usuário são: o tamanho da população inicial e os seus membros; o número de gerações ao longo do HGA; a semente inicial para o gerador de números aleatórios; e as probabilidades de mutação e cruzamento (crossover). Os valores desses parâmetros são selecionados pelo usuário no software

front-end.

Figura 6 - Fluxo de dados da arquitetura do HGA (SCOTT, 1997).

1.5.3 Os Módulos do HGA e suas Funções

Scott criou os módulos da Figura 6 padronizados a partir dos operadores do AG definidos no AGC de Goldberg. Esses módulos operam de forma concorrente uns com os outros e juntos formam um pipelining de granularidade grossa. Todos os módulos foram escritos em VHDL e por isso são independentes do ambiente operacional e da tecnologia de aplicação (por exemplo, Xilinx FPGA ou Altera FPGA), exceto para o módulo de interface de memória e controle (MIC). A funcionalidade do MIC varia de acordo com a memória física

Fitness (FM)

Crossover/mut. (CMM)

Selection (SM) Population sequencer (PS)

Memory interface and control (MIC)

Rand. no. gen.(RNG)

random numbers random numbers selected members crossed members Shared memory Front end memory requests parameters and data new members/fitness

to write and their address

member and fitness member and fitness sum of fitness to selection module member'’s aaddress

(34)

ligada a ele e a interface desejada entre o HGA e seu usuário. A funcionalidade básica do projeto completo do HGA é a seguinte:

1- Depois de todos os parâmetros terem sido carregados na memória compartilhada, o

MIM recebe um sinal ‘GO’ do front-end. O MIC age como a unidade de controle principal do HGA e é a única interface do HGA com o mundo exterior.

2- O MIC notifica o módulo de aptidão (FM), o módulo de cruzamento/mutação

(CMM), o gerador de números aleatórios (RNG) e o seqüenciador de população (PS), de que o HGA irá começar a execução. Cada um destes módulos pede seus parâmetros necessários ao MIM, que os agrupa nos locais adequados da memória partilhada.

3- O PS inicia o pipelining, solicitando membros da população ao MIC e os passa

para o módulo de seleção.

4- A tarefa do SM é receber os novos membros do PS e julgá-los até que um par de

membros suficientemente aptos seja encontrado com base em um número aleatório. Nesse momento ele passa o par para o CMM e reinicia o processo de seleção.

5- Quando o CMM recebe um par selecionado de membros da SM, ele decide se

realizará cruzamento e mutação com base em valores aleatórios enviados do RNG. Quando terminar, os novos membros são enviados para o módulo FM para a avaliação.

6- O FM avalia os dois novos membros da CMM e grava os novos membros para a

memória através do MIC. O FM também mantém alguns registros sobre o estado atual do HGA que são usados pelo SM para selecionar novos membros e pelo FM para determinar quando o HGA está terminado.

7- Os passos do 3 ao 6 continuam até que o FM determina que o HGA na execução

atual esteja acabado. Em seguida, notifica o MIC sobre a conclusão, que desliga os módulos do HGA e envia o sinal de ‘DONE’ ao front-end.

Uma vez que Scott escreveu os módulos do sistema HGA inteiramente em VHDL, aspectos específicos do projeto podem ser definidos em termos de parâmetros que podem ser alterados quando necessário, tais como o tamanho do barramento de E/S e espaço de endereçamento. Os parâmetros que controlam o HGA são n, a largura máxima em bits dos membros da população, a largura máxima em bits dos valores de aptidão, o tamanho máximo da população, e o número máximo de gerações. Quando paralelização de módulos está

(35)

envolvida (Seção 1.5.4), o parâmetro NSel indica o número paralelo de módulos de seleção. Estes parâmetros são especificados em tempo de compilação do código VHDL ou HDL, o que não é a mesma coisa que os parâmetros em tempo de execução do HGA descritos na seção 1.5.2.

1.5.4 Modelo Pipelining e em Paralelização do HGA

O modelo na Figura 6 é um pipelining de granularidade grossa, pois quando um módulo conclui uma tarefa, como descrito na Secção 1.5.3, ele imediatamente aguarda mais entradas para repetir o processamento. Devido a esse pipelining, as operações do AG não tem que ser suspensas durante a execução das outras operações, caso que acontece em uma implementação em software seqüencial. Assim, é realizada uma aceleração significativa comparada ao software.

A paralelização dos módulos do HGA também pode ser feita. Por exemplo, múltiplos módulos de seleção podem ser inseridos, todos alimentando um único CMM (Figura 7). Há possibilidade de aumentar ainda mais a paralelização, pois o pipeline

SM-CMM-FM pode ser replicado para formar vários pipelines paralelos, se fazendo a replicação

da caixa pontilhada da Figura 6. Neste caso, o direito de escrever novos membros na memória e a manutenção de registros do estado do HGA terá de ser deslocado do FM para um novo módulo que gerencie a memória, caso contrário haverá problemas de concorrência (TANENBAUM, 2005)

Figura 7 - Exemplo de módulos de seleção paralelos (SCOTT, 1994).

Fitness (FM)

Crossover/mut. (CMM)

Selection (SM)

Population sequencer (PS) Memory interface (MIM)

Rand. no. gen.(RNG) random numbers selected members crossed members Shared memory memory requests new members/fitness

to write and their address

member/fitness member and fitness sum of fitness to selection module member'’s aaddress selected members Selection (SM) member/fitness random numbers random numbers

(36)

O mais alto grau de paralelismo do HGA envolve o uso de certa quantidade de SM,

CMM e de FM. A conectividade é completa no sentido de que cada módulo de seleção é

conectado a cada CMM e cada CMM é conectado a cada FM. Esta configuração maximizaria a utilização de cada módulo, mas também tornaria mais difícil o controle da comunicação entre os módulos.

1.5.5 O Gerador de Números Aleatórios

O Gerador de Números Aleatórios (GNR, do inglês random number generator) é o componente chave de qualquer AG executado em hardware. Ele é que fornece seqüências de bits aleatórias que permitem que o hardware simule devidamente os processos aleatórios necessários para que o AG em sua concepção seja contemplado.

O GNR do HGA é baseado na teoria dos autômatos celulares lineares. Os bits (células) da cadeia sendo criada mudam seus estados de acordo com as regras 90 e 150 do autômato celular descrito em (WOLFRAM, 1984):

Regra 90: Si+ = Si -1 Si + 1 Regra 150: Si+ = Si -1 Si Si + 1

Onde Si é o estado atual da célula i na cadeia linear, Si+ é o próximo estado de Si e é o operador OU Exclusivo. Dessa forma, na regra 90 a célula é atualizada apenas baseando-se nos estados das células vizinhas, enquanto que na regra 150 o estado da própria célula também é considerado para a atualização.

Para conseguir o máximo tamanho de ciclo, ou seja, maior quantidade de números possíveis antes que estes comecem a repetir, o GNR do HGA utiliza a seqüência conforme a regra 150-150-90-150...90-150, mostrada por Serra et al (1990).

O autômato celular foi escolhido porque gera seqüências aleatórias melhores do que o algoritmo hoje mais usado para esse fim, os registradores de deslocamento com realimentação, conhecidos como LFSRs. Além disso, o autômato celular gera mais números aleatórios do que um LFSR de mesmo tamanho (HORTENSIUS, 1989).

Referências

Documentos relacionados

O Departamento de Controle de Qualidade é o responsável pela revisão dos resultados de testes e da documentação pertinente ao produto (determinação de componentes / materiais,

- Se o estagiário, ou alguém com contacto direto, tiver sintomas sugestivos de infeção respiratória (febre, tosse, expetoração e/ou falta de ar) NÃO DEVE frequentar

Se você vai para o mundo da fantasia e não está consciente de que está lá, você está se alienando da realidade (fugindo da realidade), você não está no aqui e

Note on the occurrence of the crebeater seal, Lobodon carcinophagus (Hombron & Jacquinot, 1842) (Mammalia: Pinnipedia), in Rio de Janeiro State, Brazil.. On May 12, 2003,

◦ Os filtros FIR implementados através de estruturas não recursivas têm menor propagação de erros. ◦ Ruído de quantificação inerente a

Desta maneira, observando a figura 2A e 2C para os genótipos 6 e 8, nota-se que os valores de captura da energia luminosa (TRo/RC) são maiores que o de absorção (ABS/RC) e

- As despesas de deslocamento, hospedagem e alimentação para qualquer chamado técnico após a instalação, dentro do período da garantia ou qualquer chamado técnico fora da

ARREMATANTE, se ausente ao Leilão, será informado do resultado, via fac-símile ou pela Internet, devendo depositar os valores referentes à comissão do leiloeiro e ao