#define MULTITUNER_H
#include "classlist.h"
#include "structs.h"
+#include "basictuner.h"
-#define AUTOTUNERFACTOR 0.3
-class Problem {
+class MultiTuner : public BasicTuner {
public:
- Problem(const char *problem);
- char *getProblem() {return problem;}
- ~Problem();
- CMEMALLOC;
-private:
- int result;
- char *problem;
- friend class MultiTuner;
+ MultiTuner(uint budget, uint rounds, uint timeout);
+ void readData(uint numRuns);
+ void tuneK();
+ void tune();
+ void findBestThreeTuners();
+protected:
+ double evaluateAll(TunerRecord *tuner);
+ void mapProblemsToTuners(Vector<TunerRecord *> *tunerV);
+ void improveTuners(Vector<TunerRecord *> *tunerV);
+ TunerRecord *tune(TunerRecord *tuner);
+ uint rounds;
};
-class TunerRecord {
-public:
- TunerRecord(SearchTuner *_tuner) : tuner(_tuner) {}
-
-private:
- SearchTuner *tuner;
- friend class MultiTuner;
-};
+inline long long min(long long num1, long long num2, long long num3) {
+ return num1 < num2 && num1 < num3 ? num1 :
+ num2 < num3 ? num2 : num3;
+}
-class MultiTuner {
-public:
- MultiTuner(uint budget, uint timeout);
- ~MultiTuner();
- void addProblem(const char *filename);
- void addTuner(SearchTuner *tuner);
- virtual void tune();
- CMEMALLOC;
-protected:
- long long evaluate(Problem *problem, SearchTuner *tuner);
- double evaluateAll(SearchTuner *tuner);
- SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k);
- Vector<Problem *> problems;
- Vector<TunerRecord *> tuners;
- uint budget;
- uint timeout;
- int execnum;
-};
#endif