com.anji
classes implement a neuroevolution framework based on NEAT and built upon a modified version of the open source project JGAP. Modification to NEAT was made as outlined in James and Tucker's "A Comparative Analysis of Simplification and Complexification in the Evolution of Neural Network Topologies" paper for GECCO 2004. Persistence and presentation data are stored in XML. Run and network data models are consistent with NEVT XML data model.
org.jgap
classes were modified by Tucker and James to support ANJI. examples
classes contain JGAP examples unrelated to ANJI.
A summary of changes:
init(java.util.Properties)
methods to a few classes to enable them easily to be configured from a single source.Chromosome
into Chromosome
and ChromosomeMaterial
, where Chromosome
remains immutable but ChromosomeMaterial
can be changed. This allows a chromosome to be unchanged for most of its life cycle, but during mutation and crossover time its genes can be changed, added, and removed without having to create a new chromosome every timetoXml()
methods to a few classes instead of using org.jgap.xml.*
classes.IdFactory
to be able to maintain uniqueness of innovation IDs and chromosome IDs across multiple runs.GeneticEvent.GENOTYPE_EVALUATED_EVENT
.
A good starting point for navigating this code is the com.anji.neat.Evolver
class. Its main(String[])
method is the starting point for performing evolutionary runs. Configuration parameters are loaded into a com.anji.util.Properties
object and passed to various components of the system via init(Properties)
methods. The org.jgap.Genotype.evolve()
method is also a pivotal point in the system, as this contains the logic for processing a generation.