SharpNEAT Releases [Prior to hosting on SourceForge]

 

Releases / Release Notes

SharpNEAT_Oct06_2004.zip

  • This release mainly contains yet more optimisations. All of the easy/obvious optimisations (except maybe one) have now been addressed and so this is expected to be the last release to contain an major optimisations.
  • Major performance improvement in the core NEAT code. This is approx. 2x faster for large(ish) genomes. Using the .Net Profiler the genome compatibility routines were seen to be using about 40% of the total CPU time required by the core NEAT routines (for a test genome of length 1664, that is, a fully connected Simple-OCR genome). In reality (outside of the profiler) tests show this is probably more like 50 to 60%. As a result NeatGenome.CalculateCompatibility() has been replaced with NeatGenome.IsCompatibleWithGenome(). This new routine eliminates the need to pass over the whole length of the genomes being compared, it will return when the compatibility threshold is passed. However, another speed improvement is achieved by not having NeatGenome.CorrelateConnectionGeneLists() build a list of correlation items which requires memory allocations and therefore garbage collector activity. In terms of overall speed-up, it depends on the proportion of CPU time required by the experiment code, expect about 2x for simple experiments such as XOR and considerably less for CPU intensive experiments.
  • Optimised/rewrote part of the sexual reproduction routine on the NeatGenome class to eliminate a call to ConnectionGeneList.SortByInnovationID(). Results in an approximately 10% speedup (in addition to the above) of the core NEAT code when handling large genomes.
  • EvolutionAlgorithm.AmalgamateInnovations() has been removed. The re-use of innovation ID's now occurs at the point that new connection and neuron genes are created within the additive mutation routines. There is no significant performance benefit from this, it just seemed like a more elegant solution - also I assume that this is what other NEAT implementations are doing.
  • New 'View->Update Frequency' menu on the main GUI. This allows the user to choose the GUI to be updated either per unit of time or number of generations. This is also tied in with the 'best genome' and 'species' windows - therefore those two window's independent update logic has been removed. GUI updating can consume a significant proportion of CPU time when running experiments that evaluate a large number of generations per second, therefore it is beneficial to be able to lower the update rate in these circumstances. Lowering the update rate also provides a more accurate figure for the 'evalutaions per second' reading.
  • Fixed a nasty bug introduced in the previous release whereby both the connection and neuron gene lists in a genome might contain genes that are out of order. Order of these genes (by innovation ID) is maintained at all times, and this fact is relied upon by the genome compatibility routine and the network decoder routines. An out of order gene may cause the network decoder to throw an exception, and may cause the compatibility routine to indicate that compatible genomes are incompatible.
  • Fixed bug whereby the connection weight compatibility value was being miscalculated (divided by the number of matching genes). To compensate for this the default weight compatibility coefficient has been changed from 1.0 to 0.1.

 

SharpNEAT_Sept19_2004.zip

  • Species culling logic has been modified to ensure that the best species is preserved if no other species has an equal best genome. All other species are still culled as normal as defined by the 'species culling age' parameter. If two or more species are equally best then culling also continues as normal on those species. There are arguments for and against this technique, see discussions on the NEAT yahoo group for more info. On balance this approach seems the best technique.
  • Optimised genome [to network] decoding. Depending on the size of the genome the decoding now performs between 8 and 9x faster.
  • Optimisation in pruning code. There was some inefficient searching through lists that caused a slow down proportional to the total length of all genomes in the population. The searching has currently been replaced with a binary search, this may be improved further in future releases to make it even more scalable.
  • Optimised genome crossover routine. A particularly poor hash code generation function has been replaced, speeding up the routine by about 3x. Worryingly the same hash function is used within the .Net framework within the Point structure. For more details see this newsgroup thread on microsoft.public.dotnet.framework.performance.
  • Other minor fixes and optimisations.
  • Note that the .Net Framework 1.1 Service Pack 1 has been released and is available here. There is at least one known bug within SharpNEAT GUI that was fixed by applying this service pack. I have also noticed some performance optimisations in running SharpNEAT, although no information has been released from Microsoft to date about any such changes.

 

