Tenho muito interesse no estudo de computação evolutiva. Em meio a pesquisas e estudos encontrei o seguinte problema:
“Given the digits 0 through 9 and the operators +, -, * and /, find a sequence that will represent a given target number. The operators will be applied sequentially from left to right as you read.”
Uma explicação mais detalhada do problema pode ser encontrada em: http://www.ai-junkie.com/ga/intro/gat3.html
Mas resumindo…
Imagine que você queira encontrar um conjunto de operações aritméticas para se chegar ao número 10. Uma provável solução seria:
10/3+7
A expressão é lida da esquerda para a direita e operações de divisão consideram somente a parte inteira ignorando o resto. No exemplo 10/3=3. Portanto, 10/3+7 = 10.
Resolvi implementar uma solução para o problema em Ruby para praticar um pouco nesta linguagem que considero bastante interessante.
O código-fonte tem alguns comentários para ajudar na compressão da resolução do problema. Quem tiver mais familiaridade com outras linguagens, no site supra citado tem implementações em Java e Pascal.
A teoria envolvida em algoritmos genéticos é muito interessante e as suas aplicações abrangem inúmeras áreas do conhecimento.
Se você ficou curioso e deseja se aprofundar mais, seguem abaixo algumas sugestões de leitura:
Genetic Algorithms in Plain English
Introdução a algoritmos geneticos com applets Java
Boa leitura e até o próxima!
Download do código em Ruby: Implementação de um Algoritmo Genético em Ruby.
Obs: Renomear o arquivo para GA.rb e executar, por exemplo, assim: “%>ruby GA.rb 10″.
Fevereiro 3, 2008 às 10:58 pm |
Graande Robert!
Excelente artigo. Fiz alguns testes com o algorítimo e mais tarde devo examiná-lo juntamente com os documentos que vc disponibilizou.
Abracos,
Dante
Fevereiro 4, 2008 às 12:48 pm |
Valeu pela força meu amigo Dante!!!
Bons estudos e qualquer coisa estamos aí!!!
Um grande abraço,
Robert