From 3074101d1c18cb8a7fbbc2238bac92bf24154fa2 Mon Sep 17 00:00:00 2001 From: evomarc Date: Tue, 2 Jan 2001 13:27:11 +0000 Subject: [PATCH] Adding eoDetSelect, deterministic batch selection, that copies the individuals one after the other. Should shuffle them in between (TODO). --- eo/src/eoDetSelect.h | 85 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 85 insertions(+) create mode 100644 eo/src/eoDetSelect.h diff --git a/eo/src/eoDetSelect.h b/eo/src/eoDetSelect.h new file mode 100644 index 000000000..130f7dba7 --- /dev/null +++ b/eo/src/eoDetSelect.h @@ -0,0 +1,85 @@ +/** -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*- + + ----------------------------------------------------------------------------- + eoDetSelect.h + (c) Merc Schoenauer, Maarten Keijzer, GeNeura Team, 2000 + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + + Contact: todos@geneura.ugr.es, http://geneura.ugr.es + Marc.Schoenauer@polytechnique.fr + mkeijzer@dhi.dk + */ +//----------------------------------------------------------------------------- + +#ifndef _eoDetSelect_h +#define _eoDetSelect_h + + +//----------------------------------------------------------------------------- +#include +#include +#include +//----------------------------------------------------------------------------- + +/** eoDetSelect selects many individuals determinisctically +*/ +template +class eoDetSelect : public eoSelect +{ + public: + /// init + eoDetSelect(double _rate = 1.0, bool _interpret_as_rate = true) + : howMany(_rate, _interpret_as_rate) {} + + /** + @param _source the source population + @param _dest the resulting population (size of this population is + given by the HowMany data + It empties the destination and adds the selection into it) + */ + virtual void operator()(const eoPop& _source, eoPop& _dest) + { + unsigned int pSize = _source.size(); + size_t target = howMany(pSize); + + _dest.resize(target); + + unsigned remain = target % pSize; + unsigned entireCopy = target / pSize; + eoPop::iterator it = _dest.begin(); + + if (target >= pSize) + { + for (unsigned i=0; i