• Main Page
  • Related Pages
  • Classes
  • Files
  • Examples
  • File List
  • File Members

Model.h

Go to the documentation of this file.
00001 //===========================================================================
00041 //===========================================================================
00042 
00043 #ifndef _Model_H_
00044 #define _Model_H_
00045 
00046 #include <fstream>
00047 #include <SharkDefs.h>
00048 #include <Array/Array.h>
00049 
00050 
00051 // forward declarations
00052 class ErrorFunction;
00053 class Optimizer;
00054 
00055 
00134 class Model
00135 {
00136 public:
00138     Model();
00139 
00141     virtual ~Model();
00142 
00143 
00144     //===========================================================================
00162     virtual void model(const Array<double>& input, Array<double>& output) = 0;
00163 
00165     inline void model(const Array<double>& input, Array<double> &output) const
00166     {
00167         Model* pT = const_cast<Model*>(this);
00168         pT->model(input, output);
00169     }
00170 
00171     //===========================================================================
00197     virtual void modelDerivative(const Array<double>& input, Array<double>& derivative);
00198 
00200     inline void modelDerivative(const Array<double>& input, Array<double>& derivative) const
00201     {
00202         Model* pT = const_cast<Model*>(this);
00203         pT->modelDerivative(input, derivative);
00204     }
00205 
00206     //===========================================================================
00233     virtual void modelDerivative(const Array<double>& input, Array<double>& output, Array<double>& derivative);
00234 
00236     inline void modelDerivative(const Array<double>& input, Array<double>& output, Array<double>& derivative) const
00237     {
00238         Model* pT = const_cast<Model*>(this);
00239         pT->modelDerivative(input, output, derivative);
00240     }
00241 
00242     //===========================================================================
00302     virtual void generalDerivative(const Array<double>& input, const Array<double>& coefficient, Array<double>& derivative);
00303 
00305     inline void generalDerivative(const Array<double>& input, const Array<double>& coefficient, Array<double>& derivative) const
00306     {
00307         Model* pT = const_cast<Model*>(this);
00308         pT->generalDerivative(input, coefficient, derivative);
00309     }
00310 
00326     virtual bool isFeasible();
00327 
00329     inline bool isFeasible() const
00330     {
00331         Model* pT = const_cast<Model*>(this);
00332         return pT->isFeasible();
00333     }
00334 
00336     const inline unsigned int getInputDimension() const
00337     {
00338         return inputDimension;
00339     }
00340 
00342     const inline unsigned int getOutputDimension() const
00343     {
00344         return outputDimension;
00345     }
00346 
00349     const inline unsigned int getParameterDimension() const
00350     {
00351         SIZE_CHECK(parameter.ndim() == 1);
00352         return parameter.dim(0);
00353     }
00354 
00356     virtual double getParameter(unsigned int index) const;
00357 
00359     virtual void setParameter(unsigned int index, double value);
00360 
00361     //===========================================================================
00383     inline void setEpsilon(double eps)
00384     {
00385         epsilon = eps;
00386     };
00387 
00401     inline Model* Clone()
00402     {
00403         Model* ret = CloneI();
00404         if (ret == NULL) return NULL;
00405         int p, pc = getParameterDimension();
00406         for (p=0; p<pc; p++) ret->setParameter(p, getParameter(p));
00407         return ret;
00408     }
00409 
00410 protected:
00426     virtual Model* CloneI()
00427     {
00428         return NULL;
00429     }
00430 
00436     Array<double> parameter;
00437 
00439     unsigned int inputDimension;
00440 
00442     unsigned int outputDimension;
00443 
00445     double epsilon;
00446 
00447 public:
00462     virtual void read(std::istream& is);
00463 
00476     virtual void write(std::ostream& os) const;
00477 
00490     friend std::istream& operator >> (std::istream& is, Model& model);
00491 
00502     friend std::ostream& operator << (std::ostream& os, const Model& model);
00506     bool load(const char* filename);
00507 
00511     bool save(const char* filename);
00512 };
00513 
00514 
00515 #endif
00516 
  • Shark Main Page
  • Array
  • Rng
  • LinAlg
  • FileUtil
  • EALib
  • MOO-EALib
  • ReClaM
  • Fuzzy
  • Mixture
  • Tutorials
  • FAQ