X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=src%2FTuner%2Fsatuner.cc;h=277508160b323a0b5d84d78da941d5c226d480a6;hb=e5c1ee81132998d6a80d83e95f1faf2ca06ac7fb;hp=0c405ae15f1b912f65b7781654dd1bb6e2697d0b;hpb=24940f1c2b64462da246d0ed237f0825dd04e6ca;p=satune.git diff --git a/src/Tuner/satuner.cc b/src/Tuner/satuner.cc index 0c405ae..2775081 100644 --- a/src/Tuner/satuner.cc +++ b/src/Tuner/satuner.cc @@ -12,28 +12,28 @@ SATuner::SATuner(uint _budget, uint _timeout) : { } -SATuner::~SATuner(){ +SATuner::~SATuner() { } -void SATuner::rankTunerForProblem(Vector *places, TunerRecord *tuner, Problem *problem, long long metric){ +void SATuner::rankTunerForProblem(Vector *places, TunerRecord *tuner, Problem *problem, long long metric) { uint k = 0; for (; k < places->getSize(); k++) { if (metric < places->get(k)->getTime(problem)) break; } model_print("Problem<%s>:place[%u]=Tuner<%p,%d>\n", problem->getProblem(), k, tuner, tuner->getTunerNumber()); - places->insertAt(k, tuner); + places->insertAt(k, tuner); } -void SATuner::removeTunerIndex(Vector *tunerV, int index, Vector *> &allplaces){ +void SATuner::removeTunerIndex(Vector *tunerV, int index, Vector *> &allplaces) { TunerRecord *tuner = tunerV->get(index); model_print("Removing Tuner %d\n", tuner->getTunerNumber()); tunerV->set(index, NULL); - for(uint i=0; i < allplaces.getSize(); i++){ + for (uint i = 0; i < allplaces.getSize(); i++) { Vector *places = allplaces.get(i); - for(uint j=0; j < places->getSize(); j++){ - if(tuner == places->get(j)){ + for (uint j = 0; j < places->getSize(); j++) { + if (tuner == places->get(j)) { places->removeAt(j); break; } @@ -42,32 +42,32 @@ void SATuner::removeTunerIndex(Vector *tunerV, int index, Vector } -void SATuner::removeNullsFromTunerVector( Vector *tunerV){ - for (int i= tunerV->getSize() -1; i >= 0; i--){ - if(tunerV->get(i) == NULL){ +void SATuner::removeNullsFromTunerVector( Vector *tunerV) { + for (int i = tunerV->getSize() - 1; i >= 0; i--) { + if (tunerV->get(i) == NULL) { tunerV->removeAt(i); } } model_print("TunerV size after removing nulls = %u\n", tunerV->getSize()); } -void SATuner::initialize(Vector *tunerV, Vector *> &allplaces){ - for(uint ii=0; ii< problems.getSize(); ii++){ +void SATuner::initialize(Vector *tunerV, Vector *> &allplaces) { + for (uint ii = 0; ii < problems.getSize(); ii++) { allplaces.push(new Vector()); } - for (uint j = 0; j< tunerV->getSize(); j++){ + for (uint j = 0; j < tunerV->getSize(); j++) { TunerRecord *tuner = tunerV->get(j); - for (uint i=0; i < problems.getSize(); i++){ + for (uint i = 0; i < problems.getSize(); i++) { Problem *problem = problems.get(i); long long metric = evaluate(problem, tuner); ASSERT(tuner->getTime(problem) == -1); tuner->addProblem(problem); - if(metric != -1){ - tuner->setTime(problem , metric); - }else{ - tuner->setTime(problem , -2); + if (metric != -1) { + tuner->setTime(problem, metric); + } else { + tuner->setTime(problem, -2); } - if(metric >=0){ + if (metric >= 0) { Vector *places = allplaces.get(i); rankTunerForProblem(places, tuner, problem, metric); } @@ -77,27 +77,27 @@ void SATuner::initialize(Vector *tunerV, Vector *tunerV = new Vector(&tuners); + Vector *tunerV = new Vector(&tuners); Vector *> allplaces; uint tunerNumber = tuners.getSize(); //Initialization initialize(tunerV, allplaces); //Starting the body of algorithm - for (uint t = budget; t >0; t--) { + for (uint t = budget; t > 0; t--) { model_print("Current Temperature = %u\n", t); Hashtable scores; for (uint i = 0; i < tunerNumber; i++) { - SearchTuner *tmpTuner = mutateTuner(tunerV->get(i)->getTuner(), budget-t); + SearchTuner *tmpTuner = mutateTuner(tunerV->get(i)->getTuner(), budget - t); int tunerIndex = subTunerIndex(tmpTuner); TunerRecord *tmp = NULL; - if(tunerIndex == -1){ + if (tunerIndex == -1) { tmp = new TunerRecord(tmpTuner); tmp->setTunerNumber(allTuners.getSize()); model_print("Mutated tuner %u to generate tuner %u\n", tunerV->get(i)->getTunerNumber(), tmp->getTunerNumber()); - allTuners.push(tmp); - }else{ + allTuners.push(tmp); + } else { //Previous tuners might get explored with new combination of tuners. - tmp = explored.get(tunerIndex); + tmp = explored.get(tunerIndex); model_print("Using exploread tuner <%u>\n", tmp->getTunerNumber()); } tunerV->push(tmp); @@ -129,11 +129,11 @@ void SATuner::tune() { } } } - for(uint ii=0; ii < problems.getSize(); ii++){ + for (uint ii = 0; ii < problems.getSize(); ii++) { Problem *problem = problems.get(ii); ASSERT(ii < allplaces.getSize()); Vector *places = allplaces.get(ii); - int points = pow(tunerNumber*1.0, 2*tunerNumber - 1); + int points = pow(tunerNumber * 1.0, 2 * tunerNumber - 1); for (uint k = 0; k < places->getSize() && points; k++) { TunerRecord *tuner = places->get(k); int currScore = 0; @@ -147,7 +147,7 @@ void SATuner::tune() { } } - for(uint i= 0; i < tunerNumber; i++){ + for (uint i = 0; i < tunerNumber; i++) { ASSERT(i < tunerV->getSize()); TunerRecord *tuner1 = tunerV->get(i); TunerRecord *tuner2 = tunerV->get(tunerNumber + i); @@ -168,26 +168,26 @@ void SATuner::tune() { if( score2 > score1 ){ removeTunerIndex(tunerV, i, allplaces); - } else if( score2 < score1){ - model_print("score1=%d\tscore2=%d\tt=%u\texp=%f\n", score1, score2, t, exp((score1-score2)*1.0/t)); - double prob = 1/(exp((score1-score2)*1.0/t) ); + } else if ( score2 < score1) { + model_print("score1=%d\tscore2=%d\tt=%u\texp=%f\n", score1, score2, t, exp((score1 - score2) * 1.0 / t)); + double prob = 1 / (exp((score1 - score2) * 1.0 / t) ); double random = ((double) rand() / (RAND_MAX)); model_print("prob=%f\trandom=%f\n", prob, random); - if(prob > random){ + if (prob > random) { removeTunerIndex(tunerV, i, allplaces); - }else{ + } else { removeTunerIndex(tunerV, tunerNumber + i, allplaces); } - } else{ + } else { double random = ((double) rand() / (RAND_MAX)); - int index = random > 0.5? i : tunerNumber + i; + int index = random > 0.5 ? i : tunerNumber + i; removeTunerIndex(tunerV, index, allplaces); } } removeNullsFromTunerVector(tunerV); - + } - for(uint ii=0; ii< allplaces.getSize(); ii++){ + for (uint ii = 0; ii < allplaces.getSize(); ii++) { delete allplaces.get(ii); } printData();