class_docstr: | `alias`: ``parl.Agent``
  | `alias`: ``parl.core.torch.agent.Agent``
  
  | Agent is one of the three basic classes of PARL.
  
  | It is responsible for interacting with the environment and collecting data for training the policy.
  | To implement a customized ``Agent``, users can:
  
    .. code-block:: python
  
      import parl
  
      class MyAgent(parl.Agent):
          def __init__(self, algorithm, act_dim):
              super(MyAgent, self).__init__(algorithm)
              self.act_dim = act_dim
  
  Attributes:
      device (torch.device): select GPU/CPU to be used.
      alg (parl.Algorithm): algorithm of this agent.
  
  Public Functions:
      - ``sample``: return a noisy action to perform exploration according to the policy.
      - ``predict``: return an estimate Q function given current observation.
      - ``learn``: update the parameters of self.alg.
      - ``save``: save parameters of the ``agent`` to a given path.
      - ``restore``: restore previous saved parameters from a given path.
      - ``train``: set the agent in training mode.
      - ``eval``: set the agent in evaluation mode.
  
  Todo:
      - allow users to get parameters of a specified model by specifying the model's name in ``get_weights()``.
docstr: .
  
  Args:
      algorithm (parl.Algorithm): an instance of `parl.Algorithm`. This algorithm is then passed to `self.alg`.
      device (torch.device): specify which GPU/CPU to be used.
docstr_tok: [".","Args",":","algorithm","(","parl.Algorithm",")",":","an","instance","of","`","parl.Algorithm","`",".","This","algorithm","is","then","passed","to","`","self.alg","`",".","device","(","torch.device",")",":","specify","which","GPU\/CPU","to","be","used","."]
code: def __init__(self, algorithm):
      """.
  
      Args:
          algorithm (parl.Algorithm): an instance of `parl.Algorithm`. This algorithm is then passed to `self.alg`.
          device (torch.device): specify which GPU/CPU to be used.
      """
  
      assert isinstance(algorithm, Algorithm)
      super(Agent, self).__init__(algorithm)
      # agent mode (bool): True is in training mode, False is in evaluation mode.
      self.training = True
  
file_path: PARL/parl/core/torch/agent.py
imports: import warnings
  import os
  import torch
  from parl.core.agent_base import AgentBase
  from parl.core.torch.algorithm import Algorithm
  from parl.utils import machine_info
label_desc: Use image node_id 1 to create a new Agent object from inherited base classes: AgentBase with example: obj = Agent(algorithm)