File size: 13,498 Bytes
9c2a8df
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
{
    "policy_class": {
        ":type:": "<class 'abc.ABCMeta'>",
        ":serialized:": "gAWVOwAAAAAAAACMIXN0YWJsZV9iYXNlbGluZXMzLmNvbW1vbi5wb2xpY2llc5SMEUFjdG9yQ3JpdGljUG9saWN5lJOULg==",
        "__module__": "stable_baselines3.common.policies",
        "__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    ",
        "__init__": "<function ActorCriticPolicy.__init__ at 0x7f958defed40>",
        "_get_constructor_parameters": "<function ActorCriticPolicy._get_constructor_parameters at 0x7f958defedd0>",
        "reset_noise": "<function ActorCriticPolicy.reset_noise at 0x7f958defee60>",
        "_build_mlp_extractor": "<function ActorCriticPolicy._build_mlp_extractor at 0x7f958defeef0>",
        "_build": "<function ActorCriticPolicy._build at 0x7f958defef80>",
        "forward": "<function ActorCriticPolicy.forward at 0x7f958deff010>",
        "extract_features": "<function ActorCriticPolicy.extract_features at 0x7f958deff0a0>",
        "_get_action_dist_from_latent": "<function ActorCriticPolicy._get_action_dist_from_latent at 0x7f958deff130>",
        "_predict": "<function ActorCriticPolicy._predict at 0x7f958deff1c0>",
        "evaluate_actions": "<function ActorCriticPolicy.evaluate_actions at 0x7f958deff250>",
        "get_distribution": "<function ActorCriticPolicy.get_distribution at 0x7f958deff2e0>",
        "predict_values": "<function ActorCriticPolicy.predict_values at 0x7f958deff370>",
        "__abstractmethods__": "frozenset()",
        "_abc_impl": "<_abc._abc_data object at 0x7f958defa300>"
    },
    "verbose": 1,
    "policy_kwargs": {},
    "num_timesteps": 1000448,
    "_total_timesteps": 1000000,
    "_num_timesteps_at_start": 0,
    "seed": null,
    "action_noise": null,
    "start_time": 1693798153363237430,
    "learning_rate": 0.0003,
    "tensorboard_log": null,
    "_last_obs": {
        ":type:": "<class 'numpy.ndarray'>",
        ":serialized:": "gAWVlQAAAAAAAACMEm51bXB5LmNvcmUubnVtZXJpY5SMC19mcm9tYnVmZmVylJOUKJYgAAAAAAAAADPUjr0U3Ii60qHMOldkEzagCxW6MCXsuQAAAAAAAIA/lIwFbnVtcHmUjAVkdHlwZZSTlIwCZjSUiYiHlFKUKEsDjAE8lE5OTkr/////Sv////9LAHSUYksBSwiGlIwBQ5R0lFKULg=="
    },
    "_last_episode_starts": {
        ":type:": "<class 'numpy.ndarray'>",
        ":serialized:": "gAWVdAAAAAAAAACMEm51bXB5LmNvcmUubnVtZXJpY5SMC19mcm9tYnVmZmVylJOUKJYBAAAAAAAAAACUjAVudW1weZSMBWR0eXBllJOUjAJiMZSJiIeUUpQoSwOMAXyUTk5OSv////9K/////0sAdJRiSwGFlIwBQ5R0lFKULg=="
    },
    "_last_original_obs": null,
    "_episode_num": 0,
    "use_sde": false,
    "sde_sample_freq": -1,
    "_current_progress_remaining": -0.00044800000000000395,
    "_stats_window_size": 100,
    "ep_info_buffer": {
        ":type:": "<class 'collections.deque'>",
        ":serialized:": "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"
    },
    "ep_success_buffer": {
        ":type:": "<class 'collections.deque'>",
        ":serialized:": "gAWVIAAAAAAAAACMC2NvbGxlY3Rpb25zlIwFZGVxdWWUk5QpS2SGlFKULg=="
    },
    "_n_updates": 3908,
    "observation_space": {
        ":type:": "<class 'gymnasium.spaces.box.Box'>",
        ":serialized:": "gAWVdgIAAAAAAACMFGd5bW5hc2l1bS5zcGFjZXMuYm94lIwDQm94lJOUKYGUfZQojAVkdHlwZZSMBW51bXB5lIwFZHR5cGWUk5SMAmY0lImIh5RSlChLA4wBPJROTk5K/////0r/////SwB0lGKMDWJvdW5kZWRfYmVsb3eUjBJudW1weS5jb3JlLm51bWVyaWOUjAtfZnJvbWJ1ZmZlcpSTlCiWCAAAAAAAAAABAQEBAQEBAZRoCIwCYjGUiYiHlFKUKEsDjAF8lE5OTkr/////Sv////9LAHSUYksIhZSMAUOUdJRSlIwNYm91bmRlZF9hYm92ZZRoESiWCAAAAAAAAAABAQEBAQEBAZRoFUsIhZRoGXSUUpSMBl9zaGFwZZRLCIWUjANsb3eUaBEoliAAAAAAAAAAAAC0wgAAtMIAAKDAAACgwNsPScAAAKDAAAAAgAAAAICUaAtLCIWUaBl0lFKUjARoaWdolGgRKJYgAAAAAAAAAAAAtEIAALRCAACgQAAAoEDbD0lAAACgQAAAgD8AAIA/lGgLSwiFlGgZdJRSlIwIbG93X3JlcHKUjFtbLTkwLiAgICAgICAgLTkwLiAgICAgICAgIC01LiAgICAgICAgIC01LiAgICAgICAgIC0zLjE0MTU5MjcgIC01LgogIC0wLiAgICAgICAgIC0wLiAgICAgICBdlIwJaGlnaF9yZXBylIxTWzkwLiAgICAgICAgOTAuICAgICAgICAgNS4gICAgICAgICA1LiAgICAgICAgIDMuMTQxNTkyNyAgNS4KICAxLiAgICAgICAgIDEuICAgICAgIF2UjApfbnBfcmFuZG9tlE51Yi4=",
        "dtype": "float32",
        "bounded_below": "[ True  True  True  True  True  True  True  True]",
        "bounded_above": "[ True  True  True  True  True  True  True  True]",
        "_shape": [
            8
        ],
        "low": "[-90.        -90.         -5.         -5.         -3.1415927  -5.\n  -0.         -0.       ]",
        "high": "[90.        90.         5.         5.         3.1415927  5.\n  1.         1.       ]",
        "low_repr": "[-90.        -90.         -5.         -5.         -3.1415927  -5.\n  -0.         -0.       ]",
        "high_repr": "[90.        90.         5.         5.         3.1415927  5.\n  1.         1.       ]",
        "_np_random": null
    },
    "action_space": {
        ":type:": "<class 'gymnasium.spaces.discrete.Discrete'>",
        ":serialized:": "gAWV2wAAAAAAAACMGWd5bW5hc2l1bS5zcGFjZXMuZGlzY3JldGWUjAhEaXNjcmV0ZZSTlCmBlH2UKIwBbpSMFW51bXB5LmNvcmUubXVsdGlhcnJheZSMBnNjYWxhcpSTlIwFbnVtcHmUjAVkdHlwZZSTlIwCaTiUiYiHlFKUKEsDjAE8lE5OTkr/////Sv////9LAHSUYkMIBAAAAAAAAACUhpRSlIwFc3RhcnSUaAhoDkMIAAAAAAAAAACUhpRSlIwGX3NoYXBllCmMBWR0eXBllGgOjApfbnBfcmFuZG9tlE51Yi4=",
        "n": "4",
        "start": "0",
        "_shape": [],
        "dtype": "int64",
        "_np_random": null
    },
    "n_envs": 1,
    "n_steps": 1024,
    "gamma": 0.999,
    "gae_lambda": 0.98,
    "ent_coef": 0.01,
    "vf_coef": 0.5,
    "max_grad_norm": 0.5,
    "batch_size": 64,
    "n_epochs": 4,
    "clip_range": {
        ":type:": "<class 'function'>",
        ":serialized:": "gAWV4QIAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLAUsTQwSIAFMAlE6FlCmMAV+UhZSMVy9vcHQveGN0Yy9jb25kYS9lbnZzL2RybC9saWIvcHl0aG9uMy4xMC9zaXRlLXBhY2thZ2VzL3N0YWJsZV9iYXNlbGluZXMzL2NvbW1vbi91dGlscy5weZSMBGZ1bmOUS4RDAgQBlIwDdmFslIWUKXSUUpR9lCiMC19fcGFja2FnZV9flIwYc3RhYmxlX2Jhc2VsaW5lczMuY29tbW9ulIwIX19uYW1lX1+UjB5zdGFibGVfYmFzZWxpbmVzMy5jb21tb24udXRpbHOUjAhfX2ZpbGVfX5SMVy9vcHQveGN0Yy9jb25kYS9lbnZzL2RybC9saWIvcHl0aG9uMy4xMC9zaXRlLXBhY2thZ2VzL3N0YWJsZV9iYXNlbGluZXMzL2NvbW1vbi91dGlscy5weZR1Tk5oAIwQX21ha2VfZW1wdHlfY2VsbJSTlClSlIWUdJRSlIwcY2xvdWRwaWNrbGUuY2xvdWRwaWNrbGVfZmFzdJSMEl9mdW5jdGlvbl9zZXRzdGF0ZZSTlGgffZR9lChoFmgNjAxfX3F1YWxuYW1lX1+UjBljb25zdGFudF9mbi48bG9jYWxzPi5mdW5jlIwPX19hbm5vdGF0aW9uc19flH2UjA5fX2t3ZGVmYXVsdHNfX5ROjAxfX2RlZmF1bHRzX1+UTowKX19tb2R1bGVfX5RoF4wHX19kb2NfX5ROjAtfX2Nsb3N1cmVfX5RoAIwKX21ha2VfY2VsbJSTlEc/yZmZmZmZmoWUUpSFlIwXX2Nsb3VkcGlja2xlX3N1Ym1vZHVsZXOUXZSMC19fZ2xvYmFsc19flH2UdYaUhlIwLg=="
    },
    "clip_range_vf": null,
    "normalize_advantage": true,
    "target_kl": null,
    "lr_schedule": {
        ":type:": "<class 'function'>",
        ":serialized:": "gAWV4QIAAAAAAACMF2Nsb3VkcGlja2xlLmNsb3VkcGlja2xllIwOX21ha2VfZnVuY3Rpb26Uk5QoaACMDV9idWlsdGluX3R5cGWUk5SMCENvZGVUeXBllIWUUpQoSwFLAEsASwFLAUsTQwSIAFMAlE6FlCmMAV+UhZSMVy9vcHQveGN0Yy9jb25kYS9lbnZzL2RybC9saWIvcHl0aG9uMy4xMC9zaXRlLXBhY2thZ2VzL3N0YWJsZV9iYXNlbGluZXMzL2NvbW1vbi91dGlscy5weZSMBGZ1bmOUS4RDAgQBlIwDdmFslIWUKXSUUpR9lCiMC19fcGFja2FnZV9flIwYc3RhYmxlX2Jhc2VsaW5lczMuY29tbW9ulIwIX19uYW1lX1+UjB5zdGFibGVfYmFzZWxpbmVzMy5jb21tb24udXRpbHOUjAhfX2ZpbGVfX5SMVy9vcHQveGN0Yy9jb25kYS9lbnZzL2RybC9saWIvcHl0aG9uMy4xMC9zaXRlLXBhY2thZ2VzL3N0YWJsZV9iYXNlbGluZXMzL2NvbW1vbi91dGlscy5weZR1Tk5oAIwQX21ha2VfZW1wdHlfY2VsbJSTlClSlIWUdJRSlIwcY2xvdWRwaWNrbGUuY2xvdWRwaWNrbGVfZmFzdJSMEl9mdW5jdGlvbl9zZXRzdGF0ZZSTlGgffZR9lChoFmgNjAxfX3F1YWxuYW1lX1+UjBljb25zdGFudF9mbi48bG9jYWxzPi5mdW5jlIwPX19hbm5vdGF0aW9uc19flH2UjA5fX2t3ZGVmYXVsdHNfX5ROjAxfX2RlZmF1bHRzX1+UTowKX19tb2R1bGVfX5RoF4wHX19kb2NfX5ROjAtfX2Nsb3N1cmVfX5RoAIwKX21ha2VfY2VsbJSTlEc/M6kqMFUyYYWUUpSFlIwXX2Nsb3VkcGlja2xlX3N1Ym1vZHVsZXOUXZSMC19fZ2xvYmFsc19flH2UdYaUhlIwLg=="
    }
}