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.
You can install the package via composer:
composer require darvin/genetic-algorithm
Algorithm needs settings to work, so lets starts with the default:
$config = new \Darvin\GeneticAlgorithm\Settings\DefaultSettings();
$algorithm = new Algorithm($config);
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)]);
});
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;
});
You can setup Events to listen and control Algorithm.
$algorithm->setPart("event:listen:algorithmStart", function (Algorithm $algorithm) {
echo "Algorithm start.\n";
});
$algorithm->setPart("event:listen:newSolutionFound", function (Algorithm $algorithm) {
echo "New solution found!";
});
Please see CONTRIBUTING for further details.
If you discover any security related issues, please email [email protected] instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.