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

/magnus/back_end/Genetic/include/GAFastBurMat.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 classes BurauPoly, GAFastBurMat
00009 //
00010 // Principal Author: Dmitry Bormotov
00011 //
00012 // Status: in progress
00013 //
00014 // Description:
00015 //
00016 // Revision History:
00017 //
00018 
00019 
00020 #ifndef _GAFastBurMat_H_
00021 #define _GAFastBurMat_H_
00022 
00023 
00024 #include "PMDebornoyWord.h"
00025 #include "PMArray.h"
00026 #include "GA.h"
00027 #include "FreeGroup.h"
00028 #include "Matrix.h"
00029 #include "Polynomial.h"
00030 #include "Int2.h"
00031 
00032 
00033 // ----------------------------- BurauPoly --------------------------------- //
00034 
00035 
00036 // to be used by GAFastBurMat only
00037 
00038 class BurauPoly {
00039 
00040 public:
00041 
00042   /////////////////////////////////////////////////////////////////////////
00043   //                                                                     //
00044   // Constructors:                                                       //
00045   //                                                                     //
00046   /////////////////////////////////////////////////////////////////////////
00047 
00048   BurauPoly( int coef = 0 ); 
00049 
00050   BurauPoly( const BurauPoly& );
00051 
00052   BurauPoly( int pn, int* pc );
00053 
00054   ~BurauPoly( );
00055 
00056 
00057   /////////////////////////////////////////////////////////////////////////
00058   //                                                                     //
00059   // Accessors:                                                          //
00060   //                                                                     //
00061   /////////////////////////////////////////////////////////////////////////
00062 
00063   int degree( ) const { return n; }
00064 
00065   bool zero( ) const { return n == 0 && c[0] == 0; }
00066 
00067   BurauPoly& operator = ( const BurauPoly& );
00068 
00069   void add( const BurauPoly& p );
00070 
00071   void sub( const BurauPoly& p );
00072 
00073   void multByX( );
00074 
00075   void multByIX( );
00076   
00077   /*
00078   bool operator == ( const Int2& i ) const { return v == i.v; }
00079 
00080   bool operator != ( const Int2& i ) const { return !(*this == i); }
00081 
00082   Int2 operator - ( ) const { return -v; }
00083 
00084   Int2 operator + ( const Int2& i ) const { return v + i.v; }
00085 
00086   Int2& operator += ( const Int2& i ) { v += i.v; return *this; }
00087 
00088   Int2 operator * ( const Int2& i ) const { return v * i.v; }
00089 
00090   Int2& operator *= ( const Int2& i ) { v *= i.v; return *this; }
00091 
00092   bool operator < ( const Int2& i ) const { return v < i.v; }
00093 
00094   bool operator > ( const Int2& i ) const { return v > i.v; }
00095 
00096   int value( ) const { return v; }
00097   */
00098 
00099 
00100   /////////////////////////////////////////////////////////////////////////
00101   //                                                                     //
00102   // OI:                                                                 //
00103   //                                                                     //
00104   /////////////////////////////////////////////////////////////////////////
00105 
00106   friend ostream& operator << ( ostream& ostr, const BurauPoly& p )
00107   {
00108     p.printOn(ostr);
00109     return ostr;
00110   }
00111 
00112 private:
00113   
00114   /////////////////////////////////////////////////////////////////////////
00115   //                                                                     //
00116   // Private functions:                                                  //
00117   //                                                                     //
00118   /////////////////////////////////////////////////////////////////////////
00119 
00120   void expandTo( int pn );
00121 
00122   void shrink( );
00123 
00124   void printOn( ostream& ostr ) const;
00125   
00126   void debugPrint( ostream& ostr ) const;
00127 
00128 
00129   /////////////////////////////////////////////////////////////////////////
00130   //                                                                     //
00131   // Data members:                                                       //
00132   //                                                                     //
00133   /////////////////////////////////////////////////////////////////////////
00134  
00135   int n;
00136   int* c;
00137 };
00138 
00139 
00140 // --------------------------- GAFastBurMat ------------------------------- //
00141 
00142 
00143 class GAFastBurMat : public GA
00144 {
00145 
00146 public:
00147   
00148   /////////////////////////////////////////////////////////////////////////
00149   //                                                                     //
00150   // Constructors:                                                       //
00151   //                                                                     //
00152   /////////////////////////////////////////////////////////////////////////
00153   
00154   GAFastBurMat( const GAConfig& GAC, const FreeGroup& Br );
00155   
00156   ~GAFastBurMat( );
00157   
00158   // copy constructor and operator '=' are hidden (not implemented)
00159 
00160 
00161   /////////////////////////////////////////////////////////////////////////
00162   //                                                                     //
00163   // Overriden abstract functions:                                       //
00164   //                                                                     //
00165   /////////////////////////////////////////////////////////////////////////
00166 
00167   void initPopulation( );
00168 
00169   int fitness( const PM* pm );
00170   
00171 
00172   /////////////////////////////////////////////////////////////////////////
00173   //                                                                     //
00174   // Accessors:                                                          //
00175   //                                                                     //
00176   /////////////////////////////////////////////////////////////////////////
00177 
00178   Word getSolution( ostream* o = NULL );
00179 
00180 
00181   /////////////////////////////////////////////////////////////////////////
00182   //                                                                     //
00183   // OI:                                                                 //
00184   //                                                                     //
00185   /////////////////////////////////////////////////////////////////////////
00186 
00187 
00188 private:
00189 
00190   /////////////////////////////////////////////////////////////////////////
00191   //                                                                     //
00192   // Private functions:                                                  //
00193   //                                                                     //
00194   /////////////////////////////////////////////////////////////////////////
00195 
00196   // copy constructor and operator '=' are hidden (not implemented)
00197   
00198   GAFastBurMat( const GAFastBurMat& );
00199 
00200   GAFastBurMat& operator = ( const GAFastBurMat& );
00201   
00202   void init( );
00203     
00204   bool checkForSolution( Word& res );
00205 
00206   BurauPoly** productMatrix( const PM* pm );
00207 
00208   void destroyMatrix( BurauPoly** R );
00209 
00210   void printMatrix( BurauPoly** R );
00211 
00212   void penalizeFitness( );
00213 
00214 
00215   /////////////////////////////////////////////////////////////////////////
00216   //                                                                     //
00217   // Data members:                                                       //
00218   //                                                                     //
00219   /////////////////////////////////////////////////////////////////////////
00220   
00221   FreeGroup B;
00222   int numOfGens, n, g;
00223   bool keepDetails;
00224   ostream* out;
00225   PMDebornoyWordConfig PMDWC;
00226 };
00227 
00228 
00229 #endif

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