Programación evolutiva

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 30 de mayo de 2014; las comprobaciones requieren 10 ediciones .

La programación evolutiva es uno de los cuatro paradigmas principales del algoritmo evolutivo. Esto es similar a la programación genética , pero la estructura del programa que se optimiza es fija y sus parámetros numéricos pueden cambiar.

Historia

La programación evolutiva fue inventada por el Dr. Lawrence J. Vogel en la Fundación Nacional de Ciencias en 1960. Recibió instrucciones de presentar un informe al Congreso de los Estados Unidos sobre el monto de la inversión en investigación básica. Uno de los temas en consideración fue la inteligencia artificial .

En ese momento, la inteligencia artificial se limitaba a dos áreas principales de investigación: modelar el cerebro humano ( redes neuronales ) y modelar la resolución de problemas del comportamiento humano ( programación heurística ). La alternativa imaginada por el Dr. Vogel fue abandonar el modelado del producto final de la evolución y más bien modelar el proceso de evolución usándose a sí mismo como un vehículo para producir un comportamiento inteligente (Vogel, 1962, 1963). Vogel ve la inteligencia como un componente de la capacidad de hacer predicciones sobre el entorno, además de traducir cada predicción en una respuesta adecuada a la luz de un objetivo determinado (por ejemplo, para maximizar la función de pago). Así, en su opinión, la previsión es una condición necesaria para un comportamiento razonable. El modelado de la evolución como optimización de procesos fue el resultado de la experiencia del Dr. Vogel en los nuevos campos de la "biotecnología", la cibernética y la ingeniería. El Dr. Vogel realizó una serie de experimentos en los que los autómatas representaban organismos individuales. Los autómatas son modelos gráficos que se utilizan para describir el comportamiento o el software y el hardware, razón por la cual llamó a su enfoque programación evolutiva.

El Dr. Vogel exploró las virtudes de la programación evolutiva después de su regreso a San Diego en julio de 1961 cuando abordó los problemas de identificación predictiva y control en una serie de estudios dirigidos entonces por Vogel y sus colegas, científicos líderes en el campo de la evolución. informática. En algunas descripciones tempranas de la programación evolutiva, Vogel afirmó incorrectamente que estaba limitada a un padre y un hijo.

En 1964, Vogel recibió su doctorado en ingeniería eléctrica de la Universidad de California, Los Ángeles. Su disertación, "Sobre el origen de la inteligencia", estuvo dedicada a la inteligencia artificial mediante la simulación de la evolución. Los primeros trabajos también llevaron al Dr. Vogel, al Dr. Al Owens y al Dr. Michael Walsh a crear soluciones para Science, Inc en 1965. Fue la primera empresa del mundo en comercializar exclusivamente algoritmos evolutivos .

En 1970, gracias principalmente a la orientación del profesor Donald Darholt de la Universidad Estatal de Nuevo México, se publicó un estudio más amplio de la computación para la programación evolutiva que para cualquier otra forma de evolución simulada. La mayoría de estos estudios han utilizado programas evolutivos para el reconocimiento de patrones (Root, 1970; Cornette, 1972; Lyle, 1972; Holmes, 1973; Trellue, 1973; Montes, 1974; Atmar, 1976; Vincent, 1976; Williams, 1977; Dearholt, 1976). Como ejemplo, la mayoría de los caracteres escritos a mano se utilizaron para el reconocimiento. Los experimentos incluyeron los parámetros de mutaciones adaptativas. El trabajo de Atmar (1976) es uno de los primeros ejemplos de simulación de la evolución en un entorno de vida artificial. Atmar (1976) puede haber sido el primero en proponer y describir cómo se podría calcular la programación evolutiva sobre lo que ahora se conoce como "base de hardware extendida". Angeline y Pollak (1993) describieron cómo se puede utilizar la programación evolutiva para desarrollar programas informáticos .

El sistema formula hipótesis sobre el tipo de dependencia de la variable objetivo con respecto a otras variables en forma de programas en algún lenguaje de programación interno. Si es un lenguaje universal, entonces teóricamente cualquier tipo de dependencia puede expresarse en él. El proceso de construcción de dichos programas se construye como una evolución en el mundo de los programas (este método es un poco como los algoritmos genéticos). Si el sistema encuentra un programa que exprese con precisión la dependencia requerida, comienza a hacerle pequeñas modificaciones y selecciona entre los programas hijo construidos de esta manera aquellos que aumentan la precisión. El sistema "cultiva" varias líneas genéticas de programas que compiten entre sí en la precisión de encontrar la dependencia requerida. Un módulo de traducción especial traduce las dependencias encontradas del lenguaje interno del sistema a un lenguaje fácil de usar ( fórmulas matemáticas , tablas, etc.), haciéndolos fácilmente accesibles. Para que los resultados sean más comprensibles para un no matemático, existe un gran arsenal de varias herramientas de visualización para las dependencias identificadas.

La búsqueda de la dependencia de las variables objetivo con respecto a otras se lleva a cabo en forma de funciones de cierto tipo. Por ejemplo, en uno de los algoritmos más exitosos de este tipo, el método de contabilidad grupal de argumentos ( MGUA ), la dependencia se busca en forma de polinomios. Además, los polinomios complejos se reemplazan por varios polinomios simples que tienen en cuenta solo algunas características (grupos de argumentos). Por lo general, se utilizan uniones de características por pares. Este método no tiene grandes ventajas sobre las redes neuronales con un conjunto listo para usar de funciones no lineales estándar, pero las fórmulas de dependencia obtenidas, en principio, pueden analizarse e interpretarse (aunque en la práctica todavía es difícil).

Programación evolutiva moderna

El estudio de la programación evolutiva continuó en la década de 1980 utilizando representaciones de datos arbitrarios y se aplicó a un problema de optimización generalizado. La programación evolutiva basada en variación aleatoria y selección se ha aplicado a estructuras como vectores reales (Vogel y Atmar, 1990; Vogel, 1990; Davis, 1994), permutaciones (Vogel, 1998), matrices (Vogel, 1993), vectores de longitud variable (Vogel, 1990), cadenas binarias (Vogel, 1989), etc. David Vogel (1988) introdujo una forma de torneo de selección para la programación evolutiva. Vogel (1991, 1992) también planteó la idea de cambios de parámetros autoadaptables, que contienen información sobre cómo resolver el problema, así como información sobre cómo crear descendencia.

Aplicaciones

La programación evolutiva se ha aplicado a varios problemas de ingeniería, incluidos el enrutamiento y la programación del tráfico (McDonnell 1997), los diseños farmacéuticos (Duncan y Olson 1996; Vogel 1996), la epidemiología (Vogel 1986), la detección del cáncer (Vogel 1997, 1998), la planificación militar (Vogel , 1993), sistemas de control (Chong, 1997), sistemas de identificación (Vogel, 1990), procesamiento de señales (Porto, 1990), energía (Lai Ma, 1996), aprendizaje de juegos (Vogel y Burgin, 1969), etc.

Literatura

Véase también