MCPcopy Create free account
hub / github.com/argotorg/solidity / select

Method select

tools/yulPhaser/GeneticAlgorithms.cpp:141–175  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

139}
140
141Population ClassicGeneticAlgorithm::select(Population _population, size_t _selectionSize)
142{
143 if (_population.individuals().size() == 0)
144 return _population;
145
146 size_t maxFitness = 0;
147 for (auto const& individual: _population.individuals())
148 maxFitness = std::max(maxFitness, individual.fitness);
149
150 size_t rouletteRange = 0;
151 for (auto const& individual: _population.individuals())
152 // Add 1 to make sure that every chromosome has non-zero probability of being chosen
153 rouletteRange += maxFitness + 1 - individual.fitness;
154
155 std::vector<Individual> selectedIndividuals;
156 for (size_t i = 0; i < _selectionSize; ++i)
157 {
158 size_t ball = SimulationRNG::uniformInt(0, rouletteRange - 1);
159
160 size_t cumulativeFitness = 0;
161 for (auto const& individual: _population.individuals())
162 {
163 size_t pocketSize = maxFitness + 1 - individual.fitness;
164 if (ball < cumulativeFitness + pocketSize)
165 {
166 selectedIndividuals.push_back(individual);
167 break;
168 }
169 cumulativeFitness += pocketSize;
170 }
171 }
172
173 assert(selectedIndividuals.size() == _selectionSize);
174 return Population(_population.fitnessMetric(), selectedIndividuals);
175}

Callers 1

runNextRoundMethod · 0.45

Calls 3

fitnessMetricMethod · 0.80
PopulationClass · 0.70
sizeMethod · 0.45

Tested by

no test coverage detected