Пример #1
0
    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()
Пример #2
0
    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"))
Пример #3
0
 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()