Exemplo n.º 1
0
 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;
 }
Exemplo n.º 2
0
 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;
 }