void
Mixed_qp::add_fixed_var(int i, Real r)
{
- eq_cons.add(i);
- eq_consrhs.add(r);
+ eq_cons.push(i);
+ eq_consrhs.push(r);
}
void
Ineq_constrained_qp::add_inequality_cons(Vector c, double r)
{
- cons.add(c);
- consrhs.add(r);
+ cons.push(c);
+ consrhs.push(r);
}
Ineq_constrained_qp::Ineq_constrained_qp(int novars):
Ineq_constrained_qp::OK() const
{
#ifndef NDEBUG
- assert(cons.sz() == consrhs.sz());
+ assert(cons.size() == consrhs.size());
Matrix Qdif= quad - quad.transposed();
assert(Qdif.norm()/quad.norm() < EPS);
#endif
print();
Ineq_constrained_qp pure(*this);
- for (int i= eq_cons.sz()-1; i>=0; i--) {
+ for (int i= eq_cons.size()-1; i>=0; i--) {
pure.eliminate_var(eq_cons[i], eq_consrhs[i]);
start.del(eq_cons[i]);
}
Vector sol = pure.solve(start);
- for (int i= 0; i < eq_cons.sz(); i++) {
+ for (int i= 0; i < eq_cons.size(); i++) {
sol.insert( eq_consrhs[i],eq_cons[i]);
}
return sol;
row.del(idx);
lin +=row ;
- for (int i=0; i < cons.sz(); i++) {
+ for (int i=0; i < cons.size(); i++) {
consrhs[i] -= cons[i](idx) *value;
cons[i].del(idx);
}
void
Ineq_constrained_qp::assert_solution(Vector sol) const
{
- svec<int> binding;
- for (int i=0; i < cons.sz(); i++) {
+ Array<int> binding;
+ for (int i=0; i < cons.size(); i++) {
Real R=cons[i] * sol- consrhs[i];
assert(R> -EPS);
if (R < EPS)
- binding.add(i);
+ binding.push(i);
}
// KKT check...
// todo
mtor << "Quad " << quad;
mtor << "lin " << lin <<"\n"
<< "const " << const_term<<"\n";
- for (int i=0; i < cons.sz(); i++) {
+ for (int i=0; i < cons.size(); i++) {
mtor << "constraint["<<i<<"]: " << cons[i] << " >= " << consrhs[i];
mtor << "\n";
}
#endif
}
-/****************/
+/* *************** */
/*
eliminate appropriate variables, until we have a Ineq_constrained_qp
{
#ifndef NDEBUG
Ineq_constrained_qp::OK();
- assert(eq_consrhs.sz() == eq_cons.sz());
+ assert(eq_consrhs.size() == eq_cons.size());
#endif
}
{
#ifndef NPRINT
Ineq_constrained_qp::print();
- for (int i=0; i < eq_cons.sz(); i++) {
+ for (int i=0; i < eq_cons.size(); i++) {
mtor << "eq cons "<<i<<": x["<<eq_cons[i]<<"] == " << eq_consrhs[i]<<"\n";
}
#endif