| 
<?php
 /*
 this example show how we can tweak crossover to choose only the best chromosome
 */
 
 require __DIR__ . '/../vendor/autoload.php'; // composer autoload
 
 class CustomGeneticAlgorithm extends \SimpleGeneticAlgorithm\SimpleGeneticAlgorithm{
 
 public function crossover(){
 $new_population = array();
 for($i = 0; $i < $this->options['population']; $i++){
 // get random parents
 $a = $this->population[array_rand($this->population, 1)]['chromosome'];
 $b = $this->population[array_rand($this->population, 1)]['chromosome'];
 $goal = $this->options['goal'];
 
 $a = str_split($a);
 $b = str_split($b);
 $goal = str_split($goal);
 
 // get the best chromosome otherwise random from parents
 $child = '';
 for($j = 0; $j < count($a); $j++){
 if($a[$j] == $goal[$j])
 $child .= $a[$j];
 elseif($b[$j] == $goal[$j])
 $child .= $b[$j];
 else
 $child .= rand(0, 1) == 0 ? $a[$j] : $b[$j];
 }
 $new_population[] = array(
 'chromosome' => $child,
 'fitness' => 0,
 );
 }
 
 $this->population = $new_population;
 }
 
 }
 
 $ga = new CustomGeneticAlgorithm(array(
 'mutation' => 25, // 25%
 'goal' => 'lorem ipsum',
 
 'delay' => 50, // ms, if debug is false, then delay forced to 0
 'debug' => true,
 ));
 
 $ga->run();
 
 |