⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eomggreplacement.h

📁 这是linux下的进化计算的源代码。 === === === === === === === === === === === ===== check latest news at http:
💻 H
字号:
/** -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-   -----------------------------------------------------------------------------   eoMGGReplacement.h    (c) Maarten Keijzer, Marc Schoenauer, 2002    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: Marc.Schoenauer@inria.fr             mkeijzer@dhi.dk *///-----------------------------------------------------------------------------#ifndef _eoMGGReplacement_h#define _eoMGGReplacement_h//-----------------------------------------------------------------------------#include <eoPop.h>#include <eoFunctor.h>#include <eoMerge.h>#include <eoReduce.h>#include <utils/eoHowMany.h>#include <eoReduceSplit.h>//-----------------------------------------------------------------------------/**eoMGGReplacement is an eoReplacement:- choose N (2) parents RANDOMLY - remove them from the parent population- select best offspring, add to parents- merge (other?) offspring and the N removed parents- select best N-1 of this merged population (detTournament only at the moment)- put them back into parent population*/template <class EOT>class eoMGGReplacement : public eoReplacement<EOT>{public:  eoMGGReplacement(eoHowMany _howManyEliminatedParents = eoHowMany(2, false),		   unsigned _tSize=2) :    // split truncates the parents and returns eliminated parents    split(_howManyEliminatedParents, true),     tSize(_tSize)  {    if (tSize < 2)      { 	std::cout << "Warning, Size for eoDetTournamentTruncateSplit adjusted to 2\n";	tSize = 2;      }  }        void operator()(eoPop<EOT> & _parents, eoPop<EOT> & _offspring)    {      eoPop<EOT> temp;      split(_parents, temp);      unsigned toKeep = temp.size(); // how many to keep from merged populations      // minimal check      if (toKeep < 2)	throw std::runtime_error("Not enough parents killed in eoMGGReplacement");      // select best offspring      typename eoPop<EOT>::iterator it = _offspring.it_best_element();      // add to parents      _parents.push_back(*it);      // remove from offspring      _offspring.erase(it);      // merge temp into offspring      plus(temp, _offspring);            // repeatedly add selected offspring to parents      for (unsigned i=0; i<toKeep-1; i++)	{	  // select	  it = deterministic_tournament(_offspring.begin(), _offspring.end(), tSize);	  // add to parents	  _parents.push_back(*it);	  // remove from offspring	  _offspring.erase(it);	}    }private:  eoLinearTruncateSplit<EOT> split; // few parents to truncate -> linear   eoPlus<EOT> plus;  unsigned int tSize;};#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -