Пример #1
0
AffExpr affFromValGrad(double y, const VectorXd& x, const VectorXd& dydx, const VarVector& vars) {
    AffExpr aff;
    aff.constant = y - dydx.dot(x);
    aff.coeffs = toDblVec(dydx);
    aff.vars = vars;
    aff = cleanupAff(aff);
    return aff;
}
Пример #2
0
QuadExpr cleanupQuad(const QuadExpr& q) {
  QuadExpr out;
  out.affexpr = cleanupAff(q.affexpr);
  for (size_t i=0; i < q.size(); ++i) {
    if (fabs(q.coeffs[i]) > 1e-8) {
      out.coeffs.push_back(q.coeffs[i]);
      out.vars1.push_back(q.vars1[i]);
      out.vars2.push_back(q.vars2[i]);
    }
  }
  return out;
}
    virtual void CollisionsToDistanceExpressions(const vector<BeliefCollision>& collisions, Configuration& rad,
        const Link2Int& link2ind, const VarVector& theta_vars0, const VarVector& theta_vars1, const DblVec& theta_vals0, const DblVec& theta_vals1, vector<AffExpr>& exprs, bool isTimestep1, NamePairs& bodyNames) {
      vector<AffExpr> exprs0, exprs1;
      BeliefDiscreteCollisionEvaluator<BeliefFuncT>::CollisionsToDistanceExpressions(collisions, rad, link2ind, theta_vars0, theta_vals0, exprs0, false, bodyNames);
      BeliefDiscreteCollisionEvaluator<BeliefFuncT>::CollisionsToDistanceExpressions(collisions, rad, link2ind, theta_vars1, theta_vals1, exprs1, true, bodyNames);

      exprs.resize(exprs0.size());
      for (int i=0; i < exprs0.size(); ++i) {
        exprScale(exprs0[i], (1-collisions[i].time));
        exprScale(exprs1[i], collisions[i].time);
        exprs[i] = AffExpr(0);
        exprInc(exprs[i], exprs0[i]);
        exprInc(exprs[i], exprs1[i]);
        cleanupAff(exprs[i]);
      }
    }
Пример #4
0
ConvexConstraintsPtr ConstraintFromNumDiff::convex(const vector<double>& xin, Model* model) {
    VectorXd x = getVec(xin, vars_);
    MatrixXd jac = calcForwardNumJac(*f_, x, epsilon_);
    ConvexConstraintsPtr out(new ConvexConstraints(model));
    VectorXd y = f_->call(x);
    for (int i=0; i < jac.rows(); ++i) {
        if (enabled_.empty() || enabled_[i]) {
            AffExpr aff;
            aff.constant = y[i] - jac.row(i).dot(x);
            aff.coeffs = toDblVec(jac.row(i));
            aff.vars = vars_;
            aff = cleanupAff(aff);
            if (type() == INEQ) out->addIneqCnt(aff);
            else out->addEqCnt(aff);
        }
    }
    return out;
}
Пример #5
0
ConvexObjectivePtr CostFromNumDiffErr::convex(const vector<double>& xin, Model* model) {
    VectorXd x = getVec(xin, vars_);
    MatrixXd jac = calcForwardNumJac(*f_, x, epsilon_);
    ConvexObjectivePtr out(new ConvexObjective(model));
    VectorXd y = f_->call(x);
    for (int i=0; i < jac.rows(); ++i) {
        if (coeffs_[i] > 0) {
            AffExpr aff;
            aff.constant = y[i] - jac.row(i).dot(x);
            aff.coeffs = toDblVec(jac.row(i));
            aff.vars = vars_;
            aff = cleanupAff(aff);
            if (pen_type_ == SQUARED) {
                out->addQuadExpr(exprMult(exprSquare(aff), coeffs_[i]));
            }
            else {
                out->addAbs(aff, coeffs_[i]);
            }
        }
    }
    return out;
}