class_docstr: :param dnd_size: (int)
      Defines the number of transitions that will be stored in each one of the DNDs. Note that the total number
      of transitions that will be stored is dnd_size x num_actions.
  
  :param l2_norm_added_delta: (float)
      A small value that will be added when calculating the weight of each of the DND entries. This follows the
      :math:`\delta` patameter defined in the paper.
  
  :param new_value_shift_coefficient: (float)
      In the case where a ew embedding that was added to the DND was already present, the value that will be stored
      in the DND is a mix between the existing value and the new value. The mix rate is defined by
      new_value_shift_coefficient.
  
  :param number_of_knn: (int)
      The number of neighbors that will be retrieved for each DND query.
  
  :param DND_key_error_threshold: (float)
      When the DND is queried for a specific embedding, this threshold will be used to determine if the embedding
      exists in the DND, since exact matches of embeddings are very rare.
  
  :param propagate_updates_to_DND: (bool)
      If set to True, when the gradients of the network will be calculated, the gradients will also be
      backpropagated through the keys of the DND. The keys will then be updated as well, as if they were regular
      network weights.
  
  :param n_step: (int)
      The bootstrap length that will be used when calculating the state values to store in the DND.
  
  :param bootstrap_total_return_from_old_policy: (bool)
      If set to True, the bootstrap that will be used to calculate each state-action value, is the network value
      when the state was first seen, and not the latest, most up-to-date network value.
code: def __init__(self):
      super().__init__()
      self.dnd_size = 500000
      self.l2_norm_added_delta = 0.001
      self.new_value_shift_coefficient = 0.1
      self.number_of_knn = 50
      self.DND_key_error_threshold = 0
      self.num_consecutive_playing_steps = EnvironmentSteps(4)
      self.propagate_updates_to_DND = False
      self.n_step = 100
      self.bootstrap_total_return_from_old_policy = True
  
imports: import os
  import pickle
  from typing import Union, List
  import numpy
  from rl_coach.agents.value_optimization_agent import ValueOptimizationAgent
  from rl_coach.architectures.embedder_parameters import InputEmbedderParameters
  from rl_coach.architectures.head_parameters import DNDQHeadParameters
  from rl_coach.architectures.middleware_parameters import FCMiddlewareParameters
  from rl_coach.base_parameters import AlgorithmParameters, NetworkParameters, AgentParameters
  from rl_coach.core_types import RunPhase, EnvironmentSteps, Episode, StateType
  from rl_coach.exploration_policies.e_greedy import EGreedyParameters
  from rl_coach.logger import screen
  from rl_coach.memories.episodic.episodic_experience_replay import EpisodicExperienceReplayParameters, MemoryGranularity
  from rl_coach.schedules import ConstantSchedule
label_desc: Use image node_id 1 to create a new NECAlgorithmParameters object from inherited base classes: AlgorithmParameters with example: obj = NECAlgorithmParameters()