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

📄 eoinit.h

📁 这是linux下的进化计算的源代码。 === === === === === === === === === === === ===== check latest news at http:
💻 H
字号:
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-//-----------------------------------------------------------------------------// eoInit.h// (c) Maarten Keijzer 2000, 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             mak@dhi.dk *///-----------------------------------------------------------------------------#ifndef _eoInit_H#define _eoInit_H#include <algorithm>#include <eoOp.h>#include <eoSTLFunctor.h>#include <utils/eoRndGenerators.h>/**	Base (name) class for Initialization of chromosomes, used in a population	contructor. It is derived from eoMonOp, so it can be used    inside the algorithm as well.	@see eoPop*/template <class EOT>class eoInit : public eoUF<EOT&, void>{public:  /** className: Mandatory because of eoCombinedInit.      SHould be pure virtual, but then we should go over the whole   * code to write the method for all derived classes ... MS 16/7/04 */  virtual std::string className(void) const { return "eoInit"; }};/** turning an eoInit into a generator  * probably we should only use genrators - and suppress eoInit ??? * MS - July 2001 */template <class EOT>class eoInitGenerator :  public eoF<EOT>{public:  /** Ctor from a plain eoInit */  eoInitGenerator(eoInit<EOT> & _init):init(_init) {}  virtual EOT operator()()    {      EOT p;      init(p);      return (p);    }private:  eoInit<EOT> & init;};/**    Initializer for fixed length representations with a single type*/template <class EOT>class eoInitFixedLength: public eoInit<EOT>{    public:    typedef typename EOT::AtomType AtomType;        eoInitFixedLength(unsigned _combien, eoRndGenerator<AtomType>& _generator)            : combien(_combien), generator(_generator) {}        virtual void operator()(EOT& chrom)        {            chrom.resize(combien);            std::generate(chrom.begin(), chrom.end(), generator);            chrom.invalidate();        }    private :        unsigned combien;        /// generic wrapper for eoFunctor (s), to make them have the function-pointer style copy semantics        eoSTLF<AtomType> generator;};/**    Initializer for variable length representations with a single type*/template <class EOT>class eoInitVariableLength: public eoInit<EOT>{public:typedef typename EOT::AtomType AtomType; //   /** Ctor from a generator *///   eoInitVariableLength(unsigned _minSize, unsigned _maxSize, eoF<typename EOT::AtomType> & _generator = Gen())//     : offset(_minSize), extent(_maxSize - _minSize), // 			 repGenerator( eoInitGenerator<typename EOT::AtomType>(*(new eoInit<EOT>)) ), // 			 generator(_generator)//   {//     if (_minSize >= _maxSize)//       throw std::logic_error("eoInitVariableLength: minSize larger or equal to maxSize");//   }  /** Ctor from an eoInit */  eoInitVariableLength(unsigned _minSize, unsigned _maxSize, eoInit<AtomType> & _init)    : offset(_minSize), extent(_maxSize - _minSize), init(_init)  {    if (_minSize >= _maxSize)      throw std::logic_error("eoInitVariableLength: minSize larger or equal to maxSize");  }  virtual void operator()(EOT& _chrom)  {    _chrom.resize(offset + rng.random(extent));    typename std::vector<AtomType>::iterator it;    for (it=_chrom.begin(); it<_chrom.end(); it++)      init(*it);    _chrom.invalidate();  }  // accessor to the atom initializer (needed by operator constructs sometimes)  eoInit<AtomType> & atomInit() {return init;}private :  unsigned offset;  unsigned extent;  eoInit<AtomType> & init;};/**    eoInitAdaptor changes the place in the hierarchy    from eoInit to eoMonOp. This is mainly a type conversion,    nothing else    .    @see eoInit, eoMonOp*/template <class EOT>class eoInitAdaptor : public eoMonOp<EOT>{    public :        eoInitAdaptor(eoInit<EOT>& _init) : init(_init) {}        bool operator()(EOT& _eot)        {            init(_eot);            return true;        }    private :        eoInit<EOT>& init;};#endif

⌨️ 快捷键说明

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