00001 #define __cplusplus__ 00002 #ifndef __RF__ 00003 #define __RF__ 00004 00005 #include<iostream> 00006 #include<istream> 00007 #include<fstream> 00008 #include<string> 00009 #include<vector> 00010 #include<sstream> 00011 #include <cmath> 00012 00013 #include <Neighborhood_System.hpp> 00014 00015 using namespace std; 00016 00027 class Random_Field{ 00028 00029 protected : 00031 Neighborhood_System *NHS; 00032 00034 vector<double> Z_mf; 00036 vector<double> S_mf; 00037 00039 bool precomputed_smf; 00041 bool fix; 00042 00044 virtual void Precompute_Smf(); 00045 00047 double gradient_tol; 00049 uint gradient_maxiter; 00051 vector<double> gradient_step; 00052 00053 00054 00055 public : 00056 00058 virtual ~Random_Field(); 00059 00061 void Fix(); 00062 00064 virtual uint Get_K(); 00066 uint Get_N(); 00067 00069 virtual double H(uint i, uint k, vector<uint> const & Z); 00071 virtual double Hmf(uint i, uint k); 00072 00074 void Compute_PGmf(uint i, vector<double> & PG); 00076 void Compute_PGmf(vector<double> & PG); 00078 void Compute_PG(uint i, vector<uint> const & Z, vector<double> & PG); 00079 00081 void Simulate(vector<uint> & Z); 00083 void Simulate(uint nbiter, vector<uint> & Z); 00084 00086 void Set_Zmf( vector<double> const & z ); 00088 void Set_Zmf( vector<double> const & z , uint i); 00090 void Get_Zmf( vector<double> & z ); 00092 void Set_Z( vector<uint> const & z ); 00093 00095 virtual void Gradient(vector<double> const & tik, vector<double> & Q); 00097 void Gradient(vector<uint> const & Z, vector<double> & Q); 00099 virtual void Update_Gradient(vector<double> const & Q); 00101 void Init_Gradient_Descent(); 00103 void Finalize_Gradient_Descent(); 00105 void Set_Gradient(double step, double tol, uint maxiter); 00107 void Update_Gradient_Step(vector<double> const & Qold, vector<double> const & Q); 00109 void Gradient_Descent(vector<double> const & tik); 00110 00111 00113 virtual void Read_Params(istream & is); 00115 virtual void Write_Params(ostream & os); 00117 void Estimate (vector<double> const & tik); 00119 void Estimate (vector<uint> const & Z); 00120 00122 virtual uint Degrees_Of_Freedom(); 00123 00125 virtual void Info(); 00126 }; 00127 00128 #endif