From 87d4f082588ed906868ee922f6b7bdd178323ea8 Mon Sep 17 00:00:00 2001 From: nojhan Date: Tue, 10 Dec 2019 11:18:09 +0100 Subject: [PATCH] eoBitOp feat: access to preference, fix: use doubles and swap - Makes the `preference` member protected instead of private, which may be used for algorithms managing their internal parameters during search. - Replace float parameter with double, used everywhere else in the framework. - use std::swap instead of handmade swap. --- eo/src/ga/eoBitOp.h | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/eo/src/ga/eoBitOp.h b/eo/src/ga/eoBitOp.h index a95ec58f4..b5436327f 100644 --- a/eo/src/ga/eoBitOp.h +++ b/eo/src/ga/eoBitOp.h @@ -30,9 +30,10 @@ //----------------------------------------------------------------------------- -#include // swap_ranges +#include // swap_ranges + #include "../utils/eoRNG.h" -#include "../eoInit.h" // eoMonOp +#include "../eoInit.h" // eoMonOp #include "eoBit.h" @@ -187,7 +188,7 @@ template class eoBitMutation: public eoMonOp return changed_something; } - private: + protected: double rate; bool normalize; // divide rate by chromSize }; @@ -330,7 +331,7 @@ template class eoUBitXover: public eoQuadOp { public: /// (Default) Constructor. - eoUBitXover(const float& _preference = 0.5): preference(_preference) + eoUBitXover(const double& _preference = 0.5): preference(_preference) { if ( (_preference <= 0.0) || (_preference >= 1.0) ) std::runtime_error("UxOver --> invalid preference"); @@ -353,16 +354,17 @@ template class eoUBitXover: public eoQuadOp { if (chrom1[i] != chrom2[i] && eo::rng.flip(preference)) { - bool tmp = chrom1[i]; - chrom1[i]=chrom2[i]; - chrom2[i] = tmp; + // bool tmp = chrom1[i]; + // chrom1[i]=chrom2[i]; + // chrom2[i] = tmp; + std::swap(chrom1[i], chrom2[i]); changed = true; } } return changed; } - private: - float preference; + protected: + double preference; };