Neural Network Evolution Playground with Backprop NEAT
JavaScript Other
Latest commit 0cf0eda May 20, 2016 HaDavid first commit
Permalink
Failed to load latest commit information.
css first commit May 20, 2016
img first commit May 20, 2016
lib first commit May 20, 2016
ml first commit May 20, 2016
README.md first commit May 20, 2016
datafit-neat.js first commit May 20, 2016
dataset.js first commit May 20, 2016
example.js first commit May 20, 2016
index.html first commit May 20, 2016

README.md

backprop-neat-js

NEAT

Web Demo combining the NEAT genetic algorithm to evolve atypical neural networks, and the backpropagation algorithm to solve for the weights of the evolved networks for simple classification problem, inspired by tensorflow playground.

Our NEAT implementation evolves arbitrary computational graphs that can be processed by karpathy's recurrent.js for both forward and backward pass. WebCola and p5.js used for visualisation.

At this stage, it is more proof of concept, because classification problems can already be easily solved by throwing deeper and bigger networks and GPU's at the problem rather than carefully crafting small neural networks using NEAT. That doesn't stop me from playing around with these non-mainstream concepts though, as this stuff is what I want to work on.

Please read my blog post for more details, or try the Web Demo.

Node.js example code

The web demo is actually a nasty big hairball spaghetti-code tied together with jquery. The actual libraries are a bit better, and can also be used by node.js command line mode. I put together some example code to explain how it works line by line. The framework is messy, but it works. Please refer to example.js and dataset.js. Below is a brief overview of how the library works:

First we load the libraries and the dummy dataset generator, and generate a random dataset.

var R = require('./ml/recurrent.js');
var N = require('./ml/neat.js');
var DataSet = require('./dataset.js');
DataSet.generateRandomData(3); // 0 - Circle, 1 - XOR, 2 - Gaussians, 3 - Spiral

Then, we have to define a fitness function for a given genome, and calculate a fitness value for the machine learning problem at hand, which in this demo is a simple classification problem. For backprop to work, we can put in the optional flags for backprop mode, and the number of backprop cycles in this function. By default, backprop should be assumed to be false if nothing is passed in when you write this function.

var fitnessFunc = function(genome, backprop_mode, num_cycle) {
    var fitness = 0.0;
    // write some code to calculate the fitness
    // backprop here as well if backprop_mode is set to true
    return fitness;
}

We can then define a backprop function by returning a function that calls fitnessFunc but with backprop_mode set to true. This backprop function will be used later.

var backprop = function(trainer, num_cycle) {
  var f = function(g) {
    return fitnessFunc(g, true, nCycle);
  };
  trainer.applyFitnessFunc(f); // this will be explained later.
};

We can now define our NEAT environment, and a trainer object to store our population of genomes.

N.init({nInput: 2, nOutput: 1, // 2 inputs (x, y) coordinate, one output (class)
  initConfig: "all", // initially, each input is connected to each output when "all" is used
  activations : "default", // [SIGMOID, TANH, RELU, GAUSSIAN, SIN, ABS, MULT, SQUARE, ADD] for "default"
});

var trainer = new N.NEATTrainer({
  new_node_rate : 0.2,
  new_connection_rate : 0.5,
  num_populations: 5,
  sub_population_size : 20,
  init_weight_magnitude : 0.25,
  mutation_rate : 0.9,
  mutation_size : 0.005,
  extinction_rate : 0.5,
}); // a new randomly initialised population will be created

The following line applies our fitness function to all 100 genomes in the trainer class, ranks them, and clusters them into the 5 sub populations. If the fitness function performs backprop, then all 100 genomes will be backpropped'.

trainer.applyFitnessFunc(fitnessFunc); // by default, fitnessFunc doesn't perform backprop
var genome = trainer.getBestGenome(); // this line will extract the most capable genome from the populations

We can now try to evolve the population of networks, ie, add new nodes and connections, for 10 generations, and for each generation, we perform backpropagation of 600 cycles, using a minibatch of 10 samples. The results and progress is slowly dumped to the console using the helper function.

for (var i = 0; i < 10; i++) { // evolve and backprop 10 times
  printPerformanceMetrics(genome); // print out the performance metrics
  trainer.evolve(); // evolve the entire population.  new nodes, connections, mutations, crossovers.
  backprop(trainer, 600);
  genome = trainer.getBestGenome();
}
printPerformanceMetrics(genome, true); // print out the final performance metrics with more details

The final genome can be saved as a JSON string to be used in the future.

var data_string = genome.toJSON() // dump the genome to json format
console.log(data_string);

// another project in another file:
var genome = new N.Genome();
genome.fromJSON(data_string);

Output

> node example.js

After running example.js in the command line, NEAT starts evolving networks to fit the spiral dataset. It starts off with 4 nodes (output, bias, x0, x1), and 3 connections, and the number of nodes and connections grow after each generation. The fitness function is the negative of the logistic regression error with an extra penalty factor for the number of connections.

