“En algunas ocasiones, aferrarnos a una zona conocida puede impedirnos adentrarnos en otros espacios de descubrimiento y evolución”. Mario Alonso Puig

La Habana, Cuba. – La computación evolutiva es una rama de la computación y la inteligencia artificial basada en los principios de selección natural descritos por Charles Darwin en su libro” El Origen de las Especies”. La misma comprende métodos de búsqueda y aprendizaje automático inspirados en los mecanismos de la evolución natural. Diversos enfoques a la computación evolutiva se han propuesto: las estrategias evolutivas, los algoritmos genéticos, la programación genética y los clasificadores genéticos entre otros. A esos métodos se les denomina de manera colectiva como algoritmos evolutivos, entre los cuales los más conocidos son los algoritmos genéticos. Algunas aplicaciones de la programación evolutiva son: predicción, generalización, juegos, control automático, problema del viajero, planeación de rutas, diseño y entrenamiento de redes neuronales, reconocimiento de patrones.

Se debe tomar, como referentes a los precursores de la computación evolutiva, los estudios realizados por Fraser en «Simulation of genetic systems by automatic digital computers” en la década comprendida entre los años 1950 y 1960, donde se dan los primeros pasos en cuanto a concepciones y ejecuciones sobre simulación computacional de sistemas genéticos, las que tuvieron un impacto considerable en los modelos de computación evolutiva.

Si bien es cierto que tanto Fraser y otros autores como Friedberg, contribuyeron al desarrollo y expansión de lo que hoy se conoce como computación evolutiva, no se puede obviar los aportes de quienes son el cimiento del movimiento de la computación evolutiva, el inglés Darwin con su principio de supervivencia o también conocida como la ley de los más fuertes, la teoría de la herencia propuesta por Mendel, y por último el evolucionismo de Weismann. Debido a lo anterior, se puede evidenciar como la computación evolutiva se inspira en la teoría biológica existente, gracias a eso, se puede observar que la mayoría de términos son comunes, como, por ejemplo: Cromosomas, alelos, mutación, gen, y otros.

Lawrence J. Fogel fue el primero en dar sus aportes a la programación evolutiva en la década de 1960, Lawrence dirigió sus estudios a crear inteligencia artificial en máquinas de estado finitas, por otra parte, las estrategias evolutivas propuestas por Rechenberg y Schwefel en la década de 1970 tuvo cono eje la optimización de parámetros y por último, los algoritmos genéticos propuestos por Holland en 1975 proponen un modelo general de proceso adaptable. Veamos algunas particularidades:

Programación evolutiva

La programación evolutiva, también conocida como algoritmos evolutivos, son métodos de optimización que parten de un arreglo de datos para representar diversas soluciones a un determinado problema, para realizar esto, la programación evolutiva utiliza operadores basados en la teoría de Charles Darwin, entre las cuales se puede mencionar, la recombinación, cruce, selección del más apto, mutaciones, y otras.

Estrategias evolutivas

Fueron propuestas por Rechenberg y Schwefel quienes las modelaron tal y como se conocen en la actualidad. Al igual que las demás técnicas de computación evolutiva, esta se basa en el principio evolutivo o teoría de la evolución de Charles Darwin evolutiva. Como característica principal, las estrategias evolutivas tienen la capacidad de auto adaptación.

Algoritmos genéticos

Los algoritmos genéticos fueron creados por Holland y los definió como procedimientos del tipo adaptativo empleados para la búsqueda de soluciones en espacios complejos (resolución de problemas complejos), se basan al igual que las otras técnicas de computación evolutiva en la teoría evolutiva de Darwin, trata de emular los conceptos y procesos genéticos naturales. En los algoritmos evolutivos existe al igual que en la naturaleza un proceso de competencia, basado en la supervivencia del más fuerte, ese proceso se denomina mecanismos de selección, el cual emplea esas adaptaciones para determinar los cromosomas de los nuevos individuos. Los algoritmos genéticos emplean operadores genéticos llamados también cruce o crossover y mutación. Un algoritmo genético se puede describir de la siguiente forma: En primera instancia se debe representar las soluciones, una vez representadas se emplea el mecanismo de selección para su reproducción, realizado lo anterior se aplican los operadores genéticos de cruce y de mutación.

Todas las técnicas de programación evolutiva son muy parecidas como se puede apreciar. Un algoritmo evolutivo es una técnica de resolución de problemas inspirada en la evolución de los seres vivos. En este tipo de algoritmo se define una estructura de datos que admita todas las posibles soluciones a un problema, unas serán mejores y otras peores. Solucionar el problema consistirá en encontrar la solución óptima y, por tanto, los algoritmos evolutivos son en realidad un método de búsqueda. Pero un método de búsqueda muy especial, en el que las soluciones al problema son capaces de reproducirse entre sí, combinando sus características y generando nuevas soluciones. En cada ciclo se seleccionan las soluciones que más se acercan al objetivo buscado, eliminando el resto. Ese proceso permitirá de vez en cuando alguna mutación o modificación al azar durante la reproducción. Veamos a continuación esos métodos con más detalle.

