PolynomialFunction::PolynomialFunction(CGraphPtr cg)
 : cb_(0),
   cg_(cg), // NULL
   eTol_(1e-10),
   terms_(0)
{
  if (cg->getOut()) {
    recCG_(cg->getOut(), &cb_, &terms_);
  }
}
Esempio n. 2
0
void YEqUCGs::insert(VariablePtr auxvar, CGraphPtr cg)
{
  VariablePtr x;

  assert(auxvar && cg);

  x = *(cg->varsBegin());
  op_.push_back(cg->getOut()->getOp());
  hash_.push_back(evalHash_(cg->getOut(), 1));
  y_.push_back(auxvar);
  x_.push_back(x);
  cg_.push_back(cg);
}
Esempio n. 3
0
VariablePtr YEqUCGs::findY(CGraphPtr cg)
{
  double hash = evalHash_(cg->getOut(), 1);
  OpCode op = cg->getOut()->getOp();
  VariablePtr x = *(cg->varsBegin());
  for (UInt i=0; i<y_.size(); ++i) {
    if (fabs(hash-hash_[i])<1e-10
        && op == op_[i]
        && x == x_[i]
        && cg->isIdenticalTo(cg_[i])) {
      return y_[i];
    }
  }
  return VariablePtr();
}
Esempio n. 4
0
void YEqCGs::insert(VariablePtr auxvar, CGraphPtr cg)
{
  assert(auxvar && cg);
  hash_.push_back(evalHash_(cg->getOut(), 1));
  y_.push_back(auxvar);
  cg_.push_back(cg);
}
Esempio n. 5
0
VariablePtr Transformer::newVar_(CGraphPtr cg, ProblemPtr newp)
{
  VariablePtr iv;
  VariablePtr ov = VariablePtr(); // NULL
  FunctionPtr f;
  LinearFunctionPtr lf;
  ConstraintPtr cnew;
  assert(cg);

  if (OpSumList!=cg->getOut()->getOp()) {
    ov = yUniExprs_->findY(cg);
  } 

  if (!ov) {
    ov = newp->newVariable(VarTran);
    lf = (LinearFunctionPtr) new LinearFunction();
    lf->addTerm(ov, -1.0);
    f = (FunctionPtr) new Function(lf, cg);
    cnew = newp->newConstraint(f, 0.0, 0.0);
#if SPEW
      logger_->msgStream(LogDebug) << me_ << "added new constraint "
                                   << std::endl;
      cnew->write(logger_->msgStream(LogDebug));
#endif 
    assignHandler_(cg, cnew);

    yUniExprs_->insert(ov, cg);
  }
  return ov;
}
Esempio n. 6
0
VariablePtr YEqCGs::findY(CGraphPtr cg)
{
  double hash = evalHash_(cg->getOut(), 1);
  for (UInt i=0; i<y_.size(); ++i) {
    if (fabs(hash-hash_[i])<1e-10 &&
        cg->isIdenticalTo(cg_[i])) {
      return y_[i];
    }
  }
  return VariablePtr();
}
Esempio n. 7
0
void Transformer::assignHandler_(CGraphPtr cg, ConstraintPtr c)
{
  switch (cg->getOut()->getOp()) {
  case OpMult:
  case OpSqr:
    qHandler_->addConstraint(c);
    break;
  default:
    {
    VariablePtr iv;
    VariablePtr ov = VariablePtr();
    LinearFunctionPtr lf = c->getFunction()->getLinearFunction();
    if (lf) {
      assert(lf->getNumTerms()==1);
      ov = lf->termsBegin()->first;
    }
    iv = *(c->getFunction()->getNonlinearFunction()->varsBegin());
    uHandler_->addConstraint(c, iv, ov, 'E');
    }
  }
}