Added a new xover to varlenxover

This commit is contained in:
jmerelo 2001-03-21 13:35:10 +00:00
commit 8ff63ff776
2 changed files with 32 additions and 2 deletions

View file

@ -21,7 +21,7 @@
Contact: todos@geneura.ugr.es, http://geneura.ugr.es
Marc.Schoenauer@polytechnique.fr
mak@dhi.dk
CVS Info: $Date: 2001-03-21 13:09:47 $ $Header: /home/nojhan/dev/eodev/eodev_cvs/eo/src/eoVariableLengthCrossover.h,v 1.5 2001-03-21 13:09:47 jmerelo Exp $ $Author: jmerelo $
CVS Info: $Date: 2001-03-21 13:35:09 $ $Header: /home/nojhan/dev/eodev/eodev_cvs/eo/src/eoVariableLengthCrossover.h,v 1.6 2001-03-21 13:35:09 jmerelo Exp $ $Author: jmerelo $
*/
//-----------------------------------------------------------------------------
@ -147,6 +147,36 @@ private:
unsigned Min, Max;
eoAtomExchange<AtomType> & atomExchange;
};
/** Exchange Crossover using an AtomExchange
*/
template <class EOT>
class eoInnerExchangeQuadOp : public eoQuadOp<EOT>
{
public :
typedef typename EOT::AtomType AtomType;
// default ctor: requires bounds on number of genes + a rate
eoInnerExchangeQuadOp( eoQuadOp<AtomType>& _op, float _rate = 0.5):
op(_op), rate( _rate ) {}
bool operator()(EOT & _eo1, EOT & _eo2)
{
unsigned size1 = _eo1.size(), size2 = _eo2.size(), minsize = ( size1 > size2)?size2:size1;
bool changed = false;
for ( unsigned i = 0; i < minsize; i ++ ) {
if ( rng.flip( rate ) ) {
bool changedHere = op( _eo1[i], _eo2[i] );
changed |= changedHere;
}
}
return changed; // should we test that? Yes, but no time now
}
private:
float rate;
eoQuadOp<AtomType> & op;
};

View file

@ -24,7 +24,7 @@
*/
//-----------------------------------------------------------------------------
/**
CVS Info: $Date: 2001-02-13 22:35:07 $ $Header: /home/nojhan/dev/eodev/eodev_cvs/eo/src/utils/eoParser.h,v 1.7 2001-02-13 22:35:07 jmerelo Exp $ $Author: jmerelo $ $Log$
CVS Info: $Date: 2001-03-21 13:35:10 $ $Version$ $Author: jmerelo $
*/
#ifndef eoParser_h
#define eoParser_h