Adoptive timeout ...
authorHamed Gorjiara <hgorjiar@uci.edu>
Thu, 18 Oct 2018 00:52:00 +0000 (17:52 -0700)
committerHamed Gorjiara <hgorjiar@uci.edu>
Thu, 18 Oct 2018 00:52:00 +0000 (17:52 -0700)
src/Tuner/multituner.cc
src/Tuner/multituner.h
src/common.h
src/config.h
src/csolver.cc

index 3961d2bea308df84c3e023fe54e80c7b0915cd72..ec8bcb78a56fd5dd8c0d5e231e64b4b943bc30a3 100644 (file)
@@ -39,7 +39,7 @@ TunerRecord *TunerRecord::changeTuner(SearchTuner *_newtuner) {
 }
 
 MultiTuner::MultiTuner(uint _budget, uint _rounds, uint _timeout) :
-       budget(_budget), rounds(_rounds), timeout(_timeout), execnum(0) {
+       budget(_budget), rounds(_rounds), timeout(_timeout), besttime(_timeout), execnum(0) {
 }
 
 MultiTuner::~MultiTuner() {
@@ -193,7 +193,7 @@ long long MultiTuner::evaluate(Problem *problem, TunerRecord *tuner) {
                        myfile >> sat;
                        myfile.close();
                }
-
+               updateTimeout(metric);
                snprintf(buffer, sizeof(buffer), "tuner%uused", execnum);
                tuner->getTuner()->addUsed(buffer);
        }
@@ -205,9 +205,28 @@ long long MultiTuner::evaluate(Problem *problem, TunerRecord *tuner) {
        } else if (problem->result != sat && sat != IS_INDETER) {
                model_print("******** Result has changed ********\n");
        }
+       if(sat == IS_INDETER && metric != -1){ //The case when we have a timeout
+               metric = -1; 
+       }
        return metric;
 }
 
+void MultiTuner::updateTimeout(long long metric){
+       double currentTime= metric / NANOSEC;
+       if(currentTime < besttime){
+               besttime = currentTime;
+       }
+       uint adoptive;
+       if(besttime > 30){
+               adoptive = besttime * 5;
+       }else {
+               adoptive = 150;
+       }
+       if(adoptive < timeout){
+               timeout = adoptive;
+       }
+}
+
 void MultiTuner::tuneComp() {
        Vector<TunerRecord *> *tunerV = new Vector<TunerRecord *>(&tuners);
        for (uint b = 0; b < budget; b++) {
@@ -234,8 +253,8 @@ void MultiTuner::tuneComp() {
                                        if (tuner->getTime(problem) == -1) {
                                                tuner->problems.push(problem);
                                        }
-                                       LOG("%u.Problem<%s>\tTuner<%d>\tMetric<%lld>\n", i, problem->problem,tuner->tunernumber, metric);
-                                       LOG("*****************************\n");
+                                       DEBUG("%u.Problem<%s>\tTuner<%p, %d>\tMetric<%lld>\n", i, problem->problem,tuner, tuner->tunernumber, metric);
+                                       DEBUG("*****************************\n");
                                        if (metric != -1)
                                                tuner->setTime(problem, metric);
                                }
@@ -245,7 +264,7 @@ void MultiTuner::tuneComp() {
                                                if (metric < places.get(k)->getTime(problem))
                                                        break;
                                        }
-                                       LOG("place[%u]=Tuner<%d>\n", k, tuner->tunernumber);
+                                       DEBUG("place[%u]=Tuner<%p,%d>\n", k, tuner, tuner->tunernumber);
                                        places.insertAt(k, tuner);
                                }
                        }
@@ -256,8 +275,8 @@ void MultiTuner::tuneComp() {
                                if (scores.contains(tuner))
                                        currScore = scores.get(tuner);
                                currScore += points;
-                               LOG("Problem<%s>\tTuner<%d>\tmetric<%d>\n", problem->problem, tuner->tunernumber, currScore);
-                               LOG("**************************\n");
+                               DEBUG("Problem<%s>\tTuner<%p,%d>\tmetric<%d>\n", problem->problem, tuner, tuner->tunernumber,  currScore);
+                               DEBUG("**************************\n");
                                scores.put(tuner, currScore);
                                points = points / 3;
                        }
@@ -277,8 +296,8 @@ void MultiTuner::tuneComp() {
                                if (score > tscore)
                                        break;
                        }
-                       LOG("ranking[%u]=tuner<%d>(Score=%d)\n", j, tuner->tunernumber, score);
-                       LOG("************************\n");
+                       DEBUG("ranking[%u]=tuner<%p,%u>(Score=%d)\n", j, tuner, tuner->tunernumber, score);
+                       DEBUG("************************\n");
                        ranking.insertAt(j, tuner);
                }
                LOG("tunerSize=%u\trankingSize=%u\ttunerVSize=%u\n", tuners.getSize(), ranking.getSize(), tunerV->getSize());
index 1c654eb3cf7c1ea748eb73ca0be129b5283bc7ae..f566828d86a72f5b282ab0b1ca07528df1e0b5c3 100644 (file)
@@ -42,6 +42,7 @@ public:
        void addProblem(const char *filename);
        void addTuner(SearchTuner *tuner);
        void readData(uint numRuns);
+        void updateTimeout(long long metric);
        void tuneK();
        void tuneComp();
        void printData();
@@ -60,6 +61,7 @@ protected:
        uint budget;
        uint rounds;
        uint timeout;
+       double besttime;
        int execnum;
 };
 #endif
index 2b67e04f94afb80e2aa684a6de69c64e1a5d4500..39d4ea4912675af08b3aee24a52a1ec44b53038a 100644 (file)
@@ -18,6 +18,7 @@
 #include "config.h"
 #include "time.h"
 
+#define NANOSEC 1000000000.0
 
 #if 0
 extern int model_out;
index ce13d3c8ef6873db22e29ce7dc5d7e25ef0b1630..4d56dfbd3b95618fd04b8fe3fe60f8e39f5bc18b 100644 (file)
@@ -16,7 +16,7 @@
 
 /** Turn on debugging. */
 #ifndef CONFIG_DEBUG
-//#define CONFIG_DEBUG
+#define CONFIG_DEBUG
 #endif
 
 #ifndef CONFIG_ASSERT
index 51f094334d0086c1d99fe3e9fa7cff5b547acf6e..fbe0dd082d5070229834d892c2578ecb6af6070b 100644 (file)
@@ -577,7 +577,6 @@ void CSolver::inferFixedOrders() {
        }
 }
 
-#define NANOSEC 1000000000.0
 int CSolver::solve() {
        long long startTime = getTimeNano();
        bool deleteTuner = false;