Resolving conflicts
[satune.git] / src / Tuner / multituner.h
1 #ifndef MULTITUNER_H
2 #define MULTITUNER_H
3 #include "classlist.h"
4 #include "structs.h"
5
6 #define AUTOTUNERFACTOR 0.3
7
8 class Problem {
9 public:
10         Problem(const char *problem);
11         char *getProblem() {return problem;}
12         ~Problem();
13         CMEMALLOC;
14 private:
15         int problemnumber;
16         int result;
17         char *problem;
18         long long besttime;
19         friend class MultiTuner;
20         friend class RandomTuner;
21 };
22
23 class TunerRecord {
24 public:
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);
32         void print();
33 private:
34         SearchTuner *tuner;
35         Vector<Problem *> problems;
36         Hashtable<Problem *, long long, uint64_t> timetaken;
37         int tunernumber;
38         friend class MultiTuner;
39         friend class RandomTuner;
40         friend void clearVector(Vector<TunerRecord *> *tunerV);
41 };
42
43 class MultiTuner {
44 public:
45         MultiTuner(uint budget, uint rounds, uint timeout);
46         ~MultiTuner();
47         void addProblem(const char *filename);
48         void addTuner(SearchTuner *tuner);
49         void readData(uint numRuns);
50         void updateTimeout(Problem *problem, long long metric);
51         void tuneK();
52         bool finishTunerExist(TunerRecord *tuner);
53         void tuneComp();
54         void printData();
55         void findBestThreeTuners();
56         CMEMALLOC;
57 protected:
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;
69         uint budget;
70         uint rounds;
71         uint timeout;
72         int execnum;
73 };
74
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;
78 }
79
80 #endif