Programação Genética

2,989 views
2,809 views

Published on

1 Comment
1 Like
Statistics
Notes
No Downloads
Views
Total views
2,989
On SlideShare
0
From Embeds
0
Number of Embeds
4
Actions
Shares
0
Downloads
131
Comments
1
Likes
1
Embeds 0
No embeds

No notes for slide

Programação Genética

  1. 1. Programação Genética Diogo Medeiros
  2. 2. Introdução <ul><li>A Programação Genética tenta tratar uma das questões da ciência da computação: </li></ul><ul><li>“ Como os computadores podem aprender a resolver problemas sem serem explicitamente programados para tal?  ” </li></ul><ul><li>“ Ou seja, como os computadores podem fazer o que deve ser feito sem serem orientados exatamente para fazerem isto? ” </li></ul>
  3. 3. Histórico <ul><li>Em 1975, John Holland (Ph.D. em Ciência da Computação - Universidade de Michigan, 1959) criou os Algoritmos Genéticos. </li></ul><ul><li>Em 1992, John Koza (Doutor em Ciência da Computação - Universidade de Michigan, 1972) usou algoritmos genéticos para desenvolver programas para realizar certas tarefas. Ele chamou seu método de programação genética. </li></ul>
  4. 4. Propósitos <ul><li>Como qualquer outro sistema computacional inspirado na natureza, a Programação Genética tem dois propósitos básicos: </li></ul><ul><ul><li>Servir de ferramenta para a solução de problemas de engenharia; </li></ul></ul><ul><ul><li>Servir de modelo científico simplificado para processos naturais. </li></ul></ul><ul><li>Na prática, qualquer implementação de Programação Genética vai envolver, ao menos parcialmente, ambos os propósitos básicos mencionados acima. </li></ul>
  5. 5. Áreas de Utilização <ul><li>A utilização da Programação Genética tem sido estendida a problemas de diversas áreas do conhecimento, tais como: </li></ul><ul><ul><li>Biotecnologia. </li></ul></ul><ul><ul><li>Engenharia Elétrica. </li></ul></ul><ul><ul><li>Análises Financeiras. </li></ul></ul><ul><ul><li>Processamento de Imagens. </li></ul></ul><ul><ul><li>Reconhecimento de Padrões. </li></ul></ul><ul><ul><li>Mineração de Dados. </li></ul></ul><ul><ul><li>Linguagem Natural. </li></ul></ul>
  6. 6. Definição <ul><li>A Programação Genética é a extensão dos Algoritmos Genéticos no domínio dos programas, onde: </li></ul><ul><ul><li>O indivíduo é um programa de computador. </li></ul></ul><ul><ul><li>O espaço de busca são todos os possíveis programas de computador. </li></ul></ul><ul><li>Em resumo, a Programação Genética é um método que busca, dentro de um espaço significativamente polinomial/exponencial e restrito de programas de computador, uma solução exata ou pelo menos aproximada para resolver determinado problema. </li></ul>
  7. 7. Programas de Computadores <ul><li>Um programa de computador é uma expressão matemática composta de funções e terminais. </li></ul><ul><li>As funções podem ser operações aritméticas (+, - , *,...), operações booleanas (and, or, not, ...), funções matemáticas (sen, cos, ...), operadores condicionais (if, then, ...), funções de iteração (while, ...), funções que causam recursão, funções específicas do domínio do problema. </li></ul><ul><li>Os terminais podem ser variáveis (representando, possivelmente, as entradas) ou constantes (número 5, por exemplo). </li></ul>
  8. 8. Representação de Programas em PG <ul><li>Os programas de computador, em Programação Genética, são representados sob a forma de Árvores . </li></ul><ul><li>As funções aparecem nos nós internos da árvore . </li></ul><ul><li>Os terminais aparecem nos nós folha da árvore . </li></ul>
  9. 9. Representação de Programas em PG <ul><li>Abaixo, temos a expressão 3 x²+2x+1 representada sob a forma de árvore: </li></ul>
  10. 10. Exemplo de execução da PG <ul><li>Entrada: Conjunto de pontos = {1,4,5,6,9} </li></ul><ul><li>Saída: Melhor programa encontrado tal que a função y se aproxime mais dos pontos dados na entrada. Por exemplo, o programa x²+x. </li></ul><ul><li>Cada programa é avaliado pela medida de aptidão, a qual deve ser definida como parâmetro, pois varia de problema para problema. </li></ul><ul><li>A PG, através de operações genéticas, irá retornar o melhor programa encontrado a partir de uma população inicial de programas criada de um conjunto de funções e terminais. </li></ul>
  11. 11. Figura Ilustrativa
  12. 12. Representação de Programas em PG <ul><li>A Programação Genética evolui programas de computador a partir dos conjuntos de terminais e de funções. </li></ul><ul><li>Para que programas criados pelo PG sejam válidos, é necessário que os conjuntos de funções e de terminais atendam a propriedade do fechamento - closure . </li></ul>
  13. 13. Propriedade do Fechamento (Closure) <ul><li>Funções devem aceitar como argumento qualquer valor e tipo de dado que seja retornado por qualquer função do conjunto de funções, e qualquer valor e tipo de dado que possa ser assumido por qualquer terminal. </li></ul>
  14. 14. Fluxograma da Programação Genética
  15. 15. Passos Preparatórios para PG <ul><li>Existem 5 Passos Preparatórios na aplicação de PG: </li></ul><ul><li>Determinar o Conjunto de Terminais; </li></ul><ul><li>Determinar o Conjunto de Funções Primitivas; </li></ul><ul><li>Definir uma Medida de Aptidão; </li></ul><ul><li>Estabelecer Parâmetros para Controlar a Execução; </li></ul><ul><li>Definir um Método para Determinar o Resultado e um Critério de Parada; </li></ul>
  16. 16. Medida de Aptidão (Função Fitness) <ul><li>Cada indivíduo tem associado a si uma medida numérica, que é o resultado da interação dele com o ambiente; </li></ul><ul><li>Ou seja, é uma medida do grau de adaptação deste indivíduo; </li></ul><ul><li>Esta medida é que dirige diretamente o processo evolucionário, fazendo com que, quanto mais adaptado for um indivíduo maior a sua chance de permanecer ou ter suas características propagadas para as próximas gerações. </li></ul>
  17. 17. Parâmetros de Controle da Execução <ul><li>tamanho da população </li></ul><ul><li>número máximo de gerações </li></ul><ul><li>taxa de reprodução </li></ul><ul><li>taxa de mutação </li></ul><ul><li>taxa de crossover </li></ul><ul><li>altura da árvore </li></ul><ul><li>altura inicial da árvore </li></ul><ul><li>taxa de permutação </li></ul><ul><li>freqüência de edição </li></ul>
  18. 18. Parâmetros de Controle da Execução <ul><li>taxa de encapsulamento </li></ul><ul><li>condição de chamada de destruição </li></ul><ul><li>método de geração da população inicial </li></ul><ul><li>método de seleção do pai (primeiro e segundo) </li></ul><ul><li>uso de ajuste da medida de aptidão </li></ul>
  19. 19. Critério de Parada <ul><li>Atingir um número máximo de gerações; </li></ul><ul><li>Atingir um ponto ótimo (satisfatório) do problema. </li></ul>
  20. 20. Criação da População Inicial <ul><li>Gera-se uma população inicial aleatória, formada por programas de computadores, com funções e terminais aleatórios, obedecendo a profundidade máxima da árvore (controlada por parâmetro). </li></ul><ul><li>Métodos: </li></ul><ul><ul><li>Grow </li></ul></ul><ul><ul><li>Full </li></ul></ul><ul><ul><li>Half-and-half </li></ul></ul><ul><ul><li>Uniform </li></ul></ul>
  21. 21. Métodos de Criação da População Inicial: Grow <ul><li>Os nós são selecionados aleatoriamente dos conjuntos F e T (exceto para o nó raiz que é retirado do conjunto F), por este motivo o método produz árvores de formatos irregulares. Se uma ramificação contém um nó terminal, esta ramificação pára, mesmo que a profundidade máxima não tenha sido atingida. </li></ul>
  22. 22. Métodos de Criação da População Inicial: Full <ul><li>Ao invés de escolher aleatoriamente os nós do conjunto de funções e de terminais, o método Full, escolhe somente funções até que um nó de profundidade máxima seja selecionado, então ele passa a escolher somente terminais. O resultado disso é que cada árvore atinge a profundidade máxima. </li></ul>
  23. 23. Métodos de Criação da População Inicial: Half-and-half <ul><li>É uma combinação dos métodos Grow e Full, ou seja, utiliza o método Full em 50% das vezes e o método Grow nas outras 50%, tendo por objetivo gerar um número igual de árvores para cada profundidade. </li></ul><ul><li>Supondo, por exemplo, uma árvore de profundidade máxima seis (6), a população é igualmente dividida em árvores com profundidade dois, três, quatro, cinco e seis, ou seja, 20% terão profundidade dois, 20% terão profundidade três e assim sucessivamente. </li></ul><ul><li>Em cada grupo, metade das árvores são geradas pelo método Full e a outra metade pelo Grow. </li></ul>
  24. 24. Métodos de Criação da População Inicial: Uniform <ul><li>Desenvolvido com o objetivo de criar árvores uniformes, geradas a partir do conjunto de todas as árvores possíveis. </li></ul><ul><li>O algoritmo calcula várias vezes quantas árvores poderão ser geradas para cada tamanho desejado, por este motivo o método possui um alto custo computacional. </li></ul>
  25. 25. Métodos de Criação da População Inicial: Algoritmo
  26. 26. Seleção dos Indivíduos <ul><li>Para selecionar quais indivíduos da população farão parte de uma nova geração e quais deles sofrerão alterações, através dos operadores genéticos (reprodução, cruzamento e mutação), é necessário que se tenha um critério de seleção que garanta que uma boa escolha seja realizada. </li></ul><ul><li>Um dos métodos mais utilizados para se efetuar esta seleção, baseia-se no valor de aptidão de cada indivíduo, os indivíduos selecionados deverão ser aqueles que apresentam melhores valores de aptidão. </li></ul>
  27. 27. Operadores Genéticos <ul><li>Reprodução </li></ul><ul><li>Crossover (Cruzamento) </li></ul><ul><li>Mutação </li></ul><ul><li>Permutação </li></ul><ul><li>Edição </li></ul><ul><li>Encapsulamento </li></ul><ul><li>Destruição (Decimation) </li></ul>
  28. 28. Operadores Genéticos: Reprodução <ul><li>Um indivíduo da população é selecionado de acordo com algum método baseado na aptidão; </li></ul><ul><li>O indivíduo é copiado, sem qualquer alteração, para a próxima geração. </li></ul>
  29. 29. Operadores Genéticos: Crossover <ul><li>Troca de material genético entre dois indivíduos. </li></ul><ul><li>É escolhido um ponto de corte nas duas árvores e os ramos inferiores a ele são trocados. </li></ul>
  30. 30. Operadores Genéticos: Mutação <ul><li>A mutação consiste em uma mudança aleatória de uma função, uma entrada ou uma constante na árvore. </li></ul>
  31. 31. Operadores Genéticos: Permutação <ul><li>Escolhe-se um ponto interno de uma expressão; </li></ul><ul><li>Ramos são permutados; </li></ul><ul><li>A permutação a ser realizada é escolhida aleatoriamente (3 ramos: existem 3! possibilidades de permutação); </li></ul><ul><li>se a função é comutativa, não há efeito da permutação. </li></ul>
  32. 32. Operadores Genéticos: Edição <ul><li>Proporciona um meio para editar e simplificar expressões; </li></ul><ul><li>Consome muito tempo; </li></ul><ul><li>Pode tornar a expressão menos vulnerável ao crossover; </li></ul><ul><li>Reduz a variedade de estruturas disponíveis para o crossover. </li></ul>
  33. 33. Operadores Genéticos: Encapsulamento <ul><li>Forma de identificar subárvores potencialmente úteis e dar a elas um nome para que sejam referenciadas e usadas posteriormente; </li></ul><ul><li>Seleciona-se um pai baseando-se na aptidão; </li></ul><ul><li>Seleciona-se um ponto interno desta árvore. </li></ul>
  34. 34. Operadores Genéticos: Destruição <ul><li>É uma forma de reduzir o número de indivíduos medíocres nas primeiras gerações; </li></ul><ul><li>Controlado por dois parâmetros: </li></ul><ul><li>– percentagem de indivíduos mantídos; e </li></ul><ul><li>– condição que especifica quando este operador será invocado. </li></ul><ul><li>Indivíduos são selecionados para permanecer com base na aptidão. </li></ul><ul><li>Ex: Percentagem=10% , Quando=geração 0 </li></ul><ul><li>Na geração 0, 10% da população permanece (população será criada 10 vezes maior na geração 0) </li></ul>
  35. 35. Exemplo <ul><li>Objetivo: Dada a entrada (conjunto de pontos), fazer uma regressão simples através da PG. </li></ul><ul><li>Conjunto de Funções: +,-,*,sen,cos </li></ul><ul><li>Conjunto de Terminais: variável x e constantes aleatórias </li></ul><ul><li>População Inicial: Half-and-half </li></ul><ul><li>Parâmetros: - Tamanho da população = 100 - crossover = 80% - mutação = 20% - reprodução = 20% </li></ul>
  36. 36. Exemplo <ul><li>Entrada: </li></ul>
  37. 37. Simulador <ul><li>Applet Java que simula uma execução da PG para uma Regressão Simples. </li></ul><ul><li>Site: http://alphard.ethz.ch/gerber/approx/default.html </li></ul><ul><li>Necessário ter Plugin Java instalado no navegador. </li></ul><ul><li>Utiliza todos os conceitos de PG que vimos até agora. </li></ul>
  38. 38. Simulador – Aplicando o exemplo <ul><li>Tela Inicial: </li></ul>
  39. 39. Simulador – Aplicando o exemplo <ul><li>Clicando em “Settings...” podemos ajustar os parâmetros: </li></ul>
  40. 40. Simulador – Aplicando o exemplo <ul><li>Abaixo temos a figura mostrando a tela após ajustar os parâmetros. Note, no quadro “Approximation”, que o programa interpretou os pontos do conjunto de entrada. </li></ul>
  41. 41. Simulador – Aplicando o exemplo <ul><li>Após ajustar os parâmetros, clicamos em “Start” e ele inicia a execução da PG, sempre mostrando o melhor indivíduo atual no quadro “Results” e a curva da sua função na cor Azul no quadro “Approximation”: </li></ul>
  42. 42. Simulador – Aplicando o exemplo <ul><li>Abaixo temos a tela após a PG terminar a execução (depois de 1000 gerações, no caso deste simulador). O melhor indivíduo (saída da PG) foi encontrado na geração 999. </li></ul>
  43. 43. Questão 1 <ul><li>O que é Programação Genética? Quais seus principais propósitos? </li></ul>
  44. 44. Questão 2 <ul><li>O que é um programa de computador? Cite 2 exemplos. </li></ul>
  45. 45. Questão 3 <ul><li>Dado os programas abaixo, como estes seriam representados na Programação Genética? (desenhe) </li></ul><ul><ul><li>3x²+9y-7z³ </li></ul></ul><ul><ul><li>(a OR b) AND (c AND (NOT d)) </li></ul></ul>
  46. 46. Questão 4 <ul><li>Qual o programa de computador que representa cada Árvore abaixo? Indique o conjunto de funções e o conjunto de terminais usado em cada árvore. </li></ul>
  47. 47. Questão 5 <ul><li>Simule uma execução da Programação Genética para o seguinte problema: </li></ul><ul><li>Objetivo: Encontrar um programa cuja saída coincide com x+x no intervalo 0<x<1 </li></ul><ul><li>Conjunto de Funções: +,-,* </li></ul><ul><li>Conjunto de Terminais: variável x e constantes entre 0 e 5 </li></ul><ul><li>Função Fitness : soma dos erros absolutos para x = {0, 0.2, ..., 0.8, 1.0} </li></ul><ul><li>População Inicial: Full </li></ul>
  48. 48. Questão 5 (cont.) <ul><li>Parâmetros: - Tamanho da população = 4 - crossover = 50% - mutação = 25% - reprodução = 25% - Sub-árvores sem limite de tamanho - Tamanho da árvore inicial = 3 - Número máximo de gerações = 4 </li></ul><ul><li>Critério de Parada: Um programa cuja soma dos erros absolutos é menor que 0.1 é encontrado ou número máximo de gerações é atingido </li></ul>
  49. 49. Questões Complementares <ul><li>Exemplifique a propriedade do fechamento. </li></ul><ul><li>Qual a complexidade algoritmica dos AGs? </li></ul><ul><li>Em relação aos AGs, qual o seu espaço de estados? </li></ul><ul><li>Idem às duas questões anteriores, qual a complexidade da PG? </li></ul>

×