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

/magnus/back_end/Genetic/include/PMArray.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 PMArrayConfig, PMArray
00009 //
00010 // Principal Author: Dmitry Bormotov
00011 //
00012 // Status: in progress
00013 //
00014 // Description:
00015 //
00016 // Revision History:
00017 //
00018 
00019 #ifndef _PMArray_H_
00020 #define _PMArray_H_
00021 
00022 
00023 #include "PM.h"
00024 #include "RandomNumbers.h"
00025 #include "GAConfig.h"
00026 
00027 
00028 // ----------------------------- PMArrayConfig ----------------------------- //
00029 
00030 
00031 class PMArrayConfig 
00032 {
00033 
00034 public:
00035 
00036   /////////////////////////////////////////////////////////////////////////
00037   //                                                                     //
00038   // Constructors:                                                       //
00039   //                                                                     //
00040   /////////////////////////////////////////////////////////////////////////
00041   
00042   PMArrayConfig( UniformRandom& R, int Len, const GAConfig& GAC ) 
00043     : r( R ), len( Len ), gac( GAC ) { }
00044 
00045   // copy constructor, destructor and operators =, == supplied by compiler.
00046 
00047 
00048   /////////////////////////////////////////////////////////////////////////
00049   //                                                                     //
00050   // Accessors:                                                          //
00051   //                                                                     //
00052   /////////////////////////////////////////////////////////////////////////
00053 
00054   UniformRandom& rng( ) const { return r; }
00055 
00056   int length( ) const { return len; }
00057  
00058  
00059 private:
00060 
00061   /////////////////////////////////////////////////////////////////////////
00062   //                                                                     //
00063   // Private functions:                                                  //
00064   //                                                                     //
00065   /////////////////////////////////////////////////////////////////////////
00066 
00067 
00068   /////////////////////////////////////////////////////////////////////////
00069   //                                                                     //
00070   // Data members:                                                       //
00071   //                                                                     //
00072   /////////////////////////////////////////////////////////////////////////
00073 
00074   UniformRandom& r;
00075   int len;
00076   const GAConfig& gac;
00077 };
00078 
00079 
00080 // ------------------------------- PMArray --------------------------------- //
00081 
00082 
00083 class PMArray : public PM 
00084 {
00085 
00086 public:
00087 
00088   /////////////////////////////////////////////////////////////////////////
00089   //                                                                     //
00090   // Constructors:                                                       //
00091   //                                                                     //
00092   /////////////////////////////////////////////////////////////////////////
00093 
00094   PMArray( const PMArrayConfig& CFG, PM** array );
00095 
00096   PMArray( const PMArray& pm );
00097   
00098   ~PMArray( );
00099 
00100 
00101   /////////////////////////////////////////////////////////////////////////
00102   //                                                                     //
00103   // Overriden abstract functions:                                       //
00104   //                                                                     //
00105   /////////////////////////////////////////////////////////////////////////
00106 
00107   PM* clone( ) const { return new PMArray(*this); }
00108  
00109 
00110   /////////////////////////////////////////////////////////////////////////
00111   //                                                                     //
00112   // Overriden hook functions:                                           //
00113   //                                                                     //
00114   /////////////////////////////////////////////////////////////////////////
00115 
00116   PM* crossover( const PM* );
00117 
00118   PM* mutate( );
00119 
00120   PM* randomPM( ); 
00121 
00122   void printOn( ostream& ostr ) const;
00123 
00124 
00125   /////////////////////////////////////////////////////////////////////////
00126   //                                                                     //
00127   // Accessors:                                                          //
00128   //                                                                     //
00129   /////////////////////////////////////////////////////////////////////////
00130 
00131   PMArray& operator = ( const PMArray& pm );
00132 
00133   bool operator == ( const PM& pm ) const;
00134 
00135   const PM* value( int i ) const 
00136   {
00137   #if( SAFETY > 0 )
00138     if( i < 0 || i >= cfg.length() )
00139       error("const PM* PMArray::value( int i ) const : "
00140             "index is out of bounds");
00141   #endif
00142     return A[i]; 
00143   } 
00144 
00145 
00146 private:
00147 
00148   /////////////////////////////////////////////////////////////////////////
00149   //                                                                     //
00150   // Private functions:                                                  //
00151   //                                                                     //
00152   /////////////////////////////////////////////////////////////////////////
00153 
00154   /////////////////////////////////////////////////////////////////////////
00155   //                                                                     //
00156   // Data members:                                                       //
00157   //                                                                     //
00158   /////////////////////////////////////////////////////////////////////////
00159 
00160   const PMArrayConfig& cfg;
00161   PM** A;
00162 };
00163 
00164 
00165 #endif

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