next up previous contents
Next: Tercera generación Up: Evolución de la informática Previous: Primera generación   Índice General

Segunda generación

El primer uso de procedimientos evolutivos en computación se debe a Reed, Toombs y Baricelli [#!Baricelli67!#], que trataron de hacer evolucionar un tahúr que jugaba a un juego de cartas simplificado. Las estrategias de juego consistían en una serie de 4 probabilidades de apuesta alta o baja con una mano alta o baja, con cuatro parámetros de mutación asociados. Se mantenía una población de 50 individuos, y aparte de la mutación, había intercambio de probabilidades entre dos padres. Es de suponer que los perdedores se eliminaban de la población (tirándolos por la borda). Aparte de, probablemente, crear buenas estrategias, llegaron a la conclusión de que el entrecruzamiento no aportaba mucho a la búsqueda.

Los algoritmos genéticos (AG) [#!Holland75!#,#!Goldberg89!#,#!Davis91!#] fueron ideados por John Holland en los '60 y desarrollados e investigados por Holland y sus colegas de la Universidad de Michigan en los '60 y '70. En contraste con lo que otros investigadores intentaban, Holland no pretendía resolver problemas específicos, sino estudiar formalmente el fenómeno de la adaptación tal y como ocurre en la naturaleza, y desarrollar métodos para aplicar los mecanismos de la adaptación natural a sistemas de computadores. Holland, en su libro ``Adaptation in natural and Artificial systems'' [#!Holland75!#] presentó el algoritmo genético como una abstracción de la evolución biológica y dio los principios teóricos para la adaptación con algoritmos genéticos.

Más o menos a mediados de los años 60, Rechenberg [#!Rechenberg65!#,#!Rechenberg73!#] y Schwefel [#!Schwefel75!#,#!Schwefel77!#] describieron las estrategias de evolución (EE) [#!Schwefel95!#,#!Back96!#]. Las estrategias de evolución son métodos paramétricos de optimización, que trabajan con poblaciones de cromosomas compuestos por números reales. Hay diversos tipos de estrategias de evolución, que se verán más adelante. En la más común, se crean nuevos individuos de la población añadiendo un vector mutación a los cromosomas existentes en la población; en cada generación, se elimina un porcentaje de la población, y los restantes generan la población total, mediante mutación y cruce. La magnitud del vector mutación se calcula adaptativamente. Una revisión sobre las estrategias evolutivas se puede encontrar en Bäck, Hoffmeister y Schwefel [#!Schwefel91!#].

A partir de los años 60 se han desarrollado algoritmos o métodos que podríamos llamar evolutivos modernos, y se han seguido investigando hasta nuestros días. Algunos de ellos son simultáneos a los algoritmos genéticos, pero se desarrollaron independientemente sin conocimiento unos de otros. Uno de ellos, la programación evolutiva (PE) de Fogel, Owens y Walsh [#!Walsh66!#,#!Fogel95b!#], se inició como un intento de usar la evolución para crear máquinas inteligentes, que pudieran prever su entorno y reaccionar adecuadamente a él. Para simular una máquina pensante, se utilizó un autómata celular. Un autómata celular es un conjunto de estados y reglas de transición entre ellos, de forma que, al recibir una entrada, cambia o no de estado y produce una salida.

Fogel trataba de hacer aprender a estos autómatas a encontrar regularidades en los símbolos que se le iban enviando. Como método de aprendizaje usó un algoritmo evolutivo: una población de diferentes autómatas competía para hallar la mejor solución, es decir, predecir cual iba a ser el siguiente símbolo de la secuencia con un mínimo de errores; los peores $50\%$ eran eliminados cada generación, y sustituidos por otros autómatas resultantes de una mutación de los existentes.

De esta forma, se lograron hacer evolucionar autómatas que predecían algunos números primos (por ejemplo, uno de ellos, cuando se le daban los números más altos, respondía siempre que no era primo; la mayoría de los números mayores de 100 son no primos). En cualquier caso, estos primeros experimentos demostraron el potencial de la evolución como método de búsqueda de soluciones novedosas.

Finalmente, la programación genética (PG) [#!Koza92!#] se basa en la evolución de programas. Normalmente la representación usada sigue la sintaxis de programas en LISP, que esencialmente son árboles cuyos nodos internos son operadores y los externos operandos. Este tipo de estructura de datos requiere el uso de operadores de mutación y cruce específicos.


next up previous contents
Next: Tercera generación Up: Evolución de la informática Previous: Primera generación   Índice General
Francisco Javier Garcia Castellano
2000-12-14