Los primeros ejemplos de
algoritmos genéticos aparecieron a
finales de los 50 y principios de los 60,
programados en computadoras por biólogos evolutivos que buscaban realizar
modelos de aspectos de la evolución natural. A ninguno de ellos se le ocurrió
que esta estrategia podría aplicarse a problemas artificiales, pero ese
reconocimiento no tardaría en llegar. En 1962, investigadores como G.E.P. Box, G.J.
Friedman, W.W. Bledsoe y H.J.
Bremermann habían desarrollado
independientemente algoritmos inspirados en la evolución para optimización de
funciones y aprendizaje automático, pero sus trabajos generaron poca reacción. En 1965
surgió un desarrollo más exitoso, cuando Ingo Rechenberg introdujo una
técnica que llamó estrategia evolutiva.
En esta técnica no había población ni
cruzamiento; un padre mutaba para producir un descendiente, y se conservaba
el mejor de los dos, convirtiéndose en el padre de la siguiente ronda de
mutación (Haupt y Haupt 1998). Versiones posteriores introdujeron la idea de
población.
El siguiente desarrollo importante se
produjo en 1966, cuando L.J. Fogel, A.J. Owens y M.J. Walsh introdujeron en América
una técnica que llamaron programación evolutiva. En este método,
las soluciones candidatas para los problemas se representaban como máquinas
de estado finito sencillas; al igual que en la estrategia evolutiva de
Rechenberg, su algoritmo funcionaba
mutando aleatoriamente una de estas
máquinas simuladas y conservando la mejor de las dos (Mitchell 1996; Goldberg
1989). También al igual que las estrategias evolutivas, hoy en día existe
una formulación más amplia de la técnica de programación evolutiva que
todavía es un área de investigación en curso. Sin embargo, lo que todavía faltaba
en estas dos metodologías era el reconocimiento de la importancia del
cruzamiento.
Fue a principios de los 60, en la
Universidad de Michigan en Ann Arbor, donde, dentro del grupo Logic of Computers, las ideas de Holland
empezaron a desarrollarse y a dar frutos. Y fue con
“La teoría genética de la selección natural” escrito por R. A. Fisher, donde
aprendió que la evolución era una forma de adaptación más potente que el simple
aprendizaje, y tomó la decisión de
aplicar estas ideas para desarrollar
programas bien adaptados para un fin determinado. Cuando Holland se enfrentó a los
algoritmos genéticos, los objetivos de su investigación fueron dos:
• Imitar los procesos adaptativos de los
sistemas naturales.
• Diseñar sistemas artificiales
(normalmente programas) que retengan los mecanismos importantes de los sistemas
naturales.
En 1975, Holland publico su libro
“Adaptación en Sistemas Naturales y Artificiales”. Basado en investigaciones y
artículos anteriores del propio Holland y de colegas de la Universidad de
Michigan, donde presentó sistemática y rigurosamente el concepto de sistemas
digitales adaptativos utilizando la mutación, la selección y el cruzamiento,
simulando el proceso de la evolución biológica como estrategia para
resolver problemas. Ese mismo año, la importante tesis de
Kenneth De Jong estableció el potencial de los AGs demostrando que podían
desenvolverse bien en una gran variedad de funciones de prueba (Goldberg 1989).
En la década de los 80, los algoritmos
genéticos se estaban aplicando en una amplia variedad de áreas, desde problemas
matemáticos abstractos hasta asuntos tangibles de ingeniería como el
control de flujo en una línea de ensamble, reconocimiento y clasificación
de patrones y optimización estructural (Goldberg 1989).
Al principio, estas aplicaciones eran
teóricas. Sin embargo, al seguir incrementando la investigación, los
algoritmos genéticos migraron hacia el sector comercial, al cobrar importancia
con el crecimiento exponencial de la potencia de computación y el desarrollo de
Internet. Y en el corazón de todo esto se halla nada más que la simple y
poderosa idea de Charles Darwin mencionada al principio: que el azar en la
variación, junto con la ley de la selección, es una técnica de resolución de
problemas de inmenso poder y de aplicación casi ilimitada.