GreenCloud Simulator
probabilisticscheduler.cc
Go to the documentation of this file.
1 /*
2  * probabilisticscheduler.cc
3  *
4  * @date Jan 9, 2014
5  * @author Guzek:Mateusz
6  */
7 
9 
11 
12 
13 }
14 
16 
17 }
18 
19 TskComAgent* ProbabilisticScheduler::scheduleTask(CloudTask* task, std::vector<ResourceProvider* > providers){
20  //1. calculate mDENS score array
21  //2. generate random number in [0:summed mDENS score]
22  //3. binary search on the array
23  //4. return the selected host
24  TskComAgent* selected = NULL;
25  std::vector<double> mdens_score(providers.size());
26  std::vector<double> mdens_score_cumulative(providers.size());
27  vector <ResourceProvider*>::iterator res_p;
28  vector <double>::iterator score;
29  vector <double>::iterator cumul;
30  for (res_p = providers.begin(), score = mdens_score.begin(), cumul = mdens_score_cumulative.begin();
31  res_p!=providers.end();
32  res_p++, score++, cumul++)
33  {
34  (*score) = calculateScore((*res_p));
35  if(cumul==mdens_score_cumulative.begin()){
36  (*cumul) = (*score);
37  } else {
38  (*cumul) = (*score) + (*(cumul-1));
39  }
40 // std::cout << "score:" << (*score)<< " cumul: " << (*cumul) << "\n";
41  }
42 // srand(time(0));
43  double r = ( (double)rand() / (double)RAND_MAX ) * mdens_score_cumulative.at(mdens_score_cumulative.size()-1);
44 // std::cerr << "Random: " << r << "\n";
45  vector <double>::iterator lb = lower_bound(mdens_score_cumulative.begin(),mdens_score_cumulative.end(),r);
46  int sel_ind = lb - mdens_score_cumulative.begin();
47 // std::cerr << "Lb: "<< (*lb) << " ind: " << sel_ind << "\n";
48 // abort();
49  selected = providers.at(sel_ind)->getTskComAgent();
50  return selected;
51 }
52 
53 
virtual double calculateScore(ResourceProvider *rp)=0
virtual TskComAgent * scheduleTask(CloudTask *task, std::vector< ResourceProvider * > providers)