[mlpack] Neural Evolution Algorithm

bang liu lbldtb at gmail.com
Tue Jun 21 01:05:07 EDT 2016


Dear all,

Last week I was busy rushing through a research paper deadline on Friday.
Finally it is finished! Currently I am in the progress of developing NEAT
algorithm.
After reviewed the NEAT paper, I have got the plan of implementing it and
is trying to finish asap. The following is what I have done and going to do
in this week.

0. Species
Change the Population class to species class, and revise related CNE, test,
etc.

This is finished.

1. LinkGene
We need to add

size_t innovationId;
bool enabled;

to the class LinkGene, and add related set/get functions; revise
constructors; revise related files such as the Activate function in genome
which should consider whether a link is enabled or not; revise the test
code.

This has been done. Thus, I think the LinkGene class is finalized.

A alternation is not use the "enabled" member, but just delete the disabled
links during mutation. We will leave this for check in the future.

2. Genome
Need operator functions such as

MutateAddNode
MutateAddLink
Crossover // align genes by innovation number and then perform crossover.

which corresponding to the two structural mutations in NEAT algorithm.

After discussion with Marcus, we think these algorithm related operation
functions should be placed into the algorithm class. Thus, these functions
will be implemented inside NEAT class.


3. Innovation
As NEAT need to record the list of innovations to track the innovation
origin and assign innovation id to each new link, we need a way to
represent each innovation and keep all the innovations. Then all the
innovations will be recorded through an innovation list.

Then, the MutateAddNode and MutateAddLink will take a Innovation list as
one parameter to assign innovation id to new links.

4. Population
A Population class contains list of species. It shall implement

AdjustFitness // It adjust each genome's fitness by divide it with species
size.
CalcCompatibility // It calculate two genome's compatibility.
Speciate // This will divide a list of genomes into different species in
sequence based on the calculation of compatibilities

5. NEAT
The NEAT algorithm class shall implement

InitPopulation() // This should init a population with minimal structured
genomes. Only contains input and output nodes, no hidden node, as described
in the paper.
Reproduce() // Again, this is the heart of NEAT algorithm. In reproduce
progress, it will sort genomes, speciate genomes, drop bad genomes and
choose good ones, crossover by align with innovation number, mutate links,
mutate neurons, etc.


Best wishes,
Bang
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.cc.gatech.edu/pipermail/mlpack/attachments/20160620/41b3e2a4/attachment-0002.html>


More information about the mlpack mailing list