Fix tuner issues
[satune.git] / src / Tuner / autotuner.cc
index ff3aa3f9f81b16b0ea368af69fbf94c72497e028..1bf29d82cb2e46a89fa6c9bbfaf29103d4b219b3 100644 (file)
@@ -6,11 +6,13 @@
 #include <float.h>
 
 #define UNSETVALUE -1
-
+#define TIMEOUTSEC 5000
 AutoTuner::AutoTuner(uint _budget) :
        budget(_budget), result(UNSETVALUE) {
 }
 
+AutoTuner::~AutoTuner() {}
+
 void AutoTuner::addProblem(CSolver *solver) {
        solvers.push(solver);
 }
@@ -18,22 +20,16 @@ void AutoTuner::addProblem(CSolver *solver) {
 long long AutoTuner::evaluate(CSolver *problem, SearchTuner *tuner) {
        CSolver *copy = problem->clone();
        copy->setTuner(tuner);
+       copy->setSatSolverTimeout(TIMEOUTSEC);
        model_print("**********************\n");
        int sat = copy->solve();
-       if (result == UNSETVALUE)
+       if (result == UNSETVALUE && sat != IS_INDETER)
                result = sat;
-       else if (result != sat) {
+       else if (result != sat && sat != IS_INDETER) {
                model_print("&&&&&&&&&&&&&&&&&& Result has changed &&&&&&&&&&&&&\n");
                copy->printConstraints();
        }
-       //model_print("SAT %d\n", result);
-       long long elapsedTime = copy->getElapsedTime();
-//     long long encodeTime = copy->getEncodeTime();
-//     long long solveTime = copy->getSolveTime();
-       long long metric = elapsedTime;
-//     model_print("Elapsed Time: %llu\n", elapsedTime);
-//     model_print("Encode Time: %llu\n", encodeTime);
-//     model_print("Solve Time: %llu\n", solveTime);
+       long long metric = copy->getElapsedTime();
        delete copy;
        return metric;
 }
@@ -51,8 +47,7 @@ double AutoTuner::evaluateAll(SearchTuner *tuner) {
 SearchTuner *AutoTuner::mutateTuner(SearchTuner *oldTuner, uint k) {
        SearchTuner *newTuner = oldTuner->copyUsed();
        uint numSettings = oldTuner->getSize();
-       double factor = 0.3;//Adjust this factor...
-       uint settingsToMutate = (uint)(factor * (((double)numSettings) * (budget - k)) / (budget));
+       uint settingsToMutate = (uint)(AUTOTUNERFACTOR * (((double)numSettings) * (budget - k)) / (budget));
        if (settingsToMutate < 1)
                settingsToMutate = 1;
        model_print("Mutating %u settings\n", settingsToMutate);
@@ -62,7 +57,6 @@ SearchTuner *AutoTuner::mutateTuner(SearchTuner *oldTuner, uint k) {
        return newTuner;
 }
 
-
 void AutoTuner::tune() {
        SearchTuner *bestTuner = NULL;
        double bestScore = DBL_MAX;
@@ -102,7 +96,7 @@ void AutoTuner::tune() {
        }
        model_print("Best tuner:\n");
        bestTuner->print();
-       bestTuner->serialize();
+       bestTuner->serialize("TUNER.conf");
        model_print("Received score %f\n", bestScore);
        if (bestTuner != NULL)
                delete bestTuner;