From 71f0967684121ed4007064b6538af3577551068c Mon Sep 17 00:00:00 2001 From: bdemsky Date: Fri, 12 Oct 2018 12:32:55 -0700 Subject: [PATCH] more edits --- src/Tuner/multituner.cc | 44 +++++++++++++++++++++++++++-------------- src/Tuner/multituner.h | 8 ++++++-- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/src/Tuner/multituner.cc b/src/Tuner/multituner.cc index 68b896e..8ad7a32 100644 --- a/src/Tuner/multituner.cc +++ b/src/Tuner/multituner.cc @@ -95,22 +95,39 @@ void MultiTuner::mapProblemsToTuners(Vector *tunerV) { } } +void clearVector(Vector *tunerV) { + for (uint j = 0; j < tunerV->getSize(); j++) { + TunerRecord *tuner = tunerV->get(j); + tuner->problems.clear(); + } +} void MultiTuner::tuneK() { Vector *tunerV = new Vector(&tuners); - + while (true) { + clearVector(tunerV); + mapProblemsToTuners(tunerV); + improveTuners(tunerV); + } delete tunerV; } -double MultiTuner::evaluateAll(SearchTuner *tuner) { +void MultiTuner::improveTuners(Vector *tunerV) { + for (uint j = 0; j < tunerV->getSize(); j++) { + TunerRecord *tuner = tunerV->get(j); + SearchTuner *newtuner = tune(tuner->getTuner(), &tuner->problems); + } +} + +double MultiTuner::evaluateAll(SearchTuner *tuner, Vector *tProblems) { double product = 1; - for (uint i = 0; i < problems.getSize(); i++) { - Problem *problem = problems.get(i); + for (uint i = 0; i < tProblems->getSize(); i++) { + Problem *problem = tProblems->get(i); double score = evaluate(problem, tuner); product *= score; } - return pow(product, 1 / ((double)problems.getSize())); + return pow(product, 1 / ((double)tProblems->getSize())); } SearchTuner *MultiTuner::mutateTuner(SearchTuner *oldTuner, uint k) { @@ -126,17 +143,17 @@ SearchTuner *MultiTuner::mutateTuner(SearchTuner *oldTuner, uint k) { return newTuner; } -void MultiTuner::tune() { +SearchTuner *MultiTuner::tune(SearchTuner *tuner, Vector *tProblems) { SearchTuner *bestTuner = NULL; double bestScore = DBL_MAX; - SearchTuner *oldTuner = new SearchTuner(); - double base_temperature = evaluateAll(oldTuner); + SearchTuner *oldTuner = tuner->copyUsed(); + double base_temperature = evaluateAll(oldTuner, tProblems); double oldScore = base_temperature; for (uint i = 0; i < budget; i++) { SearchTuner *newTuner = mutateTuner(oldTuner, i); - double newScore = evaluateAll(newTuner); + double newScore = evaluateAll(newTuner, tProblems); newTuner->printUsed(); model_print("Received score %f\n", newScore); double scoreDiff = newScore - oldScore; //smaller is better @@ -163,10 +180,7 @@ void MultiTuner::tune() { delete newTuner; } } - model_print("Best tuner:\n"); - bestTuner->print(); - model_print("Received score %f\n", bestScore); - if (bestTuner != NULL) - delete bestTuner; - delete oldTuner; + + return bestTuner; } + diff --git a/src/Tuner/multituner.h b/src/Tuner/multituner.h index f14dbcc..79cacf6 100644 --- a/src/Tuner/multituner.h +++ b/src/Tuner/multituner.h @@ -25,6 +25,7 @@ private: SearchTuner *tuner; Vector problems; friend class MultiTuner; + friend void clearVector(Vector *tunerV); }; class MultiTuner { @@ -33,14 +34,17 @@ public: ~MultiTuner(); void addProblem(const char *filename); void addTuner(SearchTuner *tuner); - void tune(); + void tuneK(); CMEMALLOC; protected: long long evaluate(Problem *problem, SearchTuner *tuner); - double evaluateAll(SearchTuner *tuner); + double evaluateAll(SearchTuner *tuner, Vector *tProblems); SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k); void mapProblemsToTuners(Vector *tunerV); + void improveTuners(Vector *tunerV); + SearchTuner *tune(SearchTuner *tuner, Vector *tProblems); + Vector problems; Vector tuners; -- 2.34.1