OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
NaiveOnePointCrossover.h
Go to the documentation of this file.
1 #include "boost/smart_ptr.hpp"
2 #include "Util/CmdArguments.h"
3 
4 template <class T> struct NaiveOnePointCrossover
5 {
6  void crossover(boost::shared_ptr<T> ind1, boost::shared_ptr<T> ind2,
7  CmdArguments_t args) {
8 
9  typedef typename T::genes_t genes_t;
10  genes_t genes_ind2;
11  genes_ind2 = ind2->genes_m;
12 
13  // determine crossover position u.a.r.
14  size_t position = static_cast<size_t>(
15  ((double) ind1->genes_m.size() * (double) rand() / (RAND_MAX + 1.0))
16  );
17 
18  for(size_t i = position; i < ind1->genes_m.size(); i++) {
19  ind2->genes_m[i] = ind1->genes_m[i];
20  ind1->genes_m[i] = genes_ind2[i];
21  }
22  }
23 };
boost::shared_ptr< CmdArguments > CmdArguments_t
Definition: CmdArguments.h:169
void crossover(boost::shared_ptr< T > ind1, boost::shared_ptr< T > ind2, CmdArguments_t args)