class_docstr: Proximal Policy Optimization (PPO).
  
  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.
      lr_clip_range (float): The limit on the likelihood ratio between
          policies.
      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.
class_docstr_tok: ["Proximal","Policy","Optimization","(","PPO",")",".","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",".","lr_clip_range","(","float",")",":","The","limit","on","the","likelihood","ratio","between","policies",".","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","."]
code: def __init__(
      self,
      env_spec,
      policy,
      value_function,
      sampler,
      policy_optimizer=None,
      vf_optimizer=None,
      lr_clip_range=2e-1,
      num_train_per_epoch=1,
      discount=0.99,
      gae_lambda=0.97,
      center_adv=True,
      positive_adv=False,
      policy_ent_coeff=0.0,
      use_softplus_entropy=False,
      stop_entropy_gradient=False,
      entropy_method="no_entropy",
  ):
      if policy_optimizer is None:
          policy_optimizer = OptimizerWrapper(
              (torch.optim.Adam, dict(lr=2.5e-4)),
              policy,
              max_optimization_epochs=10,
              minibatch_size=64,
          )
      if vf_optimizer is None:
          vf_optimizer = OptimizerWrapper(
              (torch.optim.Adam, dict(lr=2.5e-4)),
              value_function,
              max_optimization_epochs=10,
              minibatch_size=64,
          )
  
      super().__init__(
          env_spec=env_spec,
          policy=policy,
          value_function=value_function,
          sampler=sampler,
          policy_optimizer=policy_optimizer,
          vf_optimizer=vf_optimizer,
          num_train_per_epoch=num_train_per_epoch,
          discount=discount,
          gae_lambda=gae_lambda,
          center_adv=center_adv,
          positive_adv=positive_adv,
          policy_ent_coeff=policy_ent_coeff,
          use_softplus_entropy=use_softplus_entropy,
          stop_entropy_gradient=stop_entropy_gradient,
          entropy_method=entropy_method,
      )
  
      self._lr_clip_range = lr_clip_range
  
imports: import torch
  from garage.torch.algos import VPG
  from garage.torch.optimizers import OptimizerWrapper
label_desc: Use image node_id 1 to create a new PPO object from inherited base classes: VPG with example: obj = PPO(env_spec, policy, value_function, sampler, policy_optimizer, vf_optimizer, lr_clip_range, num_train_per_epoch, discount, gae_lambda, center_adv, positive_adv, policy_ent_coeff, use_softplus_entropy, stop_entropy_gradient, entropy_method)