Diana  0.8.3
DianaMultipleParameterFittingTask.hpp
00001 #ifndef DIANA_MULTIPLE_PARAMETERFITTINGTASK_HPP
00002 #define DIANA_MULTIPLE_PARAMETERFITTINGTASK_HPP
00003 
00004 #include <CapeOpen.hpp>
00005 
00006 namespace Numeric {
00007   namespace Solvers {
00008     namespace NLPTasks {
00009 
00010       // Forward declaration of interfaces
00011       class MultipleFittingTask;
00012 
00014       typedef std::vector<MultipleFittingTask*> ArrayMultipleFittingTask;
00015 
00019       class MultipleFittingTask : public DianaNLPTask, public IDianaNLPTaskReporting, public IDianaSensitivityTaskCreator {
00020       public:
00023         MultipleFittingTask(const Common::Types::CapeArrayString& _arrUniqueParamsNames);
00025         //void AddExperiment(ParameterFittingTask tasks) throw (Common::Error::ECapeInvalidArgument);
00026 
00028         ~MultipleFittingTask();
00029 
00032         inline void AddParameterFittingTask(DianaParameterFittingTask* _Task) { arrTasks.push_back(_Task); };
00033 
00035         virtual eCapeNLPTaskType Type()  const { return CAPE_NULLRANGE; }
00036 
00038         virtual CapeDouble CalcObjFunction() 
00039           throw(Common::Error::ECapeUnknown, Common::Error::ECapeSolvingError);
00040 
00050         inline Common::Collection::ICapeCollection* GetParameters()
00051           throw (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation, Common::Error::ECapeNoImpl)
00052         { return &collParameters; };
00053         
00054         // Temporary used methods.
00055         // methods for outputting parameterfitting results (TODO: make a report for tasks)
00057         void EnableOutput(const Common::Types::CapeString& stream_name) throw(Common::Error::ECapeUnknown);
00059         void DisableOutput();
00060 
00063         void Output(Diana::SolverEvents event);
00064 
00066         virtual const Common::Types::CapeString& GetComponentName() const
00067           throw (Common::Error::ECapeUnknown);
00068 
00070         virtual const Common::Types::CapeString& GetComponentDescription() const
00071           throw (Common::Error::ECapeUnknown);
00072 
00085         virtual void Initialize()
00086           throw (Common::Error::ECapeUnknown, Common::Error::ECapeFailedInitialisation,
00087                  Common::Error::ECapeOutOfResources, Common::Error::ECapeLicenceError,
00088                  Common::Error::ECapeBadInvOrder);
00089 
00091         Numeric::Solvers::NLPTasks::ICapeNLPTask* GetSensitivityTask()
00092           throw(Common::Error::ECapeInvalidArgument, Common::Error::ECapeUnknown);
00093 
00094       private:
00096         void SoughtParametersMapping(const Common::Types::CapeArrayString& _arrUniqueParamsNames);
00097 
00098       protected:
00099 
00100         Common::Types::CapeString strName;              
00101         Common::Types::CapeString strDescription;       
00102 
00105         DianaNLPTaskParametersList ExtractParamsForTask(Common::Types::CapeLong _nTask, const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& _parVals);
00106 
00107         std::vector<CapeArrayLong> mtrMappingTable;             
00108         ArrayDianaParameterFittingTask arrTasks;                
00109         Diana::DianaCollection collParameters;                  
00110         Common::Types::CapeArrayString arrUniqueParamsNames;    
00111 
00112       };
00113 
00117       class SensMultipleFittingTask : public MultipleFittingTask, public ICapeSensNLPTask {
00118       public:
00121         SensMultipleFittingTask(const Common::Types::CapeArrayString& _arrUniqueParamsNames);
00122 
00124         ~SensMultipleFittingTask();
00125 
00127         virtual eCapeNLPTaskType Type()  const { return CAPE_FIRSTRANGE; }
00128 
00130         virtual Common::Types::CapeArrayDouble GetObjFunctionGradient() 
00131           throw(Common::Error::ECapeUnknown, Common::Error::ECapeSolvingError);
00132 
00134         virtual const Common::Types::CapeString& GetComponentName() const
00135           throw (Common::Error::ECapeUnknown);
00136 
00138         virtual const Common::Types::CapeString& GetComponentDescription() const
00139           throw (Common::Error::ECapeUnknown);
00140 
00145         virtual const Diana::DianaSparseArray& GetConstraintsJacobian(ConstraintType _type)
00146           throw(Common::Error::ECapeUnknown, Common::Error::ECapeSolvingError);
00147 
00148       protected:
00149 
00150         Common::Types::CapeString strName;                 
00151         Common::Types::CapeString strDescription;          
00152         Diana::DianaSparseArray   mtrConstraintsJacobian;  
00153         Common::Types::CapeDouble dblEpsilon;              
00154 
00155 
00156 
00157       };
00158     }
00159   }
00160 }
00161 
00162 #endif // DIANA_MULTIPLE_PARAMETERFITTINGTASK_HPP