Changing the design by adding basic tuner
[satune.git] / src / Tuner / multituner.h
index fffc5c26affed1e54fc81283c2790a4b714e0ef9..cf42d9fd07b5843f319050aac3af36433d269881 100644 (file)
@@ -2,46 +2,27 @@
 #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