-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathRecSim_Decider.py
36 lines (33 loc) · 1.41 KB
/
RecSim_Decider.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
from .HASCO_Decider import *
from provisioner.src.utils import *
from .src.utils import *
from .src.opt import *
class RecSimDecider(HASCODecider):
def __init__(self):
super().__init__()
self.model_name = 'RecSim'
self.rt_dict, self.sla_dict = get_dicts()
self.a_dict = get_accuracies()
self.xi = 1 # weight of accuracy w.r.t SLA violation
def getSimScores(self, application, sla):
sla = self.sla_dict[application]
rt_s = [np.random.normal(loc = self.rt_dict[application][choice][0], scale = self.rt_dict[application][choice][1]) for choice in self.choices]
sla_s = [rt <= sla for rt in rt_s]
a_s = [self.a_dict[application][choice] for choice in self.choices]
choice_scores = [sla_s[i] + self.xi * a_s[i] for i in range(len(self.choices))]
return choice_scores
def decision(self, workflowlist):
if not self.model_loaded: self.load_model()
cpu = self.host_util
results = []
for i, (CreationID, interval, SLA, application) in enumerate(workflowlist):
# generate BNN based recommendation scores
scores = np.array([self.testall(cpu, app=application, dec=i) for i in self.choices])
# generate simulator based recommendation scores
sim_scores = self.getSimScores(application, SLA)
# run collaborative filtering
scores += sim_scores
choice = self.choices[np.argmax(scores)]
tasklist = self.createTasks(CreationID, interval, SLA, application, choice)
results += tasklist
return results