Algoritmo genético em Ruby

By ranophoenix

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″.

2 Respostas para “Algoritmo genético em Ruby”

  1. dante regis Disse:

    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

  2. ranophoenix Disse:

    Valeu pela força meu amigo Dante!!!

    Bons estudos e qualquer coisa estamos aí!!! ;)

    Um grande abraço,

    Robert

Deixe uma resposta