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