OPAL (Object Oriented Parallel Accelerator Library)  2021.1.99
OPAL
IndependentBitMutation.h
Go to the documentation of this file.
1 //
2 // Struct IndependentBitMutation
3 // Mutate each gene with probability p
4 //
5 // Copyright (c) 2010 - 2013, Yves Ineichen, ETH Zürich
6 // All rights reserved
7 //
8 // Implemented as part of the PhD thesis
9 // "Toward massively parallel multi-objective optimization with application to
10 // particle accelerators" (https://doi.org/10.3929/ethz-a-009792359)
11 //
12 // This file is part of OPAL.
13 //
14 // OPAL is free software: you can redistribute it and/or modify
15 // it under the terms of the GNU General Public License as published by
16 // the Free Software Foundation, either version 3 of the License, or
17 // (at your option) any later version.
18 //
19 // You should have received a copy of the GNU General Public License
20 // along with OPAL. If not, see <https://www.gnu.org/licenses/>.
21 //
22 #include "boost/smart_ptr.hpp"
23 #include "Util/CmdArguments.h"
24 
25 template <class T> struct IndependentBitMutation
26 {
27  void mutate(boost::shared_ptr<T> ind, CmdArguments_t args) {
28 
29  const double probability =
30  args->getArg<double>("gene-mutation-probability", 0.5);
31 
32  for(size_t i = 0; i < ind->genes_m.size(); i++) {
33  double rval = static_cast<double>(rand() / (RAND_MAX + 1.0));
34  if(rval < probability) {
35  ind->new_gene(i);
36  }
37  }
38  }
39 };
boost::shared_ptr< CmdArguments > CmdArguments_t
Definition: CmdArguments.h:176
void mutate(boost::shared_ptr< T > ind, CmdArguments_t args)