Comparar dos algoritmos genéticos


9

Tengo dos implementaciones de un algoritmo genético que se supone que se comportan de manera equivalente. Sin embargo, debido a restricciones técnicas que no se pueden resolver, su salida no es exactamente la misma, dada la misma entrada.

Aún así, me gustaría mostrar que no hay una diferencia de rendimiento significativa.

Tengo 20 ejecuciones con la misma configuración para cada uno de los dos algoritmos, usando diferentes semillas iniciales de números aleatorios. Para cada corrida y generación se registró el error mínimo de aptitud del mejor individuo de la población . El algoritmo emplea un mecanismo de preservación de élite, por lo que la aptitud del mejor individuo está disminuyendo monotónicamente. Una ejecución consta de 1000 generaciones, por lo que tengo 1000 valores por ejecución. No puedo obtener más datos, ya que los cálculos son muy caros.

¿Qué prueba debo emplear? Probablemente, una forma fácil sería comparar el error en las generaciones finales (de nuevo, ¿qué prueba usaría aquí)? Pero también se podría pensar en comparar el comportamiento de convergencia en general.


Solo como una aclaración: ¿no es el caso de que un algoritmo genético busque una solución al azar, por lo que es improbable que el segmento inicial de cualquier ejecución produzca una solución que valga la pena? Además, ¿qué quiere decir exactamente con "el error mínimo en la población"? Si quiere decir la diferencia mínima entre un valor verdadero conocido y cualquier solución de los 1000 valores de una ejecución, ¿no es una indicación sesgada del resultado de la ejecución? Después de todo, en la práctica aceptaría la solución final en cada ejecución y rechazaría todo lo que le precede, ¿verdad?
whuber

Por error básicamente me refiero a 1 / aptitud, así que estoy hablando sobre el valor del mejor individuo en una generación. He registrado el valor físico del mejor individuo para cada generación. Así que tengo 1000 * 20 * 2 números, cada uno correspondiente a la "aptitud" del mejor individuo en una generación particular de una carrera en particular.
nisc

Supongo que la pregunta inicial estaba mal planteada, he agregado algunas aclaraciones ..
nisc

Respuestas:


9

¡Probar algoritmos estocásticos puede ser bastante complicado!

Trabajo en biología de sistemas y hay muchos simuladores estocásticos disponibles para simular un modelo. Probar estos simuladores es complicado ya que dos realizaciones de un solo modelo serán típicamente diferentes.

En los dsmts hemos calculado (analíticamente) el valor esperado y la varianza de un modelo en particular. Luego realizamos una prueba de hipótesis para determinar si un simulador difiere de la verdad. La Sección 3 de la guía del usuario proporciona los detalles. Esencialmente, hacemos una prueba t para los valores medios y una prueba de chi cuadrado para las varianzas.

En su caso, está comparando dos simuladores, por lo que debe usar una prueba t de dos muestras.


¿Cómo haría para usar la información de todas las generaciones?
nisc

La forma más fácil es hacer múltiples pruebas, es decir, probar en cada generación, luego usar una corrección Bonferroni o fdr.
csgillespie

Al comparar en cada generación, ¿tendría que probar a un nivel de significación de 1/1000 * 0.05? ¿No es eso un poco duro?
nisc

Es cierto, pero también está haciendo muchas pruebas, no puede tener todo;) Podría clasificar los valores p, usarlos como guía para ver dónde pueden ocurrir posibles errores.
csgillespie

1
En lugar de la corrección de bonferroni, siempre puedes usar el bonferroni holm más poderoso. Vea mi respuesta aquí: stats.stackexchange.com/questions/575/…
Henrik

4

Tal vez podría medir la diferencia promedio entre dos ejecuciones del mismo algoritmo a la diferencia promedio entre dos ejecuciones de diferentes algoritmos. No resuelve el problema de cómo medir esa diferencia, pero podría ser un problema más manejable. Y los valores individuales de las series de tiempo alimentarían el cálculo de la diferencia en lugar de tener que ser tratados como puntos de datos individuales para ser evaluados entre sí (tampoco creo que la diferencia particular en el enésimo paso sea lo que realmente desea hacer declaraciones sobre).

Actualizar detalles concernientes: ¿qué características de la serie de tiempo le interesan, más allá del error final? Supongo que en realidad tienes tres preguntas diferentes para resolver:

  1. ¿Qué constituye similitud para usted, es decir, qué quiere decir cuando dice que no cree que los dos métodos sean diferentes?
  2. ¿Cómo se cuantifica? Puede responderse después de 1, y
  3. ¿Cómo puede probar las diferencias significativas entre sus dos métodos?

Todo lo que dije en la primera publicación fue que la respuesta a (1) probablemente no considera las diferencias individuales en cada una de las 1000 generaciones. Y eso recomendaría proponer un valor escalar para cada serie de tiempo o al menos similitud entre series de tiempo. Solo entonces llegas a la pregunta de estadística real (que menos conozco de los tres puntos, pero me aconsejaron usar una prueba t pareada en una pregunta similar que acabo de hacer, cuando tengo un valor escalar por elemento).


suena razonable, ¿hay más detalles?
nisc
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.