void SAT::reduceDB() { int i, j; std::sort((Clause**) learnts, (Clause**) learnts + learnts.size(), activity_lt()); double minAct = learnts[0]->activity(); for(i = 0 ; i < receiveds.size() ; i++){ if(receiveds[i]->received && receiveds[i]->age != 0){ receiveds[i]->age--; } } for (i = j = 0; i < learnts.size()/2; i++) { if (!locked(*learnts[i])) removeClause(*learnts[i]); else learnts[j++] = learnts[i]; } for (; i < learnts.size(); i++) { learnts[j++] = learnts[i]; } learnts.resize(j); int nbLearntsRemoved = i-j; for(i = j = 0 ; i < receiveds.size() ; i++){ if(receiveds[i]->activity() <= minAct && !locked(*receiveds[i]) && receiveds[j]->age == 0){ removeClause(*receiveds[i]); } else receiveds[j++]=receiveds[i]; } receiveds.resize(j); if (so.verbosity >= 1) { fprintf(stderr, "Pruned %d learnt and %d received clauses\n", nbLearntsRemoved, i-j); fprintf(stderr, "Slave %d, received.size()=%d\n", so.thread_no, receiveds.size()); } }
void SAT::reduceDB() { int i, j; std::sort((Clause**) learnts, (Clause**) learnts + learnts.size(), activity_lt()); for (i = j = 0; i < learnts.size()/2; i++) { if (!locked(*learnts[i])) removeClause(*learnts[i]); else learnts[j++] = learnts[i]; } for (; i < learnts.size(); i++) { learnts[j++] = learnts[i]; } learnts.resize(j); if (so.verbosity >= 1) printf("Pruned %d learnt clauses\n", i-j); }