5 Mixed_qp::add_equality_cons(Vector v, double r)
10 Mixed_qp::add_fixed_var(int i, Real r)
17 Ineq_constrained_qp::add_inequality_cons(Vector c, double r)
23 Ineq_constrained_qp::Ineq_constrained_qp(int novars):
30 Ineq_constrained_qp::OK()const
32 assert(cons.sz() == consrhs.sz());
33 Matrix Qdif= quad - quad.transposed();
34 assert(Qdif.norm() < EPS);
39 Ineq_constrained_qp::eval (Vector v)
41 return v * quad * v + lin * v ;
44 eliminate appropriate variables, until we have a Ineq_constrained_qp
48 cons should be ascending
51 Mixed_qp::solve(Vector start) const
54 Ineq_constrained_qp pure(*this);
56 for (int i= eq_cons.sz()-1; i>=0; i--) {
57 pure.eliminate_var(eq_cons[i], eq_consrhs[i]);
58 start.del(eq_cons[i]);
60 Vector sol = pure.solve(start);
61 for (int i= 0; i < eq_cons.sz(); i++) {
62 sol.insert( eq_consrhs[i],eq_cons[i]);
68 assume x(idx) == value, and adjust constraints, lin and quad accordingly
71 Ineq_constrained_qp::eliminate_var(int idx, Real value)
73 Vector row(quad.row(idx));
78 quad.delete_column(idx);
84 for (int i=0; i < cons.sz(); i++) {
85 consrhs[i] -= cons[i](idx) *value;
93 Mixed_qp::Mixed_qp(int n)
94 : Ineq_constrained_qp(n)
101 Ineq_constrained_qp::OK();
102 assert(eq_consrhs.sz() == eq_cons.sz());
105 Ineq_constrained_qp::print() const
108 mtor << "Quad " << quad;
109 mtor << "lin " << lin <<"\n";
110 for (int i=0; i < cons.sz(); i++) {
111 mtor << "constraint["<<i<<"]: " << cons[i] << " >= " << consrhs[i];
116 Mixed_qp::print() const
118 Ineq_constrained_qp::print();
119 for (int i=0; i < eq_cons.sz(); i++) {
120 mtor << "eq cons "<<i<<": x["<<eq_cons[i]<<"] == " << eq_consrhs[i]<<"\n";
126 Ineq_constrained_qp::assert_solution(Vector sol) const
129 for (int i=0; i < cons.sz(); i++) {
130 Real R=cons[i] * sol- consrhs[i];