memcpy(array, _array, capacity * sizeof(type));
}
+ Vector(Vector<type> *v) :
+ size(v->size),
+ capacity(v->capacity),
+ array((type *) ourmalloc(sizeof(type) * v->capacity)) {
+ memcpy(array, v->array, capacity * sizeof(type));
+ }
void pop() {
size--;
}
--- /dev/null
+#include "csolver.h"
+#include "searchtuner.h"
+#include <stdlib.h>
+#include <iostream>
+#include <fstream>
+
+int main(int argc, char **argv) {
+ if (argc != 5) {
+ printf("You only specify the name of the file ...");
+ exit(-1);
+ }
+ CSolver *solver = CSolver::deserialize(argv[1]);
+ uint timeout;
+ sscanf(argv[2], "%u", &timeout);
+ SearchTuner *tuner = new SearchTuner(argv[3]);
+ solver->setTuner(tuner);
+ int sat = solver->solve();
+ long long metric = solver->getElapsedTime();
+ ofstream myfile;
+ myfile.open (argv[4], ios::out);
+ myfile << metric;
+ myfile << sat;
+ myfile.close();
+ delete solver;
+ return 0;
+}
tuner->serialize(buffer);
//Do run
- snprintf(buffer, sizeof(buffer), "deserializerun %s %u tuner%u result%s%u", problem->getProblem(), timeout, execnum, problem->getProblem(), execnum);
+ snprintf(buffer, sizeof(buffer), "deserializerun %s %u tuner%u result%s%u > log%u", problem->getProblem(), timeout, execnum, problem->getProblem(), execnum, execnum);
int status = system(buffer);
long long metric = -1;
return metric;
}
+void MultiTuner::mapProblemsToTuners(Vector<TunerRecord *> *tunerV) {
+ for (uint i = 0; i < problems.getSize(); i++) {
+ Problem *problem = problems.get(i);
+ TunerRecord *bestTuner = NULL;
+ long long bestscore = 0;
+ for (uint j = 0; j < tunerV->getSize(); j++) {
+ TunerRecord *tuner = tunerV->get(j);
+ long long metric = evaluate(problem, tuner->getTuner());
+ if ((bestTuner == NULL && metric != -1) ||
+ (metric < bestscore && metric != -1)) {
+ bestTuner = tuner;
+ bestscore = metric;
+ }
+ }
+ if (bestTuner != NULL)
+ bestTuner->problems.push(problem);
+ }
+}
+
+
+void MultiTuner::tuneK() {
+ Vector<TunerRecord *> *tunerV = new Vector<TunerRecord *>(&tuners);
+
+
+ delete tunerV;
+}
+
double MultiTuner::evaluateAll(SearchTuner *tuner) {
double product = 1;
for (uint i = 0; i < problems.getSize(); i++) {
class TunerRecord {
public:
TunerRecord(SearchTuner *_tuner) : tuner(_tuner) {}
-
+ SearchTuner *getTuner() {return tuner;}
private:
SearchTuner *tuner;
+ Vector<Problem *> problems;
friend class MultiTuner;
};
~MultiTuner();
void addProblem(const char *filename);
void addTuner(SearchTuner *tuner);
- virtual void tune();
+ void tune();
+ void tuneK();
CMEMALLOC;
protected:
long long evaluate(Problem *problem, SearchTuner *tuner);
double evaluateAll(SearchTuner *tuner);
SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k);
+ void mapProblemsToTuners(Vector<TunerRecord *> *tunerV);
+
Vector<Problem *> problems;
Vector<TunerRecord *> tuners;
uint budget;
class DOREdge;
class AutoTuner;
+class MultiTuner;
class SearchTuner;
class TunableSetting;