problems.push(new Problem(filename));
}
+void MultiTuner::printData() {
+ model_print("*********** DATA DUMP ***********\n");
+ for (uint i = 0; i < allTuners.getSize(); i++) {
+ TunerRecord *tuner = allTuners.get(i);
+ SearchTuner *stun = tuner->getTuner();
+ model_print("Tuner %u\n", i);
+ stun->print();
+ model_print("----------------------------------\n\n\n");
+ for (uint j = 0; j < tuner->problems.getSize(); j++) {
+ Problem *problem = tuner->problems.get(j);
+ model_print("Problem %s\n", problem->getProblem());
+ model_print("Time = %lld\n", tuner->getTime(problem));
+ }
+ }
+}
+
void MultiTuner::addTuner(SearchTuner *tuner) {
TunerRecord *t = new TunerRecord(tuner);
tuners.push(t);
+ t->tunernumber = allTuners.getSize();
allTuners.push(t);
}
-long long MultiTuner::evaluate(Problem *problem, SearchTuner *tuner) {
+long long MultiTuner::evaluate(Problem *problem, TunerRecord *tuner) {
char buffer[512];
+ {
+ snprintf(buffer, sizeof(buffer), "problem%u", execnum);
+
+ ofstream myfile;
+ myfile.open (buffer, ios::out);
+
+
+ if (myfile.is_open()) {
+ myfile << problem->getProblem() << endl;
+ myfile.close();
+ }
+ }
+
+ {
+ snprintf(buffer, sizeof(buffer), "tunernum%u", execnum);
+
+ ofstream myfile;
+ myfile.open (buffer, ios::out);
+
+
+ if (myfile.is_open()) {
+ myfile << tuner->tunernumber << endl;
+ myfile.close();
+ }
+ }
+
//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++;
uint tSize = tunerV->getSize();
for (uint i = 0; i < tSize; i++) {
SearchTuner *tmpTuner = mutateTuner(tunerV->get(i)->getTuner(), b);
- tunerV->push(new TunerRecord(tmpTuner));
+ TunerRecord *tmp = new TunerRecord(tmpTuner);
+ tmp->tunernumber = allTuners.getSize();
+ allTuners.push(tmp);
+ tunerV->push(tmp);
}
Hashtable<TunerRecord *, int, uint64_t> scores;
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);
}
int tscore = 0;
if (scores.contains(t))
tscore = scores.get(t);
- if (score > tscore)
+ if (score < tscore)
break;
}
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 = ranking.get(i);
+ for (uint j = 0; j < tunerV->getSize(); j++) {
+ if (tunerV->get(j) == tuner)
+ tunerV->removeAt(j);
+ }
}
}
+ printData();
}
void MultiTuner::mapProblemsToTuners(Vector<TunerRecord *> *tunerV) {
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);
}
for (uint i = 0; i < budget; i++) {
SearchTuner *tmpTuner = mutateTuner(oldTuner->getTuner(), i);
TunerRecord *newTuner = oldTuner->changeTuner(tmpTuner);
+ newTuner->tunernumber = allTuners.getSize();
allTuners.push(newTuner);
double newScore = evaluateAll(newTuner);
newTuner->tuner->printUsed();