gen: 0, fitness: -0.694, train accuracy: 0.620, test accuracy: 0.610, nodes: 4, connections: 3
gen: 1, fitness: -0.693, train accuracy: 0.620, test accuracy: 0.605, nodes: 4, connections: 3
gen: 2, fitness: -0.693, train accuracy: 0.620, test accuracy: 0.605, nodes: 4, connections: 3
gen: 3, fitness: -0.693, train accuracy: 0.620, test accuracy: 0.605, nodes: 4, connections: 3
gen: 4, fitness: -0.653, train accuracy: 0.695, test accuracy: 0.670, nodes: 7, connections: 8
gen: 5, fitness: -0.630, train accuracy: 0.720, test accuracy: 0.680, nodes: 8, connections: 13
gen: 6, fitness: -0.618, train accuracy: 0.720, test accuracy: 0.700, nodes: 8, connections: 13
gen: 7, fitness: -0.568, train accuracy: 0.760, test accuracy: 0.740, nodes: 9, connections: 17
gen: 8, fitness: -0.555, train accuracy: 0.765, test accuracy: 0.755, nodes: 12, connections: 26
gen: 9, fitness: -0.510, train accuracy: 0.780, test accuracy: 0.745, nodes: 16, connections: 38
gen: 10, fitness: -0.510, train accuracy: 0.780, test accuracy: 0.745, nodes: 16, connections: 38
gen: 11, fitness: -0.414, train accuracy: 0.895, test accuracy: 0.845, nodes: 23, connections: 60
gen: 12, fitness: -0.409, train accuracy: 0.860, test accuracy: 0.835, nodes: 23, connections: 60
gen: 13, fitness: -0.363, train accuracy: 0.900, test accuracy: 0.825, nodes: 25, connections: 68
gen: 14, fitness: -0.344, train accuracy: 0.900, test accuracy: 0.815, nodes: 25, connections: 73
gen: 15, fitness: -0.322, train accuracy: 0.915, test accuracy: 0.860, nodes: 27, connections: 82
gen: 16, fitness: -0.317, train accuracy: 0.925, test accuracy: 0.830, nodes: 28, connections: 87
gen: 17, fitness: -0.317, train accuracy: 0.925, test accuracy: 0.830, nodes: 28, connections: 87
gen: 18, fitness: -0.317, train accuracy: 0.915, test accuracy: 0.840, nodes: 27, connections: 82
gen: 19, fitness: -0.313, train accuracy: 0.920, test accuracy: 0.830, nodes: 28, connections: 87
gen: 20, fitness: -0.294, train accuracy: 0.955, test accuracy: 0.895, nodes: 50, connections: 169

We can look at each training and test example and compare the ground truth label with our predicted result. Predictions will be rounded to calculate accuracy.

