Development Releases and Project Status


Status (2011-05-02) - SVN Submissions

  • Fix. Genetic crossover of CPPN genomes regenerated the node activation functions on each node on the child genomes instead of taking the activation function from the parent genomes.
  • Fix to genome loading. Now uses genome factory from each experiment, previously IO was hard coded to use NeatGenomeFactory, which was incorrect for experiments using sub-classes such as CppnGenomeFactory.
  •  Support for radial basis functions in NEAT genomes and networks (RBF-NEAT).
  •  New RBF-NEAT experiments; RBF-BinarySixMultiplexer, RBF-BinaryElevenMultiplexer and RBF-FunctionRegression for sin(x^2).
  •  XOR and binary multiplexer experiments modified to use fitness score based on squared error; this change improves search efficiency.
  •  Stop condition threshold fitnesses changed in some experiments to reflect acceptable scores rather than perfect scores.
  •  Function regression experiments changed to have peaks and troughs at y = 0.1 and 0.9 respectively. This avoids requiring of output values at the extremes of the output range of network activation functions


Status (2010-09-18) - SharpNEAT 2 Released

See project download page at sourceforge:
    http://sourceforge.net/projects/sharpneat/files/sharpneat2/


Status (2010-07-15) - SharpNEAT 2 Candidate Release 6

