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 dimensió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
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 dimensió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
Cojones, que puta maravilla de aplicación!
ResponderEliminarYo el otro día avancé mucho en algoritmos basados en hormigas. Descubrí que se dice "feromona" y no "feronoma".
Buena idea la de implementar un trazador. Salvando las distancias, yo en las prácticas de Algorítmica me creé una clase Estadistica de la que heredaban todos los algoritmos para llevar contabilidad.
ResponderEliminarReconozco que lo de procesarlo en un software aparte para ver la evolución gráficamente es mucho, mucho mejor. Supongo que gracias a esto estudiar la convergencia será más sencillo.
Un saludo.
Y tanto más sencillo!!!, la aplicación te permitía representar el típico gráfico en el que en el eje y tienes la calidad de la mejor solución y en el x el tiempo, es decir, una gráfica de evolución, y ademñas podías meter en la mismo sitio cuantas gráficas de evolucion quisieses, sin más que arrastrar desde la barra de las ejecuciones hacia el panel de gráficas. Así podía tener en unos segundos gráficas comparativas de diferentes algoritmos, o de diferentes ejecuciones de un algoritmo.
ResponderEliminarLa verdad es que daba mucho juego. Lo bueno del trazador en lugar de la herencia que propones es lo siguiente, puedes tener un trazador en c++ otro en c otro en perl y otro en C#, y todos se encargan de generar un XML con el mismo formato, con la herencia, pues se complica un poco más, sobre todo cuando reutilizas código. Por ejemplo en la asignatura de bioinformática, algunos algoritmos serían muy complejos, así que los profesores te dan el código y tu solo tienes que cambiarle un par de cosas y ejecutarlo para sacar el documento de analisis, entonces ahí sería dificil meter el modelo de herencia, en cambio el trazador lo puedes meter sin problema, ya que es solometer un llamada al trazador en el sitio del algoritmo que corresponda.
Bueno, no me enrrollo más,
Los videos están chulos, ¿verdad?
Saludos
Hi, we are brazillian students and we´d like to know how to get this application for use this program that show the bio algoritms.
ResponderEliminarIf this became possible, could you please send us a link to download the application?
Best regards and we'll be waiting!
PS.:You can answer in spanish for us.
Felipe/Rafael
Buenas anónimo
ResponderEliminarAquí tienes un enlace para descargarte la aplicación
Descargar
Suerte y cualquier duda, te responderé sin problema
Saludos
José Carlos