00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef _plKernel_h_
00019 #define _plKernel_h_
00020
00021
00022 #include <plComputableObject.h>
00023 #include <plMath.h>
00024 #include <plDataValues.h>
00025 #include <plVariablesConjunction.h>
00026 #include <plValues.h>
00027 #include <plTechniquesTypes.h>
00028
00029
00030
00031
00032 class kplVariable;
00033 class kplKernel;
00034 class kplComputableObject;
00035
00036
00037
00038
00039
00040
00041
00042
00043
00045 class plKernel : public plComputableObject
00046 {
00047
00048 protected:
00049
00052
00053 plProbValue kernel_compute(const plDataValues ¶ms) const;
00054
00056 void kernel_rename(const map <kplVariable*, kplVariable *> &rename_map);
00057
00059 void write_var_test_result(const kplVariable* var_ptr,
00060 const vector <unsigned int>& vars_histogram,
00061 const string &test_name);
00062
00064 kplKernel* root_kernel;
00065
00066
00067
00068
00069 public:
00070
00072 plKernel& operator=(const plKernel& assigned_kernel);
00073
00074
00075
00076 plKernel();
00077
00078
00079 plKernel(const plVariablesConjunction& variables);
00080
00082 plKernel(const plKernel &);
00083
00085 plKernel(const class plProduct &);
00086
00088 plKernel(const class plComputableObjectList &);
00089
00090
00092 virtual ~plKernel();
00093
00097 void draw(plValues &res) const;
00098
00105 plValues draw() const;
00106
00107
00108 #ifndef RAVI_INTERFACE
00109
00111 void draw(int *parameter)const;
00112
00116 void draw(unsigned int *parameter)const;
00117
00120 void draw(long int *parameter)const;
00121
00125 void draw(float *parameter)const;
00126
00129 void draw(double *parameter)const;
00130
00133 void draw(long double *parameter)const;
00134
00140 void draw(int ¶meter)const;
00141
00147 void draw(unsigned int ¶meter)const;
00148
00154 void draw(long int ¶meter)const;
00155
00161 void draw(float ¶meter)const;
00162
00168 void draw(double ¶meter)const;
00169
00175 void draw(long double ¶meter)const;
00176
00179 void draw( vector <int> ¶meter)const;
00180
00184 void draw( vector <unsigned int> ¶meter)const;
00185
00189 void draw( vector <long int> ¶meter)const;
00190
00193 void draw( vector <float> ¶meter)const;
00194
00197 void draw( vector <double> ¶meter)const;
00198
00202 void draw( vector <long double> ¶meter)const;
00203 #endif
00204
00207 void best(plValues &res)const;
00208
00215 plValues best()const;
00216
00217
00218 #ifndef RAVI_INTERFACE
00219
00223 void best(int *parameter)const;
00224
00229 void best(unsigned int *parameter)const;
00230
00235 void best(long int *parameter)const;
00236
00240 void best(float *parameter)const;
00241
00245 void best(double *parameter)const;
00246
00250 void best(long double *parameter)const;
00251
00257 void best(int ¶meter)const;
00258
00264 void best(unsigned int ¶meter)const;
00265
00271 void best(long int ¶meter)const;
00272
00278 void best(float ¶meter)const;
00279
00285 void best(double ¶meter)const;
00286
00292 void best(long double ¶meter)const;
00293
00299 void best( vector <int> ¶meter)const;
00300
00305 void best( vector <unsigned int> ¶meter)const;
00306
00311 void best( vector <long int> ¶meter)const;
00312
00316 void best( vector <float> ¶meter)const;
00317
00321 void best( vector <double> ¶meter)const;
00322
00327 void best( vector <long double> ¶meter)const;
00328
00329 #endif
00330
00342 void test_draw(const unsigned int number_of_tests,const string &file_name);
00343
00362 void test_draw(const unsigned int number_of_tests,const string &file_name,
00363 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n);
00364
00384 void n_compile(plKernel& result,
00385 unsigned long n_iterations,
00386 plGeneratorType generator_type = PL_MC_GENERATOR,
00387 plCompiledDistributionType compiled_distrib_type = PL_MAP)const;
00388
00389
00409 void time_compile(plKernel& result,
00410 double time_in_seconds,
00411 plGeneratorType generator_type = PL_MC_GENERATOR,
00412 plCompiledDistributionType compiled_distrib_type = PL_MAP)const;
00413
00422 plKernel time_compile(double time_in_seconds,
00423 plGeneratorType generator_type = PL_MC_GENERATOR,
00424 plCompiledDistributionType compliled_distrib_type = PL_MAP)const;
00425
00426
00430 void compile(plKernel& result)const;
00431
00439 plKernel compile()const;
00440
00441
00445 void lowMemoryUse_compile(plKernel& result)const;
00446
00447
00451 void compile(plKernel& result,
00452 plCompiledDistributionType compiled_distrib_type)const;
00453
00454
00457 void compile(plKernel& result, const vector <plDataValues>& values,
00458 const plCompiledDistributionType &compilType)const;
00459
00462 void compile(plKernel& result, const vector <plValues>& values,
00463 const plCompiledDistributionType &compilType)const;
00464
00467 void compile(plKernel& result, const list <plValues>& values,
00468 const plCompiledDistributionType &compilType)const;
00469
00470
00473 void build_using_samples(const vector <plDataValues>& values,
00474 const plCompiledDistributionType &compilType);
00475
00478 void build_using_samples(const vector <plValues>& values,
00479 const plCompiledDistributionType &compilType);
00480
00483 void build_using_samples(const list <plValues>& values,
00484 const plCompiledDistributionType &compilType);
00485
00486
00489 void compile(plKernel& result, const vector < pair <plDataValues, plProbValue> >& values,
00490 const plCompiledDistributionType &compilType)const;
00491
00494 void compile(plKernel& result, const vector <pair <plValues, plProbValue> >& values,
00495 const plCompiledDistributionType &compilType)const;
00496
00499 void compile(plKernel& result, const list <pair <plValues, plProbValue> >& values,
00500 const plCompiledDistributionType &compilType)const;
00501
00509 void incremental_n_compile(plKernel& result,
00510 unsigned long n_iterations,
00511 plGeneratorType generatorType = PL_MC_GENERATOR,
00512 plCompiledDistributionType distrib_type = PL_MAP)const;
00513
00522 void incremental_time_compile(plKernel& result,
00523 double time_in_seconds,
00524 plGeneratorType generatorType = PL_MC_GENERATOR,
00525 plCompiledDistributionType distrib_type = PL_MAP)const;
00526
00527
00528
00534 void tabulate(ostream& out=cout, bool print_on_zero=true)const;
00535
00558 void tabulate(vector <plProbValue> &output)const;
00559
00564 void tabulate(list <plProbValue> &output)const;
00565
00570 void sorted_tabulate( vector <pair <plValues, plProbValue> >& output )const;
00571
00577 void plot(char *file_name, const int n_samples = 100)const;
00578
00582 kplComputableObject* get_root_kernel() const;
00583
00584 void set_root_kernel(kplKernel* new_kernel);
00585
00586 void dispose_root_kernel();
00587
00589
00590 ostream& write_head(ostream &out) const;
00591
00593
00594 ostream& write_body(ostream &out) const ;
00595
00597 friend class plCndKernel;
00598
00599
00603 void time_best(plValues &res, double time_in_seconds)const;
00604
00605 #ifndef RAVI_INTERFACE
00606
00610 void time_best(int *parameter, double time_in_seconds)const;
00611
00617 void time_best(unsigned int *parameter, double time_in_seconds)const;
00618
00624 void time_best(long int *parameter, double time_in_seconds)const;
00625
00630 void time_best(float *parameter, double time_in_seconds)const;
00631
00636 void time_best(double *parameter, double time_in_seconds)const;
00637
00642 void time_best(long double *parameter, double time_in_seconds)const;
00643
00650 void time_best(int ¶meter, double time_in_seconds)const;
00651
00658 void time_best(unsigned int ¶meter, double time_in_seconds)const;
00659
00666 void time_best(long int ¶meter, double time_in_seconds)const;
00667
00674 void time_best(float ¶meter, double time_in_seconds)const;
00675
00682 void time_best(double ¶meter, double time_in_seconds)const;
00683
00690 void time_best(long double ¶meter, double time_in_seconds)const;
00691
00698 void time_best( vector <int> ¶meter, double time_in_seconds)const;
00699
00705 void time_best( vector <unsigned int> ¶meter, double time_in_seconds)const;
00706
00712 void time_best( vector <long int> ¶meter, double time_in_seconds)const;
00713
00718 void time_best( vector <float> ¶meter, double time_in_seconds)const;
00719
00724 void time_best( vector <double> ¶meter, double time_in_seconds)const;
00725
00731 void time_best( vector <long double> ¶meter, double time_in_seconds)const;
00732
00743 void draw(plValues &res, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00744
00756 #endif
00757
00758 void draw(int *parameter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00759
00772 #ifndef RAVI_INTERFACE
00773
00774 void draw(unsigned int *parameter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00775
00786 void draw(long int *parameter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00787
00798 void draw(float *parameter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00799
00810 void draw(double *parameter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00811
00822 void draw(long double *parameter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00823
00837 void draw(int ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00838
00844 void draw(unsigned int ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00845
00859 void draw(long int ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00860
00874 void draw(float ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00875
00889 void draw(double ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00890
00904 void draw(long double ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00905
00916 void draw( vector <int> ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00917
00929 void draw( vector <unsigned int> ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00930
00942 void draw( vector <long int> ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00943
00954 void draw( vector <float> ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00955
00966 void draw( vector <double> ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00967
00979 void draw( vector <long double> ¶meter, const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00980
00981 #endif
00982
00983 void best(plValues &res, const plValues &initial_state,
00984 const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00985
00986 #ifndef RAVI_INTERFACE
00987
00988 void best(int *parameter, const plValues &initial_state,
00989 const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00990
00991
00992 void best(unsigned int *parameter,
00993 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00994
00995 void best(long int *parameter,
00996 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
00997
00998 void best(float *parameter,
00999 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01000
01001
01002 void best(double *parameter,
01003 const plValues &initial_state, const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01004
01005 void best(long double *parameter,
01006 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01007
01008 void best(int ¶meter,
01009 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01010
01011
01012 void best(unsigned int ¶meter,
01013 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01014
01015 void best(long int ¶meter,
01016 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01017
01018 void best(float ¶meter,
01019 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01020
01021 void best(double ¶meter,
01022 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01023
01024 void best(long double ¶meter,
01025 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01026
01027 void best( vector <int> ¶meter,
01028 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01029
01030
01031 void best( vector <unsigned int> ¶meter,
01032 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01033
01034
01035 void best( vector <long int> ¶meter,
01036 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01037
01038
01039 void best( vector <float> ¶meter,
01040 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01041
01042
01043 void best( vector <double> ¶meter,
01044 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01045
01046
01047 void best( vector <long double> ¶meter,
01048 const plValues &initial_state,const vector <plFloat> &proposal_standard_deviation, unsigned int n, plProbValue &probability)const;
01049
01050 #endif
01051
01055 void replace(const plVariablesConjunction &left_vars, const plVariablesConjunction &right_vars,
01056 plCndKernel &new_cnd_kernel);
01057
01061 void replace(const plVariablesConjunction &left_vars, plKernel &new_kernel);
01062
01063
01066 double get_exhaustive_compilation_complexity() const;
01067
01070 double get_exhaustive_update_complexity() const;
01071
01073 plFloat computeShannonEntropy() const;
01074
01076 void computeExpectation(plValues & res) const;
01077
01079 void computeExpectation(vector <float> & res) const;
01080
01082 void computeExpectation(vector <double> & res) const;
01083
01085 void computeExpectation(vector <long double> & res) const;
01086
01088 ostream &outputTree(ostream &out)const;
01089
01091 bool isNull()const;
01092
01093 };
01094
01095 #endif