def select_assignment(self): max_assignment = Assignment() max_assignment.score = float('-inf') for i in self.A: if (i.score > max_assignment.score) and i.valid: max_assignment = i return max_assignment
def get_top_assignment(self,array=None): # line 7 '(similar to select_assignment()' from greedy.py) max_assignment = Assignment() max_assignment.score = float('-inf') if array == None: array=self.A for i in array: if (i.score > max_assignment.score) and (i.valid==True) and (i.update == True): max_assignment = i return max_assignment
def generate_assigment(events,time_intervals): c=list(product(events,time_intervals)) for i in c : a = Assignment(i[1],i[0], location= location[i[0]]) A.append(a)
def generate_assigment(self, events, time_intervals): c = list(product(events, time_intervals)) #printer(c) for i in c: a = Assignment(i[1], i[0], location=self.location[i[0]]) self.A.append(a)
def __init__(self,k = 0, U = [], E = [], T = [], location = [] ,social_active_probabilities = [],event_attendance_probability = [] ,competing_event_attendance_probability = [],verbose=True): self.k = k self.U = U self.E = E self.T = T self.location = location self.sigma = social_active_probabilities self.mu_E = event_attendance_probability self.mu_C = competing_event_attendance_probability self.A = [] self.S = [] self.L_i = [List_timeInt(i) for i in self.T] self.M = [Assignment() for i in self.T] self.bound = Assignment() self.verbose=verbose
def select_assignment(): max_assignment = Assignment() for i in A : if (i.score > max_assignment.score) and i.valid : max_assignment = i return max_assignment
def get_bound(self) : # line 16 flag = False for i in self.M : if i.update and i.valid : flag = True top_scorer = Assignment(score = "unavailable") if flag : top_scorer=max(self.M, key=attrgetter('score')) return top_scorer
def popTopAssgn(self): #line 10 top = None index = None for i in range(len(self.M)): if (self.M[i].event == ""): continue elif ((top == None) or (top.score < self.M[i].score)): top = self.M[i] index = i if index != None: self.M[index] = Assignment() return top
def generate_assignment(self) : # line 1-5 - generates all possible assignments and initializes the M list events = list(range(len(self.E))) time_intervals = list(range(len(self.T))) c=list(product(events,time_intervals)) for i in c : t_a_e = Assignment(i[1],i[0], location= self.location[i[0]]) self.A.append(t_a_e) self.L_i[t_a_e.time_interval].l.append(t_a_e) self.assign_score()
def update_assignments(self,top_assignment): update_assignment_list = [] for i in range(len(self.T)): if self.bound.score == "unavailable" : max = Assignment() for j in range(len(self.A)) : if self.A[j].valid and self.A[j].score > max.score : max = self.A[j] self.update_score(max,top_assignment) max.update = True update_assignment_list.append(max) self.bound = max break if self.L_i[i].update==False and self.M[i].score<=self.bound.score: #printer(i) j = 0 while j < len(self.L_i[i].l) : # if self.L_i[i].l[j].valid==False: self.L_i[i].l.pop(j) elif self.L_i[i].l[j].update==False and self.L_i[i].l[j].score >=self.bound.score: self.update_score(self.L_i[i].l[j],top_assignment) self.L_i[i].l[j].update=True update_assignment_list.append(self.L_i[i].l[j]) self.M[i] = self.getBetterAssignment(self.M[i],self.L_i[i].l[j]) self.bound = self.getBetterAssignment(self.bound,self.L_i[i].l[j]) j += 1 temp=0 for j in self.L_i[i].l: if j.update==False: temp=1 break if temp==0: self.L_i[i].update=True for i in range(len(self.M)): #max = Assignment() printer(("M[i] = ", self.printer_assignment(self.M[i])),verbose=self.verbose) for j in range(len(self.L_i[i].l)): printer(("L_i.l= ",self.printer_assignment(self.L_i[i].l[j]) ),verbose=self.verbose) if self.L_i[i].l[j].valid == True and self.L_i[i].l[j].update == True : self.M[i] = self.getBetterAssignment(self.M[i],self.L_i[i].l[j]) self.printer_updated_assignments(update_assignment_list)