Encontrei um ótimo artigo sobre um experimento feito com um pacote de software baseado na seleção natural (veja em Comparison of Discipulus™ Linear Genetic Programming Software with Support Vector machines, Classification Trees, Neural Networks and Human Experts, seção “Deriving Physical Laws”, de Larry M. Deschaine e Frank D. Francone).
No experimento foi entrado dados de uma equação da física bem conhecida e o computador, mimetizando a teoria evolucionista, chegou como resultado a exata equação original.
Abaixo segue uma livre tradução de um trecho desse artigo:
[...] Nós testamos o programa “Discipulus Lite” e “Standard” em inúmeros domínios de problemas durante a primeira fase de nossa investigação. A primeira fase cobriu cerca de dois anos e tem seus resultados descritos nas próximas três seções [...]
O interesse em LGP (linear genetic programming) da SAIC (Science Applications International Corporation’s) era inicialmente baseada na sua potencial habilidade de modelar relações físicas. Assim, seu primeiro teste foi se LGP pode modelar a bem conhecida (ao menos para engenheiros ambientais) lei de Darcy. Essa lei descreve o fluxo da água através de um meio poroso.
Q = fluxo [L3/T],
K = condutividade hidráulica [L/T],
I = gradiente [L/L], e
A = area [L2].
Foi então obtida uma massa de dados real, aplicando-se a lei de Darcy para produzir os resultados que serão usados como amostra.
A essa amostra foi também adicionado 10% de variação aleatória (para camuflar imprecisão) e o software LGP foi rodado em cima dessa nova massa de dados. Após o fim do processo, o melhor modelo gerado pelo sofware foi examinado.
A melhor solução que o software derivou da amostra foram as seguintes quatro instruções:
Q = 0.0
Q += I
Q *= K
Q *= A
Estas instruções são precisamente a lei de Darcy, representada na linguagem ANSI C.
No programa evoluído, Q é um acumulador e, além disso, o resultado final desse programa. [...]
A partir desse estudo empírico, a conclusão chegada por Deschaine e Francone foi que o pacote de software LGP consistentemente produziu excelentes resultados em problemas industriais difíceis, com pouca interferencia humana no algoritmo de aprendizado utilizado por ele.
Além disso, embora o pacote não tenha em geral produzido um melhor resultado que os outros algoritmos estudados (redes neurais, máquinas vetoriais etc), em todo problema analisado ele produziu um modelo que era pelo menos tão bom quanto qualquer outro método de análise numérica pesquisado por eles.
Outro ponto foi que o pacote produziu modelos robustos comparados a outros métodos de inteligencia artificial. LGP identificou quais eram os dados importantes em uma amostra e quais não eram, reduzindo o número de variaveis a serem monitoradas e permitindo uma melhor acertividade além de menor tempo de processamento.
Com base nessa idéia, pensei em testar o programa LGPTester em cima de uma amostra obtida a partir de um gerador de números pseudo-aleatórios, já que este tipo de dado decididamente possui uma função matemática por trás - sendo assim bem mais um exemplo de caoticidade (onde resultados mudam completamente de acordo com o ambiente inicial dado: no caso, a semente do gerador) do que de aleatoriedade propriamente dita.
No teste que realizei, o programa encontrou modelos que acertavam o dado Y da amostra entre 20 a 25% das vezes.
Embora eu não tenha feito uma análise mais adequada para verificar se 20% de acerto dentre uma amotra de 100 números “aleatórios” não se enquadra dentro do esperado pela “pura sorte” (isto é, por exemplo, tal qual duas pessoas dizendo 100 numeros em sequencia e descobrir que a chance de que certa quantidade desses números sejam idênticos esteja perto dos 20%), não há como negar que esse é um percentual interessante que nos leva a pensar se o modelo não está encontrando alguma relação escondida.
Relações escondidas dentro de geradores de números pseudo-aleatórios é um fato bastante conhecido na literatura, vide o caso da famosa congruencia linear, usada em muitas linguagens de programação, onde surgem padrões quando os dados são plotados em múltiplas dimensões, situação esta chamada de efeito Marsaglia em homenagem a quem a descobriu.
Testei também o programa com alguns dados da lotofácil – no caso, a primeira bola dos últimos 100 sorteios – e verifiquei que rapidamente o programa encontrou um modelo que apostava mais na bola “1″ do que em qualquer outra. O interessante é que estatísticamente essa bola sai em 60% dos sorteios da lotofácil.
Embora apostar na bola “1″ seja um fato fácil de um humano deduzir estatísticamente (veja mais detalhes aqui), o computador chegar a essa conclusão por si só, principalmente através da evolução de programas puramente aleatórios, é um fato intrigante.
Isso também demonstra que outras relações podem ser encontradas pelo programa, caso entremos com os dados certos e deixemos ele processar por tempo necessário.
Estou pensando agora em fazer uma versão em C, a fim de que rode mais rápido, e que use Threads para aproveitar máquinas bi-processadas.