<filename>utils/Deque.py
import numpy as np
from utils.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
<filename>utils/Deque.py
import numpy as np
from utils.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
Generic deque object Initialises a queue of Nodes of length self.max_size 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 Updates the deque index that we should write over next. When the buffer gets full we begin writing over          older experiences Keeps track of how many experiences there are in the buffer