train set breakdown:
x0  x1  label   predict
0.35    0.25    0   0.21
2.3 -1.6    1   0.89
2.4 -0.92   1   0.84
-0.61   -5.4    0   0.086
-6.3    -0.77   0   0.056
-0.18   1.2 1   0.98
0.91    3.2 0   0.045
-0.56   0.39    1   0.95
-2.2    4.9 1   0.95
2.2 -2.4    1   0.98
-0.11   3.0 0   0.072
-5.8    -1.5    0   0.018
-0.65   -0.66   1   0.64
2.2 -0.86   1   0.75
0.37    0.22    0   0.18
-2.9    -4.9    0   0.093
-2.2    -0.67   0   0.075
-2.9    0.80    0   0.043
0.96    0.24    0   0.11
0.96    1.4 1   0.78
1.7 3.5 0   0.17
0.51    -0.20   0   0.092
-2.1    1.9 0   0.026
-1.3    0.36    1   0.95
4.2 -2.0    0   0.013
1.9 -2.0    1   0.98
-2.3    -3.1    1   0.60
3.4 4.7 1   0.83
0.40    -1.3    0   0.069
-1.9    -3.1    1   0.66
0.24    -5.0    0   0.10
-3.0    0.28    0   0.10
6.1 1.4 1   0.90
2.8 2.1 0   0.076
-0.85   -1.7    0   0.066
-1.3    4.6 1   0.93
-1.1    3.6 0   0.24
-4.6    0.52    1   0.78
-2.0    4.3 1   0.91
-1.6    -5.2    0   0.071
4.2 1.0 0   0.13
-0.13   -3.9    1   0.82
2.5 -0.46   1   0.86
3.0 -4.1    0   0.15
1.2 -0.048  0   0.094
-1.8    -1.4    0   0.097
2.6 0.54    1   0.89
-4.9    -2.8    0   0.93
0.32    1.5 1   0.97
-1.8    -0.40   0   0.30
2.2 0.19    1   0.85
-4.1    -3.9    0   0.28
-3.1    -4.5    0   0.090
0.99    -1.1    0   0.026
0.94    1.9 1   0.87
-3.4    -1.8    1   0.87
-1.1    -3.2    1   0.87
0.053   0.11    0   0.66
3.8 2.0 0   0.076
-1.4    0.12    1   0.91
3.6 1.8 0   0.23
-1.3    0.40    1   0.96
4.2 0.78    0   0.043
1.3 -0.68   0   0.15
2.8 -4.5    0   0.061
1.6 -2.8    1   0.99
-5.8    -1.9    0   0.0077
-0.46   -5.1    0   0.060
0.68    5.6 1   0.89
1.9 1.4 1   0.87
-0.34   -2.0    0   0.097
0.73    2.0 1   0.86
3.9 -0.77   0   0.32
-3.9    -2.0    1   0.95
-1.2    1.3 1   0.98
-1.8    2.2 0   0.046
-1.2    -1.8    0   0.055
3.6 -3.4    0   0.39
-0.30   -0.13   1   0.70
-2.5    1.4 0   0.075
3.5 -2.6    0   0.061
4.5 3.3 1   0.91
0.40    -0.27   0   0.12
-0.13   -0.68   1   0.70
2.0 0.28    1   0.83
0.060   -0.54   1   0.63
3.3 4.1 1   0.66
1.2 -4.6    0   0.067
-4.4    0.89    1   0.97
0.37    -0.011  0   0.13
0.44    -0.071  0   0.10
-4.2    0.20    1   0.72
-0.61   0.49    1   0.97
0.34    3.9 0   0.20
-2.5    1.8 0   0.065
-3.6    -4.2    0   0.079
-0.57   5.2 1   0.92
0.48    -3.3    1   0.86
-0.67   -1.7    0   0.062
-1.5    -1.5    0   0.10
2.2 -2.6    1   0.97
-0.12   -4.0    1   0.82
0.57    -2.0    0   0.23
5.6 2.1 1   0.96
2.3 4.5 1   0.62
-0.058  4.7 1   0.38
-2.1    1.9 0   0.028
-2.7    4.0 1   0.59
-1.4    2.5 0   0.029
-0.90   -0.11   1   0.80
4.5 -2.0    0   0.031
0.17    0.32    0   0.65
0.59    -0.0097 0   0.089
-2.6    -0.27   0   0.17
-2.3    -0.53   0   0.11
2.1 2.0 1   0.57
0.85    0.61    0   0.28
-0.30   -0.31   0   0.69
1.1 -0.18   0   0.076
-1.2    1.2 1   0.98
-0.36   0.72    1   0.97
2.0 -4.5    0   0.056
2.1 5.3 1   0.48
5.5 2.4 1   0.80
0.10    -0.58   1   0.59
-3.7    -1.9    1   0.90
1.3 0.48    0   0.25
0.27    -1.3    0   0.16
-1.7    -3.3    1   0.68
1.4 -0.91   0   0.22
-0.94   1.5 1   0.98
-0.95   3.1 0   0.12
-3.8    3.0 1   0.96
5.7 0.49    1   0.79
0.76    0.33    0   0.14
-2.8    -2.1    1   0.81
-1.2    -3.1    1   0.83
-2.7    -4.3    0   0.075
-1.2    -5.1    0   0.093
-4.0    -0.50   1   0.85
1.2 2.1 1   0.91
1.5 -2.7    1   0.99
2.7 -1.8    1   0.78
2.1 -0.54   1   0.76
-0.12   0.11    1   0.78
0.40    -0.049  1   0.11
3.7 0.61    0   0.18
-0.13   -2.0    0   0.11
4.4 -1.0    0   0.032
0.62    2.1 1   0.81
0.17    -1.4    0   0.19
-0.11   2.0 1   0.95
1.2 -0.44   0   0.073
1.0 5.2 1   0.60
4.9 2.5 1   0.29
0.72    -0.39   0   0.087
2.7 2.9 0   0.087
0.090   -0.17   1   0.53
1.9 3.0 0   0.19
-0.55   0.23    1   0.92
-2.2    -0.57   0   0.084
4.4 0.48    0   0.045
-3.9    -0.68   1   0.82
4.0 -0.069  0   0.15
-0.33   -0.37   1   0.69
0.43    5.5 1   0.90
-0.98   0.47    1   0.97
1.3 0.90    1   0.66
3.0 2.6 0   0.096
-4.5    1.9 1   1.0
1.9 -4.9    0   0.11
1.1 -3.3    1   0.91
-2.9    0.69    0   0.045
2.2 -0.44   1   0.80
-3.4    2.9 1   0.97
-3.8    2.7 1   0.99
-5.0    -2.0    0   0.064
-3.4    3.7 1   0.73
0.21    -1.8    0   0.092
-0.91   0.050   1   0.89
1.4 -0.29   0   0.19
-3.8    0.030   1   0.79
3.9 4.3 1   0.73
0.54    -1.5    0   0.018
0.15    0.22    1   0.58
-2.6    -2.3    1   0.80
0.51    -0.76   0   0.11
-1.0    -0.68   1   0.61
-1.4    -1.5    0   0.098
3.3 -2.8    0   0.12
0.31    3.5 0   0.25
0.37    0.23    0   0.18
0.96    1.3 1   0.75
-2.0    -1.6    0   0.068
0.34    0.29    1   0.25
-1.3    0.87    1   0.98
-0.074  1.9 1   0.97
-0.55   2.9 0   0.069
-1.2    2.9 0   0.069
1.8 1.2 1   0.88
test set breakdown:
x0  x1  label   predict
0.90    -3.4    1   0.86
-2.1    -0.43   0   0.096
-2.7    1.3 0   0.076
-0.30   1.6 1   0.99
-0.77   -3.4    1   0.87
1.5 -2.9    1   0.98
2.1 0.69    1   0.85
0.66    -1.1    0   0.035
-2.3    -2.5    1   0.66
-4.3    1.4 1   0.99
1.1 -0.82   0   0.049
-1.4    -2.0    0   0.083
-3.6    -4.7    0   0.14
-1.8    1.8 0   0.26
0.87    2.0 1   0.84
5.5 0.16    1   0.90
-0.22   1.6 1   0.99
1.2 1.4 1   0.86
-1.9    2.0 0   0.043
2.4 -4.3    0   0.062
1.7 -4.3    0   0.068
-0.0029 0.74    0   0.96
-4.2    0.91    1   0.94
2.0 -2.5    1   0.99
0.26    0.43    0   0.56
-5.3    -2.5    0   0.64
0.60    2.2 1   0.73
-2.3    -5.3    0   0.048
1.5 4.8 1   0.13
-3.1    3.7 1   0.77
1.5 -4.4    0   0.060
4.0 -1.1    0   0.041
0.13    -0.45   1   0.52
-0.051  5.2 1   0.91
-1.2    1.1 1   0.98
-2.1    -0.12   0   0.13
6.2 1.4 1   0.94
-0.42   0.25    1   0.92
-4.0    -0.78   1   0.78
0.78    -1.1    0   0.033
-0.45   -1.9    0   0.061
-0.54   -2.0    0   0.060
2.9 -0.94   1   0.90
-0.36   1.4 1   0.99
0.15    -5.4    0   0.26
0.066   -0.53   1   0.62
4.2 0.55    0   0.030
2.7 2.2 0   0.077
2.0 2.9 0   0.19
0.13    -0.76   1   0.57
-3.8    -3.6    0   0.66
-0.14   0.076   1   0.77
-2.6    -0.80   0   0.067
-2.4    5.0 1   0.93
2.2 -2.0    1   0.96
-2.1    0.81    0   0.22
-4.1    0.76    1   0.79
3.0 -0.070  1   0.85
-0.88   1.2 1   0.99
2.7 -1.4    1   0.84
0.19    -1.1    0   0.33
-0.18   -1.9    0   0.082
4.6 -1.5    0   0.11
0.091   -2.0    0   0.30
1.1 -3.1    1   0.93
-2.0    -3.4    1   0.54
0.75    -3.2    1   0.87
-0.26   0.70    0   0.97
-1.6    -5.2    0   0.067
-1.2    0.80    1   0.98
-0.91   -2.0    0   0.061
3.8 1.5 0   0.74
2.4 1.3 1   0.76
3.9 1.5 0   0.67
-1.2    -1.4    0   0.13
-2.9    -2.6    1   0.94
-6.1    -0.16   0   0.17
-3.2    3.4 1   0.82
0.062   1.1 1   0.98
-1.1    0.46    1   0.97
-2.6    -0.19   0   0.17
1.2 -0.71   0   0.072
-1.4    0.57    1   0.97
-1.9    3.1 0   0.086
-1.1    0.085   1   0.91
-1.5    3.2 0   0.13
1.7 1.2 1   0.91
-0.053  0.27    1   0.86
-1.5    -5.3    0   0.054
4.2 3.2 1   0.88
-0.41   0.15    1   0.87
-3.0    3.1 1   0.84
0.87    0.75    0   0.39
0.78    -0.89   0   0.058
2.1 0.77    1   0.85
0.52    -1.5    0   0.019
5.0 2.8 1   0.58
0.94    0.34    0   0.13
0.65    5.0 1   0.43
-1.1    -0.17   1   0.79
-1.6    -0.90   0   0.41
0.64    -0.61   0   0.095
-1.5    0.68    1   0.97
-1.2    -1.4    0   0.12
2.2 -2.0    1   0.96
-3.2    -4.3    0   0.080
1.1 3.7 0   0.15
-4.3    -3.7    0   0.62
3.7 1.7 0   0.56
0.94    3.6 0   0.14
-0.60   2.9 0   0.060
-4.3    -0.55   1   0.82
-1.5    0.11    1   0.90
3.4 -2.5    0   0.062
-0.26   0.073   1   0.80
-0.31   0.30    0   0.92
1.2 0.45    0   0.17
-0.72   0.53    1   0.97
0.48    -0.13   0   0.094
-0.27   5.1 1   0.92
2.1 4.8 1   0.47
0.45    -0.17   0   0.099
-2.7    0.027   0   0.15
-1.4    4.3 1   0.84
2.9 -3.5    0   0.28
-2.6    -3.0    1   0.77
2.4 2.6 0   0.093
1.3 0.25    0   0.16
4.4 -0.032  0   0.22
-3.3    3.1 1   0.94
-0.50   -0.42   1   0.68
-2.6    0.60    0   0.084
-2.3    -1.4    0   0.061
-0.67   0.026   1   0.85
-0.68   -3.9    1   0.80
1.7 3.0 0   0.19
-0.21   0.33    0   0.92
4.0 -3.2    0   0.21
-1.6    2.8 0   0.048
2.3 0.28    1   0.86
-1.1    2.9 0   0.063
0.76    -0.66   0   0.082
-0.98   -0.17   1   0.78
-2.9    -2.5    1   0.94
-0.90   0.47    1   0.97
5.7 2.3 1   0.92
0.75    1.5 1   0.84
-0.32   0.46    0   0.96
1.9 -2.6    1   0.99
-4.1    -0.17   1   0.83
4.6 0.67    0   0.14
3.6 4.0 1   0.53
-1.2    -1.0    0   0.38
-0.66   -3.5    1   0.83
-2.9    1.1 0   0.060
1.2 -0.62   0   0.090
-0.60   4.7 1   0.83
-0.38   3.6 0   0.30
0.54    -0.98   0   0.076
-4.7    0.41    1   0.72
3.9 4.7 1   0.80
1.8 1.8 1   0.87
1.9 3.2 0   0.18
2.7 0.22    1   0.87
2.8 -4.4    0   0.072
1.0 1.6 1   0.85
-3.1    -1.4    1   0.13
2.8 4.5 1   0.81
-1.6    2.4 0   0.035
3.0 -0.39   1   0.91
3.6 -2.5    0   0.033
0.35    0.020   0   0.14
-5.8    -1.3    0   0.049
2.9 2.7 0   0.088
0.051   3.5 0   0.29
-2.4    4.3 1   0.76
4.5 -1.1    0   0.039
5.2 2.4 1   0.54
-5.1    -3.0    0   0.87
-0.12   0.17    1   0.83
-5.7    -2.0    0   0.012
-1.3    -1.3    0   0.18
0.48    1.7 1   0.93
2.4 -1.1    1   0.84
-4.2    -1.4    1   0.090
-0.20   -0.29   0   0.68
3.4 4.8 1   0.82
-0.55   -0.23   1   0.70
0.62    -5.2    0   0.25
-2.0    -3.5    1   0.48
0.35    0.33    0   0.28
0.26    -5.0    0   0.11
-0.44   -3.0    1   0.95
-0.60   -4.7    0   0.24
-0.47   -0.41   1   0.69
0.13    0.44    0   0.83
2.0 -3.1    1   0.94
-3.5    2.2 1   0.99
-0.033  2.0 1   0.94
0.19    -1.7    0   0.077

