-
Notifications
You must be signed in to change notification settings - Fork 16
Modificaciones a JECO
Añadir nuestra clase para Pacman.
Y subclases como NaiveFitness
. Para tener una función de fitness.
Ahora extiende de AlgObservable
.
Para hacer funcionar la GUI adecuadamente necesitábamos que el algoritmo nos avisara antes y después de terminar la ejecución, por lo que quitamos la extensión de la clase Observable
e hicimos una propia que además de tener la función notifyObservers
tuviera notifyStart
y notifyEnd
.
Esta clase llamada AlgObservable
se crea junto a su complementaria AlgObserver
dentro del paquete observer
en jeco.core.util
.
Después modificamos la clase GrammaticalEvolution
(jeco.core.algorithm.moge
) para hacer uso de ello en la función execute()
.
Para sacar gráficas de la evolución del fitness del algoritmo necesitábamos que éste fuera guardando estadísticas de la población según las iteraciones. Esto se hace llamando a la función collectStatistics()
que hemos creado dentro de esta clase.
Modificado execute para recoger mejor actual, mejor absoluto, peor y media del fitness de la población, y añadido cuatro arraylists donde se guardan estos datos.
Modificada condición del bucle para que tuviera en cuenta la variable stop
de su clase padre Algorithm
y por tanto se pudiera parar la ejecución.
Añadida la función stop()
para facilitar la parada de la ejecución del algoritmo multihilo.
La forma de sustituir los hijos y los padres no nos gustaba así que hemos añadido una élite.
Si no se puede derivar un fenotipo no es una solución válida y se le asigna Double.POSITIVE_INFINITY
como fitness. Esto dependiendo del fitness puede ser lo contrario o no tener sentido, por eso lo hemos hecho genérico y pregunta al fitness por el peor valor.