I hope everyone had a nice Thanksgiving weekend. I enjoyed two dinners, one on Sunday and one on Monday. I have many leftovers.
I also spent a lot of time working on my implementation of NEAT into Picoevo. It is a very intricate process integrating NEAT into an evolutionary systems like Picoevo. It wasn’t really designed to handle an algorithm like NEAT though it is quite capable of it. I think there is more than one way to implement it, and I am following the approach that I think works right now. In the future I may revise the design to bring it more inline with the design of Picoevo.
One of the more interesting tasks of this project is deciding where each portion of NEAT belongs in the Picoevo environment. Picoevo heavily uses inheritance to be flexible and it has been designed to work with almost any type of Genome. One just has to decide how to extend each element to support what you require. So for implementing NEAT I have each gene in the genome implemented as an Element, each genome is an individual composed of multiple types of Elements and each Population has multiple NEAT genomes. Crossover, Speciation and Innovation are controlled at the Population level, mutating genomes by adding links and nodes is controlled at the Individual level and mutation of weights is controlled at the Element level.
Picoevo was designed well and is indeed flexible but it wasn’t really designed with the idea that each Individual or genome might have more than one type of gene or Element. So I had to be creative when it comes to extending the Individual class in Picoevo. I think the solution will work out fine. When I post the Neuroevolutionary Solver for public consumption I will talk about some of these design ideas more.