Diana
0.8.3
|
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