allTuners.push(t);
}
-long long MultiTuner::evaluate(Problem *problem, SearchTuner *tuner) {
+long long MultiTuner::evaluate(Problem *problem, TunerRecord *tuner) {
char buffer[512];
//Write out the tuner
snprintf(buffer, sizeof(buffer), "tuner%u", execnum);
- tuner->serialize(buffer);
+ tuner->getTuner()->serialize(buffer);
//Do run
- snprintf(buffer, sizeof(buffer), "deserializerun %s %u tuner%u result%s%u > log%u", problem->getProblem(), timeout, execnum, problem->getProblem(), execnum, execnum);
+ snprintf(buffer, sizeof(buffer), "./run.sh deserializerun %s %u tuner%u result%u > log%u", problem->getProblem(), timeout, execnum, execnum, execnum);
int status = system(buffer);
long long metric = -1;
int sat = IS_INDETER;
+
if (status == 0) {
//Read data in from results file
- snprintf(buffer, sizeof(buffer), "result%s%u", problem->getProblem(), execnum);
+ snprintf(buffer, sizeof(buffer), "result%u", execnum);
ifstream myfile;
myfile.open (buffer, ios::in);
myfile >> sat;
myfile.close();
}
+
+ snprintf(buffer, sizeof(buffer), "tuner%uused", execnum);
+ tuner->getTuner()->addUsed(buffer);
}
//Increment execution count
execnum++;
void MultiTuner::tuneComp() {
Vector<TunerRecord *> *tunerV = new Vector<TunerRecord *>(&tuners);
for (uint b = 0; b < budget; b++) {
-
uint tSize = tunerV->getSize();
for (uint i = 0; i < tSize; i++) {
SearchTuner *tmpTuner = mutateTuner(tunerV->get(i)->getTuner(), b);
TunerRecord *tuner = tunerV->get(j);
long long metric = tuner->getTime(problem);
if (metric == -1) {
- metric = evaluate(problem, tuner->getTuner());
+ metric = evaluate(problem, tuner);
if (metric != -1)
tuner->setTime(problem, metric);
}
places.insertAt(k, tuner);
}
}
- int points = 4;
+ int points = 9;
for (uint k = 0; k < places.getSize() && points; k++) {
TunerRecord *tuner = places.get(k);
- points = points / 2;
+ points = points / 3;
int currScore = 0;
if (scores.contains(tuner))
currScore = scores.get(tuner);
}
ranking.insertAt(j, tuner);
}
+ for (uint i = tuners.getSize(); i < ranking.getSize(); i++) {
+ TunerRecord *tuner = ranking.get(i);
+ for (uint j = 0; j < tunerV->getSize(); j++) {
+ if (tunerV->get(j) == tuner)
+ tunerV->removeAt(j);
+ }
+ }
}
}
TunerRecord *tuner = tunerV->get(j);
long long metric = tuner->getTime(problem);
if (metric == -1) {
- metric = evaluate(problem, tuner->getTuner());
+ metric = evaluate(problem, tuner);
if (metric != -1)
tuner->setTime(problem, metric);
}
Problem *problem = tuner->problems.get(i);
long long metric = tuner->getTime(problem);
if (metric == -1) {
- metric = evaluate(problem, tuner->getTuner());
+ metric = evaluate(problem, tuner);
if (metric != -1)
tuner->setTime(problem, metric);
}