コード例 #1
0
ファイル: Debug.C プロジェクト: JichaoS/dreal
void CoreSMTSolver::verifyModel()
{
#ifdef DREAL_DEBUG
  bool failed = false;
#endif
  for (int i = 0; i < clauses.size(); i++)
  {
    assert(clauses[i]->mark() == 0);
    Clause& c = *clauses[i];
    for (int j = 0; j < c.size(); j++)
      if (modelValue(c[j]) == l_True ||
          (config.nra_short_sat && modelValue(c[j]) != l_False))
        goto next;

    reportf("unsatisfied clause: ");
    printClause(*clauses[i]);
    printSMTClause( cerr, *clauses[i] );
    reportf("\n");
#ifdef DREAL_DEBUG
    failed = true;
#endif
next:;
  }
#ifdef DREAL_DEBUG
  assert(!failed);
#endif
  // Removed line
  // reportf("Verified %d original clauses.\n", clauses.size());
}
コード例 #2
0
    Real CalibrationHelper::calibrationError() {
        Real error;
        
        switch (calibrationErrorType_) {
          case RelativePriceError:
            error = std::fabs(marketValue() - modelValue())/marketValue();
            break;
          case PriceError:
            error = marketValue() - modelValue();
            break;
          case ImpliedVolError: 
            {
              const Real lowerPrice = blackPrice(0.001);
              const Real upperPrice = blackPrice(10);
              const Real modelPrice = modelValue();

              Volatility implied;
              if (modelPrice <= lowerPrice)
                  implied = 0.001;
              else
                  if (modelPrice >= upperPrice)
                      implied = 10.0;
                  else
                      implied = this->impliedVolatility(
                                          modelPrice, 1e-12, 5000, 0.001, 10);
              error = implied - volatility_->value();
            }
            break;
          default:
            QL_FAIL("unknown Calibration Error Type");
        }
        
        return error;
    }
コード例 #3
0
void SimpSolver::extendModel()
{
    vec<Var> vs;

    // NOTE: elimtable.size() might be lower than nVars() at the moment
    for (int v = 0; v < elimtable.size(); v++)
        if (elimtable[v].order > 0)
            vs.push(v);

    sort(vs, ElimOrderLt(elimtable));

    for (int i = 0; i < vs.size(); i++){
        Var v = vs[i];
        Lit l = lit_Undef;

        for (int j = 0; j < elimtable[v].eliminated.size(); j++){
            Clause& c = *elimtable[v].eliminated[j];

            for (int k = 0; k < c.size(); k++)
                if (var(c[k]) == v)
                    l = c[k];
                else if (modelValue(c[k]) != l_False)
                    goto next;

            assert(l != lit_Undef);
            model[v] = lbool(!sign(l));
            break;

        next:;
        }

        if (model[v] == l_Undef)
            model[v] = l_True;
    }
}
コード例 #4
0
ファイル: SimpSMTSolver.C プロジェクト: aehyvari/OpenSMT2
void SimpSMTSolver::verifyModel()
{
  bool failed = false;
  int  cnt    = 0;
  // NOTE: elimtable.size() might be lower than nVars() at the moment
  for (int i = 0; i < elimtable.size(); i++)
  {
    if (elimtable[i].order > 0)
    {
      for (int j = 0; j < elimtable[i].eliminated.size(); j++)
      {
	cnt++;
	Clause& c = *elimtable[i].eliminated[j];
	for (int k = 0; k < c.size(); k++)
	  if (modelValue(c[k]) == l_True)
	    goto next;

	reportf("unsatisfied clause: ");
	printClause(*elimtable[i].eliminated[j]);
	reportf("\n");
	failed = true;
next:;
      }
    }
  }

  assert(!failed);

  // Modified line
  // reportf("Verified %d eliminated clauses.\n", cnt);
  /*
     if ( config.sat_verbose )
     reportf("# Verified %d eliminated clauses.\n#\n", cnt);
     */
}
コード例 #5
0
ファイル: Solver.C プロジェクト: TatianaBatura/link-grammar
void Solver::verifyModel()
{
  for (int i = 0; i < clauses.size(); i++){
    Clause& c = *clauses[i];
    for (int j = 0; j < c.size(); j++)
      if (modelValue(c[j]) == l_True)
	goto next;

    reportf("unsatisfied clause: ");
    printClause(*clauses[i]);
    reportf("\n");
    // bool failed = false;
    // failed = true;
  next:;
  }


  //  reportf("Verified %d original clauses.\n", clauses.size());
}
コード例 #6
0
ファイル: MiniSATP.C プロジェクト: dreal-deps/opensmt
void MiniSATP::verifyModel()
{
    bool failed = false;
    for (int i = 0; i < clauses.size(); i++){
        assert(clauses[i]->mark() == 0);
        Clause& c = *clauses[i];
        for (int j = 0; j < c.size(); j++)
            if (modelValue(c[j]) == l_True)
                goto next;

        reportf("unsatisfied clause: ");
        printClause(*clauses[i]);
        reportf("\n");
        failed = true;
    next:;
    }

    assert(!failed);

    // Modified Line
    //reportf("Verified %d original clauses.\n", clauses.size());
}