Finding the 3 best tuners after the learning process
[satune.git] / src / Tuner / staticsearchtuner.cc
1 #include "staticsearchtuner.h"
2 #include <iostream>
3 #include <fstream>
4 using namespace std;
5
6 StaticSearchTuner::StaticSearchTuner() {
7         graphEncoding = false;
8         naiveEncoding = ELEM_UNASSIGNED;
9         ifstream myfile;
10         myfile.open (TUNEFILE, ios::in);
11         if (myfile.is_open()) {
12                 bool hasVar;
13                 VarType type1;
14                 VarType type2;
15                 TunableParam param;
16                 int lowValue;
17                 int highValue;
18                 int defaultValue;
19                 int selectedValue;
20                 while (myfile >> hasVar >> type1 >> type2 >> param >> lowValue >> highValue >> defaultValue >> selectedValue) {
21                         TunableSetting *setting;
22
23                         if (hasVar) {
24                                 setting = new TunableSetting(type1, type2, param);
25                         } else {
26                                 setting = new TunableSetting(param);
27                         }
28                         setting->setDecision(lowValue, highValue, defaultValue, selectedValue);
29                         usedSettings.add(setting);
30                 }
31                 myfile.close();
32         }
33 }
34
35 StaticSearchTuner *StaticSearchTuner::copyUsed() {
36         StaticSearchTuner *tuner = new StaticSearchTuner();
37         SetIteratorTunableSetting *iterator = usedSettings.iterator();
38         while (iterator->hasNext()) {
39                 TunableSetting *setting = iterator->next();
40                 TunableSetting *copy = new TunableSetting(setting);
41                 tuner->settings.add(copy);
42         }
43         if (naiveEncoding != ELEM_UNASSIGNED) {
44                 tuner->graphEncoding = graphEncoding;
45                 tuner->naiveEncoding = naiveEncoding;
46         }
47         delete iterator;
48         return tuner;
49 }
50
51 StaticSearchTuner::~StaticSearchTuner() {
52         SetIteratorTunableSetting *iterator = settings.iterator();
53         while (iterator->hasNext()) {
54                 TunableSetting *setting = iterator->next();
55                 delete setting;
56         }
57         delete iterator;
58 }
59
60 int StaticSearchTuner::nextStaticTuner() {
61         if (naiveEncoding == ELEM_UNASSIGNED) {
62                 naiveEncoding = ONEHOT;
63                 SetIteratorTunableSetting *iter = settings.iterator();
64                 while (iter->hasNext()) {
65                         TunableSetting *setting = iter->next();
66                         if (setting->param == NAIVEENCODER) {
67                                 setting->selectedValue = ONEHOT;
68                         } else if (setting->param == ENCODINGGRAPHOPT) {
69                                 setting->selectedValue = false;
70                         }
71                 }
72                 delete iter;
73                 return EXIT_FAILURE;
74         }
75         int result = EXIT_FAILURE;
76         if (naiveEncoding == BINARYINDEX && graphEncoding) {
77                 model_print("Best tuner\n");
78                 return EXIT_SUCCESS;
79         } else if (naiveEncoding == BINARYINDEX && !graphEncoding) {
80                 naiveEncoding = ONEHOT;
81                 graphEncoding = true;
82         } else {
83                 naiveEncoding = (ElementEncodingType)((int)naiveEncoding + 1);
84         }
85         SetIteratorTunableSetting *iter = settings.iterator();
86         uint count = 0;
87         while (iter->hasNext()) {
88                 TunableSetting *setting = iter->next();
89                 if (setting->param == NAIVEENCODER) {
90                         setting->selectedValue = naiveEncoding;
91                         count++;
92                 } else if (setting->param == ENCODINGGRAPHOPT) {
93                         setting->selectedValue = graphEncoding;
94                         count++;
95                 }
96         }
97         model_print("Mutating %u settings\n", count);
98         delete iter;
99         return result;
100 }