Skip to content

Modificaciones a JECO

hecoding edited this page Mar 11, 2017 · 9 revisions

PacmanGrammaticalEvolution (jeco.core.algorithm.moge)

Añadir nuestra clase para Pacman.

FitnessEvaluatorInterface (jeco.core.operator.evaluator)

Y subclases como NaiveFitness. Para tener una función de fitness.

Algorithm (jeco.core.algorithm)

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().

GrammaticalEvolution (jeco.core.algorithm.moge)

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.

GrammaticalEvolution (jeco.core.algorithm.moge)

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.

MasterWorkerThreads (jeco.core.optimization.threads)

Añadida la función stop() para facilitar la parada de la ejecución del algoritmo multihilo.

GrammaticalEvolution (jeco.core.algorithm.moge)

La forma de sustituir los hijos y los padres no nos gustaba así que hemos añadido una élite.

AbstractProblemGE (jeco.core.algorithm.moge)

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.