timetaken.put(problem, time);
}
+void TunerRecord::print(){
+ model_print("*************TUNER NUMBER=%d***********\n", tunernumber);
+ tuner->print();
+ model_print("&&&&&&&&&&&&&USED SETTINGS &&&&&&&&&&&&\n");
+ tuner->printUsed();
+ model_print("\n");
+}
+
long long TunerRecord::getTime(Problem *problem) {
if (timetaken.contains(problem))
return timetaken.get(problem);
}
}
+bool MultiTuner::finishTunerExist(TunerRecord *tunerRec){
+ SearchTuner *tuner = tunerRec->getTuner();
+ for(uint i=0; i< explored.getSize(); i++){
+ if(explored.get(i)->getTuner()->equalUsed(tuner))
+ return true;
+ }
+ return false;
+}
+
void MultiTuner::addTuner(SearchTuner *tuner) {
TunerRecord *t = new TunerRecord(tuner);
tuners.push(t);
updateTimeout(problem, metric);
snprintf(buffer, sizeof(buffer), "tuner%uused", execnum);
tuner->getTuner()->addUsed(buffer);
+ if(!finishTunerExist(tuner)){
+ explored.push(tuner);
+ }
}
//Increment execution count
execnum++;
model_print("Mutating %u settings\n", settingsToMutate);
while (settingsToMutate-- != 0) {
newTuner->randomMutate();
+ if(hasExplored(newTuner)){
+ model_print("Note:A repetitive tuner has found\n");
+ settingsToMutate++;
+ }
}
return newTuner;
}
+bool MultiTuner::hasExplored(SearchTuner *newTuner){
+ for (uint i=0; i< explored.getSize(); i++){
+ SearchTuner *tuner = explored.get(i)->getTuner();
+ if(tuner->isSubTunerof(newTuner)){
+ return true;
+ }
+ }
+ return false;
+}
+
TunerRecord *MultiTuner::tune(TunerRecord *tuner) {
TunerRecord *bestTuner = NULL;
double bestScore = DBL_MAX;