• Main Page
  • Related Pages
  • Classes
  • Files
  • Examples
  • File List
  • File Members

Chromosome.h

Go to the documentation of this file.
00001 //===========================================================================
00040 //===========================================================================
00041 
00042 
00043 
00044 #ifndef __CHROMOSOME_H
00045 #define __CHROMOSOME_H
00046 
00047 #ifdef _WIN32
00048 // disable warning C4786: symbol length > 255 character,
00049 // okay to ignore
00050 #pragma warning(disable: 4786)
00051 // disable warning C4804: suspicious bool comparison
00052 // occurs during instantiation of vector< bool >
00053 #pragma warning(disable: 4804)
00054 #endif
00055 
00056 #include <string>
00057 #include <vector>
00058 #include <SharkDefs.h>
00059 
00060 //
00061 // problems with VC++ 5.0 (can't handle nested scopes)
00062 //
00063 //using namespace std;
00064 
00065 //===========================================================================
00066 
00067 
00068 // forward declarations
00069 class Individual;
00070 class Population;
00071 class IndividualMOO;
00072 class PopulationMOO;
00073 
00074 
00078 class Chromosome
00079 {
00080     friend class Individual;
00081     friend class Population;
00082     friend class IndividualMOO;
00083     friend class PopulationMOO;
00084 
00085 public:
00086     bool sameType(const Chromosome& c) const
00087     {
00088         return strcmp(typeOfAlleles(), c.typeOfAlleles()) == 0;
00089     }
00090 
00091     virtual ~Chromosome()
00092     { }
00093     virtual const char* typeOfAlleles() const = 0;
00094     virtual unsigned    size() const = 0;
00095     virtual Chromosome& operator = (const Chromosome&) = 0;
00096 
00097     virtual unsigned    sizeOfAlleles() const = 0;
00098     //
00099     //=======================================================================
00100     //
00101     // string operators
00102     //
00103     virtual void        resize(unsigned n) = 0;
00104 
00105     virtual void        duplicate(unsigned start,
00106                                   unsigned stop,
00107                                   unsigned dest) = 0;
00108     virtual void        invert(unsigned start,
00109                                unsigned stop,
00110                                unsigned granularity = 1) = 0;
00111     virtual void        transcribe(unsigned start,
00112                                    unsigned stop,
00113                                    const Chromosome& chrom) = 0;
00114     virtual void        swap(unsigned i, unsigned j) = 0;
00115     virtual void        shuffle() = 0;
00116     virtual void        replace(unsigned i,
00117                                 const Chromosome& chrom) = 0;
00118     virtual void        insert(unsigned i,
00119                                const Chromosome& chrom) = 0;
00120     virtual void        append(const Chromosome& chrom) = 0;
00121     virtual void        remove (unsigned i) = 0;
00122     virtual void        remove (unsigned from, unsigned to) = 0;
00123     virtual void        rotateRight(unsigned n = 1) = 0;
00124     virtual void        rotateLeft(unsigned n = 1) = 0;
00125 
00126 #ifndef _WIN32
00127     //
00128     // Visual C++ 5.0 can't distinguish between different instantiations of
00129     // template class vector< T >
00130     virtual void        crossover
00131     (
00132         const Chromosome& dad,
00133         const Chromosome& mom,
00134         const std::vector< unsigned >& points
00135     ) = 0;
00136     virtual void        crossover
00137     (
00138         Chromosome& mate,
00139         const std::vector< unsigned >& points
00140     ) = 0;
00141 #endif // !_WIN32
00142 
00143     virtual void        crossover
00144     (
00145         const Chromosome& dad,
00146         const Chromosome& mom,
00147         const std::vector< bool >& pos
00148     ) = 0;
00149     virtual void        crossover
00150     (
00151         Chromosome& mate,
00152         const std::vector< bool >& pos
00153     ) = 0;
00154     virtual void        crossover
00155     (
00156         const Chromosome& dad,
00157         const Chromosome& mom,
00158         unsigned npoints,
00159         unsigned align = 1,
00160         bool chromswap = 0
00161     ) = 0;
00162     virtual void        crossover
00163     (
00164         Chromosome& mate,
00165         unsigned npoints,
00166         unsigned align = 1,
00167         bool chromswap = 0
00168 
00169     ) = 0;
00170     virtual void        crossover
00171     (
00172         const Chromosome& dad,
00173         const Chromosome& mom,
00174         const Chromosome& pos
00175     ) = 0;
00176     virtual void        crossover
00177     (
00178         Chromosome& mate,
00179         const Chromosome& pos
00180     ) = 0;
00181     virtual void        crossoverUniform
00182     (
00183         const Chromosome& dad,
00184         const Chromosome& mom,
00185         const std::vector< bool >& pos
00186     ) = 0;
00187     virtual void        crossoverUniform
00188     (
00189         Chromosome& mate,
00190         const std::vector< bool >& pos
00191     ) = 0;
00192     virtual void        crossoverUniform
00193     (
00194         const Chromosome& dad,
00195         const Chromosome& mom
00196     ) = 0;
00197     virtual void        crossoverUniform
00198     (
00199         Chromosome& mate
00200     ) = 0;
00201     virtual void        crossoverUniform
00202     (
00203         const Chromosome& dad,
00204         const Chromosome& mom,
00205         const Chromosome& pos
00206     ) = 0;
00207     //  virtual void        crossoverUniform( Chromosome& mate,
00208     //                    const Chromosome& pos );
00209     virtual void        recombineDiscrete(const Chromosome& dad,
00210                                           const Chromosome& mom) = 0;
00211     virtual void        recombineDiscrete(Chromosome& mate) = 0;
00212     //
00213 
00214     virtual bool operator < (const Chromosome& c) const;
00215     virtual bool operator == (const Chromosome& c) const;
00216 
00217 
00218     // automatically generated
00219     //virtual bool operator != ( const Chromosome& c ) const;
00220     //virtual bool operator >  ( const Chromosome& c ) const;
00221     //virtual bool operator <= ( const Chromosome& c ) const;
00222     //virtual bool operator >= ( const Chromosome& c ) const;
00223 
00224 
00225     //=======================================================================
00226 
00227     //
00228     // Added by Marc Toussaint & Stefan Wiegand at 20.11.02
00229     // (interface methods for more externally from Shark defined Chromosomes)
00230 
00231     typedef unsigned uint;
00232 
00234     virtual void init();
00235 
00237     virtual void init(const char* filename);
00238 
00240     virtual void mutate();
00241 
00242 #ifdef EALIB_REGISTER_INDIVIDUAL
00243 
00247     virtual void registerIndividual(const Individual& i, uint you);
00248 #endif
00249 
00255     virtual void appendToIndividual(Individual& i);
00256 
00258     virtual int  pvm_pkchrom();
00259 
00261     virtual int  pvm_upkchrom();
00262 
00263 
00264     //=======================================================================
00265 
00266 protected:
00267     virtual Chromosome* clone() const = 0;
00268     virtual Chromosome* empty() const = 0;
00269 
00270 #ifndef __NO_GENERIC_IOSTREAM
00271     virtual void        writeTo(std::ostream&) const = 0;
00272     virtual void        readFrom(std::istream&) = 0;
00273 
00274     friend inline std::istream& operator >> (std::istream& is, Chromosome& c)
00275     {
00276         c.readFrom(is);
00277         IO_CHECK(is)
00278         return is;
00279     }
00280 
00281     friend inline std::ostream& operator << (std::ostream& os, const Chromosome& c)
00282     {
00283         c.writeTo(os);
00284         IO_CHECK(os)
00285         return os;
00286     }
00287 #endif // !__NO_GENERIC_IOSTREAM
00288 };
00289 
00290 //===========================================================================
00291 
00292 #endif /* !__CHROMOSOME_H */
00293 
  • Shark Main Page
  • Array
  • Rng
  • LinAlg
  • FileUtil
  • EALib
  • MOO-EALib
  • ReClaM
  • Fuzzy
  • Mixture
  • Tutorials
  • FAQ