SATEncoder::SATEncoder(CSolver *_solver) :
cnf(createCNF()),
solver(_solver),
- vector(allocDefVectorEdge()) {
+ vector(allocDefVectorEdge()) {
}
SATEncoder::~SATEncoder() {
booledgeMap.reset();
}
-int SATEncoder::solve() {
+int SATEncoder::solve(long timeout) {
+ cnf->solver->timeout = timeout;
return solveCNF(cnf);
}
void SATEncoder::encodeAllSATEncoder(CSolver *csolver) {
+ if(csolver->isUnSAT()){
+ return;
+ }
SetIteratorBooleanEdge *iterator = csolver->getConstraints();
while (iterator->hasNext()) {
BooleanEdge constraint = iterator->next();
}
Polarity p = constraint->polarity;
uint pSize = constraint->parents.getSize();
- if (solver->getTuner()->getTunable(PROXYVARIABLE, &offon) == 1) {
-// if ((pSize > 1 && p != P_BOTHTRUEFALSE ) || pSize > 2) {
+
+ if ( !edgeIsVarConst(result) && pSize > (uint)solver->getTuner()->getTunable(PROXYVARIABLE, &proxyparameter) ) {
Edge e = getNewVarSATEncoder();
generateProxy(cnf, result, e, p);
booledgeMap.put(constraint, e.node_ptr);
result = e;
- } else{
- booledgeMap.put(constraint, result.node_ptr);
}
return c.isNegated() ? constraintNegate(result) : result;