X-Git-Url: http://plrg.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FTuner%2Fmultituner.h;h=398eb84bb9b3fd3cc1337e1ae5d78bb536e293ae;hb=b94774b8783de1b4eabc3ca4b0ef6aeee7a89538;hp=fffc5c26affed1e54fc81283c2790a4b714e0ef9;hpb=8b5be625244b8a2764d254885fad5c67a825caa3;p=satune.git diff --git a/src/Tuner/multituner.h b/src/Tuner/multituner.h index fffc5c2..398eb84 100644 --- a/src/Tuner/multituner.h +++ b/src/Tuner/multituner.h @@ -12,35 +12,60 @@ public: ~Problem(); CMEMALLOC; private: + int problemnumber; int result; char *problem; + long long besttime; friend class MultiTuner; }; class TunerRecord { public: - TunerRecord(SearchTuner *_tuner) : tuner(_tuner) {} - + TunerRecord(SearchTuner *_tuner) : tuner(_tuner), tunernumber(-1) {} + SearchTuner *getTuner() {return tuner;} + TunerRecord *changeTuner(SearchTuner *_newtuner); + void updateTuner(SearchTuner *_newtuner) {tuner = _newtuner;} + long long getTime(Problem *problem); + void setTime(Problem *problem, long long time); private: SearchTuner *tuner; + Vector problems; + Hashtable timetaken; + int tunernumber; friend class MultiTuner; + friend void clearVector(Vector *tunerV); }; class MultiTuner { public: - MultiTuner(uint budget, uint timeout); + MultiTuner(uint budget, uint rounds, uint timeout); ~MultiTuner(); void addProblem(const char *filename); void addTuner(SearchTuner *tuner); - virtual void tune(); + void readData(uint numRuns); + void updateTimeout(Problem *problem, long long metric); + void tuneK(); + void tuneComp(); + void printData(); + void findBestThreeTuners(); CMEMALLOC; protected: - long long evaluate(Problem *problem, SearchTuner *tuner); - double evaluateAll(SearchTuner *tuner); + long long evaluate(Problem *problem, TunerRecord *tuner); + double evaluateAll(TunerRecord *tuner); SearchTuner *mutateTuner(SearchTuner *oldTuner, uint k); + void mapProblemsToTuners(Vector *tunerV); + void improveTuners(Vector *tunerV); + TunerRecord *tune(TunerRecord *tuner); + inline long long min(long long num1, long long num2, long long num3){ + return num1 < num2 && num1 < num3? num1: + num2 < num3? num2 : num3; + } + + Vector allTuners; Vector problems; Vector tuners; uint budget; + uint rounds; uint timeout; int execnum; };