Add tuner components
[satune.git] / src / Tuner / multituner.cc
index f6940849262ce184878cdeaa68486de933a30990..68b896eaa84826ae33998a6b12b8752aba3a3398 100644 (file)
@@ -46,7 +46,7 @@ long long MultiTuner::evaluate(Problem *problem, SearchTuner *tuner) {
        tuner->serialize(buffer);
 
        //Do run
-       snprintf(buffer, sizeof(buffer), "deserializerun %s %u tuner%u result%s%u", problem->getProblem(), timeout, execnum, problem->getProblem(), execnum);
+       snprintf(buffer, sizeof(buffer), "deserializerun %s %u tuner%u result%s%u > log%u", problem->getProblem(), timeout, execnum, problem->getProblem(), execnum, execnum);
        int status = system(buffer);
 
        long long metric = -1;
@@ -76,6 +76,33 @@ long long MultiTuner::evaluate(Problem *problem, SearchTuner *tuner) {
        return metric;
 }
 
+void MultiTuner::mapProblemsToTuners(Vector<TunerRecord *> *tunerV) {
+       for (uint i = 0; i < problems.getSize(); i++) {
+               Problem *problem = problems.get(i);
+               TunerRecord *bestTuner = NULL;
+               long long bestscore = 0;
+               for (uint j = 0; j < tunerV->getSize(); j++) {
+                       TunerRecord *tuner = tunerV->get(j);
+                       long long metric = evaluate(problem, tuner->getTuner());
+                       if ((bestTuner == NULL && metric != -1) ||
+                                       (metric < bestscore && metric != -1)) {
+                               bestTuner = tuner;
+                               bestscore = metric;
+                       }
+               }
+               if (bestTuner != NULL)
+                       bestTuner->problems.push(problem);
+       }
+}
+
+
+void MultiTuner::tuneK() {
+       Vector<TunerRecord *> *tunerV = new Vector<TunerRecord *>(&tuners);
+
+
+       delete tunerV;
+}
+
 double MultiTuner::evaluateAll(SearchTuner *tuner) {
        double product = 1;
        for (uint i = 0; i < problems.getSize(); i++) {