readme: ---
  library_name: stable-baselines3
  tags:
  - LunarLander-v2
  - deep-reinforcement-learning
  - reinforcement-learning
  - stable-baselines3
  model-index:
  - name: PPO
    results:
    - task:
        type: reinforcement-learning
        name: reinforcement-learning
      dataset:
        name: LunarLander-v2
        type: LunarLander-v2
      metrics:
      - type: mean_reward
        value: 227.87 +/- 85.21
        name: mean_reward
        verified: false
  ---
  
  # **PPO** Agent playing **LunarLander-v2**
  This is a trained model of a **PPO** agent playing **LunarLander-v2**
  using the [stable-baselines3 library](https://github.com/DLR-RM/stable-baselines3).
  
  ## Usage (with Stable-baselines3)
  
  
  
  ```python
  # Virtual display
  from pyvirtualdisplay import Display
  
  virtual_display = Display(visible=0, size=(1400, 900))
  virtual_display.start()
  
  # We create our environment with gym.make("<name_of_the_environment>")
  env = gym.make("LunarLander-v2")
  env.reset()
  print("_____OBSERVATION SPACE_____ \n")
  print("Observation Space Shape", env.observation_space.shape)
  print("Sample observation", env.observation_space.sample()) # Get a random observation
  
  print("\n _____ACTION SPACE_____ \n")
  print("Action Space Shape", env.action_space.n)
  print("Action Space Sample", env.action_space.sample()) # Take a random action
  
  # Create the environment
  env = make_vec_env('LunarLander-v2', n_envs=16)
  
  # TODO: Define a PPO MlpPolicy architecture
  # We use MultiLayerPerceptron (MLPPolicy) because the input is a vector,
  # if we had frames as input we would use CnnPolicy
  # SOLUTION
  # We added some parameters to accelerate the training
  model = PPO(
      policy = 'MlpPolicy',
      env = env,
      n_steps = 1024,
      batch_size = 64,
      n_epochs = 4,
      gamma = 0.999,
      gae_lambda = 0.98,
      ent_coef = 0.01,
      verbose=1)
  
  # Train it for 1,000,000 timesteps
  model.learn(total_timesteps=1000000)
  # Save the model
  model_name = "ppo-LunarLander-v2"
  model.save(model_name)
  
  
  # Create a new environment for evaluation
  eval_env = gym.make("LunarLander-v2")
  
  # Evaluate the model with 10 evaluation episodes and deterministic=True
  mean_reward, std_reward = evaluate_policy(model, eval_env, n_eval_episodes=10, deterministic=True)
  
  # Print the results
  print(f"mean_reward={mean_reward:.2f} +/- {std_reward}")
  
  ...
  ```
  
  Then upload it using huggingFace library
  
  notebook_login()
  
  !git config --global credential.helper store
  
  and
  
  ```python
  import gym
  from stable_baselines3.common.vec_env import DummyVecEnv
  from stable_baselines3.common.env_util import make_vec_env
  
  from huggingface_sb3 import package_to_hub
  
  ## TODO: Define a repo_id
  ## repo_id is the id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2
  repo_id = "rlucasz93/ppo-LunarLander-v2"
  
  # TODO: Define the name of the environment
  env_id = "LunarLander-v2"
  
  # Create the evaluation env
  eval_env = DummyVecEnv([lambda: gym.make(env_id)])
  
  
  # TODO: Define the model architecture we used
  model_architecture = "PPO"
  
  ## TODO: Define the commit message
  commit_message = "first model upload"
  
  # method save, evaluate, generate a model card and record a replay video of your agent before pushing the repo to the hub
  package_to_hub(model=model, # Our trained model
                 model_name=model_name, # The name of our trained model 
                 model_architecture=model_architecture, # The model architecture we used: in our case PPO
                 env_id=env_id, # Name of the environment
                 eval_env=eval_env, # Evaluation Environment
                 repo_id=repo_id, # id of the model repository from the Hugging Face Hub (repo_id = {organization}/{repo_name} for instance ThomasSimonini/ppo-LunarLander-v2
                 commit_message=commit_message)
  
  # Note: if after running the package_to_hub function and it gives an issue of rebasing, please run the following code
  # cd <path_to_repo> && git add . && git commit -m "Add message" && git pull 
  # And don't forget to do a "git push" at the end to push the change to the hub.
  ...
  ```
  
  