79 lines
3.2 KiB
Markdown
79 lines
3.2 KiB
Markdown
|
description: List of selection methods in Neataptic
|
||
|
authors: Thomas Wagenaar
|
||
|
keywords: genetic-algorithm, fitness, elitism, selection
|
||
|
|
||
|
[Selection](https://en.wikipedia.org/wiki/Selection_(genetic_algorithm)) is the
|
||
|
way in which a genetic algorithm decides which neural networks will be parents
|
||
|
for the new generation. There are a couple of selection methods, however only a
|
||
|
few have been integrated until now.
|
||
|
|
||
|
At the moment, there are 3 built-in selection methods:
|
||
|
|
||
|
Name |
|
||
|
---- |
|
||
|
selection.POWER |
|
||
|
selection.FITNESS_PROPORTIONATE |
|
||
|
selection.TOURNAMENT |
|
||
|
|
||
|
_A description on how each of these work is given below_
|
||
|
|
||
|
### Usage
|
||
|
You can specify your selection method while calling the `evolve()` function on a
|
||
|
network or when constructing a new instance of the `NEAT` algorithm:
|
||
|
|
||
|
```javascript
|
||
|
var myNetwork = new architect.Perceptron(1,1,1);
|
||
|
var myTrainingSet = [{ input:[0], output:[1]}, { input:[1], output:[0]}];
|
||
|
|
||
|
myNetwork.evolve(myTrainingSet, {
|
||
|
generations: 10,
|
||
|
selection: methods.selection.POWER // eg.
|
||
|
});
|
||
|
```
|
||
|
|
||
|
Next to selection methods, `elitism` is also built in the `NEAT` constructor.
|
||
|
[Elitism](https://en.wikipedia.org/wiki/Genetic_algorithm#Elitism) allows a
|
||
|
genetic algorithm to pass on `n` neural networks with the highest fitness from
|
||
|
the previous generation to the new generation, without any crossover steps in
|
||
|
between. At the moment, elitism is only possible inside a `Neat` object. They
|
||
|
can be passed on as follows:
|
||
|
|
||
|
```javascript
|
||
|
var evolution = new Neat({
|
||
|
selection: methods.selection.FITNESS_PROPORTIONATE,
|
||
|
elitism: 5 // amount of neural networks to keep from generation to generation
|
||
|
});
|
||
|
```
|
||
|
|
||
|
#### methods.selection.POWER
|
||
|
When using this selection method, a random decimal value between 0 and 1 will
|
||
|
be generated. E.g. `0.5`, then this value will get an exponential value, the
|
||
|
default power is `4`. So `0.5**4 = 0.0625`. This will be converted into an index
|
||
|
for the array of the current population, which is sorted from fittest to worst.
|
||
|
|
||
|
**Config:**
|
||
|
|
||
|
* _methods.selection.POWER.power_ : default is `4`. Increasing this value will
|
||
|
increase the chance fitter genomes are chosen.
|
||
|
|
||
|
#### methods.selection.FITNESS_PROPORTIONATE
|
||
|
This selection method will select genomes with a probability proportionate to their fitness:
|
||
|
|
||
|
![Formula](https://wikimedia.org/api/rest_v1/media/math/render/svg/89d0cb75150cdb5ad94ba7b168f217f9c290ee09)
|
||
|
|
||
|
Read more about roulette selection [here](https://en.wikipedia.org/wiki/Fitness_proportionate_selection).
|
||
|
|
||
|
#### methods.selection.TOURNAMENT
|
||
|
This selection method will select a group of genomes from the population randomly,
|
||
|
sort them by score, and choose the fittest individual with probability `p`, the
|
||
|
second fittest with probability `p*(1-p)`, the third fittest with probability
|
||
|
`p*((1-p)^2)`and so on. Read more [here](https://en.wikipedia.org/wiki/Tournament_selection).
|
||
|
|
||
|
**Config:**
|
||
|
|
||
|
* _methods.selection.TOURNAMENT.size_ : default is `5`. Must always be lower than
|
||
|
the population size. A higher value will result in a population that has more
|
||
|
equal, but fitter, parents.
|
||
|
* _methods.selection.TOURNAMENT.probability_ : default is `0.5`. See the
|
||
|
explanation above on how it is implemented.
|