Ejemplo n.º 1
0
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());
      }
}
Ejemplo n.º 2
0
Archivo: sat.c Proyecto: cmears/chuffed
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);
}