(por Esdras Soares)
INTRODUCAO
Este trabalho consiste
em gerar imagens a partir de uma arvore de expressoes combinada com outras
expressoes. A tecnica utilizada para isto sao os Algoritmos Geneticos.
As implementacoes
mais comuns de AG diferem deste trabalho basicamente na forma com eh feita
a selecao, que normalmente seria atraves de uma funcao analitica capaz
de medir a chance de sobrevivencia de um ser numa populacao (fitness).
Foi implementada uma selecao por percepcao visual, onde o usuario pode
escolher as imagens que tenham melhor estetica afim gerar uma nova populacao.
Uma interface contendo 25 imagens bem facil a manipulacao das imagens
(ver figura abaixo) :
GENOTIPO E FENOTIPO
A representacao do genotipo de uma imagem eh atraves de uma arvore de expressao. Por exemplo:
and{ *{x{}, y{}}, y{}} =
O fenotipo eh a avaliacao da expressao pixel a pixel (resolucao 128x128). O pseudo-codigo de geracao da imagem eh:
Loop Y (-1 to 1)
Loop X (-1 to 1)
Evaluate(X, Y) --> returns one pixel
SELECAO
Eh o processo pelo qual sao escolhidos os fenotipos mais adaptaveis, atraves de uma funcao "fitness". Esta funcao refelete a habilidade de um organismo sobreviver e, geralmente, eh dada por uma funcao definida explicitamente. No nosso caso a selecao eh feita por um observador.
REPRODUCAO
Ocorre
quando novos genotipos sao gerados a partir de genotipos pre-existentes.
A reproducao eh feita da seguinte maneira: dados dois genotipos representados
por suas respectivas arvores de expressoes, escolhemos um ramo aleatorio
do primeiro e o recolocamos em um ramo aleatorio do segundo, gerando
um filho. Observe o exemplo da figura abaixo:
MUTACAO
A fim de evoluir eh preciso que haja mutacoes nos novos genotipos com alguma frequencia que pode ser escolhida pelo ususario. Note que a mutacao eh probabilistica enquanto que a selecao eh deterministica. Observe no pseudo-codigo abaixo como pode ser implementado:
For each gi /*gene*/
If rand( .0 , 1.0 ) < m /*probabilidade de mutacao*/
then g'i = gi + rand(
-d, d )
clamp or wrap g'i to legal bounds.
else g'i = gi
FUNCOES INTRINSECAS NO GENOTIPO
O genotipo
devera conter um conjunto de funcoes que sao definidadas tomando zero ou
mais argumentos reais e retornando tambem valores reais.
A imagem esta definida sobre X e Y variando de -1 a 1. Logo abaixo
esta uma lista de funcoes implementadas e que podem estar inseridas em
qualquer genotipo:
GALERIA DE IMAGENS
Veja aqui algumas imagens geradas pelo programa.
TRABALHOS FUTUROS
Ao inves de fazer a selecao perceptualmente, podemos criar uma funcao que escolhera as imagens mais proximas de uma imagem alvo. Esta funcao pode ser desde uma soma dos quadrados da diferenca a uma analise de histogramas, o que daria resultados bem intessantes.
BIBLIOGRAFIA