SharpNEAT_Aug15_2004.zip

  • Phased searching is now implemented and has been made the default search technique. See here for more details.
  • New Tic-Tac-Toe experiment and associated Tic-Tac-Toe game executable for playing against the evolved networks and also watching how they play against each other.
  • New Simple-OCR pattern classification experiment.
  • New Vector Cross Product experiment.
  • New Multiplication experiment.
  • New log file output option. This currently outputs in a simple comma seperated text format.
  • New 'Experiment' view in the main SharpNEAT executable. See the Visualization->Experiment menu. Currently this is only provided for the OCR experiment.
  • Fixed bug whereby the target size for each species would be calculated to be zero and the population size would therefore collapse to zero. This could occur when there were as many species as genomes.
  • Modified speciation so that old species are preserved when the speciation threshold is modified. This prevents the species age from being reset on all species which caused them all to reach the drop-off age simultaneously. This could result in a sudden loss in population diversity.
  • Modified genome representation so that connections no longer have an enable bit. The concept of disabled connections has therefore been removed in SharpNEAT. This simplifies a number of routines within SharpNEAT, inclding the new pruning routines.
  • Fixed bug whereby connection weights were not being compared in the genome compatibility/comparison routines.
  • Fixed bug in the C# RandLib port. This caused SharpNEAT to very occasionally throw an exception and was therefore normally encountered during very long (several day) searches. Thanks to Luca for finding this.
  • Upgraded exception handling in XML loading routines. The user is presented with graceful error messages instead of application exceptions when invalid XML is encountered.

 

SharpNEAT_June27_2004.zip

  • Major performance improvement derived from the new neural network class FastConcurrentNetwork. This is approximately 8x faster than the pre-existing code! See here for details on how this was achieved. This has quite a noticable effect on the overall performance of SharpNEAT, especially on experiments that activate networks for a large number of epochs, e.g. pole balancing and prey capture.
  • New fast activation functions Inv-Abs, SigmoidApproximation and SteepenedSigmoidApproximation. Inverse-Absolute is the fastest but does not approach the output limits of 0 and 1 as fast as would be liked, try this but be aware that it may not perform well. SigmoidApproximation solves the problem of Inv-Abs and is only slightly slower. SteepenedSigmoidApproximation matches the steepness of the existing SteepenedSigmoid function which has been found to be very good in experiments, this is currently the default activation function for all experiments. Again, changing to a faster activation function has a noticable and measurable effect on overall performance!

 

SharpNEAT_June07_2004.zip (Maintenace release)

  • Fixed the problem with duplicate connections.
  • Minor bug fixes

 

SharpNEAT_May31_2004.zip

  • New network visualization windows in the main SharpNEAT executable. This includes a best genome window and a window for monitoring the best genomes from a selected range of species, you can also set this window to monitor the best N species.
  • New network visualization tool (bin/NetworkViewer.exe). Currently this loads and displays SharpNEAT network XML. There are plans turn this into an editor and to support loading/saving of other network and genome file formats
  • Important Notice. There currently exists a problem in the genome crossover code that allows multiple connections to accrue between two neurons, or between a single neuron in the case of recurrent connections. This will have some detrimental effect on searches, although how much of an effect is not known. This problem is being worked on.

 

