sábado, 5 de julio de 2008

Computación Evolutiva

Desde los años 1930, algunos investigadores comenzaron a ver el proceso de evolución de las especies como un proceso de aprendizaje, mediante el cual la naturaleza dota a las especies de diferentes mecanismos, buscando hacerlas más aptas para sobrevivir. Partiendo de estos preceptos es posible desarrollar algoritmos que traten de resolver problemas de búsqueda y optimización guiados por el principio de la “supervivencia del más apto” que postulara Charles Darwin en su famosa y controversial “teoría de la evolución de las especies”. Dichos algoritmos son denominados algoritmos evolutivos y su estudio conforma la computación evolutiva. Bajo el término de computación evolutiva se engloba a un amplio conjunto de técnicas de resolución de problemas complejos basadas en la emulación de los procesos naturales de evolución. No es la primera vez que se hace uso de la emulación de procesos naturales para resolver problemas científicos y técnicos, los ejemplos más conocidos constituyen las redes neuronales para la resolución de problemas de aprendizaje artificial y el recocido simulado para resolver problemas de optimización que se plantean en las ciencias físicas.

El principal aporte de la computación evolutiva a la metodología de resolución de problemas consiste en el uso de mecanismos de selección de soluciones potenciales y de construcción de nuevos candidatos por recombinación de características de otros ya presentes, de modo parecido a como ocurre en la evolución de los organismos naturales. La computación evolutiva no trata tanto de reproducir ciertos fenómenos que suceden en la naturaleza como de aprovechar las ideas genéricas que hay detrás de ellos. Efectivamente, en el momento en que se tienen varios candidatos a solución para un problema surge inmediatamente la necesidad de establecer criterios de calidad y de selección, además de la idea de combinar características de buenas soluciones para obtener otras mejores. Dado que fue en el mundo natural donde primeramente se han planteado problemas de ese tipo, no tiene nada de extraño que al aplicar tales ideas en la resolución de problemas científicos y técnicos se obtengan procedimientos bastante parecidos a los ya encontrados por la naturaleza tras un largo periodo de adaptación.

La teoría evolutiva propuesta originalmente por Charles Darwin en combinación con el seleccionismo de August Weismann y la genética de Gregor Mendel, se conoce como el paradigma Neo-Darwiniano. El Neo-Darwinismo establece que la historia de la vasta mayoría de la vida en el planeta Tierra puede ser explicada a través de una serie de procesos estadísticos que actúan sobre y dentro de las poblaciones y especies: la reproducción, la mutación, la competencia y la selección. La reproducción es una propiedad obvia de todas las formas de vida del planeta Tierra, pues de no contar con un mecanismo de este tipo, la vida misma no tendría forma de producirse. En cualquier sistema que se reproduce a sí mismo continuamente y que está en constante equilibrio, la mutación está garantizada. El contar con una cantidad finita de espacio para albergar la vida en la Tierra garantiza la existencia de la competencia. La selección se vuelve la consecuencia natural del exceso de organismos que han llenado el espacio de recursos disponibles. La evolución es, por lo tanto, el resultado de estos procesos estocásticos fundamentales que interactúan entre sí en las poblaciones, generación tras generación.

El término “computación evolutiva” o “algoritmos evolutivos” engloba una serie de técnicas inspiradas en los principios de la teoría Neo-Darwiniana de la evolución natural. En términos generales, para simular el proceso evolutivo en una computadora se requiere: (1) Codificar las estructuras que se replicarán, o sea, una estructura de datos que se utilice para almacenar a un “individuo”. (2) Operaciones que afecten a los “individuos”, típicamente se utiliza apareamiento y mutación. (3) Una función de adaptabilidad que indique qué tan buena es una solución con respecto a las demás. (4) Un mecanismo de selección que implemente el principio de “supervivencia del más apto” de la teoría de Darwin.

