darvin / genetic-algorithm
A PHP Library inspired by Charles Darwin's theory
This package is auto-updated.
Last update: 2024-12-07 23:36:20 UTC
README
Genetic Algorithm
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.