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