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