class_docstr: Trust Region Policy Optimization (TRPO).
  
  Args:
      env_spec (EnvSpec): Environment specification.
      policy (garage.torch.policies.Policy): Policy.
      value_function (garage.torch.value_functions.ValueFunction): The value
          function.
      sampler (garage.sampler.Sampler): Sampler.
      policy_optimizer (garage.torch.optimizer.OptimizerWrapper): Optimizer
          for policy.
      vf_optimizer (garage.torch.optimizer.OptimizerWrapper): Optimizer for
          value function.
      num_train_per_epoch (int): Number of train_once calls per epoch.
      discount (float): Discount.
      gae_lambda (float): Lambda used for generalized advantage
          estimation.
      center_adv (bool): Whether to rescale the advantages
          so that they have mean 0 and standard deviation 1.
      positive_adv (bool): Whether to shift the advantages
          so that they are always positive. When used in
          conjunction with center_adv the advantages will be
          standardized before shifting.
      policy_ent_coeff (float): The coefficient of the policy entropy.
          Setting it to zero would mean no entropy regularization.
      use_softplus_entropy (bool): Whether to estimate the softmax
          distribution of the entropy to prevent the entropy from being
          negative.
      stop_entropy_gradient (bool): Whether to stop the entropy gradient.
      entropy_method (str): A string from: 'max', 'regularized',
          'no_entropy'. The type of entropy method to use. 'max' adds the
          dense entropy to the reward for each time step. 'regularized' adds
          the mean entropy to the surrogate objective. See
          https://arxiv.org/abs/1805.00909 for more details.
docstr: Compute objective value.
  
  Args:
      advantages (torch.Tensor): Advantage value at each step
          with shape :math:`(N \dot [T], )`.
      obs (torch.Tensor): Observation from the environment
          with shape :math:`(N \dot [T], O*)`.
      actions (torch.Tensor): Actions fed to the environment
          with shape :math:`(N \dot [T], A*)`.
      rewards (torch.Tensor): Acquired rewards
          with shape :math:`(N \dot [T], )`.
  
  Returns:
      torch.Tensor: Calculated objective values
          with shape :math:`(N \dot [T], )`.
code: def _compute_objective(self, advantages, obs, actions, rewards):
      r"""Compute objective value.
  
      Args:
          advantages (torch.Tensor): Advantage value at each step
              with shape :math:`(N \dot [T], )`.
          obs (torch.Tensor): Observation from the environment
              with shape :math:`(N \dot [T], O*)`.
          actions (torch.Tensor): Actions fed to the environment
              with shape :math:`(N \dot [T], A*)`.
          rewards (torch.Tensor): Acquired rewards
              with shape :math:`(N \dot [T], )`.
  
      Returns:
          torch.Tensor: Calculated objective values
              with shape :math:`(N \dot [T], )`.
  
      """
      with torch.no_grad():
          old_ll = self._old_policy(obs)[0].log_prob(actions)
  
      new_ll = self.policy(obs)[0].log_prob(actions)
      likelihood_ratio = (new_ll - old_ll).exp()
  
      # Calculate surrogate
      surrogate = likelihood_ratio * advantages
  
      return surrogate
  
file_path: garage/src/garage/torch/algos/trpo.py
imports: import torch
  from garage.torch._functions import zero_optim_grads
  from garage.torch.algos import VPG
  from garage.torch.optimizers import ConjugateGradientOptimizer, OptimizerWrapper
label_desc: Use image node_id 2 for calling the TRPO obj's underlying member method code with example usage: obj._compute_objective(advantages, obs, actions, rewards) and returns: surrogate