Share via


Goto Algoritmos Genéticos

De tempos em tempos tenho uma recaída e me assusto com o grau de experimentações que são feitas na nossa área.

Templates em C++ é um bom exemplo. É poderoso, mas não é elegante. Difícil de depurar, ele parece não ter tido nenhum modelo de tipos, formal ou não, para auxiliá-lo.

Outro exemplo: AspectJ. Da primeira vez que eu vi AspectJ fiquei assustado. De imediato me veio à lembrança do comando “come from”. Muito antigamente, numa revista chamada Datamation, o autor (Lawrence Clark) escreveu um artigo piorando ainda mais o famoso “goto” tão criticado pelo Dijkstra. Parecia impossível piorar um “goto”, mas ele conseguiu. AspectJ recolocou o comando “come from” no centro da linguagem, fazendo disto a sua virtude. Uma vez me mandaram um link para um artigo de um autor que teve a mesma impressão que a minha... pena que perdi L

Há alguns anos venho seguindo alguns experimentos mais radicais: algoritmos genéticos. São algoritmos baseados no processo de gerar um conjunto de soluções aleatórias, escolher um subconjunto com as “melhores” soluções e, a partir desta geração, criar outra através de operações que misturam partes das soluções maternas (crossover) ou que modificam alguns de seu dados para gerar outros. Darwinismo puro. Ao final de algumas (ou várias) gerações, chegamos a um resultado ótimo ou sub-ótimo. É impressionante como traz bons resultados.

Vi esta semana no channel 9 que este será o algoritmo usado para escolher salas e tracks da conferência chamada PDC que vai acontecer em outubro nos EUA. Daí as lembranças para este blog e uma recomendação final: para quem não conhece os algoritmos genéticos, sugiro a leitura do livro “How to solve it: Modern Heuritics”. É um livro simples de ler e muito interessante.