Diana  0.8.3
CapeNLPTask.hpp
00001 /*  -------------------------------------------------------------------------
00002  *                         CapeNLPUtils.hpp  -  description
00003  *                         -------------------
00004  *   begin                      : Mon Jan 2 2006
00005  *   author                     : Teplinskiy Konstantin
00006  *   email                      : konstantin.teplinskiy@gmail.com
00007  *   updated by Gogolenko Sergey: Tue Feb 14 2006
00008  *  -------------------------------------------------------------------------
00009  */
00010 
00011 #ifndef OPTUTILS_H
00012 #define OPTUTILS_H
00013 
00014 #include <Basic/CapeBasic.hpp>
00015 #include <Basic/CapeSolver.hpp>
00016 #include <Basic/CapeModel.hpp>
00017 
00018 #include <iomanip>
00019 
00020 using namespace Common::Types;
00021 using namespace Common::Error;
00022 
00023 namespace Numeric {
00024   namespace Solvers {
00025 
00028     namespace NLPTasks {
00029 
00030       // Forward declaration of interfaces
00031       class ICapeNLPFunction;
00032       class ICapeNLPTask;
00033 
00036       class ICapeNumericNLPTaskFactory {
00037       public:
00040         virtual ICapeNLPTask* CreateNLPTask(Common::Types::CapeString strLibraryName)
00041           throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument,
00042                  Common::Error::ECapeOutOfBounds, Common::Error::ECapeOutOfResources,
00043                  Common::Error::ECapeFailedInitialisation, Common::Error::ECapeUser) = 0;
00044 
00050         virtual Numeric::Solvers::NLPTasks::ICapeNLPTask* CreateOEDTask(Numeric::Solvers::NLPTasks::ICapeNLPTask* pParFitTask,
00051                                                                         Numeric::Solvers::Solver::ICapeNumericNLPSolver* pOptimizer,
00052                                                                         const Common::Parameter::CapeArrayParameterSpec& colDesignVars,
00053                                                                         Common::Types::CapeString strLibraryName)
00054           throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument,
00055                  Common::Error::ECapeOutOfBounds, Common::Error::ECapeOutOfResources,
00056                  Common::Error::ECapeFailedInitialisation, Common::Error::ECapeUser) = 0;
00057 
00059         virtual void Shutdown()
00060           throw (Common::Error::ECapeUnknown, Common::Error::ECapeNoImpl) = 0;
00061       };
00062 
00064       typedef std::vector<ICapeNLPFunction*> ConstraintFuncArray;
00066       typedef std::vector<ICapeNLPTask*> CapeArrayNLPTask;
00067 
00069       typedef enum {
00070         ctGx,   
00071         ctHx    
00072       } ConstraintType;
00073 
00077       class ICapeNLPFunction : public Common::Identification::ICapeIdentification {
00078       public:
00082         virtual Common::Types::CapeDouble Exec(ICapeNLPTask&task) throw (Common::Error::ECapeSolvingError) = 0;
00083 
00085         virtual const Common::Types::CapeString& GetComponentName() const
00086           throw (Common::Error::ECapeUnknown);
00087 
00090         virtual void SetComponentName(const Common::Types::CapeString& _name)
00091           throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
00092 
00094         virtual const Common::Types::CapeString& GetComponentDescription() const
00095           throw (Common::Error::ECapeUnknown);
00096 
00099         virtual void SetComponentDescription(const Common::Types::CapeString& _description)
00100           throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument);
00101       };
00102 
00103 
00107       class ICapeNLPTask : public Common::Utilities::ICapeUtilities, public Common::Identification::ICapeIdentification {
00108       public:
00109 
00111         virtual ~ICapeNLPTask() {}
00112 
00114         virtual eCapeNLPTaskType Type() const = 0;
00115 
00117         virtual const Common::Collection::ICapeCollection& GetSoughtParameters() const
00118           throw(Common::Error::ECapeUnknown) = 0;
00119 
00121         virtual ConstraintFuncArray* GetConstraintFuncList(ConstraintType _type) 
00122           throw(Common::Error::ECapeUnknown) = 0;
00123 
00125         virtual void SetNLPParameters(Parameters::ICapeOptimizationPoint* _pars) 
00126           throw(Common::Error::ECapeUnknown) = 0;
00127 
00129         virtual void UpdateNLPParameters()
00130           throw (Common::Error::ECapeUnknown, Common::Error::ECapeInvalidArgument) = 0;
00131 
00133         virtual const Parameters::ICapeOptimizationPoint& GetNLPParameters() throw(Common::Error::ECapeUnknown) = 0;
00134 
00136         virtual void AddConstraintFunc(ICapeNLPFunction *_func, ConstraintType _type) 
00137           throw(Common::Error::ECapeUnknown) = 0;
00138 
00140         virtual Common::Types::CapeDouble CalcObjFunction() 
00141           throw(Common::Error::ECapeUnknown, Common::Error::ECapeSolvingError) = 0;
00142 
00145         virtual Common::Types::CapeArrayDouble CalcConstraints(ConstraintType _type)
00146           throw(Common::Error::ECapeUnknown) = 0;
00147 
00151         virtual Common::Types::CapeDouble CalcConstraint(Common::Types::CapeLong _index, ConstraintType _type)
00152           throw(Common::Error::ECapeUnknown) = 0;
00153 
00156         virtual Common::Types::CapeShort GetConstraintsCount(ConstraintType type) const
00157           throw(Common::Error::ECapeUnknown) = 0;
00158       };
00159 
00164       class ICapeSensNLPTask : virtual public ICapeNLPTask {
00165       public:
00167         virtual ~ICapeSensNLPTask() {}
00168 
00170         virtual Common::Types::CapeArrayDouble GetObjFunctionGradient() 
00171           throw(Common::Error::ECapeUnknown, Common::Error::ECapeSolvingError) = 0;
00172 
00174         virtual const Diana::DianaSparseArray& GetConstraintsJacobian(ConstraintType _type)
00175           throw(Common::Error::ECapeUnknown, Common::Error::ECapeSolvingError) = 0;
00176 
00177       };
00178 
00179 //       namespace Model {
00180 //      class ICapeNumericContinuousModel;
00181 //       }
00182 
00183 //       namespace Solver {
00184 //      class ICapeNumericSolver;
00185 //       }
00186 
00190       class ICapeDynamicOptimizationTask : virtual public ICapeNLPTask {
00191       public:
00193         virtual ~ICapeDynamicOptimizationTask() {}
00194 
00196         virtual Numeric::Solvers::Model::ICapeNumericContinuousModel* GetModel() 
00197           throw(Common::Error::ECapeUnknown) = 0;
00198 
00200         virtual Numeric::Solvers::Solver::ICapeNumericSolver* GetIntegrator() 
00201           throw(Common::Error::ECapeUnknown) = 0;
00202       };
00203 
00204     }
00205   }
00206 }
00207 
00208 #endif //OPTUTILS_H