OPAL (Object Oriented Parallel Accelerator Library)  2.2.0
OPAL
SimulatedBinaryCrossover.h
Go to the documentation of this file.
1 #include <cmath>
2 
3 #include "boost/smart_ptr.hpp"
4 #include "Util/CmdArguments.h"
5 
12 template <class T> struct SimulatedBinaryCrossover
13 {
14  void crossover(boost::shared_ptr<T> ind1, boost::shared_ptr<T> ind2,
15  CmdArguments_t args) {
16 
17  double nu_c = args->getArg<double>("simbin-crossover-nu", 2.0, false);
18 
19  for(std::size_t i = 0; i < ind1->genes_m.size(); i++) {
20 
21  double ui = (double) rand() / (RAND_MAX + 1.0);
22  double beta_qi = 0.0;
23  if(ui <= 0.5) {
24  beta_qi = pow(2 * ui, 1.0/(nu_c + 1.0));
25  } else {
26  beta_qi = pow(1.0/(2 * (1.0 - ui)), 1.0/(nu_c + 1.0));
27  }
28 
29  double ming = std::min(ind1->genes_m[i], ind2->genes_m[i]);
30  double maxg = std::max(ind1->genes_m[i], ind2->genes_m[i]);
31 
32  ind1->genes_m[i] = 0.5 * ((1 + beta_qi) * ming + (1 - beta_qi) * maxg);
33  ind2->genes_m[i] = 0.5 * ((1 - beta_qi) * ming + (1 + beta_qi) * maxg);
34  }
35  }
36 };
void crossover(boost::shared_ptr< T > ind1, boost::shared_ptr< T > ind2, CmdArguments_t args)
T::PETE_Expr_t::PETE_Return_t max(const PETE_Expr< T > &expr, NDIndex< D > &loc)
Definition: ReductionLoc.h:123
boost::shared_ptr< CmdArguments > CmdArguments_t
Definition: CmdArguments.h:169
Tps< T > pow(const Tps< T > &x, int y)
Integer power.
Definition: TpsMath.h:76
T::PETE_Expr_t::PETE_Return_t min(const PETE_Expr< T > &expr, NDIndex< D > &loc)
Definition: ReductionLoc.h:95