Visualización de algoritmos bioinspirados y evolutivos
A menudo es dificil tener una buena visualización de la evolución de un algoritmo evolutivo, debido a la gran cantidad de datos que se manejan en cada evolución.
Normalmente estos algoritmos trabajan con vectores solución n-dimensionales, a partir de 3 dimensiones su representación espacial se hace imposible, entonces ¿Como vemos la evolución espacial de un algoritmo n-dimensional?, hay posibles representaciones gráficas que nos posibilitan esto.
La opción más adecuada es representar el valor de cada dimen
sión por separado, de forma que cada dimensión toma valores en una línea, y todas las líneas son paralelas. Así podríamos unir todos los puntos y obtener una figura gráfica que no ayuda a ver el estado de una solución. En esta imagen podemos ver la representación de varias soluciones que evolucionan en paralelo, cada solución es una línea y cada punto por los que pasa esa línea es el valor de la solución en esa dimensión.
Así que para poder ver una evolución de nuestro algoritmo, necesitamos un elemento software que vaya extrayendo datos del algoritmo, para después poder procesar esos datos y generar estos gráficos tan ilustrativos.
Y como siempre surge otra pregunta, ¿esto lo habrá echo alguién para que yo lo pueda usar?, pues la respuesta es que seguro que sí, hay muchas opciones disponibles. Yo os voy a proponer la que implementé cuando me hizo falta.
Al elemento software que extrae datos del algoritmo, lo llamé Trazador, y simplemente hay que utilizar ese objeto cada vez que la población se modifique. Ese elemento lo hice en C++ como un objeto y en C como un par de funciones (si quereis os lo paso), pero lo interesante no es esa implementación, ya que cada uno puede programar en el lenguaje que quiera y entonces ya no le valdría nada de lo que digo. Lo interesante es el formato de los datos que hay que generar, así que cada cual introduzca el elemento software que crea que encaja mejor en su aplicación, y mientras que se preocupe de que la salida esté en el formato adecuado, podrá usar la herramienta de análisis de datos para generar gráficos, evoluciones, vídeos de evolucion,...
El formato de salida es un formato XML, así hacemos que sea más estandar y más facil de conocer por todos. De forma que tenemos un programa que genera una salida en cierto formato XML.
La herramienta de análisis de datos necesita ese XML, y una vez se lo introducimos tenemos varias posibilidades de ver los datos. La interfaz es muy cómoda como podeis ver en la captura de pantalla.
Permite visualizar soluciones, evoluciones, ver gráficos de evolución, incluso si generamos con cierto conocimiento el XML podemos obtener representaciones de la solución mucho más útiles, por ejemplo si estamos haciendo un viajante de comercio, simplemente jugando con el XML podemos conseguir que nos genere la representación espacial de esa solución, como podeis ver en la figura.
La aplicación también permite ver gráficas de evolución multiobjetivo entre otras muchas cosas.
Os pongo algunos ejemplos de visualización, todos tienen algo interesante que los diferencia:
Video 1: Problema "Viajante de Comercio", lo soluciona un algoritmo bioinspirado en una colonia de hormigas, el video muestra la evolución de la feromona que depositan las hormigas en el camino, este vídeo es muy curioso.
Video 2: Problema "Optimización funcional", lo soluciona un algoritmo genético, en el vídeo podemos ver la evolución paralela de toda la población.
Video 3: Problema "Optimización funcional", lo soluciona un algoritmo basado en una colonia de aves, en el vídeo podemos ver la evolución paralela de toda la población.
Video 4: Problema "Optimización funcional multiobjetivo", lo soluciona un algoritmo multiobjetivo, en el vídeo podemos ver la evolución paralela de toda la población desde el punto de vista del Pareto.
Por último decir que si alguien necesita o le viene bien tener esta aplicación y cómo usarla, que no dude en pedirla y se la doy sin problema alguno
Jose Carlos Calvo Tudela
