Introdução
Algoritmos Genéticos (AG) é uma sub-área da Computação Evolutiva, área de pesquisa de Inteligência Artifical que trata de sistemas para a resolução de problemas que utilizam modelos computacionais baseados na teoria da evolução natural.[¹]
Foi fundamentada pelo americano John Henry Holland, que publicou o livro “Adaptation in Natural and Articial Systems”.
Definição
AGs são programas evolutivos baseados na teoria de seleção natural e na hereditariedade. Ou seja, partem do pressuposto que, em uma dada população, indivíduos com boas características genéticas têm maiores chances de sobrevivência e de produzirem indivíduos cada vez mais aptos. Como resultado, os indivíduos menos aptos tenderão a desaparecer.[¹]
Conceitos Básicos
Uma geração é uma população de indivíduos. Para cada indivíduo (solução candidata) dá-se o nome de cromossomo. O conjunto de todas as configurações que o cromossomo pode assumir forma o seu espaço de busca. Um cromossomo é formado por um conjunto de genes (blocos de DNA). O valor atribuído a cada gene é chamado de alelo. Cada gene possui uma posição e a essa posição dá-se o nome de locus. O genótipo de um cromossomo é a representação de um conjunto particular de genes, enquanto o fenótipo é a representação do genótipo no mundo real. Por exemplo, o genótipo 010010 pode representar a cor do cabelo marrom no mundo real.
A cada geração os indivíduos são avaliados quanto à sua adequação ao ambiente. Esta avaliação é feita pela função objetivo (também chamada de função de avaliação, função de custo ou função de aptidão). Os indivíduos (pais) são selecionados à partir da avaliação para que sejam realizados os cruzamentos e as mutações e assim gerar novos indivíduos (filhos). Cruzamento (crossover ou recombinação) é a recombinação de características dos pais para permitir que as próximas gerações de filhos herdem suas características. Mutação é a alteração aleatoriamente de alguns genes dos filhos, permitindo assim a introdução de novos elementos na população.
Na seleção os cromossomos mais aptos têm mais probabilidade de serem escolhidos para o cruzamento, mas isto não significa necessariamente que eles serão escolhidos. Então para que não se perca os melhores cromossomos de uma geração é utilizada uma técnica chamada de elitismo, que significa que pelo menos 1 cromossomo (o mais apto) será copiado para a nova população para que os melhores descendentes permaneçam durante por várias gerações.
Características
Os AGs diferem dos métodos tradicionais de busca e otimização, principalmente em quatro aspectos [¹]:
- trabalham com uma codificação do conjunto de parâmetros e não com os próprios parâmetros;
- trabalham com uma população e não com um único ponto;
- utilizam informações de custo ou recompensa e não derivadas ou outro conhecimento auxiliar;
- utilizam regras de transição probabilísticas e não determinísticas.
Aplicação
Encontrar soluções ótimas em um espaço de busca com um número, possivelmente, indeterminado de soluções possíveis. [³] Um exemplo de aplicação onde pode ser utilizado um AG para realizar a busca da solução ótima é o Problema do Caixeiro Viajante, ou então, localizar o pico mais alto de uma montanha em um mapa topográfico [³].
Estrutura básica
A estrutura básica de um AG é mostrada na figura abaixo:
![Estrutura Básica de um AG Estrutura Básica de um AG [²]](http://eusourafael.files.wordpress.com/2009/08/estrutura-basica-ag.gif?w=584)
Estrutura Básica de um AG ²
2. Todos os indivíduos de cada geração são avaliados pela função objetivo e recebem uma nota de acordo com a sua adequação ao ambiente. Quanto melhor for a adequação do indivíduo, mais chances ele tem de ser selecionado.
3. Se for encontrada uma solução, ou seja, nesta geração possui uma solução ótima, então o problema está resolvido.
4. Alguns indivíduos são selecionados, de acordo com a nota de adequação adquirida no passo 2, para fazer o cruzamento e assim gerar a próxima geração.
5. Após o cruzamento é aplicada a mutação.
6. Os passos 2 a 5 são repetidos até que a solução ótima seja encontrada.
Pontos Chaves
Existem alguns pontos chaves de um AG que devem ser destacados (nos próximos posts falarei sobre cada um destes pontos chaves):
Representação
Identificar qual a melhor maneira de representar o problema para que o AG possa trabalhar adequadamente sobre ele. A maneira mais utilizada (porém nem sempre a mais indicada) é em foma de vetor de valores binários, exemplo, 110010101100.
Seleção
É o processo de selecionar os indivíduos mais aptos para realizar o cruzamento e a mutação para que sejam gerados indivíduos ainda mais aptos. Exemplos de métodos de seleção são: Método da Roleta, Método do Torneio, Método da Amostragem Universal Estocástica.
Operadores
São utilizados para assegurar que a nova geração formada seja totalmente nova apesar de manter, de alguma forma, as características dos pais (cruzamento); e também para diversificar a população (mutação).
Alguns exemplos de cruzamento são: Cruzamento de um-ponto, Cruzamento Multipontos e Cruzamento Uniforme.
Parâmetros
Existem alguns parâmetros que podem ser configurados em um AG, como exemplo, tamanho da população, taxa de cruzamento, taxa de mutação, dentre outros. É importante ressaltar que o desempenho do AG é altamente influenciado pela definição dos parâmetros utilizados.
Referências Bibliográficas
[1] REZENDE, S. O., Sistemas Inteligentes – Fundamentos e Aplicações, 2005, Manole
[2] Algoritmos Genéticos: Fundamentos e Aplicações
[3] Algoritmos Genéticos – Visão Geral
[4] Introdução aos Algoritmos Genéticos
[5] Algoritmo genético
Parabéns pela iniciativa do seu blog Rafael!
Acho que está faltando conteúdo na internet sobre essas áreas que são do nosso interesse (AG, Fuzzy e RNA), ao menos no nosso idioma. É bom encontrar mais pessoas com a mesma idéia de compartilhar conhecimentos de forma menos acadêmica, mais voltada ao aprendizado através de aplicações práticas e discussões, algo que acho muito mais produtivo do que somente produzir teses e mais teses sobre o assunto.
Ando sem tempo para escrever mais posts no meu blog (como você pode ver pela data do último post), mas quero dar continuidade em meus estudos o mais breve possível. Com certeza vamos ter oportunidades de discutir os conceitos, compartilhar idéias e, espero, validar muitas dessas idéias em experimentos práticos com IA.
Só gostaria de fazer um comentário sobre o passo 3 em sua explicação:
“3. Se for encontrada uma solução, ou seja, nesta geração possui uma solução ótima, então o problema está resolvido.”
Como o ideal dos AGs é sempre trabalhar com uma certa taxa de aleatoriedade (ou seja, imitar um dos aspectos da evolução na natureza), este não é um tipo de algoritmo muito adequado para trabalhar com problemas para os quais exista uma solução conhecida como a melhor.
O mais comum é definir uma quantidade de gerações para o algoritmo e passar por todas elas. Somento ao se chegar na última geração é que então temos uma lista das melhores soluções encontradas entre todas as gerações. Esses valores são então ajustados para que o AG seja executado com várias configurações diferentes, até que uma configuração adequada seja encontrada.
Isso significa que sempre que executarmos novamente o AG para o mesmo searchspace de soluções candidatas existe a possibilidade de encontrarmos soluções ainda melhores do que as já encontradas em outras execuções.
Esse é ao mesmo tempo o ponto forte e talvez um dos pontos fracos do AG, pois da mesma forma que podemos encontar – numa condição totalmente otimista – a melhor solução possível para um dado problema, também é possível que o mesmo AG nunca chegue a uma solução razoável ou que pelo menos sejam necesssárias inúmeras execuções com populações iniciais e configurações diferentes até que o resultado seja satisfatório.
Não estou dizendo que os passos que você descreveu estão incorretos, mas nesse ponto que mencionei, eles acabariam não aproveitando todo o potencial dos AGs.
Resumidamente, eu diria que a premissa básica quando se trabalha com Algorítmos Genéticos é que sempre existe a possibilidade de uma solução ainda melhor ser encontrada. Por isso é um tipo de algoritmo tão poderoso caso seja usado com cautela e, principalmente, muita paciência para experimentar muitas configurações diferentes e adequar as funções de fitness até que se obtenha um resultado satisfatório.
Correto Henrique.
Isso seria a estrutura básica de um AG. Existem algumas variações do algoritmo e alguns parâmetros que podem ser ajustados para que um melhor desempenho seja adquirido.
Além que a condição de parada pode ser definida de algumas formas, por exemplo, o número de iterações (como você citou), solução ótima (ou aceitável) encontrada, dentre outras.
Valeu pela explicação. ;D
Só pra complementar. Outros exemplos de critérios de parada são: (a) perda de diversidade e (b) convergência (nas últimas N gerações não houve melhora na aptidão).
Rafael, só pra avisar que eu havia esquecido de te adicionar no blogroll do Tesla Asylum, mas agora já está lá como indicação para nossos visitantes.
Um abraço