| 103 | } |
| 104 | |
| 105 | Population Population::crossover(PairSelection const& _selection, std::function<Crossover> _crossover) const |
| 106 | { |
| 107 | std::vector<Individual> crossedIndividuals; |
| 108 | for (auto const& [i, j]: _selection.materialise(m_individuals.size())) |
| 109 | { |
| 110 | auto childChromosome = _crossover( |
| 111 | m_individuals[i].chromosome, |
| 112 | m_individuals[j].chromosome |
| 113 | ); |
| 114 | crossedIndividuals.emplace_back(std::move(childChromosome), *m_fitnessMetric); |
| 115 | } |
| 116 | |
| 117 | return Population(m_fitnessMetric, crossedIndividuals); |
| 118 | } |
| 119 | |
| 120 | std::tuple<Population, Population> Population::symmetricCrossoverWithRemainder( |
| 121 | PairSelection const& _selection, |
no test coverage detected