def access(self, page): # Attempt to access a given page # print 'page', page state = FrameTable.current_state # print 'getting action for current state' action = self.agent.act(state) self.ah_counts[action] += 1 for a in range(0, len(self.algorithms)): self.ah_files[a].write(str(self.ah_counts[a]) + "\n") if not action == self.curalgo: self.curalgo = action if not FrameTable.access(self, page): # page fault reward = self.get_miss_reward() else: # hit reward = self.get_hit_reward() new_state = FrameTable.current_state new_action = self.agent.act(new_state) self.agent.update_q(state, action, reward, new_state, new_action) if not FrameTable.time % 100: self.agent.save_model()
def __init__(self, size, reward_style="simple"): FrameTable.__init__(self, size) self.algorithms = [] # self.algorithms.append(Randomly(size)) self.algorithms.append(LRU(size)) self.algorithms.append(FIFO(size)) self.algorithms.append(NFU(size)) self.algorithms.append(MRU(size)) self.curalgo = 0 self.agent = SarsaApprox(size, len(self.algorithms)) self.reward_style = reward_style if not reward_style == "simple": self.framefault = {} self.miss_reward_step = -1 self.hit_reward_step = 1 self.ah_files = [] self.ah_counts = [0, 0, 0, 0] for i in range(0, len(self.algorithms)): self.ah_files.append(open("actions_history_" + str(i), "w"))
def print_faults(self): FrameTable.print_faults(self) print self.ah_counts for i in range(0, len(self.algorithms)): self.ah_files[i].close()