Spaces:
Sleeping
Sleeping
import numpy as np | |
from utilities.data_structures.Node import Node | |
class Deque(object): | |
"""Generic deque object""" | |
def __init__(self, max_size, dimension_of_value_attribute): | |
self.max_size = max_size | |
self.dimension_of_value_attribute = dimension_of_value_attribute | |
self.deque = self.initialise_deque() | |
self.deque_index_to_overwrite_next = 0 | |
self.reached_max_capacity = False | |
self.number_experiences_in_deque = 0 | |
def initialise_deque(self): | |
"""Initialises a queue of Nodes of length self.max_size""" | |
deque = np.array([Node(0, tuple([None for _ in range(self.dimension_of_value_attribute)])) for _ in range(self.max_size)]) | |
return deque | |
def add_element_to_deque(self, new_key, new_value): | |
"""Adds an element to the deque and then updates the index of the next element to be overwritten and also the | |
amount of elements in the deque""" | |
self.update_deque_node_key_and_value(self.deque_index_to_overwrite_next, new_key, new_value) | |
self.update_number_experiences_in_deque() | |
self.update_deque_index_to_overwrite_next() | |
def update_deque_node_key_and_value(self, index, new_key, new_value): | |
self.update_deque_node_key(index, new_key) | |
self.update_deque_node_value(index, new_value) | |
def update_deque_node_key(self, index, new_key): | |
self.deque[index].update_key(new_key) | |
def update_deque_node_value(self, index, new_value): | |
self.deque[index].update_value(new_value) | |
def update_deque_index_to_overwrite_next(self): | |
"""Updates the deque index that we should write over next. When the buffer gets full we begin writing over | |
older experiences""" | |
if self.deque_index_to_overwrite_next < self.max_size - 1: | |
self.deque_index_to_overwrite_next += 1 | |
else: | |
self.reached_max_capacity = True | |
self.deque_index_to_overwrite_next = 0 | |
def update_number_experiences_in_deque(self): | |
"""Keeps track of how many experiences there are in the buffer""" | |
if not self.reached_max_capacity: | |
self.number_experiences_in_deque += 1 |