public function calcFitness(Individual $individual) { $correctGenes = 0; for ($locus = 0; $locus < $individual->getChromosomeLength(); $locus++) { if ($individual->getGene($locus) == 1) { $correctGenes += 1; } } $fitness = (double) $correctGenes / $individual->getChromosomeLength(); $individual->setFitness($fitness); return $fitness; }
public function mutateUniform(Population $population, Element $element) { $newPopulation = new Population($population->size()); for ($populationIndex = 0; $populationIndex < $population->size(); $populationIndex++) { $individual = $population->getFittestIndividual($populationIndex); $randomIndividual = new Individual($element); for ($geneIndex = 0; $geneIndex < $individual->getChromosomeLength(); $geneIndex++) { if ($populationIndex >= $this->elitismCount) { if ($this->mutationRate > Random::generate()) { $individual->setGene($geneIndex, $randomIndividual->getGene($geneIndex)); } } } $newPopulation->setIndividual($populationIndex, $individual); } return $newPopulation; }