cfRandomExperiment.h

Go to the documentation of this file.
00001 
00002 
00003 
00004 namespace nCenterFocus
00005 {
00006  
00007 template <int variant> 
00008 class CenterFocusExperiment;
00009 
00013 
00014 template <int variant,  class TPolynomXY, class  TFrommer1, class  TFrommer2>
00015 class CFRandomExperiment
00016 {
00017 
00018         private:
00019         #ifdef FORMULA23_TIMER
00020                 uint64_t formula23_compute_bcd_a1_not_zero_count;
00021                 uint64_t formula23_compute_bcd_a2_not_zero_count;
00022                 uint64_t formula23_analyze_all_time_count;
00023                 
00024                 double formula23_step_time_m;
00025                 double formula23_compute_a_time_m;
00026                 double formula23_compute_a_getFocalValues_time_m;
00027                 double compute_bcd_a1_not_zero_time_m;
00028                 double compute_bcd_a1_not_zero_getFocalValues_time_m;
00029                 double compute_bcd_a2_not_zero_getFocalValues_time_m;
00030                 double compute_bcd_a2_not_zero_time_m;
00031                 double computeSolutions_time_m;
00032                 double analyze_all_time_m;
00033                 double random_trials_time_m;
00034 
00035                 Timer tim1_m;
00036                 Timer tim2_m;
00037                 Timer tim3_m;
00038 
00039                 MtcpManager_g.connectTimer(tim1_m);
00040                 MtcpManager_g.connectTimer(tim2_m);
00041                 MtcpManager_g.connectTimer(tim3_m);
00042         #endif
00043 
00044                 typename TFrommer1::RingType::ScalarType        drittel_m;
00045                 typename TFrommer1::RingType::ScalarType        zwei_m;
00046 
00047         
00048 
00049                 D_CenterfocusParams const       * cfparams_m;
00050                 CenterFocusExperiment<variant> & cfExperiment_m;
00051 
00052                 TFrommer1                               & frommer1_m; 
00053                 TFrommer2                               & frommer2_m; 
00054 
00055                 TPolynomXY                              & randomMinusP_polynom_m; 
00056                 TPolynomXY                              & randomQ_polynom_m; 
00057 
00058                 typename TFrommer1::RingType const      & f1_ring_ref_m;
00059                 typename TFrommer2::RingType const      & f2_ring_ref_m;
00060 
00061                 typename TFrommer1::RingType::FieldType const & frommer1_field_ref ; 
00062                 const PolynomialRing<TPolynomXY,typename  TFrommer1::RingType> polynomialRing_m;
00063 
00064 
00065                 DStatistic*                             st_m;    
00066                 RankStatistic                   & fullRankStatistic_m; 
00067                 RankStatistic                   & subRankStatistic_m; 
00068                 LiftAndQuadricsStatistic                & fullQuadricsStatistic_m; 
00069                 LiftAndQuadricsStatistic                & subQuadricsStatistic_m; 
00070                 FailedLiftStatistic             &liftStatistic_m;
00071 
00072 
00073                 typename TFrommer1::RingType::ScalarType * psolutions_m;
00074                 pair <TPolynomXY,TPolynomXY> * pPointSolutions_m;
00075         
00076         
00079                 const pair <TPolynomXY,TPolynomXY>              v1_m;
00080                 const pair <TPolynomXY,TPolynomXY>              v2_m;
00083         const list<CoeffListEntry> coeffRandomVariablesOrder_m;
00084 
00085         list<CoeffListEntry>    initRandomVariablesOrder();
00086 
00087 
00088 
00091         bool    bUseFormula1_m;
00092         
00093         bool    bUseFormula2_m;
00094 
00095         bool    bUseFormula23_m;
00096 
00098         long64 randomCounter_m ;
00099 
00100 public:
00101 
00102         CFRandomExperiment(     CenterFocusExperiment<variant> & cfExperiment,
00103                                                 D_CenterfocusParams const * cfparams,
00104                                                 //D_CenterfocusParams const     * cfparams_m,
00105                                                 TFrommer1                       & frommer1, 
00106                                                 TFrommer2                       & frommer2,
00107                                                 RankStatistic           & fullRankStatistic,
00108                                                 RankStatistic           & subRankStatistic,
00109                                                 LiftAndQuadricsStatistic        & fullQuadricsStatistic,
00110                                                 LiftAndQuadricsStatistic        & subQuadricsStatistic,
00111                                                 FailedLiftStatistic     & liftStatistic,
00112                                                 TPolynomXY                      & randomMinusP_polynom, 
00113                                                 TPolynomXY                      & randomQ_polynom
00114                                                 );
00115 
00116 
00117 
00118         virtual ~CFRandomExperiment();
00119 
00120         void            performRandomExperiment(        );
00121 
00122 
00123         void printTimings(std::ostream & os) const;
00124 
00125 
00126         DStatistic & getStatisticRef();
00127 
00128         long64 getCurrentRandomCounter()        const   {       return randomCounter_m; }
00129 private:
00132 
00133 
00134                 inline bool                     setNextAllCoefficient(  
00135                                                                                         TPolynomXY              & allMinusP_polynom , 
00136                                                                                         TPolynomXY              & allQ_polynom );
00137 
00142                 bool            randomExperimentWellDefined();
00143 
00144                 inline void correctStatistic();
00145                 
00146                 void            performSingleRandomTrial(const TPolynomXY & randomMinusP_polynom,const   TPolynomXY &randomQ_polynom );
00147                 void            performSingleALLExperiment(TPolynomXY  randomMinusP_polynom,  TPolynomXY randomQ_polynom );
00148         
00150  
00151                 inline void     initRandomCoefficients(  
00152                                                                         TPolynomXY  & mp,
00153                                                                         TPolynomXY  & q);
00154                 
00155 
00156                 inline void     initRandomExperiment( );
00157 
00158         
00159 
00160 
00161         
00162         
00164          
00165                 void            compute_q_coeff_x_3_y_0(        const TPolynomXY        & mp,
00166                                                                         TPolynomXY              & q );
00167 
00168 
00171                  
00172                 void            compute_p_coeff_x_3_y_0(        TPolynomXY              & minusP_polynom, 
00173                                                                         const TPolynomXY        & Q_polynom );
00174 
00175 
00181 
00182                 pair <TPolynomXY,TPolynomXY>     performFormula23Step_construct_v1( ) ;
00183 
00185                 pair <TPolynomXY,TPolynomXY>     performFormula23Step_construct_v2( );
00186 
00187                 
00188  
00189                 
00190                  typename TFrommer1::RingType::ScalarType 
00191                         performFormula23Step_getSecondFocalValue        (const pair< TPolynomXY , TPolynomXY  >  &) const;
00192 
00193                 
00194                   typename TFrommer1::RingType::ScalarType 
00195                         performFormula23Step_getThirdFocalValue (       const  pair< TPolynomXY , TPolynomXY  >  &) const;
00196 
00198                 void    performFormula23Step_solveQ(unsigned  int & solutions,typename TFrommer1::RingType::ScalarType  * b );
00199 
00202                  
00206                 void                            performFormula23Step(   TPolynomXY  & minusP_polynom, 
00207                                                                                 TPolynomXY      & Q_polynom);
00208 
00210                 inline  pair<TPolynomXY,TPolynomXY>     performFormula23Step_computePoint(      typename TFrommer1::RingType::ScalarType        v1coeff,
00211                                                                                                         typename TFrommer1::RingType::ScalarType        v2coeff,
00212                                                                                                         const pair<const TPolynomXY ,const TPolynomXY  >  & PQpolynoms  ) const ;
00213 
00214                 inline void                                                     performFormula23Step_computePointNew(typename   TFrommer1::RingType::ScalarType         v1coeff,
00215                                                                                                          typename    TFrommer1::RingType::ScalarType    v2coeff,
00216                                                                                                          const pair<const TPolynomXY ,const TPolynomXY   > & PQPolynomPair,
00217                                                                                                         pair<TPolynomXY,TPolynomXY> & ret
00218                                                                                                         ) const;
00219 
00220         
00221                 
00224 };
00225 
00226 #include "cfRandomExperiment.hpp"
00227 
00228 
00229 } // end namespace nCenterFocus;
Generated on Tue Nov 23 13:10:51 2010 for centerfocus by  doxygen 1.6.3