Shark Machine Learning Library
  • About Shark
  • Sourceforge
    • Project Summary
    • Downloads
    • Subversion Repository
  • Getting Started
  • Tutorials
  • FAQ
  • Main Modules
    • ReClaM
    • EALib
    • MOO-EALib
    • Fuzzy
  • Tools
    • Mixture
    • Array
    • Rng
    • LinAlg
    • FileUtil
  • Main Page
  • Related Pages
  • Classes

Model.h

Go to the documentation of this file.
00001 //===========================================================================
00035 //===========================================================================
00036 
00037 #ifndef _Model_H_
00038 #define _Model_H_
00039 
00040 #include <fstream>
00041 #include <SharkDefs.h>
00042 #include <Array/Array.h>
00043 
00044 
00045 // forward declarations
00046 class ErrorFunction;
00047 class Optimizer;
00048 
00049 
00128 class Model
00129 {
00130 public:
00132     Model();
00133 
00135     virtual ~Model();
00136 
00137 
00138     //===========================================================================
00156     virtual void model(const Array<double>& input, Array<double>& output) = 0;
00157 
00159     inline void model(const Array<double>& input, Array<double> &output) const
00160     {
00161         Model* pT = const_cast<Model*>(this);
00162         pT->model(input, output);
00163     }
00164 
00165     //===========================================================================
00191     virtual void modelDerivative(const Array<double>& input, Array<double>& derivative);
00192 
00194     inline void modelDerivative(const Array<double>& input, Array<double>& derivative) const
00195     {
00196         Model* pT = const_cast<Model*>(this);
00197         pT->modelDerivative(input, derivative);
00198     }
00199 
00200     //===========================================================================
00227     virtual void modelDerivative(const Array<double>& input, Array<double>& output, Array<double>& derivative);
00228 
00230     inline void modelDerivative(const Array<double>& input, Array<double>& output, Array<double>& derivative) const
00231     {
00232         Model* pT = const_cast<Model*>(this);
00233         pT->modelDerivative(input, output, derivative);
00234     }
00235 
00236     //===========================================================================
00296     virtual void generalDerivative(const Array<double>& input, const Array<double>& coefficient, Array<double>& derivative);
00297 
00299     inline void generalDerivative(const Array<double>& input, const Array<double>& coefficient, Array<double>& derivative) const
00300     {
00301         Model* pT = const_cast<Model*>(this);
00302         pT->generalDerivative(input, coefficient, derivative);
00303     }
00304 
00320     virtual bool isFeasible();
00321 
00323     inline bool isFeasible() const
00324     {
00325         Model* pT = const_cast<Model*>(this);
00326         return pT->isFeasible();
00327     }
00328 
00330     const inline unsigned int getInputDimension() const
00331     {
00332         return inputDimension;
00333     }
00334 
00336     const inline unsigned int getOutputDimension() const
00337     {
00338         return outputDimension;
00339     }
00340 
00343     const inline unsigned int getParameterDimension() const
00344     {
00345         SIZE_CHECK(parameter.ndim() == 1);
00346         return parameter.dim(0);
00347     }
00348 
00350     virtual double getParameter(unsigned int index) const;
00351 
00353     virtual void setParameter(unsigned int index, double value);
00354 
00355     //===========================================================================
00377     inline void setEpsilon(double eps)
00378     {
00379         epsilon = eps;
00380     };
00381 
00395     inline Model* Clone()
00396     {
00397         Model* ret = CloneI();
00398         if (ret == NULL) return NULL;
00399         int p, pc = getParameterDimension();
00400         for (p=0; p<pc; p++) ret->setParameter(p, getParameter(p));
00401         return ret;
00402     }
00403 
00404 protected:
00420     virtual Model* CloneI()
00421     {
00422         return NULL;
00423     }
00424 
00430     Array<double> parameter;
00431 
00433     unsigned int inputDimension;
00434 
00436     unsigned int outputDimension;
00437 
00439     double epsilon;
00440 
00441 public:
00456     virtual void read(std::istream& is);
00457 
00470     virtual void write(std::ostream& os) const;
00471 
00484     friend std::istream& operator >> (std::istream& is, Model& model);
00485 
00496     friend std::ostream& operator << (std::ostream& os, const Model& model);
00500     bool load(const char* filename);
00501 
00505     bool save(const char* filename);
00506 };
00507 
00508 
00509 #endif
00510