Diana  0.8.3
DianaNLPParameter.hpp
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