Add tuner components
[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) {}
23         SearchTuner *getTuner() {return tuner;}
24 private:
25         SearchTuner *tuner;
26         Vector<Problem *> problems;
27         friend class MultiTuner;
28 };
29
30 class MultiTuner {
31 public:
32         MultiTuner(uint budget, uint timeout);
33         ~MultiTuner();
34         void addProblem(const char *filename);
35         void addTuner(SearchTuner *tuner);
36         void tune();
37         void tuneK();
38         CMEMALLOC;
39 protected:
40         long long evaluate(Problem *problem, SearchTuner *tuner);
41         double evaluateAll(SearchTuner *tuner);
42         SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k);
43         void mapProblemsToTuners(Vector<TunerRecord *> *tunerV);
44
45         Vector<Problem *> problems;
46         Vector<TunerRecord *> tuners;
47         uint budget;
48         uint timeout;
49         int execnum;
50 };
51 #endif