SharpNEAT_May17_2004.zip NOTICE! NOW RELEASED UNDER THE GPL and LGPL!

  • Released under GPL and LGPL. See the licensing link from the menu for more information.
  • Performance improvements in the search algorithm and, crucially, the RealtimeNetwork class. Most significantly the use of C#'s foreach statement has been replaced for the more traditional 'for(int i=0; <i<bound;i++)' syntax in performance critical sections of code. It turns out that although the compiler performs some optimizations on the foreach statement, it is still approximately 30% slower than the traditional syntax. Since the RealtimeNetwork was essentially two tight foreach loops this now runs quite a bit faster :) Note that RealtimeNetwork is by far the most intensively used piece of code in SharpNeat since it is at the heart of all searches.
  • In the search algorithm an optimized speciation technique is now used whereby the parent species of offspring are tested against first. Normally an offspring will be in one of its parent's species and so we don't waste time comparing against other species. This performance increase is most noticable in populations with a large number of species.
  • Network caching - during non-deterministic experiments a genome may be evaluated more than once since it may be kept in the population (due to elitism) and re-evaluated in the next generation. Remember that in non-deterministic experiments a genome may have been lucky or unlucky with its previous fitness. To evaluate we need to decode the genome into a Neural Network. This network is now cached so that there is no need to decode again if the genome is re-evaluated.
  • Best/Mean genome size shown in GUI.
  • Ability to autogenerate a population with a given proportion of interconnections between the input and output nodes. 0.0=no connections in the initial population. 1.0=fully interconnected.
  • Each experiment now defines a suggested activation function. This function is shown in a combo box and can be changed by the user prior to starting a search.
  • Minor bug fixes.

 

SharpNEAT_May10_2004.zip

  • Completed the bulk of a code reorganization. New interfaces INetworkEvaluator, IExperiment should hopefuly ease the creation of new experiments.
  • XML reading/writing development. There is now the ability to save the best genome as genome XML or already decoded as network XML. You can also load and save a whole population, load a seed genome and load a seed population. The GUI is still a little underdeveloped in this area, so you may be able to break it(throw an exception) if you aren't careful!
  • Network XML now specifies the activation function that it is supposed to run against. This is actually an ID of a pre-defined function within SharpNeat. Internally there is scope for outputting a human readable description of the function to aid transferring networks to other neural net software - I will switch this on in the next release. Any old network XML you may have will now need an ID in order for it to work, try one of the following defined so far - "PlainSigmoid" and "SteepenedSigmoid" - see new network xml for examples.

 

SharpNEAT_May03_2004.zip

  • Marked improvement on single-pole search. This is mainly due to using fully connected networks in the initial population. The connection weight mutation has also been refined.
  • New double pole balancing and double pole without velocity input experiments.
  • Updated Pole balancing simulator to show force acting on cart and support double-pole experiment.

 

SharpNEAT_April25_2004.zip

  • New search parameters: 'Species droppoff age' and 'Interspecies mating proportion'.
  • 'Save best network on improvement' option in GUI. Useful for long runs.
  • New single pole balancing domain + associated simulation tool!

 

SharpNEAT_April18_2004.zip

The prey capture evaluation technique has been modified in an attempt to evolve better prey capture networks. The first level of task difficulty now uses a set of 32 pre-determined trials. The agent always starts in the centre of the grid, the prey is then placed at 16 equally spaced points at distance 3 from the agent (within sensor range). The first 16 tests don't allow the prey to move and are allocated a score of 1. The nest 16 tests give the prey 3 initial moves allowing it to move out of sensor range, these tests are allocated a score of 3 thus giving the test as a whole a maximum score of 64.

Using the default search parameters you should normally see this determinstic task solved within about 100,000 evaluations. The task difficulty is then increased by switching to the old non-deterministic evaluator set to perform 64 random trials with a varying number of initial moves and prey speed (see task description within SharpNEAT.exe for more details).

 

SharpNEAT_April10_2004.zip

Updated PreyCaptureSimulator tool, Agent sensor range is now configurable and the sensor sectors that correspond to neural network input signals are shown in different colors. Try increasing the sensor range, allowing the prey more head start moves and a speed of 1.0 for nice results with the current best network (preycap_5_85.xml)

Network relaxation. The following new method is defined on INetwork/DefaulNetwork:

bool RelaxNetwork(int maxSteps, double maxAllowedSignalDelta)

This method runs the network until all neuron output signals settle (relax) to within a given delta. This method is now used by the XOR and PreyCapture domains, initial results indicate that the searches give similar results to those found before with fixed numbers of network steps.

 

SharpNEAT_April9_2004.zip

Added PreyCaptureSimulator tool to visualize evolved preycapture networks in real-time.

 

SharpNEAT_April6_2004.zip