La programación genética consiste en la evolución automática de programas usando ideas basadas en la selección natural. No solo se ha utilizado para generar programas, sino también para cualquier otro tipo de soluciones cuya estructura sea similar a la de un programa. Por ejemplo, fórmulas matemáticas, circuitos electrónicos. La programación genética es un paradigma de computación evolutiva para encontrar programas que realicen una tarea definida por un usuario. Se trata de una especialización de los algoritmos genéticos donde cada individuo es un programa. Por tanto, se puede considerar una técnica de aprendizaje automático usada para optimizar una población de programas según una heurística definida en función de la capacidad del programa para realizar una determinada tarea computacional, definida por el usuario.

La evolución se produce en la naturaleza gracias a que: Existe reproducción entre individuos de una población; Las características de los individuos afectan su probabilidad de supervivencia; Existe herencia y Existen recursos finitos, que ocasionan competencia. En programación genética se busca que poblaciones de programas evolucionen, transmitiendo su herencia de manera que se adapten mejor al medio. Los mejores individuos tienen mayores probabilidades de reproducirse. La medida de calidad del individuo dependerá del tipo de problema.

Analogías entre la evolución natural y los algoritmos evolutivos

Naturaleza Algoritmos Evolutivos
Individuo Solución al problema
Población Conjunto de soluciones
Adecuación Calidad de la solución
Cromosoma Representación o codificación de una solución
Gen Parte o componente de la representación de una solución
Mutación y recombinación Operadores de búsqueda
Selección natural Preservación o re-utilización de buenas soluciones (o sus componentes)

La computación evolutiva constituye una de las áreas más activas de la llamada “inteligencia computacional”, que agrupa además a las redes neuronales y los sistemas difusos. Esas técnicas han logrado un gran número de aplicaciones exitosas en la industria. Los algoritmos evolutivos también han sido utilizados como herramientas de modelaje y resolución de problemas en las ciencias naturales.

Las principales áreas de aplicación sobre las cuales se han desarrollado e implementado trabajos basados en la computación evolutiva son: Acústica, ingeniería aeroespacial, ingeniería eléctrica, ingeniería de materiales, química, mercados financieros, juegos, geofísica, matemática y algoritmia, aprendizaje automático y estrategias de control, entre otras.

En la disciplina de la computación evolutiva y sus paradigmas queda aún mucho campo de investigación y aplicación. El desarrollo de sistemas capaces de ir aprendiendo a conseguir mejores resultados, el desarrollo de aplicaciones de búsqueda y optimización de trayectorias orientadas a la robótica, particularmente a la planificación de trayectorias de robots móviles autónomos buscando asemejar aún más el comportamiento humano, el habla, el movimiento y la capacidad de aprendizaje o altos volúmenes de procesamiento y hasta quizás algo de raciocinio. La robustez de los algoritmos evolutivos se hace notar por ser métodos que no requieren información. En los últimos años se ha visto que los proyectos orientados e inspirados en modelos biológicos han ido en aumento y con resultado de éxito en sus aplicaciones, es así como cada vez toman más fuerza términos como algoritmos bioinspirados.

Es tan grande el campo de acción que puede abarcar la computación evolutiva que se hablan incluso de algoritmos culturales, estos consisten en preservar las creencias que son aceptadas socialmente y descartar la que no lo son. Esa teoría nace alrededor de los años 90 y fue propuesta por sociólogos, lo que plantean que la cultura puede modificarse de forma simbólica y transmitida dentro de una población y entre ellas. Uno de los más populares y cuyo campo de acción aún es amplio es la colonia de hormigas, esa técnica combinada con algoritmos evolutivos es aplicada con éxito en campos de resolución de problemas de diseño en ingeniería, optimización, combinatoria, optimización no lineal, esta es otra técnica basada en comportamientos sociales, al igual que la optimización de enjambres de partículas.

En cuanto al paradigma de estrategias evolutivas, un campo en el cual queda mucho por realizar es la asignación de parámetros auto-adaptativos, ya que han sido poco estudiadas por los investigadores debido a su complejidad, esa estrategia ha demostrado un alto potencial en la búsqueda de mejorar el desempeño de un algoritmo evolutivo En concreto, la computación evolutiva en la actualidad trabaja en extender sus fundamentos a partir del conocimiento biológico realizando desarrollos e innovaciones en: estrategias de la genética molecular, modelando sistemas de desarrollo embrionario, analizando la evolución de la complejidad de los organismos. Como se puede vislumbrar, la computación evolutiva es y será una disciplina con líneas de investigación que exigen alta capacidad de abstracción y multidisciplinariedad y transdisciplinariedad, para dejar por sentado una vez más, la sabiduría de la madre naturaleza.

Como se habrá podido dar cuenta el lector, he hablado de un campo que está en la cresta d la ola del desarrollo tecnológico, por lo tanto, todos estamos en la línea de arrancada y tenemos las mismas posibilidades, el talento y la disposición determinan. Una de las grandes ventajas de la industria del software es que la materia prima es nuestra materia gris, y esto me trae una frase famosa de un gran amigo, el recurso más importante de Cuba, es el cubano con conocimiento, por lo tanto, manos a la obra.