Gilberto Souza EGC - Computação Evolucionária - 2005 Linguagem PUSH Gilberto Souza EGC - Computação Evolucionária - 2005
Estrutura Programação Genética Linguagem PUSH EGC / UFSC
O que é Programação Genética Metodologia autônoma de inspiração biológica (seleção natural) para gerar programas de computador os quais serão usados para resolver problemas específicos EGC / UFSC
O que é Programação Genética Técnica de Aprendizado de máquina Permitir ao computador aprender Algoritmos evolucionários Otimizar uma população de programas EGC / UFSC
O que é Programação Genética Seria mais fácil programar um algoritmo que possa medir a quantidade de sucesso em resolver um problema do que escrever o programa em si. Soluções Programa de computador Função de Fitness Algoritmo específico para um problema boas Muito boas ruins péssimas EGC / UFSC
O que é Programação Genética Linguagem que permita modificação aleatória de código Código = símbolos de alto nível Combinação uniforme dos símbolos Dicionário para associar entradas ao símbolos EGC / UFSC
Implementações de PG Estruturas em forma de árvore (Koza) Árvores de instruções e dados Lisp Representação linear Seqüência de instruções e dados C, Pascal, Java, etc. Representação baseada em pilhas Pilhas utilizadas para armazenar dados/instruções Push EGC / UFSC
Programa de Computador Time Saída 0 6 1 6 2 6 3 6 4 6 5 6 6 6 7 6 8 6 9 6 10 6 11 7 12 7 int funcao (int time) { int temp1, temp2; if (time > 10) { temp1 = 3; } else { temp1 = 4; } temp2 = temp1 + 1 + 2; return (temp2); EGC / UFSC
Programa de Computador int funcao (int time) { int temp1, temp2; if (time > 10) { temp1 = 3; } else { temp1 = 4; } temp2 = temp1 + 1 + 2; return (temp2); ( + 1 2 ( IF ( > TIME 10) 3 4)) EGC / UFSC
Operações genéticas Reprodução Mutação Recombinação (crossover) EGC / UFSC
Reprodução EGC / UFSC
Mutação EGC / UFSC
Recombinação - Crossover EGC / UFSC
Linguagem PUSH
Origem Projeto PUSH para computação evolucionária autônoma criada em 2001 por Lee Sperctor http://hampshire.edu/lspector/push.html EGC / UFSC
Mecanismos Evolucionários Sistemas reprodutivos são definidos por programadores Parâmetros pré-definidos para evolução Co-evolução biológica “não” possui mecanismos pré-estabelecidos EGC / UFSC
Mecanismos Evolucionários Sistema de evolução auto-construtivo Sistema computacional evolucionário que constrói adaptativamente seus próprios mecanismos de reprodução e diversificação enquanto está sendo executado EGC / UFSC
Sistema de evolução auto-construtivo Evolução de mecanismos melhores adaptados a uma classe de problemas que os projetados manualmente Modelo de evolução natural para pesquisa em evolução biológica e vida artificial EGC / UFSC
Vida Artificial Tierra Avida Amoeba Não evolui soluções computacionais Sem crossover Amoeba Necessita de muito poder computacional EGC / UFSC
Tierra Barras são os indivíduos que moram em espaço de memória EGC / UFSC
Tierra Visão de um indivíduo dentro do ambiente EGC / UFSC
AVida Cada cor representa um genótipo diferente EGC / UFSC
Amoeba a - amoeba / n - núcleo / f - comida / e - enzima / v - vacuole / nt - nutrientes / w - dejetos EGC / UFSC
Objetivos da Linguagem Push Expressividade Múltiplos tipos de dados Módulos Estruturas de controle complexas Auto-construção Manipular e produzir programas Uniformidade sintática EGC / UFSC
Características da linguagem Push derivada da linguagem Forth, baseada em pilhas para cada tipo de dados Instruções retiram argumentos de pilhas apropriadas e colocam de volta o resultados nessas pilhas Instruções que não possuem todos os dados (pilha vazia) para execução são descartadas EGC / UFSC
Características da linguagem Pilha integer Pilha float Pilha boolean Pilha CODE Pilha NAME Pilha type Pilha EXEC EGC / UFSC
Características da linguagem Seqüências completas de código podem ser movidas para pilha CODE - recursão Criação “on the fly” de programas Linguagem interpretada EGC / UFSC
Características da linguagem Exemplo de soma: (2 3 INTEGER.+) integer ... 2 3 ... 5 2 3 ... EGC / UFSC
Características da linguagem Outro Exemplo: (1 2 3.0 4.0 INTEGER.+ FLOAT.*) integer float ... 3 1 2 + ... 12.0 3.0 4.0 * ... EGC / UFSC
Estrutura de código Leitura da esquerda para direita (2 3 +) (( 2 3 ) +) (2 ((3)) (+)) 2 3 + EGC / UFSC
Tipo CODE Manipulação de listas como em LISP Recursão Modificação de código permite auto-modificação de programas Morfogênese e ontogênese EGC / UFSC
Tipo NAME Definição variável: Sub-rotinas ou estruturas de controle FLOAT 3.14 PI SET ;; variável PI DUP * PI GET * ;; executa PI * R^2 Sub-rotinas ou estruturas de controle ( FACTORIAL EXEC.DEFINE (CODE.QUOTE (INTEGER.POP 1) CODE.QUOTE (CODE.DUP 1 INTEGER.− FACTORIAL INTEGER.*) INTEGER.DUP 2 INTEGER.< CODE.IF)) 5 ;; entrada FACTORIAL ;; chamada EGC / UFSC
Tipo NAME (WHILE EXEC.DEFINE Laço do tipo WHILE: (BODY CODE.SET CONDITION CODE.SET ;; anexa argumentos BODY CODE.GET CONDITION CODE.GET ;; re-push argumentos para recursão BODY CODE.GET WHILE CODE.GET CODE.APPEND ;; push o corpo e faz chamada recursiva CODE.QUOTE (CODE.POP CODE.POP) ;; push o código para terminar CONDITION CODE.GET CODE.DO ;; executa condição CODE.IF) ) ;; finaliza apropriadamente 1 ; entrada CODE.QUOTE (INTEGER 2 *) ; corpo do laço CODE.QUOTE (INTEGER.DUP 50 < ) ; condição WHILE ; executa o laço while EGC / UFSC
PushGP Ambiente de programação genética Programas são selecionados para reprodução via torneio Em cada geração uma população é gerada por mutação, crossover e reprodução perfeita EGC / UFSC
PushGP População inicial gerada aleatoriamente Cada programa é avaliado por aptidão de acordo com o problema - fase de torneio Mutação dos pais Crossover dos pais Geração de uma nova população EGC / UFSC
Exemplo Regressão inteira EGC / UFSC
Evolução auto-construtiva Pushpop População de programas push Programas que se auto-modificam para gerar novos programas seleção natural / reprodução EGC / UFSC
Evolução auto-construtiva Produção de filhos Programas são responsáveis pela produção de seus próprios filhos Uso de pilha CHILD Evitar confusão com o processo de recursão da linguagem EGC / UFSC
Evolução auto-construtiva Seleção Filhos são produzidos durante a avaliação de fitness Via torneio Seleção aleatória de n indivíduos 1 filho é escolhido aleatoriamente dos n indivíduos EGC / UFSC
Evolução auto-construtiva Reprodução sexual Instruções especiais e pilha EXPRESSION Estratégias de seleção Baseada em genótipos Baseada em fenótipos Baseada por relacionamentos EGC / UFSC
Evolução auto-construtiva Diversidade Controle de diversidade por meio de restrições: Sintática Filhos diferentes dos pais População não pode ter programas idênticos Semântica Limite no número de filhos Variação no peso do fitness através da população EGC / UFSC
Evolução auto-construtiva Competência de reprodução Indivíduos capazes de fazer filhos diversos os quais eles próprios façam filhos diversos Seleção favorecerá a sobrevivência dos filhos de pais mais bem adaptados Aumentar a chance de instruções reprodutivas serem incorporadas ao filhos EGC / UFSC
Evolução auto-construtiva Exemplo em BREVE - http://www.spiderland.org/breve/ SwarmEvolve Experimento de emergência de comportamento coletivo em uma população de agentes voadores Comportamento determinado pela evolução de programas ao invés de uma equação de movimento controlado EGC / UFSC
SwarmEvolve 1.0 Três classes de agentes Vermelho, azul e púrpura Mais escuro menos energia Fontes de energia - para promover a “orientação por objetivo” Hexágono amarelo EGC / UFSC
SwarmEvolve 1.0 Comportamento emergente Formação de nuvens de uma mesma espécie - controle sobre a fonte de energia EGC / UFSC
SwarmEvolve 1.0 EGC / UFSC
SwarmEvolve 2.0 Sistema de evolução auto-construtivo Fontes de energia - esferas Agentes - programa Push Vetor de aceleração Cor do agente EGC / UFSC
SwarmEvolve 2.0 Cor do agente usada como mecanismo de “tags” Agentes mudam dinamicamente de cor EGC / UFSC
SwarmEvolve 2.0 Comportamento emergente Compartilhamento de energia entre agentes EGC / UFSC
SwarmEvolve 2.0 EGC / UFSC