1 //============================================================================= 2 // 3 // CLASS ConeConstraint 4 // 5 //============================================================================= 6 7 8 #ifndef COMISO_CONECONSTRAINT_HH 9 #define COMISO_CONECONSTRAINT_HH 10 11 12 //== INCLUDES ================================================================= 13 14 #include <CoMISo/Config/CoMISoDefines.hh> 15 #include "NConstraintInterface.hh" 16 #include <Eigen/StdVector> 17 18 19 //== FORWARDDECLARATIONS ====================================================== 20 21 //== NAMESPACES =============================================================== 22 23 namespace COMISO { 24 25 //== CLASS DEFINITION ========================================================= 26 27 28 class COMISODLLEXPORT ConeConstraint : public NConstraintInterface 29 { 30 public: 31 32 // sparse vector type 33 typedef NConstraintInterface::SVectorNC SVectorNC; 34 typedef NConstraintInterface::SMatrixNC SMatrixNC; 35 36 /// Default constructor 37 ConeConstraint(); 38 39 // cone constraint of the form -> 0.5*(c_ * x(i_)^2 - x^T Q_ x) >= 0 40 ConeConstraint(const double _c, const int _i, const SMatrixNC& _Q); 41 42 /// Destructor 43 virtual ~ConeConstraint(); 44 45 virtual int n_unknowns(); 46 47 // resize coefficient vector = #unknowns 48 void resize(const unsigned int _n); 49 50 // clear to zero constraint 0 =_type 0 51 void clear(); 52 53 const double& c() const; 54 double& c(); 55 56 const int& i() const; 57 int& i(); 58 59 const SMatrixNC& Q() const; 60 SMatrixNC& Q(); 61 62 63 virtual double eval_constraint ( const double* _x ); 64 65 virtual void eval_gradient( const double* _x, SVectorNC& _g ); 66 67 virtual void eval_hessian ( const double* _x, SMatrixNC& _h ); 68 is_linear() const69 virtual bool is_linear() const { return false;} constant_gradient() const70 virtual bool constant_gradient() const { return false;} constant_hessian() const71 virtual bool constant_hessian () const { return true;} 72 73 private: 74 75 // cone constraint of the form -> 0.5*(c_ * x(i_)^2 - x^T Q_ x) >= 0 76 double c_; 77 int i_; 78 SMatrixNC Q_; 79 }; 80 81 82 //============================================================================= 83 } // namespace COMISO 84 //============================================================================= 85 // support std vectors 86 EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(COMISO::ConeConstraint); 87 //============================================================================= 88 #endif // ACG_CONECONSTRAINT_HH defined 89 //============================================================================= 90 91