class_docstr: Proximal Policy Optimization algorithm (MPI version).
  Paper: https://arxiv.org/abs/1707.06347
  
  :param env: (Gym environment or str) The environment to learn from (if registered in Gym, can be str)
  :param policy: (ActorCriticPolicy or str) The policy model to use (MlpPolicy, CnnPolicy, CnnLstmPolicy, ...)
  :param timesteps_per_actorbatch: (int) timesteps per actor per update
  :param clip_param: (float) clipping parameter epsilon
  :param entcoeff: (float) the entropy loss weight
  :param optim_epochs: (float) the optimizer's number of epochs
  :param optim_stepsize: (float) the optimizer's stepsize
  :param optim_batchsize: (int) the optimizer's the batch size
  :param gamma: (float) discount factor
  :param lam: (float) advantage estimation
  :param adam_epsilon: (float) the epsilon value for the adam optimizer
  :param schedule: (str) The type of scheduler for the learning rate update ('linear', 'constant',
      'double_linear_con', 'middle_drop' or 'double_middle_drop')
  :param verbose: (int) the verbosity level: 0 none, 1 training information, 2 tensorflow debug
  :param tensorboard_log: (str) the log location for tensorboard (if None, no logging)
  :param _init_setup_model: (bool) Whether or not to build the network at the creation of the instance
  :param policy_kwargs: (dict) additional arguments to be passed to the policy on creation
  :param full_tensorboard_log: (bool) enable additional logging when using tensorboard
      WARNING: this logging can take a lot of space quickly
  :param seed: (int) Seed for the pseudo-random generators (python, numpy, tensorflow).
      If None (default), use random seed. Note that if you want completely deterministic
      results, you must set `n_cpu_tf_sess` to 1.
  :param n_cpu_tf_sess: (int) The number of threads for TensorFlow operations
      If None, the number of cpu of the current machine will be used.
code: def save(self, save_path, cloudpickle=False):
      data = {
          "gamma": self.gamma,
          "timesteps_per_actorbatch": self.timesteps_per_actorbatch,
          "clip_param": self.clip_param,
          "entcoeff": self.entcoeff,
          "optim_epochs": self.optim_epochs,
          "optim_stepsize": self.optim_stepsize,
          "optim_batchsize": self.optim_batchsize,
          "lam": self.lam,
          "adam_epsilon": self.adam_epsilon,
          "schedule": self.schedule,
          "verbose": self.verbose,
          "policy": self.policy,
          "observation_space": self.observation_space,
          "action_space": self.action_space,
          "n_envs": self.n_envs,
          "n_cpu_tf_sess": self.n_cpu_tf_sess,
          "seed": self.seed,
          "_vectorize_action": self._vectorize_action,
          "policy_kwargs": self.policy_kwargs,
      }
  
      params_to_save = self.get_parameters()
  
      self._save_to_file(
          save_path,
          data=data,
          params=params_to_save,
          cloudpickle=cloudpickle,
      )
  
imports: import time
  from collections import deque
  import gym
  import numpy
  import tensorflow
  from mpi4py import MPI
  from stable_baselines.common import Dataset, explained_variance, fmt_row, zipsame, ActorCriticRLModel, SetVerbosity, TensorboardWriter
  from stable_baselines import logger
  import stable_baselines.common.tf_util
  from stable_baselines.common.tf_util import total_episode_reward_logger
  from stable_baselines.common.policies import ActorCriticPolicy
  from stable_baselines.common.mpi_adam import MpiAdam
  from stable_baselines.common.mpi_moments import mpi_moments
  from stable_baselines.common.misc_util import flatten_lists
  from stable_baselines.common.runners import traj_segment_generator
  from stable_baselines.trpo_mpi.utils import add_vtarg_and_adv
label_desc: Use image node_id 5 for calling the PPO1 obj's underlying member method code with example usage: obj.save(save_path, cloudpickle) without return types