Initial commit
Browse files- .gitattributes +1 -0
- README.md +88 -0
- args.yml +81 -0
- config.yml +39 -0
- env_kwargs.yml +1 -0
- ppo-seals-Ant-v1.zip +3 -0
- ppo-seals-Ant-v1/_stable_baselines3_version +1 -0
- ppo-seals-Ant-v1/data +123 -0
- ppo-seals-Ant-v1/policy.optimizer.pth +3 -0
- ppo-seals-Ant-v1/policy.pth +3 -0
- ppo-seals-Ant-v1/pytorch_variables.pth +3 -0
- ppo-seals-Ant-v1/system_info.txt +9 -0
- results.json +1 -0
- train_eval_metrics.zip +3 -0
- vec_normalize.pkl +3 -0
.gitattributes
CHANGED
@@ -33,3 +33,4 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
33 |
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
36 |
+
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
README.md
ADDED
@@ -0,0 +1,88 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
---
|
2 |
+
library_name: stable-baselines3
|
3 |
+
tags:
|
4 |
+
- seals/Ant-v1
|
5 |
+
- deep-reinforcement-learning
|
6 |
+
- reinforcement-learning
|
7 |
+
- stable-baselines3
|
8 |
+
model-index:
|
9 |
+
- name: PPO
|
10 |
+
results:
|
11 |
+
- task:
|
12 |
+
type: reinforcement-learning
|
13 |
+
name: reinforcement-learning
|
14 |
+
dataset:
|
15 |
+
name: seals/Ant-v1
|
16 |
+
type: seals/Ant-v1
|
17 |
+
metrics:
|
18 |
+
- type: mean_reward
|
19 |
+
value: 2461.22 +/- 674.80
|
20 |
+
name: mean_reward
|
21 |
+
verified: false
|
22 |
+
---
|
23 |
+
|
24 |
+
# **PPO** Agent playing **seals/Ant-v1**
|
25 |
+
This is a trained model of a **PPO** agent playing **seals/Ant-v1**
|
26 |
+
using the [stable-baselines3 library](https://github.com/DLR-RM/stable-baselines3)
|
27 |
+
and the [RL Zoo](https://github.com/DLR-RM/rl-baselines3-zoo).
|
28 |
+
|
29 |
+
The RL Zoo is a training framework for Stable Baselines3
|
30 |
+
reinforcement learning agents,
|
31 |
+
with hyperparameter optimization and pre-trained agents included.
|
32 |
+
|
33 |
+
## Usage (with SB3 RL Zoo)
|
34 |
+
|
35 |
+
RL Zoo: https://github.com/DLR-RM/rl-baselines3-zoo<br/>
|
36 |
+
SB3: https://github.com/DLR-RM/stable-baselines3<br/>
|
37 |
+
SB3 Contrib: https://github.com/Stable-Baselines-Team/stable-baselines3-contrib
|
38 |
+
|
39 |
+
Install the RL Zoo (with SB3 and SB3-Contrib):
|
40 |
+
```bash
|
41 |
+
pip install rl_zoo3
|
42 |
+
```
|
43 |
+
|
44 |
+
```
|
45 |
+
# Download model and save it into the logs/ folder
|
46 |
+
python -m rl_zoo3.load_from_hub --algo ppo --env seals/Ant-v1 -orga ernestum -f logs/
|
47 |
+
python -m rl_zoo3.enjoy --algo ppo --env seals/Ant-v1 -f logs/
|
48 |
+
```
|
49 |
+
|
50 |
+
If you installed the RL Zoo3 via pip (`pip install rl_zoo3`), from anywhere you can do:
|
51 |
+
```
|
52 |
+
python -m rl_zoo3.load_from_hub --algo ppo --env seals/Ant-v1 -orga ernestum -f logs/
|
53 |
+
python -m rl_zoo3.enjoy --algo ppo --env seals/Ant-v1 -f logs/
|
54 |
+
```
|
55 |
+
|
56 |
+
## Training (with the RL Zoo)
|
57 |
+
```
|
58 |
+
python -m rl_zoo3.train --algo ppo --env seals/Ant-v1 -f logs/
|
59 |
+
# Upload the model and generate video (when possible)
|
60 |
+
python -m rl_zoo3.push_to_hub --algo ppo --env seals/Ant-v1 -f logs/ -orga ernestum
|
61 |
+
```
|
62 |
+
|
63 |
+
## Hyperparameters
|
64 |
+
```python
|
65 |
+
OrderedDict([('batch_size', 16),
|
66 |
+
('clip_range', 0.3),
|
67 |
+
('ent_coef', 3.1441389214159857e-06),
|
68 |
+
('gae_lambda', 0.8),
|
69 |
+
('gamma', 0.995),
|
70 |
+
('learning_rate', 0.00017959211641976886),
|
71 |
+
('max_grad_norm', 0.9),
|
72 |
+
('n_epochs', 10),
|
73 |
+
('n_steps', 2048),
|
74 |
+
('n_timesteps', 1000000.0),
|
75 |
+
('normalize',
|
76 |
+
{'gamma': 0.995, 'norm_obs': False, 'norm_reward': True}),
|
77 |
+
('policy', 'MlpPolicy'),
|
78 |
+
('policy_kwargs',
|
79 |
+
{'activation_fn': <class 'torch.nn.modules.activation.Tanh'>,
|
80 |
+
'features_extractor_class': <class 'imitation.policies.base.NormalizeFeaturesExtractor'>,
|
81 |
+
'net_arch': [{'pi': [64, 64], 'vf': [64, 64]}]}),
|
82 |
+
('vf_coef', 0.4351450387648799),
|
83 |
+
('normalize_kwargs',
|
84 |
+
{'norm_obs': {'gamma': 0.995,
|
85 |
+
'norm_obs': False,
|
86 |
+
'norm_reward': True},
|
87 |
+
'norm_reward': False})])
|
88 |
+
```
|
args.yml
ADDED
@@ -0,0 +1,81 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
!!python/object/apply:collections.OrderedDict
|
2 |
+
- - - algo
|
3 |
+
- ppo
|
4 |
+
- - conf_file
|
5 |
+
- hyperparams/python/ppo.py
|
6 |
+
- - device
|
7 |
+
- cpu
|
8 |
+
- - env
|
9 |
+
- seals/Ant-v1
|
10 |
+
- - env_kwargs
|
11 |
+
- null
|
12 |
+
- - eval_episodes
|
13 |
+
- 0
|
14 |
+
- - eval_freq
|
15 |
+
- 25000
|
16 |
+
- - gym_packages
|
17 |
+
- - seals
|
18 |
+
- - hyperparams
|
19 |
+
- null
|
20 |
+
- - log_folder
|
21 |
+
- gymnasium_models
|
22 |
+
- - log_interval
|
23 |
+
- -1
|
24 |
+
- - max_total_trials
|
25 |
+
- null
|
26 |
+
- - n_eval_envs
|
27 |
+
- 1
|
28 |
+
- - n_evaluations
|
29 |
+
- null
|
30 |
+
- - n_jobs
|
31 |
+
- 1
|
32 |
+
- - n_startup_trials
|
33 |
+
- 10
|
34 |
+
- - n_timesteps
|
35 |
+
- -1
|
36 |
+
- - n_trials
|
37 |
+
- 500
|
38 |
+
- - no_optim_plots
|
39 |
+
- false
|
40 |
+
- - num_threads
|
41 |
+
- 4
|
42 |
+
- - optimization_log_path
|
43 |
+
- null
|
44 |
+
- - optimize_hyperparameters
|
45 |
+
- false
|
46 |
+
- - progress
|
47 |
+
- false
|
48 |
+
- - pruner
|
49 |
+
- median
|
50 |
+
- - sampler
|
51 |
+
- tpe
|
52 |
+
- - save_freq
|
53 |
+
- -1
|
54 |
+
- - save_replay_buffer
|
55 |
+
- false
|
56 |
+
- - seed
|
57 |
+
- 540179516
|
58 |
+
- - storage
|
59 |
+
- null
|
60 |
+
- - study_name
|
61 |
+
- null
|
62 |
+
- - tensorboard_log
|
63 |
+
- ''
|
64 |
+
- - track
|
65 |
+
- false
|
66 |
+
- - trained_agent
|
67 |
+
- ''
|
68 |
+
- - truncate_last_trajectory
|
69 |
+
- true
|
70 |
+
- - uuid
|
71 |
+
- false
|
72 |
+
- - vec_env
|
73 |
+
- dummy
|
74 |
+
- - verbose
|
75 |
+
- 1
|
76 |
+
- - wandb_entity
|
77 |
+
- null
|
78 |
+
- - wandb_project_name
|
79 |
+
- sb3
|
80 |
+
- - wandb_tags
|
81 |
+
- []
|
config.yml
ADDED
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
!!python/object/apply:collections.OrderedDict
|
2 |
+
- - - batch_size
|
3 |
+
- 16
|
4 |
+
- - clip_range
|
5 |
+
- 0.3
|
6 |
+
- - ent_coef
|
7 |
+
- 3.1441389214159857e-06
|
8 |
+
- - gae_lambda
|
9 |
+
- 0.8
|
10 |
+
- - gamma
|
11 |
+
- 0.995
|
12 |
+
- - learning_rate
|
13 |
+
- 0.00017959211641976886
|
14 |
+
- - max_grad_norm
|
15 |
+
- 0.9
|
16 |
+
- - n_epochs
|
17 |
+
- 10
|
18 |
+
- - n_steps
|
19 |
+
- 2048
|
20 |
+
- - n_timesteps
|
21 |
+
- 1000000.0
|
22 |
+
- - normalize
|
23 |
+
- gamma: 0.995
|
24 |
+
norm_obs: false
|
25 |
+
norm_reward: true
|
26 |
+
- - policy
|
27 |
+
- MlpPolicy
|
28 |
+
- - policy_kwargs
|
29 |
+
- activation_fn: !!python/name:torch.nn.modules.activation.Tanh ''
|
30 |
+
features_extractor_class: !!python/name:imitation.policies.base.NormalizeFeaturesExtractor ''
|
31 |
+
net_arch:
|
32 |
+
- pi:
|
33 |
+
- 64
|
34 |
+
- 64
|
35 |
+
vf:
|
36 |
+
- 64
|
37 |
+
- 64
|
38 |
+
- - vf_coef
|
39 |
+
- 0.4351450387648799
|
env_kwargs.yml
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{}
|
ppo-seals-Ant-v1.zip
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:fdb7c256d659b65c4403f9f9a0301ce555d5c120262cae79b8b0399f51d4b8b0
|
3 |
+
size 187043
|
ppo-seals-Ant-v1/_stable_baselines3_version
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
2.1.0
|
ppo-seals-Ant-v1/data
ADDED
@@ -0,0 +1,123 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 0x7f2f1d27d040>",
|
8 |
+
"_get_constructor_parameters": "<function ActorCriticPolicy._get_constructor_parameters at 0x7f2f1d27d0d0>",
|
9 |
+
"reset_noise": "<function ActorCriticPolicy.reset_noise at 0x7f2f1d27d160>",
|
10 |
+
"_build_mlp_extractor": "<function ActorCriticPolicy._build_mlp_extractor at 0x7f2f1d27d1f0>",
|
11 |
+
"_build": "<function ActorCriticPolicy._build at 0x7f2f1d27d280>",
|
12 |
+
"forward": "<function ActorCriticPolicy.forward at 0x7f2f1d27d310>",
|
13 |
+
"extract_features": "<function ActorCriticPolicy.extract_features at 0x7f2f1d27d3a0>",
|
14 |
+
"_get_action_dist_from_latent": "<function ActorCriticPolicy._get_action_dist_from_latent at 0x7f2f1d27d430>",
|
15 |
+
"_predict": "<function ActorCriticPolicy._predict at 0x7f2f1d27d4c0>",
|
16 |
+
"evaluate_actions": "<function ActorCriticPolicy.evaluate_actions at 0x7f2f1d27d550>",
|
17 |
+
"get_distribution": "<function ActorCriticPolicy.get_distribution at 0x7f2f1d27d5e0>",
|
18 |
+
"predict_values": "<function ActorCriticPolicy.predict_values at 0x7f2f1d27d670>",
|
19 |
+
"__abstractmethods__": "frozenset()",
|
20 |
+
"_abc_impl": "<_abc_data object at 0x7f2f1d259bd0>"
|
21 |
+
},
|
22 |
+
"verbose": 1,
|
23 |
+
"policy_kwargs": {
|
24 |
+
":type:": "<class 'dict'>",
|
25 |
+
":serialized:": "gAWVuQAAAAAAAAB9lCiMDWFjdGl2YXRpb25fZm6UjBt0b3JjaC5ubi5tb2R1bGVzLmFjdGl2YXRpb26UjARUYW5olJOUjAhuZXRfYXJjaJR9lCiMAnBplF2UKEtAS0BljAJ2ZpRdlChLQEtAZXWMGGZlYXR1cmVzX2V4dHJhY3Rvcl9jbGFzc5SMF2ltaXRhdGlvbi5wb2xpY2llcy5iYXNllIwaTm9ybWFsaXplRmVhdHVyZXNFeHRyYWN0b3KUk5R1Lg==",
|
26 |
+
"activation_fn": "<class 'torch.nn.modules.activation.Tanh'>",
|
27 |
+
"net_arch": {
|
28 |
+
"pi": [
|
29 |
+
64,
|
30 |
+
64
|
31 |
+
],
|
32 |
+
"vf": [
|
33 |
+
64,
|
34 |
+
64
|
35 |
+
]
|
36 |
+
},
|
37 |
+
"features_extractor_class": "<class 'imitation.policies.base.NormalizeFeaturesExtractor'>"
|
38 |
+
},
|
39 |
+
"num_timesteps": 1001472,
|
40 |
+
"_total_timesteps": 1000000,
|
41 |
+
"_num_timesteps_at_start": 0,
|
42 |
+
"seed": 0,
|
43 |
+
"action_noise": null,
|
44 |
+
"start_time": 1694771152613086550,
|
45 |
+
"learning_rate": {
|
46 |
+
":type:": "<class 'function'>",
|
47 |
+
":serialized:": "gAWVlwIAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLAUsTQwSIAFMAlE6FlCmMAV+UhZSMZS9ob21lL21heGltaWxpYW4vcmwtYmFzZWxpbmVzMy16b28vdmVudi9saWIvcHl0aG9uMy44L3NpdGUtcGFja2FnZXMvc3RhYmxlX2Jhc2VsaW5lczMvY29tbW9uL3V0aWxzLnB5lIwEZnVuY5RLg0MCAAGUjAN2YWyUhZQpdJRSlH2UKIwLX19wYWNrYWdlX1+UjBhzdGFibGVfYmFzZWxpbmVzMy5jb21tb26UjAhfX25hbWVfX5SMHnN0YWJsZV9iYXNlbGluZXMzLmNvbW1vbi51dGlsc5SMCF9fZmlsZV9flGgMdU5OaACMEF9tYWtlX2VtcHR5X2NlbGyUk5QpUpSFlHSUUpSMHGNsb3VkcGlja2xlLmNsb3VkcGlja2xlX2Zhc3SUjBJfZnVuY3Rpb25fc2V0c3RhdGWUk5RoHn2UfZQoaBZoDYwMX19xdWFsbmFtZV9flIwZY29uc3RhbnRfZm4uPGxvY2Fscz4uZnVuY5SMD19fYW5ub3RhdGlvbnNfX5R9lIwOX19rd2RlZmF1bHRzX1+UTowMX19kZWZhdWx0c19flE6MCl9fbW9kdWxlX1+UaBeMB19fZG9jX1+UTowLX19jbG9zdXJlX1+UaACMCl9tYWtlX2NlbGyUk5RHPyeKHIiFV/6FlFKUhZSMF19jbG91ZHBpY2tsZV9zdWJtb2R1bGVzlF2UjAtfX2dsb2JhbHNfX5R9lHWGlIZSMC4="
|
48 |
+
},
|
49 |
+
"tensorboard_log": null,
|
50 |
+
"_last_obs": null,
|
51 |
+
"_last_episode_starts": {
|
52 |
+
":type:": "<class 'numpy.ndarray'>",
|
53 |
+
":serialized:": "gAWVdAAAAAAAAACMEm51bXB5LmNvcmUubnVtZXJpY5SMC19mcm9tYnVmZmVylJOUKJYBAAAAAAAAAACUjAVudW1weZSMBWR0eXBllJOUjAJiMZSJiIeUUpQoSwOMAXyUTk5OSv////9K/////0sAdJRiSwGFlIwBQ5R0lFKULg=="
|
54 |
+
},
|
55 |
+
"_last_original_obs": {
|
56 |
+
":type:": "<class 'numpy.ndarray'>",
|
57 |
+
":serialized:": "gAWVXQEAAAAAAACMEm51bXB5LmNvcmUubnVtZXJpY5SMC19mcm9tYnVmZmVylJOUKJboAAAAAAAAAMhF6NK4PJy/kCYWS7gRpb+T7g30/ZHqP7/vy6bX1O8/mNPHsy7BsD8YO6dh0mlzP+LZQH2EKbS/B4jtdtLztb8AlJRLTM+Uv7JXQL1WvrY/dwZJiZ44qr+AdMTiBOqzv0T+bTcgU7a/0AvgedbpgT/gQL/ZoKmev7LR4l8OYLo/30tBmUrLuT9hk6rYDYKnv+xVDRUsYao/uK6kJH4DtL/9QltLzTjAvxQSVuSk7Kc/bUVeEzFtur+fwQ8KqBmTv6UbSHP3zqu/k7WI5nsagD/7MeLWEK+gP4gME78uLs+/rnQ78tSnoz+UjAVudW1weZSMBWR0eXBllJOUjAJmOJSJiIeUUpQoSwOMATyUTk5OSv////9K/////0sAdJRiSwFLHYaUjAFDlHSUUpQu"
|
58 |
+
},
|
59 |
+
"_episode_num": 0,
|
60 |
+
"use_sde": false,
|
61 |
+
"sde_sample_freq": -1,
|
62 |
+
"_current_progress_remaining": -0.0014719999999999178,
|
63 |
+
"_stats_window_size": 100,
|
64 |
+
"ep_info_buffer": {
|
65 |
+
":type:": "<class 'collections.deque'>",
|
66 |
+
":serialized:": "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"
|
67 |
+
},
|
68 |
+
"ep_success_buffer": {
|
69 |
+
":type:": "<class 'collections.deque'>",
|
70 |
+
":serialized:": "gAWVIAAAAAAAAACMC2NvbGxlY3Rpb25zlIwFZGVxdWWUk5QpS2SGlFKULg=="
|
71 |
+
},
|
72 |
+
"_n_updates": 4890,
|
73 |
+
"observation_space": {
|
74 |
+
":type:": "<class 'gymnasium.spaces.box.Box'>",
|
75 |
+
":serialized:": "gAWVgwMAAAAAAACMFGd5bW5hc2l1bS5zcGFjZXMuYm94lIwDQm94lJOUKYGUfZQojAVkdHlwZZSMBW51bXB5lGgFk5SMAmY4lImIh5RSlChLA4wBPJROTk5K/////0r/////SwB0lGKMDWJvdW5kZWRfYmVsb3eUjBJudW1weS5jb3JlLm51bWVyaWOUjAtfZnJvbWJ1ZmZlcpSTlCiWHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJRoB4wCYjGUiYiHlFKUKEsDjAF8lE5OTkr/////Sv////9LAHSUYksdhZSMAUOUdJRSlIwNYm91bmRlZF9hYm92ZZRoECiWHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJRoFEsdhZRoGHSUUpSMBl9zaGFwZZRLHYWUjANsb3eUaBAolugAAAAAAAAAAAAAAAAA8P8AAAAAAADw/wAAAAAAAPD/AAAAAAAA8P8AAAAAAADw/wAAAAAAAPD/AAAAAAAA8P8AAAAAAADw/wAAAAAAAPD/AAAAAAAA8P8AAAAAAADw/wAAAAAAAPD/AAAAAAAA8P8AAAAAAADw/wAAAAAAAPD/AAAAAAAA8P8AAAAAAADw/wAAAAAAAPD/AAAAAAAA8P8AAAAAAADw/wAAAAAAAPD/AAAAAAAA8P8AAAAAAADw/wAAAAAAAPD/AAAAAAAA8P8AAAAAAADw/wAAAAAAAPD/AAAAAAAA8P8AAAAAAADw/5RoCksdhZRoGHSUUpSMBGhpZ2iUaBAolugAAAAAAAAAAAAAAAAA8H8AAAAAAADwfwAAAAAAAPB/AAAAAAAA8H8AAAAAAADwfwAAAAAAAPB/AAAAAAAA8H8AAAAAAADwfwAAAAAAAPB/AAAAAAAA8H8AAAAAAADwfwAAAAAAAPB/AAAAAAAA8H8AAAAAAADwfwAAAAAAAPB/AAAAAAAA8H8AAAAAAADwfwAAAAAAAPB/AAAAAAAA8H8AAAAAAADwfwAAAAAAAPB/AAAAAAAA8H8AAAAAAADwfwAAAAAAAPB/AAAAAAAA8H8AAAAAAADwfwAAAAAAAPB/AAAAAAAA8H8AAAAAAADwf5RoCksdhZRoGHSUUpSMCGxvd19yZXBylIwELWluZpSMCWhpZ2hfcmVwcpSMA2luZpSMCl9ucF9yYW5kb22UTnViLg==",
|
76 |
+
"dtype": "float64",
|
77 |
+
"bounded_below": "[False False False False False False False False False False False False\n False False False False False False False False False False False False\n False False False False False]",
|
78 |
+
"bounded_above": "[False False False False False False False False False False False False\n False False False False False False False False False False False False\n False False False False False]",
|
79 |
+
"_shape": [
|
80 |
+
29
|
81 |
+
],
|
82 |
+
"low": "[-inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf\n -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf -inf\n -inf]",
|
83 |
+
"high": "[inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf inf\n inf inf inf inf inf inf inf inf inf inf inf]",
|
84 |
+
"low_repr": "-inf",
|
85 |
+
"high_repr": "inf",
|
86 |
+
"_np_random": null
|
87 |
+
},
|
88 |
+
"action_space": {
|
89 |
+
":type:": "<class 'gymnasium.spaces.box.Box'>",
|
90 |
+
":serialized:": "gAWVjAIAAAAAAACMFGd5bW5hc2l1bS5zcGFjZXMuYm94lIwDQm94lJOUKYGUfZQojAVkdHlwZZSMBW51bXB5lGgFk5SMAmY0lImIh5RSlChLA4wBPJROTk5K/////0r/////SwB0lGKMDWJvdW5kZWRfYmVsb3eUjBJudW1weS5jb3JlLm51bWVyaWOUjAtfZnJvbWJ1ZmZlcpSTlCiWCAAAAAAAAAABAQEBAQEBAZRoB4wCYjGUiYiHlFKUKEsDjAF8lE5OTkr/////Sv////9LAHSUYksIhZSMAUOUdJRSlIwNYm91bmRlZF9hYm92ZZRoECiWCAAAAAAAAAABAQEBAQEBAZRoFEsIhZRoGHSUUpSMBl9zaGFwZZRLCIWUjANsb3eUaBAoliAAAAAAAAAAAACAvwAAgL8AAIC/AACAvwAAgL8AAIC/AACAvwAAgL+UaApLCIWUaBh0lFKUjARoaWdolGgQKJYgAAAAAAAAAAAAgD8AAIA/AACAPwAAgD8AAIA/AACAPwAAgD8AAIA/lGgKSwiFlGgYdJRSlIwIbG93X3JlcHKUjAQtMS4wlIwJaGlnaF9yZXBylIwDMS4wlIwKX25wX3JhbmRvbZSMFG51bXB5LnJhbmRvbS5fcGlja2xllIwQX19nZW5lcmF0b3JfY3RvcpSTlIwFUENHNjSUaDGMFF9fYml0X2dlbmVyYXRvcl9jdG9ylJOUhpRSlH2UKIwNYml0X2dlbmVyYXRvcpSMBVBDRzY0lIwFc3RhdGWUfZQoaDyKEONhlaa3XlgJLUWWWTS1oRqMA2luY5SKEKlzeES8M4FYghr3OtvajUF1jApoYXNfdWludDMylEsAjAh1aW50ZWdlcpRLAHVidWIu",
|
91 |
+
"dtype": "float32",
|
92 |
+
"bounded_below": "[ True True True True True True True True]",
|
93 |
+
"bounded_above": "[ True True True True True True True True]",
|
94 |
+
"_shape": [
|
95 |
+
8
|
96 |
+
],
|
97 |
+
"low": "[-1. -1. -1. -1. -1. -1. -1. -1.]",
|
98 |
+
"high": "[1. 1. 1. 1. 1. 1. 1. 1.]",
|
99 |
+
"low_repr": "-1.0",
|
100 |
+
"high_repr": "1.0",
|
101 |
+
"_np_random": "Generator(PCG64)"
|
102 |
+
},
|
103 |
+
"n_envs": 1,
|
104 |
+
"n_steps": 2048,
|
105 |
+
"gamma": 0.995,
|
106 |
+
"gae_lambda": 0.8,
|
107 |
+
"ent_coef": 3.1441389214159857e-06,
|
108 |
+
"vf_coef": 0.4351450387648799,
|
109 |
+
"max_grad_norm": 0.9,
|
110 |
+
"batch_size": 16,
|
111 |
+
"n_epochs": 10,
|
112 |
+
"clip_range": {
|
113 |
+
":type:": "<class 'function'>",
|
114 |
+
":serialized:": "gAWVlwIAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLAUsTQwSIAFMAlE6FlCmMAV+UhZSMZS9ob21lL21heGltaWxpYW4vcmwtYmFzZWxpbmVzMy16b28vdmVudi9saWIvcHl0aG9uMy44L3NpdGUtcGFja2FnZXMvc3RhYmxlX2Jhc2VsaW5lczMvY29tbW9uL3V0aWxzLnB5lIwEZnVuY5RLg0MCAAGUjAN2YWyUhZQpdJRSlH2UKIwLX19wYWNrYWdlX1+UjBhzdGFibGVfYmFzZWxpbmVzMy5jb21tb26UjAhfX25hbWVfX5SMHnN0YWJsZV9iYXNlbGluZXMzLmNvbW1vbi51dGlsc5SMCF9fZmlsZV9flGgMdU5OaACMEF9tYWtlX2VtcHR5X2NlbGyUk5QpUpSFlHSUUpSMHGNsb3VkcGlja2xlLmNsb3VkcGlja2xlX2Zhc3SUjBJfZnVuY3Rpb25fc2V0c3RhdGWUk5RoHn2UfZQoaBZoDYwMX19xdWFsbmFtZV9flIwZY29uc3RhbnRfZm4uPGxvY2Fscz4uZnVuY5SMD19fYW5ub3RhdGlvbnNfX5R9lIwOX19rd2RlZmF1bHRzX1+UTowMX19kZWZhdWx0c19flE6MCl9fbW9kdWxlX1+UaBeMB19fZG9jX1+UTowLX19jbG9zdXJlX1+UaACMCl9tYWtlX2NlbGyUk5RHP9MzMzMzMzOFlFKUhZSMF19jbG91ZHBpY2tsZV9zdWJtb2R1bGVzlF2UjAtfX2dsb2JhbHNfX5R9lHWGlIZSMC4="
|
115 |
+
},
|
116 |
+
"clip_range_vf": null,
|
117 |
+
"normalize_advantage": true,
|
118 |
+
"target_kl": null,
|
119 |
+
"lr_schedule": {
|
120 |
+
":type:": "<class 'function'>",
|
121 |
+
":serialized:": "gAWVlwIAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLAUsTQwSIAFMAlE6FlCmMAV+UhZSMZS9ob21lL21heGltaWxpYW4vcmwtYmFzZWxpbmVzMy16b28vdmVudi9saWIvcHl0aG9uMy44L3NpdGUtcGFja2FnZXMvc3RhYmxlX2Jhc2VsaW5lczMvY29tbW9uL3V0aWxzLnB5lIwEZnVuY5RLg0MCAAGUjAN2YWyUhZQpdJRSlH2UKIwLX19wYWNrYWdlX1+UjBhzdGFibGVfYmFzZWxpbmVzMy5jb21tb26UjAhfX25hbWVfX5SMHnN0YWJsZV9iYXNlbGluZXMzLmNvbW1vbi51dGlsc5SMCF9fZmlsZV9flGgMdU5OaACMEF9tYWtlX2VtcHR5X2NlbGyUk5QpUpSFlHSUUpSMHGNsb3VkcGlja2xlLmNsb3VkcGlja2xlX2Zhc3SUjBJfZnVuY3Rpb25fc2V0c3RhdGWUk5RoHn2UfZQoaBZoDYwMX19xdWFsbmFtZV9flIwZY29uc3RhbnRfZm4uPGxvY2Fscz4uZnVuY5SMD19fYW5ub3RhdGlvbnNfX5R9lIwOX19rd2RlZmF1bHRzX1+UTowMX19kZWZhdWx0c19flE6MCl9fbW9kdWxlX1+UaBeMB19fZG9jX1+UTowLX19jbG9zdXJlX1+UaACMCl9tYWtlX2NlbGyUk5RHPyeKHIiFV/6FlFKUhZSMF19jbG91ZHBpY2tsZV9zdWJtb2R1bGVzlF2UjAtfX2dsb2JhbHNfX5R9lHWGlIZSMC4="
|
122 |
+
}
|
123 |
+
}
|
ppo-seals-Ant-v1/policy.optimizer.pth
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d8e77fc689c281acd086c21cff0648e1c0667b5d4f3362633b5b9a3424164ad2
|
3 |
+
size 111856
|
ppo-seals-Ant-v1/policy.pth
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:01e89b5b04862167f84bdd899f664ea5d8aec65d4604756b3d5bb084a7877d52
|
3 |
+
size 57077
|
ppo-seals-Ant-v1/pytorch_variables.pth
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:d030ad8db708280fcae77d87e973102039acd23a11bdecc3db8eb6c0ac940ee1
|
3 |
+
size 431
|
ppo-seals-Ant-v1/system_info.txt
ADDED
@@ -0,0 +1,9 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
- OS: Linux-5.4.0-156-generic-x86_64-with-glibc2.29 # 173-Ubuntu SMP Tue Jul 11 07:25:22 UTC 2023
|
2 |
+
- Python: 3.8.10
|
3 |
+
- Stable-Baselines3: 2.1.0
|
4 |
+
- PyTorch: 2.0.1+cu117
|
5 |
+
- GPU Enabled: False
|
6 |
+
- Numpy: 1.24.4
|
7 |
+
- Cloudpickle: 2.2.1
|
8 |
+
- Gymnasium: 0.29.1
|
9 |
+
- OpenAI Gym: 0.21.0
|
results.json
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"mean_reward": 2461.2202511, "std_reward": 674.8025948179924, "is_deterministic": true, "n_eval_episodes": 10, "eval_datetime": "2023-09-15T13:50:38.234923"}
|
train_eval_metrics.zip
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:0727ea96b8c7131a55c58c5a4e8df504f4b31bc89299b2b4bc51224ea5043632
|
3 |
+
size 30489
|
vec_normalize.pkl
ADDED
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
1 |
+
version https://git-lfs.github.com/spec/v1
|
2 |
+
oid sha256:da1148edcbbbfe0bb7b10781159b22198513d93f40d14ee700f6db7986fa8af6
|
3 |
+
size 2274
|