19 #include <utility/pointer/ReferenceCount.hh>
23 #include <utility/vector1.hh>
24 #include <numeric/random/random.hh>
26 #include <numeric/random/random.fwd.hh>
30 #include <utility/exit.hh>
34 namespace genetic_algorithm {
89 core::Size num_to_swap(numeric::random::random_range(1, traits1.size()-1));
91 for ( EntityElements::iterator
92 it1( traits1.begin() ), it2( traits2.begin() ),
93 end1( traits1.end() ), end2( traits2.end() );
94 (it1 != end1) && (it2 != end2); ++it1, ++it2 ) {
95 core::Real probability_of_swap =
static_cast<core::Real>(num_to_swap)/static_cast<core::Real>(num_remaining);
96 if ( probability_of_swap >= numeric::random::uniform() ) {
115 for ( EntityElements::iterator it( traits.begin() ),
end( traits.end() );
117 if ( this->
mutation_rate() < numeric::random::uniform() )
continue;
118 *it =
choices_[
static_cast< core::Size >( numeric::random::uniform() * size_choices ) + 1 ];
143 assert( traits.size() ==
choices_.size() );
145 for ( EntityElements::iterator
146 it( traits.begin() ),
end( traits.end() ); it !=
end;
147 ++it, ++choice_it ) {
148 if ( this->
mutation_rate() < numeric::random::uniform() )
continue;
149 core::Size const size_choices( choice_it->size() );
150 *it = (*choice_it)[
static_cast< core::Size >( numeric::random::uniform() * size_choices ) + 1 ];
161 if ( it ==
choices_.begin() )
continue;