model with score above 200
Browse files- README.md +37 -11
- ppo-LunarLander-v2/_stable_baselines3_version +0 -1
- ppo-LunarLander-v2/data +0 -118
- ppo-LunarLander-v2/system_info.txt +0 -8
- src/info.py +20 -0
- ppo-LunarLander-v2/policy.optimizer.pth → src/logs/best_model/20241004_best_model.zip +2 -2
- ppo-LunarLander-v2/pytorch_variables.pth → src/logs/evaluations.npz +2 -2
- ppo-LunarLander-v2.zip → src/ppo-LunarLander-v2.zip +2 -2
- src/train.py +51 -0
- src/upload.py +38 -0
- ppo-LunarLander-v2/policy.pth → src/vecnormalize.pkl +2 -2
README.md
CHANGED
|
@@ -16,22 +16,48 @@ model-index:
|
|
| 16 |
type: LunarLander-v2
|
| 17 |
metrics:
|
| 18 |
- type: mean_reward
|
| 19 |
-
value:
|
| 20 |
name: mean_reward
|
| 21 |
verified: false
|
| 22 |
---
|
| 23 |
|
| 24 |
-
# **PPO** Agent
|
| 25 |
-
This is a trained model of a **PPO** agent playing **LunarLander-v2**
|
| 26 |
-
using the [stable-baselines3 library](https://github.com/DLR-RM/stable-baselines3).
|
| 27 |
|
| 28 |
-
|
| 29 |
-
TODO: Add your code
|
| 30 |
|
|
|
|
| 31 |
|
| 32 |
-
|
| 33 |
-
from stable_baselines3 import ...
|
| 34 |
-
from huggingface_sb3 import load_from_hub
|
| 35 |
|
| 36 |
-
..
|
| 37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 16 |
type: LunarLander-v2
|
| 17 |
metrics:
|
| 18 |
- type: mean_reward
|
| 19 |
+
value: 265.60 +/- 18.19
|
| 20 |
name: mean_reward
|
| 21 |
verified: false
|
| 22 |
---
|
| 23 |
|
| 24 |
+
# **PPO** Agent Playing **LunarLander-v2**
|
|
|
|
|
|
|
| 25 |
|
| 26 |
+
This repository contains a trained **PPO (Proximal Policy Optimization)** agent playing the **LunarLander-v2** environment using the [Stable-Baselines3 library](https://github.com/DLR-RM/stable-baselines3).
|
|
|
|
| 27 |
|
| 28 |
+
The model achieved a **mean reward of 265.60 +/- 18.19** after training for 2,000,000 timesteps.
|
| 29 |
|
| 30 |
+
## Model Description
|
|
|
|
|
|
|
| 31 |
|
| 32 |
+
The agent is trained to solve the **LunarLander-v2** task, where the goal is to land a lunar module on the surface of the moon smoothly and safely, without crashing. The model uses **Proximal Policy Optimization (PPO)**, a popular reinforcement learning algorithm known for its stability and performance.
|
| 33 |
+
|
| 34 |
+
### **Algorithm: PPO**
|
| 35 |
+
- **Algorithm type**: Policy Gradient
|
| 36 |
+
- **Environment**: LunarLander-v2 (provided by Gymnasium)
|
| 37 |
+
- **Learning Framework**: Stable-Baselines3
|
| 38 |
+
|
| 39 |
+
## Training Information
|
| 40 |
+
|
| 41 |
+
- **Timesteps**: 2,000,000
|
| 42 |
+
- **Number of Parallel Environments**: 20
|
| 43 |
+
- **Discount Factor (`gamma`)**: 0.999 (high focus on long-term rewards)
|
| 44 |
+
- **GAE Lambda (`gae_lambda`)**: 0.98 (balance between bias and variance in advantage estimation)
|
| 45 |
+
- **Batch Size**: 128
|
| 46 |
+
- **Entropy Coefficient (`ent_coef`)**: 0.01 (encourages exploration)
|
| 47 |
+
- **Epochs (`n_epochs`)**: 4
|
| 48 |
+
|
| 49 |
+
## Results
|
| 50 |
+
|
| 51 |
+
| Metric | Value |
|
| 52 |
+
|--------------|-------------------------|
|
| 53 |
+
| Mean Reward | 265.60 +/- 18.19 |
|
| 54 |
+
| Evaluation Episodes | 100 |
|
| 55 |
+
|
| 56 |
+
The training was performed using 20 parallel environments and **VecNormalize** was used to normalize rewards during training.
|
| 57 |
+
|
| 58 |
+
## Usage
|
| 59 |
+
|
| 60 |
+
To load and use this trained model in your own projects, you can install the `huggingface_sb3` library and load the model from the Hugging Face Hub:
|
| 61 |
+
|
| 62 |
+
```bash
|
| 63 |
+
pip install huggingface_sb3
|
ppo-LunarLander-v2/_stable_baselines3_version
DELETED
|
@@ -1 +0,0 @@
|
|
| 1 |
-
2.4.0a9
|
|
|
|
|
|
ppo-LunarLander-v2/data
DELETED
|
@@ -1,118 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"policy_class": {
|
| 3 |
-
":type:": "<class 'abc.ABCMeta'>",
|
| 4 |
-
":serialized:": "gAWVOwAAAAAAAACMIXN0YWJsZV9iYXNlbGluZXMzLmNvbW1vbi5wb2xpY2llc5SMEUFjdG9yQ3JpdGljUG9saWN5lJOULg==",
|
| 5 |
-
"__module__": "stable_baselines3.common.policies",
|
| 6 |
-
"__doc__": "\n Policy class for actor-critic algorithms (has both policy and value prediction).\n Used by A2C, PPO and the likes.\n\n :param observation_space: Observation space\n :param action_space: Action space\n :param lr_schedule: Learning rate schedule (could be constant)\n :param net_arch: The specification of the policy and value networks.\n :param activation_fn: Activation function\n :param ortho_init: Whether to use or not orthogonal initialization\n :param use_sde: Whether to use State Dependent Exploration or not\n :param log_std_init: Initial value for the log standard deviation\n :param full_std: Whether to use (n_features x n_actions) parameters\n for the std instead of only (n_features,) when using gSDE\n :param use_expln: Use ``expln()`` function instead of ``exp()`` to ensure\n a positive standard deviation (cf paper). It allows to keep variance\n above zero and prevent it from growing too fast. In practice, ``exp()`` is usually enough.\n :param squash_output: Whether to squash the output using a tanh function,\n this allows to ensure boundaries when using gSDE.\n :param features_extractor_class: Features extractor to use.\n :param features_extractor_kwargs: Keyword arguments\n to pass to the features extractor.\n :param share_features_extractor: If True, the features extractor is shared between the policy and value networks.\n :param normalize_images: Whether to normalize images or not,\n dividing by 255.0 (True by default)\n :param optimizer_class: The optimizer to use,\n ``th.optim.Adam`` by default\n :param optimizer_kwargs: Additional keyword arguments,\n excluding the learning rate, to pass to the optimizer\n ",
|
| 7 |
-
"__init__": "<function ActorCriticPolicy.__init__ at 0x14b8de340>",
|
| 8 |
-
"_get_constructor_parameters": "<function ActorCriticPolicy._get_constructor_parameters at 0x14b8de3e0>",
|
| 9 |
-
"reset_noise": "<function ActorCriticPolicy.reset_noise at 0x14b8de480>",
|
| 10 |
-
"_build_mlp_extractor": "<function ActorCriticPolicy._build_mlp_extractor at 0x14b8de520>",
|
| 11 |
-
"_build": "<function ActorCriticPolicy._build at 0x14b8de5c0>",
|
| 12 |
-
"forward": "<function ActorCriticPolicy.forward at 0x14b8de660>",
|
| 13 |
-
"extract_features": "<function ActorCriticPolicy.extract_features at 0x14b8de700>",
|
| 14 |
-
"_get_action_dist_from_latent": "<function ActorCriticPolicy._get_action_dist_from_latent at 0x14b8de7a0>",
|
| 15 |
-
"_predict": "<function ActorCriticPolicy._predict at 0x14b8de840>",
|
| 16 |
-
"evaluate_actions": "<function ActorCriticPolicy.evaluate_actions at 0x14b8de8e0>",
|
| 17 |
-
"get_distribution": "<function ActorCriticPolicy.get_distribution at 0x14b8de980>",
|
| 18 |
-
"predict_values": "<function ActorCriticPolicy.predict_values at 0x14b8dea20>",
|
| 19 |
-
"__abstractmethods__": "frozenset()",
|
| 20 |
-
"_abc_impl": "<_abc._abc_data object at 0x14b8d6080>"
|
| 21 |
-
},
|
| 22 |
-
"verbose": 1,
|
| 23 |
-
"policy_kwargs": {},
|
| 24 |
-
"num_timesteps": 1400000,
|
| 25 |
-
"_total_timesteps": 1500000,
|
| 26 |
-
"_num_timesteps_at_start": 0,
|
| 27 |
-
"seed": null,
|
| 28 |
-
"action_noise": null,
|
| 29 |
-
"start_time": 1728036311370012000,
|
| 30 |
-
"learning_rate": 0.0001,
|
| 31 |
-
"tensorboard_log": "./ppo_lunar_tensorboard/",
|
| 32 |
-
"_last_obs": {
|
| 33 |
-
":type:": "<class 'numpy.ndarray'>",
|
| 34 |
-
":serialized:": "gAWV9QIAAAAAAACMEm51bXB5LmNvcmUubnVtZXJpY5SMC19mcm9tYnVmZmVylJOUKJaAAgAAAAAAAPxZPz8OFU+/69IMOwDHNT8XzWc/Cmbzu2fQxD92hcU/a/lhvm5TWL/jA6w7WNI1P3nD3DvVAB68Z9DEP3aFxT+v8qa/sUdPv9/SyLeK1jU/NkSuvq2i0Ltn0MQ/doXFP9th2L55JFi/jkG3PDi6NT+hiDy92Pq1u2fQxD92hcU/xS4eP7qjfz2+B0M+4DNEv9N/3Lxbeci+/n0mv2HlJb8SeTk/0A5dvwsM7Ls+9jU/IQfRvh6cA7tn0MQ/doXFPxhSD7/ODFq/JJJ+O6rRNT/37hY+7E8RvGfQxD92hcU/jsYePv0c8T+7VipAcvaSPyVW5r3Ij2y//n0mv2HlJb9Rohk/qdVYvygetzqs0zU/PNN8vYTm9Ltn0MQ/doXFP6JeDD/I6Ks/Gs+TP9aJLL9xyAM/CBEjP/59Jr9h5SW/POLZvtgjWb/irBs5xc81P9XVFD2ve967Z9DEP3aFxT+1NJQ/CA0Mv2EmKL5yu8c96LXHPm9GlL/+fSa/YeUlv+g/5r7d/1q/Wnv8O53ZNT+sD3U+GYs4vGfQxD92hcU/dhuXvphCWL+QvS+8FtI1P/HWeruw9Sm6Z9DEP3aFxT9y06G+A51Yvx13mTp/0TU/TAUivJlv8rtn0MQ/doXFP62ABD+EVVi/MhAOPLbSNT9mi1i876s9vGfQxD92hcU/PKJ0PxZoWr/+46G+BoBsvmoYX74cHqA+/n0mv2HlJb+Mv4y/uWT2PrSeAL8PiPy+fu1gv7WwMj/+fSa/YeUlv3ekRz+vgVm/HuKUOzTSNT82fBe+uoUXvGfQxD92hcU/LUhdv3n1UL/D8rq8KfY2P2nBOr+7cFG9Z9DEP3aFxT+UjAVudW1weZSMBWR0eXBllJOUjAJmNJSJiIeUUpQoSwOMATyUTk5OSv////9K/////0sAdJRiSxRLCIaUjAFDlHSUUpQu"
|
| 35 |
-
},
|
| 36 |
-
"_last_episode_starts": {
|
| 37 |
-
":type:": "<class 'numpy.ndarray'>",
|
| 38 |
-
":serialized:": "gAWVhwAAAAAAAACMEm51bXB5LmNvcmUubnVtZXJpY5SMC19mcm9tYnVmZmVylJOUKJYUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlIwFbnVtcHmUjAVkdHlwZZSTlIwCYjGUiYiHlFKUKEsDjAF8lE5OTkr/////Sv////9LAHSUYksUhZSMAUOUdJRSlC4="
|
| 39 |
-
},
|
| 40 |
-
"_last_original_obs": {
|
| 41 |
-
":type:": "<class 'numpy.ndarray'>",
|
| 42 |
-
":serialized:": "gAWV9QIAAAAAAACMEm51bXB5LmNvcmUubnVtZXJpY5SMC19mcm9tYnVmZmVylJOUKJaAAgAAAAAAAAAsurvXrLU/yVMTv4WGvz5k89c7vnwFPgAAAAAAAAAAmsX7O1j0tT+1Okc/ES3xPmzCEbx9gzS+AAAAAAAAAACaIVu7imWzP0Zqrb6MitW+Tl5+O9gfnT0AAAAAAAAAAJoZ4zvUxLU/ILQzPyYt0D6xdgO8e9IivgAAAAAAAAAAZq7eO65EtD8xNjA/n1XqvTDoALySqB++AAAAAAAAAADNkgI8ucSzPxqmTj9RcpO+FDEXvHs8O74AAAAAAAAAAJpR27sCILU/6I4tv99xOz6MXP47E0EdPgAAAAAAAAAAzSTgu08Wsz9FXzG/OEkGvzv5ATy0tSA+AAAAAAAAAACauSw7HZezPzauiD7dG7O+erVHuzKud70AAAAAAAAAADMrFTsSM7Q/lQ9sPuSdDb68Ziy7jeJVvQAAAAAAAAAAzUjdO4G2tD/4GS8/saQjPTUYALz+ph6+AAAAAAAAAACaYb27ZwGzP7DcFb+Sig2/CKrbO7bIBz4AAAAAAAAAAGZqszufm7Q/gvgNP1sIZTuVrM+7SKIAvgAAAAAAAAAAzezsOsz5tD9TeDs+imUGPkHTCLvx2ym9AAAAAAAAAABmkuK7F7WzP+BLM78cTp6+zWEDPAh0Ij4AAAAAAAAAAM2M5rq97bU/bnI2vgyb7D6DAwY7yE4lPQAAAAAAAAAAAGAnu2qqtT+8dIS+eti9PnBkQjuuBnA9AAAAAAAAAADNnM46nWi1Pxl7Iz4QKJA+24XuupEfFL0AAAAAAAAAAGYe8rtbVbQ//5g/v6EMvL2HYww8VZktPgAAAAAAAAAAzWQwu1PYsz/Dlou+GdOFvhbWTDuI83w9AAAAAAAAAACUjAVudW1weZSMBWR0eXBllJOUjAJmNJSJiIeUUpQoSwOMATyUTk5OSv////9K/////0sAdJRiSxRLCIaUjAFDlHSUUpQu"
|
| 43 |
-
},
|
| 44 |
-
"_episode_num": 0,
|
| 45 |
-
"use_sde": false,
|
| 46 |
-
"sde_sample_freq": -1,
|
| 47 |
-
"_current_progress_remaining": 0.07157333333333338,
|
| 48 |
-
"_stats_window_size": 100,
|
| 49 |
-
"ep_info_buffer": {
|
| 50 |
-
":type:": "<class 'collections.deque'>",
|
| 51 |
-
":serialized:": "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"
|
| 52 |
-
},
|
| 53 |
-
"ep_success_buffer": {
|
| 54 |
-
":type:": "<class 'collections.deque'>",
|
| 55 |
-
":serialized:": "gAWVIAAAAAAAAACMC2NvbGxlY3Rpb25zlIwFZGVxdWWUk5QpS2SGlFKULg=="
|
| 56 |
-
},
|
| 57 |
-
"_n_updates": 170,
|
| 58 |
-
"n_steps": 4096,
|
| 59 |
-
"gamma": 0.99,
|
| 60 |
-
"gae_lambda": 0.95,
|
| 61 |
-
"ent_coef": 0.0,
|
| 62 |
-
"vf_coef": 0.5,
|
| 63 |
-
"max_grad_norm": 0.5,
|
| 64 |
-
"rollout_buffer_class": {
|
| 65 |
-
":type:": "<class 'abc.ABCMeta'>",
|
| 66 |
-
":serialized:": "gAWVNgAAAAAAAACMIHN0YWJsZV9iYXNlbGluZXMzLmNvbW1vbi5idWZmZXJzlIwNUm9sbG91dEJ1ZmZlcpSTlC4=",
|
| 67 |
-
"__module__": "stable_baselines3.common.buffers",
|
| 68 |
-
"__annotations__": "{'observations': <class 'numpy.ndarray'>, 'actions': <class 'numpy.ndarray'>, 'rewards': <class 'numpy.ndarray'>, 'advantages': <class 'numpy.ndarray'>, 'returns': <class 'numpy.ndarray'>, 'episode_starts': <class 'numpy.ndarray'>, 'log_probs': <class 'numpy.ndarray'>, 'values': <class 'numpy.ndarray'>}",
|
| 69 |
-
"__doc__": "\n Rollout buffer used in on-policy algorithms like A2C/PPO.\n It corresponds to ``buffer_size`` transitions collected\n using the current policy.\n This experience will be discarded after the policy update.\n In order to use PPO objective, we also store the current value of each state\n and the log probability of each taken action.\n\n The term rollout here refers to the model-free notion and should not\n be used with the concept of rollout used in model-based RL or planning.\n Hence, it is only involved in policy and value function training but not action selection.\n\n :param buffer_size: Max number of element in the buffer\n :param observation_space: Observation space\n :param action_space: Action space\n :param device: PyTorch device\n :param gae_lambda: Factor for trade-off of bias vs variance for Generalized Advantage Estimator\n Equivalent to classic advantage when set to 1.\n :param gamma: Discount factor\n :param n_envs: Number of parallel environments\n ",
|
| 70 |
-
"__init__": "<function RolloutBuffer.__init__ at 0x14ad0dc60>",
|
| 71 |
-
"reset": "<function RolloutBuffer.reset at 0x14ad0dd00>",
|
| 72 |
-
"compute_returns_and_advantage": "<function RolloutBuffer.compute_returns_and_advantage at 0x14ad0dda0>",
|
| 73 |
-
"add": "<function RolloutBuffer.add at 0x14ad0dee0>",
|
| 74 |
-
"get": "<function RolloutBuffer.get at 0x14ad0df80>",
|
| 75 |
-
"_get_samples": "<function RolloutBuffer._get_samples at 0x14ad0e020>",
|
| 76 |
-
"__abstractmethods__": "frozenset()",
|
| 77 |
-
"_abc_impl": "<_abc._abc_data object at 0x13f60de00>"
|
| 78 |
-
},
|
| 79 |
-
"rollout_buffer_kwargs": {},
|
| 80 |
-
"batch_size": 128,
|
| 81 |
-
"n_epochs": 10,
|
| 82 |
-
"clip_range": {
|
| 83 |
-
":type:": "<class 'function'>",
|
| 84 |
-
":serialized:": "gAWV1AUAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLBUsTQyaVAZcAdAEAAAAAAAAAAAIAiQF8AKsBAAAAAAAAqwEAAAAAAABTAJROhZSMBWZsb2F0lIWUjBJwcm9ncmVzc19yZW1haW5pbmeUhZSMXy9Vc2Vycy9wYXRyaWNra2Fsa21hbi9taW5pY29uZGEzL2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvc3RhYmxlX2Jhc2VsaW5lczMvY29tbW9uL3V0aWxzLnB5lIwIPGxhbWJkYT6UjCFnZXRfc2NoZWR1bGVfZm4uPGxvY2Fscz4uPGxhbWJkYT6US2FDEviAAKRlqU7QO03TLE7TJk+AAJRDAJSMDnZhbHVlX3NjaGVkdWxllIWUKXSUUpR9lCiMC19fcGFja2FnZV9flIwYc3RhYmxlX2Jhc2VsaW5lczMuY29tbW9ulIwIX19uYW1lX1+UjB5zdGFibGVfYmFzZWxpbmVzMy5jb21tb24udXRpbHOUjAhfX2ZpbGVfX5SMXy9Vc2Vycy9wYXRyaWNra2Fsa21hbi9taW5pY29uZGEzL2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvc3RhYmxlX2Jhc2VsaW5lczMvY29tbW9uL3V0aWxzLnB5lHVOTmgAjBBfbWFrZV9lbXB0eV9jZWxslJOUKVKUhZR0lFKUaACMEl9mdW5jdGlvbl9zZXRzdGF0ZZSTlGgjfZR9lChoGmgPjAxfX3F1YWxuYW1lX1+UaBCMD19fYW5ub3RhdGlvbnNfX5R9lIwOX19rd2RlZmF1bHRzX1+UTowMX19kZWZhdWx0c19flE6MCl9fbW9kdWxlX1+UaBuMB19fZG9jX1+UTowLX19jbG9zdXJlX1+UaACMCl9tYWtlX2NlbGyUk5RoAihoByhLAUsASwBLAUsFSxNDJpUBlwB0AQAAAAAAAAAAAgCJAXwAqwEAAAAAAACrAQAAAAAAAFMAlE6FlGgKhZRoDIWUjF8vVXNlcnMvcGF0cmlja2thbGttYW4vbWluaWNvbmRhMy9saWIvcHl0aG9uMy4xMi9zaXRlLXBhY2thZ2VzL3N0YWJsZV9iYXNlbGluZXMzL2NvbW1vbi91dGlscy5weZSMCDxsYW1iZGE+lIwhZ2V0X3NjaGVkdWxlX2ZuLjxsb2NhbHM+LjxsYW1iZGE+lEthQxL4gACkZalO0DtN0yxO0yZPgACUaBJoE4WUKXSUUpR9lChoGIwYc3RhYmxlX2Jhc2VsaW5lczMuY29tbW9ulGgajB5zdGFibGVfYmFzZWxpbmVzMy5jb21tb24udXRpbHOUaByMXy9Vc2Vycy9wYXRyaWNra2Fsa21hbi9taW5pY29uZGEzL2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvc3RhYmxlX2Jhc2VsaW5lczMvY29tbW9uL3V0aWxzLnB5lHVOTmgfKVKUhZR0lFKUaCVoRH2UfZQoaBpoN2goaDhoKX2UaCtOaCxOaC1oP2guTmgvaDFoAihoByhLAUsASwBLAUsBSxNDCJUBlwCJAVMAlGgzKYwBX5SFlGg2jARmdW5jlIwZY29uc3RhbnRfZm4uPGxvY2Fscz4uZnVuY5RLhUMI+IAA2A8SiAqUaBKMA3ZhbJSFlCl0lFKUaD1OTmgfKVKUhZR0lFKUaCVoVX2UfZQoaBpoS2goaExoKX2UaCtOaCxOaC1oP2guTmgvaDFHP8mZmZmZmZqFlFKUhZSMF19jbG91ZHBpY2tsZV9zdWJtb2R1bGVzlF2UjAtfX2dsb2JhbHNfX5R9lHWGlIZSMIWUUpSFlGhcXZRoXn2UdYaUhlIwhZRSlIWUaFxdlGhefZR1hpSGUjAu"
|
| 85 |
-
},
|
| 86 |
-
"clip_range_vf": null,
|
| 87 |
-
"normalize_advantage": true,
|
| 88 |
-
"target_kl": null,
|
| 89 |
-
"observation_space": {
|
| 90 |
-
":type:": "<class 'gymnasium.spaces.box.Box'>",
|
| 91 |
-
":serialized:": "gAWVZgIAAAAAAACMFGd5bW5hc2l1bS5zcGFjZXMuYm94lIwDQm94lJOUKYGUfZQojAVkdHlwZZSMBW51bXB5lIwFZHR5cGWUk5SMAmY0lImIh5RSlChLA4wBPJROTk5K/////0r/////SwB0lGKMDWJvdW5kZWRfYmVsb3eUjBJudW1weS5jb3JlLm51bWVyaWOUjAtfZnJvbWJ1ZmZlcpSTlCiWCAAAAAAAAAABAQEBAQEBAZRoCIwCYjGUiYiHlFKUKEsDjAF8lE5OTkr/////Sv////9LAHSUYksIhZSMAUOUdJRSlIwNYm91bmRlZF9hYm92ZZRoESiWCAAAAAAAAAABAQEBAQEBAZRoFUsIhZRoGXSUUpSMBl9zaGFwZZRLCIWUjANsb3eUaBEoliAAAAAAAAAAAADAvwAAwL8AAKDAAACgwNsPScAAAKDAAAAAgAAAAICUaAtLCIWUaBl0lFKUjARoaWdolGgRKJYgAAAAAAAAAAAAwD8AAMA/AACgQAAAoEDbD0lAAACgQAAAgD8AAIA/lGgLSwiFlGgZdJRSlIwIbG93X3JlcHKUjFNbLTEuNSAgICAgICAtMS41ICAgICAgIC01LiAgICAgICAgLTUuICAgICAgICAtMy4xNDE1OTI3IC01LgogLTAuICAgICAgICAtMC4gICAgICAgXZSMCWhpZ2hfcmVwcpSMS1sxLjUgICAgICAgMS41ICAgICAgIDUuICAgICAgICA1LiAgICAgICAgMy4xNDE1OTI3IDUuICAgICAgICAxLgogMS4gICAgICAgXZSMCl9ucF9yYW5kb22UTnViLg==",
|
| 92 |
-
"dtype": "float32",
|
| 93 |
-
"bounded_below": "[ True True True True True True True True]",
|
| 94 |
-
"bounded_above": "[ True True True True True True True True]",
|
| 95 |
-
"_shape": [
|
| 96 |
-
8
|
| 97 |
-
],
|
| 98 |
-
"low": "[-1.5 -1.5 -5. -5. -3.1415927 -5.\n -0. -0. ]",
|
| 99 |
-
"high": "[1.5 1.5 5. 5. 3.1415927 5. 1.\n 1. ]",
|
| 100 |
-
"low_repr": "[-1.5 -1.5 -5. -5. -3.1415927 -5.\n -0. -0. ]",
|
| 101 |
-
"high_repr": "[1.5 1.5 5. 5. 3.1415927 5. 1.\n 1. ]",
|
| 102 |
-
"_np_random": null
|
| 103 |
-
},
|
| 104 |
-
"action_space": {
|
| 105 |
-
":type:": "<class 'gymnasium.spaces.discrete.Discrete'>",
|
| 106 |
-
":serialized:": "gAWV/QAAAAAAAACMGWd5bW5hc2l1bS5zcGFjZXMuZGlzY3JldGWUjAhEaXNjcmV0ZZSTlCmBlH2UKIwBbpSMFW51bXB5LmNvcmUubXVsdGlhcnJheZSMBnNjYWxhcpSTlIwFbnVtcHmUjAVkdHlwZZSTlIwCaTiUiYiHlFKUKEsDjAE8lE5OTkr/////Sv////9LAHSUYkMIBAAAAAAAAACUhpRSlIwFc3RhcnSUaAhoDkMIAAAAAAAAAACUhpRSlIwGX3NoYXBllCmMBWR0eXBllGgLjAJpOJSJiIeUUpQoSwNoD05OTkr/////Sv////9LAHSUYowKX25wX3JhbmRvbZROdWIu",
|
| 107 |
-
"n": "4",
|
| 108 |
-
"start": "0",
|
| 109 |
-
"_shape": [],
|
| 110 |
-
"dtype": "int64",
|
| 111 |
-
"_np_random": null
|
| 112 |
-
},
|
| 113 |
-
"n_envs": 20,
|
| 114 |
-
"lr_schedule": {
|
| 115 |
-
":type:": "<class 'function'>",
|
| 116 |
-
":serialized:": "gAWV7AMAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLBUsTQyaVAZcAdAEAAAAAAAAAAAIAiQF8AKsBAAAAAAAAqwEAAAAAAABTAJROhZSMBWZsb2F0lIWUjBJwcm9ncmVzc19yZW1haW5pbmeUhZSMXy9Vc2Vycy9wYXRyaWNra2Fsa21hbi9taW5pY29uZGEzL2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvc3RhYmxlX2Jhc2VsaW5lczMvY29tbW9uL3V0aWxzLnB5lIwIPGxhbWJkYT6UjCFnZXRfc2NoZWR1bGVfZm4uPGxvY2Fscz4uPGxhbWJkYT6US2FDEviAAKRlqU7QO03TLE7TJk+AAJRDAJSMDnZhbHVlX3NjaGVkdWxllIWUKXSUUpR9lCiMC19fcGFja2FnZV9flIwYc3RhYmxlX2Jhc2VsaW5lczMuY29tbW9ulIwIX19uYW1lX1+UjB5zdGFibGVfYmFzZWxpbmVzMy5jb21tb24udXRpbHOUjAhfX2ZpbGVfX5SMXy9Vc2Vycy9wYXRyaWNra2Fsa21hbi9taW5pY29uZGEzL2xpYi9weXRob24zLjEyL3NpdGUtcGFja2FnZXMvc3RhYmxlX2Jhc2VsaW5lczMvY29tbW9uL3V0aWxzLnB5lHVOTmgAjBBfbWFrZV9lbXB0eV9jZWxslJOUKVKUhZR0lFKUaACMEl9mdW5jdGlvbl9zZXRzdGF0ZZSTlGgjfZR9lChoGmgPjAxfX3F1YWxuYW1lX1+UaBCMD19fYW5ub3RhdGlvbnNfX5R9lIwOX19rd2RlZmF1bHRzX1+UTowMX19kZWZhdWx0c19flE6MCl9fbW9kdWxlX1+UaBuMB19fZG9jX1+UTowLX19jbG9zdXJlX1+UaACMCl9tYWtlX2NlbGyUk5RoAihoByhLAUsASwBLAUsBSxNDCJUBlwCJAVMAlGgJKYwBX5SFlGgOjARmdW5jlIwZY29uc3RhbnRfZm4uPGxvY2Fscz4uZnVuY5RLhUMI+IAA2A8SiAqUaBKMA3ZhbJSFlCl0lFKUaBdOTmgfKVKUhZR0lFKUaCVoP32UfZQoaBpoNWgoaDZoKX2UaCtOaCxOaC1oG2guTmgvaDFHPxo24uscQy2FlFKUhZSMF19jbG91ZHBpY2tsZV9zdWJtb2R1bGVzlF2UjAtfX2dsb2JhbHNfX5R9lHWGlIZSMIWUUpSFlGhGXZRoSH2UdYaUhlIwLg=="
|
| 117 |
-
}
|
| 118 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ppo-LunarLander-v2/system_info.txt
DELETED
|
@@ -1,8 +0,0 @@
|
|
| 1 |
-
- OS: macOS-15.0-arm64-arm-64bit Darwin Kernel Version 24.0.0: Mon Aug 12 20:52:41 PDT 2024; root:xnu-11215.1.10~2/RELEASE_ARM64_T6031
|
| 2 |
-
- Python: 3.12.4
|
| 3 |
-
- Stable-Baselines3: 2.4.0a9
|
| 4 |
-
- PyTorch: 2.6.0.dev20240927
|
| 5 |
-
- GPU Enabled: False
|
| 6 |
-
- Numpy: 1.26.4
|
| 7 |
-
- Cloudpickle: 3.0.0
|
| 8 |
-
- Gymnasium: 0.29.1
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
src/info.py
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import sys
|
| 2 |
+
import platform
|
| 3 |
+
import torch
|
| 4 |
+
import pandas as pd
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
#def showDeviceInfo():
|
| 8 |
+
has_gpu = torch.cuda.is_available()
|
| 9 |
+
has_mps = torch.backends.mps.is_built()
|
| 10 |
+
device = "mps" if has_mps \
|
| 11 |
+
else "cuda" if has_gpu else "cpu"
|
| 12 |
+
|
| 13 |
+
print(f"Python Platform: {platform.platform()}")
|
| 14 |
+
print(f"PyTorch Version: {torch.__version__}")
|
| 15 |
+
print()
|
| 16 |
+
print(f"Python {sys.version}")
|
| 17 |
+
print(f"Pandas {pd.__version__}")
|
| 18 |
+
print("GPU is", "available" if has_gpu else "NOT AVAILABLE")
|
| 19 |
+
print("MPS (Apple Metal) is", "AVAILABLE" if has_mps else "NOT AVAILABLE")
|
| 20 |
+
print(f"Target device is {device}")
|
ppo-LunarLander-v2/policy.optimizer.pth → src/logs/best_model/20241004_best_model.zip
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:c6350261c5da9d4abe2b5980f85fa14c2bc38237e91060d4fcc12caf0d666369
|
| 3 |
+
size 152021
|
ppo-LunarLander-v2/pytorch_variables.pth → src/logs/evaluations.npz
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:af0b29e9edd10ed0fc5341218fb7c019f9eb7ff8351138307bb5b5b21cc216dc
|
| 3 |
+
size 1650
|
ppo-LunarLander-v2.zip → src/ppo-LunarLander-v2.zip
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:ff5d1a3fdbd8d856ec3e5f0d741f98a6733e14544a7501f8786298945fe46a0f
|
| 3 |
+
size 152003
|
src/train.py
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gymnasium as gym
|
| 2 |
+
from stable_baselines3.common.env_util import make_vec_env
|
| 3 |
+
from stable_baselines3.common.evaluation import evaluate_policy
|
| 4 |
+
from stable_baselines3.common.monitor import Monitor
|
| 5 |
+
from stable_baselines3.common.vec_env import VecNormalize, DummyVecEnv
|
| 6 |
+
from stable_baselines3 import PPO
|
| 7 |
+
from stable_baselines3.common.callbacks import EvalCallback
|
| 8 |
+
from stable_baselines3.common.logger import configure
|
| 9 |
+
|
| 10 |
+
# Create 20 parallel environments for training and normalize the rewards
|
| 11 |
+
env = make_vec_env('LunarLander-v2', n_envs=20)
|
| 12 |
+
env = VecNormalize(env, norm_reward=True)
|
| 13 |
+
|
| 14 |
+
# Create the evaluation environment and apply VecNormalize
|
| 15 |
+
eval_env = make_vec_env('LunarLander-v2', n_envs=1)
|
| 16 |
+
eval_env = VecNormalize(eval_env, norm_reward=True)
|
| 17 |
+
|
| 18 |
+
# Callback for evaluation and saving the best model
|
| 19 |
+
eval_callback = EvalCallback(eval_env, best_model_save_path='./logs/best_model',
|
| 20 |
+
log_path='./logs/', eval_freq=10_000,
|
| 21 |
+
deterministic=True, render=False)
|
| 22 |
+
|
| 23 |
+
# Initialize the PPO model with adjusted hyperparameters
|
| 24 |
+
model = PPO("MlpPolicy", env, verbose=1, device="cuda",
|
| 25 |
+
batch_size=128, # Larger batch size
|
| 26 |
+
n_steps=4096,
|
| 27 |
+
gae_lambda=0.98,
|
| 28 |
+
gamma=0.999,
|
| 29 |
+
n_epochs=4,
|
| 30 |
+
ent_coef=0.01) # Path to store TensorBoard logs
|
| 31 |
+
|
| 32 |
+
|
| 33 |
+
# Train the model for 1.5 million timesteps
|
| 34 |
+
model.learn(total_timesteps=2_000_000, callback=eval_callback)
|
| 35 |
+
|
| 36 |
+
# Save the trained model
|
| 37 |
+
model_name = "ppo-LunarLander-v2"
|
| 38 |
+
model.save(model_name)
|
| 39 |
+
|
| 40 |
+
env.save("vecnormalize.pkl")
|
| 41 |
+
|
| 42 |
+
# Load the best model
|
| 43 |
+
best_model = PPO.load("./logs/best_model/best_model.zip")
|
| 44 |
+
|
| 45 |
+
# Normalize the evaluation environment (using the same normalization as training)
|
| 46 |
+
eval_env.training = False
|
| 47 |
+
eval_env.norm_reward = False # Turn off normalization for evaluation
|
| 48 |
+
|
| 49 |
+
# Evaluate the best model
|
| 50 |
+
mean_reward, std_reward = evaluate_policy(best_model, eval_env, n_eval_episodes=100, deterministic=True)
|
| 51 |
+
print(f"Best model mean_reward={mean_reward:.2f} +/- {std_reward}")
|
src/upload.py
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import gymnasium as gym
|
| 2 |
+
from stable_baselines3 import PPO
|
| 3 |
+
from stable_baselines3.common.vec_env import DummyVecEnv
|
| 4 |
+
from stable_baselines3.common.monitor import Monitor # Import Monitor
|
| 5 |
+
from huggingface_sb3 import package_to_hub
|
| 6 |
+
from stable_baselines3.common.vec_env import VecNormalize
|
| 7 |
+
|
| 8 |
+
# Define the name of the environment
|
| 9 |
+
env_id = "LunarLander-v2"
|
| 10 |
+
|
| 11 |
+
# Define the model architecture we used
|
| 12 |
+
model_architecture = "PPO"
|
| 13 |
+
|
| 14 |
+
repo_id = "pkalkman/LunarLander-v2-ppo"
|
| 15 |
+
|
| 16 |
+
# Define the commit message
|
| 17 |
+
commit_message = "Upload PPO LunarLander-v2 trained agent"
|
| 18 |
+
|
| 19 |
+
# Load the best trained model
|
| 20 |
+
model_name = "ppo-LunarLander-v2"
|
| 21 |
+
model = PPO.load("./logs/best_model/best_model.zip")
|
| 22 |
+
|
| 23 |
+
# Create the evaluation environment and wrap it with Monitor
|
| 24 |
+
eval_env = DummyVecEnv([lambda: Monitor(gym.make(env_id, render_mode="rgb_array"))])
|
| 25 |
+
|
| 26 |
+
# Load VecNormalize statistics from training
|
| 27 |
+
eval_env = VecNormalize.load("vecnormalize.pkl", eval_env)
|
| 28 |
+
|
| 29 |
+
# Push the model to Hugging Face
|
| 30 |
+
package_to_hub(
|
| 31 |
+
model=model, # Our trained model
|
| 32 |
+
model_name=model_name, # The name of our trained model
|
| 33 |
+
model_architecture=model_architecture, # The model architecture we used
|
| 34 |
+
env_id=env_id, # Name of the environment
|
| 35 |
+
eval_env=eval_env, # Evaluation environment
|
| 36 |
+
repo_id=repo_id, # Your Hugging Face repo ID
|
| 37 |
+
commit_message=commit_message # Commit message for the upload
|
| 38 |
+
)
|
ppo-LunarLander-v2/policy.pth → src/vecnormalize.pkl
RENAMED
|
@@ -1,3 +1,3 @@
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
-
oid sha256:
|
| 3 |
-
size
|
|
|
|
| 1 |
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:a1aa6c6ae98219cd0921297e1d5e8bc1bb389a981865b96bb4e6c973eb83fca4
|
| 3 |
+
size 2502
|