ConeConstraint.hh 2.38 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
//=============================================================================
//
//  CLASS ConeConstraint
//
//=============================================================================


#ifndef COMISO_CONECONSTRAINT_HH
#define COMISO_CONECONSTRAINT_HH


//== INCLUDES =================================================================

#include <CoMISo/Config/CoMISoDefines.hh>
#include "NConstraintInterface.hh"
#include <Eigen/StdVector>


//== FORWARDDECLARATIONS ======================================================

//== NAMESPACES ===============================================================

namespace COMISO {

//== CLASS DEFINITION =========================================================

	      
class COMISODLLEXPORT ConeConstraint : public NConstraintInterface
{
public:

  // sparse vector type
  typedef NConstraintInterface::SVectorNC SVectorNC;
  typedef NConstraintInterface::SMatrixNC SMatrixNC;

  /// Default constructor
  ConeConstraint();

  // cone constraint of the form -> 0.5*(c_ * x(i_)^2 - x^T Q_ x) >= 0
  ConeConstraint(const double _c, const int _i, const SMatrixNC& _Q);

  virtual int n_unknowns();

  // resize coefficient vector = #unknowns
  void  resize(const unsigned int _n);

  // clear to zero constraint 0 =_type 0
  void  clear();

  const double&    c() const;
        double&    c();

  const int&       i() const;
        int&       i();

  const SMatrixNC& Q() const;
        SMatrixNC& Q();


  virtual double eval_constraint ( const double* _x );
  
  virtual void eval_gradient( const double* _x, SVectorNC& _g      );

  virtual void eval_hessian    ( const double* _x, SMatrixNC& _h      );

  virtual bool   is_linear()         const { return false;}
  virtual bool   constant_gradient() const { return false;}
  virtual bool   constant_hessian () const { return true;}

private:

  // cone constraint of the form -> 0.5*(c_ * x(i_)^2 - x^T Q_ x) >= 0
  double    c_;
  int       i_;
  SMatrixNC Q_;
};


//=============================================================================
} // namespace COMISO
//=============================================================================
// support std vectors
EIGEN_DEFINE_STL_VECTOR_SPECIALIZATION(COMISO::ConeConstraint);
//=============================================================================
#endif // ACG_CONECONSTRAINT_HH defined
//=============================================================================