#ifndef QLP_HH #define QLP_HH #include "matrix.hh" /// inequality constrained quadratic program class Ineq_constrained_qp { friend class Active_constraints; svec cons; svec consrhs; public: Matrix quad; Vector lin; Real const_term; /// void assert_solution(Vector sol) const; /** use a KKT method to assert optimality of sol */ /// solve the problem using a projected gradient method Vector solve(Vector start) const; int dim() const{ return lin.dim(); } /** return the number of variables in the problem */ /// void add_inequality_cons(Vector c, double r); /** add a constraint c*vars >= r PRE c.dim() == dim(); */ /// Ineq_constrained_qp(int novars); /** set up matrices to go with the problem. */ Real eval(Vector v); /** evaluate the quadratic function for input #v# */ void eliminate_var(int idx, Real value); void OK()const; void print() const; }; /// Quadratic programming with mixed linear constraints class Mixed_qp :public Ineq_constrained_qp { svec eq_cons; svec eq_consrhs; public: Mixed_qp(int n); void OK() const; void print() const; Vector solve(Vector start) const; void add_fixed_var(int i , Real value); /// void add_equality_cons(Vector c, double r); /** add a constraint, c*vars == r PRE c.dim()==dim(); */ }; /** problem definition of a quadratic optimisation problem with linear inequality and equality constraints x^T QUAD x /2 + b^T x */ #endif