neat_net-js
v1.0.14
Published
A JavaScript library implementing the NEAT algorithm
Downloads
29
Maintainers
Readme
NEAT-JS
NeuroEvolution of Augmenting Topologies (NEAT) is a genetic algorithm (GA) for the generation of evolving artificial neural networks.
Getting Started:
Setting up the library:
If you are using Node.js you can import this library like so:
let { NEAT, activation, crossover, mutate } = require('neat_net-js');
If you are planning to use this library on the browser:
<script language="javascript" type="text/javascript" src="./lib/NEAT_browser.js"></script>
Basic Usage:
The basic usage of this library is as follows.
let config = {
model: [
{nodeCount: 5, type: "input"},
{nodeCount: 1, type: "output", activationfunc: activation.RELU}
],
mutationRate: 0.05,
crossoverMethod: crossover.RANDOM,
mutationMethod: mutate.RANDOM,
populationSize: 10
};
let neat = new NEAT(config);
Config parameters:
model: Defines the model your creatures are going to use.
mutationRate: Sets the mutation chance of the creatures. (Default: 0.05)
crossoverMethod: Sets the crossover method. (crossover.RANDOM or crossover.SLICE) (Default: crossover.RANDOM)
mutationMethod: Sets the mutation method. (only mutate.RANDOM for now) (Default: mutate.RANDOM)
populationSize: Sets the population size. (Default: 500)
Functions:
neat.doGen(); // Does one generation with mutation and crossover.
neat.setFitness(fitness, index); { // Sets a creature's score. This will then be normalized for actual fitness value.
neat.bestCreature(); // Returns the best creature from the last generation.
neat.setInputs(array, index); // Sets the inputs of the creature indexed as "index".
neat.getDesicions(); // Returns every creature's desicion in an array.
neat.feedForward(); // Feeds forward every creatıre's neural network.
neat.export(); // Exports all creatures for later training (See import() below) You can also pass an index to this function.
neat.import(data); // Imports creature(s) previously exported.
Contributing
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.