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