pkalkman commited on
Commit
7b8c673
·
1 Parent(s): 6c7f9a5

model with score above 200

Browse files
README.md CHANGED
@@ -16,22 +16,48 @@ model-index:
16
  type: LunarLander-v2
17
  metrics:
18
  - type: mean_reward
19
- value: -58.34 +/- 28.47
20
  name: mean_reward
21
  verified: false
22
  ---
23
 
24
- # **PPO** Agent playing **LunarLander-v2**
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
- ## Usage (with Stable-baselines3)
29
- TODO: Add your code
30
 
 
31
 
32
- ```python
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:46c243f5d74bde751f26f0536bb3e1c57850b2f3022c6c9904400b622e511d36
3
- size 87978
 
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:ebdad4b9cfe9cd22a3abadb5623bf7bb1f6eb2e408740245eb3f2044b0adc018
3
- size 864
 
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:2c779cb50f217b3fdee8ad077198f695c65d0f6f69a3696c1eabe7b898ad02f6
3
- size 152515
 
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:93e218ca6e66e5ce24b735a2c9fe29649f2117c8a34170dd29a3755696e58c5b
3
- size 43634
 
1
  version https://git-lfs.github.com/spec/v1
2
+ oid sha256:a1aa6c6ae98219cd0921297e1d5e8bc1bb389a981865b96bb4e6c973eb83fca4
3
+ size 2502