if (encoding->element->anyValue){
uint setSize = encoding->element->getRange()->getSize();
uint encArraySize = encoding->encArraySize;
- model_print("setSize=%u\tencArraySize=%u\n", setSize, encArraySize);
if(setSize < encArraySize * (uint)solver->getTuner()->getTunable(MUSTVALUE, &mustValueBinaryIndex)/10){
generateAnyValueBinaryIndexEncodingPositive(encoding);
} else {
return newTuner;
}
+#ifdef STATICENCGEN
+SearchTuner *AutoTuner::mutateTuner(SearchTuner *oldTuner) {
+ SearchTuner *newTuner = oldTuner->copyUsed();
+ result = newTuner->nextStaticTuner();
+ return result==EXIT_FAILURE? newTuner: NULL;
+}
+#endif
void AutoTuner::tune() {
SearchTuner *bestTuner = NULL;
double base_temperature = evaluateAll(oldTuner);
double oldScore = base_temperature;
+#ifdef STATICENCGEN
+ while(true){
+ SearchTuner *newTuner = mutateTuner(oldTuner);
+ if(newTuner == NULL)
+ return;
+ double newScore = evaluateAll(newTuner);
+ newTuner->printUsed();
+ model_print("Received score %f\n", newScore);
+ delete oldTuner;
+ oldScore = newScore;
+ oldTuner = newTuner;
+ }
+#endif
+
for (uint i = 0; i < budget; i++) {
SearchTuner *newTuner = mutateTuner(oldTuner, i);
double newScore = evaluateAll(newTuner);
SearchTuner::SearchTuner() {
+#ifdef STATICENCGEN
+ graphEncoding =false;
+ naiveEncoding = ELEM_UNASSIGNED;
+#endif
ifstream myfile;
myfile.open (TUNEFILE, ios::in);
if (myfile.is_open()) {
TunableSetting *copy = new TunableSetting(setting);
tuner->settings.add(copy);
}
+#ifdef STATICENCGEN
+ if(naiveEncoding != ELEM_UNASSIGNED){
+ tuner->graphEncoding = graphEncoding;
+ tuner->naiveEncoding = naiveEncoding;
+ }
+#endif
delete iterator;
return tuner;
}
model_print("&&&&&&&&&&&&&&&&&&&&&&&\n");
}
+#ifdef STATICENCGEN
+int SearchTuner::nextStaticTuner() {
+ if(naiveEncoding == ELEM_UNASSIGNED){
+ naiveEncoding = ONEHOT;
+ SetIteratorTunableSetting *iter = settings.iterator();
+ while(iter->hasNext()){
+ TunableSetting *setting = iter->next();
+ if (setting->param == NAIVEENCODER){
+ setting->selectedValue = ONEHOT;
+ } else if(setting->param == ENCODINGGRAPHOPT){
+ setting->selectedValue = false;
+ }
+ }
+ delete iter;
+ return EXIT_FAILURE;
+ }
+ int result=EXIT_FAILURE;
+ if(naiveEncoding == BINARYINDEX && graphEncoding){
+ model_print("Best tuner\n");
+ return EXIT_SUCCESS;
+ }else if (naiveEncoding == BINARYINDEX && !graphEncoding){
+ naiveEncoding = ONEHOT;
+ graphEncoding = true;
+ }else {
+ naiveEncoding = (ElementEncodingType)((int)naiveEncoding + 1);
+ }
+ SetIteratorTunableSetting *iter = settings.iterator();
+ uint count = 0;
+ while(iter->hasNext()){
+ TunableSetting * setting = iter->next();
+ if (setting->param == NAIVEENCODER){
+ setting->selectedValue = naiveEncoding;
+ count++;
+ } else if(setting->param == ENCODINGGRAPHOPT){
+ setting->selectedValue = graphEncoding;
+ count++;
+ }
+ }
+ model_print("Mutating %u settings\n", count);
+ delete iter;
+ return result;
+}
+#endif
+
void SearchTuner::print() {
SetIteratorTunableSetting *iterator = settings.iterator();
while (iterator->hasNext()) {