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