Main Page | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members

plCndKernel.h

00001 /*=============================================================================
00002  * Product        : OpenPL 
00003  * File           : plCndKernel.h (before plConditionalKernel.h)
00004  * Author         : Juan-Manuel Ahuactzin
00005  * Creation       : Wed Mar 21 14:08:40 2001
00006  *
00007  *=============================================================================
00008  *     (c) Copyright 2000, Centre National de la Recherche Scientifique,
00009  *                              all rights reserved
00010  *=============================================================================
00011  *
00012  *------------------------- Description ---------------------------------------
00013  *   
00014  *   
00015  *-----------------------------------------------------------------------------
00016  */
00017 
00018 #ifndef _plCndKernel_h
00019 #define _plCndKernel_h
00020 
00021 
00022 #include <plMath.h>
00023 #include <plValues.h>
00024 #include <plVariablesConjunction.h>
00025 #include <plKernel.h>
00026 #include <plJointDistribution.h>
00027 #include <plDataValues.h>
00028 
00029 /*****************************************************************************
00030  *                           External Classes
00031  *****************************************************************************/
00032 class kplVariable;
00033 class kplComputableObject;
00034 
00035 
00036 /*****************************************************************************
00037  *                           Classes Definitions
00038  *****************************************************************************/
00039 
00040 
00041 
00044 class plCndKernel : public plComputableObject
00045 {
00046 
00047 protected:
00048 
00051   virtual plProbValue kernel_compute(const plDataValues &params) const;
00052 
00054   virtual void kernel_rename(const map 
00055                  <kplVariable*, kplVariable *> &rename_map);
00056 
00057 
00058   kplComputableObject* root_kernel;
00059   bool isConditional;
00060   
00061 public:
00062 
00064   plCndKernel();
00065 
00067   plCndKernel(const plCndKernel &cnd_kernel);
00068   
00070   plCndKernel(const class plProduct &);
00071   
00073   plCndKernel(const plComputableObjectList &fun_list);
00074   
00076   virtual ~plCndKernel();
00077 
00081   virtual kplComputableObject*  get_root_kernel() const;
00082 
00083   /* Sets the kernel at kernel level to {\em new_kernel} */
00084   void set_root_kernel(kplComputableObject* new_kernel);
00085 
00088   void instantiate(plKernel& kernel_to_instantiate, 
00089            const plValues& values)const;
00090 
00093   void partial_instantiate(plCndKernel& kernel_to_instantiate,
00094                const plVariablesConjunction& variables_to_instantiate,
00095                const plValues& values)const;
00096 
00097 
00105   plCndKernel partial_instantiate(const plVariablesConjunction& variables_to_instantiate,
00106                   const plValues& values)const;
00107 
00108 
00115   plKernel instantiate(const plValues& values)const;
00116 
00119   void instantiate(plKernel& kernel_to_instantiate, 
00120            int *parameter)const;
00121 
00133   template<typename T> plKernel instantiate( T parameter )const
00134   {
00135     plKernel res;
00136     this->instantiate( res, parameter );
00137     return res;
00138   }
00139 
00151   template<typename T> plKernel instantiate( const vector<T>& parameter )const
00152   {
00153     plKernel res;
00154     this->instantiate( res, parameter );
00155     return res;
00156   }
00157   
00160   void instantiate(plKernel& kernel_to_instantiate, 
00161            unsigned int *parameter)const;
00162   
00165   void instantiate(plKernel& kernel_to_instantiate, 
00166            long int *parameter)const;
00167   
00170   void instantiate(plKernel& kernel_to_instantiate, 
00171            float *parameter)const;
00172   
00175   void instantiate(plKernel& kernel_to_instantiate, 
00176            double *parameter)const;
00177   
00180   void instantiate(plKernel& kernel_to_instantiate, 
00181            long double *parameter)const;
00182   
00185   void instantiate(plKernel& kernel_to_instantiate, 
00186            int parameter)const;
00187 
00190   void instantiate(plKernel& kernel_to_instantiate, 
00191            unsigned int parameter)const;
00192   
00195   void instantiate(plKernel& kernel_to_instantiate, 
00196            long int parameter)const;
00197   
00200   void instantiate(plKernel& kernel_to_instantiate, 
00201            float parameter)const;
00202   
00205   void instantiate(plKernel& kernel_to_instantiate, 
00206            double parameter)const;
00210 #ifndef RAVI_INTERFACE
00211   void instantiate(plKernel& kernel_to_instantiate, 
00212            long double parameter)const;
00213 #endif
00214   
00217   void instantiate(plKernel& kernel_to_instantiate,  
00218            const vector <int> &parameter)const;
00219   
00222   void instantiate(plKernel& kernel_to_instantiate,  
00223            const vector <unsigned int> &parameter)const;
00224   
00227   void instantiate(plKernel& kernel_to_instantiate,  
00228            const vector <long int> &parameter)const;
00229   
00232   void instantiate(plKernel& kernel_to_instantiate,  
00233            const vector <float> &parameter)const;
00234   
00237   void instantiate(plKernel& kernel_to_instantiate,  
00238            const vector <double> &parameter)const;
00239   
00242   void instantiate(plKernel& kernel_to_instantiate,  
00243            const vector <long double> &parameter)const;
00244 
00245 
00247   ostream& write_head(ostream &out) const;
00248 
00250   ostream& write_body(ostream &out) const;
00251 
00253   plCndKernel& operator=(const plCndKernel& assigned_Cnd_kernel);
00254 
00255 
00259   void replace(const plVariablesConjunction &left_vars, const plVariablesConjunction &right_vars, 
00260            plCndKernel &new_cnd_kernel);
00261   
00265   void replace(const plVariablesConjunction &left_vars, plKernel &new_kernel);
00266 
00275   void compile(plCndKernel& result) const;
00276   
00285   void lowMemoryUse_compile(plCndKernel& result)const;
00286   
00298   plCndKernel compile() const;
00299 
00306   void compile(plCndKernel& result,
00307            plCompiledDistributionType compiled_distrib_type)const;
00308 
00318   plCndKernel compile(plCompiledDistributionType compiled_distrib_type)const;
00319 
00320 
00342   void n_compile(plCndKernel& result,
00343          unsigned long n_iterations,
00344          plGeneratorType generator_type = PL_MC_GENERATOR,
00345          plCompiledDistributionType compiled_distrib_type = PL_MAP) const;
00346   
00347 
00369   void time_compile(plCndKernel& result,
00370             double time_in_seconds,
00371             plGeneratorType generator_type = PL_MC_GENERATOR, 
00372             plCompiledDistributionType compiled_distrib_type = PL_MAP) const;
00373 
00374 
00383   plCndKernel time_compile(double time_in_seconds,
00384                plGeneratorType generator_type = PL_MC_GENERATOR, 
00385                plCompiledDistributionType distrib_type = PL_MAP) const;
00386 
00387   double get_exhaustive_compilation_complexity() const;
00388 
00389   double get_exhaustive_update_complexity() const;
00390   
00391   ostream &outputTree(ostream &out)const;
00392   
00393 };
00394 
00395 #endif

Generated on Fri Apr 1 10:58:12 2005 for ProBT by  doxygen 1.4.1