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

📄 eo.h

📁 这是linux下的进化计算的源代码。 === === === === === === === === === === === ===== check latest news at http:
💻 H
字号:
// -*- mode: c++; c-indent-level: 4; c++-member-init-indent: 8; comment-column: 35; -*-//-----------------------------------------------------------------------------// EO.h// (c) GeNeura Team 1998/*    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 *///-----------------------------------------------------------------------------#ifndef EO_H#define EO_H//-----------------------------------------------------------------------------#include <stdexcept>       // std::runtime_error#include <eoObject.h>      // eoObject#include <eoPersistent.h>  // eoPersistent//-----------------------------------------------------------------------------/** EO is a base class for evolvable objects, that is, the subjects of    evolution. EOs have only got a fitness, which at the same time needs to be    only an object with the operation less than (<) defined. Fitness says how    good is the object; evolution or change of these objects is left to the    genetic operators. A fitness less than another means a worse fitness, in    whatever the context; thus, fitness is always maximized; although it can    be minimized with a proper definition of the < operator. The fitness    object must have, besides an void ctor, a copy ctor.*/template<class F> class EO: public eoObject, public eoPersistent{public:  typedef F Fitness;  /** Default constructor.      Fitness must have a ctor which takes 0 as a value; we can not use void      ctors here since default types like float have no void initializer.      VC++ allows it, but gcc does not  */  EO(): repFitness(Fitness()), invalidFitness(true) {}  /// Virtual dtor  virtual ~EO() {};  /// Return fitness value.  Fitness fitness() const {    if (invalid())      throw std::runtime_error("invalid fitness");    return repFitness;  }  // Set fitness as invalid.  void invalidate() { invalidFitness = true; }  /** Set fitness. At the same time, validates it.   *  @param _fitness New fitness value.   */  void fitness(const Fitness& _fitness)  {    repFitness = _fitness;    invalidFitness = false;  }  /** Return true If fitness value is invalid, false otherwise.   *  @return true If fitness is invalid.   */  bool invalid() const { return invalidFitness; }  /** Returns true if      @return true if the fitness is higher  */  bool operator<(const EO& _eo2) const { return fitness() < _eo2.fitness(); }  bool operator>(const EO& _eo2) const { return !(fitness() <= _eo2.fitness()); }  /// Methods inherited from eoObject  //@{  /** Return the class id.   *  @return the class name as a std::string   */  virtual std::string className() const { return "EO"; }  /**   * Read object.\\   * Calls base class, just in case that one had something to do.   * The read and print methods should be compatible and have the same format.   * In principle, format is "plain": they just print a number   * @param _is a std::istream.   * @throw runtime_std::exception If a valid object can't be read.   */  virtual void readFrom(std::istream& _is) {             // the new version of the reafFrom function.        // It can distinguish between valid and invalid fitness values.         std::string fitness_str;        int pos = _is.tellg();	_is >> fitness_str;	if (fitness_str == "INVALID")	{		invalidFitness = true;	}	else	{		invalidFitness = false;		_is.seekg(pos); // rewind		_is >> repFitness;	}  }  /**   * Write object. Called printOn since it prints the object _on_ a stream.   * @param _os A std::ostream.   */  virtual void printOn(std::ostream& _os) const {    // the latest version of the code. Very similar to the old code    if (invalid()) {  	_os << "INVALID ";    }    else    { 	_os << repFitness << ' ';    }	        }  //@}private:  Fitness repFitness;   // value of fitness for this chromosome  bool invalidFitness;  // true if the value of fitness is invalid};//-----------------------------------------------------------------------------#endif

⌨️ 快捷键说明

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