SharpNEAT 2 development has reached a candidate release status. This is a fully functional release that is made available in order to highlight any defects before issuing the code as an official version 2.0
Features:
  • Parallel execution. Concurrent genome decoding and genome evaluation, also concurrent speciation by k-means clustering. Implemented using Parallel Extensions (built-in to .Net 4, available as a separate library for compiling within Mono).
  • Support for both NEAT and HyperNEAT/CPPNs.
  • Generic framework classes with high level of abstraction and therefore flexibility and reusability in both NEAT and non-NEAT projects.
  • Flexible XML configuration.
  • XML IO for genomes and populations.
  • Problem domains - 
    • Logical XOR.
    • Binary 3-multiplexer, 6-multiplexer & 11-multiplexer.
    • Function regression - sin(x), sin(x2) & multiplication (with visualization).
    • Boxes Visual Discrimination (with visualization). (see http://eplex.cs.ucf.edu/publications/2009/stanley.alife09.html)
    • Prey Capture (with visualization).
    • Single Pole Balancing
    • Double Pole Balancing (and variants)
  • Speciation by k-means clustering (Single thread and parallel versions). To my knowledge this is the first NEAT implementation to use this approach and as such this code is experimental. Results so far have been positive.
  • Complexity Regulation (previously known as phased pruning).
  • GUI for modifying experiment parameters, controlling the execution of the evolution algorithm and visualization of genomes and problem domains.
  • Command line interface application.

To run SharpNEAT 2:
  1. Download and decompress the 7zip archive (at bottom of page).
  2. Download & install .Net 4 Framework.
  3. Run bin/SharpNeatGui.exe
The source code is provided with solution and project files for Visual Studio 2010. Free 'Express' versions are available from http://www.microsoft.com/express/downloads/. Alternatively students can obtain full versions of Visual Studio through the DreamSpark scheme. Start-ups can also obtain free versions through the BizSpark scheme.


Updates

2010-07-15 - SharpNEAT 2 Candidate Release 6
  • INeatExperiment.CreateEvolutionAlgorithm() - Overload that uses default population size and NEAT parameters to generate a population and evolution algorithm.
  • INeatExperiment.CreateGenomeDecoder() - Creates a genome decoder for the experiment. Useful for decoding genomes for use in code external to SharpNeat.
  • IGuiNeatExperiment - New sub-interface of INeatExperiment. Shifts all references to System.Windows.Forms away from INeatExperiment.
Thanks to Wesley Tansey for the feedback.

2010-07-12 - SharpNEAT 2 Candidate Release 5
  • Removed dependency on Math.Iridium library. Replaced with built-in Gaussian distribution generator.
  • Fixed default genome filename to be consistently *.gnm.xml (auto genome saving used *.gen.xml).
  • Minor cosmetic changes to GUI.

2010-07-09 - SharpNEAT 2 Candidate Release 4
  • New: Command line interface application for controlling SharpNeat via the console. Also minimal console application to demonstrate minimal starting point for setting up SharpNeat projects in code.
  • Dropped HIV progression prediction experiment (the way I was applying NEAT to this problem wasn't competetive and thus is not a good example problem domain).

2010-07-03 - SharpNEAT 2 Candidate Release 3
  • Fix: Relative complexity threshold now initialises relative to initial population mean complexity.
  • Fix: Pausing and restarting was reconstructing a new evolution algorithm object - side effects were generation # reset to zero and view windows resetting.
  • Fix: Better handling of loading genomes/population with wrong configuration of inputs and/or outputs.
  • Enhancement: Check # of genomes is >= number of species at startup. Prevents exception occuring within the evolution algorithm.
  • New: HIV progression prediction experiment. (http://kaggle.com/hivprogression)

2010-06-26 - SharpNEAT 2 Candidate Release 2
  • Minor fixes to GUI. Exceptions thrown if switching to a different problem domain with existing domain or genome view left open.
  • New XML config setting <MaxDegreeOfParallelism>. If specified this limits the number of CPU cores utilised by SharpNEAT. E.g.
  <Experiment name="Logical XOR (NEAT)">
    <AssemblyPath>SharpNeatDomains.dll</AssemblyPath>
    <ClassName>SharpNeat.Domains.Xor.XorExperiment</ClassName>
    <Config>
      <PopulationSize>150</PopulationSize>
      <SpecieCount>10</SpecieCount>
      <Activation>
        <Scheme>FixedIters</Scheme>
        <Iters>1</Iters>
      </Activation>
      <ComplexityRegulationStrategy>Absolute</ComplexityRegulationStrategy>
      <ComplexityThreshold>20</ComplexityThreshold>
      <Description/>
      <MaxDegreeOfParallelism>4</MaxDegreeOfParallelism>
    </Config>
  </Experiment>

2010-06-17 - SharpNEAT 2 Candidate Release
  • New problem domains -
    • Prey Capture (with visualization).
    • Single Pole Balancing
    • Double Pole Balancing
    • Double Pole Balancing - no velocity inputs
    • Double Pole Balancing - no velocity inputs + anti-wiggle scheme
  • Moderate refactoring of experiment initialisation code. Now loads more common config settings from experiment config XML. Config xml files now have a standard *.experiments.xml file extension and should be in the same project as the experiment code. This allows multiple projects to each contain an .experiments.xml file. SharpNeatGui.exe loads all of the experiment config files present alogside the exe in order to load experiments from third party DLLs.
  • Misc bug fixes.
2010-06-05
  • Fixes to complexity regulation. The wrong NEAT parameters were being used in simplification mode, thus breaking simplification.
  • Moderate refactoring of experiment initialisation code. Now loads common config settings from experiment config XML (e.g. population size, number of species, complexity regulation strategy)
  • New problem domains -
    • Function Regression - Sin(x), Sin(x^2) and positive multiplication.
    • Binary 3-multiplexer, Binary 11-multiplexer.
2010-05-30
  • Graph views. Time series plots for fitness, complexity & evaluation per second. Rank and histogram plots for fitness and complexity.
2010-05-23
  • Problem domain view for Boxes Visual Discrimination task.
  • Fix: Exception being thrown when selecting genomes for cross-species mating.
  • Fix: HyperNEAT decoding was applying substrate coords to CPPNs incorrectly.
2010-05-13
  • New GUI. Modelled on the SharpNEAT 1 GUI with improvments such as a simplified experiment plug-in mechanism and visualization of HyperNEAT CPPNs. The graph views are not yet implemented, nor are many of the SN1 experiments migrated across just yet.
  • Boxes Visual Discrimination task. New HyperNEAT problem domain as described in (http://eplex.cs.ucf.edu/publications/2009/stanley.alife09.html). This is the first HyperNEAT domain to be tested in SharpNeat.
  • Miscellaneous fixes.

2010-04-30
HyperNeat substrates are no longer constrained to two dimensions. 3D substrates are typically required for problem domains such as vision based tasks. Other dimensionailties can be used - there is no constraint on the dimensionailty of substrate node positions.
Project files migrated to Visual Studio 2010. Free 'Express' versions available from http://www.microsoft.com/express/downloads/

2010-04-12
Global cosmetic code cleanup using a limited subset of StyleCop rules. The stylcop settings file is now part of the release zip (at the src folder level where it applies to all projects).
Fix: Evolution algorithm now stops when the StopCondition flag is set on the genome evaluator classes.

2010-04-04
Complexity regulation (previously known as phased pruning).
Applied GPL v3 license.
Removed Randlib.cs (questionable licensing).

2010-02-21
More performance improvments to ParallelKMeansSpeciationStrategy. The main change here is the use of the ConcurrentDictionary class that is part of the Parallel Extensions and also .Net4. Using this class at a point of very high lock contention inside of CalculateSpecieCentroid() gives something like a 4x speed-up on an 4 core CPU (8 logical CPUs with Hyperthreading). Also note that running under .Net4 gives another 30% speed-up, presumably due to changes to the Parallel Extensions code and/or improvements to synchronisation locks. A benchmark test of Parallel k-means on the previous version running on 8 cores went from 57secs clock time to 15s with this new version, and 11.5s with the new version under .Net4. That's a nearly 5x speed-up!

2010-02-08 & 2010-02-16
Fixed: Interspecies mating throws an index out of bounds exception.

2010-02-01
Futher improved performance and scalability of ParallelKMeansSpeciationStrategy. Will now use between 85-95% of CPU time on an 8 CPU system when speciating a typical set of data/genomes. Also note that in real-life scenarios the problem domain code uses the major share of CPU time.

2010-01-30
XML IO routines for NetworkDefinition and NeatGenome (HyperNEAT also uses this class). XML can be handled as XmlDocuments, however the underlying code operates on XmlReader/XmlWriter thus XML can be streamed directly to/from a stream.

2009-12-30
Implementation of HyperNEAT and CPPNs.

2009-12-13
Parallel SharpNEAT.
The new ParallelGenomeListEvaluator class is a direct replacement for SimpleGenomeListEvaluator and allows genome decoding and evaluation to occur on multuple execution threads.
ParallelKMeansSpeciationStrategy is a parallel version of KMeansSpeciationStrategy. This uses the Parallel Extensions library (see section on dependencies below).

2009-12-06
Refactored/rewrote network visualization code. Preparation for visualization of a wider range of genome types, e.g. CPPNs (with activation function per node), Genetic Programming networks/trees, etc.


Dependencies
ParallelKMeansSpeciationStrategy requires Parallel Extensions(PE) which is integral to .Net 4. Alternatively this can be acquired within .Net 2.0 by referencing the Reactive Extensions for .NET (RX), simply download and install to obtain the required DLLs in "C:\Program Files\Microsoft Reactive Extensions".

On Mono PE is not currently part of the official releases but is available as a separate project as source code produced as part of the Google Summer of Code 2008 (http://code.google.com/p/mono-soc-2008/source/checkout).


Known Problems

        None currently.


To Do

High Priority
  • Replace roulette wheel selection with stochastic universal sampling (SUS).
  • Simon Funk AI Challenge.
  • Species visualization(s).
  • Old species culling (see 'Tabu Search' below).
  • Feedforward-only neural network support.
Other
  • Tabu search. In SharpNEAT 2 all genomes have a well defined position in a multidimensional space, this is the basis for the speciation algorithms and also provides the possibility of marking off areas of the search space as being searched (dead space).
  • Performance benchmark routine(s) for comparison of performance across different hardware and software platforms.
  • Centroid calculation for L1/Manhattan distance metric.
  • 3D HyperNeat substrate/network visualization. Where # of connections is large visualization is possible by randomly thinning out the shown connections. This approach is used in TrackVis to visualize brain fibers.
  • GP / Hyper GP. Genetic programming trees are a further restriction on topology beyond recursive and then feedforward-only networks.
  • Periodic innovation ID defragmentation.
  • Population-wide integrity checks. e.g. ensure a given innovation ID is not being used in nodes *and* connections.
  • Regularized k-means speciation.
  • Pearson correlation distance metric.
  • Distributed NEAT. Island model. (+ binary/fast IO).
  • Generate framework documentation (ndoc, sandcastle, etc.)
  • Simple tutorial to get people started.
  • Mono.Simd / CUDA acceleration.
  • NUnit tests


Č
ċ
ď
SharpNeatV2_CandidateRelease5.7z
(885k)
Colin Green,
11 Jul 2010 16:01
ċ
ď
SharpNeatV2_CandidateRelease6.7z
(885k)
Colin Green,
15 Jul 2010 14:33