The existing Javascript GA/EP library landscape could collectively be summed up as, meh. All that I required to take over the world was a lightweight, performant, feature-rich, nodejs + browser compatible, unit tested, and easily hackable GA/EP library. Seamless Web Worker support would be the icing on my cake.
Until now, no such thing existed. Now you can have my cake, and optimize it too. Is it perfect? Probably. Regardless, this library is my gift to you.
Selects a pair of individuals from a population. Selection
generation(pop, gen, stats)
Boolean
Optional
Called for each generation. Return false to terminate end algorithm (ie- if goal state is reached)
notification(pop, gen, stats, isFinished)
Void
Optional
Runs in the calling context. All functions other than this one are run in a web worker.
Optimizer
The optimizer specifies how to rank individuals against each other based on an arbitrary fitness score. For example, minimizing the sum of squared error for a regression curve Genetic.Optimize.Minimize would be used, as a smaller fitness score is indicative of better fit.
Optimizer
Description
Genetic.Optimize.Minimizer
The smaller fitness score of two individuals is best
Genetic.Optimize.Maximizer
The greater fitness score of two individuals is best
Selection
An algorithm can be either genetic or evolutionary depending on which selection operations are used. An algorithm is evolutionary if it only uses a Single (select1) operator. If both Single and Pair-wise operations are used (and if crossover is implemented) it is genetic.
Select Type
Required
Description
select1 (Single)
Yes
Selects a single individual for survival from a population
select2 (Pair-wise)
Optional
Selects two individuals from a population for mating/crossover
Selection Operators
Single Selectors
Description
Genetic.Select1.Tournament2
Fittest of two random individuals
Genetic.Select1.Tournament3
Fittest of three random individuals
Genetic.Select1.Fittest
Always selects the Fittest individual
Genetic.Select1.Random
Randomly selects an individual
Genetic.Select1.RandomLinearRank
Select random individual where probability is a linear function of rank
Genetic.Select1.Sequential
Sequentially selects an individual
Pair-wise Selectors
Description
Genetic.Select2.Tournament2
Pairs two individuals, each the best from a random pair
Genetic.Select2.Tournament3
Pairs two individuals, each the best from a random triplett
Genetic.Select2.Random
Randomly pairs two individuals
Genetic.Select2.RandomLinearRank
Pairs two individuals, each randomly selected from a linear rank
Genetic.Select2.Sequential
Selects adjacent pairs
Genetic.Select2.FittestRandom
Pairs the most fit individual with random individuals
1
2
3
4
5
6
7
8
9
vargenetic=Genetic.create();// more likely allows the most fit individuals to survive between generationsgenetic.select1=Genetic.Select1.RandomLinearRank;// always mates the most fit individual with random individualsgenetic.select2=Genetic.Select2.FittestRandom;// ...
Configuration Parameters
Parameter
Default
Range/Type
Description
size
250
Real Number
Population size
crossover
0.9
[0.0, 1.0]
Probability of crossover
mutation
0.2
[0.0, 1.0]
Probability of mutation
iterations
100
Real Number
Maximum number of iterations before finishing
fittestAlwaysSurvives
true
Boolean
Prevents losing the best fit between generations
maxResults
100
Real Number
The maximum number of best-fit results that webworkers will send per notification