Skip to content
Thomas Wagenaar edited this page Mar 26, 2017 · 19 revisions

What is gynaptic?

Gynaptic is an architecture-free neural network library with implementations to create genetic neural networks. It gives the user the ability to create train neurol networks with evolutionary algorithms with just a few lines of code. The library is constantly updated with new mutation, crossover and selection methods. Gynaptics' main neural network code comes from the library Synaptic by Juan Cazala. Gynaptic will stay up to date with Synaptic's improvements as much as possible.

Some of the pages on the right will redirect you to Synaptic's wiki. These pages will be rewritten for gynaptic soon.

Genetic neural network example

This is an example of the creation and loop of a genetic neural network. The goal of this genetic algorithm is too create a population that will output a value that is as high as possible (=1) when inputted 0. Please note that this is just an example, and this problem is much easier to 'solve' by backpropagating.

// Create the evolutionary algorithm
var GNN = new Evolution({
  size: 50,
  elitism: 5,
  mutationRate: 0.05,
  networkSize = [1,4,1],
  mutationMethod: [Methods.Mutation.MODIFY_RANDOM_BIAS, Methods.Mutation.MODIFY_RANDOM_WEIGHT],
  crossOverMethod: [Methods.Crossover.UNIFORM, Methods.Crossover.AVERAGE],
  selectionMethod: [Methods.Selection.FITNESS_PROPORTIONATE],
  fitnessFunction: function(network){
     return Math.round(network.activate([0]) * 200);
  }
});

// Loop the evolution process until a certain average score is reached
var notFinished = true;;
while(notFinished){
  GNN.evaluate();
  if(GNN.getAverage() > 190){
    notFinished = false;
  }

  GNN.select();
  GNN.crossOver();
  GNN.mutate();
  GNN.replace();
};

If you want to know how to set up one of these algorithms yourself, feel free to take a look at the wiki pages! If you want to implement a genetic neural network algorithm, but don't know how, feel free to contact me at wagenaartje@protonmail.com!

Clone this wiki locally