From 6f933f5f5603231e310288cda3bf2e2992dc5dde Mon Sep 17 00:00:00 2001 From: Ju T <53004817+JulienT01@users.noreply.github.com> Date: Wed, 24 Apr 2024 15:25:38 +0200 Subject: [PATCH] Copy of UCBVI from rlberry_research to rlberry_scool and misc changes to doc (#451) * move UCBVI from rlberry_research to rlberry_scool * update script to test markdown * add toggleable menu * update user guide to NOT use rlberry_research * remove use of IPython * update tuto deepRL * update tuto deepRL * update contributing guideline (agent are not in rlberry_main anymore) * add doc to monthly test --------- Co-authored-by: Timothee Mathieu --- .../_experimentManager_page_CartPole.mp4 | Bin 17019 -> 35070 bytes docs/basics/DeepRLTutorial/TutorialDeepRL.md | 452 +++--------------- docs/basics/DeepRLTutorial/output_10_3.png | Bin 17372 -> 17967 bytes docs/basics/DeepRLTutorial/output_5_3.png | Bin 25489 -> 38167 bytes docs/basics/DeepRLTutorial/output_6_3.png | Bin 14470 -> 13138 bytes docs/basics/DeepRLTutorial/output_9_3.png | Bin 77582 -> 56641 bytes docs/basics/comparison.md | 36 +- docs/basics/quick_start_rl/quickstart.md | 11 +- docs/basics/userguide/adastop.md | 2 +- docs/basics/userguide/agent.md | 6 +- docs/basics/userguide/environment.md | 4 +- .../basics/userguide/expManager_multieval.png | Bin 18436 -> 17938 bytes docs/basics/userguide/experimentManager.md | 229 +++++---- docs/basics/userguide/external_lib.md | 134 ++++++ docs/basics/userguide/logging.md | 57 ++- docs/basics/userguide/save_load.md | 8 +- docs/basics/userguide/seeding.md | 16 +- docs/beginner_dev_guide.md | 2 +- docs/changelog.rst | 6 +- docs/contributing.md | 71 --- docs/external.rst | 16 - docs/other/using_gym.rst | 18 - docs/other/using_stable_baselines.rst | 120 ----- docs/templates/nice_toc.md | 127 +++++ docs/themes/scikit-learn-fork/layout.html | 2 +- .../scikit-learn-fork/static/css/theme.css | 36 ++ .../static/js/vendor/jquery-3.6.3.slim.min.js | 2 + docs/themes/scikit-learn-fork/toc.css | 37 ++ docs/user_guide.md | 50 +- examples/demo_agents/video_plot_vi.py | 2 +- examples/plot_writer_wrapper.py | 4 +- rlberry/envs/tests/test_env_seeding.py | 4 +- rlberry/manager/experiment_manager.py | 6 +- rlberry/manager/tests/test_plot.py | 2 +- rlberry/tests/test_agents_base.py | 2 +- rlberry/tests/test_envs.py | 2 +- rlberry/utils/check_agent.py | 6 +- rlberry/utils/tests/test_check.py | 2 +- .../wrappers/tests/test_wrapper_seeding.py | 4 +- rlberry/wrappers/tests/test_writer_utils.py | 4 +- .../apptainer_for_tests/monthly_test_base.sh | 14 +- .../rlberry_apptainer_base.def | 63 ++- 42 files changed, 738 insertions(+), 819 deletions(-) create mode 100644 docs/basics/userguide/external_lib.md delete mode 100644 docs/external.rst delete mode 100644 docs/other/using_gym.rst delete mode 100644 docs/other/using_stable_baselines.rst create mode 100644 docs/templates/nice_toc.md create mode 100644 docs/themes/scikit-learn-fork/static/js/vendor/jquery-3.6.3.slim.min.js create mode 100644 docs/themes/scikit-learn-fork/toc.css diff --git a/docs/_video/user_guide_video/_experimentManager_page_CartPole.mp4 b/docs/_video/user_guide_video/_experimentManager_page_CartPole.mp4 index c9ae206f82222ba64741e16b816028d90b81d42b..18c7616621981f8e790602062ef30a350c93d2b4 100644 GIT binary patch literal 35070 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 literal 17019 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 Ugu*V{1vyE|2#LuGiHeB)e``ha9smFU diff --git a/docs/basics/DeepRLTutorial/TutorialDeepRL.md b/docs/basics/DeepRLTutorial/TutorialDeepRL.md index aae3033e5..939e11447 100644 --- a/docs/basics/DeepRLTutorial/TutorialDeepRL.md +++ b/docs/basics/DeepRLTutorial/TutorialDeepRL.md @@ -12,8 +12,8 @@ Imports ```python from rlberry.envs import gym_make from rlberry.manager import plot_writer_data, ExperimentManager, evaluate_agents -from rlberry_research.agents.torch import A2CAgent -from rlberry_research.agents.torch.utils.training import model_factory_from_env +from rlberry.agents.stable_baselines import StableBaselinesAgent +from stable_baselines3 import PPO ``` Reminder of the RL setting @@ -48,9 +48,9 @@ In this tutorial we are going to use the [Gymnasium library (previously OpenAI's Gym)](https://gymnasium.farama.org/api/env/). This library provides a large number of environments to test RL algorithm. -We will focus only on the **CartPole-v1** environment, although we -recommend experimenting with other environments such as **Acrobot-v1** -and **MountainCar-v0**. The following table presents some basic +We will focus only on the **Acrobot-v1** environment, although you can +experimenting with other environments such as **CartPole-v1** +or **MountainCar-v0**. The following table presents some basic components of the three environments, such as the dimensions of their observation and action spaces and the rewards occurring at each step. @@ -60,92 +60,33 @@ observation and action spaces and the rewards occurring at each step. | **Action Space** | Discrete(2)| Discrete(3) | Discrete(3) | | **Rewards** | 1 per step | -1 if not terminal else 0 | -1 per step | -Actor-Critic algorithms and A2C -------------------------------- -**Actor-Critic algorithms** methods consist of two models, which may -optionally share parameters: - -- Critic updates the value function parameters w and depending on the -algorithm it could be action-value $Q_{\varphi}(s,a )$ or state-value -$V_{\varphi}(s)$. -- Actor updates the policy parameters $\theta$ for -$\pi_{\theta}(a \mid s)$, in the direction suggested by the critic. - -**A2C** is an Actor-Critic algorithm and it is part of the on-policy -family, which means that we are learning the value function for one -policy while following it. The original paper in which it was proposed -can be found [here](https://arxiv.org/pdf/1602.01783.pdf) and the -pseudocode of the algorithm is the following: - -- Initialize the actor $\pi_{\theta}$ and the critic $V_{\varphi}$ - with random weights. -- Observe the initial state $s_{0}$. -- for $t \in\left[0, T_{\text {total }}\right]$ : - - Initialize empty episode minibatch. - - for $k \in[0, n]:$ \# Sample episode - - Select a action $a_{k}$ using the actor $\pi_{\theta}$. - - Perform the action $a_{k}$ and observe the next state - $s_{k+1}$ and the reward $r_{k+1}$. - - Store $\left(s_{k}, a_{k}, r_{k+1}\right)$ in the episode - minibatch. - - if $s_{n}$ is not terminal: set - $R=V_{\varphi}\left(s_{n}\right)$ with the critic, else $R=0$. - - Reset gradient $d \theta$ and $d \varphi$ to 0 . - - for $k \in[n-1,0]$ : \# Backwards iteration over the episode - - Update the discounted sum of rewards - $R \leftarrow r_{k}+\gamma R$ - - - Accumulate the policy gradient using the critic: - - $$d \theta \leftarrow d \theta+\nabla_{\theta} \log \pi_{\theta}\left(a_{k}\mid s_{k}\right)\left(R-V_{\varphi}\left(s_{k}\right)\right)$$ - - - Accumulate the critic gradient: - -$$d \varphi \leftarrow d \varphi+\nabla_{\varphi}\left(R-V_{\varphi}\left(s_{k}\right)\right)^{2}$$ - -- Update the actor and the critic with the accumulated gradients using - gradient descent or similar: - -$$\theta \leftarrow \theta+\eta d \theta \quad \varphi \leftarrow \varphi+\eta d \varphi$$ - -Running A2C on CartPole +Running A2C on Acrobot-v1 ----------------------- - **warning :** depending on the seed, you may get different results, and if you're (un)lucky, your default agent may learn and be better than the tuned agent. + **warning:** depending on the seed, you may get different results. -In the next example we use default parameters for both the Actor and the -Critic and we use rlberry to train and evaluate our A2C agent. The -default networks are: - -- a dense neural network with two hidden layers of 64 units for the - **Actor**, the input layer has the dimension of the state space - while the output layer has the dimension of the action space. The - activations are RELU functions and we have a softmax in the last - layer. -- a dense neural network with two hidden layers of 64 units for the - **Critic**, the input layer has the dimension of the state space - while the output has dimension 1. The activations are RELU functions - apart from the last layer that has a linear activation. +In the next example we use default parameters PPO and we use rlberry to train and evaluate the [Stable Baselines](https://github.com/DLR-RM/stable-baselines3) PPO agent. ```python """ The ExperimentManager class is a compact way of experimenting with a deepRL agent. """ default_xp = ExperimentManager( - A2CAgent, # The Agent class. - (gym_make, dict(id="CartPole-v1")), # The Environment to solve. - fit_budget=3e5, # The number of interactions + StableBaselinesAgent, # The Agent class. + (gym_make, dict(id="Acrobot-v1")), # The Environment to solve. + fit_budget=1e5, # The number of interactions # between the agent and the # environment during training. + init_kwargs=dict(algo_cls=PPO), # Init value for StableBaselinesAgent eval_kwargs=dict(eval_horizon=500), # The number of interactions # between the agent and the # environment during evaluations. - n_fit=1, # The number of agents to train. + n_fit=3, # The number of agents to train. # Usually, it is good to do more # than 1 because the training is # stochastic. - agent_name="A2C default", # The agent's name. + agent_name="PPO default", # The agent's name. ) print("Training ...") @@ -155,76 +96,27 @@ default_xp.fit() # Trains the agent on fit_budget steps! # Plot the training data: _ = plot_writer_data( [default_xp], - tag="episode_rewards", + tag="rollout/ep_rew_mean", title="Training Episode Cumulative Rewards", show=True, ) ``` -```none -[INFO] Running ExperimentManager fit() for A2C default with n_fit = 1 and max_workers = None. -INFO: Making new env: CartPole-v1 -INFO: Making new env: CartPole-v1 -[INFO] Could not find least used device (nvidia-smi might be missing), use cuda:0 instead -``` - -
- ```none Training ... -``` - -
- -```none -[INFO] [A2C default[worker: 0]] | max_global_step = 5644 |episode_rewards = 196.0 | total_episodes = 111 | -[INFO] [A2C default[worker: 0]] | max_global_step = 9551 | episode_rewards = 380.0 | total_episodes = 134 | -[INFO] [A2C default[worker: 0]] | max_global_step = 13128 | episode_rewards = 125.0 | total_episodes = 182 | -[INFO] [A2C default[worker: 0]] | max_global_step = 16617 | episode_rewards = 246.0 | total_episodes = 204 | -[INFO] [A2C default[worker: 0]] | max_global_step = 20296 | episode_rewards = 179.0 | total_episodes = 222 | -[INFO] [A2C default[worker: 0]] | max_global_step = 23633 | episode_rewards = 120.0 | total_episodes = 240 | -[INFO] [A2C default[worker: 0]] | max_global_step = 26193 | episode_rewards = 203.0 | total_episodes = 252 | -[INFO] [A2C default[worker: 0]] | max_global_step = 28969 | episode_rewards = 104.0 | total_episodes = 271 | -[INFO] [A2C default[worker: 0]] | max_global_step = 34757 | episode_rewards = 123.0 | total_episodes = 335 | -[INFO] [A2C default[worker: 0]] | max_global_step = 41554 | episode_rewards = 173.0 | total_episodes = 373 | -[INFO] [A2C default[worker: 0]] | max_global_step = 48418 | episode_rewards = 217.0 | total_episodes = 423 | -[INFO] [A2C default[worker: 0]] | max_global_step = 55322 | episode_rewards = 239.0 | total_episodes = 446 | -[INFO] [A2C default[worker: 0]] | max_global_step = 62193 | episode_rewards = 218.0 | total_episodes = 471 | -[INFO] [A2C default[worker: 0]] | max_global_step = 69233 | episode_rewards = 377.0 | total_episodes = 509 | -[INFO] [A2C default[worker: 0]] | max_global_step = 76213 | episode_rewards = 211.0 | total_episodes = 536 | -[INFO] [A2C default[worker: 0]] | max_global_step = 83211 | episode_rewards = 212.0 | total_episodes = 562 | -[INFO] [A2C default[worker: 0]] | max_global_step = 90325 | episode_rewards = 211.0 | total_episodes = 586 | -[INFO] [A2C default[worker: 0]] | max_global_step = 97267 | episode_rewards = 136.0 | total_episodes = 631 | [INFO] [A2C default[worker: 0]] | max_global_step = 104280 | episode_rewards = 175.0 | total_episodes = 686 | -[INFO] [A2C default[worker: 0]] | max_global_step = 111194 | episode_rewards = 258.0 | total_episodes = 722 | -[INFO] [A2C default[worker: 0]] | max_global_step = 118067 | episode_rewards = 235.0 | total_episodes = 755 | -[INFO] [A2C default[worker: 0]] | max_global_step = 125040 | episode_rewards = 500.0 | total_episodes = 777 | -[INFO] [A2C default[worker: 0]] | max_global_step = 132478 | episode_rewards = 500.0 | total_episodes = 792 | -[INFO] [A2C default[worker: 0]] | max_global_step = 139591 | episode_rewards = 197.0 | total_episodes = 813 | -[INFO] [A2C default[worker: 0]] | max_global_step = 146462 | episode_rewards = 500.0 | total_episodes = 835 | -[INFO] [A2C default[worker: 0]] | max_global_step = 153462 | episode_rewards = 500.0 | total_episodes = 849 | -[INFO] [A2C default[worker: 0]] | max_global_step = 160462 | episode_rewards = 500.0 | total_episodes = 863 | -[INFO] [A2C default[worker: 0]] | max_global_step = 167462 | episode_rewards = 500.0 | total_episodes = 877 | [INFO] [A2C default[worker: 0]] | max_global_step = 174462 | episode_rewards = 500.0 | total_episodes = 891 | -[INFO] [A2C default[worker: 0]] | max_global_step = 181462 | episode_rewards = 500.0 | total_episodes = 905 | -[INFO] [A2C default[worker: 0]] | max_global_step = 188462 | episode_rewards = 500.0 | total_episodes = 919 | -[INFO] [A2C default[worker: 0]] | max_global_step = 195462 | episode_rewards = 500.0 | total_episodes = 933 | -[INFO] [A2C default[worker: 0]] | max_global_step = 202520 | episode_rewards = 206.0 | total_episodes = 957 | -[INFO] [A2C default[worker: 0]] | max_global_step = 209932 | episode_rewards = 500.0 | total_episodes = 978 | -[INFO] [A2C default[worker: 0]] | max_global_step = 216932 | episode_rewards = 500.0 | total_episodes = 992 | -[INFO] [A2C default[worker: 0]] | max_global_step = 223932 | episode_rewards = 500.0 | total_episodes = 1006 | -[INFO] [A2C default[worker: 0]] | max_global_step = 230916 | episode_rewards = 214.0 | total_episodes = 1024 | -[INFO] [A2C default[worker: 0]] | max_global_step = 235895 | episode_rewards = 500.0 | total_episodes = 1037 | -[INFO] [A2C default[worker: 0]] | max_global_step = 242782 | episode_rewards = 118.0 | total_episodes = 1072 | -[INFO] [A2C default[worker: 0]] | max_global_step = 249695 | episode_rewards = 131.0 | total_episodes = 1111 | -[INFO] [A2C default[worker: 0]] | max_global_step = 256649 | episode_rewards = 136.0 | total_episodes = 1160 | -[INFO] [A2C default[worker: 0]] | max_global_step = 263674 | episode_rewards = 100.0 | total_episodes = 1215 | -[INFO] [A2C default[worker: 0]] | max_global_step = 270727 | episode_rewards = 136.0 | total_episodes = 1279 | -[INFO] [A2C default[worker: 0]] | max_global_step = 277588 | episode_rewards = 275.0 | total_episodes = 1313 | -[INFO] [A2C default[worker: 0]] | max_global_step = 284602 | episode_rewards = 136.0 | total_episodes = 1353 | -[INFO] [A2C default[worker: 0]] | max_global_step = 291609 | episode_rewards = 117.0 | total_episodes = 1413 | -[INFO] [A2C default[worker: 0]] | max_global_step = 298530 | episode_rewards = 147.0 | total_episodes = 1466 | -[INFO] ... trained! -INFO: Making new env: CartPole-v1 INFO: Making new env: CartPole-v1 -[INFO] Could not find least used device (nvidia-smi might be missing), use cuda:0 instead +[INFO] 09:31: Running ExperimentManager fit() for PPO default with n_fit = 3 and max_workers = None. +[INFO] 09:31: [PPO default[worker: 0]] | max_global_step = 4096 | time/iterations = 1 | rollout/ep_rew_mean = -500.0 | rollout/ep_len_mean = 500.0 | time/fps = 791 | time/time_elapsed = 2 | time/total_timesteps = 2048 | train/learning_rate = 0.0003 | +[INFO] 09:31: [PPO default[worker: 1]] | max_global_step = 4096 | time/iterations = 1 | rollout/ep_rew_mean = -500.0 | rollout/ep_len_mean = 500.0 | time/fps = 741 | time/time_elapsed = 2 | time/total_timesteps = 2048 | train/learning_rate = 0.0003 | +[INFO] 09:31: [PPO default[worker: 2]] | max_global_step = 4096 | time/iterations = 1 | rollout/ep_rew_mean = -500.0 | rollout/ep_len_mean = 500.0 | time/fps = 751 | time/time_elapsed = 2 | time/total_timesteps = 2048 | train/learning_rate = 0.0003 | +[INFO] 09:32: [PPO default[worker: 0]] | max_global_step = 6144 | time/iterations = 2 | rollout/ep_rew_mean = -500.0 | rollout/ep_len_mean = 500.0 | time/fps = 617 | time/time_elapsed = 6 | time/total_timesteps = 4096 | train/learning_rate = 0.0003 | train/entropy_loss = -1.0967000976204873 | train/policy_gradient_loss = -0.0017652213326073251 | train/value_loss = 139.4249062538147 | train/approx_kl = 0.004285778850317001 | train/clip_fraction = 0.0044921875 | train/loss = 16.845857620239258 | train/explained_variance = -0.0011605024337768555 | train/n_updates = 10 | train/clip_range = 0.2 | +... +... +... +[INFO] 09:35: [PPO default[worker: 1]] | max_global_step = 100352 | time/iterations = 48 | rollout/ep_rew_mean = -89.81 | rollout/ep_len_mean = 90.8 | time/fps = 486 | time/time_elapsed = 202 | time/total_timesteps = 98304 | train/learning_rate = 0.0003 | train/entropy_loss = -0.19921453138813378 | train/policy_gradient_loss = -0.002730156043253373 | train/value_loss = 21.20977843105793 | train/approx_kl = 0.0014179411809891462 | train/clip_fraction = 0.017626953125 | train/loss = 9.601455688476562 | train/explained_variance = 0.8966712430119514 | train/n_updates = 470 | train/clip_range = 0.2 | +[INFO] 09:35: [PPO default[worker: 0]] | max_global_step = 100352 | time/iterations = 48 | rollout/ep_rew_mean = -83.22 | rollout/ep_len_mean = 84.22 | time/fps = 486 | time/time_elapsed = 202 | time/total_timesteps = 98304 | train/learning_rate = 0.0003 | train/entropy_loss = -0.14615743807516993 | train/policy_gradient_loss = -0.002418491238495335 | train/value_loss = 22.7100858271122 | train/approx_kl = 0.0006727844011038542 | train/clip_fraction = 0.010546875 | train/loss = 8.74121379852295 | train/explained_variance = 0.8884317129850388 | train/n_updates = 470 | train/clip_range = 0.2 | +[INFO] 09:35: ... trained! +[INFO] 09:35: Saved ExperimentManager(PPO default) using pickle. +[INFO] 09:35: The ExperimentManager was saved in : 'rlberry_data/temp/manager_data/PPO default_2024-04-24_09-31-51_be15b329/manager_obj.pickle' ```
@@ -241,69 +133,11 @@ _ = evaluate_agents( # 10 simulations of 500 steps each. ``` -```none -[INFO] Evaluating A2C default... -``` - -
```none Evaluating ... -``` - -
- -```none -[INFO][eval]... simulation 1/50 -[INFO][eval]... simulation 2/50 -[INFO][eval]... simulation 3/50 -[INFO][eval]... simulation 4/50 -[INFO][eval]... simulation 5/50 -[INFO][eval]... simulation 6/50 -[INFO][eval]... simulation 7/50 -[INFO][eval]... simulation 8/50 -[INFO][eval]... simulation 9/50 -[INFO][eval]... simulation 10/50 -[INFO][eval]... simulation 11/50 -[INFO][eval]... simulation 12/50 -[INFO][eval]... simulation 13/50 -[INFO][eval]... simulation 14/50 -[INFO][eval]... simulation 15/50 -[INFO][eval]... simulation 16/50 -[INFO][eval]... simulation 17/50 -[INFO][eval]... simulation 18/50 -[INFO][eval]... simulation 19/50 -[INFO][eval]... simulation 20/50 -[INFO][eval]... simulation 21/50 -[INFO][eval]... simulation 22/50 -[INFO][eval]... simulation 23/50 -[INFO][eval]... simulation 24/50 -[INFO][eval]... simulation 25/50 -[INFO][eval]... simulation 26/50 -[INFO][eval]... simulation 27/50 -[INFO][eval]... simulation 28/50 -[INFO][eval]... simulation 29/50 -[INFO][eval]... simulation 30/50 -[INFO][eval]... simulation 31/50 -[INFO][eval]... simulation 32/50 -[INFO][eval]... simulation 33/50 -[INFO][eval]... simulation 34/50 -[INFO][eval]... simulation 35/50 -[INFO][eval]... simulation 36/50 -[INFO][eval]... simulation 37/50 -[INFO][eval]... simulation 38/50 -[INFO][eval]... simulation 39/50 -[INFO][eval]... simulation 40/50 -[INFO][eval]... simulation 41/50 -[INFO][eval]... simulation 42/50 -[INFO][eval]... simulation 43/50 -[INFO][eval]... simulation 44/50 -[INFO][eval]... simulation 45/50 -[INFO][eval]... simulation 46/50 -[INFO][eval]... simulation 47/50 -[INFO][eval]... simulation 48/50 -[INFO][eval]... simulation 49/50 -[INFO][eval]... simulation 50/50 +[INFO] 09:36: Evaluating PPO default... +[INFO] Evaluation:.................................................. Evaluation finished ```
@@ -313,57 +147,42 @@ Evaluating ... :align: center ``` -Let's try to change the neural networks' architectures and see if we can -beat our previous result. This time we use a smaller learning rate and -bigger batch size to have more stable training. +Let's try to change the hyperparameters and see if it change the previous result. + + **warning:** The aim of this section is to show that hyperparameters have an effect on agent training, and to demonstrate that it is possible to modify them. + +For pedagogical purposes, since the default hyperparameters are effective on these simple environments, we'll compare the default agent with an agent tuned with the wrong hyperparameters, which decreases the results. Obviously, in practical cases, the aim is to find hyperparameters that improve results... not decrease them. + + -```python -policy_configs = { - "type": "MultiLayerPerceptron", # A network architecture - "layer_sizes": (64, 64), # Network dimensions - "reshape": False, - "is_policy": True, # The network should output a distribution - # over actions -} - -critic_configs = { - "type": "MultiLayerPerceptron", - "layer_sizes": (64, 64), - "reshape": False, - "out_size": 1, # The critic network is an approximator of - # a value function V: States -> |R -} -``` ```python tuned_xp = ExperimentManager( - A2CAgent, # The Agent class. - (gym_make, dict(id="CartPole-v1")), # The Environment to solve. + StableBaselinesAgent, # The Agent class. + (gym_make, dict(id="Acrobot-v1")), # The Environment to solve. init_kwargs=dict( # Where to put the agent's hyperparameters - policy_net_fn=model_factory_from_env, # A policy network constructor - policy_net_kwargs=policy_configs, # Policy network's architecure - value_net_fn=model_factory_from_env, # A Critic network constructor - value_net_kwargs=critic_configs, # Critic network's architecure. - optimizer_type="ADAM", # What optimizer to use for policy + algo_cls=PPO, # gradient descent steps. - learning_rate=1e-3, # Size of the policy gradient # descent steps. - entr_coef=0.0, # How much to force exploration. - batch_size=1024 # Number of interactions used to - # estimate the policy gradient - # for each policy update. + ent_coef=0.10, # How much to force exploration. + normalize_advantage=False, # normalize the advantage + gae_lambda=0.90, # Factor for trade-off of bias vs variance for Generalized Advantage Estimator + n_epochs=20, # Number of epoch when optimizing the surrogate loss + n_steps=64, # The number of steps to run for the environment per update + learning_rate=1e-3, + batch_size=32, ), - fit_budget=3e5, # The number of interactions + fit_budget=1e5, # The number of interactions # between the agent and the # environment during training. eval_kwargs=dict(eval_horizon=500), # The number of interactions # between the agent and the # environment during evaluations. - n_fit=1, # The number of agents to train. + n_fit=3, # The number of agents to train. # Usually, it is good to do more # than 1 because the training is # stochastic. - agent_name="A2C tuned", # The agent's name. + agent_name="PPO incorrectly tuned", # The agent's name. ) @@ -374,75 +193,33 @@ tuned_xp.fit() # Trains the agent on fit_budget steps! # Plot the training data: _ = plot_writer_data( [default_xp, tuned_xp], - tag="episode_rewards", + tag="rollout/ep_rew_mean", title="Training Episode Cumulative Rewards", show=True, ) ``` ```none -[INFO] Running ExperimentManager fit() for A2C tuned with n_fit = 1 -and max_workers = None. -INFO: Making new env: CartPole-v1 -INFO: Making new env: CartPole-v1 -[INFO] Could not find least used device (nvidia-smi might be missing), use cuda:0 instead +Training ... ```
```none -Training ... +[INFO] 09:37: Running ExperimentManager fit() for PPO incorrectly tuned with n_fit = 3 and max_workers = None. ```
```none -[INFO] [A2C tuned[worker: 0]] | max_global_step = 6777 | episode_rewards = 15.0 | total_episodes = 314 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 13633 | episode_rewards = 14.0 | total_episodes = 602 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 20522 | episode_rewards = 41.0 | total_episodes = 854 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 27531 | episode_rewards = 13.0 | total_episodes = 1063 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 34398 | episode_rewards = 42.0 | total_episodes = 1237 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 41600 | episode_rewards = 118.0 | total_episodes = 1389 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 48593 | episode_rewards = 50.0 | total_episodes = 1511 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 55721 | episode_rewards = 113.0 | total_episodes = 1603 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 62751 | episode_rewards = 41.0 | total_episodes = 1687 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 69968 | episode_rewards = 344.0 | total_episodes = 1741 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 77259 | episode_rewards = 418.0 | total_episodes = 1787 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 84731 | episode_rewards = 293.0 | total_episodes = 1820 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 91890 | episode_rewards = 185.0 | total_episodes = 1853 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 99031 | episode_rewards = 278.0 | total_episodes = 1876 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 106305 | episode_rewards = 318.0 | total_episodes = 1899 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 113474 | episode_rewards = 500.0 | total_episodes = 1921 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 120632 | episode_rewards = 370.0 | total_episodes = 1941 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 127753 | episode_rewards = 375.0 | total_episodes = 1962 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 135179 | episode_rewards = 393.0 | total_episodes = 1987 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 142433 | episode_rewards = 500.0 | total_episodes = 2005 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 149888 | episode_rewards = 500.0 | total_episodes = 2023 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 157312 | episode_rewards = 467.0 | total_episodes = 2042 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 164651 | episode_rewards = 441.0 | total_episodes = 2060 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 172015 | episode_rewards = 500.0 | total_episodes = 2076 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 178100 | episode_rewards = 481.0 | total_episodes = 2089 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 183522 | episode_rewards = 462.0 | total_episodes = 2101 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 190818 | episode_rewards = 500.0 | total_episodes = 2117 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 198115 | episode_rewards = 500.0 | total_episodes = 2135 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 205097 | episode_rewards = 500.0 | total_episodes = 2151 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 212351 | episode_rewards = 500.0 | total_episodes = 2166 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 219386 | episode_rewards = 500.0 | total_episodes = 2181 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 226386 | episode_rewards = 500.0 | total_episodes = 2195 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 233888 | episode_rewards = 500.0 | total_episodes = 2211 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 241388 | episode_rewards = 500.0 | total_episodes = 2226 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 248287 | episode_rewards = 500.0 | total_episodes = 2240 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 255483 | episode_rewards = 500.0 | total_episodes = 2255 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 262845 | episode_rewards = 500.0 | total_episodes = 2270 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 270032 | episode_rewards = 500.0 | total_episodes = 2285 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 277009 | episode_rewards = 498.0 | total_episodes = 2301 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 284044 | episode_rewards = 255.0 | total_episodes = 2318 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 291189 | episode_rewards = 500.0 | total_episodes = 2334 | -[INFO] [A2C tuned[worker: 0]] | max_global_step = 298619 | episode_rewards = 500.0 | total_episodes = 2350 | -[INFO] ... trained! -INFO: Making new env: CartPole-v1 -INFO: Making new env: CartPole-v1 -[INFO] Could not find least used device (nvidia-smi might be missing), use cuda:0 instead +[INFO] 09:37: [PPO incorrectly tuned[worker: 1]] | max_global_step = 832 | time/iterations = 12 | time/fps = 260 | time/time_elapsed = 2 | time/total_timesteps = 768 | train/learning_rate = 0.001 | train/entropy_loss = -0.9725531369447709 | train/policy_gradient_loss = 5.175539326667786 | train/value_loss = 17.705344581604002 | train/approx_kl = 0.028903376311063766 | train/clip_fraction = 0.33828125 | train/loss = 8.651824951171875 | train/explained_variance = 0.03754150867462158 | train/n_updates = 220 | train/clip_range = 0.2 | rollout/ep_rew_mean = -251.0 | rollout/ep_len_mean = 252.0 | +[INFO] 09:37: [PPO incorrectly tuned[worker: 2]] | max_global_step = 832 | time/iterations = 12 | time/fps = 260 | time/time_elapsed = 2 | time/total_timesteps = 768 | train/learning_rate = 0.001 | train/entropy_loss = -1.0311604633927345 | train/policy_gradient_loss = 5.122353088855744 | train/value_loss = 18.54480469226837 | train/approx_kl = 0.02180374786257744 | train/clip_fraction = 0.359375 | train/loss = 9.690193176269531 | train/explained_variance = -0.00020706653594970703 | train/n_updates = 220 | train/clip_range = 0.2 | rollout/ep_rew_mean = -500.0 | rollout/ep_len_mean = 500.0 | +... +... +... +[INFO] 09:45: ... trained! +[INFO] 09:45: Saved ExperimentManager(PPO incorrectly tuned) using pickle. +[INFO] 09:45: The ExperimentManager was saved in : 'rlberry_data/temp/manager_data/PPO incorrectly tuned_2024-04-24_09-37-32_33d1646b/manager_obj.pickle' ```
@@ -451,6 +228,7 @@ INFO: Making new env: CartPole-v1 ```{image} output_9_3.png :align: center ``` +Here, we can see that modifying the hyperparameters has change the learning process (for the worse): it learns faster, but the final result is lower... : For more information on plots and visualization, you can check [here (in construction)](visualization_page) @@ -470,108 +248,10 @@ Evaluating ...
```none -[INFO] Evaluating A2C default... -[INFO] [eval]... simulation 1/50 -[INFO] [eval]... simulation 2/50 -[INFO] [eval]... simulation 3/50 -[INFO] [eval]... simulation 4/50 -[INFO] [eval]... simulation 5/50 -[INFO] [eval]... simulation 6/50 -[INFO] [eval]... simulation 7/50 -[INFO] [eval]... simulation 8/50 -[INFO] [eval]... simulation 9/50 -[INFO] [eval]... simulation 10/50 -[INFO] [eval]... simulation 11/50 -[INFO] [eval]... simulation 12/50 -[INFO] [eval]... simulation 13/50 -[INFO] [eval]... simulation 14/50 -[INFO] [eval]... simulation 15/50 -[INFO] [eval]... simulation 16/50 -[INFO] [eval]... simulation 17/50 -[INFO] [eval]... simulation 18/50 -[INFO] [eval]... simulation 19/50 -[INFO] [eval]... simulation 20/50 -[INFO] [eval]... simulation 21/50 -[INFO] [eval]... simulation 22/50 -[INFO] [eval]... simulation 23/50 -[INFO] [eval]... simulation 24/50 -[INFO] [eval]... simulation 25/50 -[INFO] [eval]... simulation 26/50 -[INFO] [eval]... simulation 27/50 -[INFO] [eval]... simulation 28/50 -[INFO] [eval]... simulation 29/50 -[INFO] [eval]... simulation 30/50 -[INFO] [eval]... simulation 31/50 -[INFO] [eval]... simulation 32/50 -[INFO] [eval]... simulation 33/50 -[INFO] [eval]... simulation 34/50 -[INFO] [eval]... simulation 35/50 -[INFO] [eval]... simulation 36/50 -[INFO] [eval]... simulation 37/50 -[INFO] [eval]... simulation 38/50 -[INFO] [eval]... simulation 39/50 -[INFO] [eval]... simulation 40/50 -[INFO] [eval]... simulation 41/50 -[INFO] [eval]... simulation 42/50 -[INFO] [eval]... simulation 43/50 -[INFO] [eval]... simulation 44/50 -[INFO] [eval]... simulation 45/50 -[INFO] [eval]... simulation 46/50 -[INFO] [eval]... simulation 47/50 -[INFO] [eval]... simulation 48/50 -[INFO] [eval]... simulation 49/50 -[INFO] [eval]... simulation 50/50 -[INFO] Evaluating A2C tuned... -[INFO] [eval]... simulation 1/50 -[INFO] [eval]... simulation 2/50 -[INFO] [eval]... simulation 3/50 -[INFO] [eval]... simulation 4/50 -[INFO] [eval]... simulation 5/50 -[INFO] [eval]... simulation 6/50 -[INFO] [eval]... simulation 7/50 -[INFO] [eval]... simulation 8/50 -[INFO] [eval]... simulation 9/50 -[INFO] [eval]... simulation 10/50 -[INFO] [eval]... simulation 11/50 -[INFO] [eval]... simulation 12/50 -[INFO] [eval]... simulation 13/50 -[INFO] [eval]... simulation 14/50 -[INFO] [eval]... simulation 15/50 -[INFO] [eval]... simulation 16/50 -[INFO] [eval]... simulation 17/50 -[INFO] [eval]... simulation 18/50 -[INFO] [eval]... simulation 19/50 -[INFO] [eval]... simulation 20/50 -[INFO] [eval]... simulation 21/50 -[INFO] [eval]... simulation 22/50 -[INFO] [eval]... simulation 23/50 -[INFO] [eval]... simulation 24/50 -[INFO] [eval]... simulation 25/50 -[INFO] [eval]... simulation 26/50 -[INFO] [eval]... simulation 27/50 -[INFO] [eval]... simulation 28/50 -[INFO] [eval]... simulation 29/50 -[INFO] [eval]... simulation 30/50 -[INFO] [eval]... simulation 31/50 -[INFO] [eval]... simulation 32/50 -[INFO] [eval]... simulation 33/50 -[INFO] [eval]... simulation 34/50 -[INFO] [eval]... simulation 35/50 -[INFO] [eval]... simulation 36/50 -[INFO] [eval]... simulation 37/50 -[INFO] [eval]... simulation 38/50 -[INFO] [eval]... simulation 39/50 -[INFO] [eval]... simulation 40/50 -[INFO] [eval]... simulation 41/50 -[INFO] [eval]... simulation 42/50 -[INFO] [eval]... simulation 43/50 -[INFO] [eval]... simulation 44/50 -[INFO] [eval]... simulation 45/50 -[INFO] [eval]... simulation 46/50 -[INFO] [eval]... simulation 47/50 -[INFO] [eval]... simulation 48/50 -[INFO] [eval]... simulation 49/50 -[INFO] [eval]... simulation 50/50 +[INFO] 09:47: Evaluating PPO default... +[INFO] Evaluation:.................................................. Evaluation finished +[INFO] 09:47: Evaluating PPO incorrectly tuned... +[INFO] Evaluation:.................................................. Evaluation finished ```
diff --git a/docs/basics/DeepRLTutorial/output_10_3.png b/docs/basics/DeepRLTutorial/output_10_3.png index 8a6c39010d1e4bf73d4cea79cab588b96bf32cea..6981fb863cf9fc05c855d7d96406ba3aa5f41558 100644 GIT binary patch literal 17967 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 diff --git a/docs/basics/DeepRLTutorial/output_6_3.png b/docs/basics/DeepRLTutorial/output_6_3.png index cebfcbd05665b53fea36cdf062c90770a0762856..c9139d724b7fdf0cdbc2b2dba37cd52a9807f732 100644 GIT binary patch literal 13138 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⪼I{cM~d1JvkR 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 icT>ZEaAH`MSqH_2qG(bw#}bZcU;AI{3mA_8 diff --git a/docs/basics/DeepRLTutorial/output_9_3.png b/docs/basics/DeepRLTutorial/output_9_3.png index 80a69998ba9b2d876d4ca0819ebfb923dd78eec0..44a4d2ab344cfad55031e387d9c94940aa1ba974 100644 GIT binary patch literal 56641 zcmeEtRa6{Z@aN#}1a}5Wa0za~T@p07y9NvH?(P~SxVyUt2^QP}1b2sj&v*9h} zzHBlaat6AmZ{4c;N!^4iD@vgu6Cr~@AT$|i@y{R-v>ylrwTTE1yz_Bpbr<-?>nx$^ z{KekP+0D?&6r^D2>|kT>Y-4Fe;cDvi&C=eEgPDh!laa#0+1cS69}A1^|NaGLdna=i zavEwE;3h~8(puj@APhsu7gVWmi6scMS|ua?N!2~;INL2t$EEd6cwfGH#k$TibDcgv zI8K=c3syxOR;A64f`UHpTueFRKn;^wcW@jImIe7U%{3^WE+`26%CsRXyU3km35WPVLtWXmHPpS5|$vu5O}2_1!kQ6S?ct> zD?Q~-B@Dm%SJ}KC0G4q-s%&O&(+x@EvL%}0-OsYY2sC^Qf}`Lljsw3h8W!)&&jxP& zLWa}6mUFUYnq6E>`+RIJ+`roTZOfT&%c-@-WE6YVX`Jcc_;}*>Tr%qEv>hW>=+UAn zG#*STfP;}Z8Z=UoV~U60G6ZtBA8T(4RER=gD1VdJU^JDRm;b=RX+o7fnV(CfW% zmO~#BB77jvQAIuESwKB>xn2SMr!6pN9amE=4;4>N8{T*MEiEmnAFT!>-i3)%)qJhg zB3#@{)sG3p5F#imGwKgPbKmqwIA74VH{2PDre|UKHI_zTR?q_-NBAYnWkE|&&-c6+ zL9^4trF!oP8$A?Q`j_?CK_kM2dr*%JSHI2Fy3)7}7lwyGh-lNmC)&f~TdQ z+6wJv^l$r9Cl_zc>mCebKKEOU(afGBby;fT=a+lq7ujcCbPpa=S-dT~33BJcKr~wZ zW?0v8RjDEci#oLGER(_aqoTM%aqPrEwi5-Pd7vcMC*mE0de5Qrc53%C4QR7CX;afwDCrUA$W~hR$gvczw7|4XJ;o? z`1E4E%cv17(`TBh8)Ba8jR$-{(4<*^036Es7(?|n(VMn?XK)}oAEIkJ>HPe>J8&Hb z*;{g0t>=EWo5PF*etu~wqFyz=@bebN4DiQzt;+~>*1Au|s96J2EWv?;gX1~K3p^jd zQM%SNUu$!@e_ZTFuUmfVYY> z?fx~ccd_Y)@7$lZpKV``vq;IvAYEQvIRX#+Nd?#0)pZ-VkP;agSy@@x&$_A=UNmg? z=_#^TF3Uc!)%Fc|zU?&Qm`|3L?`^n<|NhF2eLCyzUQFY*{S(x@;lqFEq~MkNboy2| z&K$UMBFRH?+E~po#RIdqwckp|Vi z7IS&&l;yVm-NM@Xh%IEm{u~I*K)QKOct8L&iQ@p)=*tFBfoTHY*|QYsVuT(Kgkl5B z%32=&X0ll?FfN_A;=X&g6-FJ?^KZU9)O&)!tfdAnjxe>Mv2p82|BbKfuJdfGqJBzL zON$WHX4t-Fr{glO=Fq<8z7x&u0DSeG-R-z_Kdt4hcyEW(VIsmp_We@=c=h{!_C4^_ z(b@cN=vE)S?$+Ece)+!Q2)|y$Ze6&amk7TgmE?GQu(GyRQB{TY6Q3(nD_2%g@z1pH zB5bSLS?qrOC@U))a{ZvKt?kKF|F!bmqf;3hrraC`-)T?~MMJ9h9_Sg4f78vODO8%h9-Q1e^>n^Xeyq`CgruwE zZxyMnlje<~{7^DvkcExS0MHE46y_Y(To!xxoVI|s1NyfP8aIZ?JW+uX;8L&B3Ez0V zZAJ|3Z+Uxt0s<^$03dl}fD+itotL|f z;iUIp99C?bw~A8r`p$gr_!)ItFd+rPQMUo)5;+PUW6vmEE^7U9)PAln86;eW1n|tA z*PlT>x^8R1xzD?FK=@l;ACI6Y9z2&)=ahs=-(EJ}qVe^;uu8IBzdC*AAsM>*B^(Ph zXF5XJxT(7t^6($I0RaKKbwGW?M}wc5)F9#P%In&8to*iacAekfwZpT>s1A`C?d1C5h~; z^RPJ6;pwD#Cjf=Hhcc7|x_cv5N$3GK*ZY>R>$b5P?ZKT*{wrb#VZV;YVUf|s-2Di3 zEG}pO218)l`o)1~)p}V1Ul*LESP~{#IBE)PQ&SqBi`C^#m2NvM2*@t*pOuxw@m$YS zUMLZPx96)-)9%OlYL93nKcL+kJ>8y+n&$exwt^^5fo{25m#D}m!;`J3qM?zh(`38C zWyqE3XR^T(q z_ucr>#f|5`+=D>3geMt(Uy?;tph?k->iAkL_%hTiug5QWh5dH-(R z-@j(@si}0JFx_@nB+4K}SZFF?VSOF|=j|IWiU9U)-8}_kiasAI`C@-5QG6Fl;uO|$`^Or1@1Ttt z=*WXgzK?Ueu8({nKq{ET{$dbcyb#`r;_#?gSzToWLJ3Jq&n%ek=RFoUKeGLCpQjT# zMS+U}s93cAD7<56vmqL;Otk$RPrK^9H6}TK5m04irDm5GZ{HSclg%>wfvb}6%Qe|T zc+j}j{#15g*Imm_jF^jy%jM1XVC2?~N8;JM3u$%dEs-Mc9E}6*PCjL zwij3c^2#-;Pj7&W_&qA03dvteL-#Hd|XlmUHm3Mki>u<@qvM%)@uI4y_b-{?UFIi{bnFkob?TWFTFB!*|3!2vEG$B zt=K}j7?5HGJu>}ki@DqIB?oCerm*P8003<~neh?i7fsAvP+!mS(7tv@AX%u=(A2bD z(~l10x7*bI?P3uB&i&<&bu|FMKywp5bVS$rzL(s&o|&5)tB}cMxYA_%o|HU+6CWgmd{0IYLwMsu%AN5sMYTxBhhPoLd!5k);E=1v{+#5q&yXl`vKjF*N5 z((<@bPk;Ooz|t*XzvL{}fX;N|e&X7$qN2iP@X~2r-H8X;X>{IQ%!w>soMCcbfhmD2 zc}DFfRM7P7Y=8q#6z{jc*B)mb->(b^;BSwY1L08c@_=@Fh<-ZNb*8Y&8q51PO=!5G z+Pb~^4FeV$rYaHr$)_2}d5~XOS()DW7ha9ed!2Xd{nb7<3>CWVO&Y5?zxL%~jOnv{ z9uHfNs@l(iJtsEL`A!?qOQ8pJI+G=sxL05+hKTJ406K_;3V%`U`+@=_#s=lMu4{No z3LYdk0F3Gr!w~$v&y|sx2?atRbEg2HexX7uFquKa2nas}>{S3X0=g5zj0NX=SR7G2 z5YQ4GfmW~se5R+9Hqv7ot$eOf=kQTR1`(*!SB{2;MvyiVbPlu!B1ju!^SrfzAXT|~ zWgmvmISiv-hkMV?04p^ViinxctOlxRug?HWl5}zTcVo>J^*c8tU{|E9zyD|zC5j+`QV>*zX|!gUga9Uz1)SaoB+aBv(ZW|cetk7 zTCS`@vlg1)^|%Ls(NGP2?{~2Rmx!Bls|ulE}07l_T$!L17H9Y<4&{eTrU593#}PG zb#ZU;u`n?yEVnIZ1GtC;eCQy@FM&XS)EZCUpdcfAybDpsg+oI_6I;JCc!HX?)<-Iz z{SRfs2956Ty5H9Np_fyiTuKRdH(pNN9D!}_2PosulAOK<%ee$Q6^fU$LgCYv9rR}) z*ZKhE83AN42*^JGBBxyhi(VM@yGQ^mvcCXY1fbOjfZzhKrdeYE1S`tCjV^C~fHCc1E$;)>2CJr) zSPks0k3|NT!NgYA9$SSv1E2>mC}CCAf`Q(9F-#r{fKOE@L+j6FVmPQ5WLo87D`W+R@8r^Sz@@{JGfmnV0T~FV|a${1qs`+pmjz zPG~>pMgi20(PRvPM9_UNS>qf?%I4v>k|*zLDWFCb1#eUZ9uEou>Kg<+HLxuakYXg} zwj*&C9#3VFV#Mo*&`#B8xhNLq>6JpiF2{L&<%30Ab~DyKKG#D6de!U;s+iX$;PDPJw$1 z0*`g3;|`-VsUnLmtDa|_nk^2L3)T9$vs|1C{co>;272(_cwA`qz^zilg##Xgu?wg$ zqoak&mb0!W2Y`uh?j|aox;;U<_t^M&EdcUK$;pOSe*=ct9~X53A!~$mx_25n@r*DWF8@>k(M8#svv@QJ zQ21E#=S>8j^B$Os&NFWeAX7^#D+eQ4y24DyQ?}MU&raMX0A+g*D41XzMII=C)%(UO zQa}JQ$LmstQMZk=^%W>?Kj0Dqhy;Rg+${jXhkakK$Z_%UF`TYLCH3^kAn3dbq-q=( z38JonmgF&5a5D&G7DoAe1f&}Ab)B&QumGF`!=#jy+d5TdtvXl$e}y5dgaBDlQPIoL z85FJ(_qV_DI=(MAKv4>=c8ff242wKJ?+XtD>LI%Qv<<~=)e!+wgdITj@LW%eK^maZ z>+^$!z5Osis6!U@Jkd^0PDbyTb=z>w>It=*?FM6gt_ycB0k;8sMD2?22MB#gK><-j zQd5J_#*W8-e4llD@+a;QMf6L zS^<51qF$GybobqFPr^EY((C6_M@__AmJu>bo0!%oOnV(mg6I(lcfdgp6$40F1fbC+ zfrY#ssznrbv$Fz9^vuH+=P3#Guo`s&&{%(tI-gSBVTpz<>ig=FIP^gESv5xd`)73l zXoxVNw!SW%-1@|b;=?5Se`>D#5PnHx-~G~bKNIT%29h;sgd4T;P}=Ek$+^TRLSQ?_+j`>uy#p!$nO#>a77+jRkpCK6C?QjkCdk`Ysu;!Xlo z_zMJp4Vzbj=MHh@QW&uS!^k@J;;4^3z3%?Cz&i5 zCMG7q6d?7M`}Uk}G#6%PsUQ^(cvKRfKKZvC6hsaTMH7Gd0CNTK0Br!&H6c%E`-k&l zW#d&Hpw_;JF2_W~#Djo^L@z)V3yOOddSVcx4#EV&*$JXBo61@~yC4Aws4z2%mkS-$im7BJ5|r)XK7g(HeRGeQfg`>VC<+102$V~?g zBC2X?H(!0v);qVgHy%>}iH{FZr|pJ0MI4~nyu4Q3y(k9fUF`w71@GOvcYRw9VSwc& zYqQ!?yZ8VY9L-^3=)B^9#zqP4r~EsW&0yDgvp`k^ICTwiK_iq`2>qV> zK*W)W{VYI{R(;=I0PXmn9Vf^MfVx>0UhIm~dCN!X9l9Q9;_QEYu zjG@xtf#8f5-~MNuM=?QY>1ZOIxhH{^Kb!#(_%Y{nxt?x$HRnH%eRb&Ut`Hzb-^p{s zYC!UVK`V<#H+3Kri2u$uB#yq3krreB-{+(uq5eNJ-h0ADO3{{HnDc__1hM~n8Yd8* zACCWD1(7@~i`BG~`2PZ!2vY+hIkP~{lk`(&$P4k;q*$Rgf(#RA$00um%J7$_d#RN0 zd%RgDLHlp4!0X4m0%IVVws7Ky4Vxt)GJv7EwoHZv{4CK}T#eLFB9s!Au@1FfCSV!d zOEn&6`hKO~SQ7Z`9a1KEY1*DsxIeC-7=gS(c>1)AlXy1Bq#_Cv8cR)zzL*+!4l~Tk z0%H&}>M+cb4^^xOEXSG-PBSH>MXJeAsL?iA+Ww_pkAz;1q=+K8GQkcGm)O<}gxhqN zTmYTgc;<}A3@WTKktiElS4}{6<);SNq#OpBo-U~#MmdMClR$XV z6xb_h30))Kzfz!N41zzUfC<)uk`HJbocsOkKy|Rd^H0>FMrwr&f_sVZQ?Bzmo8jJZ zJ{DSBOUxX{7R-=K$g#rviU$jqQC3(WGQbx^#MG40F!@0rQbL)aHDqkoq-{22Y&E3E zol!Vy9yCyGSW5VhLpM*N^7{OeIS>&;JXjNI{%zaeMmbHWUgIo@h0=rN2ic!Us5a!Z z_7?{dIFa87X|}k;7FQB6al1IQY ztQ0^vZ(H7#PAe=B0v`mtO6Gr8^G~zFYI(P5P5Uvk#Zg@NVuLj&(|Lucx|GDiS_Z2! z;aFaq%aCB-VSDN?JYARulDDsjF0GJ#>ST#9kSCrMQm9K3P;{+F;)+CVUxsa;hb@;0 zDI->PhAET$CHt&34~IMHSC-g_1^Qvf&f(}@bT4d@O!8Xm_*KDSWx`>3B5r!ch|aIY zw0=C8B+4?Z3?A06M)V>u&@hDt*yqvEIV(|l4onpn@uYidvPc4T&QiYU-DlIenzy8Y zEnkshB~4I_xicIl-yn$gTou}O#ZMXmaQsc}-BCHnrqTSw>BlI;I*JV@ zWR<}-L1G zIqYLRY;4!a)&2-mMC@pp3pi&S+|kOR=CvDHXahDGVDaZmlMc&_f<`mPcsPu-yu3MS zW_f}?4BV_SKiV4pZV0X|p^i!sK}`tyG0zykYQPl_;vRRF&v;=wJ`Bs7!4EDV?(DLb zf!0y~c1Zvp%Eh!qGAthsuCfbjDYA8NI7K5=Qg(#+o-aTJt(QPhG$KSEUd1<2fhcf4=pA3~h16}SRPa619zyuAB^Hae>*qH{t3C)QRx&;1o zw7UQiy}CjQm_Eb5SOj&_G1c5`05AOVy@aAXle3XkJWld=^dxtSAx4?C!EcLqlrny( zk2Voz6lI6N@~DurIpXiB%MQXU;Tg@GFtjHf-KrRA);jQb4IiQ+-|Y4!w(D|uQjqTI z27k{L*%0W8W=!G4H%t+UQefiSIT;-%B;nS;k8sMKr6xE=7vH-{BLu{JiC>AJYG&fC zl}^K=E<;!2rjWz7F~c#+h!Ihh@RXL&W(}z+8(tgQ=a&*%i8@ekj0!X^bUV^XCwYwXnh7lVm;&ZVNRv7OsFy04Nr%4F7 za>#C19R_*wr90HbmM)?~DbSVM#IJuVHG}^uhy6DDPXb%$kjRupUm@5$-N;|^tt=>LJqGS@EfW$=0tAbaY zc^<8u1O=8bp^66+05Di~fcV}5X~+PP+HSJZK(Q48JuK~8a1 zn9r*bhKj51G)QKItm%6#jnQ__;lwUnDlRYzuk=J-xW^j@v9!T@+Vm+==|qTH(3d25 z$P;d}-@4|YQ|Dnb2VpaplW_Uf>$4jEEpMj?%6?GZinTbGQoE=60Ih=76^869F2P#t zvNp0K+U5yw*~d;ZF5RX-IcokvFyWrx&{5WlC43R-2w%j}6z<|z+&eR1$b)UE5esk6zG7pXQ$4 zaO{kcE`H(q0^njh=6}Vci#!SLDZy*aBc^(f=xz9J(w`uJEt)aX5v6vLvDb>L*XkeN zKBF10<#$td6qKHeh$q@1f(b5)RY^xbv#F{vnZ6T|C*}`3Uw8yp3JKY$A{6aL zN+lPH3>XQO?dp}y41rL@uFaaCuu+bD%{zcMx*%>Zn4zwSJ1At7CT*jnkn@|f3RyAx z6tAslMq@_2hIwJ&PGoJaDPgR0{PCWixsrx}*g=s_MkIeO0y`Fs#*R2bkPCO1$q=b_ zzcw8T$&u28qTpZ}4#|-6#}5ix2F$gvcJe}_yMy&8oDF-<(~y{-@Tdfsq5<<@nqToj z3~io-39qokem~^&qv>=l_-Hu6Q*8C`ZzQ!6#PK?+`sgOQ(oB%PqoV+ODbEc0i{f8X zKsVT-HC1U+8s3wJ>jxQ}>v>&BROok;sh7XY&d%;!_zB2ynpB+t?hP*-yJlj@*bbsS z(42;uIPu!{tiar0+IjZ9mPi^~EJ@Jqa2wegwtD%~G$hk;Ed& z!G#V6T?+7jxICu6`=j!YCSGH^DSz7b09kj%y4wLIB54);`bZ+ z4B2Ryin6gDeV|p|)w-|oYf+^dQyGG{^nMJ)FfY1OX{+U#H(9w^TWw3`I*gxM)5r~! zsgRhYPG2oemVT(|*{K1K$4r|T9H<-BHJA?dO`wv>6zr1GdPa>FR?{Ox{0G3Tzy)lH zT+f&8sw2qA1!5#a9Dcy@yWhg_MFfl=K;fW)YOEKTv)s4CA-2`U{Z8!8&7%G=#N~*H zK(5efb!rg)Y&P?;XIf_SJKarZj7>f^TNYB5XQ@h_52=;~N(sy>pTRJ($g8TsSpG7Z z?ihIcSd{Gp;S5_8=_+3ud!Q`U>yF9C(TeY9kIIc%e?A-2~=C`&rl8lI6H{{ruG~b?BZdYrGONHP^j-6c&%{wE0O5v9hD7Noti22M3vyuTbn&G&T z8JJYrih=FNUQPNXBCGU+L&0z3NOPgj#m4Mcj$u{9upXantd(70%o0&!C!;>cqDj~h zcc6dh8)xPUp>(=^6^w|ILD@6_1{-*hcucYp!XSvF$=te&4H*g}kT`%As&pfPVOiDi z6J&@E*#31JCqqVT14g(*0o zy`E_GT5Qea-#gQis|72{Gdr04p0_}>+IkmZ88%e;Q?Z;d`2ju2!)8>o+@`gIFl5ww zs0d_ZV{=UT3IgkMb8(@!#B7{NfwBGjXZT%DZ&&Pxf!UjYXyFt^JbKTxU&km+HC-kY z4JV(m(P!#eDA){;hU2fjx^TvT?8cs{=Fvv|+OQP!bO7LqkGw4|rBwbk^&3vUrm_2{ zIP4FtweV|;E-jE8(A*+&!bZNNngoZZNc- zZ%1IhR_9~dTKdsl^iw(37>eGs5SAnFrFo)&MY~Vo=EtUVD3s?~wsfzJb}X(9*S1J* zTJIf=Wb<*pMCznzpMH|iGlR>egf;rms22H?Pqp6ovM_Pzpih25C6If0o@90zpGj~}o!H0iZwknRXUAYkyO^7Sk7f5##K6CaoZ z^O%Jb1v^yhDDdVpMkn$9mD zsUP0C)k*t$Fpxw=7ooEdg;HhF@hm4^)E1NgHsJn(E&X#b9J=HkGx4BOTjk$lTo^p) z(x)Ws1QQMgo{nTyA=!j>?070t=k>p87vKcLAp%}%P^hS_EfX*yRMFN((OsU--Tk!^aOe3V;L5zgo6Jh#i0dHZ7Aoa0Z3#wDa!2BQ`w1A-i*6 zcDV^mAcg?1J8e)Y1?o2|jlX7gU^PQJz54X@7n~?mLxSHDMW!5>HgFZ_d6yy-!jldl z8dwo$8ei0)_N1}F``c*+B5c;f9;|o%5oQLS-$2^LFn}el7Cgn4ylO}QO@3-M+`Vuz zm=l8t>amM=e13MyYAJ=*8y6<}=QBOo|UW#Y%8@gLu~(fbUr%55JHY987Rm(r)_)RC+*7{$l(`|J1{hb zoEqu{X33E8C4^`c$)y7J>K5Ss4gmw&qg~HprQ8_EaU9{7LnX+>%lLA4)O|NzYRCtz zCx%EQ5;RrNyO?Z(?HjW2trfdKukU*z{e|D5%$#JNC61PoE{$qQ^#uy{OwMJ_5fNWP z_6&mD5@ItN)6ae*ga|X}c-K5{gh7P1+lO`IUS@`(WyzF&LrtqcV#rOL_bMw`lKFGU zvEIk>1gK&LCsSO{*1Dws_+;*R8EGrNYQ|KvFe)9^rzL^p%gFsu=k;I>|84BqBKn7k z2Cx(#0?J#*m7^GsH<7T7tevKLhlbxu`uh8agT_HcQp?|nc_DtcC)aOZlTw1eYJ%7& z2#nV$kn4TV$BoD$~FvAyYo#pyiafzC`k%J#n(X{A#h5m|h#C zdb~k%{+nL;N(f1{K6+a;JJ{LIoerwFci-1gqJJs{6L0{q)Lc||d57dJu_$5JH)cZ2 zg;pZr^>IOi*Ogy2{nb#$w-jqp{F#(tG@i`TaLFk$v0M}a44cH7|5EKJdbvK5@uj+3?emzlVE0$6@USk>=HzG(UX05qvM+Y zQmNQH8HIzVX0R8)&QtkQ|JJ6r)1lEDDiQC~#79C}CRk4g40%~le23M2_7@-khzuSA zhW+7VUUZi`m1B|uhSXT0A4Y$FV8wBCw+iY&eEOOQRp+#?HdD_ElIHw*SOMqSDYg@5 zl3^jQo%59*xt|pVpFQ;t=qyX|A|VD`+FB^qx)$f?Hf%?p?pRWH5vqC z8GZbRa#9G&BSm5Oto;{k{i<^qyUh>)=`x98=veR`+H3xOVK2V_xY=M5N$gF1$Uno+ zV#=g6VP8Ak9mQaB9&A`tb$g5w9L8P~&u@a?1uoLzLSyoo==#Sg)JT5aw9>-Rq7Q3* z-}R;0Bmb*_vIIk)kT9Rk3H>=wt-)tXS;3|mm*}GpHP&dY`lcK=k*>Q?$#S3TPH!WL zXzc@j=1yD&-LyTq6dQbfz9)2kk#1tif=-&+A=ruUn?59hzTUVKT>0_Uv~T)bLDivn z01&EAizCorRM}H$IGF;1S_=f_c09yJC^quVC~eHEGQXx1TnwI_(rdd9=_1i_o?|(w z*=;6mvc?D1yAfcO@RZj$1@P|(^Dm&6(>r=vmcJ!;v^rz`gW571srD>d*vZPjE)YLm zXmeq##m&=KT9^7Ms#k=BAu&hB%^P{}m(Z#x2vy0{14$;_OoRm|!v)@E1V1vgS?BGa(cR$wdLk)6- zb}5-j1JePPf#-|N)|@st%)I4Rdkj#z*-6eNbEHbaQ&4vdHu;A;^6+?!7(>ua?hKD} z^lEkva-AJ-I3?!6r@C;hn4MQEf&!a}$_g1+> z+L?PeEee0;#fEm=HaG0&s>7wdKNz2QF&-2VZ0gVxiTucBDexyk4atg(1qKTGQ!G#l zW)NR>w1fBEGASr}trr}(p#4q1*%8w7wCi{a|ot_C~jEAuOxJ6fK60O{>II z=?`#Vg`dQ%NjC+oTl$+n@n?)7^I@}&(GQ0$F$>?*^1Sh1)^WNu+EcskhFC_Z(s+hJ zB1m&+q_dkB-(}Ml%mkM4YeMpj5XN?y6wgb->YUE#KomfIbpEIXTPa6fVu9Vu`Z&NtxH2K6S zR38{)P6a!p4aE}yr9r9tW+e0|pdyTU`eWnED{e&5l;N*_cZezfDS8@1+Cq$@aGciZ z29|h~sL}qmX7Ce7^KJHZV8eHI{!@R%#)M?*)lc=(k%4tuFE`Ft9O?dL{gU>@1UK>4 z6Y0GL!|8ZvQ&eM!K8O3dRrw2*or@gXqz2C}tPe-ZezD4aC79om@{1l-@8vN3?Oc0_ zZ2ik`z6GKD6(yIxCnBndHyiOljVMG7F%7HL4?$1F3uwRjMorm`0P4ivf0P`K{iS~uN57X$1@H!qD(3gwyP#~yz{3a_@6;|1J&OQ zSluSTKnW`)a)#nzgol_bZ58KBKXoFLFr{ee)>w^w+J0u(T>J=AX|W{ad*Ql0LDFT7 z7UjP6ftBYAqm}Iv#LX-l8tfkY)W=}YE=VT|k6oHS(Q3n__($o<6+189HA2F6LuQd| z8QJ-?SVql9?TqmeR)P3XFkVqs)G>MbhTaz$6wYXnZt_dY*_%ykG-B^Vey!W@Vmi=A zIE!UbBYG_1!w6vSCd}D=0}Uuw!_)LioXX$neqnamfq+ zsN`%631z z|GpwB89eB?;dY&50~0#nx|n7S2XHz9w6%i@ZmxA`7qJ)Gp(9UXr@nkttR4i-N&N-o zvHO4@dE~KJQc?*t6d-aEDpDHG+~;ba8p+9qa#C?vXA#Y56~t&ggbC-$h1lp4-aQ8M zerq5{3jb*qE-b{$0>jz@$$C1_mLADoN@aN80p7J2&$4ef`mQ&QO!VkFaYn0_oYR}+Kl>z#M3D|7lG!=?^8 z5rZiE$NP`+-QSOdx}}!IxesHqMNSaF=+41GQdBV-(L?sro+H>cE5QTAu8)lA zegEJi%v6>F+mqNsXu_*BWDzZvC5;%S5qFi~j~{eX*mR42Ew_gH1n!|&YUTM4NL`tI zwSSCH$MJ8I-9hGzV{K|1{rDcWjSNmZWHEqkRgrl`gj!b$N8(AW(lJ&t0=niKhQd;$ z`CSK|mhScW3C)q-51dlIhJDAwiu^lIIv1^Dfjwt30Z%sFoi-dRsHQGy40ATy@h?cn zzGecyrKgu%lB=Tg@$wvT@?a16*W3cEo6ugLYWOVcl)GbS8%}3uJ_^WF08YSViMiz+am@$?k&Ei{(4B|Z#{sIg?JG=~O-0y!PY_QBH$-|H1@`lsYi?1?w)r)o%wfwcwX!ua=}}@~>9riY*j| z?N0t%q@q1!TY70X!1&!qWEo;MDF(Kur5KHyXPsapugLd6Or&0~g!f~e&TDh*--jzj zN~e_TX*L6yPr)C1>r4iX!VjtuZs_9ziKt1%q`aCO=lt&TM69$F464TaV*J*){hA(I z?tZ?c&)nbDaEYc{o5#nvNT{-ReG+$=xg!%9S-rC}Wy6B9>M^X7!14276HgS)D z!f~!Pv%<&`?tq*ki9u*~nn+!?%|kku^HqCx$e5l1u75FSa#b0EF1Cj<3Akq!1q` z%slNGn!s}pR=*0*{0Z40>GApGjbFz(n3+C3LPO3@1I}vUb1GD1pq+c0Y`xJkXANsT z{&bpi@@kL7e1pKhl4T3u0_88;Y{6)|$c_7hYxELe5y3q{;lirV3l+<}9?Ma+Al(7m zocwt>n+=JDub?zhTeQH45IkSh=vR7R@Cm&oR$I}-$`2(LN`fT9&Uv7YVRhF{1Y&*4 z9yd_oV>=uVRc?AYJ5MD;o&O4|Cjz0OrD)PotrJckOVm7AQ&=08qSr+LZ3Eb8helr{ zN^Ptg#lRm7td^A0ZOD^)AVip|Tb8ZkCDgU;PXqjgp?iO7c=9!~{4nECgSRiiNct|& z+`h=pLw;2J=WponW_u;B7D1yirRIDUTaruAo_Pn**(zvN304#Ilc6OnaOuc(NO9TD zVmFI(yt^OBG8lMfW$@aA)T(Ux6&#R@;4tdCf@H?tTcYO73fJMY(_0NNYM{F1iBy z3&!5!pTGv>4*yc&7~J!|weZUJ+Dt-_UOMqgOqqP;W8DwB4;n{RB}bSL$fOdOs+pz(z$hrIAe+(Mi`S=77N9@WK|26A_H&c$u1T>iG!s|8@bY;yomoGLeP{$8xt3v6{ z(Kiym5d`jxJroUG2NIP!oZ}hO#h{jNy{CAY;03-3>0UFTAJDCZ{s}`vgLQ zdsK-@ODrmZlJ`fZX4C^WMVk27Kbv*fYr5h)t321l{ek3CADTCMz4v9UMYa=F&@y}? zc95Clr{+7{)%C}Zn00Vl1#qks{T0EKgdd#C@kJ9Ttg)n_l}UdNs#e;<`rN(8R)c#;+&7esx3<9RensSRGoAUx<7B~I_b1lxZ?rC+y`i(IB|nOY zqum8Tzh+#JUwcLK%?}o<^}>yyLcggk%kfY$+Jy0jGgu0G8RLb;5V8Wp18{K$x5{$) z^G_IivB-GDEXUoR<%JCB;|Gw%%Cg(Vo%e9u!Q|?h^~LMikd_x!<;qPe7HZ$%)7-z_sQHpH@;#M zu)$Tc5*&EYvVWoDx!Md4tyZ(Qiy~98e`J1Z2xM0Dey1DbJRP;9Ct}QwTQ}5r1}nQ? zB2>IZfx0=la!||$Fi4(<^_*;?rY=;k^9>NlcCc~DI3pq@MN)G$*dfDI6PLW;bQBSP zBJkg_pi104h0ck7-~0uQsx=g6B+B>6T!YzE3@8v)j->;vE8SvjO9?>g`qv(LG~3*aKRkxzGAVD^khpa($G}) z?BS*#WpU&Z8?C9z%CGtH1H|P;HwU0EJaXRS8ryHYQ;OqhIdd0bk`%4<=BE)wHG6*y z{4aT3eFlt!mo8mvkLRf;8s86EJH<>06eE={kM`S0LR@(OnD9vPTY4wH|AF&MzaUgK!iH)3Q`%8gP zn?ZVoE}Ith=#Y7-GYV)zFdVva@r7lO`=hT69_>Kn39Uma)K#}k!A^Oq<$WSXZ_fJ? zgG2%1WG95{^4O-Sh+gvOx1EbaeJ3 zR+7Sn3BI|8d$8g3or%T8#KCjE>GtF8XPuoNfgWxOhpRBh?uk`mVw2Yz)VMjHYr}L3 z!kw7&)i-qLboZbG`}8ViK8Bzlm#&oV3q0vykxM z)>=b{@J|k~r%u`1ggV_cl*)IzG6_Z2f(!BdO5cK=q0GH7|fy-iUu zg61g96)9-sp;_bMxDxJfXJfq|FS~ZO`0l1BG|*-Sm71m}bTkg36CKVnDs&fGr0JS7 zzx4Mcn#VO7&A9o)_%7XfNOlaaw)^H0ek1?Q+)nxti+|v{(6Ih1B_XnNy|r`|n_LTF zPH`+qCcw_I{|CIGdH`k}tVjs&A1F@)ZksK50$LPKYp96`3^-4HCFK4;5*i}S9tPn} z1$n1TEqu+_uRIBa3iVSW!@Gr)@`CnBSZFO*9Giu-9^UH$n=Ac{Xn0XSf#XNCd%Ucb zOK_RrgLL!a(LHt*;LFhSVFO0SxF_|}964fzY_)gF%nE4;xzW2q=U{?&96 zNJb{jZu@OH`KNEb==2TszrypV*FHArXvgssc`A;01roaw9)E(3oU5R(ySAo?Mba8y+=h#+&vaE*?zJ}7QfI;DryE*9z}eZ|2_#&Uxboo??#mOuKHDS{74}TCl5oA;kaZVI zHp-ZqmWkCYY%KKV%eY zUIiMfnM@`G8OVuQdxUXMWg>#j$64~3`Ch~M<#?uqF^KWrl0qAc@eT9+jW`#|AlO1uikp%Hk6XY=|>PmF0?Eu~8G z%wT1-o~|z8kD_diBrrTikkigtJpR8CwN{^RIAMroD@GkuL>sz)%Kc146xoBj^&vSE ziTkR94;}4HJyK4T?Pwm6QrVM&PyfV>CB|{%fIX0mFfGw|!|-UQLnF9z{b<}jX9AVc zM8b3VCqKI6^b5f&{4t}B|DPE8F$so-f^@`pXTrag7GUIlz@=C)pf1Drn*?s3K9bbo z`2(`hbwe>NS&_g@Bi00cblL!Io?6p`g6ccRmhCgBNrWkA6nRuxMfHkZfGHQy4+hcK z4JJN(PbDq)<$*KUaF-QHhy3g;uJ(c8iWcxEu}>>pbwtEhwz2?(sI1@b5#pQmy%y3f`om>l~s^IY{- zQK{$SlNh2Od*?t!$ zYxR(NZRyZ)s47XKK_5Ktx=)asAia_GxcaE}u69Ashy0`}s^0MPbaPawQl{hTbCnT3nV1dha?EYmtPk3yab9Le3*h$xc*;%q=F?FcW%Ex-)+a_Mr`>v zqkOU=OYOFgRTU-1niAvw&6{tG*W=t@P*%D~U#hO-f%B=xRWD||Wi>Zyy9rn0%+S$m zlKP8~Hg@kYKrV%U@rr4+B~1}C+(~|5%aTr2aL@ryeI2J|Nl;oyEMIsy8KDb=Qn3yu z!R>+CZ`vg_t9!TxELJ>OHF-z;?QHcTI1ta+I|ema)->V}4ro~B+h^tEqOd=57=D=< zRyp5oY*o5T9gAa;ZVADDggm^3R{8w>W~?JkzZ*&6@Z{-`f6)H^T5_Hlh1-&NSo%EaHPZ0k#E@du*)3dzL(H?h-c!o;fb@^>E5?01TD#vbA3ugCFF$pCK8(O#PPmgIKbb2oR0$pSXBo$^ z7N>q++;mY@~BMqpp8=SI)hzCw@a zXN-NrLhy_+(}J0W6MFghZk^%b(}z(jXNlba14*r3v8l<1L7x$gxk1^=yy}+% zh`LGvQ!f?GMFoyuLfuj#_F2+66(z%2_e&?DO4N*bYgbR_wT-s7WZDR9vBIRIC_3qQ z9lU$1CPSGKIUovH@SKT|MN#2=?cTQLP@9j;y6Mc^4!%eP!RWeq<&g4w{B$=qS@(<>X z)|Oq$Y9?nM&yVl8`#d0=SZFbR$3K{3hf}s@Hg&PzbFA0gV+12{T$999shZh6vp2lb z8^^i|6uICIoEO0sL>xclPt&GRB$h_EIe=aVSA3o0o8i54}ZTmhaLzIzy z$laz^jomxnQ-(Aj?_zMXnX0-cXyY6iu#n^lx5-8zyIOagMdqPL62$t5zT9me`>d=Z zqusn-SUu$(KKc41z4q7Rf_Fb+s%g+gy|tAx0>9BqPgpJLDs*C3#3eYki5$?Fd#*d2liwaQqex^gof5f_yc^Gnz}X&b0lNLnP_w<{ znSpeA)mYlbT!2N;^8w-xt$~1 zIQFvG{z>b0#EZ1=GF*o@ovX*mea+i}>|G3*yYfDFoL{UtC`9#r4Fso0|84o(OD5qE z$O^jJxcDWhLr{oO1()~kFrQ8J@-E2kl&q?_`+h-#$gn`4%?!zPg9P*ZaapU-3fp-} zHqA3Gr7}S|nqvp`oPQ5NG5edBzeb$?UO;_4bF2gD=wbP3x=^dDtI~`@r;oyO&F`l3 zy#MZwVK6^RV&c>a4$#0EwBAjSqajQkcpHJVg?4BVI>A3Z3 z47FutoFG^ki*J^5Rg_Yc9IKI?lgHXj>fM&tv2QXJ))P}M)`omnSyW}1*Zd;8U{-81 zgZ5s+{d)=D3tANY&Y&F#d@HSB`9M%Wp5|1tey7FP0$v>F5VD!Kc+P!ogf~ zaT>?5>%7l4>a^SDM79_R2zuxjkSgz8F}BvyBTA>#nEH-u*GRk4`lWDBQ6WtmG~pPe z^hUxyzLu(_GEt0Qtqz*r;UhGeaf)*uoQ#;@(kv*uoF1e>hMz*w5RtuH3*MZ4PI28U z6UVqX<5qQ+R-(Y0}fzXn#AL z0#FuC{WL0gAeAkVvDCP|I~oWFw8yuP2`!&61X*~VVYIWAmpB@o9*&$#(y(FWAiZ5q z@QrMf{Y9hvB@-VY*)U;W2lvs5914Yn6=;lM{91}4lrtTu0e6b)0!Ohn&@&B`655a7 z{lTdW`6Y=os{u+PnHdQe+`J_-{=_Ff!=xHsoRWJQh%9f4l+SGH?`8v)f0N;K25dZJ z-r~jEUl)v_LQax1&i=5s`}55;!p3zyD>ABD9(4-w$3ol_ zOuRT?<#@6>rF3t;3)|k=CF{RcDhyFi|m>d zMJg;Ntd3h#PgMeQ20`wVoX!a=#{D=SPF}k=c1_b(U530Jr?z2=EKKY-2dtL@AAj*- z)IzMF86^4=A)%wG)V599R0DdRkLCCqw33Go7$(o+T%xTpl_nD8ow;RL-0_Zz$S)G+ zZ@H|*t|(u5NlxFUZPBl~dC}K4@&+>p5rK2|MSqTo5kT9=Q>S`YtDZ@Bagw07=JO*# ztjh-F#}`HcdF|se<}dHc7Vb#51bhVYb)AuGdqwl~I~KgJk0&biHtGy{npY4@8)->@ zkv^gZT-vQavJ9n0=gaLGu~wqk&}11H)*>CX50=(p$8?mBrVztp9`i9j{jR+D1ovDviT3cm2yDnH**;N2%aHVWU zS+Sm^)8dRiAL)KuD62vj`*^j&4DNzl)_87QinN<2Lud8pt|-Gp?ji*;zV3C=#2xJ9 zB<4g6oAWAx6QtA~-?BQPzW;0){RpsLal9=%{D*hF@xWD4UlG2Ex|1`*fvkdCR>uxOFit=Q4I+;WV)w|e|+q3!T2h(6!lIh z#>w9JWlc+D-Mh==vGTU)-)p;h))ojpBS z{e?aJb{>L^)5G8vR-}4p?`k3w-8?=@?GqC#@5^})nLFq+nVhfTG$QhflbXwbZ05Aj z^Z}LTtw%Dan>5Aw0IOgqE&?>)0Sx8&) zw;E?aCnKc5l?-}0g)i-i)ohVC^oDsYZ`w=iODL~@Ihy8I^M@joB1@WzpyFhan;#hM zl8~-&9?+93*L;U5F`{=RBjRz0K(t;faFkehXOi{>Ql~tyg4SeUp!{=<&Jpnhi=5{{ z$qowgOa5~W6{4v|ff3VDTzW=wsaEy367}J7qV@={MH8PdyR~a%{Q4~`dez$y6{W=&fNC6z?0XF=M*ySePP-Unkxb2~S9+ zy-dmMEv@d4;|+VRP{4hwS&n?DQWVzf!QR(TZbJqRKvnFrd!Y@=VST%DYH=33;8xR< zgtQ5B-P&(kIC_4xu(R^eMf5e!U&yS>rpL}>!jmcFj+HKLv|TZ!GAx3A62PsaO1!^4 zxNWcdvWD9(*Dp}9UBF7e!U!)?bz4Pnu0)sFE(I^+OT$Q+FfHDiBsAfF-O*aHo6S$< ztnBxl1#nP`%*K1XX#$@tnf&L>6GxPVTf?c~+Nb9sIdk_21gGpW|8)|oXaOhphBW%QjON;U-7;X2nI^LnnHsSD`5E-Fkh5tgeA3qlFy_dcsGn&0#or~Z`yzSJdXfpVC?i zC9XMS^d`|79Nk1PF2=0tQxXbEZuLwOG~8n@VgqM%>#+vGUxsg*@{3G5uSp^_ub^H1MrCxD;Lor*ZrFqho-YvqdZ1DsM~g8RNtx5 zcE|#TS-X%*_hIi`1+<@BY;`;-#!)u(`-%W>KEXS(j%A@rO!!Mr01Ce;Y=`Cv$ zxC}E-V@i$Q6>1;W9`S_w{2|od>E2R4mDleg8;176oh!*(^ONl$95eLi)_VJ?2;DS-g9_I zs#iNJp&TOjc#JZ~+7!Lvt(s*$U^I(~ZQd3Ci;YKgf-1P0Z%JKu@`? zvVLm(;p|OOuXF)PMgmfwPe@N_wyF)kr3x(Tu2?6W zj5X;5yqt!naQvJqw7tyiTA}WfKsT2_(KryzD0H51GB&2eqQ}$n9O3flaTyyO&*E!! z3b|A-2>t!w_vzV%mrKO5q9XC=NPO{+BwE)L5CTe@d#d?jTiWF)SE>_)5oao`kH|uL4UwTBeq158dKs*Q7 zEhxGnW*=ssQg-)Egb2MuoC%!r_*W-{V=~~>vdeD$&#Q)%#DV^){yXA}m()K-XZ9H# zLrIE11sQP2RMQiq38V~@hq{P*yY7?6D1YcZOzkndKB%)@CW#)CU~Q(1ep`;mm4Vwg ztAQF!MI6K#LiTX^-~xf!t1w$SXgREFk4T_5O_*d@ywiK4rkQQ!jxHc;)K?0-cKCZ>VufQQ$#5Mwn5PHtx7nCP4!+ z59#ICb2f9SM4WHIwHztC(zNdV)fNP1-@h?hos~`qc<~^peI5Pz%2Y9W^p3r4+w)KU zujTKEC+dIR1`hXLM4O|4gWY;P6TkR->wntf;iQ`p*52p_cN!v|cd#)&@cmv>)9WH2 zRaunfjZBs$l}lkVL7P)(*#Fzt<4W=;N4C1eO#3b)ZQ>zfH!~AF?2TpUiuY<_J4x{= z>#2d&m^4gZIw)#6IAQ6!zM#wYTsgY8vK`4Q7Sq%~t&H9434=WvDQCFNFzxldNF+TH zjjul{1H1mAx!Qo{kmVWNERcjD-mI67}u2QEL;<9-$ zM*9ve6`dZ;c%hZABIVsp1i53R@+VzA=q76hSg2Z!*42{jl8fZazUdbgmKJl&D5q4b zMtPmf^%ab`Hn@pOEcqaCnkHrW))I*Ntppl9IrxU~`X@MX$QNrMCjXH2TL>yUa&G)>FpP`MTwSfjpVl(}srE|Q{X4HEu<QE`sIIi)HiPno&$k3nl8 zZ+4JnhLax06g^WOX@9&lhhrXH+cMi{#$Y| zU|J+dhNg!ELG|Rq_c0@Fvz`$gf&a93L&;oNu2gF?Wj{JG%;%O&91KNaRn5K*62=%L zC<|xR@7t!I*R*xkRqN^)O6_uTpBVjSDbz}Q!K$ByQF3`yUnjcPpm&(+N#Jm_jzR3C zerdi6?#cKozIbhZcb)L!w7L07d}ojmCgl1dUt23zsH3~1Z8k2Wf#C9z+dNjl?B#`% zp6V@CVgg0|LK=6`@t51vH(MzJ6IS#p8Voc}Wk?iu?a8thnt~}zWxgb8{qfh~uzduo ztPnd?{Yb;k0$#KikLh|sLHi5WCQRrVo^&70?blQb#-rP7`7?(;t95)lUp~{BI9`|- z+W#W&han}PTElPbFr=?I^aji~>RCmx@M3}jKijVDwZ*`gmd0d}=*-oH)j5pBRfM-3XyMN%un@1lH6oUC)%w1n zNyth!5wt9`gMKQMDt;>z%fTM(B4j3@jL^RS;enH15LdG)+URc=$^I9y)XiTpMWsIw z?P$Sqhq6wNsi9NB&@PfCpO&1t#D9C@T*gv!2X&zmod-e-by>NXCDzr!{#+X?EPrYP z#ndjtU!=&=@7`s4@_0QCJ|pqh70KqkX}9gCfv?IjBQ5zTvbgDbAmjR8JwIGs6!%)b zi8?Q3pR`TD5Nfp`!Jrh_p3F~d$(B{dnc5O3RZPB(t^}t{4sBox_=;9?q!?xBmcT46<6ooENH29-9e`fzi4WooMYcBFfz_bn{uWvp&pTGYaDovpt{j7?WA}@asRQ8Og!oi5F@5b~VLQde^}54Qy!Ndl&q%_?C&2LG=1Qh8R_lbM<}6w zk!C2s$LD-S#vBK-9Y@CSX*(-u&|h1>u`GlUF_DI496>E7EoK#uc;peCdJf;GgPa+= zt`7Bi)rE*{E-*oPOe)EL?wtF9T3ceA!mf+w@lFi_WId_UEXops^{LyhlaOmIN$*Kw zZLn)Br5R2n_n$z^WP=qc(WRf5*fv<wHkdo+zP@OLkKBeV_up(+d?rtr1d1UtqU zPe`NV-f_hGm{WiEXwuVHTEqk)Kz*f|y$A9-5i2HJ+x0E`S=E=>@? za<*z-Z$-V{C(gSJ^gCiLx^&5uey=H#IrR^eA4Z&g;-`1x81SZfW(6*jCBZbvIC>*M z5^}Xe?<@ZD*RM9^g=QB2S>tkVPv>JMbWhEc7R3GrhJj~15T%<*A37ZOgUPP9ykEwc?5*(`ue z@l-{((*r_2hJgcn1Hs^4kuPF^RYG=m$C{ic>c97c7XiU-UhF*Ep+ZOo zHIy^h=jG#OA~~L#kmfW+box&r;~#xGu=ySgU7-Dc?$cyPvlUFl;6$V&9AC?i3y$gMu0Fw}l9B zjnc}gomUO8OYi6JEy1|)VSveyFENIF{}!B|+&-r*czpvwm&%Irx57!0-6PdcHWPfG z^Lb;Sed%z~3ESaBWW=R@@{p^s{TVrD`7|d$n;6m#yk8Fuy7pT311^5f5 z3a4_hafbOMxy~f`PJ^)Y9|1ru=xH&T+xR zMDp-CLYhCkA?<7de`Nu~c!Db}k4WLN3ueFO zc4OfT|D|X?{LOt0Upr(Y{h_yIX_OeHrA^-niqc#;AW?F!X0?`i!N>;862U-`0}3JK z`V6fQ@kqy36UxI3+3Ty0Z%ZWyGam9^=qt*ngE}!0Lbtl`^NZ>cxL*V_Mp!uG zbba@ZQfsL*en|Y^>`vrBA@;+7Vu_=gA=<%}r*v|#_T}f)NoU7MKp`t^>y;=0^Big3 zk7)U)yxsrG1@1b?cpfMUL?S?Ra#~?}j}cpNuICCQ5paYvz*PfKw;NEGTrSN4m?iE= zjuYr9~OLtz3NuWEX&dKL!J6{X{rGHC0=^3yzcrbak6wmc`N0 zakW_JFimMl$-)nnM5qm=nU{^tBOw;x8tF}LP&^r;1=oU~FD#-!uD2i9BGHPX0j-Ld znqPUPw)O&OCTwQNDSZlDDh(Pj0R2|^doHgfN|VcKEZj@c`FMW}g(ONo2ouS50apnr z;A_J*E(h~91GEn(sCT;xk_eEMz^hfjw z1TWJAdi*asclGy|Dq5%f1<49A{@c%Hp!AL<6Q5}nwIehmgJ$+v9-umEwnz%G!+py7 z#!xG1{J+)2iHECX4e;h8A|i(7;WTQXyD@9@ZcH@*xDoinCL|^%M=!M$Bf1R!E=%=9ceH z1qtMd**zgbenuoYlgmQ?;Heov9J41u^+@_bM<*(oa z#)nRBIBRI@_irXzz}?8aA^Sp)^#*FofZ}%RcT0SRTf@&@&W2;Ba ze;ULcI0+fW%h2BLTKPL-^WYu%dP}S-BlUQ2*Bkyp%?y!4eSwnXMRF08*09NG?=-iq zO%y&)K=?ty)p62|Py37e-6JK2F2P5u6zfRqcJGe(UTI`cfB?^6}SW zWDIu!L*>4kfyeqLadf$_vj-t$BNdU)@tzP+(q8ixE}*wFT_qxeug{msb_5?#$pzqm zB+t^vRDyrGtx`o7OF-_wg!X)Fx~+t1cg5t~0ikU%9AdU9y z#mNjS z4_BQEfZYw|-@o@y&fD!wK!X(qYLPnoX=b=dp#`|E+-G0wGR?Pc#y*AXk~TUY4mxYC zhe=jEr`4_jsoHJPI^7z4w(@)^Jfk(v1C-}ZXOJ`^PTu6yHa#mp&~`7XeIRJC8SQQue;yZsNt&>~ z14hP*8D&DFFOa^NRWaVT8PC<`R~It|Ak{^e7cS&1&uPCFI@u(}h6JZvR)lB&d?WBs z7Aqb_-sf_#@suAPr2NPr3vAnuaNUiUw1;FClz`Wo{sci2hdvc0J)(>CEU_8WE zeec#)oCA%Er?_pZ7X_(Ar5*T^*wXbIs)#{EgshI4HqJhFeHo^OefIR5(M<#(yrPnM zaBZN!&$nep;UORmPUsGqSNSjq*}m?iw{uk0&$JCCGod4kSu%a3TKRS;mD?-#ncu)A_(z=) zF7hNK?DBhC^DAx;eJ3Qf`!JUXNz-vY&8zmdhLjRKqH2yxwX+EL@J@%#nLYdU`xT#( z3SFdz!yrRIclU_lBLu8VTA8lndyL?ppAn`_4cDvtoTZXqd-k6;DcVz9@A0g5*&K&5kcoFD)Zj_`y( zqmmG&9{NAIH0Wq4^Ac-CO_F8Nhr>Qn&j_-v3wHPp&8}| zUQD?tfXEm%tq=t-e+q-cl=>Kd?utAiTwf&D(%h`0A2%mYI)Z=Sdr3`@yCc`2IJhIt z_1gu>($dn#)vdpH23CQiVg;7!w7lPCQN}6TP;hg$Aq*SeRJQmJsffYjv1Aqn6f#^M z_p{E{B#&HLY8IK9R9J*D9DJAxO1C&(EA9hONP@)W0?n`px)lFx7tD-t=lSwModwUhm?Bu}Q6J`zij-G@WVejd5-alH8V#bT@3o&& zE*_t)!Va?7aL%uht)Da``chB)70(q0pWGH7dAmwPkNM2poHTG=4U=-ygtjML7xyB|Dq?_XGI*7+w#x!mO7y z0rX}+Bvf>`rtx1w&;~^^?mj3!2z$FMM$c|zvQd<){Pk!3_cAEC}=>rb?-1C=#L0&Ra0$6|`_g>K!9}XCAC<-k7 z#BYlOf=vv_0vlQdQf&K3|Co8(Ht(=X&HZ>XtzAF-XC9RzZ>uiM!T zym%)7sMzDsxC!KRYVgO7bcDv=1cSS!u0E2#B|Rg0X$>J!;M_(*HGj6pX;2$|t*FV3 z_3zMneEd>rG|))I;TVqMR5+l8gT*D3Ze4)4(w6Dbq}~eM!NCC@l&EI%A@}w5?YZRc zjkyiOzP_8i@cI1^SVQPid}!KWsV9>)*!zr{@<0?IQ!|V{7!DjaEa8B|b^xx&k;BW^ zIq;#N$DTi5T(bGO7$UJ@Y#O+>`3Lm$xD3~q88e2xr8sIA2{%jyZD5-<*>K zDN}PW2{u-Ww+V1h&%?i+o;^>Cu25tk;XsDK{ZU=iJ}XI=5Ec$<0odhy$c@*z=oHj$ z^5+GD&XaSe1D1!U^c=Syxcv9^?VRDxqb~sc?}?6~Ys=vgnx*zP+GL~v=ZC?7=2#o4 z1uT%h8234-#{ufUnNq2nt4sO>KKil1z zAI^EtzuzY*Lh8=vp|XfpgkXVAvI!!hJO}^?Y7x>~R7i~zBe;vFjVWKr57NdLG0Tw* zf9|@#u3DmaTYUjIVw-S3j(HUIT+e-@Sr@|LLfwEpf0Y zx>P3OwKfyp>pJrq+)rGZn?v84Tt6T0_5PQiSCAyA3VsKWyH6os=8f0MfY2O{jarEH;t=7-REUnxy_%;HE*AD^F4j^=H8I7B&3AtSzEQ1&X z{(<1)WC>c_{)NZlp4~3y!@S_}^`1DBo;WwJM#4#J*I>oVx2O2?{niBz+4KdDrBi@t zw6%yQBuzn%_J)Y9Ls$C9bWq$zG{)D4?lC*UA*mkR37qp~&bXG2DYShqlpG>y=TL}7 zz^gd$F0@oK8@)ZO#2>!Heo6sg${+uWIBisuFIWGQWZqmHfWMD~(;ytKYXWu^y>@R- zkeMXM@Twb)2DbO72VkZt19 zUGehxUe>l-`7VE^14mIz4^Qb!$VKcg98Tm;HpIlB5EjmA7Et!0-?N@-pEJ zthVHZRwMC~D=YE9Fh~|TY55Nr?)V!qZOXXJWKf?cV4mHvA=WrjX3B<~27?n%7B#qP zA*|&XH$z2Z47_Rs#x>3|va`I+D`C^PG+XWJDG9Z)(&@xZG+g)H;AwS~3?V?HRVobp zCv|VnY|tjBm6?`aa^wM+tSJxo_l`#$v!TfbksM1+6&31;?>c zj%p@7F5E%kZ~cH#R*WV1JO;e1b40h>;_v=m?ZvmR|g2wZz5>TquCxgT-~ve?Iz18 zuSpj=*=g5TI^XnOk-zrJP$OXeoks>H%{)?mY5H1$<}DJOXADrW(I8dpw%8+A@dl!p z(soQ6VQ@*P!H3U`oX&BU2cmC-X+}HK6anC`JjFcCNQo|J;wP6lz?lG|%+p_mow--KK0fJt@b;87TzQCm^Q6>(=>Wqj=ghm15T48hGb zloxy1PK3in@Wte)Ldv(t3@$PI+*+tl2+a#WM?iC?_ID`OR6?S?WZ3Pf9CZ&<`c ziKg9dhqF$V)KEw2!-o?yBQlG_W_(8QKqeXh-!%XC2GS@lA5PEBMSgxbF9n3%;a=a2 z?;kd;&17Q{c%~MaAQd>&zQ*R7SagPvl}HGbQ{5 z-<`&pZmjyO_Z7&+`7wnU0l64RIG}?!>E*o2=#vc~H$0-Sx*x_@(QUHF?5_pe6@#uz zi>OZ%(&@5p6O48i6mEZ#ntqO|*Q)L!)$$as+RlCx^}p~uiNg#?xPX(G5=1E8iH|9a zG00}}(Qys0WFQx05?R`KyxkjIbnfAJpkEkXK<@Uo;h11uZ>J}yYAv?R!OS3uaK8Fe z+#QG228ty`?23+X)qjB-c>2Kf(riX<2U+y&+u3P?=3 zhd!-(?S@e#uy_h}|UPL1`9&pNQ0rL-_7A{t3ms){K|D<|pfebryl6YjAE63Ng(x zjr2%UA9h&%rl}e=>>~d?j8FJ(e(G|NPe;M+p1zh8EM;vWM`}<2 zBiHe`d`D33vJoU%28B>bc4F<&w zfz+NEANh&h#Ddh8fkm=dL zbLH(t!ATS4T@6}MzDMvKX2^KC1Mof;9M9&ZS|ATG&8IS{p#DRa~6MK`goPz zQX8P-t}~EKM>GwNiEq?-B;$df@wJ>mqGJh(C&*8$R;SB-v2;d`5~E^ofdMNkw^UHU z-&tK`;{(scr$Nuj+d}`9EH4VB{ED3D<^Wlw{>tEP` zx*Mrmpe+(GXhi6gzF|? z;dtu?-WvUduT->`RaH^Z1Kf=tosgS>oESLJHi60v?yY{0$<;!qZF!Uq&(MV7BFnfw zvpRrmxWD>!b5NrIoK%%M^=3vst6si9!dC~veh3V%2h?N@CpGbk|gY+HC9xRVp}Yc6~ur@AgT1Wo=CrIJuQr zu;AQ>-=JJCK?G_$@%#l>$Gp-@Brv5E=AXc){ro?v^lBS1TsH?agHdpMCy?H0G4~78 z0Uez$pb@)Y|BULfpvQ0UJ~9A4O$N3Hh}rKS9~auZo{EZ!CLd4%wVgy$BXAo7Ho152 zfH+6ER6UDZ5WuUPA66k@RA?{Qh@)GD>O;U6MtwT6?qu+2a#sMYdVw6l^%S()_#A)j z#({>C_;}KhIrzGHp2#jC@KE9WXY>Va8x^W|*FW_-e0kxy0o+=54RmywF}#;Ujq@g$ z>BA8P1q>kV-vr`Gl?PKW2|s@LF-tL;{0A3T-+a6Un#8W-t1I7l9JbUDUQfCiK1cKNWW|sD_RTiEwi*9U0@}PM*mb38nuFl`N^?=* z&Ny(R!@nrmLM`|_1A!R)MLZdhe87imT(#H6yylHjm6A~c7+0DhCm^7r0s_SzAi~2) z843rDoTw+c_5mRKe!|Vo{jaQ?f-~K?gY-m7cFCSv2}OCkxJf^7^8%`__n56ec6Wa} z&Bizq0+~+W$v4%?rN=iy-j@968 z294)ejqq{XgePRxZTsb0j-Bh0u?%i_-W@N-No@D^zbTt_H-JD6+ z%*_qJ-waZquj}^CasyvN$V5caMU(G;;c9Xn+XILcYJt`g&K(C1Q69h@Kb_Imuy#08f~#l$ zvu1)qA;{_f18>8v(V%JZvg7}!LE*1=T-~yX0h%RGuWKG}xSba3k%d-037`MlB80!l z9JSv&03S;s; zH;~O+o^JN}g7+_FuC=2>9IlXDXmlinH-F$FRG~HBC%`&M%hc=vKKoz5N(ci#9e#hg zjQe;M^cV$VV-ieKu954EX_g2^JWl0tl3P4MG55CMt4`pR2Ggk66yyOeuYvXCxG3-{ z2qZ_fVC@v9!l^WD=E{sYIQ!?e?A%-|A;paRNyrBrn=o}a#z%p?U1<+~y$T!K#si|c z5q)-F>epT!Eg_Xb>!N0F#@cjc01&T~80X;nISY8|3@kL5p-U?=ykrLKr9Z8Ph#`7S zPULXguBXs=k@PRpbMdp5e0>NLTVn#fWk%!}>!+~EN`pt8pv7=_FHFb>Xab0bxP~dE z3E&bxejAX5x`3?$$T@c##ksk0LHQDtvy>uA-k%#av0hxE;rl=nO&t@5tkU0WLoJX>|(%?YnDwMkVRMKnbw2xZfSxO7;MXJSZXX-QznTo3z&*GWBBm8x~I*KHpkf*_ipT!7BkX zq2ZJI+jOu;bbm;LJj+xS2D(ys-z%ma`}? zpFeq4$I;c<`2{$+n?D>|xQ#W@#e|B+M$v(TDK6;p*biO=EydeEoo+v+4_8|G2`$ZE z<_EHz{Gn|(@n=C)FhQmAy_{&Wvv3Y7jYh_x!h*%*I!$qyRsn4mBlyncLqYQ{J6>2d$2-H!RB3N_eX0n62J zY~{TQB^T&~N>G~hjq*$L)fgOz=0^M@I!i5j1+|u*Ua6j;W z0kO=!&MQ4Ms8Vv?fnQs@SsS6t!Oe0`NefxjTxZ)Q8bfRXfsc2xCb!ShTCeQN#fYuF3YqB>stmA*$gBI@>KnUjTv z^pTUbOC3<7KM~~+_BL?=EjCdbmn?FZghvoYWNH=#&Px6re4=e|48jK9clQUTg)P2! zt<(zd^@4Mm$gj79O1U@sGa*hVavPWxW$dbT)FzRW*dey_THD7$B(GsMV}Y2CpkUNE zINRel4zFql$*V!{jvpVm2arlsp1r%P{4)~W?Cv?O>xI~EAOjqb9~#bE=l(d!6iQ+= zkH&-c)$k9p$XNQ|0G9M1P(R4Di~j^6l8&FN?&n6os^KIQAn9wVhX~#jfc_q82_Kr-a4wQ^;;kPfPx@`D4mK*cS=f#sDPAocXxvl z3P^)WO9~<&Eg&Tw(%sTXw}7N@=kj~TIp_Yyxc85H_t@^uK=`b+-ZkGjpZUyZ&ey$U zh06^5&DW+QMHIm+b#0U;x3ckzBrLHe{IMxwC~ukMPfY|?Pbkcg1$3G=?iw|Nt97o} zG_4RogOZeKBj*FcdP(v2QdE~0vkFrwrV(<6%dZYO<`R9`rl?z+XsD#3B6PX+F??k> zjnl9km#*Lfsq@Yu_0cC)z9Or3GT_wfC9sA{18-mcs^r*$kA7HFNyXYgDm}>u2QoZZ zGa_ZH!e_8|{ENutg4@Q_Pz1q}#P(IhVg`MC{Mnbr$W#?)Zggw@EMFcOHJVD1QGunKWs z2<=A7w;jCL`nn1XEBOKEwYVZ+?s-khOz$A29}zCc(T$ardN^j@%zFAe6kh;|CAm#| zFtD)57C1pFVP>dCkm!%WF~y>9pf61L8m|>m0=`WR;4=l3y5(UcblEp!IeO`3XSo+P zGdUFZ9BZFrBOaRTlh=U{$g4QKPMptH<$WX`KfVGG-M&}kQ2%6q)gAr{ycC^yD~m7Y z?M@?I)QFq^jUbDRtyX21OKvrPh=6w*4AtRZ-m%E2x{ys>qonhK4BoFgXm)wHJ zKbt=Xr-TQSjj8H+N_;Pc`?d>yX7z=m=meXt{-(;HX!>TVg`@j(@-lY4$>UzhoY4ng zPJ1syF~7-j3B3<)njpTEs2)lq@nL`0dzQKri)Xw~Gpjv53nhF-NpsCIVX%y^CM2>! zHK&9Z&aS)cL1;BLTpF;`_CW{bYj=wu`&5l6Y@(L?se1prWsb;TTiSm(@$I+kE0Avg zfWymQZT>7@fWxvcpBl0CdTB= zppUGi4|B}+^Xx$Sgbzw%|{PMKEJ>%Q9Y{m+vv@qpA1AhncHU+X>lrNNkKlcK` zge`&f0y@iH7-r-u3^Y z1DPWeMLt_C!-;#Yp~9aR{@Q^-&rLY__lN1L&W_!G>f?m4Y+vN~_s&?>hbAVp0HskVNTf(o z;COpk>lCyq7T;Am-+QEf=p0|xvMsJR*-%ie$B3rSr`-Q0j)fq1O77MWkwZi+xmFzR zxk`ydkn$&57|5B?6>DE|?HjS_(@ILX$(G|%QzPNm!(l<687yC_qA73HZ%|>~++B%O(L3D3QJ??PDi2QuNl@Dt1t6_I2x!pE?{G|n2ReJK9B5Mk= z&wtTbB%(vc$E5AKni(XOfiE!&CrC9S!2PFP9aW_8?m_myNSBxvkS*f;zxzI8ZC^$?4&LaOj39%4V$z*n(X%%TI{ zowRSl#R_cV-|OO5)X)fqES6&Cbovln6een@0wp_&j-|lbz$qDpoXp!qINJ8D;I#KM z-OKNZYkzgTyIA=1jn?_$U<|UNc;o-9FzU%e)SD&)eweX*4g#`BICK3Ju7HK<$G}P@ zYFm;d9$M|oZGaa2L+&i~3k3uyIE#^5(Q2|M_BQp!TWM0Si@qEPX9=TV#58{bv445m+} zPc5HcE%+EcU#olxoF7tf{k61&j*pLjyFt%uR}&`<{n;SdMVy}X$FwfZLYcT|4dx$z z$CE?6gXgYolIz$VTCyyvUdewQhWpJc1z!SdMs?ZFPvpfP4(AmGVs>3wC8e8xPY;)Y zB#Fw@TMHf4M5#n2pwgq~?ZwFi!!heTEz6Xpcb885ekHJ$;&Ivcrnz=oPR>~HWksoS zoy%jdq-UV+=S2ZYUjGk%nYx_u`wlou-tQjE%t0Ows(eZg8de}U(ZwFc1a3(a{b@D z;d1=-1gd|{y9+-OM13CM1^U4mSW#_lPo{k?yzC}Fn>dxBJT0i|>1Ndp1XKeFE<7j7 z|I7v}O;6cl`PL>dREFCF_#EpaU9)XS-9}WmpE%(u=C&8u%2I7(3vvztV!u) zs}9@Wcc%8*SG;=lD)6M#B&97v#pS=V?rWkF#YpTchs9mRHEOywMHCI^0tyfHofte@ z0y)1wwyv4{K@zRSe0X7lSDk=G}t@#D#IOWq}s zO<5h-IDLCZeM6>Y(=)dOlCSc#9f{KT4Wn)w{buZnhb}Sq?9Y51dg;6*mNI;zjj4-Q3evkHCw|7%tc@#Ki^U(4&54G- zYqfUR;GysTGYJ1`K_6y>(#SqjnkqKBg4wjq&5Mh935@O+u%!pz{pSz8d__`F5{nP& zYpE_Aj+7at=MH$+V{JuRt7?Aqo9j1bQa!PyS{Xj`QcM_@%dVsLA-kaW$DhCEf`=L{ z(7~xscAIYh?y-l3jlHY+vH8|mO~vIf)$8J%DRDU|gfZi7jCngJ1MD-Kq7Cz@c$e&# zeeZeF`@i7z(NnQ?>Z1|N)+n%H@W)Tz65b-wtg!!hzk{Y{(HSQ#tJ;@=-kc|f{Z@<_ zTUOWF?Sas#x@yO+u8Th;sDiZ{ohCXj@1y?ERW}8zX3#Y25&IHLV9oU`pzPb;(ku(t znRb)Q+tJ9CqdYTk)H4poHR|~Sqx5h(zE_d%^*1^$<#jY}DJP{;Hni;#e2*}3Cj zPhfe6slp@DiBJMd@ddTdAkBfjE90+ zkJjcc#AqcYrFn}#=-)|D=`X8rj@oj#N_8g=M-AOLtW1cHTZq$NhYNdpFk#lk-oO%w znU@R>uyy#ToBEU$7R)2N+^!kU9YqRU)wN&kG=}WZ(z0G0Rkfl{bZ;vw+ukkDey!lM zou_uV9i}&)sweTbKeA4zKNz2V@h4#tOK~4lpICMFl4z#}7LDZ8kk-Ao@7~eih`$KU z#pr8_l=(Y?zT&rD|BFaP?i_2s@u;pV<5Avt)OBUH!&C5Hy*TXO6&6ouWn%ksp3}?H5lmIPnH~RLJkXpL+*8H5eRZei>1}v_8?PM;WzUPo zsLrhZqM_K8N?!K6a@`a@ zOZe~p;55U62FU7+np;{_1Z?>dE6;v+K9!X<-dpPa4u`ga`YHwkhqz+EdaUTxyStCM zTsMG`8E*`_ahH_S@Nz;z!hziSYS7OwJ*GReic(%p87r830hGqn!1XwIQy}C z^EC=ppEI&2-_+?owshtY%-=5i4fnJ|^~{y3zOeQrB!*e-H&9-C!)kh!$uA(EDAvsX z4*VVIHOwm4%?_xzB!IRG7?=AfxUq#0<^p{O%J5fr1xzpw`&eleo{AQnHU?}@3xRs+sNOC@bvZTSALhZ zXy#|0o>f0x9tPsk-o3k!cUY#*65nlFuI6Vi$n4`Oh^cTXUc!qB#lloLd3?94sU>6+ zj~?gz5J$S<(WX{;eDVXiPWFP^fRZ74h^b?u~=#qZ0)3!s3dG@77(8cIMtx7XKa*^p#5` zzc6#+KRz%fYoL}p=hs$f9ms!-M#_CV7(Z&e)PCfCCgG1z)=#B)_vj=|r*OcC$s!Z| zRP)pukVp%Ebdb$fQ>7IRPj^{M$NuZ;p4dAsJf$jUMf2FoYrOx{= zDX%5rcI_z}CnqORxRuGGe;?4%wH}mI@nrR?{V?ZIt+eyonc(8^9dXkPl8aWBJKwoy z?;uFDcX5b=mz8d3$WQXA^tU0lm!5b|jDn8{Rk~l_(F*#E1QyN9$RB8FgR7E-g%k7X zqw5YS)YYn&-o1OryT%69`#29MtLbbM+=fG1b2&~&~zxZpeTO-)VB@Xks7A-jW>n1D2|ER3DDoEbVF_ac??kmSlU z$M1wbH4$~X@ssJVZzncA4Q}ZzX#<-kscoRnl5S~5zM}Y5urtHR^O$o6atTk{5?62 z@Ahgp`1s^)yt(Bfj(&sH`j1sgeuWCX!-nUaujvh zK5i>YE1H%?nH9{AMrB?mJzF8Anped60&yv}eSvNE=*Zps{MfAac!>fY`;r(~T`o(p zlHU9G?-is~1g0|{Umq#d^Xaj&t6HVAty=wj!t~*=g6@?&De9z+&pt-TC;Eo@POekj zW>wz8hOlXC+8~#$zI4gviHjf+t*TH9k?V#WJ(?#~{_AVa0mlS4^xyI#@NXzsZRB#l zIS*2CLHZJS)Fji6fm{x}i9g+2^nVXYBsB zS3;g&D6>z0Mf#XgrgyES=@{Q`s%r5pF%R#_A$*L}iH+Mg$Vlfu(tz1`>011LEvM^q z2$OpXSt$Fh$x2@7tbX%*sQu`&{ll5NO2VBo3n%g!oN8nIs>*WeVpCOYB{&^p?nNkE z4qN@J6Q-rh`AQ*10gI(qx!SsP!CVi%$f3d!E^Y0H<89lfRO4{#dOS%Qco=!9`%wruCH8}h;)*pxF(_HkYMxJX|WjZ!2pEKUL_svrGXUgISW-Pwd)nt6O20-UQ zo{L(iuY;ve)f!GTV(PZFG>!)e=QUD@OtB&`p2wRVyVq~o|6Xq&5R5bsQdRG{enk$Q zBVCQcj-*gAnV~ps)B-+fWInd!h6Gms&Ke;qr7~qY6&$IYj&1+fN1r90P{v1!dx$S` zK71RPz|==}yJ*+7qmB8G_3t0x#}vitns-cxPt?>+Tej>6*co4&kM}%-1-q2}993b` z8B3lSl@Q`GbRdW&^CsY7gRY_nOLG%3d#3P=bk8Noie5N&9a)sQd^mdtwt4!O9!1(; zeO!7T0|P5GH}^xX-_<2{28huw2DetAQ$6x?5#Q(2{f3sP2HTvZN{XMId%`uvZ=Ion-PeVotfQ#D-z>j))EJ0WJ~W6?z$#eRHYadw`%UcGgJi?>>$| zReUohpuQUMsz`GCS7s8=$hBFcM?~OnqTBS1lHp`ThT@&g=>?SbXtl@L_}7W#UkS`B zgaopdvO%S>;Hb?Ns1LCPljY#ZTRC%chT!1fdvtU+iHTdedxiZ5SNEmJ0?K(BAJju$ zQ5~58`P607wLcdWsdhqdnsQcdQb<_J7RAYo?ZDO$c(nLQ5_5o-jZlYMvqK6NaB$WE zXBLDS?(6yG?ob@81pXcEXsdcVUeJY!h=@oS*bizFCHGfK!0?nRh168GBr)XNevob( z#U~e|p^+GKz22o;e}Vcxz=E$|qYJvMDKENb$t6SHwZrpbjx_{x6P>MOV%#MU zD_K=*xj@gUGThE}87(H?=b1@T((u-&AxnV!^>fbiS%WwA`}+ANQ&q*K0100vGr^XF ztrPxZ!R{jz&!J>ns62k_2>j_sv)+^xQ}*wl=c;^}&HfTUSFp^qp)&i6{xT-PuVw3A zrOR!RpKm-0eGkMK9~D%hCpHC(XVLbpJa$|c)5IXh;yb=!Js{%-_#7*B&H)8bke$nV zj05q50|Nu7wzjs}ow+6!z1qnI^sDTOSJ}IcbKYeHEXL^6iMwo{uojOUdzuYe{6&%o z^Zg7bSuC1!@5^L=*Gi{9!e{p53!l9CI&LkS$QQoY8RrDG@#pI5PYeubM)iC|G&D3I zJMYt4B&2?hJAk2WSzNLnPgbKETK945@YK_cZISQF?hUm4XV(r5v1@v@4IVN+I^_F! zuk`9|mipVs=Eq81Qp8EqEi{Anx8~N?-=LoM%#}@lz*8@GTW)z^NiGAypHi}9Q*rPQo;N(N3lixC|o zbyhFRat3>7aA|wB#n;8|PEGhr$03Om9mGx!ZtkcDUMHv`w{6{Wr`iYhbuIRSV%yh0 z9+ZbqG%RGo6TP1mA7!uqAaWefydjA}QCZ|=#U9gh8q#62!b4tFjvGU(gP5lPwU1Li z_z{Xl{DY^AV$bb#>cKfYzS@a(F#3XUKTc!wW$j;5)aZW5-Z<+3i|ds~i>fF0{0XQG zEjQ)?xZ;=5{Z(acw6j8uJV&{I9SW(OlnZ*Qw=5j3#Bwx)cD2(QE>1Q?GZ0FDztw6?NEfNjm)z(#3Z#vtFm;w#MvhZJsL%&LljR({iAp1{-N{jzP1U;%t9-=2`oj`?EeB^z+h7@z*FN7WmkaN@ zi_7bOs2^VvwtxCU;%t37Tw9OH8t-=((LKqdL0Y!vtWjD>z-cU{f#?wm#O;t9k|Eg% zzKLU^`Z&3@X^~iEXUXjfs-i%iqN+8(v)Y}STWze3y&%oVnZt|VuCV5;Cc@Fs4xo=s z#w7a(5e7Z^WBE-kYyOEi*|`f=h&3KPd*S%wfbOSR@%jbZIzBkcqrfrJph%C^odnoyeVpX?LHz^l}^Kd$C0D-Iz*_<|fw#G|gplw_EaVf6!FlV-7 zHIH(1C2P=LSLt#N=hw+lFxREWaQn=GL~>h!Z9^TzV(db?+OJx+@?6SSZhwdtt*b5$Jn~;YC1%*8jQtbt2ap`vf}Ztd2?~W zB1rDhq3M@ouGwtQ2$x`Fp?l$$TXDzzbhkLr{qu`>p>ULQZUB$B_FHX|?pWpIQvI*2 zOg9Nq#(Y2H1QM`U*4LMPyJM6Nz8)5~Y|WY*XoOe$Tu){(`P0E77p=~@S|;plaV7ns z<+S4pt6Wxkvt?FkW5n=k^RF!0A>*`%%J}(y;ia*=-f$G6Ye5^XatYDnK zdkz6)bxE_~cGvY?_=B-IIahy2l;U3B@l5Dx-Lh9w{)Y=Q`tkL5GM-h4_S4V-j=P+A z_NfJkQb{;*Tfb!KukFZW`c)qLo=n9gxt96vz+>xmP80;l#ReKGOA(9af9op4Qi{j( zep2vl(CtfeXqXyZz?b-oq1P|vQdjwQ=D9kCF!faa(MuTaVYd2HvS?3(QacDT`Q?F) zJ29XNw^7k3H9Dps*n)Zg#QhHoUB%T3_XN zdwEY8%LRh4csN$SMgWHJ*gWTD)Pq>(Cnr<)32Xi?xozIRSTqEmpw0N597U|P@hg!T zEC2JUn~v%OoO3r6#wV#O+?+L+4A3wOr%rqMlR|(}@V`R35`(Xrdw?AP*N=UIUT-Sn z!COwyLfl~;!PJ?#(ayOC8&a|Ut(@Ydz-{b0OiCxSGNE?fI06F0bhVfKAJNKY64hbN z%q{MrtiOF9#n^CWiXew@oN7~0CV3&zDQz#}y->5p{O5UMHLZo2lSMPuTghcH_wF_jE3 z(#5kmeEjN#>?K7U*h^Z|R%pVo1&8OH^FJ;thp3Hi(SzgU@DYh(TMz0loEsS}nMfv# z{khUl7Z$oHr7UM7F%J7}~j;$Hox+MM8kqlHAMZ84dihiVw zCIv0AkZ1B6y#AYKz{}vf(4y%(Es2v9HRX)Cbal{WtytTtw z^zc);wB}uD#;ek-_sa3|xG0dN!RMuiU(M`CxmeLWmo8>6jQ2WjkqnIA8MF{kF*WJ= zQZq&wGQDdMCd}SYy_o+B7=H;_&xuF8*11qY!s?&=XB2Cb7%zV*3kW%N!As{@by44x zGcD{wJVzpj4>jpPZ9}=b6F*T4F$GonYb>sgNm{saBLS@L<8O{dF$!_S^$RV;->BG{ z(*|!^4`f8o>#bkk>D*O94;Q4a5iV04`6;ApO(QraDUn-`Sy%p_D?gWZN+%>V@teA; z`7mD#S!Zh@?Vy&qdu&6ust4QOr$+2dofDYza_kO7H2d?N@mUd9UkY>_;G|O@IVAw! z@EzHVpYC11CXPRHHO~aU?@Mc3O3JR5g6ep8_5H&5`=hsJcXAw2QdzY9`OnO~V$PC& zcM}1Ay2mH^=ZFaT1abI;W`lq<(kGNC6MC8=mu|LGn^rqlae=vWPhxMMpyBF01+k*` z$e-*_tar%jvSO6SI9FYqgRWZcI0Pb|(g}HY=}Gwbn3`0V9}RE3pD{h#>dw{vy?BeF zgps8jjU(IWUd9PMzV*PU(Z^n$Z&8`V5Wo1236$3VOcXt<&-KhN5fNsTPL6=5juKt=AZn5lo(+ZIaqCDh%%C_yQwk~h=v>PB$ zVq~gb?aU*L`N^R+#sFu^luYCl2>{{LbMlwo-Dkl-SL+ZbV3E)8;j=R@ce5?3p@RO` zqQ0+{m_MRXx2mD8eWpluN#p!tqtgfyiT0m&X^FxMF z0B7fLIOTS!$e;;RDuS}TD}lQbO1ubrhLEPB7iZkS>{;zB?_wr4wddT#dCVl|u&*qT zsVXFhYhJ2Z`k_OhK{Na_m)wv!)HAxbgjJ1~3|#nk2Q4eUsZoypvGmg&t+=q$cN1hR zn-GB1QcUB|Be40MFLbBf4Z#YDg6HXs@?ZpDL;|NIti>HMznGfghI!Q(cupR@FIvw1q^!^KP~bD zwIlsEMfX&zFAJ@7q9gSxpk|bF2=-FJE5=gnJ-e_UIrA0c60$+T-{#Q5bqJBoKMrSf z&hGV!_CogeP(lK|eA<&4n%FqJy<;My-o0yRA<+wK(6`ULCFsm>ar8qJcvV8+!iREYIt^V(2* z{$c@ec|eXsn>4j)Pf~Edx=+cYRA?M1f05X23MIq!O>bK{Ds(Hx@|Km#s+c?XxTtI7 z0=ws+K%r#ol6Eyz;D+rdhI;TRXj1Eqcm+`WHzk4%*CWP43>k8yuGR)36DM#7DWqH;Gg#|LACHl0W|} z+hAJqaa4`X=&R*06Fdd>_3Lh#8Zc=FiptK5CGbtij)h;mJxL#asDDq=4I>#X!X{wg zC6>j4bh@}-gM4ViC;Foef#Kjf@y8OmsQJ5Rj4UMx!?TmaEI zzRJK-_O;&%i}7`1zR;I4EHdRU(Bu5O6K^B(HavHTq*;Bj*VkFEQhO zd1Q~2v0=tkGZ3oe>-{~?w)HA2oObM3qi?h;99fx+7WweUOQ2zVIKlnILykN53aCI_ zfL0D)hZ_5zFa9D_Q7|n2c){9+gTn{mjzE8?QuA2u!g_<&6oG271??EVQW@`{*`5^&4ZzfE#`aelt5OlO({GGYz|M>6X#>ykDlOUQyJk z$5$V}N=o^2=MfT@C8O@3=|?$4U{mKSG3iOG%t%9_R|3lca~0i|%MyR==?>(=5<%pU zoHFJt)9NCB+0XSvvY(LOI*l@12eD8I9t2)s$O)06Gnt+J`;I$6P&#om@*Qp-SMh(p za}ChTr?z|7k)L;$gTH!u=J?Z2K0&F=Q{n|OA6X55QQ73~V=NNzzK)6^2s=-UAr|W| zJw83X^fonBURgQX`3eq=W^+410-s$eG~O>$x1oki`4t>JNh61QO~skgOUcWsDIVDtoDyK*f!J=4m6QG zOVS8=8y3F0C7edBph)O5=K;?j(j|wKVxft?pY@rlDlzC+jN0GRf|@xB%3l*ilU~qjjqKxZ zHb1{Y&lA)tn*6Z|+@bVTxfrXZ@WuNIZ)|iltXwZ#D>yXtE5lJs1k_;quWoB?l$Q?eu*iiP`_^cGq5a^aF_POwumXRTY(&(tR z6D|%hOPX4t?mb#shfy83U7$&SgOH-weRsZOy1KM9T4<}nFD>o1p^*`^x4Opg5Qhf9 z;}j4OxJJt1 z8xnH$R<9h}s0fV{HpC$5r`uzDTw4|T}-L|xC zPUMmWi`}-TEqi04qjyHM>~=w}8;HnUec|G9U>H>c#%5+EAcFr|QUWG$X%?Q`1V-ht zXji-?<2J=7BEk>@bpTXIQKc4xt*i`QpbtHUCP5A8V_Q!3@wWNWLd(T<(-%sUm0SNI zRBoa|m}-yaabU_?(YQ5#vYc(r!3fh-n$6E|E;j4KC1&yu&X0_)VfwAV)X}8!IbI|I zND4r}jVd%K=r%9!@PRkjG6?GgT{l)-^IHrBmLr%!K?V1N3v27 zn)k3#6mRQve-x}fw2B>5Mf>)(BY!rjt~-f0K#YpG?_hM)HaA~}tP&1 zZ*P^0_&mM3l(%p3)6>%@=`@n?x?H!XyM56vebFw55s*+sR_dfb(s}w6Y8DaQiTBmU zC0H03R`Nz`fcFM{Vq~1IXYkfkH32DUTXQhMRModKO`Di{6;~(|V)au#MUDCLkU#6L zHsr19h?Be0GZR5}23466Rek;2U?`$yA3$u?*x2}mvJT`G!2mg7f2yF@!v-t1o2e~f z>l`T15dvRJao_eH4Go$vST?*$T})i^%gS;U_WYF40|A*&J-O&01jt@!A?$={7nr_- ztH#^YHMR}r#>V%+>WUsbPfV!5DIS1ej)t6<6ifDwHG!D3iz-MOh8@%!`a?IeZMt~%un_7^wwYml@OQZ z5W`l*0v^%}hDR;j_W4<2ynquOQc=|C9EP|ImeKMCmtw5u#eGDB>fzyGYw_k9StCdl ze!!TFaZp@kJdP|F=y3m>oy`EdQKQ%p1AdB-h-mohH}FP5tu$z9J5?}}?i~yrc%Piy z4gU1$vu7qyVuW!t0RSD6ooJRo6iW=8U!^VAt502au8BeRBV9i zC1@~Ojk$&&IB9wC8lfIie8N!=I$7GCfk?blUs+qHb=3k5;d1@W4emkj!vEtJ*3!o4 zLGbpFR9*~;;z7hx|APF$3F5S|z`^|^W6}fO{m&OgIp#DX^@zF$6a?WqVVDO!LfiPn z#3N%ZJ71QLWWiXIo}d^eK|F#PF6Aec(V)-KSL^ix%5)J^wpa8aD=pXq2fVUkZd);j ziATvl8`}%7la$Yz6cVy{S-L8>ZKzo|fkiHVzo1Wj*$64!bGzQrF{p>TuV%)5kgbJ# z{y>k7dIZtS0RxP3<7as!ybc8L>4M(AoCm5qltQjyAZ;pgT9zxQJ+V}?KZK5BF7v+I z6W?q)L5cuq^g1G27&l9W=w&;n{Zsz2q$EBirFLQOp_w(GR*aEqZrKg#f0@R04TMekv>|D z=fNFD#$b?Kha!G5^1(?Eh~QHXrhPWh<)ozz!T!$<3Vmq#`Q!clFB7w<&$@Pl5{gv7 z@!pLaH!fph4ixH%!sv|^!3%JegRqgWVP49~$wAtpY)7ql$aQ`Gx*(NA^h=jKAYntQ zlyJ>?s06{DC5vjmECyvSL`@Eo5r2Pw4&yd_aMnw)GvIQ2km+;n#_13ekJG8W041UIa_3G9B_Dm{Vq;l~TOy=#|w_;*qCmMj7HocG_O;? z*x*!4+ea+Ipz$(jdL$u!BHjcVPUvBBt4sBdp`7QHTUG0zYPkXffArAC>U>0z(3|@5 zH#X#K7_*-fZSRPRrXt!h@aKbB^0(M(_LV?4i$bOYA-{{*Gz?8OfJwB-2w*XjLs!th zB)}wKuvwr2ls!g1eY!U=IH&;<%%8h3SB1;8i?np&i;s!b`|V0-8;=FI7XVJ`Hv)NJ z)pp=dMUUuC{Uu;7il9Ff+CzGt-Jfbkn3h_vQ`A_6!(H&Li_qPn5Bf=M$97s_Xl*QG z@`LUDW^r^3!(7qYgyU|(-1e!@56B$WJEN8IbZb7q^wJL?b19nOfqU!vz#9tS=`Fao z-;14SE0dK@WvfCiYt7R&FRWA|44U3J!1AIY)4{j_7mO6>$bh!!*2^8VACb3~VUX~> zJ9p51p--i{Aeq;S*r+wkLFWQ^78vR#iWmu!L8?_DvjjlJJh)k_nj3?R4v>_RLf?Vz zQDl}WAa+jj@Pe~AHk}T@a?MCnDNMip!CF4q2*^SEczpN~_Xxx4ct6cj{Y05Y7Ai^8PVZrG=7Jw2v# zjR62%2uRe9%?|(XpatnfLfVxPqd@_NXajepUTpX%zY}~zy1^5iv}`C{*WPAez=~>b zhQfF|GNu?tDX+zT28;sR_a+I+V+#vL#C$OQ8eGn`7tSnmfnF(?;U&jK)MCramx_Qn z^E}+zyn23a4p?5>eJ;TE2Ta(N035OD3gE(9rQn&YtTToW3XCY@(n+bJ)|7eYJLzquI|9e`!m=GJQ%5DM_?Hm=<^WN@*Ou&KHfVptvWO%LK;EE{d z4cEM9G%J3+mvM)xI%v5-+BvtZb`aSP0T>$_n}&(0!)8DVP}i%DH2r#CG?jv%5UzEq zoO5(`4?N2c$-`TRTV7P1jz53(N=56*g?k=6&)C=))4~jD^gaDFLu7;gY=qF3KD-sA z!360d0+3WVa%^5U!Su@Ag+RMUr4E?e6=y*{yXg($d+3)jFovrj{LsAgyX=emG$Y4D zEl&!k16xy+V@)ip(B-z88u%dFsqA5hp9QYTU8nQQFW040vU4jf-8x zbAJ{b=O@q}PN>#{4sq}A;S4vZkVlKR>n>_X#2LhZ)NAYRZt3ma&dYazpGRg*t5ikF zbCX{4sUpNvcD>}bJ`xV`92Y9`;7xsc_JtC8JySp;^Gt&=4VlXM8S1uHaG5!t4;byLT`7wnx$LA$|nH zND1T=K-D%uh*jFW7b6NFM-B+6yHa7u7z+fs;ZpD+Glxg>reOTV2cT2mBL4@KaEZ|m zymRPqtN8syT6!L~?kz<32e8$wMh()N0*=2@zp<#sZ9~>1;C;rAOe6(( ziUU5ANzdy*B|oJSoK+Y(ZwLaYpikc)fW=qX{XjUjLso;0G}$*pLvcKK5qLcdu({st z`ha0BfDBAUP=xfg__iJy79S1r@Zh&;g@h6Tv%Lq$1wJc*%j7ByQUBt4996|ddMytE z2OvV&y;88jJV4f?GZlk8?(}yL#Nz>djVv!Qn|2%Auay@&qnibUHU?c!v# zF8;n9HFOUc!+Q~i!3Jfuk%%|XP@JaBpK1JGBvZ53OWjA0Fs@vucGh|*7c}vYcZcc) zbWGcAq`N1d{ROM~?BwNBPB?(h;2+7z$Vda?4$w9)=5=lZP{dC`FyE~`&|CJE+v#Cm zr`FEc(u41(e={a7!hf(7Ddd3s*z|}ojHWvKEpu|X9a&c=3djvmZR6%kS69BK!0Yt4 zZ~MYZ)5)iVP1(B1lt6Y1MGe1x^H0FL{mulfFJR4&PrsqO!AhXk5doW%YYGIX4)g{ElEH#25Gx$zHfp_wLUIC-1yzEdN5lH$ZUCtTR-$Ukbt%a zI^Qac2;@z}sCQo7rVZ_qAYiY6AE0Go3IV4(ylW9)o+6hb{M6g~0R))5uT21>hwdj} zOkUQ4u|CIUNJ^=in+Y2n2>pRvHFgA*!Z;L6F)1lb*gtOI#E~T7>}VIES0JiFjY1q$ z-dfYhw*gt}GG@tT-DP3vD$BAI6Z2IYts_WhRFYOyRh5E^0t<%JE+y|;IHJvhy`vDo z2b1Jz0AwO8D^N~zSIExPGFcLtZj23#m|<5WD(+mpLAoX&4zA zqO`@+@Y9vl)#KNKY+B6Pzyyk=H-G9A%ti9cB$_sps+GX?y^_%An?jhA-iK7s@ay@eK*1*L)6&5I=fYKs0&F>y-}n{ zE6C^EH_Jwmkv+(O#S9UoP7b8ZP6BcLggfZ|clY)dU=U2!_wPv%h=GA2Z)|FM)xkE( zUVHQ!E*KRXD+Nh5q_?K9p9+NEM@1b2)6=4G0YYpox=go50!Td|mTT&6farBJ*Xa%y^4WlMUX(aT!4xLq1c_UAuz zss8`sO;7MM`rAPH%^LdbJ}PG&xf1fb5koFbZ#@fqfNnq@5HeHZ|IS?h-@dr@8(i-D z=xBe)b9^q&ttU!zibH>KBVh)zpU3w09EysHNM4?o$5PG%0#Br8w$ySs1Xx8RO@%g% zNrc%#>KEwf=s_VNhQMBoZMv580LspgPklfdE`{*5fM=g)3bQVjctUsqZMAF?f4__D z+PDz7gbv_Sq~Lsuox{T{@Fr&f&kFXW8DWqsBVJM1ffGc5Tx<;roj=eB7(DpL;Ph{@V zJ$m|u?QMAoMMxmvcRJ4)a@qU~-2n@*8gy)Ico5)Vme5qssZ#RDCl=QCHy;@Er$6e@ z=g0;gQEPLu@;RLFAqQ?S=ll2Xt!y9UNd=v=k$$m`t}bOrf>gjiKL@<`<qa==F-6L*IA(`;@I36Y2e=!R1Y47k*0XFqxL_;IdchExu4QU_4mV)F6v;RQ&b_5qNe?y9rkK_d=( zHt^Fq2xwY8@GJxP@+K$D^ADWNkprP22R5n%;Bf_3jjxgz7#KOw*ibp}L}zpwfW$Be ziihAA(@_VIcvdAJW(wv%)zG{Hir;29S*38R?!tTYMPSoM*hWK8(5EO?u4NV#)k9kY zQKyPDql&tE_P%G0=2zoj=5C-0iPE^ZxT2L}F7z$RG-JTQOYZ@!%LNV+y1t^7q>-Mh zF93>c4^QBvh4eRgRBN6yHy`A}Mn!nEGVpi2z=x=z7!Ee5AP81e!Ouu+htLEvc{a*Z$8wY@i<0Fy5`S>6_c>=q{?>I zcJhZ0Yo0#9^yNYfub!%d{k8^SVt0eas~LRIu-?UqTDcLttr~J(OSsLo35s**WcZH> z#yF#$qH>2jU@E~=d3iUgLCdmFSy>Pr`-5orbRIo=gp!n$L>0lv7HhslEh^WwpaTXQ15t%fWzQ|hrJxpHzI+`QHxusM_JER@SPFW3v@IY{@3$|hdv5vuYp_&W&QJ8IJ5&rAS2D+Rux>YRnFpNl#!uD zOS{hRFb|uwX%mOwwxHmL$;nA6rkHII1g|9v}t59}(|rutJdlNpd0IRTZFzr$UfEq#IcPB3?pb7IsTCC6L-P2skH_ zqnebSgEN2w@VJ%9hkJW>@7!r*PJQH*ZRU&27@c(NWQDpvc8#t)+wfIR7SB2cl#Y2_(fqUXVM<>r?2cMEW~7x(y2R;d$AC^Yz8+?Ub0o-y>m-?Wt~w)Z zm1$Qznizaidso-5@cYyH`z!t7+Eq&?FlFmIjLAR}I_J%a7*LaOIm}Cf#eXVz6iUbH z`ydTG!-{hi6F1}D@83be!4{vCjz3?acK1bMAW$I#-)yu-cfmk`68i1s9|QNZrn#T@xC1$&@&)ho?TuJOijH7LoQg^>(02my}czLKb8@BA#QCA z^URzbghncz%%EQJYG!>^yZ08V z)G36PJWk-rN4J%FQ>sCvl*?jN3S>UGM6@Sza&*vjws{Od3Alde+~vkb2_#3BM(_j- zK0_)ana491=Yid(PMOHnfJyWZ46GhVS}!qQ>*(m{vz)41a~7nM%Odz6yA2&4D^ZZl z1ah1a90CkRrh=Ej<^m$5+@d0m@`PyC@uS@Z6?5}!&2ro1j`ntk8u%z}3j_egynUNC zlBbaY!;SYmYcLMigoAIxY z{(={lW}Nvl_#rxz_C2aE5NT9Y2FpYOD`=GT{sIpcu5&LHP5BfFrp(VgJSwZ;{*>L_ zE09nKr0Bl|>|BOI>Kf8;aejV|L`+Ml(RP@YRAy>ayXM2-zc|QhnP_QSHmS49KJ~6e zqNNR$xV;4A@dbi&hdIv|a7;N!Z*8)hVDcIS{%Sa-N>wUDQ3u9YFu}ZH)@~pKhTGoV zRZ&oQdleg75%|w6CN?%#nGz&$_CF#)UN$^^MhfILOeRpJD_$Eb&VcJ8k!1}yl>PHd z_ivVr=YbbUgLc2@c4H+-D=ne#&{ifCiF^>$bN}A=00;2ji!#9A((1VK52L1!M{)iK zt+Iw){{R0)Dhvl`1{zFxVIK-ynNT#Qo>9x_F9IkKxd&ZVdUw&%AXnqYz88RBEA>BR z4>20a3}!Yq)1hodgs-EZ=mh?NOxT?RL^pYSUXa!To5LzDE)MLuJ;b)CxHvW1DHuT( z92tpZyNPzS2{3MRv=TVJcgPq8*ro)~Q% ztKKDqbBDtG=nG^NWEi+BeXfKjPoEmVq65Ah^#F_pb=e+ZK7t|9hNXQ8jJgXG2uPEj z!u?BTynwXm2u^6z016AxrQzR`12f!K*yzX|0|r5cY9bxX(D%I)S9jLJIt94}Qf`IN zA%OH+LM)tw5K*uPV=%+0MLr-g3((OkpfNb09|uwaE1h#-V-gVZ915mDsUrjLbzV&a zXuzs(3_v6{4mA)?MPTIV6)39cj~3{3rHZD4H3dS>)x!$#>F+i&*93`)0I(c7S<8z6 z18c@9V$n=8K&eX7v_t~|R6wbW79$%JHa22X(Mn95oQmDaLTZeeL(riaBbW7je0;oM zU&w7s*%uZmN=Z5g(55D!GnZd&H`G1=xg?DMqNu3nHUgmYxQd6T3XfX3PMQV>*$j$$ zy#bzE0hf$RQXsj{7% zLUIks3_<%@6klRE?Bf|179O7Hp`jtmL4-PmHcn)a2GTDq0co^Wr#etLHWQ@|HS#ht za8|_om>3K(m<_Vf8lC|G8isnnc9DRBFg#9~_ZujYA`~zPzC2bw2C7#&E~e@tn-J-5 zgUz|lYdgsg!!%&ZxD)eX0(j6*7z$W(oOP{izK~tN0UYK8f(F1%k3n4l>^B6DJXNdw zy)`IE0wMGZG#v9_rE{POpc4`Ko3wBsEiE0-XG0E1%qzx;E-Gil1oHj~$lTy5rJp_( zFC49IZAF8!>A#Zypxf4D0&qJ>#2+mN46F#vRKU(_|A6=<;JOjN{uh#3U)5ZfG8S(z z58?g3hu0|h!hlsX@)No7Gn$NQ#(}vTLP31HuItl*j_T|W z7`B9*OJyJ{D{BzYpj0?{3-|*6DcfbhD@ITPg5pqbOph@aC(yabkuu}fOK`&BJhCQq zbeO(i@jH;k^aFkY*)7EUR=^T+y@+HJGPKpH>ie4cu~1aR2aKSuPO2b4;10 zSGlNv>z)Xu3kwSiZI@vcz`ag$0VD&JPRo|n5>O~e_4-2wL>p3SL@@FD_l>~3>Xkb~ z`F|Ngju}kX(uOKII9fm0`rR()`Q_8|P{slcQQ$w+0#FbJUkk>FLY)!jF26$V1p+xV z_tSu?dCRgr5r)Hq3%T>)K?;P;OUQ^EM0lZEppB%-KQKtN>)|cH>;~t~7qImZkqUG! z?m%Ekgm>SUp9v4LCXo@X6s`m5IsbF0dB6rhPEdem?{CGSgW%|JQ@u|ZfpsK@UHm%vsaXJw+`5p3?pK~LWYdgN!0`~f@l18E8{oRO8)1iV}+ zpyc9EjCv?FPsUma?76_?TRzuapan*tBo57hl7Qc=q_%H?psPCnKFHvnz54GEw{(1UHPO?Bk|MmX`TJ0*7 literal 77582 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

-?~7?HGm6(IUnhKl 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%0Dgh+|6$eM%xG^>M2B}# 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 d{J*hkF5)nc=JuRK`D*VL1Q* diff --git a/docs/basics/comparison.md b/docs/basics/comparison.md index 75041a9c0..38d8194da 100644 --- a/docs/basics/comparison.md +++ b/docs/basics/comparison.md @@ -48,7 +48,8 @@ We compute the performances of one agent as follows: ```python import numpy as np from rlberry.envs import gym_make -from rlberry.agents.torch import A2CAgent +from rlberry.agents.stable_baselines import StableBaselinesAgent +from stable_baselines3 import A2C from rlberry.manager import AgentManager, evaluate_agents env_ctor = gym_make @@ -58,8 +59,9 @@ n_simulations = 50 n_fit = 8 rbagent = AgentManager( - A2CAgent, + StableBaselinesAgent, (env_ctor, env_kwargs), + init_kwargs=dict(algo_cls=A2C), # Init value for StableBaselinesAgent agent_name="A2CAgent", fit_budget=3e4, eval_kwargs=dict(eval_horizon=500), @@ -78,32 +80,36 @@ The evaluation and statistical hypothesis testing is handled through the functio For example we may compare PPO, A2C and DQNAgent on Cartpole with the following code. -``` python -from rlberry.agents.torch import A2CAgent, PPOAgent, DQNAgent +```python +from rlberry.agents.stable_baselines import StableBaselinesAgent +from stable_baselines3 import A2C, PPO, DQN from rlberry.manager.comparison import compare_agents agents = [ AgentManager( - A2CAgent, + StableBaselinesAgent, (env_ctor, env_kwargs), + init_kwargs=dict(algo_cls=A2C), # Init value for StableBaselinesAgent agent_name="A2CAgent", - fit_budget=3e4, + fit_budget=1e5, eval_kwargs=dict(eval_horizon=500), n_fit=n_fit, ), AgentManager( - PPOAgent, + StableBaselinesAgent, (env_ctor, env_kwargs), + init_kwargs=dict(algo_cls=PPO), # Init value for StableBaselinesAgent agent_name="PPOAgent", - fit_budget=3e4, + fit_budget=1e5, eval_kwargs=dict(eval_horizon=500), n_fit=n_fit, ), AgentManager( - DQNAgent, + StableBaselinesAgent, (env_ctor, env_kwargs), + init_kwargs=dict(algo_cls=DQN), # Init value for StableBaselinesAgent agent_name="DQNAgent", - fit_budget=3e4, + fit_budget=1e5, eval_kwargs=dict(eval_horizon=500), n_fit=n_fit, ), @@ -116,12 +122,12 @@ print(compare_agents(agents)) ``` ``` - Agent1 vs Agent2 mean Agent1 mean Agent2 mean diff std diff decisions p-val significance -0 A2CAgent vs PPOAgent 213.600875 423.431500 -209.830625 144.600160 reject 0.002048 ** -1 A2CAgent vs DQNAgent 213.600875 443.296625 -229.695750 152.368506 reject 0.000849 *** -2 PPOAgent vs DQNAgent 423.431500 443.296625 -19.865125 104.279024 accept 0.926234 + Agent1 vs Agent2 mean Agent1 mean Agent2 mean diff std diff decisions p-val significance +0 A2CAgent vs PPOAgent 416.9975 500.00000 -83.00250 147.338488 accept 0.266444 +1 A2CAgent vs DQNAgent 416.9975 260.38375 156.61375 179.503659 reject 0.017001 * +2 PPOAgent vs DQNAgent 500.0000 260.38375 239.61625 80.271521 reject 0.000410 *** ``` -The results of `compare_agents(agents)` show the p-values and significance level if the method is `tukey_hsd` and in all the cases it shows the decision accept or reject of the test with Family-wise error controlled by $0.05$. In our case, we see that A2C seems significantly worst than both PPO and DQN but the difference between PPO and DQN is not statistically significant. Remark that no significance (which is to say, decision to accept $H_0$) does not necessarily mean that the algorithms perform the same, it can be that there is not enough data. +The results of `compare_agents(agents)` show the p-values and significance level if the method is tukey_hsd and it shows the decision accept or reject of the test with Family-wise error controlled by $0.05$. In our case, we see that DQN is worse than A2C and PPO but the difference between PPO and A2C is not statistically significant. Remark that no significance (which is to say, decision to accept $H_0$) does not necessarily mean that the algorithms perform the same, it can be that there is not enough data (and it is likely that it is the case here). *Remark*: the comparison we do here is a black-box comparison in the sense that we don't care how the algorithms were tuned or how many training steps are used, we suppose that the user already tuned these parameters adequately for a fair comparison. diff --git a/docs/basics/quick_start_rl/quickstart.md b/docs/basics/quick_start_rl/quickstart.md index 8b83aec11..516ca4214 100644 --- a/docs/basics/quick_start_rl/quickstart.md +++ b/docs/basics/quick_start_rl/quickstart.md @@ -17,8 +17,8 @@ import numpy as np import pandas as pd import time from rlberry.agents import AgentWithSimplePolicy -from rlberry_research.agents import UCBVIAgent -from rlberry_research.envs import Chain +from rlberry_scool.agents import UCBVIAgent +from rlberry_scool.envs import Chain from rlberry.manager import ( ExperimentManager, evaluate_agents, @@ -26,7 +26,6 @@ from rlberry.manager import ( read_writer_data, ) from rlberry.wrappers import WriterWrapper -from IPython.display import Image ``` Choosing an RL environment @@ -59,8 +58,6 @@ env.save_gif("gif_chain.gif") # clear rendering data env.clear_render_buffer() env.disable_rendering() -# view result -Image(open("gif_chain.gif", "rb").read()) ``` @@ -76,7 +73,7 @@ Defining an agent and a baseline -------------------------------- We will compare a RandomAgent (which select random action) to the -UCBVIAgent(from [rlberry_research](https://github.com/rlberry-py/rlberry-research)), which is an algorithm that is designed to perform an +UCBVIAgent(from [rlberry_scool](https://github.com/rlberry-py/rlberry-scool)), which is an algorithm that is designed to perform an efficient exploration. Our goal is then to assess the performance of the two algorithms. @@ -288,7 +285,7 @@ iteration, the environment takes 100 steps (`horizon`) times the -Finally, we plot the reward: Here you can see the mean value over the 10 fited agent, with 2 options (raw and smoothed). Note that, to be able to see the smoothed version, you must have installed the extra package `scikit-fda`, (For more information, you can check the options on the [install page](../../installation.md#options)). +Finally, we plot the reward. Here you can see the mean value over the 10 fitted agent, with 2 options (raw and smoothed). Note that, to be able to see the smoothed version, you must have installed the extra package `scikit-fda`, (For more information, you can check the options on the [install page](../../installation.md#options)). ```python # Plot of the reward. diff --git a/docs/basics/userguide/adastop.md b/docs/basics/userguide/adastop.md index 89d7002ce..c22ba79f7 100644 --- a/docs/basics/userguide/adastop.md +++ b/docs/basics/userguide/adastop.md @@ -1,7 +1,7 @@ (adastop_userguide)= -# AdaStop +# Adaptive hypothesis testing for comparison of RL agents with AdaStop diff --git a/docs/basics/userguide/agent.md b/docs/basics/userguide/agent.md index ee7de57a6..86f66479a 100644 --- a/docs/basics/userguide/agent.md +++ b/docs/basics/userguide/agent.md @@ -7,11 +7,11 @@ In rlberry, you can use existing Agent, or create your own custom Agent. You can ## Use rlberry Agent An agent needs an environment to train. We'll use the same environment as in the [environment](environment_page) section of the user guide. -("Chain" environment from "[rlberry-research](https://github.com/rlberry-py/rlberry-research)") +("Chain" environment from "[rlberry-scool](https://github.com/rlberry-py/rlberry-scool)") ### without agent ```python -from rlberry_research.envs.finite import Chain +from rlberry_scool.envs.finite import Chain env = Chain(10, 0.1) env.enable_rendering() @@ -37,7 +37,7 @@ With the same environment, we will use an Agent to choose the actions instead of For this example, you can use "ValueIterationAgent" Agent from "[rlberry-scool](https://github.com/rlberry-py/rlberry-scool)" ```python -from rlberry_research.envs.finite import Chain +from rlberry_scool.envs.finite import Chain from rlberry_scool.agents.dynprog import ValueIterationAgent env = Chain(10, 0.1) # same env diff --git a/docs/basics/userguide/environment.md b/docs/basics/userguide/environment.md index 4afaae1ce..96dd3a12b 100644 --- a/docs/basics/userguide/environment.md +++ b/docs/basics/userguide/environment.md @@ -7,9 +7,9 @@ This is the world with which the agent interacts. The agent can observe this env ## Use rlberry environment You can find some environments in our other projects "[rlberry-research](https://github.com/rlberry-py/rlberry-research)" and "[rlberry-scool](https://github.com/rlberry-py/rlberry-scool)". -For this example, you can use "Chain" environment from "[rlberry-research](https://github.com/rlberry-py/rlberry-research)" +For this example, you can use "Chain" environment from "[rlberry-scool](https://github.com/rlberry-py/rlberry-scool)" ```python -from rlberry_research.envs.finite import Chain +from rlberry_scool.envs.finite import Chain env = Chain(10, 0.1) env.enable_rendering() diff --git a/docs/basics/userguide/expManager_multieval.png b/docs/basics/userguide/expManager_multieval.png index 2ceeb5ff23d524f1692e41a794af35f6762e0725..92dc25586ae264246aa5e9dca6f504884f6620b8 100644 GIT binary patch literal 17938 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

@H5Cs%^vkcWGA#B|cbRq(0b9YG^)!c&@e&?W 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 OitI_H6KThcuKYJicKWyg diff --git a/docs/basics/userguide/experimentManager.md b/docs/basics/userguide/experimentManager.md index a68008d1d..03e04af61 100644 --- a/docs/basics/userguide/experimentManager.md +++ b/docs/basics/userguide/experimentManager.md @@ -6,13 +6,14 @@ It's the element that allows you to make your experiments on [Agent](agent_page) You can use it to train, optimize hyperparameters, evaluate, compare, and gather statistics about your agent on a specific environment. You can find the API doc [here](rlberry.manager.ExperimentManager). It's not the only solution, but it's the compact (and recommended) way of doing experiments with an agent. -For these examples, you will use the "PPO" torch agent from "[rlberry-research](https://github.com/rlberry-py/rlberry-research)" +For this example, you will use the "PPO" torch agent from "[StableBaselines3](https://stable-baselines3.readthedocs.io/en/master/guide/algos.html)" and wrap it in rlberry Agent. To do that, you need to use [StableBaselinesAgent](rlberry.agents.stable_baselines.StableBaselinesAgent). More information [here](stable_baselines). ## Create your experiment ```python from rlberry.envs import gym_make -from rlberry_research.agents.torch import PPOAgent +from rlberry.agents.stable_baselines import StableBaselinesAgent +from stable_baselines3 import PPO from rlberry.manager import ExperimentManager, evaluate_agents @@ -23,8 +24,9 @@ env_kwargs = dict(id=env_id) # give the id of the env inside the kwargs first_experiment = ExperimentManager( - PPOAgent, # Agent Class + StableBaselinesAgent, # Agent Class to manage stableBaselinesAgents (env_ctor, env_kwargs), # Environment as Tuple(constructor,kwargs) + init_kwargs=dict(algo_cls=PPO, verbose=1), # Init value for StableBaselinesAgent fit_budget=int(100), # Budget used to call our agent "fit()" eval_kwargs=dict( eval_horizon=1000 @@ -43,17 +45,37 @@ print(output) ``` ```none -[INFO] 14:26: Running ExperimentManager fit() for PPO_first_experimentCartPole-v1 with n_fit = 1 and max_workers = None. -[INFO] 14:26: ... trained! -[INFO] 14:26: Evaluating PPO_first_experimentCartPole-v1... -[INFO] Evaluation:..... Evaluation finished - +[INFO] 09:18: Running ExperimentManager fit() for PPO_first_experimentCartPole-v1 with n_fit = 1 and max_workers = None. +Using cpu device +Wrapping the env with a `Monitor` wrapper +Wrapping the env in a DummyVecEnv. +--------------------------------- +| rollout/ | | +| ep_len_mean | 23.9 | +| ep_rew_mean | 23.9 | +| time/ | | +| fps | 2977 | +| iterations | 1 | +| time_elapsed | 0 | +| total_timesteps | 2048 | +--------------------------------- +[INFO] 09:18: ... trained! +Using cpu device +Wrapping the env with a `Monitor` wrapper +Wrapping the env in a DummyVecEnv. +[INFO] 09:18: Saved ExperimentManager(PPO_first_experimentCartPole-v1) using pickle. +[INFO] 09:18: The ExperimentManager was saved in : 'rlberry_data/temp/manager_data/PPO_first_experimentCartPole-v1_2024-04-12_09-18-10_3a9fa8ad/manager_obj.pickle' +[INFO] 09:18: Evaluating PPO_first_experimentCartPole-v1... +[INFO] Evaluation:Using cpu device +Wrapping the env with a `Monitor` wrapper +Wrapping the env in a DummyVecEnv. +..... Evaluation finished PPO_first_experimentCartPole-v1 -0 15.0 -1 18.4 -2 21.4 -3 22.3 -4 23.0 +0 89.0 +1 64.0 +2 82.0 +3 121.0 +4 64.0 ```
@@ -66,11 +88,11 @@ Now you can compare this agent with another one. Here, we are going to compare i **warning :** add this code after the previous one. ```python second_experiment = ExperimentManager( - PPOAgent, # Agent Class + StableBaselinesAgent, # Agent Class (env_ctor, env_kwargs), # Environment as Tuple(constructor,kwargs) fit_budget=int(10000), # Budget used to call our agent "fit()" init_kwargs=dict( - batch_size=24, n_steps=96, device="cpu" + algo_cls=PPO, batch_size=24, n_steps=96, device="cpu" ), # Arguments for the Agent’s constructor. eval_kwargs=dict( eval_horizon=1000 @@ -90,22 +112,23 @@ print(output) ``` ```none -[INFO] 14:39: Running ExperimentManager fit() for PPO_second_experimentCartPole-v1 with n_fit = 1 and max_workers = None. -[INFO] 14:39: [PPO_second_experimentCartPole-v1[worker: 0]] | max_global_step = 2496 | fit/policy_loss = -0.0443466454744339 | fit/value_loss = 33.09639358520508 | fit/entropy_loss = 0.6301112174987793 | fit/approx_kl = 0.0029671359807252884 | fit/clipfrac = 0.0 | fit/explained_variance = 0.4449042081832886 | fit/learning_rate = 0.0003 | -[INFO] 14:39: [PPO_second_experimentCartPole-v1[worker: 0]] | max_global_step = 5472 | fit/policy_loss = -0.020021788775920868 | fit/value_loss = 171.70037841796875 | fit/entropy_loss = 0.5415757298469543 | fit/approx_kl = 0.001022467389702797 | fit/clipfrac = 0.0 | fit/explained_variance = 0.1336498260498047 | fit/learning_rate = 0.0003 | -[INFO] 14:39: [PPO_second_experimentCartPole-v1[worker: 0]] | max_global_step = 8256 | fit/policy_loss = -0.016511857509613037 | fit/value_loss = 199.02989196777344 | fit/entropy_loss = 0.5490894317626953 | fit/approx_kl = 0.022175027057528496 | fit/clipfrac = 0.27083333395421505 | fit/explained_variance = 0.19932276010513306 | fit/learning_rate = 0.0003 | -[INFO] 14:39: ... trained! -[INFO] 14:39: Evaluating PPO_first_experimentCartPole-v1... +[INFO] 09:29: Running ExperimentManager fit() for PPO_second_experimentCartPole-v1 with n_fit = 1 and max_workers = None. +[INFO] 09:29: [PPO_second_experimentCartPole-v1[worker: 0]] | max_global_step = 2688 | time/iterations = 27 | rollout/ep_rew_mean = 57.044444444444444 | rollout/ep_len_mean = 57.044444444444444 | time/fps = 888 | time/time_elapsed = 2 | time/total_timesteps = 2592 | train/learning_rate = 0.0003 | train/entropy_loss = -0.6261792600154876 | train/policy_gradient_loss = -0.001418954369607306 | train/value_loss = 87.49215440750122 | train/approx_kl = 0.0018317258218303323 | train/clip_fraction = 0.0 | train/loss = 31.3124942779541 | train/explained_variance = -0.33643925189971924 | train/n_updates = 260 | train/clip_range = 0.2 | +[INFO] 09:29: [PPO_second_experimentCartPole-v1[worker: 0]] | max_global_step = 5568 | time/iterations = 57 | rollout/ep_rew_mean = 85.19354838709677 | rollout/ep_len_mean = 85.19354838709677 | time/fps = 916 | time/time_elapsed = 5 | time/total_timesteps = 5472 | train/learning_rate = 0.0003 | train/entropy_loss = -0.617610102891922 | train/policy_gradient_loss = 0.0007477130696315725 | train/value_loss = 66.27523021697998 | train/approx_kl = 1.8932236343971454e-05 | train/clip_fraction = 0.0 | train/loss = 21.402034759521484 | train/explained_variance = 0.46521711349487305 | train/n_updates = 560 | train/clip_range = 0.2 | +[INFO] 09:29: [PPO_second_experimentCartPole-v1[worker: 0]] | max_global_step = 8640 | time/iterations = 89 | rollout/ep_rew_mean = 107.29113924050633 | rollout/ep_len_mean = 107.29113924050633 | time/fps = 946 | time/time_elapsed = 9 | time/total_timesteps = 8544 | train/learning_rate = 0.0003 | train/entropy_loss = -0.5820738852024079 | train/policy_gradient_loss = -0.008271816929482156 | train/value_loss = 279.90625591278075 | train/approx_kl = 0.005026700906455517 | train/clip_fraction = 0.03750000102445483 | train/loss = 192.93894958496094 | train/explained_variance = 0.00014603137969970703 | train/n_updates = 880 | train/clip_range = 0.2 | +[INFO] 09:29: ... trained! +[INFO] 09:29: Saved ExperimentManager(PPO_second_experimentCartPole-v1) using pickle. +[INFO] 09:29: The ExperimentManager was saved in : 'rlberry_data/temp/manager_data/PPO_second_experimentCartPole-v1_2024-04-12_09-29-45_77245043/manager_obj.pickle' +[INFO] 09:29: Evaluating PPO_first_experimentCartPole-v1... [INFO] Evaluation:..... Evaluation finished -[INFO] 14:39: Evaluating PPO_second_experimentCartPole-v1... +[INFO] 09:29: Evaluating PPO_second_experimentCartPole-v1... [INFO] Evaluation:..... Evaluation finished - PPO_first_experimentCartPole-v1 PPO_second_experimentCartPole-v1 -0 20.6 200.6 -1 20.5 286.7 -2 18.9 238.6 -3 18.2 248.2 -4 17.7 271.9 +0 108.0 500.0 +1 97.0 500.0 +2 130.0 500.0 +3 166.0 500.0 +4 81.0 500.0 ``` As we can see in the output or in the following image, the second agent succeed better. @@ -136,11 +159,13 @@ eval_env_kwargs = { # kwars for eval env (with wrapper) } third_experiment = ExperimentManager( - PPOAgent, # Agent Class + StableBaselinesAgent, # Agent Class (env_ctor, env_kwargs), # Environment as Tuple(constructor,kwargs) fit_budget=int(10000), # Budget used to call our agent "fit()" eval_env=(eval_env_ctor, eval_env_kwargs), # Evaluation environment as tuple - init_kwargs=dict(batch_size=24, n_steps=96, device="cpu"), # settings for the Agent + init_kwargs=dict( + algo_cls=PPO, batch_size=24, n_steps=96, device="cpu" + ), # settings for the Agent eval_kwargs=dict( eval_horizon=1000 ), # Arguments required to call rlberry.agents.agent.Agent.eval(). @@ -159,12 +184,13 @@ print(output3) ```None -[INFO] 17:03: Running ExperimentManager fit() for PPO_third_experimentCartPole-v1 with n_fit = 1 and max_workers = None. -[INFO] 17:03: [PPO_third_experimentCartPole-v1[worker: 0]] | max_global_step = 1536 | fit/policy_loss = -0.0001924981625052169 | fit/value_loss = 34.07163619995117 | fit/entropy_loss = 0.6320618987083435 | fit/approx_kl = 0.00042163082980550826 | fit/clipfrac = 0.0 | fit/explained_variance = -0.05607199668884277 | fit/learning_rate = 0.0003 | -[INFO] 17:03: [PPO_third_experimentCartPole-v1[worker: 0]] | max_global_step = 3744 | fit/policy_loss = -0.02924121916294098 | fit/value_loss = 0.8705029487609863 | fit/entropy_loss = 0.6485489010810852 | fit/approx_kl = 0.0006057650898583233 | fit/clipfrac = 0.0 | fit/explained_variance = 0.9505079835653305 | fit/learning_rate = 0.0003 | -[INFO] 17:03: [PPO_third_experimentCartPole-v1[worker: 0]] | max_global_step = 5856 | fit/policy_loss = -0.008760576136410236 | fit/value_loss = 2.063389778137207 | fit/entropy_loss = 0.5526289343833923 | fit/approx_kl = 0.017247432842850685 | fit/clipfrac = 0.08645833283662796 | fit/explained_variance = 0.9867914840579033 | fit/learning_rate = 0.0003 | -[INFO] 17:03: [PPO_third_experimentCartPole-v1[worker: 0]] | max_global_step = 8256 | fit/policy_loss = -0.016511857509613037 | fit/value_loss = 199.02989196777344 | fit/entropy_loss = 0.5490894317626953 | fit/approx_kl = 0.022175027057528496 | fit/clipfrac = 0.27083333395421505 | fit/explained_variance = 0.19932276010513306 | fit/learning_rate = 0.0003 | -[INFO] 09:45: Evaluating PPO_third_experimentCartPole-v1... +[INFO] 09:36: [PPO_third_experimentCartPole-v1[worker: 0]] | max_global_step = 1920 | time/iterations = 19 | rollout/ep_rew_mean = 44.146341463414636 | rollout/ep_len_mean = 44.146341463414636 | time/fps = 687 | time/time_elapsed = 2 | time/total_timesteps = 1824 | train/learning_rate = 0.0003 | train/entropy_loss = -0.612512381374836 | train/policy_gradient_loss = -0.004653797230503187 | train/value_loss = 75.76153821945191 | train/approx_kl = 0.008641918189823627 | train/clip_fraction = 0.03333333339542151 | train/loss = 35.162071228027344 | train/explained_variance = 0.3032127618789673 | train/n_updates = 180 | train/clip_range = 0.2 | +[INFO] 09:36: [PPO_third_experimentCartPole-v1[worker: 0]] | max_global_step = 4704 | time/iterations = 48 | rollout/ep_rew_mean = 79.20689655172414 | rollout/ep_len_mean = 79.20689655172414 | time/fps = 804 | time/time_elapsed = 5 | time/total_timesteps = 4608 | train/learning_rate = 0.0003 | train/entropy_loss = -0.5940127298235893 | train/policy_gradient_loss = -0.016441003710982238 | train/value_loss = 154.39369611740113 | train/approx_kl = 0.010226544924080372 | train/clip_fraction = 0.07500000102445484 | train/loss = 48.81913375854492 | train/explained_variance = 0.005669653415679932 | train/n_updates = 470 | train/clip_range = 0.2 | +[INFO] 09:36: [PPO_third_experimentCartPole-v1[worker: 0]] | max_global_step = 7392 | time/iterations = 76 | rollout/ep_rew_mean = 96.08108108108108 | rollout/ep_len_mean = 96.08108108108108 | time/fps = 826 | time/time_elapsed = 8 | time/total_timesteps = 7296 | train/learning_rate = 0.0003 | train/entropy_loss = -0.5620817124843598 | train/policy_gradient_loss = -0.0007149307257350301 | train/value_loss = 89.1684087753296 | train/approx_kl = 0.00030671278364025056 | train/clip_fraction = 0.0 | train/loss = 26.46017837524414 | train/explained_variance = 0.4496734142303467 | train/n_updates = 750 | train/clip_range = 0.2 | +[INFO] 09:36: [PPO_third_experimentCartPole-v1[worker: 0]] | max_global_step = 9984 | time/iterations = 103 | rollout/ep_rew_mean = 113.64285714285714 | rollout/ep_len_mean = 113.64285714285714 | time/fps = 832 | time/time_elapsed = 11 | time/total_timesteps = 9888 | train/learning_rate = 0.0003 | train/entropy_loss = -0.5782853797078132 | train/policy_gradient_loss = -0.012480927801546693 | train/value_loss = 27.679842436313628 | train/approx_kl = 0.013762158341705799 | train/clip_fraction = 0.04479166660457849 | train/loss = 3.8429009914398193 | train/explained_variance = -0.32027459144592285 | train/n_updates = 1020 | train/clip_range = 0.2 | +[INFO] 09:36: ... trained! +[INFO] 09:36: The ExperimentManager was saved in : 'rlberry_data/temp/manager_data/PPO_third_experimentCartPole-v1_2024-04-12_09-36-09_da4411b3/manager_obj.pickle' +[INFO] 09:36: Evaluating PPO_third_experimentCartPole-v1... [INFO] Evaluation:Moviepy - Building video /CartPole-v1-episode-0.mp4. Moviepy - Writing video CartPole-v1-episode-0.mp4 @@ -175,14 +201,23 @@ Moviepy - Writing video /CartPole-v1-episode-1.mp4 Moviepy - Done ! Moviepy - video ready /CartPole-v1-episode-1.mp4 -.... Evaluation finished - - PPO_third_experimentCartPole-v1 -0 175.0 -1 189.0 -2 234.0 -3 146.0 -4 236.0 +....... Evaluation finished + PPO_third_experimentCartPole-v1 +0 500.0 +1 500.0 +2 500.0 +3 500.0 +4 500.0 +5 500.0 +6 500.0 +7 500.0 +8 500.0 +9 500.0 +10 500.0 +11 500.0 +12 500.0 +13 500.0 +14 500.0 ```
",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+R+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+R+"*(?:value|"+I+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+R+"*name"+R+"*="+R+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=T.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+R+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(p.matchesSelector=J.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){p.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",W)}),p.cssSupportsSelector||v.push(":has"),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=J.test(a.compareDocumentPosition),y=t||J.test(a.contains)?function(e,t){var n=9===e.nodeType&&e.documentElement||e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},D=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!p.sortDetached&&t.compareDocumentPosition(e)===n?e==T||e.ownerDocument==d&&y(d,e)?-1:t==T||t.ownerDocument==d&&y(d,t)?1:u?H(u,e)-H(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==T?-1:t==T?1:i?-1:o?1:u?H(u,e)-H(u,t):0;if(i===o)return de(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?de(a[r],s[r]):a[r]==d?-1:s[r]==d?1:0}),T},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(C(e),p.matchesSelector&&E&&!k[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||p.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){k(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return Q.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+R+")"+e+"("+R+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function D(e,n,r){return b(n)?E.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?E.grep(e,function(e){return e===n!==r}):"string"!=typeof n?E.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(E.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||L,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:j.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof E?t[0]:t,E.merge(this,E.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:w,!0)),k.test(r[1])&&E.isPlainObject(t))for(r in t)b(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=w.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):b(e)?void 0!==n.ready?n.ready(e):e(E):E.makeArray(e,this)}).prototype=E.fn,L=E(w);var q=/^(?:parents|prev(?:Until|All))/,O={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){while((e=e[t])&&1!==e.nodeType);return e}E.fn.extend({has:function(e){var t=E(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,pe=/^$|^module$|\/(?:java|ecma)script/i;le=w.createDocumentFragment().appendChild(w.createElement("div")),(ce=w.createElement("input")).setAttribute("type","radio"),ce.setAttribute("checked","checked"),ce.setAttribute("name","t"),le.appendChild(ce),m.checkClone=le.cloneNode(!0).cloneNode(!0).lastChild.checked,le.innerHTML="",m.noCloneChecked=!!le.cloneNode(!0).lastChild.defaultValue,le.innerHTML="",m.option=!!le.lastChild;var he={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ge(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&N(e,t)?E.merge([e],n):n}function ve(e,t){for(var n=0,r=e.length;n",""]);var ye=/<|&#?\w+;/;function me(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p\s*$/g;function ke(e,t){return N(e,"table")&&N(11!==t.nodeType?t:t.firstChild,"tr")&&E(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Le(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function je(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n

",2===ft.childNodes.length),E.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(m.createHTMLDocument?((r=(t=w.implementation.createHTMLDocument("")).createElement("base")).href=w.location.href,t.head.appendChild(r)):t=w),o=!n&&[],(i=k.exec(e))?[t.createElement(i[1])]:(i=me([e],t,o),o&&o.length&&E(o).remove(),E.merge([],i.childNodes)));var r,i,o},E.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=E.css(e,"position"),c=E(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=E.css(e,"top"),u=E.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),b(t)&&(t=t.call(e,n,E.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},E.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){E.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===E.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===E.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=E(e).offset()).top+=E.css(e,"borderTopWidth",!0),i.left+=E.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-E.css(r,"marginTop",!0),left:t.left-i.left-E.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===E.css(e,"position"))e=e.offsetParent;return e||re})}}),E.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;E.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),E.each(["top","left"],function(e,n){E.cssHooks[n]=$e(m.pixelPosition,function(e,t){if(t)return t=Fe(e,n),Pe.test(t)?E(e).position()[n]+"px":t})}),E.each({Height:"height",Width:"width"},function(a,s){E.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){E.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?E.css(e,t,i):E.style(e,t,n,i)},s,n?e:void 0,n)}})}),E.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),E.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){E.fn[n]=function(e,t){return 0 + div.body div.toctree-wrapper ul { + padding-left: 0; + } + + div.body li.toctree-l1 { + padding: 0 0 0.5em 0; + list-style-type: none; + font-size: 150%; + font-weight: bold; + } + + div.body li.toctree-l2 { + font-size: 70%; + list-style-type: square; + font-weight: normal; + margin-left: 40px; + } + + div.body li.toctree-l3 { + font-size: 85%; + list-style-type: circle; + font-weight: normal; + margin-left: 40px; + } + + div.body li.toctree-l4 { + margin-left: 40px; + } + + diff --git a/docs/user_guide.md b/docs/user_guide.md index 791e19ba4..5faf89a2d 100644 --- a/docs/user_guide.md +++ b/docs/user_guide.md @@ -8,42 +8,58 @@ Welcome to rlberry. Use rlberry's [ExperimentManager](experimentManager_page) to train, evaluate and compare rl agents. Like other popular rl libraries, rlberry also provides basic tools for plotting, multiprocessing and logging . In this user guide, we take you through the core features of rlberry and illustrate them with [examples](/auto_examples/index) and [API documentation](/api) . -To run all the examples, you will need to install other libraries like "[rlberry-research](https://github.com/rlberry-py/rlberry-research)" and "[rlberry-scool](https://github.com/rlberry-py/rlberry-scool)" (and others). +To run all the examples, you will need to install other libraries like "[rlberry-scool](https://github.com/rlberry-py/rlberry-scool)" (and others). The easiest way to do it is : ```none pip install rlberry[torch,extras] pip install rlberry-scool -pip install git+https://github.com/rlberry-py/rlberry-research.git ``` - [rlberry-research](https://github.com/rlberry-py/rlberry-research) : - It's the repository where our research team keeps some agents, environments, or tools compatible with rlberry. It's a permanent "work in progress" repository, and some code may be not maintained anymore. - [rlberry-scool](https://github.com/rlberry-py/rlberry-scool) : It's the repository used for teaching purposes. These are mainly basic agents and environments, in a version that makes it easier for students to learn. You can find more details about installation [here](installation)! + You can find our quick starts here : + ```{toctree} +:maxdepth: 2 +basics/quick_start_rl/quickstart.md +basics/DeepRLTutorial/TutorialDeepRL.md +``` + ## Set up an experiment -- [Environment](environment_page) -- [Agent](agent_page) -- [ExperimentManager](experimentManager_page) -- [Logging](logging_page). +```{include} templates/nice_toc.md +``` + +```{toctree} +:maxdepth: 2 +basics/userguide/environment.md +basics/userguide/agent.md +basics/userguide/experimentManager.md +basics/userguide/logging.md +``` - Results analysis & visualization (In construction) ## Experimenting with Deep agents -- Torch Agents (In construction) -- Policy and Value Networks (In construction) -- Experimenting with Bandits (In construction) +[(In construction)](https://github.com/rlberry-py/rlberry/issues/459) ## Reproducibility -- [Seeding](seeding_page) -- [Save & Load Experiment](save_load_page) +```{toctree} +:maxdepth: 2 +basics/userguide/seeding.md +basics/userguide/save_load.md +``` - Save & Load Agents (In construction) - Save & Load Data (In construction) ## Advanced Usage +```{toctree} +:maxdepth: 2 +basics/userguide/adastop.md +basics/comparison.md +basics/userguide/external_lib.md +``` - Custom Agents (In construction) - Custom Environments (In construction) -- [Using extrenal libraries](external) (like [Stable Baselines](stable_baselines) and [Gymnasium](Gymnasium_ancor)) - Transfer Learning (In construction) -- [Hypothesis testing for comparison of RL agents](comparison_page) -- [Adaptive hypothesis testing for comparison of RL agents with AdaStop](adastop_userguide) + +# Contributing to rlberry +If you want to contribute to rlberry, check out [the contribution guidelines](contributing). diff --git a/examples/demo_agents/video_plot_vi.py b/examples/demo_agents/video_plot_vi.py index bca4b28a7..d6551f208 100644 --- a/examples/demo_agents/video_plot_vi.py +++ b/examples/demo_agents/video_plot_vi.py @@ -12,7 +12,7 @@ # sphinx_gallery_thumbnail_path = 'thumbnails/video_plot_vi.jpg' from rlberry_scool.agents.dynprog import ValueIterationAgent -from rlberry_research.envs.finite import Chain +from rlberry_scool.envs.finite import Chain env = Chain() agent = ValueIterationAgent(env, gamma=0.95) diff --git a/examples/plot_writer_wrapper.py b/examples/plot_writer_wrapper.py index 04fc2c632..724e7750c 100644 --- a/examples/plot_writer_wrapper.py +++ b/examples/plot_writer_wrapper.py @@ -23,9 +23,9 @@ import numpy as np from rlberry.wrappers import WriterWrapper -from rlberry_research.envs import GridWorld +from rlberry_scool.envs import GridWorld from rlberry.manager import plot_writer_data, ExperimentManager -from rlberry_research.agents import UCBVIAgent +from rlberry_scool.agents import UCBVIAgent import matplotlib.pyplot as plt # We wrape the default writer of the agent in a WriterWrapper diff --git a/rlberry/envs/tests/test_env_seeding.py b/rlberry/envs/tests/test_env_seeding.py index 336dae652..dd23bbd17 100644 --- a/rlberry/envs/tests/test_env_seeding.py +++ b/rlberry/envs/tests/test_env_seeding.py @@ -4,8 +4,8 @@ from copy import deepcopy from rlberry_research.envs.classic_control import MountainCar, Acrobot, Pendulum -from rlberry_research.envs.finite import Chain -from rlberry_research.envs.finite import GridWorld +from rlberry_scool.envs.finite import Chain +from rlberry_scool.envs.finite import GridWorld from rlberry_research.envs.benchmarks.grid_exploration.four_room import FourRoom from rlberry_research.envs.benchmarks.grid_exploration.six_room import SixRoom from rlberry_research.envs.benchmarks.grid_exploration.apple_gold import AppleGold diff --git a/rlberry/manager/experiment_manager.py b/rlberry/manager/experiment_manager.py index ef05f7ecb..0c789ef92 100644 --- a/rlberry/manager/experiment_manager.py +++ b/rlberry/manager/experiment_manager.py @@ -593,6 +593,7 @@ def eval_agents( eval_kwargs = eval_kwargs or self.eval_kwargs if not n_simulations: n_simulations = 2 * self.n_fit + logger.info(f"Computing {n_simulations} evaluations.") values = [] if verbose: @@ -620,11 +621,6 @@ def eval_agents( return [] # Update eval_kwargs with n_simulations parameter eval_kwargs_with_n_simulations = eval_kwargs.copy() - if "n_simulations" in eval_kwargs: - # Issue a warning that n_simulations is overwritten - logger.info( - "Warning: n_simulations parameter in eval_kwargs is being overwritten with 1." - ) eval_kwargs_with_n_simulations["n_simulations"] = 1 values.append(agent.eval(**eval_kwargs_with_n_simulations)) if verbose: diff --git a/rlberry/manager/tests/test_plot.py b/rlberry/manager/tests/test_plot.py index 562b1252e..afe283f34 100644 --- a/rlberry/manager/tests/test_plot.py +++ b/rlberry/manager/tests/test_plot.py @@ -8,7 +8,7 @@ import matplotlib.pyplot as plt from rlberry.wrappers import WriterWrapper -from rlberry_research.envs import Chain +from rlberry_scool.envs import Chain from rlberry.manager import plot_writer_data, ExperimentManager, read_writer_data from rlberry.manager.plotting import plot_smoothed_curves, plot_synchronized_curves from rlberry.agents import AgentWithSimplePolicy diff --git a/rlberry/tests/test_agents_base.py b/rlberry/tests/test_agents_base.py index 8038c5d0c..89378f24d 100644 --- a/rlberry/tests/test_agents_base.py +++ b/rlberry/tests/test_agents_base.py @@ -49,7 +49,7 @@ def feature_map_fn(_env): agents_scool.SARSAAgent, agents_scool.ValueIterationAgent, agents_scool.MBQVIAgent, - agents_research.UCBVIAgent, + agents_scool.UCBVIAgent, agents_research.OptQLAgent, agents_research.PSRLAgent, agents_research.RLSVIAgent, diff --git a/rlberry/tests/test_envs.py b/rlberry/tests/test_envs.py index 36321d20d..12c6126de 100644 --- a/rlberry/tests/test_envs.py +++ b/rlberry/tests/test_envs.py @@ -5,7 +5,7 @@ from rlberry_research.envs.benchmarks.grid_exploration.apple_gold import AppleGold from rlberry_research.envs.benchmarks.grid_exploration.nroom import NRoom from rlberry_research.envs.classic_control import MountainCar, SpringCartPole -from rlberry_research.envs.finite import Chain, GridWorld +from rlberry_scool.envs.finite import Chain, GridWorld import pytest ALL_ENVS = [ diff --git a/rlberry/utils/check_agent.py b/rlberry/utils/check_agent.py index d4fdbdc9e..c56a828f6 100644 --- a/rlberry/utils/check_agent.py +++ b/rlberry/utils/check_agent.py @@ -23,7 +23,7 @@ def _make_tuple_env(env): env_ctor = PBall2D env_kwargs = {} elif env == "discrete_state": - from rlberry_research.envs import Chain + from rlberry_scool.envs import Chain env_ctor = Chain env_kwargs = {} @@ -502,7 +502,7 @@ def check_rl_agent(agent, env="continuous_state", init_kwargs=None): Examples -------- - >>> from rlberry_research.agents import UCBVIAgent + >>> from rlberry_scool.agents import UCBVIAgent >>> from rlberry.utils import check_rl_agent >>> check_rl_agent(UCBVIAgent) # which does not return an error. """ @@ -538,7 +538,7 @@ def check_rlberry_agent(agent, env="continuous_state", init_kwargs=None): Examples -------- - >>> from rlberry.agents import UCBVIAgent + >>> from rlberry_scool.agents import UCBVIAgent >>> from rlberry.utils import check_rl_agent >>> check_rl_agent(UCBVIAgent) # """ diff --git a/rlberry/utils/tests/test_check.py b/rlberry/utils/tests/test_check.py index 7b0635d53..1b0f07215 100644 --- a/rlberry/utils/tests/test_check.py +++ b/rlberry/utils/tests/test_check.py @@ -10,7 +10,7 @@ from rlberry.spaces import Box, Dict, Discrete import gymnasium as gym from rlberry_scool.agents import ValueIterationAgent -from rlberry_research.agents import UCBVIAgent +from rlberry_scool.agents import UCBVIAgent class ActionDictTestEnv(gym.Env): diff --git a/rlberry/wrappers/tests/test_wrapper_seeding.py b/rlberry/wrappers/tests/test_wrapper_seeding.py index 25f6c9f37..f807a4890 100644 --- a/rlberry/wrappers/tests/test_wrapper_seeding.py +++ b/rlberry/wrappers/tests/test_wrapper_seeding.py @@ -4,8 +4,8 @@ from copy import deepcopy from rlberry_research.envs.classic_control import MountainCar, Acrobot -from rlberry_research.envs.finite import Chain -from rlberry_research.envs.finite import GridWorld +from rlberry_scool.envs.finite import Chain +from rlberry_scool.envs.finite import GridWorld from rlberry_research.envs.benchmarks.ball_exploration import PBall2D, SimplePBallND from rlberry.envs import Wrapper from rlberry.wrappers import RescaleRewardWrapper diff --git a/rlberry/wrappers/tests/test_writer_utils.py b/rlberry/wrappers/tests/test_writer_utils.py index 0ce1fc545..ab2e78d9c 100644 --- a/rlberry/wrappers/tests/test_writer_utils.py +++ b/rlberry/wrappers/tests/test_writer_utils.py @@ -1,9 +1,9 @@ import pytest from rlberry.wrappers import WriterWrapper -from rlberry_research.envs import GridWorld +from rlberry_scool.envs import GridWorld -from rlberry_research.agents import UCBVIAgent +from rlberry_scool.agents import UCBVIAgent @pytest.mark.parametrize("write_scalar", ["action", "reward", "action_and_reward"]) diff --git a/scripts/apptainer_for_tests/monthly_test_base.sh b/scripts/apptainer_for_tests/monthly_test_base.sh index 3136c0565..a831822e4 100755 --- a/scripts/apptainer_for_tests/monthly_test_base.sh +++ b/scripts/apptainer_for_tests/monthly_test_base.sh @@ -2,7 +2,6 @@ # Set the email recipient and subject recipient="email1@inria.fr,email2@inria.fr" -attachment="test_report.txt" # Build, then run, the Apptainer container and capture the test results cd [Path_to_your_apptainer_folder] @@ -13,16 +12,19 @@ apptainer run --fakeroot --overlay my_overlay/ rlberry_apptainer.sif > "$attachm # Send the test results by email -exit_code=$(cat [path]/exit_code.txt) # Read the exit code from the file +exit_code1=$(cat [path]/exit_code1.txt) # Read the exit code from the file (tests) +exit_code2=$(cat [path]/exit_code2.txt) # Read the exit code from the file (long tests) +exit_code3=$(cat [path]/exit_code3.txt) # Read the exit code from the file (doc test) if [ $exit_code -eq 0 ]; then # Initialization when the exit code is 0 (success) - subject="Rlberry : Succes Monthly Test Report" - core_message="Success. Please find attached the monthly test report." + subject="Rlberry : Success Monthly Test Report" + core_message="Success. Please find attached the monthly test reports." else # Initialization when the exit code is not 0 (failed) subject="Rlberry : Failed Monthly Test Report" - core_message="Failed. Please find attached the monthly test report." + core_message="Failed. Please find attached the monthly test reports." fi -echo "$core_message" | mail -s "$subject" -A "$attachment" "$recipient" -aFrom:"Rlberry_Monthly_tests" + +echo "$core_message" | mail -s "$subject" -A "test_result.txt" -A "long_test_result.txt" -A "doc_test_result.txt" -A"lib_versions.txt" "$recipient" -aFrom:"Rlberry_Monthly_tests" diff --git a/scripts/apptainer_for_tests/rlberry_apptainer_base.def b/scripts/apptainer_for_tests/rlberry_apptainer_base.def index 2fb70acb8..507777b68 100644 --- a/scripts/apptainer_for_tests/rlberry_apptainer_base.def +++ b/scripts/apptainer_for_tests/rlberry_apptainer_base.def @@ -1,35 +1,70 @@ Bootstrap: docker From: ubuntu:latest -#script for the build %post -c /bin/bash - #get the last Ubuntu Update, + #get the last Ubuntu Update apt-get update \ && apt-get upgrade -y + echo "export PS1=Apptainer-\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$" >> /etc/profile + # Install python, and graphic and basic libs. - apt-get install -y software-properties-common python3-pip git ffmpeg libsm6 libxext6 libsdl2-dev xvfb x11-xkb-utils + apt-get install -y software-properties-common python3-pip git ffmpeg libsm6 libxext6 libsdl2-dev xvfb x11-xkb-utils libblas-dev liblapack-dev + pip3 install --upgrade pip setuptools wheel - #Remove the old tmp folder if it exist, then download rlberry + # remove the old folder if [ -d /tmp/rlberry_test_dir ]; then /bin/rm -r /tmp/rlberry_test_dir; fi + if [ -d /tmp/rlberry-research_test_dir ]; then /bin/rm -r /tmp/rlberry-research_test_dir; fi + + # get all the git repos to do their tests git clone https://github.com/rlberry-py/rlberry.git /tmp/rlberry_test_dir - #Install all the lib we need to run rlberry and its tests - pip3 install rlberry[torch_agents] opencv-python pytest pytest-xvfb pytest-xprocess tensorboard #--break-system-packages - pip3 install gymnasium[other] + cd /tmp/rlberry_test_dir/ + git fetch --tags + latestTag=$(git describe --tags `git rev-list --tags --max-count=1`) + git checkout $latestTag + + + git clone https://github.com/rlberry-py/rlberry-research.git /tmp/rlberry-research_test_dir + + cd /tmp/rlberry-research_test_dir/ + git fetch --tags + latestTagResearch=$(git describe --tags `git rev-list --tags --max-count=1`) + git checkout $latestTagResearch + + # install rlberry, rlberry-scool and rlberry-research + pip3 install rlberry[torch,doc,extras] rlberry-scool opencv-python pytest pytest-xvfb pytest-xprocess tensorboard #--break-system-packages + pip3 install git+https://github.com/rlberry-py/rlberry-research.git + + %environment export LC_ALL=C -#script that will be executed with the "run" command : run the tests in rlberry, the longtests, and then export the exit code inside a text file %runscript - pip list - cd /tmp/rlberry_test_dir && \ + # info about current versions + pip list > [path]/lib_versions.txt + + #run tests + (cd /tmp/rlberry_test_dir && \ + date && \ pytest rlberry && \ - pytest long_tests/rl_agent/ltest_mbqvi_applegold.py long_tests/torch_agent/ltest_a2c_cartpole.py long_tests/torch_agent/ltest_ctn_ppo_a2c_pendulum.py long_tests/torch_agent/ltest_dqn_montaincar.py + date) > [path]/test_result.txt + echo $? > [path]/exit_code1.txt - echo $? > [path]/exit_code.txt + #run long tests + (cd /tmp/rlberry-research_test_dir && \ + date && \ + pytest long_tests/rl_agent/ltest_mbqvi_applegold.py long_tests/torch_agent/ltest_a2c_cartpole.py long_tests/torch_agent/ltest_ctn_ppo_a2c_pendulum.py long_tests/torch_agent/ltest_dqn_montaincar.py && \ + date) > [path]/long_test_result.txt + #pytest --ignore=long_tests/torch_agent/ltest_dqn_vs_mdqn_acrobot.py long_tests/**/*.py + echo $? > [path]exit_code2.txt - #Run all the long test - #pytest long_tests/**/*.py + #run doc test + (cd /tmp/rlberry_test_dir/docs/ && \ + date && \ + ./markdown_to_py.sh && \ + for f in python_scripts/*.py; do python3 $f ; done && \ + date) > [path]/doc_test_result.txt + echo $? > [path]/exit_code3.txt