$fitnessScores[$parentIndex2] ? $population[$parentIndex1] : $population[$parentIndex2]; } // Crossover and mutation to create next generation $newPopulation = []; for ($i = 0; $i < $populationSize; $i += 2) { $crossover = ($crossover)($parents[$i], $parents[$i + 1], $parameterCount); $child1 = ($mutate)($crossover[0], $mutationRate); $child2 = ($mutate)($crossover[1], $mutationRate); $newPopulation[] = $child1; $newPopulation[] = $child2; } $population = $newPopulation; } $fitnesses = []; foreach ($population as $parameters) { $fitnesses[$population] = ($fitness)($parameters); } \asort($fitnesses); return [ 'solutions' => $population, 'fitnesses' => $fitnesses, ]; } }