#include "parallel/MultiSolvers.h"
#include "core/Solver.h"
#include "parallel/SolverConfiguration.h"
using namespace Glucose;
void SolverConfiguration::configure(MultiSolvers *ms, int nbsolvers) {
for(int i = 1;i<nbsolvers;i++) { ms->solvers[i]->randomizeFirstDescent = true;
ms->solvers[i]->adaptStrategies = (i%2==0); ms->solvers[i]->forceUnsatOnNewDescent = (i%4==0); }
if (nbsolvers > 8) { for(int i=0;i<nbsolvers;i++) { ms->solvers[i]->goodlimitlbd = 5;
ms->solvers[i]->goodlimitsize = 15;
}
}
}
void SolverConfiguration::configureSAT15Adapt(MultiSolvers *ms, int nbsolvers) {
for(int i = 1;i<nbsolvers;i++) { ms->solvers[i]->randomizeFirstDescent = true;
ms->solvers[i]->adaptStrategies = (i%2==0); }
if (nbsolvers > 8) { for(int i=0;i<nbsolvers;i++) { ms->solvers[i]->goodlimitlbd = 5;
ms->solvers[i]->goodlimitsize = 15;
}
}
}
void SolverConfiguration::configureSAT15Default(MultiSolvers *ms, int nbsolvers) {
for(int i = 1;i<nbsolvers;i++)
ms->solvers[i]->randomizeFirstDescent = true;
if (nbsolvers > 8) { for(int i=0;i<nbsolvers;i++) {
ms->solvers[i]->goodlimitlbd = 5;
ms->solvers[i]->goodlimitsize = 15;
}
}
}
void SolverConfiguration::configureSAT14(MultiSolvers *ms, int nbsolvers) {
if (nbsolvers < 2 ) return;
ms->solvers[1]->var_decay = 0.94;
ms->solvers[1]->max_var_decay = 0.96;
ms->solvers[1]->firstReduceDB=600;
if (nbsolvers < 3 ) return;
ms->solvers[2]->var_decay = 0.90;
ms->solvers[2]->max_var_decay = 0.97;
ms->solvers[2]->firstReduceDB=500;
if (nbsolvers < 4 ) return;
ms->solvers[3]->var_decay = 0.85;
ms->solvers[3]->max_var_decay = 0.93;
ms->solvers[3]->firstReduceDB=400;
if (nbsolvers < 5 ) return;
ms->solvers[4]->var_decay = 0.95;
ms->solvers[4]->max_var_decay = 0.95;
ms->solvers[4]->firstReduceDB=4000;
ms->solvers[4]->lbdQueue.growTo(100);
ms->solvers[4]->sizeLBDQueue = 100;
ms->solvers[4]->K = 0.7;
ms->solvers[4]->incReduceDB = 500;
if (nbsolvers < 6 ) return;
ms->solvers[5]->var_decay = 0.93;
ms->solvers[5]->max_var_decay = 0.96;
ms->solvers[5]->firstReduceDB=100;
ms->solvers[5]->incReduceDB = 500;
if (nbsolvers < 7 ) return;
ms->solvers[6]->var_decay = 0.75;
ms->solvers[6]->max_var_decay = 0.94;
ms->solvers[6]->firstReduceDB=2000;
if (nbsolvers < 8 ) return;
ms->solvers[7]->var_decay = 0.94;
ms->solvers[7]->max_var_decay = 0.96;
ms->solvers[7]->firstReduceDB=800;
if (nbsolvers < 9) return;
if (nbsolvers < 10 ) return;
if (nbsolvers < 11 ) return;
double noisevar_decay = 0.005;
int noiseReduceDB = 50;
for (int i=10;i<nbsolvers;i++) {
ms->solvers[i]-> var_decay = ms->solvers[i%8]->var_decay;
ms->solvers[i]-> max_var_decay = ms->solvers[i%8]->max_var_decay;
ms->solvers[i]-> firstReduceDB= ms->solvers[i%8]->firstReduceDB;
ms->solvers[i]->var_decay += noisevar_decay;
ms->solvers[i]->firstReduceDB+=noiseReduceDB;
if ((i+1) % 8 == 0) {
noisevar_decay += 0.006;
noiseReduceDB += 25;
}
}
}