Desde mediados de los años cincuenta existen evidencias del uso de ordenadores para, entre otras tareas, avanzar en la comprensión del proceso de la evolución natural [Von Neumman 56]. Uno de los primeros trabajos que utiliza un proceso evolutivo para la resolución de problemas en computadores es el de Friedberg [Friedberg 58, Friedberg et al. 59]. Estos artículos representan los primeros resultados en aprendizaje automático describiendo la utilización de un algoritmo evolutivo. El objetivo era encontrar un
programa que calculara una función de entrada-salida. También el artículo de Fraser [Fraser 57] sirvió de influencia en los primeros trabajos en esta área.
En esta misma época se presentaron los primeros intentos de aplicar evolución simulada a problemas de optimización numérica [Bremermann 62]. Posteriormente, también comenzó el desarrollo de la teoría de los algoritmos evolutivos, demostrando que la relación óptima de mutación para problemas linealmente separables debería tener el valor 1/m, donde m representa el número de bits que codifica cada individuo [Bremermann 65].
Durante este periodo se desarrollaron las ideas de la operación evolutiva (EVolutionary OPeration - EVOP) que utilizaba una técnica evolutiva para el diseño y el análisis de experimentos industriales [Box 57, Box y Draper 69]. Estas ideas no fueron nunca implementadas en un computador, aunque fueron usadas para el desarrollo del método denominado diseño simplex[Spendley et al. 62].
Como suele suceder con el comienzo de cualquier campo nuevo de estudio, estos inicios se veían con un alto grado de escepticismo. Sin embargo, a mediados de los años sesenta ya estaban establecidas las bases de lo que hoy son las tres ramas principales de la computación evolutiva. Así los trabajos de Fogel [Fogel et al. 66] en San Diego, California, se desarrollaron en el campo de la Programación Genética (PG). Por otra parte, se desarrollan los algoritmos genéticos por Holland [Holland 69] en la Universidad de Michigan, y las estrategias evolutivas (EE) en la Universidad de Berlín [Rechenberg 65].
Durante los siguientes veinticinco años, cada una de estas ramas se desarrolló de una forma bastante independiente, pero con rutas paralelas. Fue en el año 1991 cuando se hizo un esfuerzo por acercar a los distintos investigadores que trabajaban en CE. Para ello tuvo lugar la celebración del Workshop on Paralell Problem Solving from Nature en Dortmund, donde realmente se acuñó el nombre de Computación Evolutiva [Schwefel y Männer 91] para englobar las tres técnicas empleadas para simular los distintos aspectos de la evolución: los algoritmos genéticos, las estrategias evolutivas y la programación genética. Todas ellas tienen en común que utilizan la reproducción, el azar, la competición y la selección de los individuos de la población. Así, en cualquiera de estas técnicas evolutivas están presentes las ideas de la esencia de la evolución,
presuponiendo que, tanto en la naturaleza como en la informática, la evolución es la mejor herramienta de optimización [Atmar 76].
Desde un primer momento, las ideas de la CE se orientan hacia cuatro objetivos:
Optimización. La evolución en sí es un proceso de optimización [Mayr 88] en el que se busca adaptar, lo mejor posible, los individuos al entorno en el que habitan. Darwin [Darwin 59] estudió, sorprendido, la extrema perfección que ciertos órganos habían alcanzado mediante la evolución, como por ejemplo, los ojos. Sin embargo, optimización no significa perfección. La evolución descubre soluciones funcionales altamente precisas para problemas concretos que se dan en el medio ambiente de un determinado individuo. Debido a esto, ya desde un primer momento se pensó en su utilización para resolver problemas de optimización en ingeniería. Las técnicas clásicas utilizadas en esta área, como el descenso del gradiente, el high climbing, o las puramente aleatorias, habían sido claramente inadecuadas al enfrentarse a problemas de optimización no lineales, especialmente aquellos que contenían una componente estocástica, temporal o de caos. Todas estas ideas fueron claves para el desarrollo de las EE [Rechenberg 94, Schwefel 95].
Sistemas robustos. Los problemas del mundo real casi nunca son estáticos y los problemas de optimización temporal son cada vez más comunes. Estas circunstancias requieren un cambio en la estrategia que se aplica para resolver el problema. En estos casos, la realimentación sobre el éxito o el fracaso de la estrategia actual es fundamental. Holland [Holland 75], utilizando algoritmos genéticos, describe un procedimiento que puede hacer evolucionar estrategias, como cadenas codificadas de números o como bases de reglas llamadas sistemas clasificadores. El resultado es un procedimiento robusto que tiene la capacidad de ajustar el rendimiento basándose en la realimentación de la salida del sistema. Inteligencia artificial. Como se puede comprobar, la evolución ha creado
especies con una inteligencia cada vez más desarrollada. Por tanto, la forma de conseguir inteligencia artificial, además de las alternativas clásicas que persiguen la emulación de la inteligencia humana, ya sea mediante la emulación de las estructuras biológicas del sistema nervioso o mediante la emulación del comportamiento, tiene una nueva posibilidad: simular la evolución para construir
algoritmos predictivos. Esta es la base de las investigaciones en CE [Fogel 62, Fogel et al. 66].
Vida artificial. En el campo de la biología, más que utilizar la evolución como una herramienta, se intenta capturar la esencia de la propia evolución en una simulación por computador y usar entonces esta simulación para conseguir una nueva información sobre la física de los procesos de la evolución natural [Ray 91]. El éxito en este campo abre la posibilidad de estudiar sistemas biológicos alternativos de cómo puede ser la vida en otros lugares y averiguar qué características pueden tener en común con la de La Tierra [Langton 87]. Aunque cada modelo es incompleto y las características que tiene la vida en otros lugares del universo es pura especulación, las simulaciones de vida por ordenador, denominadas genéricamente vida artificial, ya han conseguido generar algunos patrones que se corresponden con fenómenos que normalmente ocurren en la vida en La Tierra.
Una vez vistas las distintas ramas de aplicación de la CE, la cuestión que se plantea ahora es por qué simular los procesos de la evolución. Una respuesta podría ser que en estos momentos no se dispone de mejores alternativas. Normalmente, no se pueden utilizar eficientemente las técnicas clásicas de optimización para encontrar un máximo global en una función si está rodeado de máximos locales. Las técnicas desarrolladas hasta ahora para emular la inteligencia humana no son suficientemente adaptables a los dominios cambiantes, ya que no son suficientemente capaces de predecir ni de anticipar sus acciones. Tampoco se puede visitar un nuevo mundo, enviarle los compuestos químicos primigenios que dan lugar a la vida y esperar millones de años para ver qué tipo de vida se desarrolla allí. En contraste, los métodos de computación evolutiva ofrecen posibles soluciones a estos problemas basándose en la utilización dirigida del azar y la incertidumbre.
De acuerdo con el teorema de No-Free-Lunch (NFL) [Wolpert y Macready 96], no puede existir ningún algoritmo que resuelva todos los problemas (por ejemplo de optimización) que sea, en general, superior a cualquier otro. Por tanto, en principio, la cuestión de si los algoritmos evolutivos son superiores o inferiores a cualquier otra aproximación no tiene sentido. Sin embargo, es posible afirmar que los algoritmos
evolutivos se comportan mejor que otros métodos con respecto a problemas específicos y, como consecuencia, se comportarán peor con respecto a otras clases de problemas. El teorema NFL puede corroborar que, en el caso de los algoritmos evolutivos frente a otros métodos clásicos de optimización, son más eficientes resolviendo problemas discontinuos, no diferenciables, multimodales, con ruido y cualquier tipo de superficies de búsqueda no convencionales. Por el contrario, su efectividad disminuye al afrontar problemas más simples para los que se han desarrollado algoritmos específicos para su resolución.
Por tanto, en principio, y mientras no se desarrolle un método específico de resolución del problema que tenga en cuenta ciertas propiedades del mismo que lo haga más eficiente, parecen claras las ventajas de la utilización de algoritmos no especializados y robustos como los algoritmos evolutivos.