diff --git a/eo/src/ga/eoBitOp.h b/eo/src/ga/eoBitOp.h index d1247020..15d77434 100644 --- a/eo/src/ga/eoBitOp.h +++ b/eo/src/ga/eoBitOp.h @@ -56,7 +56,7 @@ template class eoOneBitFlip: public eoMonOp bool operator()(Chrom& chrom) { unsigned i = eo::rng.random(chrom.size()); - chrom[i] = (chrom[i]) ? false : true; + chrom[i] = !chrom[i]; return true; } }; @@ -85,11 +85,11 @@ template class eoDetBitFlip: public eoMonOp */ bool operator()(Chrom& chrom) { - // does not check for duplicate: if someone volunteers .... + // for duplicate checking see eoDetSingleBitFlip for (unsigned k=0; k class eoDetBitFlip: public eoMonOp }; +/** eoDetSingleBitFlip --> changes exactly k bits with checking for duplicate +\class eoDetSingleBitFlip eoBitOp.h ga/eoBitOp.h +\ingroup bitstring +*/ + +template class eoDetSingleBitFlip: public eoMonOp +{ + public: + /** + * (Default) Constructor. + * @param _num_bit The number of bits to change + * default is one - equivalent to eoOneBitFlip then + */ + eoDetSingleBitFlip(const unsigned& _num_bit = 1): num_bit(_num_bit) {} + + /// The class name. + virtual std::string className() const { return "eoDetSingleBitFlip"; } + + /** + * Change num_bit bits. + * @param chrom The cromosome which one bit is going to be changed. + */ + bool operator()(Chrom& chrom) + { + std::vector< unsigned > selected; + + // check for duplicate + for (unsigned k=0; k classical mutation \class eoBitMutation eoBitOp.h ga/eoBitOp.h \ingroup bitstring