Merging with Brian's commits ...
[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 tuneK();
46         void tuneComp();
47         void printData();
48         CMEMALLOC;
49 protected:
50         long long evaluate(Problem *problem, TunerRecord *tuner);
51         double evaluateAll(TunerRecord *tuner);
52         SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k);
53         void mapProblemsToTuners(Vector<TunerRecord *> *tunerV);
54         void improveTuners(Vector<TunerRecord *> *tunerV);
55         TunerRecord *tune(TunerRecord *tuner);
56
57         Vector<TunerRecord *> allTuners;
58         Vector<Problem *> problems;
59         Vector<TunerRecord *> tuners;
60         uint budget;
61         uint rounds;
62         uint timeout;
63         int execnum;
64 };
65 #endif