Giter Site home page Giter Site logo

backprop-neat-js's Introduction

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

backprop-neat-js's People

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.