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

/magnus/back_end/Enumerators/include/HomEnumerators.h

Go to the documentation of this file.
00001 /*
00002  *   $Id: HomEnumerators.h,v 1.2 2000/02/28 21:53:20 bormotov Exp $
00003  */
00004 
00005 // Copyright (C) 2000 The New York Group Theory Cooperative
00006 // See magnus/doc/COPYRIGHT for the full notice.
00007 
00008 // Contents: Declaration of the HomEnumeratorARCer1, RandHomEnumeratorProblem
00009 //           HomEnumeratorARCer2 TotalHomEnumeratorProble classes.
00010 //
00011 // Principal Authors: Denis Serbin
00012 //
00013 // Status: In progress
00014 //
00015 // Revision History:
00016 //
00017 // Special Notes:
00018 //
00019 //
00020 
00021 #ifndef _HomEnumerators_h_
00022 #define _HomEnumerators_h_
00023 
00024 #include "Supervisor.h"
00025 #include "SMEnumerator.h"
00026 #include "WordEnumerator.h"
00027 #include "File.h"
00028 #include "Word.h"
00029 #include "SMFPGroup.h"
00030 #include "RandomNumbers.h"
00031 #include "OutMessages.h"
00032 
00033 
00034 // ------------------------- HomEnumeratorARCer1 --------------------------- //
00035 
00036 
00037 class HomEnumeratorARCer1 : public EnumeratorARCer
00038 {
00039 public:
00040 
00041   /////////////////////////////////////////////////////////////////////////
00042   //                                                                     //
00043   // Constructors:                                                       //
00044   //                                                                     //
00045   /////////////////////////////////////////////////////////////////////////
00046 
00047   HomEnumeratorARCer1( ComputationManager& boss , SMListData& d , GIC& gic ) 
00048     : EnumeratorARCer( boss , d ), 
00049       rangeGIC( gic ),
00050       current( 0 ),
00051       number( 0 ),
00052       avgLength( 0 ),
00053       lengthPicker(2112),                        
00054       genPicker(1812)
00055     { }
00056   
00057   /////////////////////////////////////////////////////////////////////////
00058   //                                                                     //
00059   // Accessors:                                                          //
00060   //                                                                     //
00061   /////////////////////////////////////////////////////////////////////////
00062   
00063   void setArguments( FPGroup g , FPGroup h ,  
00064                      int avgNumbers , int n );
00065   
00066   void setParams( int k , int n )
00067     {
00068       number = n;
00069       avgLength = k;
00070     } 
00071   
00072   // Inherited from ARCer:
00073   // bool takeControl( );
00074   
00075   Map getMap();
00076   
00077   bool extendToHom( Map& );
00078   
00079   /////////////////////////////////////////////////////////////////////////
00080   //                                                                     //
00081   // IPC interaction members:                                            //
00082   //                                                                     //
00083   /////////////////////////////////////////////////////////////////////////
00084 
00085   void enumerate( );
00086   
00087   void writeResults( ostream& );
00088 
00089   void readResults( istream& );
00090 
00091 
00092 private:
00093 
00094   /////////////////////////////////////////////////////////////////////////
00095   //                                                                     //
00096   // Data Members:                                                       //
00097   //                                                                     //
00098   /////////////////////////////////////////////////////////////////////////
00099   
00100   int  current;
00101   int avgLength;
00102   int number;
00103   
00104   NormalRandom lengthPicker;
00105   UniformRandom genPicker;
00106   
00107   GIC& rangeGIC;
00108  
00109   FPGroup G;
00110   FPGroup H;
00111 };
00112 
00113 // ------------------------ RandHomEnumeratorProblem ----------------------- //
00114 
00115 class RandHomEnumeratorProblem : public EnumeratorProblem< Map >
00116 {
00117 public:
00118 
00119   /////////////////////////////////////////////////////////////////////////
00120   //                                                                     //
00121   // Constructors:                                                       //
00122   //                                                                     //
00123   /////////////////////////////////////////////////////////////////////////
00124 
00125   RandHomEnumeratorProblem( SMFPGroup& , SMFPGroup& );
00126   
00127   /////////////////////////////////////////////////////////////////////////
00128   //                                                                     //
00129   // Front End Interfacing:                                              //
00130   //                                                                     //
00131   /////////////////////////////////////////////////////////////////////////
00132 
00133   void viewStructure(ostream& ostr) const;  // overrides SMObject
00134 
00135   /////////////////////////////////////////////////////////////////////////
00136   //                                                                     //
00137   // Control:                                                            //
00138   //                                                                     //
00139   /////////////////////////////////////////////////////////////////////////
00140 
00141   void takeControl( );         // overrides ComputationManager
00142 
00143   Chars getDataFileName() const { return theData.getDataFileName(); }
00144   
00145   /////////////////////////////////////////////////////////////////////////
00146   //                                                                     //
00147   // State Transitions:                                                  //
00148   //                                                                     //
00149   /////////////////////////////////////////////////////////////////////////
00150 
00151   void start( );
00152   
00153   void terminate( ) {  }          // overrides ComputationManager
00154   
00155   void resume( ) {              // overrides ComputationManager
00156     arcer.submitSignal();
00157     
00158     int num = getParameters().getValue("P1");
00159     int avgNumGens = getParameters().getValue("P2");
00160     arcer.setParams( avgNumGens , num );
00161   }
00162    
00163 private:
00164 
00165   /////////////////////////////////////////////////////////////////////////
00166   //                                                                     //
00167   // Data Members:                                                       //
00168   //                                                                     //
00169   /////////////////////////////////////////////////////////////////////////
00170 
00171   SMFPGroup& G;
00172   SMFPGroup& H;
00173   HomEnumeratorARCer1 arcer;
00174   
00175   bool init;
00176   
00177   MirrorSubordinate kbSupervisor;
00178   MirrorSubordinate agSupervisor;
00179 };
00180 
00181 // ------------------------- HomEnumeratorARCer2 --------------------------- //
00182 
00183 
00184 class HomEnumeratorARCer2 : public EnumeratorARCer
00185 {
00186 public:
00187   
00188   /////////////////////////////////////////////////////////////////////////
00189   //                                                                     //
00190   // Constructors:                                                       //
00191   //                                                                     //
00192   /////////////////////////////////////////////////////////////////////////
00193   
00194   HomEnumeratorARCer2( ComputationManager& boss , SMListData& d , GIC& gic ) 
00195     : EnumeratorARCer( boss , d ), 
00196       rangeGIC( gic ),
00197       current( 0 ),
00198       number( 0 ),
00199       we( FreeGroup() )
00200     { }
00201   
00202   /////////////////////////////////////////////////////////////////////////
00203   //                                                                     //
00204   // Accessors:                                                          //
00205   //                                                                     //
00206   /////////////////////////////////////////////////////////////////////////
00207 
00208   void setArguments( FPGroup G , FPGroup H , int n );
00209   void setParam( int k )
00210     {
00211       number = k;
00212     }
00213   
00214   // Inherited from ARCer:
00215   // bool takeControl( );
00216   
00217   Map nextMap();
00218   
00219   bool extendToHom( Map& );
00220   
00221   /////////////////////////////////////////////////////////////////////////
00222   //                                                                     //
00223   // IPC interaction members:                                            //
00224   //                                                                     //
00225   /////////////////////////////////////////////////////////////////////////
00226 
00227   void enumerate( );
00228  
00229   void writeResults( ostream& );
00230 
00231   void readResults( istream& );
00232 
00233 
00234 private:
00235 
00236   /////////////////////////////////////////////////////////////////////////
00237   //                                                                     //
00238   // Data Members:                                                       //
00239   //                                                                     //
00240   /////////////////////////////////////////////////////////////////////////
00241   
00242   WordEnumerator we;
00243   int number;
00244   int current;
00245   
00246   FPGroup G;
00247   FPGroup H;
00248   
00249   class GIC& rangeGIC;
00250 };
00251 
00252 // ------------------------ TotalHomEnumeratorProblem ---------------------- //
00253 
00254 class TotalHomEnumeratorProblem : public EnumeratorProblem< Map >
00255 {
00256 public:
00257 
00258   /////////////////////////////////////////////////////////////////////////
00259   //                                                                     //
00260   // Constructors:                                                       //
00261   //                                                                     //
00262   /////////////////////////////////////////////////////////////////////////
00263 
00264   TotalHomEnumeratorProblem( SMFPGroup& , SMFPGroup& );
00265   
00266   /////////////////////////////////////////////////////////////////////////
00267   //                                                                     //
00268   // Front End Interfacing:                                              //
00269   //                                                                     //
00270   /////////////////////////////////////////////////////////////////////////
00271 
00272   void viewStructure(ostream& ostr) const;  // overrides SMObject
00273 
00274   /////////////////////////////////////////////////////////////////////////
00275   //                                                                     //
00276   // Control:                                                            //
00277   //                                                                     //
00278   /////////////////////////////////////////////////////////////////////////
00279 
00280   void takeControl( );         // overrides ComputationManager
00281 
00282   Chars getDataFileName() const { return theData.getDataFileName(); }
00283   
00284   /////////////////////////////////////////////////////////////////////////
00285   //                                                                     //
00286   // State Transitions:                                                  //
00287   //                                                                     //
00288   /////////////////////////////////////////////////////////////////////////
00289 
00290   void start( );
00291  
00292   void terminate( ) {  }          // overrides ComputationManager
00293   
00294   void resume( ) {              // overrides ComputationManager
00295     arcer.submitSignal();
00296     
00297     arcer.setParam( getParameters().getValue("P") );
00298   }
00299    
00300 private:
00301 
00302   /////////////////////////////////////////////////////////////////////////
00303   //                                                                     //
00304   // Data Members:                                                       //
00305   //                                                                     //
00306   /////////////////////////////////////////////////////////////////////////
00307 
00308   SMFPGroup& G;
00309   SMFPGroup& H;
00310   HomEnumeratorARCer2 arcer;
00311   
00312   bool init;
00313 
00314   MirrorSubordinate kbSupervisor;
00315   MirrorSubordinate agSupervisor;
00316 };
00317 
00318 #endif

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