31 #ifndef SHARK_ALGORITHMS_DIRECTSEARCH_OPERATORS_SELECTION_ELITIST_SELECTION_H 32 #define SHARK_ALGORITHMS_DIRECTSEARCH_OPERATORS_SELECTION_ELITIST_SELECTION_H 43 template<
typename Extractor >
52 template<
typename InIterator,
typename OutIterator>
54 InIterator it, InIterator itE,
55 OutIterator out, OutIterator outE
58 std::vector<KeyValuePair<double, InIterator> > results = order(it, itE);
59 if(results.size() < outputSize){
60 throw SHARKEXCEPTION(
"[ElitistSelection] Input range must be bigger than output range");
63 for(std::size_t i = 0; i != outputSize; ++i, ++out){
64 *out = *results[i].value;
74 template<
typename Population>
79 typedef typename Population::iterator InIterator;
80 std::vector<KeyValuePair<double, InIterator> > results = order(population.begin(),population.end());
82 for(std::size_t i = 0; i != mu; ++i){
83 results[i].value->select()=
true;
85 for(std::size_t i = mu; i != results.size(); ++i){
86 results[i].value->select() =
false;
92 template<
class InIterator>
93 std::vector<KeyValuePair<double, InIterator> > order(InIterator it, InIterator itE){
96 std::vector<KeyValuePair<double, InIterator> > individuals(size);
97 for(std::size_t i = 0; i !=
size; ++i){
98 individuals[i].key = e(*(it+i));
99 individuals[i].value = it+i;
101 std::sort( individuals.begin(), individuals.end());