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

/magnus/back_end/Genetic/include/PM.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 class PM
00009 //
00010 // Principal Author: Dmitry Bormotov
00011 //
00012 // Status: in progress
00013 //
00014 // Description:
00015 //
00016 // Revision History:
00017 //
00018 
00019 #ifndef _PM_H_
00020 #define _PM_H_
00021 
00022 
00023 #include "global.h"
00024 
00025 
00026 // ---------------------------------- PM ----------------------------------- //
00027 
00028 
00029 class PM
00030 {
00031 
00032 public:
00033 
00034   /////////////////////////////////////////////////////////////////////////
00035   //                                                                     //
00036   // Constructors:                                                       //
00037   //                                                                     //
00038   /////////////////////////////////////////////////////////////////////////
00039   
00040   PM( ) { }
00041   
00042   virtual ~PM( ) { }
00043 
00044   // copy constructor, destructor and operators =, == supplied by compiler.
00045 
00046 
00047   /////////////////////////////////////////////////////////////////////////
00048   //                                                                     //
00049   // Abstract functions:                                                 //
00050   //                                                                     //
00051   /////////////////////////////////////////////////////////////////////////
00052 
00053   virtual PM* clone( ) const = 0;
00054 
00055 
00056   /////////////////////////////////////////////////////////////////////////
00057   //                                                                     //
00058   // Hook functions:                                                     //
00059   //                                                                     //
00060   /////////////////////////////////////////////////////////////////////////
00061 
00062   virtual bool operator == ( const PM& ) const = 0;
00063 
00064   virtual PM* crossover( const PM* ) = 0;
00065 
00066   //virtual void crossover( const PM*, PM*, PM* );
00067 
00068   virtual PM* mutate( ) = 0;
00069 
00070   virtual PM* randomPM( ) = 0; 
00071 
00072   virtual void printOn( ostream& ostr ) const = 0;
00073 
00074 
00075   /////////////////////////////////////////////////////////////////////////
00076   //                                                                     //
00077   // Accessors:                                                          //
00078   //                                                                     //
00079   /////////////////////////////////////////////////////////////////////////
00080 
00081   bool operator != ( const PM& pm ) const { return !(*this == pm); }
00082 
00083 
00084   /////////////////////////////////////////////////////////////////////////
00085   //                                                                     //
00086   // I/O:                                                                //
00087   //                                                                     //
00088   /////////////////////////////////////////////////////////////////////////
00089 
00090   friend ostream& operator << ( ostream& ostr, const PM& pm )
00091   {
00092     pm.printOn(ostr);
00093     return ostr;
00094   }
00095 
00096 
00097 private:
00098 
00099   /////////////////////////////////////////////////////////////////////////
00100   //                                                                     //
00101   // Private functions:                                                  //
00102   //                                                                     //
00103   /////////////////////////////////////////////////////////////////////////
00104 
00105 
00106   /////////////////////////////////////////////////////////////////////////
00107   //                                                                     //
00108   // Data members:                                                       //
00109   //                                                                     //
00110   /////////////////////////////////////////////////////////////////////////
00111 
00112 };
00113 
00114 
00115 #endif

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