32 #ifndef SHARK_ALGORITHMS_DIRECTSEARCH_OPERATORS_SELECTION_EP_TOURNAMENT_H
33 #define SHARK_ALGORITHMS_DIRECTSEARCH_OPERATORS_SELECTION_EP_TOURNAMENT_H
43 template<
typename FitnessType >
47 typedef FitnessType fitness_type;
66 InIterator offspringE,
69 std::size_t tournamentSize ) {
74 std::size_t noOffspring =
std::distance( offspring, offspringE );
75 std::size_t totalSize = noParents + noOffspring;
77 std::vector< InIterator > view( totalSize );
78 typename std::vector< InIterator >::iterator itv = view.begin();
80 for( InIterator it = parents; it != parentsE; ++it, ++itv ) {
83 for( std::size_t round = 0; round < tournamentSize; round++ ) {
84 std::size_t idx = shark::Rng::discrete( 0, totalSize-1 );
85 it->fitness(
shark::tag::ScaledFitness() )( 0 ) += comp( *it, *( idx < noParents ? parents + idx : offspring + idx - noParents ) ) ? 1. : 0.;
89 for( InIterator it = offspring; it != offspringE; ++it, ++itv ) {
92 for( std::size_t round = 0; round < tournamentSize; round++ ) {
93 std::size_t idx = shark::Rng::discrete( 0, totalSize-1 );
94 it->fitness(
shark::tag::ScaledFitness() )( 0 ) += comp( *it, *( idx < noParents ? parents + idx : offspring + idx - noParents ) ) ? 1. : 0.;
101 for( ; out != outE; ++out, ++itv )
118 std::size_t tournamentSize ) {
119 (*this)( parents.begin(), parents.end(), offspring.begin(), offspring.end(), out.begin(), out.end(), tournamentSize );