El enfoque sub-simbólico de la inteligencia artificial se caracteriza por crear sistemas con capacidades de aprendizaje. Éste se puede obtener a nivel de individuo imitando el cerebro, a través de redes neuronales; o a nivel de especie imitando la evolución, lo que se ha denominado “computación evolutiva”, término relativamente nuevo que intenta agrupar un conjunto de paradigmas muy relacionados cuyas competencias no están aún muy definidas. Hasta hace poco era común hablar de algoritmos genéticos en general, en lugar de identificar diferentes tipos de computación evolutiva, ya que el resto de los algoritmos se pueden interpretar como variaciones o mejoras de los algoritmos genéticos más conocidos. En un algoritmo genético los elementos de las cadenas, los denominados genes, son típicamente bits, y en ciertos casos, valores numéricos o cadenas alfanuméricas. En la programación genética, los genes son instrucciones en un lenguaje de programación, y en las estrategias evolutivas, valores reales. Las estrategias evolutivas surgieron inicialmente para resolver problemas de optimización paramétrica; con el paso del tiempo fueron incorporando procedimientos propios de la computación evolutiva, con lo que han llegado a convertirse en una disciplina más. La agregación simulada se puede considerar como una simplificación de los algoritmos genéticos cuyo se encuentra en los procedimientos físicos de solidificación controlada. Los clasificadores genéticos solucionan problemas de reconocimiento de patrones mediante un entrenamiento basado en ejemplos, almacenando en las cadenas información que relacione los datos de entrada y la salida deseada.

Aunque hoy en día es cada vez más difícil distinguir las diferencias entre los distintos tipos de algoritmos evolutivos existentes, por razones sobre todo históricas, suele hablarse de tres paradigmas principales: (1) Programación Evolutiva. (2) Estrategias Evolutivas. (3) Algoritmos Genéticos. Cada uno de estos paradigmas se originó de manera independiente y con motivaciones muy distintas. La programación evolutiva nació en la década de 1960 y su creador fue Lawrence J. Fogel. El desarrollo de esta área comenzó como un esfuerzo encaminado a crear inteligencia artificial basada en la evolución de máquinas de estado finitas. Por su parte, las estrategias evolutivas fueron propuestas por Ingo Rechenberg y Hans-Paul Schwefel en la década de 1970. Su principal objetivo era la optimización de parámetros. A su vez los algoritmos genéticos fueron propuestos por John H. Holland en 1975 y su motivación inicial fue la de proponer un modelo general de proceso adaptable. En la naturaleza todos los seres vivos se enfrentan a problemas que deben resolver con éxito, como conseguir más luz del sol, o cazar una mosca. La computación evolutiva interpreta la naturaleza como una inmensa máquina de resolver problemas y trata de encontrar el origen de dicha potencialidad para utilizarla en los programas computacionales. Los algoritmos genéticos constituyen una de las más conocidas y originales técnicas de resolución de problemas dentro de lo que se ha definido como “computación evolutiva” o “algoritmos evolutivos”, término que agrupa a los algoritmos genéticos, las estrategias evolutivas y la programación evolutiva.

Es importante mencionar que la computación evolutiva, como disciplina de estudio, ha atraído la atención de un número cada vez mayor de investigadores de todo el mundo. Esta popularidad se debe, en gran medida, al enorme éxito que han tenido los algoritmos evolutivos en la solución de problemas del mundo real de gran complejidad. De tal forma, es de esperarse que en los años siguientes el uso de este tipo de técnicas prolifere aún más. Nótese, sin embargo, que es importante tener en mente que los algoritmos evolutivos son técnicas heurísticas. Por tanto, no garantizan que convergerán al óptimo de un problema dado, aunque en la práctica suelen aproximar razonablemente bien el óptimo de un problema en un tiempo promedio considerablemente menor que los algoritmos deterministas. Esta distinción es importante, pues el papel de las técnicas heurísticas es el de servir normalmente como último recurso para resolver un problema en el que los algoritmos convencionales no funcionan o tienen un costo computacional prohibitivo. Esto implica que antes de decidir recurrir a los algoritmos evolutivos, debe analizarse la factibilidad de utilizar otro tipo de técnicas. Este paso, que pudiese parecer obvio para muchos, en la práctica suele omitirse en muchos casos y de ahí que exista bastante escepticismo por parte de aquellos que acostumbran a trabajar únicamente con algoritmos deterministas. El uso apropiado y pertinente de los algoritmos evolutivos será sin duda la base de su futuro como alternativa para la solución de problemas complejos y de ahí que se enfatice su importancia.

Guillermo Choque Aspiazu
http://www.eldiario.net/
Junio 30 de 2008

No hay comentarios: