Adoptive timeout ...
[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         friend class MultiTuner;
19 };
20
21 class TunerRecord {
22 public:
23         TunerRecord(SearchTuner *_tuner) : tuner(_tuner), tunernumber(-1) {}
24         SearchTuner *getTuner() {return tuner;}
25         TunerRecord *changeTuner(SearchTuner *_newtuner);
26         void updateTuner(SearchTuner *_newtuner) {tuner = _newtuner;}
27         long long getTime(Problem *problem);
28         void setTime(Problem *problem, long long time);
29 private:
30         SearchTuner *tuner;
31         Vector<Problem *> problems;
32         Hashtable<Problem *, long long, uint64_t> timetaken;
33         int tunernumber;
34         friend class MultiTuner;
35         friend void clearVector(Vector<TunerRecord *> *tunerV);
36 };
37
38 class MultiTuner {
39 public:
40         MultiTuner(uint budget, uint rounds, uint timeout);
41         ~MultiTuner();
42         void addProblem(const char *filename);
43         void addTuner(SearchTuner *tuner);
44         void readData(uint numRuns);
45         void updateTimeout(long long metric);
46         void tuneK();
47         void tuneComp();
48         void printData();
49         CMEMALLOC;
50 protected:
51         long long evaluate(Problem *problem, TunerRecord *tuner);
52         double evaluateAll(TunerRecord *tuner);
53         SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k);
54         void mapProblemsToTuners(Vector<TunerRecord *> *tunerV);
55         void improveTuners(Vector<TunerRecord *> *tunerV);
56         TunerRecord *tune(TunerRecord *tuner);
57
58         Vector<TunerRecord *> allTuners;
59         Vector<Problem *> problems;
60         Vector<TunerRecord *> tuners;
61         uint budget;
62         uint rounds;
63         uint timeout;
64         double besttime;
65         int execnum;
66 };
67 #endif