OPAL (Object Oriented Parallel Accelerator Library) 2022.1
OPAL
NaiveUniformCrossover.h
Go to the documentation of this file.
1//
2// Struct NaiveUniformCrossover
3// Decide for each gene if swapped with other gene.
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
25template <class T> struct NaiveUniformCrossover
26{
27 void crossover(boost::shared_ptr<T> ind1, boost::shared_ptr<T> ind2,
28 CmdArguments_t /*args*/) {
29
30 Individual::genes_t genes_ind2 = ind2->genes_m;
31
32 for(std::size_t i = 0; i < ind1->genes_m.size(); i++) {
33 int choose = (int) (2.0 * (double) rand() / (RAND_MAX + 1.0));
34 if(choose == 1) {
35 ind2->genes_m[i] = ind1->genes_m[i];
36 ind1->genes_m[i] = genes_ind2[i];
37 }
38 }
39 }
40};
boost::shared_ptr< CmdArguments > CmdArguments_t
Definition: CmdArguments.h:176
std::vector< double > genes_t
representation of genes
Definition: Individual.h:43
void crossover(boost::shared_ptr< T > ind1, boost::shared_ptr< T > ind2, CmdArguments_t)