#include <float.h>
#define UNSETVALUE -1
-
+#define TIMEOUTSEC 5000
AutoTuner::AutoTuner(uint _budget) :
budget(_budget), result(UNSETVALUE) {
}
long long AutoTuner::evaluate(CSolver *problem, SearchTuner *tuner) {
CSolver *copy = problem->clone();
copy->setTuner(tuner);
+ copy->setSatSolverTimeout(TIMEOUTSEC);
model_print("**********************\n");
int sat = copy->solve();
- if (result == UNSETVALUE)
+ if (result == UNSETVALUE && sat != IS_INDETER)
result = sat;
- else if (result != sat) {
+ else if (result != sat && sat != IS_INDETER) {
model_print("&&&&&&&&&&&&&&&&&& Result has changed &&&&&&&&&&&&&\n");
copy->printConstraints();
}
- //model_print("SAT %d\n", result);
- long long elapsedTime = copy->getElapsedTime();
-// long long encodeTime = copy->getEncodeTime();
-// long long solveTime = copy->getSolveTime();
- long long metric = elapsedTime;
-// model_print("Elapsed Time: %llu\n", elapsedTime);
-// model_print("Encode Time: %llu\n", encodeTime);
-// model_print("Solve Time: %llu\n", solveTime);
+ long long metric = copy->getElapsedTime();
delete copy;
return metric;
}
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);