commit after merge
authorHamed Gorjiara <hgorjiar@uci.edu>
Thu, 21 Mar 2019 20:58:54 +0000 (13:58 -0700)
committerHamed Gorjiara <hgorjiar@uci.edu>
Thu, 21 Mar 2019 20:58:54 +0000 (13:58 -0700)
1  2 
src/Tuner/basictuner.cc
src/Tuner/satuner.cc

diff --combined src/Tuner/basictuner.cc
index a2d93bf965713681ceb1432c89243dc993e63c78,31b43750482fcc1cd82f255ed3a42c8008fda03b..6f0f5e0283f9c4b1c2fe230a263d010bcfd4bb5d
@@@ -4,10 -4,10 +4,10 @@@
   * and open the template in the editor.
   */
  
- /* 
+ /*
   * File:   basictuner.cc
   * Author: hamed
-  * 
+  *
   * Created on December 17, 2018, 2:02 PM
   */
  
@@@ -38,7 -38,7 +38,7 @@@ void TunerRecord::setTime(Problem *prob
        timetaken.put(problem, time);
  }
  
- void TunerRecord::print(){
+ void TunerRecord::print() {
        model_print("*************TUNER NUMBER=%d***********\n", tunernumber);
        tuner->print();
        model_print("&&&&&&&&&&&&&USED SETTINGS &&&&&&&&&&&&\n");
@@@ -46,7 -46,7 +46,7 @@@
        model_print("\n");
  }
  
- void TunerRecord::printProblemsInfo(){
+ void TunerRecord::printProblemsInfo() {
        for (uint j = 0; j < problems.getSize(); j++) {
                Problem *problem = problems.get(j);
                model_print("Problem %s\n", problem->getProblem());
@@@ -70,7 -70,7 +70,7 @@@ TunerRecord *TunerRecord::changeTuner(S
  
  
  BasicTuner::BasicTuner(uint _budget, uint _timeout) :
-       budget(_budget), timeout(_timeout), execnum(0){
+       budget(_budget), timeout(_timeout), execnum(0) {
  }
  
  BasicTuner::~BasicTuner() {
@@@ -102,10 -102,10 +102,10 @@@ void BasicTuner::printData() 
        }
  }
  
- bool BasicTuner::tunerExists(TunerRecord *tunerec){
+ bool BasicTuner::tunerExists(TunerRecord *tunerec) {
        SearchTuner *tuner = tunerec->getTuner();
-       for(uint i=0; i< explored.getSize(); i++){
-               if(explored.get(i)->getTuner()->equalUsed(tuner)){
+       for (uint i = 0; i < explored.getSize(); i++) {
+               if (explored.get(i)->getTuner()->equalUsed(tuner)) {
                        model_print("************Tuner <%d> is replicate of Tuner <%d>\n", tunerec->getTunerNumber(), explored.get(i)->getTunerNumber());
                        return true;
                }
@@@ -160,7 -160,6 +160,7 @@@ long long BasicTuner::evaluate(Problem 
  
        //Do run
        snprintf(buffer, sizeof(buffer), "./run.sh deserializerun %s %u tuner%u result%u > log%u", problem->getProblem(), maxtime, execnum, execnum, execnum);
 +      model_print("Running: %s\n", buffer);
        int status = system(buffer);
  
        long long metric = -1;
@@@ -210,10 -209,10 +210,10 @@@ SearchTuner *BasicTuner::mutateTuner(Se
        return newTuner;
  }
  
- int BasicTuner::subTunerIndex(SearchTuner *newTuner){
-       for (uint i=0; i< explored.getSize(); i++){
+ int BasicTuner::subTunerIndex(SearchTuner *newTuner) {
+       for (uint i = 0; i < explored.getSize(); i++) {
                SearchTuner *tuner = explored.get(i)->getTuner();
-               if(tuner->isSubTunerof(newTuner)){
+               if (tuner->isSubTunerof(newTuner)) {
                        return i;
                }
        }
diff --combined src/Tuner/satuner.cc
index 0c405ae15f1b912f65b7781654dd1bb6e2697d0b,4844ce37a2f8f5796188225e7272f10c94bbcfa3..277508160b323a0b5d84d78da941d5c226d480a6
@@@ -12,28 -12,28 +12,28 @@@ SATuner::SATuner(uint _budget, uint _ti
  {
  }
  
- SATuner::~SATuner(){
+ SATuner::~SATuner() {
  
  }
  
- void SATuner::rankTunerForProblem(Vector<TunerRecord *> *places, TunerRecord *tuner, Problem *problem, long long metric){
+ void SATuner::rankTunerForProblem(Vector<TunerRecord *> *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<TunerRecord *> *tunerV, int index,  Vector<Vector<TunerRecord *> *> &allplaces){
+ void SATuner::removeTunerIndex(Vector<TunerRecord *> *tunerV, int index,  Vector<Vector<TunerRecord *> *> &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<TunerRecord *> *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;
                        }
  
  }
  
- void SATuner::removeNullsFromTunerVector( Vector<TunerRecord *> *tunerV){
-       for (int i= tunerV->getSize() -1; i >= 0; i--){
-               if(tunerV->get(i) == NULL){
+ void SATuner::removeNullsFromTunerVector( Vector<TunerRecord *> *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<TunerRecord *> *tunerV, Vector<Vector<TunerRecord *> *> &allplaces){
-       for(uint ii=0; ii< problems.getSize(); ii++){
+ void SATuner::initialize(Vector<TunerRecord *> *tunerV, Vector<Vector<TunerRecord *> *> &allplaces) {
+       for (uint ii = 0; ii < problems.getSize(); ii++) {
                allplaces.push(new Vector<TunerRecord *>());
        }
-       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<TunerRecord *> *places = allplaces.get(i);
                                rankTunerForProblem(places, tuner, problem, metric);
                        }
  }
  
  void SATuner::tune() {
-       Vector<TunerRecord *> *tunerV = new Vector<TunerRecord *>(&tuners);     
+       Vector<TunerRecord *> *tunerV = new Vector<TunerRecord *>(&tuners);
        Vector<Vector<TunerRecord *> *> 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<TunerRecord *, int, uint64_t> 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);
                                }
                        }
                }
-               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<TunerRecord *> *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;
                        }
                }
  
-               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);
                        ASSERT( tunerNumber + i < tunerV->getSize());
                        model_print("Tuner1 = %d \tTuner2 = %d\n", tuner1->getTunerNumber(), tuner2->getTunerNumber());
 -                      ASSERT(scores.contains(tuner1));
 -                      ASSERT(scores.contains(tuner2));
 -                      int score1 = scores.get(tuner1);
 -                      int score2 = scores.get(tuner2);
 -                      if ( score2 > score1 ) {
 +                      
 +                      int score1, score2;
 +                      if(!scores.contains(tuner1)){
 +                              score1 = 0;
 +                      }else {
 +                              score1 = scores.get(tuner1);
 +                      }
 +                      if(!scores.contains(tuner2)){
 +                              score2=0;
 +                      }else {
 +                              score2= scores.get(tuner2);
 +                      }
 +                      
 +                      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();