6 #define AUTOTUNERFACTOR 0.3
10 Problem(const char *problem);
11 char *getProblem() {return problem;}
19 friend class MultiTuner;
20 friend class RandomTuner;
25 TunerRecord(SearchTuner *_tuner) : tuner(_tuner), tunernumber(-1) {}
26 TunerRecord(SearchTuner *_tuner, int _tunernumber) : tuner(_tuner), tunernumber(_tunernumber) {}
27 SearchTuner *getTuner() {return tuner;}
28 TunerRecord *changeTuner(SearchTuner *_newtuner);
29 void updateTuner(SearchTuner *_newtuner) {tuner = _newtuner;}
30 long long getTime(Problem *problem);
31 void setTime(Problem *problem, long long time);
35 Vector<Problem *> problems;
36 Hashtable<Problem *, long long, uint64_t> timetaken;
38 friend class MultiTuner;
39 friend class RandomTuner;
40 friend void clearVector(Vector<TunerRecord *> *tunerV);
45 MultiTuner(uint budget, uint rounds, uint timeout);
47 void addProblem(const char *filename);
48 void addTuner(SearchTuner *tuner);
49 void readData(uint numRuns);
50 void updateTimeout(Problem *problem, long long metric);
52 bool finishTunerExist(TunerRecord *tuner);
55 void findBestThreeTuners();
58 long long evaluate(Problem *problem, TunerRecord *tuner);
59 double evaluateAll(TunerRecord *tuner);
60 SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k);
61 bool hasExplored(SearchTuner *newTuner);
62 void mapProblemsToTuners(Vector<TunerRecord *> *tunerV);
63 void improveTuners(Vector<TunerRecord *> *tunerV);
64 TunerRecord *tune(TunerRecord *tuner);
65 Vector<TunerRecord *> allTuners;
66 Vector<TunerRecord *> explored;
67 Vector<Problem *> problems;
68 Vector<TunerRecord *> tuners;
75 inline long long min(long long num1, long long num2, long long num3) {
76 return num1 < num2 && num1 < num3 ? num1 :
77 num2 < num3 ? num2 : num3;