darvin/genetic-algorithm

A PHP Library inspired by Charles Darwin's theory

v1.0.3 2020-03-21 02:08 UTC

This package is auto-updated.

Last update: 2024-12-07 23:36:20 UTC


README

Genetic Algorithm

Latest Version on Packagist Quality Score Code Grade License

This package allows you to use Genetic Algorithms in your projects. It will help high-quality solutions to optimization and search problems by relying on biologically inspired operators such as mutation, crossover and selection.

The simplest algorithm represents each chromosome as a bit string. Though it is possible to use any php data types Float, String, Booleans, Array, Object.

Installation

You can install the package via composer:

composer require darvin/genetic-algorithm

Usage

Settings

Algorithm needs settings to work, so lets starts with the default:

$config = new \Darvin\GeneticAlgorithm\Settings\DefaultSettings();
$algorithm = new Algorithm($config);

Individual Generation

An individual is characterized by a set of parameters (variables) known as Genes. Lets say that we encode the genes in a chromosome.

$algorithm->setPart("individual:gene", function (Gene $gene) {
    $characters = str_split('abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()-+,. ');
    $gene->value($characters[rand(0, count($characters)-1)]);
});

Fitness Function

The fitness function determines how fit an individual is (the ability of an individual to compete with other individuals). It gives a fitness score to each individual. The probability that an individual will be selected for reproduction is based on its fitness score.

$algorithm->setPart("fitness", function (Individual $individual) use ($solution) {
    $fitness = 0;
    for ($i=0; $i < $individual->genomeSize() && $i < count($solution); $i++) {
        $char_diff=abs(ord($individual->getGene($i)->value) - ord($solution[$i]));
        $fitness+=$char_diff;
    }
    return $fitness;
});

Events

You can setup Events to listen and control Algorithm.

Algorithm Start
$algorithm->setPart("event:listen:algorithmStart", function (Algorithm $algorithm) {
    echo "Algorithm start.\n";
});
New Solution
$algorithm->setPart("event:listen:newSolutionFound", function (Algorithm $algorithm) {
    echo "New solution found!";
});

Contributing

Please see CONTRIBUTING for further details.

Security

If you discover any security related issues, please email edeminteractive@gmail.com instead of using the issue tracker.

License

The MIT License (MIT). Please see License File for more information.