Diana
0.8.3
|
00001 #ifndef DIANA_NLP_PARAMETER_H 00002 #define DIANA_NLP_PARAMETER_H 00003 00004 #include <CapeOpen.hpp> 00005 #include "DianaParameter.hpp" 00006 00007 namespace Diana { 00008 // // forward declaration 00009 // class DianaNLPTaskParametersList; 00010 // class DianaSensNLPTaskParametersList; 00011 00015 class IDianaOptimizationPoint : virtual public Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint { 00016 public: 00018 virtual ~IDianaOptimizationPoint(){} 00019 00021 virtual void SetParameter(Common::Types::CapeLong _idx, Common::Types::CapeVariant _value) 00022 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl) = 0; 00023 00024 00025 #ifndef SWIG 00026 00030 virtual Common::Types::CapeBoolean operator == (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parVal) const 00031 throw(Common::Error::ECapeUnknown, Common::Error::ECapeData) = 0; 00032 00037 virtual Common::Types::CapeBoolean operator != (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parVal) const 00038 throw(Common::Error::ECapeUnknown, Common::Error::ECapeData) = 0; 00039 00042 virtual Common::Types::CapeBoolean operator < (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parVal) const = 0; 00043 00045 virtual std::ostream& operator << (std::ostream &os) const = 0; 00046 00048 virtual void operator = (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parList) 00049 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) = 0; 00050 #endif 00051 00053 virtual void SetObjFunction(Common::Types::CapeDouble _dblObjFunc, Common::Types::CapeValidationStatus _vsObjFunc = Common::Types::CAPE_VALID) = 0; 00054 00056 virtual const Common::Collection::ICapeCollection* GetTasksParameters() const = 0; 00057 00058 protected: 00059 // /** Validates components of IDianaOptimizationPoint. It returns 00060 // * a flag to indicate the success or failure of the validation 00061 // * together. The flag is True for success and False for failure. 00062 // * \param value the value of the parameter to validate */ 00063 // virtual Common::Types::CapeBoolean Validate() 00064 // throw(Common::Error::ECapeUnknown, 00065 // Common::Error::ECapeInvalidArgument) = 0; 00066 00068 virtual void MarkAsInvalid() = 0; 00069 }; 00070 00074 class IDianaSensOptimizationPoint : virtual public IDianaOptimizationPoint, virtual public Numeric::Solvers::NLPTasks::Parameters::ICapeSensOptimizationPoint { 00075 public: 00077 virtual ~IDianaSensOptimizationPoint(){} 00078 00080 virtual void SetGradient(const Common::Types::CapeArrayDouble& _value, Common::Types::CapeValidationStatus _vsObjFunc = Common::Types::CAPE_VALID) = 0; 00081 00082 protected:; 00083 }; 00084 00088 class DianaOptimizationPoint : virtual public IDianaOptimizationPoint { 00089 public: 00091 DianaOptimizationPoint(const Common::Collection::ICapeCollection& collSoughtParamsVals); 00092 00096 virtual ~DianaOptimizationPoint () {} 00097 00101 inline Common::Types::CapeLong Content() const { return Numeric::Solvers::NLPTasks::CAPE_OBJFUNC; } 00102 00106 inline Common::Types::CapeBoolean Content(Numeric::Solvers::NLPTasks::eCapeOptPointEntry entryType) const { 00107 return (entryType == Numeric::Solvers::NLPTasks::CAPE_OBJFUNC); 00108 } 00109 00119 inline Common::Types::CapeValidationStatus ValStatus(Numeric::Solvers::NLPTasks::eCapeOptPointEntry entryType) const 00120 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl) { 00121 if(entryType == Numeric::Solvers::NLPTasks::CAPE_OBJFUNC) 00122 return this->vsObjFunc; 00123 else throw Common::Error::ECapeInvalidArgument(Common::Error::ECodeNone, "unsupported by optimization point type of entry", 00124 "Diana", "DianaOptimizationPoint", "ValStatus", ""); 00125 } 00126 00135 inline Common::Types::CapeLong ValStatus() const 00136 throw(Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl) { 00137 return (this->vsObjFunc == Common::Types::CAPE_VALID) ? Numeric::Solvers::NLPTasks::CAPE_OBJFUNC : 0; 00138 } 00139 00141 Common::Types::CapeDouble GetObjFunction() const; 00142 00145 virtual void Reinitialize() 00146 throw(Common::Error::ECapeUnknown); 00147 00150 virtual Common::Types::CapeValidationStatus Update() 00151 throw(Common::Error::ECapeUnknown); 00152 00154 virtual Common::Parameter::ICapeParameterSpec* GetParameterSpec(Common::Types::CapeLong _idx) const 00155 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl); 00156 00158 inline virtual Common::Types::CapeLong GetParametersCount() const { 00159 return this->collParams->Count(); 00160 } 00161 00162 #ifndef SWIG 00163 00167 virtual Common::Types::CapeBoolean operator == (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parVal) const 00168 throw(Common::Error::ECapeUnknown, Common::Error::ECapeData); 00169 00174 inline virtual Common::Types::CapeBoolean operator != (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parVal) const 00175 throw(Common::Error::ECapeUnknown, Common::Error::ECapeData) { 00176 return !(this->operator == (parVal)); 00177 } 00178 00181 virtual Common::Types::CapeBoolean operator < (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parVal) const; 00182 00184 virtual std::ostream& operator << (std::ostream &os) const; 00185 00187 virtual void operator = (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parList) 00188 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) {}// = 0; 00189 #endif 00190 00192 const Common::Types::CapeString& GetComponentName() const 00193 throw(Common::Error::ECapeUnknown) { 00194 return this->strName; 00195 } 00196 00199 void SetComponentName(const Common::Types::CapeString& _name) 00200 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) { 00201 this->strName = _name; 00202 } 00203 00205 const Common::Types::CapeString& GetComponentDescription() const 00206 throw(Common::Error::ECapeUnknown) { 00207 return this->strDescription; 00208 } 00209 00212 void SetComponentDescription(const Common::Types::CapeString& _description) 00213 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) { 00214 this->strDescription = _description; 00215 } 00216 00218 inline void SetObjFunction(Common::Types::CapeDouble _dblObjFunc, Common::Types::CapeValidationStatus _vsObjFunc = Common::Types::CAPE_VALID) { 00219 this->dblObjFunc = _dblObjFunc; this->vsObjFunc = _vsObjFunc; 00220 } 00221 00223 inline const Common::Collection::ICapeCollection* GetTasksParameters() const { 00224 return this->collParams; 00225 } 00226 00228 inline const Common::Types::CapeArrayDouble& GetConstraintValues(Numeric::Solvers::NLPTasks::ConstraintType _type) const { 00229 return (_type == Numeric::Solvers::NLPTasks::ctGx) ? arrGxConstr : arrHxConstr; 00230 } 00231 00233 void SetConstraintValues(Numeric::Solvers::NLPTasks::ConstraintType _type, Common::Types::CapeArrayDouble _arrConstr, Common::Types::CapeValidationStatus _vsConstr = Common::Types::CAPE_VALID); 00234 00235 protected: 00237 inline void MarkAsInvalid() { 00238 this->vsObjFunc = Common::Types::CAPE_NOT_VALIDATED; 00239 this->vsGxConstr = Common::Types::CAPE_NOT_VALIDATED; 00240 this->vsHxConstr = Common::Types::CAPE_NOT_VALIDATED; 00241 } 00242 00243 protected: 00244 const Common::Collection::ICapeCollection* collParams; 00245 00246 Common::Types::CapeValidationStatus vsObjFunc; 00247 00248 Common::Types::CapeDouble dblObjFunc; 00249 00250 Common::Types::CapeValidationStatus vsGxConstr; 00251 Common::Types::CapeArrayDouble arrGxConstr; 00252 00253 Common::Types::CapeValidationStatus vsHxConstr; 00254 Common::Types::CapeArrayDouble arrHxConstr; 00255 00256 Common::Types::CapeString strName; 00257 Common::Types::CapeString strDescription; 00258 }; 00259 00263 class DianaSensOptimizationPoint : virtual public IDianaSensOptimizationPoint { 00264 public: 00266 DianaSensOptimizationPoint(const Common::Collection::ICapeCollection& collSoughtParamsVals); 00267 00271 virtual ~DianaSensOptimizationPoint () {} 00272 00276 inline Common::Types::CapeLong Content() const { 00277 return (Numeric::Solvers::NLPTasks::CAPE_OBJFUNC | Numeric::Solvers::NLPTasks::CAPE_GRADIENT | Numeric::Solvers::NLPTasks::CAPE_GXCONSTR | Numeric::Solvers::NLPTasks::CAPE_HXCONSTR); 00278 } 00279 00283 inline Common::Types::CapeBoolean Content(Numeric::Solvers::NLPTasks::eCapeOptPointEntry entryType) const { 00284 return ((entryType == Numeric::Solvers::NLPTasks::CAPE_OBJFUNC) || (entryType == Numeric::Solvers::NLPTasks::CAPE_GRADIENT)); 00285 } 00286 00296 Common::Types::CapeValidationStatus ValStatus(Numeric::Solvers::NLPTasks::eCapeOptPointEntry entryType) const 00297 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl); 00298 00307 inline Common::Types::CapeLong ValStatus() const 00308 throw(Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl) { 00309 return (((this->vsObjFunc == Common::Types::CAPE_VALID) ? Numeric::Solvers::NLPTasks::CAPE_OBJFUNC : 0) | 00310 ((this->vsObjFuncGradient == Common::Types::CAPE_VALID) ? Numeric::Solvers::NLPTasks::CAPE_GRADIENT : 0)); 00311 } 00312 00314 inline Common::Types::CapeDouble GetObjFunction() const { 00315 return (this->vsObjFunc == Common::Types::CAPE_VALID) ? this->dblObjFunc : Common::Types::CapeDoubleUNDEFINED; 00316 } 00317 00319 inline const Common::Types::CapeArrayDouble& GetGradient() const { 00320 return arrObjFuncGradient; 00321 } 00322 00325 virtual void Reinitialize() 00326 throw(Common::Error::ECapeUnknown); 00327 00328 00331 virtual Common::Types::CapeValidationStatus Update() 00332 throw(Common::Error::ECapeUnknown); 00333 00335 virtual Common::Parameter::ICapeParameterSpec* GetParameterSpec(Common::Types::CapeLong _idx) const 00336 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl); 00337 00339 inline virtual Common::Types::CapeLong GetParametersCount() const { 00340 return this->collParams->Count(); 00341 } 00342 00343 #ifndef SWIG 00344 00348 virtual Common::Types::CapeBoolean operator == (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parVal) const 00349 throw(Common::Error::ECapeUnknown, Common::Error::ECapeData); 00350 00355 inline virtual Common::Types::CapeBoolean operator != (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parVal) const 00356 throw(Common::Error::ECapeUnknown, Common::Error::ECapeData) { return !(this->operator == (parVal)); } 00357 00360 virtual Common::Types::CapeBoolean operator < (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parVal) const; 00361 00363 virtual std::ostream& operator << (std::ostream &os) const; 00364 00366 virtual void operator = (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parList) 00367 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) {}// = 0; 00368 #endif 00369 00371 const Common::Types::CapeString& GetComponentName() const 00372 throw(Common::Error::ECapeUnknown) { 00373 return this->strName; 00374 } 00375 00378 void SetComponentName(const Common::Types::CapeString& _name) 00379 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) { 00380 this->strName = _name; 00381 } 00382 00384 const Common::Types::CapeString& GetComponentDescription() const 00385 throw(Common::Error::ECapeUnknown) { 00386 return this->strDescription; 00387 } 00388 00391 void SetComponentDescription(const Common::Types::CapeString& _description) 00392 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) { 00393 this->strDescription = _description; 00394 } 00395 00397 inline void SetObjFunction(Common::Types::CapeDouble _dblObjFunc, Common::Types::CapeValidationStatus _vsObjFunc = Common::Types::CAPE_VALID) { 00398 this->dblObjFunc = _dblObjFunc; this->vsObjFunc = _vsObjFunc; 00399 } 00400 00402 virtual void SetGradient(const Common::Types::CapeArrayDouble& _arrObjFuncGradient, Common::Types::CapeValidationStatus _vsObjFuncGradient = Common::Types::CAPE_VALID) 00403 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument); 00404 00406 inline const Common::Collection::ICapeCollection* GetTasksParameters() const { 00407 return this->collParams; 00408 } 00409 00410 protected: 00412 inline void MarkAsInvalid() { 00413 this->vsObjFunc = Common::Types::CAPE_NOT_VALIDATED; 00414 this->vsObjFuncGradient = Common::Types::CAPE_NOT_VALIDATED; 00415 } 00416 00417 protected: 00418 const Common::Collection::ICapeCollection* collParams; 00419 00420 Common::Types::CapeValidationStatus vsObjFunc; 00421 00422 Common::Types::CapeDouble dblObjFunc; 00423 00424 Common::Types::CapeValidationStatus vsObjFuncGradient; 00425 00426 Common::Types::CapeArrayDouble arrObjFuncGradient; 00427 00428 Common::Types::CapeString strName; 00429 Common::Types::CapeString strDescription; 00430 }; 00431 00435 class DianaNLPTaskParametersList : public DianaOptimizationPoint { 00436 public: 00437 #ifndef SWIG 00438 00439 explicit DianaNLPTaskParametersList(const Common::Collection::ICapeCollection& collSoughtParamsVals, 00440 Common::Types::CapeBoolean bReinitialize = true); 00441 00442 // /** Initialize class with specified double array. */ 00443 // DianaNLPTaskParametersList(Common::Types::CapeDouble *array, Common::Types::CapeLong size); 00444 00446 DianaNLPTaskParametersList(const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parList); 00448 DianaNLPTaskParametersList(CapeDouble *arr, CapeLong length, Numeric::Solvers::NLPTasks::ICapeNLPTask *task); 00449 #endif 00450 00451 DianaNLPTaskParametersList(const CapeArrayDouble &arr, Numeric::Solvers::NLPTasks::ICapeNLPTask *task); 00452 00454 void SetParameter(Common::Types::CapeLong _idx, Common::Types::CapeVariant _value) 00455 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl); 00456 00458 Common::Types::CapeVariant GetParameterValue(Common::Types::CapeLong _idx) const 00459 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl); 00460 00461 #ifndef SWIG 00462 00463 virtual void operator = (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parList) 00464 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument); 00465 00467 inline ICapeIdentification* clone() 00468 throw(Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl) { 00469 return new DianaNLPTaskParametersList(*this); 00470 } 00471 #endif 00472 00473 private: 00474 Common::Types::CapeArrayVariant arrParamsValues; 00475 }; 00476 00480 class DianaSensNLPTaskParametersList : public DianaSensOptimizationPoint { 00481 public: 00483 explicit DianaSensNLPTaskParametersList(const Common::Collection::ICapeCollection& collSoughtParamsVals, 00484 Common::Types::CapeBoolean bReinitialize = true); 00485 00487 DianaSensNLPTaskParametersList(const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parList); 00488 00490 void SetParameter(Common::Types::CapeLong _idx, Common::Types::CapeVariant _value) 00491 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl); 00492 00494 Common::Types::CapeVariant GetParameterValue(Common::Types::CapeLong _idx) const 00495 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument, Common::Error::ECapeNoImpl); 00496 00497 #ifndef SWIG 00498 00499 virtual void operator = (const Numeric::Solvers::NLPTasks::Parameters::ICapeOptimizationPoint& parList) 00500 throw(Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument); 00501 00503 inline ICapeIdentification* clone() 00504 throw(Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl) { 00505 return new DianaSensNLPTaskParametersList(*this); 00506 } 00507 #endif 00508 00511 virtual void Reinitialize() 00512 throw(Common::Error::ECapeUnknown); 00513 00514 private: 00515 Common::Types::CapeArrayVariant arrParamsValues; 00516 00517 Common::Types::CapeString strName; 00518 Common::Types::CapeString strDescription; 00519 }; 00520 } 00521 00522 #endif //DIANA_NLP_PARAMETER_H