7 Mixed_qp::add_equality_cons(Vector , double )
13 Mixed_qp::add_fixed_var(int i, Real r)
20 Ineq_constrained_qp::add_inequality_cons(Vector c, double r)
26 Ineq_constrained_qp::Ineq_constrained_qp(int novars):
34 Ineq_constrained_qp::OK() const
37 assert(cons.size() == consrhs.size());
38 Matrix Qdif= quad - quad.transposed();
39 assert(Qdif.norm()/quad.norm() < EPS);
45 Ineq_constrained_qp::eval (Vector v)
47 return v * quad * v + lin * v + const_term;
51 eliminate appropriate variables, until we have a Ineq_constrained_qp
55 cons should be ascending
58 Mixed_qp::solve(Vector start) const
64 Ineq_constrained_qp pure(*this);
66 for (int i= eq_cons.size()-1; i>=0; i--) {
67 pure.eliminate_var(eq_cons[i], eq_consrhs[i]);
68 start.del(eq_cons[i]);
70 Vector sol = pure.solve(start);
71 for (int i= 0; i < eq_cons.size(); i++) {
72 sol.insert( eq_consrhs[i],eq_cons[i]);
78 assume x(idx) == value, and adjust constraints, lin and quad accordingly
83 Ineq_constrained_qp::eliminate_var(int idx, Real value)
85 Vector row(quad.row(idx));
90 quad.delete_column(idx);
96 for (int i=0; i < cons.size(); i++) {
97 consrhs[i] -= cons[i](idx) *value;
105 Ineq_constrained_qp::assert_solution(Vector sol) const
108 for (int i=0; i < cons.size(); i++) {
109 Real R=cons[i] * sol- consrhs[i];
119 Ineq_constrained_qp::print() const
122 mtor << "Quad " << quad;
123 mtor << "lin " << lin <<"\n"
124 << "const " << const_term<<"\n";
125 for (int i=0; i < cons.size(); i++) {
126 mtor << "constraint["<<i<<"]: " << cons[i] << " >= " << consrhs[i];
132 /* *************** */
134 Mixed_qp::Mixed_qp(int n)
135 : Ineq_constrained_qp(n)
143 Ineq_constrained_qp::OK();
144 assert(eq_consrhs.size() == eq_cons.size());
149 Mixed_qp::print() const
152 Ineq_constrained_qp::print();
153 for (int i=0; i < eq_cons.size(); i++) {
154 mtor << "eq cons "<<i<<": x["<<eq_cons[i]<<"] == " << eq_consrhs[i]<<"\n";