function buildChilds() { $indiv = new individual(); for ($i = 1; $i <= $this->population; $i++) { $g_value = $this->mutate($this->arr_individual[$i]->gene_value); $f_value = $this->fitness($g_value); $indiv->set($g_value, $f_value, $this->date); $this->arr_offspring[$i] = $indiv; $this->date++; } $this->currentGeneration++; }
private static function crossover($indiv1, $indiv2) { $newSol = new individual(); //create a offspring // Loop through genes for ($i = 0; $i < $indiv1->size(); $i++) { // Crossover at which point 0..1 , .50 50% of time if (algorithm::random() <= algorithm::$uniformRate) { $newSol->setGene($i, $indiv1->getGene($i)); } else { $newSol->setGene($i, $indiv2->getGene($i)); } } return $newSol; }
function __construct($populationSize, $initialise = false) { if (!isset($populationSize) || $populationSize == 0) { die("Must specify a populationsize > 0"); } for ($i = 0; $i < $populationSize; $i++) { $this->people[$i] = new individual(); } //instantiate a new object // Initialise population if ($initialise) { // Loop and create individuals for ($i = 0; $i < count($this->people); $i++) { $new_person = new individual(); $new_person->generateIndividual(count(fitnesscalc::$solution)); $this->saveIndividual($i, $new_person); } } }