Listing 2: Genome classes GAGenome and GABitStringGenome

//
//  gagenome.h - GAGenome and 
//  GABitStringGenome classes.
/////////////////////////////////////////////////
#ifndef GAGENOME_H
#define GAGENOME_H
#include "gaimport.h"

/////////////////////////////////////////////////
class GA_API GAGenome
{
public :
   GAGenome();
   virtual ~GAGenome();
   GAGenome(const GAGenome &src){*this = src;};
   GAGenome& operator = (const GAGenome& rhs);
   //
   // Genetic operators. Must be overriden.
   virtual void   Initialize(){};
   virtual void   Mutate( double /*mutation*/){};
   virtual void   CrossOver( GAGenome *genome){};
   virtual double Evaluate(){return 0;};
   //
   // Keep track of obj funct,
   // fitness and selection 
   // probability.
   double         m_obj;
   double         m_fitness;
   double         m_selProb;
   int            m_selected;

};

/////////////////////////////////////////////////
class GA_API GABitStringGenome:public GAGenome
{
public :
   GABitStringGenome(int size=0);
   virtual ~GABitStringGenome();
   GABitStringGenome(const GABitStringGenome &src)
      {*this =  src;};
   GABitStringGenome& 
      operator = (const GABitStringGenome& rhs);
   //
   // Initialization.
   void            SetSize(int size);
   void            Randomize();
   //
   //  Simple bit string operations.
   void            Clear()     ;
   void            Clear(int bit);
   void            Clear(int startBit, int length);
   void            Set()     ;
   void            Set(int bit);
   void            Set(int startBit, int length);
   bool            IsSet(int i);   
   //
   // Genetic operators.
   virtual void   Initialize(){Randomize();};
   virtual void   Mutate( double mfactor);
   virtual void   CrossOver( GAGenome* genome);

protected:
   BYTE*          m_bits;
   int            m_size;

};

GA_API int RandomNum(int maxValPlusOne);
GA_API void RandomSeed(int seed);

#endif
— End of Listing —