We can also dump out the JSON representation of the best genome for future use.

json of best genome:
{"nodes":[0,0,2,1,4,10,7,5,7,6,5,13,5,13,9,3,5,7,7,6,9,13,11,13,4,6,13,6,10,9,7,13,11,9,10,11,3,6,4,13,7,3,4,11,13,3,9,4,9,9,5,5,3,4,9,10,4,10,3,13,10,9,5,7,9,9,7,10,5,4,4,11,6,9,4,13,11,5,13,3,3,6,9,10,13,11,7,5,4,6,10,7,6,5,10,5,6,13,9,7,9,5,4,11,7,6,5,9,10,3,10,4,9,3,6,5,13,6,4,9,13,13,11,11,11,7,13,6,6,3,7,3,4,3,6,5,4,13,7,6,10,6,9,6,10,7,9,9,7,7,7,6],"connections":[[0,3],[1,3],[2,3],[2,4],[4,3],[5,3],[1,6],[6,3],[2,7],[7,3],[1,8],[8,3],[1,4],[0,4],[2,9],[9,3],[2,10],[10,4],[3,4],[4,11],[11,3],[4,12],[12,3],[4,13],[13,3],[1,14],[14,5],[1,15],[15,3],[2,16],[16,4],[1,17],[17,3],[3,17],[3,18],[18,4],[0,10],[2,19],[19,3],[12,4],[2,20],[20,3],[3,15],[4,21],[21,3],[7,11],[1,16],[0,17],[1,7],[0,9],[0,11],[0,18],[11,19],[3,8],[7,22],[22,11],[18,23],[23,4],[23,19],[20,19],[18,10],[0,7],[2,24],[24,4],[20,9],[11,25],[25,3],[2,26],[26,4],[1,11],[3,12],[16,15],[3,16],[7,18],[11,4],[0,27],[27,10],[15,10],[25,17],[7,28],[28,3],[0,29],[29,4],[3,7],[3,19],[7,4],[7,24],[11,30],[30,3],[9,4],[4,31],[31,3],[7,31],[19,16],[21,19],[18,32],[32,4],[18,3],[28,8],[19,8],[12,7],[18,8],[20,16],[3,24],[2,33],[33,7],[19,13],[15,34],[34,3],[9,30],[17,4],[3,10],[13,12],[1,19],[11,35],[35,3],[11,17],[27,12],[25,10],[12,18],[2,36],[36,4],[17,37],[37,18],[19,7],[3,38],[38,4],[12,9],[2,39],[39,10],[39,30],[19,15],[10,9],[12,40],[40,4],[3,41],[41,4],[11,18],[2,12],[20,8],[4,42],[42,3],[20,26],[17,24],[2,43],[43,9],[20,15],[10,17],[2,44],[44,3],[15,8],[18,16],[35,45],[45,3],[12,10],[4,46],[46,12],[19,47],[47,3],[2,48],[48,19],[25,19],[15,24],[7,19],[16,19],[41,16],[24,32],[38,8],[25,9],[25,30],[1,12],[8,49],[49,3],[17,25],[11,9],[1,20],[18,19],[20,10],[0,50],[50,17],[9,51],[51,3],[30,52],[52,3],[11,53],[53,3],[38,12],[17,7],[18,54],[54,3],[4,55],[55,3],[3,56],[56,8],[41,7],[38,9],[12,20],[4,57],[57,31],[21,20],[24,9],[25,47],[2,58],[58,24],[27,59],[59,10],[19,60],[60,3],[3,32],[20,61],[61,30],[7,13],[16,62],[62,19],[43,62],[9,13],[7,38],[17,63],[63,3],[0,64],[64,3],[30,65],[65,3],[65,10],[17,11],[20,24],[1,43],[3,6],[0,66],[66,9],[16,21],[23,8],[12,67],[67,20],[3,63],[21,68],[68,3],[18,12],[13,16],[2,69],[69,4],[16,43],[0,70],[70,9],[18,71],[71,3],[2,72],[72,10],[3,37],[2,73],[73,24],[4,74],[74,13],[2,8],[15,25],[2,75],[75,43],[38,27],[11,13],[3,76],[76,38],[27,20],[15,41],[2,77],[77,3],[27,25],[41,9],[17,41],[2,78],[78,3],[20,79],[79,3],[41,38],[13,7],[20,27],[17,80],[80,3],[7,12],[34,10],[18,81],[81,3],[31,23],[43,82],[82,9],[10,7],[7,20],[18,83],[83,23],[1,42],[52,4],[43,49],[32,27],[55,24],[8,19],[7,84],[84,3],[50,4],[0,15],[37,36],[15,12],[20,12],[49,9],[3,85],[85,16],[17,10],[15,86],[86,3],[8,87],[87,49],[10,88],[88,4],[20,35],[36,50],[24,8],[3,72],[0,89],[89,27],[16,28],[2,90],[90,7],[1,91],[91,17],[18,92],[92,8],[19,18],[37,47],[37,11],[19,93],[93,8],[3,94],[94,15],[41,12],[59,24],[31,95],[95,3],[53,42],[23,29],[8,43],[0,96],[96,11],[3,83],[24,97],[97,4],[18,98],[98,4],[18,99],[99,19],[0,100],[100,11],[34,8],[1,13],[17,67],[33,15],[27,13],[18,25],[1,101],[101,8],[15,36],[1,102],[102,14],[0,20],[17,16],[60,20],[53,7],[15,103],[103,8],[10,103],[25,104],[104,3],[55,76],[19,27],[17,19],[70,41],[7,9],[27,9],[55,7],[43,61],[23,32],[11,29],[3,105],[105,94],[9,12],[30,8],[2,106],[106,26],[41,42],[2,23],[1,107],[107,16],[30,108],[108,65],[43,30],[31,16],[17,100],[16,109],[109,4],[109,7],[20,67],[65,38],[68,59],[12,22],[1,110],[110,8],[29,26],[18,68],[53,4],[19,111],[111,16],[16,30],[1,32],[78,41],[43,41],[25,24],[18,55],[3,112],[112,17],[25,38],[8,14],[36,33],[25,113],[113,19],[14,35],[88,40],[1,73],[0,114],[114,50],[81,32],[23,38],[23,11],[13,42],[15,18],[2,15],[20,115],[115,15],[43,3],[1,116],[116,20],[59,20],[19,117],[117,3],[17,8],[18,17],[3,118],[118,12],[76,58],[16,119],[119,4],[55,8],[10,120],[120,4],[56,49],[25,121],[121,3],[7,87],[79,18],[70,27],[10,71],[23,67],[19,122],[122,16],[3,67],[3,123],[123,15],[8,108],[16,8],[3,124],[124,4],[25,16],[39,25],[1,30],[9,125],[125,4],[17,15],[71,19],[43,4],[17,126],[126,3],[0,24],[15,127],[127,10],[16,13],[2,128],[128,19],[9,16],[41,55],[18,129],[129,23],[42,130],[130,3],[32,59],[2,131],[131,7],[25,26],[21,132],[132,3],[20,133],[133,26],[1,134],[134,16],[32,53],[15,22],[27,3],[51,15],[3,84],[16,135],[135,28],[10,135],[12,136],[136,40],[4,137],[137,13],[50,138],[138,4],[40,24],[10,13],[7,36],[4,139],[139,12],[4,140],[140,12],[37,33],[11,141],[141,4],[0,36],[18,142],[142,3],[17,143],[143,4],[53,12],[56,12],[8,27],[18,144],[144,71],[7,64],[19,11],[0,145],[145,11],[11,146],[146,4],[0,147],[147,4],[76,20],[18,43],[38,24],[20,148],[148,24],[62,13],[39,27],[7,149],[149,4],[22,21],[10,39],[63,27],[12,150],[150,9],[17,122],[24,63],[42,29],[23,151],[151,4],[25,53]],"nInput":2,"nOutput":1,"renderMode":1,"outputIndex":3,"genome":[{"0":0,"1":-0.1990809589624405,"2":1},{"0":1,"1":0.21869555115699768,"2":1},{"0":2,"1":0.2043716311454773,"2":1},{"0":3,"1":0.14809374511241913,"2":1},{"0":4,"1":-1.087314486503601,"2":1},{"0":8,"1":0.0205453522503376,"2":1},{"0":9,"1":-0.04641956835985184,"2":1},{"0":10,"1":1.4872020483016968,"2":1},{"0":11,"1":1.4378000497817993,"2":1},{"0":12,"1":0.6751543283462524,"2":1},{"0":13,"1":-0.30040982365608215,"2":1},{"0":14,"1":0.7950164675712585,"2":1},{"0":15,"1":-0.5342731475830078,"2":1},{"0":16,"1":-0.17131105065345764,"2":1},{"0":17,"1":-0.07076830416917801,"2":1},{"0":18,"1":0.7782223224639893,"2":1},{"0":19,"1":0.5447294116020203,"2":1},{"0":20,"1":-0.08170567452907562,"2":1},{"0":21,"1":0.3598742187023163,"2":1},{"0":22,"1":-0.31116485595703125,"2":1},{"0":23,"1":0.028425250202417374,"2":1},{"0":24,"1":-0.12196933478116989,"2":1},{"0":27,"1":0.8951428532600403,"2":1},{"0":28,"1":-0.555556058883667,"2":1},{"0":29,"1":0.26718467473983765,"2":1},{"0":30,"1":0.5671877861022949,"2":1},{"0":31,"1":1.263924241065979,"2":1},{"0":32,"1":1.2043015956878662,"2":1},{"0":33,"1":0.032340358942747116,"2":1},{"0":34,"1":1.1230087280273438,"2":1},{"0":35,"1":0.6186588406562805,"2":1},{"0":36,"1":0.013891514390707016,"2":1},{"0":37,"1":0.7881823182106018,"2":1},{"0":38,"1":0.2572149634361267,"2":1},{"0":39,"1":-0.042540960013866425,"2":1},{"0":40,"1":-0.1318652629852295,"2":1},{"0":41,"1":0.037087950855493546,"2":1},{"0":42,"1":1.2894037961959839,"2":1},{"0":43,"1":0.12854845821857452,"2":1},{"0":44,"1":0.06678406894207001,"2":1},{"0":45,"1":-0.2994729280471802,"2":1},{"0":46,"1":0.23728179931640625,"2":1},{"0":47,"1":-1.1762526035308838,"2":1},{"0":48,"1":0.22974562644958496,"2":1},{"0":49,"1":0.15653926134109497,"2":1},{"0":50,"1":0.15156395733356476,"2":1},{"0":51,"1":0.1427304446697235,"2":1},{"0":52,"1":-0.12434153258800507,"2":1},{"0":53,"1":-0.6717133522033691,"2":1},{"0":54,"1":0.47756823897361755,"2":1},{"0":55,"1":-0.1569730043411255,"2":1},{"0":56,"1":0.4789273142814636,"2":1},{"0":57,"1":-0.00844470877200365,"2":1},{"0":58,"1":0.04868080094456673,"2":1},{"0":59,"1":-2.0696122646331787,"2":1},{"0":60,"1":-0.1410132497549057,"2":1},{"0":61,"1":0.23149150609970093,"2":1},{"0":62,"1":0.01941116899251938,"2":1},{"0":63,"1":0.005565163679420948,"2":1},{"0":64,"1":0.6710184216499329,"2":1},{"0":65,"1":0.9918897747993469,"2":1},{"0":66,"1":0.17996558547019958,"2":1},{"0":67,"1":0.2343207448720932,"2":1},{"0":68,"1":0.40644747018814087,"2":1},{"0":69,"1":0.30471983551979065,"2":1},{"0":70,"1":-0.592862606048584,"2":1},{"0":71,"1":-0.025512976571917534,"2":1},{"0":72,"1":1.056725263595581,"2":1},{"0":73,"1":0.2726452648639679,"2":1},{"0":74,"1":-0.06482979655265808,"2":1},{"0":75,"1":0.5163955092430115,"2":1},{"0":76,"1":-0.057671159505844116,"2":1},{"0":77,"1":-0.13981005549430847,"2":1},{"0":81,"1":0.005874045193195343,"2":1},{"0":82,"1":-0.004793676547706127,"2":1},{"0":83,"1":0.08360494673252106,"2":1},{"0":84,"1":-0.06839484721422195,"2":1},{"0":85,"1":-0.4483039975166321,"2":1},{"0":87,"1":-0.14657175540924072,"2":1},{"0":88,"1":1.5776666402816772,"2":1},{"0":89,"1":0.08456038683652878,"2":1},{"0":90,"1":-0.5571848750114441,"2":1},{"0":91,"1":0.5082486867904663,"2":1},{"0":92,"1":0.5586816668510437,"2":1},{"0":93,"1":-0.011906222440302372,"2":1},{"0":94,"1":0.1740315556526184,"2":1},{"0":95,"1":0.32169249653816223,"2":1},{"0":96,"1":-0.0017324863001704216,"2":1},{"0":97,"1":0.9935621619224548,"2":1},{"0":99,"1":-0.36725908517837524,"2":1},{"0":102,"1":-0.037549372762441635,"2":1},{"0":107,"1":0.9271854758262634,"2":1},{"0":108,"1":0.39601290225982666,"2":1},{"0":109,"1":-1.8833800554275513,"2":1},{"0":111,"1":0.044900599867105484,"2":1},{"0":113,"1":-0.18416939675807953,"2":1},{"0":119,"1":-0.3248673975467682,"2":1},{"0":125,"1":0.362201988697052,"2":1},{"0":126,"1":0.09393918514251709,"2":1},{"0":127,"1":-0.09178516268730164,"2":1},{"0":128,"1":0.06234718859195709,"2":1},{"0":129,"1":0.5985479950904846,"2":1},{"0":130,"1":0.021276699379086494,"2":1},{"0":131,"1":-0.29562750458717346,"2":1},{"0":132,"1":0.11486413329839706,"2":1},{"0":138,"1":0.0030194332357496023,"2":1},{"0":140,"1":0.09719421714544296,"2":1},{"0":141,"1":-0.08085612952709198,"2":1},{"0":142,"1":-0.6262797117233276,"2":1},{"0":144,"1":1.1242427825927734,"2":1},{"0":145,"1":1.1261123418807983,"2":1},{"0":146,"1":0.23019663989543915,"2":1},{"0":147,"1":-0.21249212324619293,"2":1},{"0":150,"1":0.4426085650920868,"2":1},{"0":151,"1":-0.012566478922963142,"2":1},{"0":166,"1":0.10216055810451508,"2":1},{"0":167,"1":0.002114666160196066,"2":1},{"0":168,"1":0.06952373683452606,"2":1},{"0":169,"1":0.73763507604599,"2":1},{"0":174,"1":0.686951756477356,"2":1},{"0":175,"1":0.33801186084747314,"2":1},{"0":176,"1":1.625544548034668,"2":1},{"0":182,"1":0.5441470146179199,"2":1},{"0":183,"1":0.01081212516874075,"2":1},{"0":184,"1":1.6667057275772095,"2":1},{"0":185,"1":0.21002483367919922,"2":1},{"0":186,"1":-0.13505469262599945,"2":1},{"0":197,"1":0.6035367250442505,"2":1},{"0":198,"1":-0.02499118261039257,"2":1},{"0":199,"1":0.07102607190608978,"2":1},{"0":204,"1":0.6983110904693604,"2":1},{"0":205,"1":-0.20966453850269318,"2":1},{"0":209,"1":0.5569878220558167,"2":1},{"0":210,"1":0.09131519496440887,"2":1},{"0":212,"1":0.7038783431053162,"2":1},{"0":213,"1":0.5292423963546753,"2":1},{"0":214,"1":-0.18413729965686798,"2":1},{"0":217,"1":-0.20495472848415375,"2":1},{"0":218,"1":0.6364243626594543,"2":1},{"0":221,"1":0.6294803619384766,"2":1},{"0":222,"1":-0.01098803523927927,"2":1},{"0":223,"1":-0.08159161359071732,"2":1},{"0":228,"1":1.9151662588119507,"2":1},{"0":229,"1":-2.4764862060546875,"2":1},{"0":232,"1":0.6716621518135071,"2":1},{"0":233,"1":-0.038179345428943634,"2":1},{"0":234,"1":0.8860968947410583,"2":1},{"0":235,"1":0.5665239691734314,"2":1},{"0":236,"1":0.049489881843328476,"2":1},{"0":277,"1":-0.10214890539646149,"2":1},{"0":278,"1":-0.056237202137708664,"2":1},{"0":285,"1":0.2142965942621231,"2":1},{"0":289,"1":-0.2137589305639267,"2":1},{"0":343,"1":0.6094931364059448,"2":1},{"0":344,"1":0.23881424963474274,"2":1},{"0":345,"1":0.6699376702308655,"2":1},{"0":346,"1":0.42057374119758606,"2":1},{"0":347,"1":0.376840204000473,"2":1},{"0":348,"1":-0.2885461151599884,"2":1},{"0":350,"1":0.006199584808200598,"2":1},{"0":394,"1":0.6985927224159241,"2":1},{"0":395,"1":0.37702104449272156,"2":1},{"0":396,"1":0.052182964980602264,"2":1},{"0":397,"1":-0.35693320631980896,"2":1},{"0":400,"1":0.0739152655005455,"2":1},{"0":468,"1":0.05920691788196564,"2":1},{"0":470,"1":0.7456434369087219,"2":1},{"0":471,"1":-0.28268930315971375,"2":1},{"0":550,"1":-0.1338222771883011,"2":1}]}

License

MIT