edits
[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         friend void clearVector(Vector<TunerRecord *> *tunerV);
29 };
30
31 class MultiTuner {
32 public:
33         MultiTuner(uint budget, uint rounds, uint timeout);
34         ~MultiTuner();
35         void addProblem(const char *filename);
36         void addTuner(SearchTuner *tuner);
37
38         void tuneK();
39         CMEMALLOC;
40 protected:
41         long long evaluate(Problem *problem, SearchTuner *tuner);
42         double evaluateAll(SearchTuner *tuner, Vector<Problem *> *tProblems);
43         SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k);
44         void mapProblemsToTuners(Vector<TunerRecord *> *tunerV);
45         void improveTuners(Vector<TunerRecord *> *tunerV);
46         SearchTuner *tune(SearchTuner *tuner, Vector<Problem *> *tProblems);
47
48
49         Vector<Problem *> problems;
50         Vector<TunerRecord *> tuners;
51         uint budget;
52         uint rounds;
53         uint timeout;
54         int execnum;
55 };
56 #endif