# genetically

A Genetic Algorithm library designed for typescript

## Usage no npm install needed!

``````<script type="module">
import genetically from 'https://cdn.skypack.dev/genetically';
</script>``````      # Genetically

A Genetic Algorithm library designed for typescript

Live example and informations about genetically can be founds in the demonstration

## Install

Using npm :

``````\$ npm install -S genetically
``````

## Examples

Take a look at the examples on simple functions made for optimization problems:

• Linear function `f(x) = -x²`
• Cube function `f(x) = x³`
• Booth function `f(x, y) = (x + 2y - 7) ** 2 + (2x + y - 5) ** 2`
• Baele function `f(x, y) = (1.5 - x - x*y) ** 2 + (2.25 - x + (x*y) ** 2) ** 2 + (2.625 - x + (x*y) ** 3) ** 2`

## Usage

Simple use case

``````import {GeneticAlgorithm} from 'genetically';

const genetic = new GeneticAlgorithm<number, string>(
encodeFunction,
decodeFunction,
randomValueFunction,
fitnessFunction,
configurationObject
);

genetic.run();
``````

More complex usage with the LinearGeneticAlgorithm example.

``````import {
createEncodeFunctionOfBase,
FitnessFunctionObjective,
GeneticAlgorithm,
LinearGeneticAlgorithm,
} from './genetically';

// Create a GeneticAlgorithm Object from a test function
const gaLinear = LinearGeneticAlgorithm();
gaLinear.run();
gaLinear.display();

// Or create you own genetic algorithm

/**
* Random starting value
*/
const randomValue = () => Math.floor(Math.random() * 64) - 32;

/**
* Transform x
* start is [-32, 32]
* end is   [000000, 111111]
*/
const encoder6 = createEncodeFunctionOfBase(2, 6);
const encode = (x: number) => encoder6(x + 32);

/**
* Transform x
* start is [000000, 111111]
* end is [-32, 32]
*/
const decode = (x: string) => parseInt(x, 2) - 32;

/**
* Function to optimize
* f(x) = x²
*/
const fitness = (i: number) => -1 * i ** 2;

// Make the genetic algorithm object
const ga = new GeneticAlgorithm<number, string>(
encode,
decode,
randomValue,
fitness,
{
objective: FitnessFunctionObjective.MINIMIZE,
}
);

// Compute the fitness of the population and display it
ga.runPopulation();
ga.display();

// Evolve the population
ga.run();

// After the evolution is complete, display it

console.log('End evolution');
ga.display();
``````

## Documentation

Please take a look at the documentation for references on how to use the library.