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

📄 ga1dbinstrgenome.h

📁 遗传算法工具箱C++
💻 H
字号:
// $Header$/* ----------------------------------------------------------------------------  binstr1.h  mbwall 19apr95  Copyright (c) 1995 Massachusetts Institute of Technology                     all rights reserved DESCRIPTION:  This header defines the interface for the 1D binary string genome, includingcrossover objects and all the default and built-in operators.---------------------------------------------------------------------------- */#ifndef _ga_binstr1_h_#define _ga_binstr1_h_#include "GABinStr.h"#include "GAGenome.h"/* ----------------------------------------------------------------------------1DBinaryStringGenome-------------------------------------------------------------------------------resize    These genomes are resizable.  In addition, you can set a resize behaviour  to specify the bounds in which the resize can occur.copy    Copy bits from the specified genome using the location and length   that are passed to us.  If the current genome is too short for the   entire length, copy whatever we can.  If the original genome is too   short for the specified length, copy whatever we can.  If either location  is out of bounds, return without doing anything.    We do NOT check for negative values in the locations!    This routine clips if the copy sizes do not match - it does NOT resize the  genome to fit the copy.  You'll have to do resizes before you call this  routine if you want the copy to fit the original.==, !=    Are two genomes equal?  Our test for equality is based upon the  contents of the genome, NOT the behaviour.  So as long as the bitstreams  match, the genomes are 'equal'.  This means that a resizeable genome  may be equal to a fixed-length genome.  But a chromsome with 500  bits allocated is not equal to a genome with 10 bits allocated unless  both are the same size.---------------------------------------------------------------------------- */class GA1DBinaryStringGenome : public GABinaryString, public GAGenome {public:  GADefineIdentity("GA1DBinaryStringGenome", GAID::BinaryStringGenome);  static void UniformInitializer(GAGenome &);  static void UnsetInitializer(GAGenome &);  static void SetInitializer(GAGenome &);  static int FlipMutator(GAGenome &, float);  static int UniformCrossover(const GAGenome&, const GAGenome&, 			      GAGenome*, GAGenome*);  static int EvenOddCrossover(const GAGenome&, const GAGenome&, 			      GAGenome*, GAGenome*);  static int OnePointCrossover(const GAGenome&, const GAGenome&, 			      GAGenome*, GAGenome*);  static int TwoPointCrossover(const GAGenome&, const GAGenome&, 			      GAGenome*, GAGenome*);  static float BitComparator(const GAGenome&, const GAGenome&);public:  GA1DBinaryStringGenome(unsigned int x,			 GAGenome::Evaluator f=(GAGenome::Evaluator)0,			 void * u=(void *)0);  GA1DBinaryStringGenome(const GA1DBinaryStringGenome & orig);  GA1DBinaryStringGenome& operator=(const GAGenome& arg)    {copy(arg); return *this;}  GA1DBinaryStringGenome& operator=(const short array []) // no err checks!    {for(unsigned int i=0; i<sz; i++) gene(i,*(array+i)); return *this;}  GA1DBinaryStringGenome& operator=(const int array []) // no err checks!    {for(unsigned int i=0; i<sz; i++) gene(i,*(array+i)); return *this;}  virtual ~GA1DBinaryStringGenome();  virtual GAGenome *clone(GAGenome::CloneMethod flag=CONTENTS) const;  virtual void copy(const GAGenome&);#ifdef GALIB_USE_STREAMS  virtual int read(STD_ISTREAM & is);  virtual int write (STD_OSTREAM & os) const;#endif  virtual int equal(const GAGenome & c) const;  short gene(unsigned int x=0) const {return bit(x);}  short gene(unsigned int x, short value)     {_evaluated = gaFalse; return((bit(x) == value) ? value : bit(x,value));}  short operator[](unsigned int x) {return gene(x);}  int length() const {return nx;}  int length(int x){resize(x); return nx;}  int resize(int x);  int resizeBehaviour() const;  int resizeBehaviour(unsigned int lx, unsigned int ux);  void copy(const GA1DBinaryStringGenome& orig,	    unsigned int r, unsigned int x, unsigned int length);  int equal(const GA1DBinaryStringGenome& orig,	    unsigned int r, unsigned int x, unsigned int length) const;  void set(unsigned int x, unsigned int length);  void unset(unsigned int x, unsigned int length);  void randomize(unsigned int x, unsigned int length);  void randomize() { GABinaryString::randomize(); }  void move(unsigned int destx, unsigned int srcx, unsigned int length);protected:  unsigned int nx;		// how long is the data string?  unsigned int minX;		// what is the lower limit?  unsigned int maxX;		// what is the upper limit?};inline void  GA1DBinaryStringGenome::copy(const GA1DBinaryStringGenome & orig,			     unsigned int r, unsigned int x, unsigned int l){  if(l > 0 && x < orig.nx && r < nx){    if(x + l > orig.nx) l = orig.nx - x;    if(r + l > nx) l = nx - r;    GABinaryString::copy(orig,r,x,l);  }  _evaluated = gaFalse;}inline void  GA1DBinaryStringGenome::set(unsigned int x, unsigned int l){  if(x + l > nx) l = nx - x;  GABinaryString::set(x, l);  _evaluated = gaFalse;}inline void  GA1DBinaryStringGenome::unset(unsigned int x, unsigned int l){  if(x + l > nx) l = nx - x;  GABinaryString::unset(x, l);  _evaluated = gaFalse;}inline void  GA1DBinaryStringGenome::randomize(unsigned int x, unsigned int l){  if(x + l > nx) l = nx - x;  GABinaryString::randomize(x, l);  _evaluated = gaFalse;}inline void  GA1DBinaryStringGenome::move(unsigned int x, unsigned int srcx,unsigned int l){  if(srcx + l > nx) l = nx - srcx;  if(x + l > nx) l = nx - x;  GABinaryString::move(x, srcx, l);  _evaluated = gaFalse;}#endif

⌨️ 快捷键说明

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