1.0.4 • Published 4 years ago

genetically v1.0.4

Weekly downloads
4
License
MIT
Repository
github
Last release
4 years ago

Build Status codecov npm bundle size GitHub issues GitHub last commit GitHub package.json version

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:

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.