INSTITUTO DE ESTUDOS SUPERIORES DA AMAZÔNIA CURSO: ENGENHARIA DA COMPUTAÇÃO
ÁUREA CELESTE DA COSTA RIBEIRO MONICA CHIEKO HOSOGOSHI
ESTUDOS DOS ALGORITMOS GENÉTICOS USANDO TÉCNICAS COMPUTACIONAIS
BELÉM 2005
INSTITUTO DE ESTUDOS SUPERIORES DA AMAZÔNIA CURSO: ENGENHARIA DA COMPUTAÇÃO
ÁUREA CELESTE DA COSTA RIBEIRO MONICA CHIEKO HOSOGOSHI
ESTUDOS DOS ALGORITMOS GENÉTICOS USANDO TÉCNICAS COMPUTACIONAIS
Monografia de Conclusão de Curso, apresentado como requisito parcial para obtenção do grau de Bacharel em Engenharia de Computação. Orientador Prof. Dr. Felipe Almeida
BELÉM 2005
INSTITUTO DE ESTUDOS SUPERIORES DA AMAZÔNIA CURSO: ENGENHARIA DA COMPUTAÇÃO
ÁUREA CELESTE DA COSTA RIBEIRO MONICA CHIEKO HOSOGOSHI
ESTUDOS DOS ALGORITMOS GENÉTICOS USANDO TÉCNICAS COMPUTACIONAIS
Esta monografia foi julgada adequada para a obtenção do título de Bacharel em Engenharia da Computação e aprovada na sua forma pelo Instituto de Estudos Superiores da Amazônia. Data:__/__/____ Conceito:________
____________________________________________ Prof. Dr. José Felipe Almeida Orientador ____________________________________________ Prof. Dr. Dionne Cavalcante Monteiro Coordenador de Engenharia da Computação ______________________________________________ Prof. Msc. Rodrigo Melo e Silva de Oliveira UFPA
BELÉM 2005
Para nossa família, nossa eterna gratidão.
AGRADECIMENTOS
A Deus, que sempre iluminou a nossa caminhada. Ao nosso Orientador Prof. Dr. Felipe Almeida pela paciência e dedicação. Ao nosso Coordenador do Curso Prof. Dr. Dionne Monteiro pelo estímulo e atenção que nos concedeu durante o curso. Ao nosso amigo Rodrigo Oliveira pelo apoio e colaboração para a realização deste. Aos nossos Colegas e amigos em especial a Cristina, Carlos Cristiano, Shirlen e Thais do IESAM pela amizade, companheirismo e troca de experiências. A todos nossos familiares e amigos pelo apoio e colaboração.
“Transportai um punhado de terra todos os dias e fareis uma montanha”. Confúcio
LISTAS DE ILUSTRAÇÕES
Figura 1 - Fluxograma de um algoritmo genético tradicional..................................................... Quadro1 - Medida de aptidão de cada indivíduo na população corrente.................................. Figura 2 - Amostragem estocástica universal............................................................................ Quadro 2 - População de strings e seus valores de fitness....................................................... Figura 3 - Esquema gráfico do processo de cruzamento.......................................................... Figura 4 - Crossover de 1 ponto................................................................................................ Figura 5 - Crossover de 2 pontos.............................................................................................. Figura 6 - Crossover uniforme................................................................................................... Figura 7 - Esquema do processo de mutação........................................................................... Figura 8 - Gráfico da função de Schaffer .................................................................................. Figura 9 – Codificação binária................................................................................................... Figura 10 - Primeiro teste com o ga1.f....................................................................................... Figura 11 - Segundo teste com o ga1........................................................................................ Figura 12 - Terceiro teste com o ga1.f....................................................................................... Figura 13 - Quarto teste com o ga1.f......................................................................................... Figura 14 - Quinto teste com o ga1.f......................................................................................... Figura 15 - Primeiro teste com o ga2.f....................................................................................... Figura 16 - Segundo teste com o ga2.f...................................................................................... Figura 17 - Terceiro teste com o ga2.f....................................................................................... Figura 18 - Quarto teste com o ga2.f......................................................................................... Figura 19 - Quinto teste com o ga2.f......................................................................................... Figura 20 - Primeiro teste com o ga3.f....................................................................................... Figura 21 - Segundo teste com o ga3.f...................................................................................... Figura 22 - Terceiro teste com o ga3.f....................................................................................... Figura 23 - Quarto teste com o ga3.f......................................................................................... Figura 24 - Quinto teste com o ga3.f......................................................................................... Figura 25 - Primeiro teste com o ga4.f....................................................................................... Figura 26 - Segundo teste com o ga4.f...................................................................................... Figura 27 - Terceiro teste com o ga4.f....................................................................................... Figura 28 - Quarto teste com o ga4.f......................................................................................... Figura 29 - Quinto teste com o ga4.f......................................................................................... Quadro 3 – Erro médio do cruzamento......................................................................................
P. 19 21 22 23 24 25 25 25 26 28 29 30 31 31 32 32 33 33 34 34 35 35 36 36 37 37 38 38 39 39 40 45
SUMÁRIO 1 INTRODUÇÃO............................................................................................................... CAPÍTULO 1 – HISTÓRICO............................................................................................. 1.1 ORIGEM DOS ALGORITMOS GENÉTICOS.............................................................. 1.2 TERMINOLOGIA DOS ALGORITMOS GENÉTICOS ................................................ 1.3 ALGORITMOS GENÉTICOS .....................................................................................
.P 10 12 13 15 16
2.2 COMPONENTES DE UM ALGORITMO GENÉTICO.................................................. 2.2.1 Problema.................................................................................................................. 2.2.2 Indivíduo.................................................................................................................. 2.2.2.1 Representação..................................................................................................... 2.3 OPERAÇÕES BÁSICAS.............................................................................................. 2.3.1 Inicialização............................................................................................................. 2.3.2 Avaliação................................................................................................................. 2.3.3 Seleção.................................................................................................................... 2.3.4 Reprodução............................................................................................................. 2.3.5.Cruzamento.............................................................................................................. 2.3.6 Mutação.................................................................................................................... 2.3.7 Atualização.............................................................................................................. 2.3.8 Finalização............................................................................................................... 2.3.9 Elitismo.................................................................................................................... CAPÍTULO 3 – RESULTADOS......................................................................................... 3.1 TESTES....................................................................................................................... 3.1.1 Gráficos do ga1 f em cinco testes, cruzamento de um ponto sem elitismo..... 3.1.2 Gráficos do ga2.f em cinco testes, cruzamento de um ponto com elitismo..... 3.1.3 Gráficos do ga3.f em cinco testes, cruzamento de dois pontos sem elitismo. 3.1.4 Gráficos do ga4.f em cinco testes, cruzamento de dois pontos com elitismo ........................................................................................................................................... 3.2 RESULTADOS QUANTO A PRECISÃO E MELHOR GERAÇÃO............................... 3.2.1 Testes com o ga1.f ................................................................................................. 3.2.2 Testes com o ga2.f.................................................................................................. 3.2.3 Testes com o ga3.f.................................................................................................. 3.2.4 Testes com o ga4.f.................................................................................................. 3.3 CONSIDERAÇÕES SOBRE OS RESULTADOS OBTIDOS....................................... 2 CONSIDERAÇÕES FINAIS............................................................................................ 3 REFERÊNCIAS...............................................................................................................
20 20 20 20 20 21 21 21 22 23 26 27 27 27 28 30 30 33 35
CAPÍTULO 2 - DESCRIÇÃO DA TÉCNICA DE ALGORITMO GENÉTICO......... 2.1.ALGORITMO GENÉTICO TRADICIONAL.......................................................
19 19
38 40 40 41 42 43 45 46 47
RESUMO
Este trabalho trata da implementação da Técnica de Computação Evolucionária chamada Algoritmos Genéticos. Dessa forma, é feita uma descrição sobre a parte conceitual do método e os passos usados em seu desenvolvimento. Para a validação do código implementado, usou-se uma função matemática como função - objetivo. O desempenho da técnica é observado em vários testes com a variação dos operadores genéticos em quatro códigos, que simulam dois tipos de cruzamento com e sem elitismo. Após os testes obtevese a afinação da técnica para chegar ao valor máximo da função.
Palavras Chave: Algoritmos genéticos; Função - objetivo; Valor máximo; Computação evolucionária.
ABSTRACT
This work describes the implementation of the Evolutionary Computation al Technique called Genetic Algorithms. In that way, it is made a description on the conceptual part of the method and the steps used in its development. For the validation of the implemented code, a mathematical function was used as fitness function. The technique is evaluated in several tests with the variation of the genetic operators in four codes that simulate two crossing types with and without elitism. After the tests it was obtained the tuning of the technique to arrive to the maximum value of the function. Key-words: Genetic computation.
algorithms;
Function
objective;
Maximum
value;
Evolutionary
1 INTRODUÇÃO
A atual tendência é modelar características humanas e naturais de forma computacional. O homem vem fazendo com que algoritmos computacionais aproximem-se cada vez mais da natureza e do ser humano seja em forma de aprender ou de pensar. Um desses ramos da ciência de aproximação natural nos computadores é a computação evolutiva que nos leva a modelar a teoria da evolução das espécies de Darwin ao longo das gerações, abstraindo de uma determinada população as melhores informações genéticas para a perpetuação de classes de indivíduos, fazendo com que para determinados problemas, chegue-se à solução através desta técnica computacional. Assim, o principal objetivo deste trabalho é desenvolver um estudo relacionado com a Técnica Computacional de algoritmos genéticos, fazendo-se um levantamento bibliográfico e revisão da literatura. A aprendizagem dessa técnica computacional permite obter conhecimento em uma área da computação evolutiva. Os Algoritmos Genéticos são métodos de busca e otimização, inspirados no modelo de evolução de Darwin. Nesta técnica, o problema pode ser codificado em cromossomos, os operadores genéticos se aplicam sobre esses cromossomos ou sobre a população desses e, ao final, é apresentada a solução ótima para o problema. Esta técnica de otimização tem uma vantagem sobre técnicas anteriores, pois trabalha com um conjunto das possíveis soluções ao invés de uma a uma em seqüência, reduzindo o fator tempo de busca (GUERVÓS, 2005). Os Algoritmos Genéticos são aplicados em problemas complexos, com espaço de busca muito grande ou de difícil formulação matemática. Por isso, são utilizados em diversas aplicações, por exemplo: na Indústria, na Economia, na Engenharia e em estudos sobre questões de Meio ambiente, entre outros (PACHECO, 2005). Na classificação de imagens de sensoriamento remoto, a técnica computacional dos Algoritmos Genéticos é usada para classificar imagens de satélites. Nesse tipo de problema, o objetivo é mapear e atualizar os levantamentos da cobertura do solo. Logo, amostras
11
representativas das classes são selecionadas nas imagens multiespectrais e um processo seletivo, semelhante a evolução das espécies de Darwin, são empregados para se chegar à solução que fornece conjunto de parâmetros que satisfaz os critérios de busca. Então, com este resultado, a imagem toda pode ser classificada (CENTENO, 2005). Exemplo em engenharia da computação: busca e classificação em bancos de dados. O algoritmo genético é também utilizado para determinar o melhor regime operacional de uma central hidrelétrica com diversos grupos geradores diferentes entre si. Este método considera a vazão como parâmetro hidráulico, os custos de investimento e de operação e manutenção e a receita decorrente da venda da energia elétrica gerada. Como resultado obtém-se um conjunto de melhores soluções possíveis para a implementação (ALMEIDA, 2005). Este trabalho trata da implementação computacional da Técnica dos Algoritmos Genéticos. Para isto foi feito um código usando-se a linguagem de programação em FORTRAN. O desempenho dessa técnica foi validado com modificações nos parâmetros da formulação do método conhecido como Cruzamento. Assim, este trabalho foi dividido nos seguintes Capítulos: no Capítulo 1, é apresentado um histórico sobre os Algoritmos Genéticos e suas terminologias; no Capítulo 2, é feita uma descrição dessa técnica computacional, e por fim, são apresentados, no Capítulo 3, os resultados do Código desenvolvido.
12
CAPÍTULO 1 - HISTÓRICO A teoria da evolução foi descrita por Charles Darwin, 20 anos depois de sua viagem pela ilha de Galápos. Estas idéias são apresentadas no livro “A origem das espécies por meio da seleção natural”. Este livro foi bastante polêmico na época e em qualquer caso é uma descrição incompleta da evolução (SOARES, 1997). As hipóteses de Darwin foram apresentadas junto com Walace e chegaram às mesmas conclusões, independentemente. Observaram, portanto, que pequenas mudanças hereditárias nos seres vivos e a seleção natural são os dois fatores que provocam a mudança nas gerações de espécies. Mas, Darwin não sabia qual era a base da herança, pensava que os traços de um ser vivo eram como um fluido, e que os “fluidos” dos pais se inseriam na descendência. Essa hipótese tinha o problema que ao final de certo tempo, uma população tinha os mesmos traços em intervalos. Amabis; Martho (1997). Foi Mendel que descobriu que as características são herdadas de forma discreta, e que partiam do pai ou da mãe, dependendo da característica dominante ou recessiva. A essas características que podiam tomar diferentes valores, Mendel chamou de genes, e aos valores que podiam tomar alelos. Na realidade as teorias de Mendel foram esquecidas e não voltaram à tona até o princípio do século XX. Soares (op. cit.). Em 1930 o geneticista inglês Robert Aylmer não relacionou ambas as teorias, demonstrando que os genes mendelianos eram os que proporcionavam o mecanismo necessário para a evolução. Mais ou menos pela mesma época, o biólogo alemão Walther Flemming descobriu os cromossomos, como certos filamentos nos quais se agregava a cromatina do núcleo celular durante a divisão, mais adiante descobriram que as células de cada espécie vivente tinham um número fixo e característico de cromossomos, até nos anos 50, quando Watson e Crick descobriram que a base molecular dos genes está no DNA. Os cromossomos são compostos de DNA, e, portanto, os genes estão nos cromossomos Soares (op.cit.).
13
Todas essas descobertas, nos dias atuais, formam a teoria do neodarwinismo, que afirma que a história da maioria das espécies está relacionada por uma série de processos que atuam dentro das populações: reprodução, mutação, competição e seleção. Amabis; Martho (op. cit.). É necessário compreender os mecanismos de mudança para entender os algoritmos evolutivos, esse trata de imitar estes mecanismos para resolver os problemas complexos. Os mecanismos de mudança alteram a proporção de alelos de um tipo determinado em uma população e dividem-se em dois tipos, os que diminuem a variabilidade genética e os que a aumentam sua freqüência. Amabis; Martho (op. cit.). Dentre os que diminuem a variabilidade genética, encontra-se principalmente a Seleção natural, onde os indivíduos que tenham alguma característica que os façam menos adaptados para realizar tarefas necessárias a sua sobrevivência, terão menos probabilidade de reproduzir-se, logo seu schemas patrimônio genético terá menos probabilidade de ser repassado a outras gerações. Essa seleção sucede-se a muitos níveis: competição entre indivíduos da mesma espécie, competição entre diferentes espécies e competição entre presa e predador. Amabis; Martho (op. cit.). O principal mecanismo que aumenta a variabilidade genética é a mutação, essa representa uma alteração do código genético, que pode acontecer por múltiplas razões, são totalmente aleatórias e é o mecanismo básico de geração de variabilidade genética, apesar de que se pensa habitualmente, as maiorias das mutações ocorrem de forma natural, existem substâncias mutagênicas que aumentam sua freqüência. Amabis; Martho (op. cit.).
1.1 ORIGEM DOS ALGORITMOS GENÉTICOS John Holland desde pequeno, perguntava-se como a natureza conseguia criar seres cada vez mais perfeitos, não sabia a resposta, mas tinha certa idéia de como achá-la, então fez alguns pequenos modelos da natureza com características iguais as reais e observou seu comportamento, para fazer suas conclusões deste feito, desde pequeno fazia simulações de batalhas, copiava mapas e os cobria de pequenos exércitos que se enfrentavam entre si. (GUERVÓS, 2005).
14
Nos anos 50, quando entrou em contato com os primeiros computadores, pode levar a prática algumas de suas idéias, mas não encontrou um ambiente fértil para divulgá-las. Foi no princípio dos anos 60, na universidade de Michigan, que dentro de um grupo de lógica computacional (logic of computers), suas idéias começaram a ser testadas e a darem frutos. Lendo livros sobre a teoria evolucionista, começou a descobrir meios de por em prática seus propósitos de entender a natureza. Aprendeu que a evolução era uma forma de adaptação mais poderosa que uma simples aprendizagem, e tomou a decisão de aplicar as idéias da evolução em programas de computadores para determinados fins. (GUERVÓS, 2005). Nesta universidade, Holland ministrava aulas sobre sistemas adaptativos, e com a participação ativa de seus alunos, criaram as idéias que mais tarde gerariam os algoritmos genéticos. Os objetivos em sua pesquisa para a criação dos algoritmos genéticos, segundo Guervós op. Cit. Foram: - Imitar os processos de evolução dos sistemas da natureza; - Construir sistemas artificiais que tivessem os mecanismos de evolução dos sistemas naturais. Depois de 15 anos, David Goldberg tornou-se aluno de Holland e como Engenheiro industrial trabalhava com desenhos de pipelines, teve a idéia de aplicar os algoritmos genéticos em seu trabalho. Holland não acreditava na possibilidade, pois pensava que o problema era muito complexo para aplicar a técnica (Guervós op. cit.). Goldberg teve sucesso em sua idéia, escreveu um algoritmo genético em um computador pessoal, o Aple II. Todas estas e outras aplicações, criadas por estudantes de Holland, tornaram os Algoritmos Genéticos um campo de estudo, discutido em conferencias próprias, como a ICGA, a primeira celebrada em 1985 (Guervós op. cit.).
15
1.2 TERMINOLOGIA DOS ALGORITMOS GENÉTICOS Para um melhor entendimento do funcionamento e os entes envolvidos em um algoritmo genético, é necessário entender a terminologia envolvida, cita-se as principais: GENÓTIPO: é a forma (arranjo) de como os genes e cromossomos estão distribuídos, que correspondem a determinado fenótipo. FENÓTIPO: é o conjunto das características de certo indivíduo observado ou descrito por outros métodos, fornecidas pela manifestação do genótipo. POPULAÇÃO: conjunto de indivíduos da mesma espécie; grupos inteiros de organismos de um tipo; um grupo intercruzante de animais ou vegetais; grupo amplo do qual podemos tomar uma amostra.
ESPÉCIE: grupo de indivíduos intercruzante que são isolados reprodutivamente de outros grupos semelhantes, contendo fenótipos semelhantes.
INDIVÍDUO: é aquele exemplar de uma espécie que interage com o meio ambiente.
CROMOSSOMO: componente genético responsável pelo fenótipo do indivíduo, conjunto de genes.
GENE: unidade básica do cromossomo que define, de acordo com seu valor e posição, uma característica; um determinador hereditário que especifica uma função biológica; uma unidade de herança (DNA) localizada em um lugar fixo no cromossomo.
16
SELEÇÃO NATURAL: mecanismo que garante aos indivíduos mais aptos melhores chances de reprodução; fertilidade diferencial na natureza favorecendo os indivíduos que se adaptam melhor e buscando eliminar aqueles indivíduos não adaptados ao meio.
REPRODUÇÃO: é a multiplicação de novos indivíduos a partir de outros que pertencem à mesma espécie.
AJUSTE OU AVALIAÇÃO: medida que determina o grau de aptidão de um indivíduo ao seu meio ambiente.
1.3 ALGORITMOS GENÉTICOS Os Algoritmos Genéticos são técnicas de busca e otimização. Com isso, podem ser vistos como um conjunto de procedimentos de buscas adaptativas. Um ponto chave deles é que o processo de adaptação não se dá por incrementação de uma estrutura do algoritmo, mas mantendo uma população de estruturas a partir das quais se geram novas populações. Para isto são utilizados os operadores genéticos. Os operadores genéticos correspondem as seguintes etapas segundo Lucas (2005): Avaliação: onde a aptidão, o fitness, capacidade das espécies adaptarem-se ao meio, é feita no problema, para estabelecer quão bem as possíveis soluções respondem ao problema; Seleção: Indivíduos selecionados para a reprodução, a probabilidade de serem selecionados é proporcional à sua aptidão; Cruzamento: Características das soluções escolhidas são recombinadas, gerando novos indivíduos; Mutação: características dos indivíduos resultantes do processo de reprodução são alteradas, acrescentando assim variedade a população; Atualização: Os indivíduos criados nesta geração são inseridos na população; Finalização: Verifica se as condições de encerramento da evolução foram atingidas, retornando para a etapa de avaliação em caso negativo e encerrando a execução em caso positivo.
17
Atribuiu-se a forma particular de trabalhar dos Algoritmos Genéticos pelas seguintes características: A) Busca Codificada Pére 2000 (citado por Lucas, 2002, p. 6): Os Algoritmos Genéticos não trabalham sobre o domínio do problema, mas sim sobre representações de seus elementos. Tal fator impõe ao seu uso uma restrição: para resolver um problema é necessário que o conjunto de soluções viáveis para este possa ser de alguma forma codificada em uma população de indivíduos.
B) Generalidade Whi 2000 (citado por Lucas, 2002, p. 6): Os algoritmos genéticos simulam a natureza em um de seus mais fortes atributos: a adaptabilidade. Visto que a representação e a avaliação das possíveis soluções são as únicas partes (de um considerável conjunto de operações utilizadas em seu funcionamento) que obrigatoriamente requisitam conhecimento dependente do domínio do problema abordado, basta à alteração destas para portá-los para outros casos. A preocupação de um programador de Algoritmos Genéticos não é então de que forma chegar a uma solução, mas sim com o que ela deveria se parecer.
C) Paralelismo explícito Lucas (2002) diz: O alto grau de paralelismo intrínseco aos Algoritmos Genéticos pode ser facilmente verificado se considerarmos o fato de que cada indivíduo da população existe como um ente isolado e é avaliado de forma independente. Se na natureza todo processo de seleção ocorre de forma concorrente, nos Algoritmos Genéticos essa característica se repete.
D) Busca estocástica Gey 97, Mic 99 (citado por Lucas, 2002, p. 7): Ao contrário de outros métodos de busca de valores ótimos, os algoritmos genéticos não apresentam um comportamento determinístico. Não seria correto, no entanto, afirmar que tal busca se dá de forma completamente aleatória — as probabilidades de aplicação dos operadores genéticos fazem com que estes operem de forma previsível estatisticamente, apesar de não permitirem que se determine com exatidão o comportamento do sistema.
18
E) Busca Cega Gey 97, Pére 2000 (citado por Lucas, 2002, p. 7): Um algoritmo genético tradicional opera ignorando o significado das estruturas que manipula e qual a melhor maneira de trabalhar sobre estas. Tal característica lhe confere o atributo de não se valer de conhecimento específico ao domínio do problema, o que lhe traz generalidade por um lado, mas uma tendência a uma menor eficiência por outro.
F) Eficiência mediana Dav 91, Gey 97, Bur 95(citado por Lucas, 2002, p. 7): Por constituir um método de busca cega, um algoritmo genético tradicional tende a apresentar um desempenho menos adequado que alguns tipos de busca heurística orientada ao problema. Para resolver tal desvantagem, a tática mais utilizada é a hibridização, onde heurísticas provenientes de outras técnicas são incorporadas.
G) Paralelismo Implícito Gol 89 (citado por Lucas, 2002, p. 7): Os Algoritmos Genéticos buscam uma solução ótima, partindo de várias soluções, ao mesmo tempo, enquanto que os métodos clássicos de otimização efetuam a busca voltados a uma única solução a cada instante. Assim, pode-se perceber que existe um paralelismo implícito, que permite encontrar a melhor solução ótima dentre todas as possíveis soluções (ótimo global).
H) Facilidade no uso de Restrições Bar 96 (citado por Lucas, 2002, p. 7): Ao contrário de muitos outros métodos de busca, os Algoritmos genéticos facilitam a codificação de problemas com diversos tipos de restrição, mesmo que elas apresentem graus diferentes de importância. Neste caso, se dois indivíduos violam restrições, é considerado mais apto àquele que viola as mais flexíveis (soft constraints) em detrimento do que viola as mais graves (hard constraints).
19
CAPÍTULO 2 - DESCRIÇÃO DA TÉCNICA DE ALGORITMO GENÉTICO 2.1.ALGORITMO GENÉTICO TRADICIONAL O Algoritmo Genético tradicional realiza, segundo Fialho 2005 (citado por Bittencourt, 1998), as seguintes funções: 1.Gera a população inicial de forma aleatória; 2.Avalia cada indivíduo da população; 3.Enquanto critério de parada não for satisfeito faça: 3.1.Seleciona os indivíduos mais aptos de acordo com a avaliação; 3.2.Cria novos indivíduos aplicando os operadores crossover e mutação; 3.3.Armazena os novos indivíduos em uma nova população; 3.4.Avalia cada cromossomo da nova população. Estas funções são representadas num fluxograma de forma simplificada, conforme Figura 1.
Figura 1-Fluxograma de um algoritmo genético tradicional Fonte: Lucas, 2000
20
Deve-se notar que a codificação empregada e o algoritmo têm que garantir a restrição do espaço de busca. Isso é fundamental para a convergência do método, os limites estão relacionados ao problema estudado. 2.2 COMPONENTES DE UM ALGORITMO GENÉTICO Nos tópicos que seguem, são descritos os componentes de um algoritmo genético segundo Lucas (2002). 2.2.1 Problema Geralmente, o problema é quando se tem um grande espaço de busca ou problemas complexos e sem formulação matemática precisa.
2.2.2 Indivíduo São os responsáveis por codificarem as possíveis soluções para o problema a ser tratado, e através de sua manipulação que as respostas são achadas.
2.2.2.1 Representação É fundamental no desempenho de um algoritmo genético e deve: descrever o espaço de busca relevante ao problema, codificar ”geneticamente” a essência do problema e ser compatível com os operadores. Por exemplos: Vetores de reais (2.345, 4.3454, 5.1) Cadeias de bits (1101110) Vetores de inteiros (1,3,4,5,9) -ou outra estrutura de dado.
2.3 OPERAÇÕES BÁSICAS As operações básicas de um algoritmo genético são Lucas (2002): inicialização, avaliação, seleção, reprodução, cruzamento, mutação, atualização e finalização.
21
2.3.1 Inicialização Na inicialização faz-se o uso de funções aleatórias para gerar os indivíduos, na qual visa fornecer maior “biodiversidade”, fundamental para garantir uma boa abrangência do espaço de pesquisa.
2.3.2 Avaliação Nesta fase, cada indivíduo da população é avaliado a fim de que seja determinado o seu grau de adaptação, isto é, a nota associada ao indivíduo que avalia quão boa é a solução por ele representada. No exemplo, a função matemática f(x) = x2 mede aptidão de cada indivíduo. No Quadro 1, C1 é um indivíduo mais apto que C2. Cromossomo
x
f(x)
C1
0 0 1 0 0 1
9
81
C2
0 0 0 1 0 0
4
16
Quadro 1-Medida de aptidão de cada indivíduo na população corrente Fonte: Autoria própria, 2005
2.3.3 Seleção A Seleção é a imitação da seleção natural, onde determina quais indivíduos da população podem participar da fase de reprodução, normalmente privilegia os indivíduos mais aptos. Assim, perpetuando as melhores características na espécie. Segundo Daw (citado por LUCAS, 2002) ela é um processo: Dirigido: a seleção é feita de forma determinística, isto é, um indivíduo só sobreviverá no ambiente e nele se reproduzir se for capaz de responder de forma adequada a todos os fenômenos de seu meio; Cumulativo: os benefícios do processo da seleção são mantidos de geração para geração.
22
Tem-se a seleção proporcional a aptidão (roleta) considera-se um círculo dividido em n regiões (tamanho da população), onde a área de cada região é proporcional à aptidão do indivíduo conforme a Figura 2. Colocam-se sobre este círculo uma "roleta" com n cursores, igualmente espaçados. Após um giro da roleta a posição dos cursores indica os indivíduos selecionados.
Este
processo
é
denominado
amostragem
universal
estocástica.
Evidentemente, os indivíduos cujas regiões possuem maior área terão maior probabilidade de serem selecionados vários vezes. Como conseqüência, a seleção de indivíduos pode conter várias cópias de um mesmo indivíduo enquanto outros podem desaparecer.
Figura 2 - Amostragem estocástica universal Fonte: Miranda, 2005
E também seleção torneio onde se escolhe n (tipicamente 2) indivíduos aleatoriamente da população e o melhor é selecionado.
2.3.4 Reprodução Uma vez feita à seleção será feita à reprodução na quais os indivíduos são reproduzidos com base na aptidão, ou seja, os melhores adaptados têm maiores chances de participar da reprodução. Isto é, os cromossomos ou strings com maiores valores têm maior probabilidade de formar a próxima geração. Este operador é o modelo artificial da seleção natural. E a aptidão ou fitness é a habilidade que o indivíduo possui para sobreviver a predadores, doenças e outros obstáculos. Esta função no meio artificial é que decidirá quais os cromossomos ou strings que sobreviverão e quais morrerão.
23
Por exemplo, o resultado da decodificação binária da string 10101 representa a sua aptidão ou fitness e a função objetivo ou payoff poderia maximinizar este valor conforme o Quadro 2 abaixo:
10101 = 1 x 24 + 0x23 + 1x22 + 0x21 + 1x20 = 21 (fitness)
POPULAÇÃO
"FITNESS"
0001
1
0110
6
1010
12
Quadro 2 - População de strings e seus valores de fitness Fonte: Fialho, 2005
2.3.5.Cruzamento Em seguida o cruzamento que é a troca de gene, responsável pela combinação das características genéticas dos pais durante a reprodução, permitindo que elas sejam herdadas pelas próximas gerações. Ou seja, onde se determina aleatoriamente quais strings que casarão e logo, também aleatoriamente, em que posição da string se processará o cruzamento ou crossover. Por exemplo, considerando - se dois strings: A e B, com seguintes decodificações binárias:
24
"A" = 0 1 1 0 1 "B" = 1 1 0 0 0 Caso seja escolhida a posição de corte K=4 após a quarta posição da string, o cruzamento terá a seguinte configuração, em decorrência da troca, conforme destacado em negrito: "A" = 0 1 1 0 0 "B" = 1 1 0 0 1 Na figura abaixo se visualiza melhor o cruzamento:
Figura 3 - Esquema gráfico do processo de cruzamento (um ponto) Fonte: Fialho, 2005
Têm-se vários tipos de cruzamento como veremos a seguir: Cruzamento de 1 ponto: Um ponto de corte é escolhido aleatoriamente a série binária desde o começo do cromossomo até o ponto de cruzamento é copiada do primeiro pai e o resto copiado do segundo pai.
25
11001011+11011111 = 11001111 Figura 4 - Crossover de 1 ponto Fonte: Manoel, 2004
Cruzamento de 2 pontos: Dois pontos de cruzamento são definidos aleatoriamente, a série binária desde o início do cromossomo até o primeiro ponto de cruzamento é copiada do primeiro pai, a parte do primeiro ponto de cruzamento até o segundo ponto é copiada do segundo pai e o resto do cromossomo é copiado do primeiro pai novamente.
11001011 + 11011111 = 11011111 Figura 5 - Crossover de 2 pontos Fonte: Manoel, 2004
Cruzamento uniforme: os bits são copiados aleatoriamente do primeiro ou segundo pai.
11001011 + 11011101 = 11011111 Figura 6 - Crossover uniforme Fonte: Manoel, 2004
26
2.3.6 Mutação A mutação é a troca aleatória de um gene, responsável pela introdução e manutenção da diversidade genética na população, alterando arbitrariamente um ou mais genes de um cromossomo escolhido aleatoriamente. Ocorrendo a introdução de novos elementos na população. Assim, todo o processo de busca, influenciando diretamente a velocidade de convergência e evitando que aconteça a supremacia de uma determinada sub-população, o que geraria o chamado elitismo. Por exemplo, pode ser verificado na figura abaixo uma analogia do processo de mutação, onde é alterada a cor dos strings nas posições "2", "4" e "7", da situação "A" para a situação "A’" (FIALHO, 2005).
Figura 7 - Esquema do processo de mutação Fonte: Fialho, 2005
27
2.3.7 Atualização Na atualização os indivíduos resultantes do processo do cruzamento e mutação são inseridos na população segundo o algoritmo genético tradicional como vimos mais anteriormente. 2.3.8 Finalização A finalização é o fim do processo caso se tenha satisfeito a condição de parada como vimos anteriormente também.
2.3.9 Elitismo O Elitismo é o método utilizado em Algoritmos Genéticos para melhorar a convergência e é também uma adição aos métodos de seleção que forçam os Algoritmos Genéticos a reterem certo número de melhores indivíduos em cada Geração. Tais indivíduos podem ser perdidos se eles não forem selecionados para a reprodução ou se eles forem destruídos por cruzamento ou mutação. (CATARINA, 2005)
28
CAPÍTULO 3 – RESULTADOS
Para observar o comportamento de um Algoritmo Genético, utilizaram-se os códigos ga1.f, ga2.f, ga3.f e ga4.f (Universidade...2005) que modelam um Algoritmo Genético para obter o máximo de uma função, com cruzamentos de 1 e 2 pontos com ou sem elitismo.
Problema: Maximinizar a função de Schaffer :
F = 0.5 - ((sin((x**2+y**2)**.5) )**2 -.5 )/(1+.001*(x**2+y**2) )**2
Figura 8 - Gráfico da função de Schaffer Fonte: Autoria própria, 2005
A função de Schaffer, como observado na Figura 8, tem vários pontos de pico ( máximos locais), denotados pelas delimitações de cores variadas. O máximo dessa função é representado pelo ponto central de cor vermelha, que é próximo do ponto (0,0). Essa situação ilustra a dificuldade de encontrar este resultado.
29
Para modelar o algoritmo Genético utilizou-se uma representação binária, onde a função aptidão que mede o fitness de cada indivíduo é a própria função de Schaffer. A taxa de mutação utilizada é de 2 % e a taxa de cruzamento de 100%, com 50 bits (sendo 25 por parâmetro (x,y)), a precisão de 5 casas decimais entre cada unidade ( 10 elevado a 5) e a faixa é -100 a 100 para x e y, o método de seleção do tipo roleta, com máximo de 10.000 gerações, sendo que cada contém 200 indivíduos. Desse modo a codificação binária foi feita da seguinte forma:
Figura 9 – Codificação binária Fonte: Autoria Própria,2005
30
Tipos de cruzamentos observados nos códigos: ga1.f - Cruzamento de 1 ponto sem Elitismo ga2.f - Cruzamento de 1 ponto com Elitismo ga3.f - Cruzamento de 2 pontos sem Elitismo ga4.f – Cruzamento de 2 pontos com Elitismo Cada código foi testado cinco vezes cada, a fim de observar o comportamento do Algoritmo em cada caso. 3.1 TESTES 3.1.1 Gráficos do ga1 f em cinco testes, cruzamento de um ponto sem elitismo
Figura 10 - Primeiro teste com o ga1.f Fonte: Autoria Própria, 2005
31
Figura 11 - Segundo teste com o ga1.f Fonte: Autoria própria, 2005
Figura 12 - Terceiro teste com o ga1.f Fonte: Autoria própria, 2005
32
Figura 13 - Quarto teste com o ga1.f Fonte: Autoria própria, 2005
Figura 14 - Quinto teste com o ga1.f Fonte: Autoria própria, 2005
33
3.1.2 Gráficos do ga2.f em cinco testes, cruzamento de um ponto com elitismo:
Figura 15 - Primeiro teste com o ga2.f Fonte: Autoria, própria, 2005
Figura 16 - Segundo teste com o ga2.f Fonte: Autoria própria, 2005
Figura
34
Figura 17 - Terceiro teste com o ga2.f Fonte: Autoria própria, 2005
Figura 18 - Quarto teste com o ga2.f Fonte: Autoria própria, 2005
35
Figura 19 - Quinto teste com o ga2.f Fonte: Autoria própria, 2005
3.1.3 Gráficos do ga3.f em cinco testes, cruzamento de dois pontos sem elitismo:
Figura 20 - Primeiro teste com o ga3.f Fonte: Autoria própria, 2005
36
Figura 21 - Segundo teste com o ga3.f Fonte: Autoria própria, 2005
Figura 22 - Terceiro teste com o ga3.f Fonte: Autoria própria, 2005
37
Figura 23 - Quarto teste com o ga3.f Fonte: Autoria própria, 2005
Figura 24 - Quinto teste com o ga3.f Fonte: Autoria própria, 2005
38
3.1.4 Gráficos do ga4.f em cinco testes, cruzamento de dois pontos com elitismo:
Figura 25 - Primeiro teste com o ga4.f Fonte: Autoria própria, 2005
Figura 26 - Segundo teste com o ga4.f Fonte: Autoria própria, 2005
39
Figura 27 - Terceiro teste com o ga4.f Fonte: Autoria própria, 2005
Figura 28 - Quarto teste com o ga4.f Fonte: Autoria própria, 2005
40
Figura 29 - Quinto teste com o ga4.f Fonte: Autoria própria, 2005
3.2 RESULTADOS QUANTO A PRECISÃO E MELHOR GERAÇÃO 3.2.1 Testes com o ga1.f -teste 1 (figura 9) Melhor Indivíduo: x = 0.0620305538 y = -0.0569760799 Valor do Máximo: 0.99291569 Melhor geração: 1314
-teste 2 (figura 10) Melhor Individuo: x = 0.0112771988 y = -0.0149011612 Valor do Maximo: 0.999650478 Melhor geração: 7023
41
-teste 3 (figura 11) Melhor Indivíduo: x = 3.09057832 y = -0.546616316 Valor do Máximo: 0.990284085 Melhor geração: 48
-teste 4 (figura 12) Melhor Indivíduo: x = -2.21600533 y = 2.22252607 Valor do Máximo: 0.990284085 Melhor geração: 162
-teste 5 (figura 13) Melhor Individuo: x = 0.0459849834 y = 0.0153064728 Valor do Maximo: 0.997650623 Melhor geração: 7223
3.2.2 Testes com o ga2.f -teste 1 (figura 14) Melhor Indivíduo: x = -1.1920929E-05 y = 0.000143051147 Valor do Máximo: 1 Melhor geração: 435 Seqüência: 01111111111111111111111101000000000000000000011000
-teste 2 (figura 15) Melhor Indivíduo: x = -3.57627869E-05 y = -0.000160932541 Valor do Máximo: 1. Melhor geração: 6764 Seqüência: 01111111111111111111110100111111111111111111100101
42
-teste 3 (figura 16) Melhor Indivíduo: x = 0. y = 5.96046448E-06 Valor do Máximo: 1 Melhor geração: 1216 Seqüência: 10000000000000000000000001000000000000000000000001
-teste 4 (figura 17) Melhor Indivíduo: x = -5.96046448E-06 y = -5.96046448E-05 Valor do Máximo: 1. Melhor geração: 707 Seqüência: 01111111111111111111111110111111111111111111110110
-teste 5 (figura 18) Melhor Indivíduo: x = -6.55651093E-05 y = 0.000131130219 Valor do Máximo: 1 Melhor geração: 645 Seqüência: 01111111111111111111101011000000000000000000010110
3.2.3 Testes com o ga3.f -teste 1 (figura 19) Melhor Indivíduo: x = 0.0267863274 y = -0.00237822533 Valor do Máximo: 0.99927628 Melhor geração: 3309 Seqüência: 10000000000010001100011100111111111111111001110001
-teste 2 (figura 20) Melhor Indivíduo: x = -0.00691413879 y = -0.065112114 Valor do Máximo: 0.995714486
43
Melhor geração: 9291 Seqüência:01111111111111011011110000111111111101010101010100
-teste 3 (figura 21) Melhor Indivíduo: x = -0.0585496426 y = 0.0341773033 Valor do Máximo: 0.99540633 Melhor geração: 28 Seqüência: 01111111111011001101000011000000000001011001100110
-teste 4 (figura 22) Melhor Indivíduo: x = 2.44756937 y = 1.96464062 Valor do Máximo: 0.990284085 Melhor geração: 256 Seqüência:10000011001000100000010101000001010000011110001100
-teste 5 (figura 23) Melhor Indivíduo: x = 0.0111401081 y = -0.0592172146 Valor do Máximo: 0.996370018 Melhor geração: 4014 Seqüência:10000000000000111010011010111111111101100100110001
3.2.4 Testes com o ga4.f .-teste 1 (figura 24) Melhor Indivíduo: x = -0.000125169754 y = 5.96046448E-06 Valor do Máximo: 1. Melhor geração: 282 Seqüência: 01111111111111111111010111000000000000000000000001 -teste 2 (figura 25)
44
Melhor Indivíduo: x = -1.05759501 y = -2.95491219 Valor do Máximo: 0.990284085 Melhor geração: 66 Seqüência:01111110101001010111001010111110000110111101111000 -teste 3 (figura 26) Melhor Indivíduo: x = 8.34465027E-05 y = 5.96046448E-05 Valor do Máximo: 1. Melhor geração: 3114 Seqüência:10000000000000000000011101000000000000000000001010
-teste 4 (figura 27) Melhor Indivíduo: x = -5.96046448E-05 y = 3.57627869E-05 Valor do Máximo: 1 Melhor geração: 3418 Seqüência: 01111111111111111111101101000000000000000000000110
-teste 5 (figura 28) Melhor Indivíduo: x = -0.000125169754 y = 5.96046448E-06 Valor do Máximo: 1 Melhor geração: 282 Seqüência:01111111111111111111010111000000000000000000000001
45
3.3 CONSIDERAÇÕES SOBRE OS RESULTADOS OBTIDOS Observa-se que no caso do ga1, nem sempre se pode encontrar o ponto máximo da função apenas máximo locais. Quando foi usado o cruzamento de 2 pontos, a resposta foi encontrada em todos os testes. A aplicação do elitismo garantiu a convergência mais rápida em todos os casos. Observando a tabela 1, que coloca a média de erro nos testes de cada caso, observamos que nos casos sem elitismo o erro médio é maior dos que nos casos com elitismo e que nos casos sem elitismo, entre os algoritmos sem elitismo o que teve o menor erro médio foi o de cruzamento de dois pontos sem elitismo.
Ga1.f, Cruzamento 1 pt, sem elitismo Erro Médio
0,005843008
ga2.f Cruzamento 1 pt, com elitismo
ga3.f Cruzamento 2 pts, sem elitismo
ga4.f Cruzamento 2 pts, com elitismo
0
0,0019348502
0
Quadro 3 – Erro médio do cruzamento Fonte: Autoria própria, 2005
46
2 CONSIDERAÇÕES FINAIS Os testes realizados nos códigos dos Algoritmos genéticos envolvidos no trabalho apresentaram o refinamento da melhor desempenho entre os casos dos operadores genéticos aplicados. Dentre os casos analisados, o cruzamento de dois pontos foi o que apresentou melhor desempenho, pois em todos os testes realizados com este caso, encontrou-se o ponto máximo da função, de acordo com as Figuras 19 a 28. Observou-se também que a utilização do Elitismo aumenta a velocidade de convergência do algoritmo para encontrar o ponto máximo da função, otimizando o fator tempo, como ilustra as Figuras 24 a 28. Nota-se ganho na precisão da resposta. A busca pelo conhecimento e do domínio dos processos envolvidos em sistemas, faz com que o homem busque cada vez mais as melhores respostas ou soluções para cada problema encontrado. Sua curiosidade e necessidade em dominar fazem que esse processo fique perene e consiga modelar sistemas, implementá-los e dominar as variáveis envolvidas, podendo assim suprir suas necessidades.
47
REFERÊNCIAS
ALMEIDA, Roberto A. Determinação do regime operacional de centrais Hidrelétricas utilizando
o
algoritmo
genético.
Disponível
em:
. Acesso em: 5 Mar. 2005.
AMABIS, José Mariano. MARTHO, Gilberto Rodrigues. Fundamentos da biologia moderna. 2 ed. rev. São Paulo: Moderna, 1997. p.552-558.
CATARINA, Adair S et. al. Utilização de um algoritmo genético na otimização de lucro de
uma
propriedade
agrícola.
Disponível
em:
. Acesso em:25 Set. 2005.
CENTENO, J. A. S.; SCHMIT, M. A. R. Uso de algoritmos genéticos para classificação de imagens de sensoriamento remoto. Disponível em: . Acesso em: 5 fev.2005.
FIALHO, Francisco Antônio Perreira et al. Algoritmo Genético – fundamentação. Disponível em:< http://www.geocities.com/Athens/Sparta/1350/ia/a_genetic.html>. Acesso em 25 mar. 2005.
GUERVÓS, Juan J. M. Informática Evolutiva: algoritmos genéticos. Disponível em: . Acesso em: 5 mar. 2005.
48
LUCAS, Diogo C. Algoritmos Genéticos: um estudo de seus conceitos fundamentais e aplicação
no
problema
de
grade
horária.
Disponível
em:
Acesso: 6 mar. 2005.
LUCAS,
Diogo
C.
Algoritmos
Genéticos:
uma
introdução.
Disponível
em:
<
http://www.inf.ufrgs.br/~alvares/INF01048IA/MaterialProva2/ApostilaAlgoritmosGeneticos.pdf Acesso: 6 mar. 2005.
MANOEL,
Hermelindo
Pinheiro.
Cruzamento
e
Mutação
Disponível
em:
<.
http://www.cidase.com/webizu/professor/ga/cromu.html>. Acesso em: 29 set. 2005.
MIRANDA, Marcio Nunes de. Algoritmos Genéticos: fundamentos e aplicações. Rio de Janeiro. Disponível em: < http://www.gta.ufrj.br/~marcio/genetic.html>.Acesso em: 11 jun.2005.
PACHECO, Marco A. C. Algoritmos Genéticos: princípios e aplicações. Disponível em: .Acesso em: 8 jul. 2005.
SOARES, José Luís. Biologia: volume único. São Paulo: Scipione, 1997. p.280-282.
UNIVERSIDADE
FEDERAL
DO
Eletromagnetismo. Fortran 77, 2005.
PARÁ.
Laboratório
de
Análise
Numérica
em