Main Page   Class Hierarchy   Compound List   File List   Compound Members   File Members  

/magnus/back_end/Genetic/include/PMDebornoyWord.h

Go to the documentation of this file.
00001 /*
00002  *   $Id$
00003  */
00004  
00005 // Copyright (C) 1999 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 //
00008 // Contents: Definition of PMDebornoyWord class
00009 //
00010 // Principal Author: Dmitry Bormotov
00011 //
00012 // Status: in progress
00013 //
00014 // Description:
00015 //
00016 // Revision History:
00017 //
00018 
00019 #ifndef _PMDebornoyWord_H_
00020 #define _PMDebornoyWord_H_
00021 
00022 
00023 #include "PMWord.h"
00024 #include "FreeGroup.h"
00025 
00026 
00027 // ------------------------ PMDebornoyWordConfig --------------------------- //
00028 
00029 
00030 class PMDebornoyWordConfig : public PMWordConfig 
00031 {
00032 
00033 public:
00034 
00035   /////////////////////////////////////////////////////////////////////////
00036   //                                                                     //
00037   // Constructors:                                                       //
00038   //                                                                     //
00039   /////////////////////////////////////////////////////////////////////////
00040  
00041   PMDebornoyWordConfig( UniformRandom& R,  
00042                         int NumOfGens, 
00043                         int WordMaxLen,
00044                         const FreeGroup Br, 
00045                         bool allowTrivialWords = true
00046                         ) 
00047     : PMWordConfig( R, NumOfGens, WordMaxLen, allowTrivialWords ), 
00048       B( Br )
00049     { }
00050 
00051   // copy constructor, destructor and operators =, == supplied by compiler.
00052 
00053 
00054   /////////////////////////////////////////////////////////////////////////
00055   //                                                                     //
00056   // Accessors:                                                          //
00057   //                                                                     //
00058   /////////////////////////////////////////////////////////////////////////
00059 
00060   FreeGroup getFreeGroup( ) const { return B; }
00061  
00062  
00063 private:
00064 
00065   /////////////////////////////////////////////////////////////////////////
00066   //                                                                     //
00067   // Private functions:                                                  //
00068   //                                                                     //
00069   /////////////////////////////////////////////////////////////////////////
00070 
00071 
00072   /////////////////////////////////////////////////////////////////////////
00073   //                                                                     //
00074   // Data members:                                                       //
00075   //                                                                     //
00076   /////////////////////////////////////////////////////////////////////////
00077 
00078   FreeGroup B;
00079 };
00080 
00081 
00082 // --------------------------- PMDebornoyWord ------------------------------ //
00083 
00084 
00085 class PMDebornoyWord : public PM 
00086 {
00087 
00088 public:
00089 
00090   /////////////////////////////////////////////////////////////////////////
00091   //                                                                     //
00092   // Constructors:                                                       //
00093   //                                                                     //
00094   /////////////////////////////////////////////////////////////////////////
00095   
00096   PMDebornoyWord( const PMDebornoyWordConfig& CFG, Word w = Word() ) 
00097     : pm( CFG, w ), cfg( CFG ) { }
00098 
00099   PMDebornoyWord( const PMDebornoyWordConfig& CFG, const PMWord& w ) 
00100     : pm( w ), cfg( CFG ) { }
00101 
00102   // copy constructor, destructor and operator = supplied by compiler.
00103 
00104 
00105   /////////////////////////////////////////////////////////////////////////
00106   //                                                                     //
00107   // Overriden abstract functions:                                       //
00108   //                                                                     //
00109   /////////////////////////////////////////////////////////////////////////
00110 
00111   PM* clone( ) const { return new PMDebornoyWord(*this); }
00112 
00113 
00114   /////////////////////////////////////////////////////////////////////////
00115   //                                                                     //
00116   // Overriden hook functions:                                           //
00117   //                                                                     //
00118   /////////////////////////////////////////////////////////////////////////
00119 
00120   PM* crossover( const PM* );
00121 
00122   PM* mutate( );
00123 
00124   PM* randomPM( ); 
00125 
00126   void printOn( ostream& ostr ) const;
00127 
00128 
00129   /////////////////////////////////////////////////////////////////////////
00130   //                                                                     //
00131   // Accessors:                                                          //
00132   //                                                                     //
00133   /////////////////////////////////////////////////////////////////////////
00134 
00135   PMWord getPMWord( ) const { return pm; }
00136 
00137   bool operator == ( const PM& pm2 ) const 
00138   { return pm == pm2; }
00139 
00140   const PMDebornoyWordConfig& getCfg( ) { return cfg; }
00141 
00142 
00143 private:
00144 
00145   /////////////////////////////////////////////////////////////////////////
00146   //                                                                     //
00147   // Private functions:                                                  //
00148   //                                                                     //
00149   /////////////////////////////////////////////////////////////////////////
00150 
00151   bool hasFirstGen( const PMWord& r );
00152   
00153 
00154   /////////////////////////////////////////////////////////////////////////
00155   //                                                                     //
00156   // Data members:                                                       //
00157   //                                                                     //
00158   /////////////////////////////////////////////////////////////////////////
00159 
00160   const PMDebornoyWordConfig& cfg;
00161   PMWord pm;
00162 };
00163 
00164 #endif

Generated at Tue Jun 19 09:49:36 2001 for Magnus Classes by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001