class_docstr: References:
  ===========
      - https://towardsdatascience.com/deep-reinforcement-learning-build-a-deep-q-network-dqn-to-play-cartpole-with-tensorflow-2-and-gym-8e105744b998
      - https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html#dqn-algorithm
      - https://arxiv.org/abs/1802.00308
code: def save(self, path: str, **kwargs):
      episode: int = kwargs.get("episode", None)
  
      if episode:
          filename = (
              "policy_network__"
              + self.id[:7]
              + "__"
              + datetime.now().strftime("%Y%m%d_%H%M%S")
              + ".hdf5"
          )
      else:
          filename = (
              "policy_network__"
              + self.id[:7]
              + "__"
              + datetime.now().strftime("%Y%m%d_%H%M%S")
              + ".hdf5"
          )
  
      self.policy_network.save(path + filename)
  
file_path: tensortrade/tensortrade/agents/dqn_agent.py
imports: from deprecated import deprecated
  import random
  import numpy
  import tensorflow
  from collections import namedtuple
  from tensortrade.agents import Agent, ReplayMemory
  from datetime import datetime
label_desc: Use image node_id 4 for calling the DQNAgent obj's underlying member method code with example usage: obj.save(path) without return types