From f55e089b292fb9a950de8ca92fd129021f4e9621 Mon Sep 17 00:00:00 2001 From: David Eriksson Date: Fri, 10 Nov 2023 13:30:56 -0800 Subject: [PATCH] Update Ax tutorials to stop using legacy Ax models (#1982) Summary: - The only legacy model remaining is a call to `get_MOO_PAREGO` in the MOO tutorial. - I also cleaned up some imports and got rid of a few `from ax import *`. Pull Request resolved: https://github.com/facebook/Ax/pull/1982 Differential Revision: D51214898 fbshipit-source-id: 9d937e2795dc7046adb22b23ae3e3f7c5dbe64fd --- ...up_and_Usage_of_BoTorch_Models_in_Ax.ipynb | 2220 +-- tutorials/ax_client_snapshot.json | 1 + tutorials/generation_strategy.ipynb | 1028 +- tutorials/gpei_hartmann_developer.ipynb | 1418 +- tutorials/gpei_hartmann_loop.ipynb | 1262 +- tutorials/gpei_hartmann_service.ipynb | 962 +- tutorials/gss.ipynb | 1100 +- tutorials/modular_botax.ipynb | 2351 ++-- tutorials/multi_task.ipynb | 1164 +- tutorials/multiobjective_optimization.ipynb | 2039 +-- tutorials/raytune_pytorch_cnn.ipynb | 641 +- tutorials/saasbo.ipynb | 757 +- tutorials/saasbo_nehvi.ipynb | 1417 +- tutorials/scheduler.ipynb | 1811 +-- tutorials/sebo.ipynb | 2243 +-- tutorials/tune_cnn.ipynb | 286 + tutorials/tune_cnn_service.ipynb | 11295 ++-------------- tutorials/visualizations.ipynb | 686 +- 18 files changed, 10741 insertions(+), 21940 deletions(-) create mode 100644 tutorials/ax_client_snapshot.json create mode 100644 tutorials/tune_cnn.ipynb diff --git a/tutorials/Setup_and_Usage_of_BoTorch_Models_in_Ax.ipynb b/tutorials/Setup_and_Usage_of_BoTorch_Models_in_Ax.ipynb index 21ced8e2942..0d205b046cf 100644 --- a/tutorials/Setup_and_Usage_of_BoTorch_Models_in_Ax.ipynb +++ b/tutorials/Setup_and_Usage_of_BoTorch_Models_in_Ax.ipynb @@ -1,1139 +1,1151 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "originalKey": "43b4b9d9-6cb6-4939-b3b0-ae1a5ea0b6aa" - }, - "outputs": [], - "source": [ - "# Ax wrappers for BoTorch components\n", - "from ax.models.torch.botorch_modular.model import BoTorchModel\n", - "from ax.models.torch.botorch_modular.surrogate import Surrogate\n", - "from ax.models.torch.botorch_modular.acquisition import Acquisition\n", - "from ax.models.torch.botorch_modular.kg import (\n", - " KnowledgeGradient,\n", - " MultiFidelityKnowledgeGradient,\n", - ")\n", - "\n", - "# Ax data tranformation layer\n", - "from ax.modelbridge.torch import TorchModelBridge\n", - "from ax.modelbridge.registry import Cont_X_trans, Y_trans, Models\n", - "\n", - "# Test Ax objects\n", - "from ax.utils.testing.core_stubs import get_branin_experiment, get_branin_data\n", - "\n", - "# BoTorch components\n", - "from botorch.models.model import Model\n", - "from botorch.models.gp_regression import FixedNoiseGP, SingleTaskGP\n", - "from botorch.acquisition.monte_carlo import (\n", - " qExpectedImprovement,\n", - " qNoisyExpectedImprovement,\n", - ")\n", - "from botorch.models.gp_regression_fidelity import SingleTaskMultiFidelityGP\n", - "from gpytorch.mlls.exact_marginal_log_likelihood import ExactMarginalLogLikelihood" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "originalKey": "1d55efb9-7826-4496-965e-d8ff7a7ef3bd" - }, - "outputs": [], - "source": [ - "# Default options will not be needed when the modular `BoTorchModel` functionality is completed.\n", - "# Associating these default options with corresponding model components (so there is no need to\n", - "# specify them manually) is in the works.\n", - "DEFAULT_ACQUISITION_OPTIONS = {\n", - " \"num_fantasies\": 16,\n", - " \"num_mv_samples\": 10,\n", - " \"num_y_samples\": 128,\n", - " \"candidate_size\": 1000,\n", - " \"best_f\": 0.0,\n", - "}\n", - "DEFAULT_OPTIMIZER_OPTIONS = {\"num_restarts\": 40, \"raw_samples\": 1024}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "6321fa27-eb6e-48e1-9253-b2c41d86c8a3" - }, - "source": [ - "# Setup and Usage of BoTorch Models in Ax" - ] - }, + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "originalKey": "43b4b9d9-6cb6-4939-b3b0-ae1a5ea0b6aa" + }, + "outputs": [], + "source": [ + "# Ax wrappers for BoTorch components\n", + "from ax.models.torch.botorch_modular.model import BoTorchModel\n", + "from ax.models.torch.botorch_modular.surrogate import Surrogate\n", + "from ax.models.torch.botorch_modular.acquisition import Acquisition\n", + "from ax.models.torch.botorch_modular.kg import (\n", + " KnowledgeGradient,\n", + " MultiFidelityKnowledgeGradient,\n", + ")\n", + "\n", + "# Ax data tranformation layer\n", + "from ax.modelbridge.torch import TorchModelBridge\n", + "from ax.modelbridge.registry import Cont_X_trans, Y_trans, Models\n", + "\n", + "# Test Ax objects\n", + "from ax.utils.testing.core_stubs import get_branin_experiment, get_branin_data\n", + "\n", + "# BoTorch components\n", + "from botorch.models.model import Model\n", + "from botorch.models.gp_regression import FixedNoiseGP, SingleTaskGP\n", + "from botorch.acquisition.monte_carlo import (\n", + " qExpectedImprovement,\n", + " qNoisyExpectedImprovement,\n", + ")\n", + "from botorch.models.gp_regression_fidelity import SingleTaskMultiFidelityGP\n", + "from gpytorch.mlls.exact_marginal_log_likelihood import ExactMarginalLogLikelihood" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "originalKey": "1d55efb9-7826-4496-965e-d8ff7a7ef3bd" + }, + "outputs": [], + "source": [ + "# Default options will not be needed when the modular `BoTorchModel` functionality is completed.\n", + "# Associating these default options with corresponding model components (so there is no need to\n", + "# specify them manually) is in the works.\n", + "DEFAULT_ACQUISITION_OPTIONS = {\n", + " \"num_fantasies\": 16,\n", + " \"num_mv_samples\": 10,\n", + " \"num_y_samples\": 128,\n", + " \"candidate_size\": 1000,\n", + " \"best_f\": 0.0,\n", + "}\n", + "DEFAULT_OPTIMIZER_OPTIONS = {\"num_restarts\": 40, \"raw_samples\": 1024}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "6321fa27-eb6e-48e1-9253-b2c41d86c8a3" + }, + "source": [ + "# Setup and Usage of BoTorch Models in Ax" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "d5ffd50f-98f7-4264-a748-278ac7e0b6fb" + }, + "source": [ + "Ax provides a set of flexible wrapper abstractions to mix-and-match BoTorch components like `Model` and `AcquisitionFunction` and combine them into a single `Model` object in Ax. The wrapper abstractions: `Surrogate`, `Acquisition`, and `BoTorchModel` – are located in `ax/models/torch/botorch_modular` directory and aim to encapsulate boilerplate code that interfaces between Ax and BoTorch. **This functionality is in alpha-release and under active development.** \n", + "\n", + "Here is a quick example of multi-fidelity Knowledge Gradient setup (GPKG) and subsequent candidate generation:" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "originalKey": "2072ddc3-a4a2-49c8-930f-c18ccbe82f49" + }, + "outputs": [], + "source": [ + "experiment = get_branin_experiment(with_fidelity_parameter=True, with_trial=True)\n", + "data = get_branin_data(trials=[experiment.trials[0]])" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "dae0e1dc-2567-4276-ba87-b680fc7e3418" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "originalKey": "d5ffd50f-98f7-4264-a748-278ac7e0b6fb" - }, - "source": [ - "Ax provides a set of flexible wrapper abstractions to mix-and-match BoTorch components like `Model` and `AcquisitionFunction` and combine them into a single `Model` object in Ax. The wrapper abstractions: `Surrogate`, `Acquisition`, and `BoTorchModel` – are located in `ax/models/torch/botorch_modular` directory and aim to encapsulate boilerplate code that interfaces between Ax and BoTorch. **This functionality is in alpha-release and under active development.** \n", - "\n", - "Here is a quick example of multi-fidelity Knowledge Gradient setup (GPKG) and subsequent candidate generation:" - ] - }, + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 12-29 21:07:39] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" + ] + } + ], + "source": [ + "# `Models` automatically selects a model + model bridge combination.\n", + "# For `BOTORCH_MODULAR`, it will select `BoTorchModel` and `TorchModelBridge`.\n", + "model_bridge_with_GPKG = Models.BOTORCH_MODULAR(\n", + " experiment=experiment,\n", + " data=data,\n", + " surrogate=Surrogate(\n", + " SingleTaskMultiFidelityGP\n", + " ), # Optional, will use default if unspecified\n", + " acquisition_class=MultiFidelityKnowledgeGradient, # Optional, will use default if unspecified\n", + " acquisition_options=DEFAULT_ACQUISITION_OPTIONS, # Optional\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "originalKey": "5621a4f2-d7ed-4130-b6f5-9494bd17394e" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "originalKey": "2072ddc3-a4a2-49c8-930f-c18ccbe82f49" - }, - "outputs": [], - "source": [ - "experiment = get_branin_experiment(with_fidelity_parameter=True, with_trial=True)\n", - "data = get_branin_data(trials=[experiment.trials[0]])" + "data": { + "text/plain": [ + "GeneratorRun(1 arms, total weight 1.0)" ] - }, + }, + "execution_count": 5, + "metadata": { + "bento_obj_id": "140501425854608" + }, + "output_type": "execute_result" + } + ], + "source": [ + "model_bridge_with_GPKG.gen(\n", + " n=1, model_gen_options={\"optimizer_kwargs\": DEFAULT_OPTIMIZER_OPTIONS}\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "93652642-4140-4e24-bb74-21966b32e527" + }, + "source": [ + "-----" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "6e8e201f-9d18-4ef9-a5e3-e1a31addff2c" + }, + "source": [ + "# `BoTorchModel` Deep dive" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "d2a54a94-8f26-4021-9ed8-68052eb808f8" + }, + "source": [ + "This tutorial walks through setting up a custom combination of BoTorch components in Ax in following steps:\n", + "\n", + "1. `BoTorchModel` = `Surrogate` + `Acquisition` (overview)\n", + "2. Specifying `BoTorchModel` subcomponents\n", + " 1. Surrogate model\n", + " 2. Acquisition function\n", + " 3. Leveraging default subcomponents\n", + " 4. Subcomponents Q&A\n", + "3. Leveraging Ax storage stack + `Models.BOTORCH_MODULAR`\n", + "4. Utilizing `BoTorchModel` in generation strategies\n", + "\n", + "Before you read the rest of this tutorial: \n", + "- Note that the concept of ‘model’ is Ax is somewhat a misnomer; we use ['model'](https://ax.dev/docs/glossary.html#model) to refer to an optimization setup capable of producing candidate points for optimization (and often capable of being fit to data, with exception for quasi-random generators). See [Models documentation page](https://ax.dev/docs/models.html) for more information.\n", + "- Learn about `ModelBridge` in Ax, as users should rarely be interacting with a `Model` object directly (more about ModelBridge, a data transformation layer in Ax, [here](https://ax.dev/docs/models.html#deeper-dive-organization-of-the-modeling-stack)).\n", + "\n", + "Finally, some advanced modeling setups will require subclassing `Surrogate` and/or `Acquisition` to construct, for example, some inputs specific to a given `AcquisitionFunction`. For details on custom `BoTorchModel` subcomponents, refer to the [Customizing a `BoTorchModel` tutorial]().\n", + "\n", + "----" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "367a8c3c-d9f6-4636-839f-00ce47292804" + }, + "source": [ + "## 1. `BoTorchModel` = `Surrogate` + `Acquisition`\n", + "\n", + "A `BoTorchModel` in Ax consists of two main subcomponents: a surrogate model and an acquisition function. A surrogate model is represented as an instance of Ax’s [`Surrogate` class](https://github.com/facebook/Ax/blob/main/ax/models/torch/botorch_modular/surrogate.py), which is a wrapper around BoTorch's [`Model` class](https://github.com/pytorch/botorch/blob/main/botorch/models/model.py). The acquisition function is represented as an instance of Ax’s [`Acquisition` class](https://github.com/facebook/Ax/blob/main/ax/models/torch/botorch_modular/acquisition.py), a wrapper around BoTorch's [`AcquisitionFunction` class](https://github.com/pytorch/botorch/blob/main/botorch/acquisition/acquisition.py). \n", + "\n", + "In simple case, a `BoTorchModel` is instantiated like so (see Appendix 1 for methods `BoTorchModel` provides):" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "originalKey": "cf648d7e-a4f8-4976-b2fd-aae37fc9281e" + }, + "outputs": [], + "source": [ + "model = BoTorchModel(\n", + " surrogate=Surrogate(FixedNoiseGP),\n", + " botorch_acqf_class=qExpectedImprovement,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "1f58c6c8-fc7d-4cfe-b4c0-d1b8901a9a66" + }, + "source": [ + "It can then be used with TorchModelBridge (learn more about `ModelBridge`, a data transformation layer in Ax, [here](https://ax.dev/docs/models.html#deeper-dive-organization-of-the-modeling-stack))." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "originalKey": "ff893be6-79fd-45e3-bbe1-2f0bc56f6a92" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "dae0e1dc-2567-4276-ba87-b680fc7e3418" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 12-29 21:07:39] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" - ] - } - ], - "source": [ - "# `Models` automatically selects a model + model bridge combination.\n", - "# For `BOTORCH_MODULAR`, it will select `BoTorchModel` and `TorchModelBridge`.\n", - "model_bridge_with_GPKG = Models.BOTORCH_MODULAR(\n", - " experiment=experiment,\n", - " data=data,\n", - " surrogate=Surrogate(\n", - " SingleTaskMultiFidelityGP\n", - " ), # Optional, will use default if unspecified\n", - " acquisition_class=MultiFidelityKnowledgeGradient, # Optional, will use default if unspecified\n", - " acquisition_options=DEFAULT_ACQUISITION_OPTIONS, # Optional\n", - ")" - ] - }, + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 12-29 21:10:42] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" + ] + } + ], + "source": [ + "experiment = get_branin_experiment(\n", + " with_trial=True\n", + ") # Example experiment with simple search space\n", + "\n", + "model_bridge = TorchModelBridge(\n", + " experiment=experiment,\n", + " search_space=experiment.search_space,\n", + " data=get_branin_data(trials=[experiment.trials[0]]), # Example synthetic data\n", + " model=model,\n", + " # Transforms to apply to the data, standard continuous search-space transforms used here as example\n", + " transforms=Cont_X_trans + Y_trans,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "a72bbce6-5f8d-42f0-b1de-f5dd4f76d119" + }, + "source": [ + "----" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "66b24496-a623-472d-a359-691fb8f7e2bf" + }, + "source": [ + "## 2. Specifying `BoTorchModel` subcomponents\n", + "\n", + "### A. Surrogate model" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "ec53dc2c-9b52-4c8c-8f59-fada979e39b2" + }, + "source": [ + "To specify a given surrogate model, construct an Ax `Surrogate`:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "originalKey": "4f16ca2e-5877-425c-ae04-152bc05a595c" + }, + "outputs": [], + "source": [ + "GP_surrogate = Surrogate(\n", + " botorch_model_class=FixedNoiseGP, # BoTorch `Model` class to construct in this `Surrogate`\n", + " mll_class=ExactMarginalLogLikelihood, # Optional, MLL class with which to optimize model parameters\n", + " model_options={}, # Optional, dictionary of keyword arguments to underlying BoTorch `Model`\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "7fafc42b-f35b-4531-8f74-bab7d42f2529" + }, + "source": [ + "### B. Acquisition function" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "d0efa996-498d-4c9d-b8f3-a24340b30860", + "showInput": false + }, + "source": [ + "To specify acquisition function, provide one of:\n", + "- the `botorch_acqf_class` argument, a BoTorch `AcquisitionFunction` class (if it can work with base `Acquisition` wrapper) or\n", + "- the `acquisition_class` argument, an Ax `Acquisition` class (in case where base `Acquisition` is not sufficient to support a given BoTorch `AcquisitionFunction` option –– for instance, if it requires custom inputs that are not covered by base `Acquisition`)." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "originalKey": "c02af7f1-c332-4407-aa42-ecd563e8c23f" + }, + "outputs": [], + "source": [ + "# `qExpectedImprovement` is supported by the default `Acquisition`,\n", + "# so there is no need to explicitly specify `acquisition_class`.\n", + "GPEI_model = BoTorchModel(\n", + " surrogate=GP_surrogate,\n", + " botorch_acqf_class=qExpectedImprovement,\n", + " # Optional dict of keyword arguments, passed to the BoTorch `AcquisitionFunction`\n", + " acquisition_options=DEFAULT_ACQUISITION_OPTIONS,\n", + ")\n", + "\n", + "# `qKnowledgeGradient` requires a custom `Acquisition` subclass, `KnowledgeGradient`.\n", + "KG_model = BoTorchModel(\n", + " surrogate=GP_surrogate,\n", + " acquisition_class=KnowledgeGradient,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "5ca66d07-2501-4f77-b34c-834fc213d337" + }, + "source": [ + "### C. Leveraging default subcomponents" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "39531d02-2ed0-4ef2-8b1f-66d7b3909bfd" + }, + "source": [ + "BoTorchModel does not always require surrogate and acquisition specification. If instantiated without one or both components specified, defaults are selected based on properties of experiment and data (see Appendix 2 for auto-selection logic)." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "originalKey": "42722060-31e5-42d4-aae2-6672a2b64466" + }, + "outputs": [], + "source": [ + "# The surrogate is not specified, so it will be auto-selected during `model.fit`.\n", + "GPEI_model = BoTorchModel(botorch_acqf_class=qExpectedImprovement)\n", + "\n", + "# The acquisition class is not specified, so it will be auto-selected during `model.gen`.\n", + "GPEI_model = BoTorchModel(surrogate=GP_surrogate)\n", + "\n", + "# Both the surrogate and acquisition class will be auto-selected.\n", + "GPEI_model = BoTorchModel()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "e7737ba8-4889-46e7-a621-1bca96bc7543" + }, + "source": [ + "### D. Subcomponents Q&A" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "f5993078-e9fb-4db1-af54-12ba3373fec8", + "showInput": false + }, + "source": [ + "**Why is `surrogate` expected to be an instance, but `acquisition_class` (or `botorch_acqf_class`) –– a class?**\n", + "Because a BoTorch `AcquisitionFunction` object (and therefore its Ax wrapper, `Acquisition`) is *ephemeral*: it is constructed, immediately used, and destroyed during `BoTorchModel.gen`, so there is no reason to keep around an `Acquisition` instance. A `Surrogate`, on another hand, is kept in memory as long as its parent `BoTorchModel` is.\n", + "\n", + "**How to know when to use specify `acquisition_class` (and thereby a non-default `Acquisition` type) instead of just passing in `botorch_acqf_class`?**\n", + "The [Customizing a `BoTorchModel`]() tutorial covers that question. In short, custom `Acquisition` subclasses are needed when a given `AcquisitionFunction` in BoTorch needs non-standard inputs or constructs some of its subcomponents (like an `AcquisitionObjective`) in a non-standard way.\n", + "\n", + "**Why do I not need to specify `botorch_acqf_class` argument if I do specify `acquisition_class`? Does each type of `Acquisition` have an associated BoTorch `AcquisitionFunction`?** All non-base `Acquisition` subclasses should have the `Acquisition.default_botorch_acqf_class` attribute specified, so they have an associated BoTorch counterpart. For example, `KnowledgeGradient` [sets it to `qKnowledgeGradient`](https://github.com/facebook/Ax/blob/main/ax/models/torch/botorch_modular/kg.py#L57-L58). \n", + "\n", + "**Please post any other questions** you have to our issues page: https://github.com/facebook/Ax/issues.\n", + "\n", + "----" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "57bd0456-19bb-4181-baf0-cb0c122d94a4" + }, + "source": [ + "## 3. Leveraging Ax storage stack via `Models.BOTORCH_MODULAR`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "4d0ef735-2ec8-4d76-bfe7-40399a48be12" + }, + "source": [ + "To simplify the instantiation of an Ax `ModelBridge` and its undelying `Model`, Ax provides a [`Models` registry enum](https://github.com/facebook/Ax/blob/main/ax/modelbridge/registry.py#L201). \n", + "\n", + "Here we use `Models.BOTORCH_MODULAR` to set up a multi-fidelity Knowledge Gradient (GPKG) model. We specify both the surrogate and the acquisition to customize both components:" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "originalKey": "a1cece55-c01e-4224-9354-8c6f58098155" + }, + "outputs": [], + "source": [ + "experiment = get_branin_experiment(with_fidelity_parameter=True, with_trial=True)\n", + "data = get_branin_data(trials=[experiment.trials[0]])" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "originalKey": "fbf4f6fe-c952-40b1-b7d0-d0cf583a9d9d" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "originalKey": "5621a4f2-d7ed-4130-b6f5-9494bd17394e" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "GeneratorRun(1 arms, total weight 1.0)" - ] - }, - "execution_count": 5, - "metadata": { - "bento_obj_id": "140501425854608" - }, - "output_type": "execute_result" - } - ], - "source": [ - "model_bridge_with_GPKG.gen(\n", - " n=1, model_gen_options={\"optimizer_kwargs\": DEFAULT_OPTIMIZER_OPTIONS}\n", - ")" - ] - }, + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 12-29 21:10:47] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" + ] + } + ], + "source": [ + "model_bridge_with_GPKG = Models.BOTORCH_MODULAR( # Will automatically select `BoTorchModel` and `TorchModelBridge`\n", + " experiment=experiment,\n", + " data=data,\n", + " surrogate=Surrogate(\n", + " SingleTaskMultiFidelityGP\n", + " ), # Optional, will use default if unspecified\n", + " acquisition_class=MultiFidelityKnowledgeGradient, # Optional, will use default if unspecified\n", + " acquisition_options=DEFAULT_ACQUISITION_OPTIONS, # Optional\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "c7f60b0c-b83b-49c4-96f2-509fac7fca54" + }, + "source": [ + "We can now use the model bridge to generate candidates:" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "originalKey": "ca3eff89-9bec-4053-b9ff-e2c0bc826179" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "originalKey": "93652642-4140-4e24-bb74-21966b32e527" - }, - "source": [ - "-----" + "data": { + "text/plain": [ + "[Arm(parameters={'x1': 9.931203095212535, 'x2': 6.123563213741994, 'fidelity': 0.0})]" ] - }, + }, + "execution_count": 14, + "metadata": { + "bento_obj_id": "140501402266832" + }, + "output_type": "execute_result" + } + ], + "source": [ + "generator_run = model_bridge_with_GPKG.gen(\n", + " n=1, model_gen_options={\"optimizer_kwargs\": DEFAULT_OPTIMIZER_OPTIONS}\n", + ")\n", + "generator_run.arms" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "f31a5adf-c6a5-4adb-9478-8f4d749f79a6" + }, + "source": [ + "Generator run also records all arguments to model bridge and model, which allows to restore the model state from a generator run it produced. Therefore, the generator run can then be serialized and stored, then recreated:" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "originalKey": "58841930-c828-4191-99e2-f418fd30b211" + }, + "outputs": [], + "source": [ + "from ax.storage.json_store.encoder import object_to_json\n", + "from ax.storage.json_store.decoder import object_from_json\n", + "from ax.modelbridge.registry import get_model_from_generator_run" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "originalKey": "097fbef6-4ba3-4a8d-b8bc-9209267438d7" + }, + "outputs": [], + "source": [ + "generator_run_restored = object_from_json(object_to_json(generator_run))" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "originalKey": "46405a34-4e4b-4a06-a964-b52a2307f6b1" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "originalKey": "6e8e201f-9d18-4ef9-a5e3-e1a31addff2c" - }, - "source": [ - "# `BoTorchModel` Deep dive" - ] + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 12-29 21:20:21] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" + ] }, { - "cell_type": "markdown", - "metadata": { - "originalKey": "d2a54a94-8f26-4021-9ed8-68052eb808f8" - }, - "source": [ - "This tutorial walks through setting up a custom combination of BoTorch components in Ax in following steps:\n", - "\n", - "1. `BoTorchModel` = `Surrogate` + `Acquisition` (overview)\n", - "2. Specifying `BoTorchModel` subcomponents\n", - " 1. Surrogate model\n", - " 2. Acquisition function\n", - " 3. Leveraging default subcomponents\n", - " 4. Subcomponents Q&A\n", - "3. Leveraging Ax storage stack + `Models.BOTORCH_MODULAR`\n", - "4. Utilizing `BoTorchModel` in generation strategies\n", - "\n", - "Before you read the rest of this tutorial: \n", - "- Note that the concept of ‘model’ is Ax is somewhat a misnomer; we use ['model'](https://ax.dev/docs/glossary.html#model) to refer to an optimization setup capable of producing candidate points for optimization (and often capable of being fit to data, with exception for quasi-random generators). See [Models documentation page](https://ax.dev/docs/models.html) for more information.\n", - "- Learn about `ModelBridge` in Ax, as users should rarely be interacting with a `Model` object directly (more about ModelBridge, a data transformation layer in Ax, [here](https://ax.dev/docs/models.html#deeper-dive-organization-of-the-modeling-stack)).\n", - "\n", - "Finally, some advanced modeling setups will require subclassing `Surrogate` and/or `Acquisition` to construct, for example, some inputs specific to a given `AcquisitionFunction`. For details on custom `BoTorchModel` subcomponents, refer to the [Customizing a `BoTorchModel` tutorial]().\n", - "\n", - "----" + "data": { + "text/plain": [ + "" ] - }, + }, + "execution_count": 17, + "metadata": { + "bento_obj_id": "140499819165648" + }, + "output_type": "execute_result" + } + ], + "source": [ + "model_bridge_with_GPKG_restored = get_model_from_generator_run(\n", + " generator_run_restored, experiment, data\n", + ")\n", + "model_bridge_with_GPKG_restored" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "82d2f3eb-5d2a-42db-b9ab-0bc9dea8c409" + }, + "source": [ + "**Note that not all arguments to BoTorch `Model` or `AcquisitionFunction` are serializable by default!** For example, a BoTorch `Prior` object, which could be among `Surrogate.model_options`, does not currently have associated serialization logic in Ax. See Appendix 3 for how to address errors that stem from some objects among options lacking serialization logic." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "7fc75fb1-c2be-42b5-acee-81fe9b14b50c" + }, + "source": [ + "----" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "3ab5bb38-b370-46be-8038-fbfc56f8651a" + }, + "source": [ + "## 4. Utilizing `BoTorchModel` in generation strategies" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "e918cbc3-9c71-4a26-8858-3ba61979fe00" + }, + "source": [ + "Generation strategy is a key concept in Ax, enabling use of Service API (a.k.a. `AxClient`) and many other higher-level abstractions. A [`GenerationStrategy`](https://ax.dev/api/modelbridge.html#ax.modelbridge.generation_strategy.GenerationStrategy) allows to chain multiple models in Ax and thereby automate candidate generation. \n", + "\n", + "An example generation stategy with the modular `BoTorchModel` would look like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "metadata": { + "originalKey": "1c6a3128-1d72-4675-98a9-ae7d82f81b1f" + }, + "outputs": [], + "source": [ + "from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy\n", + "from botorch.acquisition import UpperConfidenceBound\n", + "from ax.modelbridge.modelbridge_utils import get_pending_observation_features\n", + "\n", + "gs = GenerationStrategy(\n", + " steps=[\n", + " GenerationStep(\n", + " model=Models.SOBOL, # Which model to use for this ste[]\n", + " num_trials=5, # How many generator runs (which are then made into trials) to produce with this step\n", + " min_trials_observed=5, # How many trials generated from this step must be `COMPLETED` before the next one\n", + " ),\n", + " GenerationStep(\n", + " model=Models.BOTORCH_MODULAR,\n", + " num_trials=-1, # No limit on how many generator runs will be produced\n", + " model_kwargs={ # Kwargs to pass to `BoTorchModel.__init__`\n", + " \"surrogate\": Surrogate(SingleTaskGP),\n", + " \"botorch_acqf_class\": qNoisyExpectedImprovement,\n", + " \"acquisition_options\": DEFAULT_ACQUISITION_OPTIONS,\n", + " },\n", + " model_gen_kwargs={\n", + " \"model_gen_options\": { # Kwargs to pass to `BoTorchModel.gen`\n", + " \"optimizer_kwargs\": DEFAULT_OPTIMIZER_OPTIONS\n", + " },\n", + " },\n", + " ),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "611f878b-8c0e-4fc9-95e6-089401c4811b" + }, + "source": [ + "Set up an experiment and generate 10 trials in it, adding synthetic data to experiment after each one:" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "metadata": { + "originalKey": "add25138-81d6-4108-8b86-d565ec28e003" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "originalKey": "367a8c3c-d9f6-4636-839f-00ce47292804" - }, - "source": [ - "## 1. `BoTorchModel` = `Surrogate` + `Acquisition`\n", - "\n", - "A `BoTorchModel` in Ax consists of two main subcomponents: a surrogate model and an acquisition function. A surrogate model is represented as an instance of Ax’s [`Surrogate` class](https://github.com/facebook/Ax/blob/main/ax/models/torch/botorch_modular/surrogate.py), which is a wrapper around BoTorch's [`Model` class](https://github.com/pytorch/botorch/blob/main/botorch/models/model.py). The acquisition function is represented as an instance of Ax’s [`Acquisition` class](https://github.com/facebook/Ax/blob/main/ax/models/torch/botorch_modular/acquisition.py), a wrapper around BoTorch's [`AcquisitionFunction` class](https://github.com/pytorch/botorch/blob/main/botorch/acquisition/acquisition.py). \n", - "\n", - "In simple case, a `BoTorchModel` is instantiated like so (see Appendix 1 for methods `BoTorchModel` provides):" + "data": { + "text/plain": [ + "SearchSpace(parameters=[RangeParameter(name='x1', parameter_type=FLOAT, range=[-5.0, 10.0]), RangeParameter(name='x2', parameter_type=FLOAT, range=[0.0, 15.0])], parameter_constraints=[])" ] - }, + }, + "execution_count": 32, + "metadata": { + "bento_obj_id": "140501404980176" + }, + "output_type": "execute_result" + } + ], + "source": [ + "experiment = get_branin_experiment(minimize=True)\n", + "\n", + "assert len(experiment.trials) == 0\n", + "experiment.search_space" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "metadata": { + "originalKey": "b06a5d2a-f15d-43f1-a994-28dde25906c1" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "originalKey": "cf648d7e-a4f8-4976-b2fd-aae37fc9281e" - }, - "outputs": [], - "source": [ - "model = BoTorchModel(\n", - " surrogate=Surrogate(FixedNoiseGP),\n", - " botorch_acqf_class=qExpectedImprovement,\n", - ")" - ] - }, + "name": "stdout", + "output_type": "stream", + "text": [ + "Completed trial #0, suggested by Sobol.\n", + "Completed trial #1, suggested by Sobol.\n", + "Completed trial #2, suggested by Sobol.\n", + "Completed trial #3, suggested by Sobol.\n", + "Completed trial #4, suggested by Sobol.\n", + "Completed trial #5, suggested by BoTorch.\n", + "Completed trial #6, suggested by BoTorch.\n", + "Completed trial #7, suggested by BoTorch.\n", + "Completed trial #8, suggested by BoTorch.\n", + "Completed trial #9, suggested by BoTorch.\n" + ] + } + ], + "source": [ + "for _ in range(10):\n", + " # Produce a new generator run and attach it to experiment as a trial\n", + " generator_run = gs.gen(\n", + " experiment=experiment,\n", + " n=1,\n", + " )\n", + " trial = experiment.new_trial(generator_run)\n", + "\n", + " # Mark the trial as 'RUNNING' so we can mark it 'COMPLETED' later\n", + " trial.mark_running(no_runner_required=True)\n", + "\n", + " # Attach data for the new trial and mark it 'COMPLETED'\n", + " experiment.attach_data(get_branin_data(trials=[trial]))\n", + " trial.mark_completed()\n", + "\n", + " print(f\"Completed trial #{trial.index}, suggested by {generator_run._model_key}.\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "5b474522-a090-493b-a274-548ac35d2587" + }, + "source": [ + "Inspect trials that were generated:" + ] + }, + { + "cell_type": "code", + "execution_count": 34, + "metadata": { + "originalKey": "8d3a27e5-987c-4cc8-9e17-d97143f3e275" + }, + "outputs": [ { - "cell_type": "markdown", - "metadata": { - "originalKey": "1f58c6c8-fc7d-4cfe-b4c0-d1b8901a9a66" - }, - "source": [ - "It can then be used with TorchModelBridge (learn more about `ModelBridge`, a data transformation layer in Ax, [here](https://ax.dev/docs/models.html#deeper-dive-organization-of-the-modeling-stack))." - ] + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 12-29 21:27:42] ax.modelbridge.generation_strategy: Note that parameter values in dataframe are rounded to 2 decimal points; the values in the dataframe are thus not the exact ones suggested by Ax in trials.\n" + ] }, { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "originalKey": "ff893be6-79fd-45e3-bbe1-2f0bc56f6a92" - }, - "outputs": [ + "data": { + "application/vnd.dataresource+json": { + "data": [ { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 12-29 21:10:42] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" - ] - } - ], - "source": [ - "experiment = get_branin_experiment(\n", - " with_trial=True\n", - ") # Example experiment with simple search space\n", - "\n", - "model_bridge = TorchModelBridge(\n", - " experiment=experiment,\n", - " search_space=experiment.search_space,\n", - " data=get_branin_data(trials=[experiment.trials[0]]), # Example synthetic data\n", - " model=model,\n", - " # Transforms to apply to the data, standard continuous search-space transforms used here as example\n", - " transforms=Cont_X_trans + Y_trans,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "a72bbce6-5f8d-42f0-b1de-f5dd4f76d119" - }, - "source": [ - "----" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "66b24496-a623-472d-a359-691fb8f7e2bf" - }, - "source": [ - "## 2. Specifying `BoTorchModel` subcomponents\n", - "\n", - "### A. Surrogate model" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "ec53dc2c-9b52-4c8c-8f59-fada979e39b2" - }, - "source": [ - "To specify a given surrogate model, construct an Ax `Surrogate`:" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "originalKey": "4f16ca2e-5877-425c-ae04-152bc05a595c" - }, - "outputs": [], - "source": [ - "GP_surrogate = Surrogate(\n", - " botorch_model_class=FixedNoiseGP, # BoTorch `Model` class to construct in this `Surrogate`\n", - " mll_class=ExactMarginalLogLikelihood, # Optional, MLL class with which to optimize model parameters\n", - " model_options={}, # Optional, dictionary of keyword arguments to underlying BoTorch `Model`\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "7fafc42b-f35b-4531-8f74-bab7d42f2529" - }, - "source": [ - "### B. Acquisition function" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "d0efa996-498d-4c9d-b8f3-a24340b30860", - "showInput": false - }, - "source": [ - "To specify acquisition function, provide one of:\n", - "- the `botorch_acqf_class` argument, a BoTorch `AcquisitionFunction` class (if it can work with base `Acquisition` wrapper) or\n", - "- the `acquisition_class` argument, an Ax `Acquisition` class (in case where base `Acquisition` is not sufficient to support a given BoTorch `AcquisitionFunction` option –– for instance, if it requires custom inputs that are not covered by base `Acquisition`)." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "originalKey": "c02af7f1-c332-4407-aa42-ecd563e8c23f" - }, - "outputs": [], - "source": [ - "# `qExpectedImprovement` is supported by the default `Acquisition`,\n", - "# so there is no need to explicitly specify `acquisition_class`.\n", - "GPEI_model = BoTorchModel(\n", - " surrogate=GP_surrogate,\n", - " botorch_acqf_class=qExpectedImprovement,\n", - " # Optional dict of keyword arguments, passed to the BoTorch `AcquisitionFunction`\n", - " acquisition_options=DEFAULT_ACQUISITION_OPTIONS,\n", - ")\n", - "\n", - "# `qKnowledgeGradient` requires a custom `Acquisition` subclass, `KnowledgeGradient`.\n", - "KG_model = BoTorchModel(\n", - " surrogate=GP_surrogate,\n", - " acquisition_class=KnowledgeGradient,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "5ca66d07-2501-4f77-b34c-834fc213d337" - }, - "source": [ - "### C. Leveraging default subcomponents" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "39531d02-2ed0-4ef2-8b1f-66d7b3909bfd" - }, - "source": [ - "BoTorchModel does not always require surrogate and acquisition specification. If instantiated without one or both components specified, defaults are selected based on properties of experiment and data (see Appendix 2 for auto-selection logic)." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "originalKey": "42722060-31e5-42d4-aae2-6672a2b64466" - }, - "outputs": [], - "source": [ - "# The surrogate is not specified, so it will be auto-selected during `model.fit`.\n", - "GPEI_model = BoTorchModel(botorch_acqf_class=qExpectedImprovement)\n", - "\n", - "# The acquisition class is not specified, so it will be auto-selected during `model.gen`.\n", - "GPEI_model = BoTorchModel(surrogate=GP_surrogate)\n", - "\n", - "# Both the surrogate and acquisition class will be auto-selected.\n", - "GPEI_model = BoTorchModel()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "e7737ba8-4889-46e7-a621-1bca96bc7543" - }, - "source": [ - "### D. Subcomponents Q&A" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "f5993078-e9fb-4db1-af54-12ba3373fec8", - "showInput": false - }, - "source": [ - "**Why is `surrogate` expected to be an instance, but `acquisition_class` (or `botorch_acqf_class`) –– a class?**\n", - "Because a BoTorch `AcquisitionFunction` object (and therefore its Ax wrapper, `Acquisition`) is *ephemeral*: it is constructed, immediately used, and destroyed during `BoTorchModel.gen`, so there is no reason to keep around an `Acquisition` instance. A `Surrogate`, on another hand, is kept in memory as long as its parent `BoTorchModel` is.\n", - "\n", - "**How to know when to use specify `acquisition_class` (and thereby a non-default `Acquisition` type) instead of just passing in `botorch_acqf_class`?**\n", - "The [Customizing a `BoTorchModel`]() tutorial covers that question. In short, custom `Acquisition` subclasses are needed when a given `AcquisitionFunction` in BoTorch needs non-standard inputs or constructs some of its subcomponents (like an `AcquisitionObjective`) in a non-standard way.\n", - "\n", - "**Why do I not need to specify `botorch_acqf_class` argument if I do specify `acquisition_class`? Does each type of `Acquisition` have an associated BoTorch `AcquisitionFunction`?** All non-base `Acquisition` subclasses should have the `Acquisition.default_botorch_acqf_class` attribute specified, so they have an associated BoTorch counterpart. For example, `KnowledgeGradient` [sets it to `qKnowledgeGradient`](https://github.com/facebook/Ax/blob/main/ax/models/torch/botorch_modular/kg.py#L57-L58). \n", - "\n", - "**Please post any other questions** you have to our issues page: https://github.com/facebook/Ax/issues.\n", - "\n", - "----" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "57bd0456-19bb-4181-baf0-cb0c122d94a4" - }, - "source": [ - "## 3. Leveraging Ax storage stack via `Models.BOTORCH_MODULAR`" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "4d0ef735-2ec8-4d76-bfe7-40399a48be12" - }, - "source": [ - "To simplify the instantiation of an Ax `ModelBridge` and its undelying `Model`, Ax provides a [`Models` registry enum](https://github.com/facebook/Ax/blob/main/ax/modelbridge/registry.py#L201). \n", - "\n", - "Here we use `Models.BOTORCH_MODULAR` to set up a multi-fidelity Knowledge Gradient (GPKG) model. We specify both the surrogate and the acquisition to customize both components:" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "originalKey": "a1cece55-c01e-4224-9354-8c6f58098155" - }, - "outputs": [], - "source": [ - "experiment = get_branin_experiment(with_fidelity_parameter=True, with_trial=True)\n", - "data = get_branin_data(trials=[experiment.trials[0]])" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "originalKey": "fbf4f6fe-c952-40b1-b7d0-d0cf583a9d9d" - }, - "outputs": [ + "Arm Parameterizations": { + "0_0": { + "x1": 0.6, + "x2": 0.31 + } + }, + "Generation Model": "Sobol", + "Generation Step": 0, + "Trial Index": 0, + "Trial Status": "COMPLETED", + "index": 0 + }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 12-29 21:10:47] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" - ] - } - ], - "source": [ - "model_bridge_with_GPKG = Models.BOTORCH_MODULAR( # Will automatically select `BoTorchModel` and `TorchModelBridge`\n", - " experiment=experiment,\n", - " data=data,\n", - " surrogate=Surrogate(\n", - " SingleTaskMultiFidelityGP\n", - " ), # Optional, will use default if unspecified\n", - " acquisition_class=MultiFidelityKnowledgeGradient, # Optional, will use default if unspecified\n", - " acquisition_options=DEFAULT_ACQUISITION_OPTIONS, # Optional\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "c7f60b0c-b83b-49c4-96f2-509fac7fca54" - }, - "source": [ - "We can now use the model bridge to generate candidates:" - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "originalKey": "ca3eff89-9bec-4053-b9ff-e2c0bc826179" - }, - "outputs": [ + "Arm Parameterizations": { + "1_0": { + "x1": 4.02, + "x2": 0.48 + } + }, + "Generation Model": "Sobol", + "Generation Step": 0, + "Trial Index": 1, + "Trial Status": "COMPLETED", + "index": 1 + }, { - "data": { - "text/plain": [ - "[Arm(parameters={'x1': 9.931203095212535, 'x2': 6.123563213741994, 'fidelity': 0.0})]" - ] - }, - "execution_count": 14, - "metadata": { - "bento_obj_id": "140501402266832" - }, - "output_type": "execute_result" - } - ], - "source": [ - "generator_run = model_bridge_with_GPKG.gen(\n", - " n=1, model_gen_options={\"optimizer_kwargs\": DEFAULT_OPTIMIZER_OPTIONS}\n", - ")\n", - "generator_run.arms" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "f31a5adf-c6a5-4adb-9478-8f4d749f79a6" - }, - "source": [ - "Generator run also records all arguments to model bridge and model, which allows to restore the model state from a generator run it produced. Therefore, the generator run can then be serialized and stored, then recreated:" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "originalKey": "58841930-c828-4191-99e2-f418fd30b211" - }, - "outputs": [], - "source": [ - "from ax.storage.json_store.encoder import object_to_json\n", - "from ax.storage.json_store.decoder import object_from_json\n", - "from ax.modelbridge.registry import get_model_from_generator_run" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "originalKey": "097fbef6-4ba3-4a8d-b8bc-9209267438d7" - }, - "outputs": [], - "source": [ - "generator_run_restored = object_from_json(object_to_json(generator_run))" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "originalKey": "46405a34-4e4b-4a06-a964-b52a2307f6b1" - }, - "outputs": [ + "Arm Parameterizations": { + "2_0": { + "x1": 5.63, + "x2": 4.15 + } + }, + "Generation Model": "Sobol", + "Generation Step": 0, + "Trial Index": 2, + "Trial Status": "COMPLETED", + "index": 2 + }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 12-29 21:20:21] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" - ] + "Arm Parameterizations": { + "3_0": { + "x1": -3.57, + "x2": 2.06 + } + }, + "Generation Model": "Sobol", + "Generation Step": 0, + "Trial Index": 3, + "Trial Status": "COMPLETED", + "index": 3 }, { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 17, - "metadata": { - "bento_obj_id": "140499819165648" - }, - "output_type": "execute_result" - } - ], - "source": [ - "model_bridge_with_GPKG_restored = get_model_from_generator_run(\n", - " generator_run_restored, experiment, data\n", - ")\n", - "model_bridge_with_GPKG_restored" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "82d2f3eb-5d2a-42db-b9ab-0bc9dea8c409" - }, - "source": [ - "**Note that not all arguments to BoTorch `Model` or `AcquisitionFunction` are serializable by default!** For example, a BoTorch `Prior` object, which could be among `Surrogate.model_options`, does not currently have associated serialization logic in Ax. See Appendix 3 for how to address errors that stem from some objects among options lacking serialization logic." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "7fc75fb1-c2be-42b5-acee-81fe9b14b50c" - }, - "source": [ - "----" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "3ab5bb38-b370-46be-8038-fbfc56f8651a" - }, - "source": [ - "## 4. Utilizing `BoTorchModel` in generation strategies" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "e918cbc3-9c71-4a26-8858-3ba61979fe00" - }, - "source": [ - "Generation strategy is a key concept in Ax, enabling use of Service API (a.k.a. `AxClient`) and many other higher-level abstractions. A [`GenerationStrategy`](https://ax.dev/api/modelbridge.html#ax.modelbridge.generation_strategy.GenerationStrategy) allows to chain multiple models in Ax and thereby automate candidate generation. \n", - "\n", - "An example generation stategy with the modular `BoTorchModel` would look like this:" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": { - "originalKey": "1c6a3128-1d72-4675-98a9-ae7d82f81b1f" - }, - "outputs": [], - "source": [ - "from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy\n", - "from botorch.acquisition import UpperConfidenceBound\n", - "from ax.modelbridge.modelbridge_utils import get_pending_observation_features\n", - "\n", - "gs = GenerationStrategy(\n", - " steps=[\n", - " GenerationStep(\n", - " model=Models.SOBOL, # Which model to use for this ste[]\n", - " num_trials=5, # How many generator runs (which are then made into trials) to produce with this step\n", - " min_trials_observed=5, # How many trials generated from this step must be `COMPLETED` before the next one\n", - " ),\n", - " GenerationStep(\n", - " model=Models.BOTORCH_MODULAR,\n", - " num_trials=-1, # No limit on how many generator runs will be produced\n", - " model_kwargs={ # Kwargs to pass to `BoTorchModel.__init__`\n", - " \"surrogate\": Surrogate(SingleTaskGP),\n", - " \"botorch_acqf_class\": qNoisyExpectedImprovement,\n", - " \"acquisition_options\": DEFAULT_ACQUISITION_OPTIONS,\n", - " },\n", - " model_gen_kwargs={\n", - " \"model_gen_options\": { # Kwargs to pass to `BoTorchModel.gen`\n", - " \"optimizer_kwargs\": DEFAULT_OPTIMIZER_OPTIONS\n", - " },\n", - " },\n", - " ),\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "611f878b-8c0e-4fc9-95e6-089401c4811b" - }, - "source": [ - "Set up an experiment and generate 10 trials in it, adding synthetic data to experiment after each one:" - ] - }, - { - "cell_type": "code", - "execution_count": 32, - "metadata": { - "originalKey": "add25138-81d6-4108-8b86-d565ec28e003" - }, - "outputs": [ + "Arm Parameterizations": { + "4_0": { + "x1": -1.02, + "x2": 10.5 + } + }, + "Generation Model": "Sobol", + "Generation Step": 0, + "Trial Index": 4, + "Trial Status": "COMPLETED", + "index": 4 + }, { - "data": { - "text/plain": [ - "SearchSpace(parameters=[RangeParameter(name='x1', parameter_type=FLOAT, range=[-5.0, 10.0]), RangeParameter(name='x2', parameter_type=FLOAT, range=[0.0, 15.0])], parameter_constraints=[])" - ] - }, - "execution_count": 32, - "metadata": { - "bento_obj_id": "140501404980176" - }, - "output_type": "execute_result" - } - ], - "source": [ - "experiment = get_branin_experiment(minimize=True)\n", - "\n", - "assert len(experiment.trials) == 0\n", - "experiment.search_space" - ] - }, - { - "cell_type": "code", - "execution_count": 33, - "metadata": { - "originalKey": "b06a5d2a-f15d-43f1-a994-28dde25906c1" - }, - "outputs": [ + "Arm Parameterizations": { + "5_0": { + "x1": 2.65, + "x2": 15 + } + }, + "Generation Model": "BoTorch", + "Generation Step": 1, + "Trial Index": 5, + "Trial Status": "COMPLETED", + "index": 5 + }, { - "name": "stdout", - "output_type": "stream", - "text": [ - "Completed trial #0, suggested by Sobol.\n", - "Completed trial #1, suggested by Sobol.\n", - "Completed trial #2, suggested by Sobol.\n", - "Completed trial #3, suggested by Sobol.\n", - "Completed trial #4, suggested by Sobol.\n", - "Completed trial #5, suggested by BoTorch.\n", - "Completed trial #6, suggested by BoTorch.\n", - "Completed trial #7, suggested by BoTorch.\n", - "Completed trial #8, suggested by BoTorch.\n", - "Completed trial #9, suggested by BoTorch.\n" - ] - } - ], - "source": [ - "for _ in range(10):\n", - " # Produce a new generator run and attach it to experiment as a trial\n", - " generator_run = gs.gen(\n", - " experiment=experiment,\n", - " n=1,\n", - " )\n", - " trial = experiment.new_trial(generator_run)\n", - "\n", - " # Mark the trial as 'RUNNING' so we can mark it 'COMPLETED' later\n", - " trial.mark_running(no_runner_required=True)\n", - "\n", - " # Attach data for the new trial and mark it 'COMPLETED'\n", - " experiment.attach_data(get_branin_data(trials=[trial]))\n", - " trial.mark_completed()\n", - "\n", - " print(f\"Completed trial #{trial.index}, suggested by {generator_run._model_key}.\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "5b474522-a090-493b-a274-548ac35d2587" - }, - "source": [ - "Inspect trials that were generated:" - ] - }, - { - "cell_type": "code", - "execution_count": 34, - "metadata": { - "originalKey": "8d3a27e5-987c-4cc8-9e17-d97143f3e275" - }, - "outputs": [ + "Arm Parameterizations": { + "6_0": { + "x1": 2.64, + "x2": 15 + } + }, + "Generation Model": "BoTorch", + "Generation Step": 1, + "Trial Index": 6, + "Trial Status": "COMPLETED", + "index": 6 + }, { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 12-29 21:27:42] ax.modelbridge.generation_strategy: Note that parameter values in dataframe are rounded to 2 decimal points; the values in the dataframe are thus not the exact ones suggested by Ax in trials.\n" - ] + "Arm Parameterizations": { + "7_0": { + "x1": 2.63, + "x2": 15 + } + }, + "Generation Model": "BoTorch", + "Generation Step": 1, + "Trial Index": 7, + "Trial Status": "COMPLETED", + "index": 7 }, { - "data": { - "application/vnd.dataresource+json": { - "data": [ - { - "Arm Parameterizations": { - "0_0": { - "x1": 0.6, - "x2": 0.31 - } - }, - "Generation Model": "Sobol", - "Generation Step": 0, - "Trial Index": 0, - "Trial Status": "COMPLETED", - "index": 0 - }, - { - "Arm Parameterizations": { - "1_0": { - "x1": 4.02, - "x2": 0.48 - } - }, - "Generation Model": "Sobol", - "Generation Step": 0, - "Trial Index": 1, - "Trial Status": "COMPLETED", - "index": 1 - }, - { - "Arm Parameterizations": { - "2_0": { - "x1": 5.63, - "x2": 4.15 - } - }, - "Generation Model": "Sobol", - "Generation Step": 0, - "Trial Index": 2, - "Trial Status": "COMPLETED", - "index": 2 - }, - { - "Arm Parameterizations": { - "3_0": { - "x1": -3.57, - "x2": 2.06 - } - }, - "Generation Model": "Sobol", - "Generation Step": 0, - "Trial Index": 3, - "Trial Status": "COMPLETED", - "index": 3 - }, - { - "Arm Parameterizations": { - "4_0": { - "x1": -1.02, - "x2": 10.5 - } - }, - "Generation Model": "Sobol", - "Generation Step": 0, - "Trial Index": 4, - "Trial Status": "COMPLETED", - "index": 4 - }, - { - "Arm Parameterizations": { - "5_0": { - "x1": 2.65, - "x2": 15 - } - }, - "Generation Model": "BoTorch", - "Generation Step": 1, - "Trial Index": 5, - "Trial Status": "COMPLETED", - "index": 5 - }, - { - "Arm Parameterizations": { - "6_0": { - "x1": 2.64, - "x2": 15 - } - }, - "Generation Model": "BoTorch", - "Generation Step": 1, - "Trial Index": 6, - "Trial Status": "COMPLETED", - "index": 6 - }, - { - "Arm Parameterizations": { - "7_0": { - "x1": 2.63, - "x2": 15 - } - }, - "Generation Model": "BoTorch", - "Generation Step": 1, - "Trial Index": 7, - "Trial Status": "COMPLETED", - "index": 7 - }, - { - "Arm Parameterizations": { - "8_0": { - "x1": 2.57, - "x2": 15 - } - }, - "Generation Model": "BoTorch", - "Generation Step": 1, - "Trial Index": 8, - "Trial Status": "COMPLETED", - "index": 8 - }, - { - "Arm Parameterizations": { - "9_0": { - "x1": 2.63, - "x2": 15 - } - }, - "Generation Model": "BoTorch", - "Generation Step": 1, - "Trial Index": 9, - "Trial Status": "COMPLETED", - "index": 9 - } - ], - "schema": { - "fields": [ - { - "name": "index", - "type": "integer" - }, - { - "name": "Generation Step", - "type": "integer" - }, - { - "name": "Generation Model", - "type": "string" - }, - { - "name": "Trial Index", - "type": "integer" - }, - { - "name": "Trial Status", - "type": "string" - }, - { - "name": "Arm Parameterizations", - "type": "string" - } - ], - "pandas_version": "0.20.0", - "primaryKey": [ - "index" - ] - } - }, - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
Generation StepGeneration ModelTrial IndexTrial StatusArm Parameterizations
00Sobol0COMPLETED{'0_0': {'x1': 0.6, 'x2': 0.31}}
10Sobol1COMPLETED{'1_0': {'x1': 4.02, 'x2': 0.48}}
20Sobol2COMPLETED{'2_0': {'x1': 5.63, 'x2': 4.15}}
30Sobol3COMPLETED{'3_0': {'x1': -3.57, 'x2': 2.06}}
40Sobol4COMPLETED{'4_0': {'x1': -1.02, 'x2': 10.5}}
51BoTorch5COMPLETED{'5_0': {'x1': 2.65, 'x2': 15.0}}
61BoTorch6COMPLETED{'6_0': {'x1': 2.64, 'x2': 15.0}}
71BoTorch7COMPLETED{'7_0': {'x1': 2.63, 'x2': 15.0}}
81BoTorch8COMPLETED{'8_0': {'x1': 2.57, 'x2': 15.0}}
91BoTorch9COMPLETED{'9_0': {'x1': 2.63, 'x2': 15.0}}
\n", - "
" - ], - "text/plain": [ - " Generation Step ... Arm Parameterizations\n", - "0 0 ... {'0_0': {'x1': 0.6, 'x2': 0.31}}\n", - "1 0 ... {'1_0': {'x1': 4.02, 'x2': 0.48}}\n", - "2 0 ... {'2_0': {'x1': 5.63, 'x2': 4.15}}\n", - "3 0 ... {'3_0': {'x1': -3.57, 'x2': 2.06}}\n", - "4 0 ... {'4_0': {'x1': -1.02, 'x2': 10.5}}\n", - "5 1 ... {'5_0': {'x1': 2.65, 'x2': 15.0}}\n", - "6 1 ... {'6_0': {'x1': 2.64, 'x2': 15.0}}\n", - "7 1 ... {'7_0': {'x1': 2.63, 'x2': 15.0}}\n", - "8 1 ... {'8_0': {'x1': 2.57, 'x2': 15.0}}\n", - "9 1 ... {'9_0': {'x1': 2.63, 'x2': 15.0}}\n", - "\n", - "[10 rows x 5 columns]" - ] - }, - "execution_count": 34, - "metadata": { - "bento_obj_id": "140501389292752" - }, - "output_type": "execute_result" + "Arm Parameterizations": { + "8_0": { + "x1": 2.57, + "x2": 15 + } + }, + "Generation Model": "BoTorch", + "Generation Step": 1, + "Trial Index": 8, + "Trial Status": "COMPLETED", + "index": 8 + }, + { + "Arm Parameterizations": { + "9_0": { + "x1": 2.63, + "x2": 15 + } + }, + "Generation Model": "BoTorch", + "Generation Step": 1, + "Trial Index": 9, + "Trial Status": "COMPLETED", + "index": 9 } - ], - "source": [ - "gs.trials_as_df" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "58b845f4-0e10-42d9-8305-fae212421fbf" + ], + "schema": { + "fields": [ + { + "name": "index", + "type": "integer" + }, + { + "name": "Generation Step", + "type": "integer" + }, + { + "name": "Generation Model", + "type": "string" + }, + { + "name": "Trial Index", + "type": "integer" + }, + { + "name": "Trial Status", + "type": "string" + }, + { + "name": "Arm Parameterizations", + "type": "string" + } + ], + "pandas_version": "0.20.0", + "primaryKey": [ + "index" + ] + } }, - "source": [ - "----" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "cbaaff61-5d90-470f-a23a-076551b7155d" - }, - "source": [ - "## Appendix 1: Methods available on `BoTorchModel`\n", - "\n", - "**Core methods on `BoTorchModel`:**\n", - "\n", - "* `fit` selects a surrogate if needed and fits the surrogate model to data via `Surrogate.fit`,\n", - "* `predict` estimates metric values at a given point via `Surrogate.predict`,\n", - "* `gen` instantiates an acquisition function via `Acquisition.__init__` and optimizes it to generate candidates.\n", - "\n", - "**Other methods on `BoTorchModel`:**\n", - "\n", - "* `update` updates surrogate model with training data and optionally reoptimizes model parameters via `Surrogate.update`,\n", - "* `cross_validate` re-fits the surrogate model to subset of training data and makes predictions for test data,\n", - "* `evaluate_acquisition_function` instantiates an acquisitino function and evaluates it for a given point.\n", - "---" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "19a2590f-d0f8-41d5-950e-03766379a55a" - }, - "source": [ - "## Appendix 2: Default surrogate models and acquisition functions\n", - "\n", - "By default, the chosen surrogate model will be:\n", - "\n", - "* if fidelity parameters are present in search space: `FixedNoiseMultiFidelityGP` (if [SEM](https://ax.dev/docs/glossary.html#sem)s are known on observations) and `SingleTaskMultiFidelityGP` (if variance unknown and needs to be inferred),\n", - "* if task parameters are present: a set of `FixedNoiseMultiTaskGP` (if known variance) or `MultiTaskGP` (if unknown variance), wrapped in a `ModelListGP` and each modeling one task,\n", - "* `FixedNoiseGP` (known variance) and `SingleTaskGP` (unknown variance) otherwise.\n", - "\n", - "The chosen acquisition function will be:\n", - "\n", - "* for multi-fidelity settings: `qMultiFidelityKnowledgeGradient`,\n", - "* `qExpectedImprovement` (known variance) and `qNoisyExpectedImprovement` (unknown variance) otherwise.\n", - "\n", - "----" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "7dc54c6a-dea6-4b65-be7c-b9050a684bfb" - }, - "source": [ - "## Appendix 3: Handling storage errors that arise from objects that don't have serialization logic in Ax\n", - "\n", - "Attempting to store a generator run produced via `Models.BOTORCH_MODULAR` instance that included options without serization logic with will produce an error like: `\"Object passed to `object_to_json` (of type ) is not registered with a corresponding encoder in ENCODER_REGISTRY.\"` \n", - "\n", - "The two options for handling this error are:\n", - "1. disabling storage of `BoTorchModel`'s options by passing `no_model_options_storage=True` to `Models.BOTORCH_MODULAR(...)` call –– this will prevent model options from being stored on the generator run, so a generator run can be saved but cannot be used to restore the model that produced it,\n", - "2. specifying serialization logic for a given object that needs to occur among the `Model` or `AcquisitionFunction` options. Tutorial for this is in the works, but in the meantime you can [post an issue on the Ax GitHub](https://github.com/facebook/Ax/issues) to get help with this." + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Generation StepGeneration ModelTrial IndexTrial StatusArm Parameterizations
00Sobol0COMPLETED{'0_0': {'x1': 0.6, 'x2': 0.31}}
10Sobol1COMPLETED{'1_0': {'x1': 4.02, 'x2': 0.48}}
20Sobol2COMPLETED{'2_0': {'x1': 5.63, 'x2': 4.15}}
30Sobol3COMPLETED{'3_0': {'x1': -3.57, 'x2': 2.06}}
40Sobol4COMPLETED{'4_0': {'x1': -1.02, 'x2': 10.5}}
51BoTorch5COMPLETED{'5_0': {'x1': 2.65, 'x2': 15.0}}
61BoTorch6COMPLETED{'6_0': {'x1': 2.64, 'x2': 15.0}}
71BoTorch7COMPLETED{'7_0': {'x1': 2.63, 'x2': 15.0}}
81BoTorch8COMPLETED{'8_0': {'x1': 2.57, 'x2': 15.0}}
91BoTorch9COMPLETED{'9_0': {'x1': 2.63, 'x2': 15.0}}
\n", + "
" + ], + "text/plain": [ + " Generation Step ... Arm Parameterizations\n", + "0 0 ... {'0_0': {'x1': 0.6, 'x2': 0.31}}\n", + "1 0 ... {'1_0': {'x1': 4.02, 'x2': 0.48}}\n", + "2 0 ... {'2_0': {'x1': 5.63, 'x2': 4.15}}\n", + "3 0 ... {'3_0': {'x1': -3.57, 'x2': 2.06}}\n", + "4 0 ... {'4_0': {'x1': -1.02, 'x2': 10.5}}\n", + "5 1 ... {'5_0': {'x1': 2.65, 'x2': 15.0}}\n", + "6 1 ... {'6_0': {'x1': 2.64, 'x2': 15.0}}\n", + "7 1 ... {'7_0': {'x1': 2.63, 'x2': 15.0}}\n", + "8 1 ... {'8_0': {'x1': 2.57, 'x2': 15.0}}\n", + "9 1 ... {'9_0': {'x1': 2.63, 'x2': 15.0}}\n", + "\n", + "[10 rows x 5 columns]" ] + }, + "execution_count": 34, + "metadata": { + "bento_obj_id": "140501389292752" + }, + "output_type": "execute_result" } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } + ], + "source": [ + "gs.trials_as_df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "58b845f4-0e10-42d9-8305-fae212421fbf" + }, + "source": [ + "----" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "cbaaff61-5d90-470f-a23a-076551b7155d" + }, + "source": [ + "## Appendix 1: Methods available on `BoTorchModel`\n", + "\n", + "**Core methods on `BoTorchModel`:**\n", + "\n", + "* `fit` selects a surrogate if needed and fits the surrogate model to data via `Surrogate.fit`,\n", + "* `predict` estimates metric values at a given point via `Surrogate.predict`,\n", + "* `gen` instantiates an acquisition function via `Acquisition.__init__` and optimizes it to generate candidates.\n", + "\n", + "**Other methods on `BoTorchModel`:**\n", + "\n", + "* `update` updates surrogate model with training data and optionally reoptimizes model parameters via `Surrogate.update`,\n", + "* `cross_validate` re-fits the surrogate model to subset of training data and makes predictions for test data,\n", + "* `evaluate_acquisition_function` instantiates an acquisitino function and evaluates it for a given point.\n", + "---" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "19a2590f-d0f8-41d5-950e-03766379a55a" + }, + "source": [ + "## Appendix 2: Default surrogate models and acquisition functions\n", + "\n", + "By default, the chosen surrogate model will be:\n", + "\n", + "* if fidelity parameters are present in search space: `FixedNoiseMultiFidelityGP` (if [SEM](https://ax.dev/docs/glossary.html#sem)s are known on observations) and `SingleTaskMultiFidelityGP` (if variance unknown and needs to be inferred),\n", + "* if task parameters are present: a set of `FixedNoiseMultiTaskGP` (if known variance) or `MultiTaskGP` (if unknown variance), wrapped in a `ModelListGP` and each modeling one task,\n", + "* `FixedNoiseGP` (known variance) and `SingleTaskGP` (unknown variance) otherwise.\n", + "\n", + "The chosen acquisition function will be:\n", + "\n", + "* for multi-fidelity settings: `qMultiFidelityKnowledgeGradient`,\n", + "* `qExpectedImprovement` (known variance) and `qNoisyExpectedImprovement` (unknown variance) otherwise.\n", + "\n", + "----" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "7dc54c6a-dea6-4b65-be7c-b9050a684bfb" + }, + "source": [ + "## Appendix 3: Handling storage errors that arise from objects that don't have serialization logic in Ax\n", + "\n", + "Attempting to store a generator run produced via `Models.BOTORCH_MODULAR` instance that included options without serization logic with will produce an error like: `\"Object passed to `object_to_json` (of type ) is not registered with a corresponding encoder in ENCODER_REGISTRY.\"` \n", + "\n", + "The two options for handling this error are:\n", + "1. disabling storage of `BoTorchModel`'s options by passing `no_model_options_storage=True` to `Models.BOTORCH_MODULAR(...)` call –– this will prevent model options from being stored on the generator run, so a generator run can be saved but cannot be used to restore the model that produced it,\n", + "2. specifying serialization logic for a given object that needs to occur among the `Model` or `AcquisitionFunction` options. Tutorial for this is in the works, but in the meantime you can [post an issue on the Ax GitHub](https://github.com/facebook/Ax/issues) to get help with this." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "nbformat": 4, - "nbformat_minor": 2 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/ax_client_snapshot.json b/tutorials/ax_client_snapshot.json new file mode 100644 index 00000000000..d4bbd56e5b2 --- /dev/null +++ b/tutorials/ax_client_snapshot.json @@ -0,0 +1 @@ +{"_type": "AxClient", "experiment": {"__type": "Experiment", "name": "hartmann_test_experiment", "description": null, "experiment_type": null, "search_space": {"__type": "SearchSpace", "parameters": [{"__type": "RangeParameter", "name": "x1", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}, {"__type": "RangeParameter", "name": "x2", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}, {"__type": "RangeParameter", "name": "x3", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}, {"__type": "RangeParameter", "name": "x4", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}, {"__type": "RangeParameter", "name": "x5", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}, {"__type": "RangeParameter", "name": "x6", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}], "parameter_constraints": [{"__type": "ParameterConstraint", "constraint_dict": {"x1": 1.0, "x2": 1.0}, "bound": 2.0}]}, "optimization_config": {"__type": "OptimizationConfig", "objective": {"__type": "Objective", "metric": {"name": "hartmann6", "lower_is_better": true, "properties": {}, "__type": "Metric"}, "minimize": true}, "outcome_constraints": [{"__type": "OutcomeConstraint", "metric": {"name": "l2norm", "lower_is_better": true, "properties": {}, "__type": "Metric"}, "op": {"__type": "ComparisonOp", "name": "LEQ"}, "bound": 1.25, "relative": false}], "risk_measure": null}, "tracking_metrics": [], "runner": null, "status_quo": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:30.961373"}, "trials": {"0": {"__type": "Trial", "index": 0, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.043888"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.048203"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.044433"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.34556832909584045, "x2": 0.8998619914054871, "x3": 0.9205441474914551, "x4": 0.15568500757217407, "x5": 0.4790315628051758, "x6": 0.047634951770305634}, "name": "0_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.043837"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0020190410014038207, "gen_time": 0.0015755839995108545, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 0, "scramble": true, "generated_points": null, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634]]}, "init_position": 1}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "1": {"__type": "Trial", "index": 1, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.054352"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.058271"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.054910"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.5975945321843028, "x2": 0.1608173120766878, "x3": 0.9991439301520586, "x4": 0.4354516323655844, "x5": 0.49805970024317503, "x6": 0.527527536265552}, "name": "1_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.054306"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0014545829999406124, "gen_time": 0.0014145410004857695, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 1, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552]]}, "init_position": 2}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "2": {"__type": "Trial", "index": 2, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.062774"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.066243"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.063115"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2350237090140581, "x2": 0.6300385370850563, "x3": 0.44755726493895054, "x4": 0.9293722407892346, "x5": 0.2906326949596405, "x6": 0.9519209349527955}, "name": "2_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.062736"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0010788749987113988, "gen_time": 0.0011238330007472541, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 2, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955]]}, "init_position": 3}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "3": {"__type": "Trial", "index": 3, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.071528"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.074578"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.071925"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.8661647150292993, "x2": 0.197776704095304, "x3": 0.9055851427838206, "x4": 0.9940777402371168, "x5": 0.5372729385271668, "x6": 0.7754488028585911}, "name": "3_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.071489"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.001342666000709869, "gen_time": 0.001211540999065619, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 3, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911]]}, "init_position": 4}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "4": {"__type": "Trial", "index": 4, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.080982"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.084228"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.081577"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.566324700601399, "x2": 0.7277999361976981, "x3": 0.9949833592399955, "x4": 0.026425880379974842, "x5": 0.604908237233758, "x6": 0.24109728448092937}, "name": "4_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.080935"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0016741679992264835, "gen_time": 0.0012215410006319871, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 4, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937]]}, "init_position": 5}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "5": {"__type": "Trial", "index": 5, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.090528"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.093837"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.090925"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.988483153283596, "x2": 0.35287413466721773, "x3": 0.8216384099796414, "x4": 0.14335020631551743, "x5": 0.5516453264281154, "x6": 0.6434762999415398}, "name": "5_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.090488"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0017037919988069916, "gen_time": 0.0009751249999681022, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 5, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398]]}, "init_position": 6}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "6": {"__type": "Trial", "index": 6, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.100779"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.104444"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.101248"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.12221025116741657, "x2": 0.5256350003182888, "x3": 0.6597777465358377, "x4": 0.13555301539599895, "x5": 0.074379269964993, "x6": 0.9562593204900622}, "name": "6_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.100739"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0020456250003917376, "gen_time": 0.001330541999777779, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 6, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622]]}, "init_position": 7}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "7": {"__type": "Trial", "index": 7, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.111496"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.115672"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.112038"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.73419897723943, "x2": 0.03812931291759014, "x3": 0.6194512750953436, "x4": 0.9365793969482183, "x5": 0.5389744667336345, "x6": 0.1475576488301158}, "name": "7_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.111452"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0022249589983402984, "gen_time": 0.0012747079999826383, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 7, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158]]}, "init_position": 8}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "8": {"__type": "Trial", "index": 8, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.122483"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.125658"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.122816"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.780962273478508, "x2": 0.8393641794100404, "x3": 0.6721038045361638, "x4": 0.2585572600364685, "x5": 0.1679433174431324, "x6": 0.7078540809452534}, "name": "8_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.122444"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.001958750000994769, "gen_time": 0.0014972080007282784, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 8, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534]]}, "init_position": 9}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "9": {"__type": "Trial", "index": 9, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.133677"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.137509"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.134287"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.5788483498618007, "x2": 0.3142134537920356, "x3": 0.019604711793363094, "x4": 0.3354746289551258, "x5": 0.16610265895724297, "x6": 0.5644277287647128}, "name": "9_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.133609"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0016367909993277863, "gen_time": 0.0017315409986622399, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 9, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128]]}, "init_position": 10}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "10": {"__type": "Trial", "index": 10, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.144824"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.147703"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.145191"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.3490928951650858, "x2": 0.5662246681749821, "x3": 0.7572343731299043, "x4": 0.3599182656034827, "x5": 0.44590070750564337, "x6": 0.9307971941307187}, "name": "10_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.144785"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.002274915999805671, "gen_time": 0.0013804999998683343, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 10, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128], [0.3490928951650858, 0.5662246681749821, 0.7572343731299043, 0.3599182656034827, 0.44590070750564337, 0.9307971941307187]]}, "init_position": 11}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "11": {"__type": "Trial", "index": 11, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.155746"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.159465"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.156244"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.16439795773476362, "x2": 0.025402813218533993, "x3": 0.8527070758864284, "x4": 0.8268039105460048, "x5": 0.2759943390265107, "x6": 0.27521051559597254}, "name": "11_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.155694"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.002336792000278365, "gen_time": 0.001766540999597055, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 11, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128], [0.3490928951650858, 0.5662246681749821, 0.7572343731299043, 0.3599182656034827, 0.44590070750564337, 0.9307971941307187]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128], [0.3490928951650858, 0.5662246681749821, 0.7572343731299043, 0.3599182656034827, 0.44590070750564337, 0.9307971941307187], [0.16439795773476362, 0.025402813218533993, 0.8527070758864284, 0.8268039105460048, 0.2759943390265107, 0.27521051559597254]]}, "init_position": 12}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "12": {"__type": "Trial", "index": 12, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:47.378917"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:47.390071"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:47.387767"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.4552874054947785, "x2": 0.3365340588990419, "x3": 0.10653586689335244, "x4": 0.2808056241598078, "x5": 0.16273102352394417, "x6": 0.6474192621063405}, "name": "12_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:47.378869"}, "model_predictions": [{"hartmann6": [-0.9441877686508071], "l2norm": [1.0328187257612655]}, {"hartmann6": {"hartmann6": [0.048995677045983996], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.01717706846730772]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.5788483498618007, "x2": 0.3142134537920356, "x3": 0.019604711793363094, "x4": 0.3354746289551258, "x5": 0.16610265895724297, "x6": 0.5644277287647128}, "name": "9_0"}, [{"hartmann6": -1.0278838947399898, "l2norm": 0.944929996400905}, {"hartmann6": {"hartmann6": 1.437671975861058e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 4.90408144320177e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.12333670800035179, "gen_time": 16.092193667000174, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.0173747402553337}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "13": {"__type": "Trial", "index": 13, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:52.327541"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:52.342559"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:52.339991"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.36821334447451015, "x2": 0.3589521229774258, "x3": 0.19355545713881317, "x4": 0.24951358477611804, "x5": 0.16443059539562763, "x6": 0.718746513621701}, "name": "13_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:52.327491"}, "model_predictions": [{"hartmann6": [-1.4641122142582226], "l2norm": [1.0012706913375915]}, {"hartmann6": {"hartmann6": [0.030909051825217672], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.005692359105174811]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.4552874054947785, "x2": 0.3365340588990419, "x3": 0.10653586689335244, "x4": 0.2808056241598078, "x5": 0.16273102352394417, "x6": 0.6474192621063405}, "name": "12_0"}, [{"hartmann6": -1.461094938606239, "l2norm": 0.9254065996550563}, {"hartmann6": {"hartmann6": 2.2703963033213378e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 6.6053881965092e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.04543954200016742, "gen_time": 4.879726459001176, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -1.8956594179973916}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "14": {"__type": "Trial", "index": 14, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:56.609164"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:56.619840"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:56.616724"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2736629388383685, "x2": 0.34896315255873195, "x3": 0.10274090061700827, "x4": 0.22201465717907948, "x5": 0.1854896518030625, "x6": 0.7134614061015596}, "name": "14_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:56.609112"}, "model_predictions": [{"hartmann6": [-1.5353721507629934], "l2norm": [0.9685656643117776]}, {"hartmann6": {"hartmann6": [0.029697857277550282], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.005534452500544122]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.36821334447451015, "x2": 0.3589521229774258, "x3": 0.19355545713881317, "x4": 0.24951358477611804, "x5": 0.16443059539562763, "x6": 0.718746513621701}, "name": "13_0"}, [{"hartmann6": -1.618518874569555, "l2norm": 0.9527768609065774}, {"hartmann6": {"hartmann6": 3.098069803895141e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 7.582907524341803e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.07428141700074775, "gen_time": 4.161116791001405, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.767056875390724}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "15": {"__type": "Trial", "index": 15, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:01.001358"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:01.006876"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:01.003766"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.27862790145711586, "x2": 0.2678416417051815, "x3": 0.07332969645764803, "x4": 0.2116658989222811, "x5": 0.14532858649580174, "x6": 0.8069042766113912}, "name": "15_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:01.001249"}, "model_predictions": [{"hartmann6": [-1.6268025164664535], "l2norm": [0.9218983466621398]}, {"hartmann6": {"hartmann6": [0.029539489184193503], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.00646709525404583]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2736629388383685, "x2": 0.34896315255873195, "x3": 0.10274090061700827, "x4": 0.22201465717907948, "x5": 0.1854896518030625, "x6": 0.7134614061015596}, "name": "14_0"}, [{"hartmann6": -1.7219556240450526, "l2norm": 0.8943984213278539}, {"hartmann6": {"hartmann6": 3.842271386429435e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 8.589352759078205e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.054238333001194405, "gen_time": 4.299597334000282, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.984595157506448}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "16": {"__type": "Trial", "index": 16, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:05.047671"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:05.053983"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:05.050841"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.24242211077361314, "x2": 0.405298114898372, "x3": 0.11383383562266966, "x4": 0.22010782981738555, "x5": 0.20584164625985782, "x6": 0.6606613471467421}, "name": "16_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:05.047618"}, "model_predictions": [{"hartmann6": [-1.7456807248478459], "l2norm": [0.9020008986123116]}, {"hartmann6": {"hartmann6": [0.014736574448469809], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.00078979608797791]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2736629388383685, "x2": 0.34896315255873195, "x3": 0.10274090061700827, "x4": 0.22201465717907948, "x5": 0.1854896518030625, "x6": 0.7134614061015596}, "name": "14_0"}, [{"hartmann6": -1.7219537974668724, "l2norm": 0.8943988277441965}, {"hartmann6": {"hartmann6": 3.89005602206933e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.069554059284809e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.06051074999959383, "gen_time": 3.971508124999673, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.3209312563313853}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "17": {"__type": "Trial", "index": 17, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:09.072203"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:09.084410"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:09.077709"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.26456361129160944, "x2": 0.37005081505602005, "x3": 0.14056926502685665, "x4": 0.23055695919120733, "x5": 0.2837962383843752, "x6": 0.682020139238482}, "name": "17_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:09.072151"}, "model_predictions": [{"hartmann6": [-1.705345329763197], "l2norm": [0.9075856098546564]}, {"hartmann6": {"hartmann6": [0.01716663190206054], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0023026878705464378]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.24242211077361314, "x2": 0.405298114898372, "x3": 0.11383383562266966, "x4": 0.22010782981738555, "x5": 0.20584164625985782, "x6": 0.6606613471467421}, "name": "16_0"}, [{"hartmann6": -1.7486697460925418, "l2norm": 0.8736656731723248}, {"hartmann6": {"hartmann6": 4.366820160143231e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.665079633131103e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.037308875000235275, "gen_time": 3.970641333999083, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.9848168488157314}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "18": {"__type": "Trial", "index": 18, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:13.377181"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:13.405623"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:13.395408"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2939662446339975, "x2": 0.3362031138043549, "x3": 0.17370161959673996, "x4": 0.2333654853567155, "x5": 0.32647620480075445, "x6": 0.7112117436026573}, "name": "18_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:13.377133"}, "model_predictions": [{"hartmann6": [-2.297403733959694], "l2norm": [0.9533942921228549]}, {"hartmann6": {"hartmann6": [0.014500056953731168], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0002042835068066559]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.26456361129160944, "x2": 0.37005081505602005, "x3": 0.14056926502685665, "x4": 0.23055695919120733, "x5": 0.2837962383843752, "x6": 0.682020139238482}, "name": "17_0"}, [{"hartmann6": -2.243585809108853, "l2norm": 0.9085917728022965}, {"hartmann6": {"hartmann6": 5.421074568785626e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.915864240383566e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.041473667000900605, "gen_time": 4.241230125000584, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.2244071664230693}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "19": {"__type": "Trial", "index": 19, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:17.363293"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:17.374286"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:17.371205"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2628501072350645, "x2": 0.35420263999041296, "x3": 0.12722066820216826, "x4": 0.2788795074870812, "x5": 0.361534238347435, "x6": 0.726810075777407}, "name": "19_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:17.363245"}, "model_predictions": [{"hartmann6": [-2.293443813193414], "l2norm": [0.9514909675033829]}, {"hartmann6": {"hartmann6": [0.025806309669965766], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0008867119787893831]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2939662446339975, "x2": 0.3362031138043549, "x3": 0.17370161959673996, "x4": 0.2333654853567155, "x5": 0.32647620480075445, "x6": 0.7112117436026573}, "name": "18_0"}, [{"hartmann6": -2.3701303630510075, "l2norm": 0.9468348314760703}, {"hartmann6": {"hartmann6": 6.429084100800608e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.911508494619632e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.04359058299996832, "gen_time": 3.8790992080012074, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -3.189978755811567}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "20": {"__type": "Trial", "index": 20, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:21.264670"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:21.282226"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:21.278755"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2846320057574449, "x2": 0.2984792862437796, "x3": 0.20438156262175977, "x4": 0.1977645008047584, "x5": 0.3322262667259729, "x6": 0.6451669518907412}, "name": "20_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:21.264612"}, "model_predictions": [{"hartmann6": [-2.33301737228191], "l2norm": [0.9185609916920718]}, {"hartmann6": {"hartmann6": [0.01838431684344131], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0005608691556302735]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2939662446339975, "x2": 0.3362031138043549, "x3": 0.17370161959673996, "x4": 0.2333654853567155, "x5": 0.32647620480075445, "x6": 0.7112117436026573}, "name": "18_0"}, [{"hartmann6": -2.3701265745078812, "l2norm": 0.9468357258146438}, {"hartmann6": {"hartmann6": 6.936897669775966e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.782811343310444e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.049071290999563644, "gen_time": 3.8114641249994747, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -3.1014403191058038}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "21": {"__type": "Trial", "index": 21, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:25.042466"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:25.061863"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:25.054540"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.3152770673304702, "x2": 0.3298007563602044, "x3": 0.16560961921805775, "x4": 0.14190880181300594, "x5": 0.34858989357087156, "x6": 0.659230801214047}, "name": "21_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:25.042411"}, "model_predictions": [{"hartmann6": [-2.3663509290998426], "l2norm": [0.8985021252271612]}, {"hartmann6": {"hartmann6": [0.02385885913852919], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0007296228397805898]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2846320057574449, "x2": 0.2984792862437796, "x3": 0.20438156262175977, "x4": 0.1977645008047584, "x5": 0.3322262667259729, "x6": 0.6451669518907412}, "name": "20_0"}, [{"hartmann6": -2.4478018540163964, "l2norm": 0.8818235854765406}, {"hartmann6": {"hartmann6": 7.671718740585238e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.909521038527231e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.03181399999994028, "gen_time": 3.701914916999158, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -3.400073390643146}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "22": {"__type": "Trial", "index": 22, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:28.803593"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:28.817314"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:28.811259"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.25303245365817595, "x2": 0.27491228632682185, "x3": 0.23092235470425962, "x4": 0.23383600861552004, "x5": 0.3324706543603699, "x6": 0.6155888186135499}, "name": "22_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:28.803539"}, "model_predictions": [{"hartmann6": [-2.536451043276815], "l2norm": [0.8631356646928647]}, {"hartmann6": {"hartmann6": [0.009347608483219074], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [6.75871576831065e-05]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2846320057574449, "x2": 0.2984792862437796, "x3": 0.20438156262175977, "x4": 0.1977645008047584, "x5": 0.3322262667259729, "x6": 0.6451669518907412}, "name": "20_0"}, [{"hartmann6": -2.4477955073184523, "l2norm": 0.8818240789711347}, {"hartmann6": {"hartmann6": 7.707444854452991e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.908049968477374e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.03645750000032422, "gen_time": 3.6971976250006264, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.192061180393865}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "23": {"__type": "Trial", "index": 23, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:32.555917"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:32.564301"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:32.560935"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.22420905621003287, "x2": 0.24569695856207757, "x3": 0.2754493305462289, "x4": 0.2582100804116055, "x5": 0.3158264150965364, "x6": 0.6062330663417775}, "name": "23_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:32.555857"}, "model_predictions": [{"hartmann6": [-2.7047844723148957], "l2norm": [0.8501830565362622]}, {"hartmann6": {"hartmann6": [0.005992131927980093], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [6.520469742991018e-05]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.25303245365817595, "x2": 0.27491228632682185, "x3": 0.23092235470425962, "x4": 0.23383600861552004, "x5": 0.3324706543603699, "x6": 0.6155888186135499}, "name": "22_0"}, [{"hartmann6": -2.665140648241098, "l2norm": 0.8585485690290068}, {"hartmann6": {"hartmann6": 8.483242661619882e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.97262513270367e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.032488750000993605, "gen_time": 3.6951307500003168, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.8235253375544165}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "24": {"__type": "Trial", "index": 24, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:36.409907"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:36.431566"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:36.429305"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.19673857480875104, "x2": 0.20346916128076148, "x3": 0.32427577169337435, "x4": 0.2743887310854332, "x5": 0.29739532905225424, "x6": 0.6416637893800289}, "name": "24_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:36.409852"}, "model_predictions": [{"hartmann6": [-2.9613611965128843], "l2norm": [0.8700139985228407]}, {"hartmann6": {"hartmann6": [0.006241104649089343], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [9.047703396406608e-05]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.22420905621003287, "x2": 0.24569695856207757, "x3": 0.2754493305462289, "x4": 0.2582100804116055, "x5": 0.3158264150965364, "x6": 0.6062330663417775}, "name": "23_0"}, [{"hartmann6": -2.878521887630775, "l2norm": 0.8487930369529724}, {"hartmann6": {"hartmann6": 9.394646520129807e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 1.0032134709459079e-07}}]], "generator_run_type": null, "index": 0, "fit_time": 0.041341583000757964, "gen_time": 3.7904962499997055, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.3900159098601774}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}}, "is_test": false, "data_by_trial": {"0": {"__type": "OrderedDict", "value": [[1699648771046, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"0_0\",\"1\":\"0_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.5200937708,\"1\":1.42567484},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":0,\"1\":0}}"}, "description": null, "__type": "Data"}]]}, "1": {"__type": "OrderedDict", "value": [[1699648771056, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"1_0\",\"1\":\"1_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.3708909513,\"1\":1.4481840065},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":1,\"1\":1}}"}, "description": null, "__type": "Data"}]]}, "2": {"__type": "OrderedDict", "value": [[1699648771064, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"2_0\",\"1\":\"2_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.058890455,\"1\":1.5833021819},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":2,\"1\":2}}"}, "description": null, "__type": "Data"}]]}, "3": {"__type": "OrderedDict", "value": [[1699648771073, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"3_0\",\"1\":\"3_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.0710027498,\"1\":1.8675157293},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":3,\"1\":3}}"}, "description": null, "__type": "Data"}]]}, "4": {"__type": "OrderedDict", "value": [[1699648771083, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"4_0\",\"1\":\"4_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.0553169651,\"1\":1.50504103},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":4,\"1\":4}}"}, "description": null, "__type": "Data"}]]}, "5": {"__type": "OrderedDict", "value": [[1699648771093, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"5_0\",\"1\":\"5_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.1298168745,\"1\":1.5860745167},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":5,\"1\":5}}"}, "description": null, "__type": "Data"}]]}, "6": {"__type": "OrderedDict", "value": [[1699648771103, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"6_0\",\"1\":\"6_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.9316933543,\"1\":1.2902995612},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":6,\"1\":6}}"}, "description": null, "__type": "Data"}]]}, "7": {"__type": "OrderedDict", "value": [[1699648771114, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"7_0\",\"1\":\"7_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.0014247742,\"1\":1.4538464731},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":7,\"1\":7}}"}, "description": null, "__type": "Data"}]]}, "8": {"__type": "OrderedDict", "value": [[1699648771124, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"8_0\",\"1\":\"8_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.1736620709,\"1\":1.5369684567},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":8,\"1\":8}}"}, "description": null, "__type": "Data"}]]}, "9": {"__type": "OrderedDict", "value": [[1699648771136, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"9_0\",\"1\":\"9_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.0278845539,\"1\":0.9449295383},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":9,\"1\":9}}"}, "description": null, "__type": "Data"}]]}, "10": {"__type": "OrderedDict", "value": [[1699648771147, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"10_0\",\"1\":\"10_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.8029479135,\"1\":1.4868194697},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":10,\"1\":10}}"}, "description": null, "__type": "Data"}]]}, "11": {"__type": "OrderedDict", "value": [[1699648771158, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"11_0\",\"1\":\"11_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.0360770826,\"1\":1.2610708776},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":11,\"1\":11}}"}, "description": null, "__type": "Data"}]]}, "12": {"__type": "OrderedDict", "value": [[1699648787389, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"12_0\",\"1\":\"12_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.4610966212,\"1\":0.9254061653},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":12,\"1\":12}}"}, "description": null, "__type": "Data"}]]}, "13": {"__type": "OrderedDict", "value": [[1699648792342, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"13_0\",\"1\":\"13_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.6185203303,\"1\":0.952776159},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":13,\"1\":13}}"}, "description": null, "__type": "Data"}]]}, "14": {"__type": "OrderedDict", "value": [[1699648796619, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"14_0\",\"1\":\"14_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.7219580047,\"1\":0.8943972694},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":14,\"1\":14}}"}, "description": null, "__type": "Data"}]]}, "15": {"__type": "OrderedDict", "value": [[1699648801006, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"15_0\",\"1\":\"15_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.2961334618,\"1\":0.9336847751},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":15,\"1\":15}}"}, "description": null, "__type": "Data"}]]}, "16": {"__type": "OrderedDict", "value": [[1699648805052, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"16_0\",\"1\":\"16_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.7486689894,\"1\":0.8736617421},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":16,\"1\":16}}"}, "description": null, "__type": "Data"}]]}, "17": {"__type": "OrderedDict", "value": [[1699648809083, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"17_0\",\"1\":\"17_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.2435912423,\"1\":0.908592051},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":17,\"1\":17}}"}, "description": null, "__type": "Data"}]]}, "18": {"__type": "OrderedDict", "value": [[1699648813404, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"18_0\",\"1\":\"18_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.3701323417,\"1\":0.9468311601},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":18,\"1\":18}}"}, "description": null, "__type": "Data"}]]}, "19": {"__type": "OrderedDict", "value": [[1699648817373, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"19_0\",\"1\":\"19_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.1769013249,\"1\":0.973379915},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":19,\"1\":19}}"}, "description": null, "__type": "Data"}]]}, "20": {"__type": "OrderedDict", "value": [[1699648821281, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"20_0\",\"1\":\"20_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.4478062156,\"1\":0.8818177658},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":20,\"1\":20}}"}, "description": null, "__type": "Data"}]]}, "21": {"__type": "OrderedDict", "value": [[1699648825060, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"21_0\",\"1\":\"21_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.95200767,\"1\":0.9010177497},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":21,\"1\":21}}"}, "description": null, "__type": "Data"}]]}, "22": {"__type": "OrderedDict", "value": [[1699648828816, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"22_0\",\"1\":\"22_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.6651516606,\"1\":0.858541164},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":22,\"1\":22}}"}, "description": null, "__type": "Data"}]]}, "23": {"__type": "OrderedDict", "value": [[1699648832562, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"23_0\",\"1\":\"23_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.8785413099,\"1\":0.8487910997},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":23,\"1\":23}}"}, "description": null, "__type": "Data"}]]}, "24": {"__type": "OrderedDict", "value": [[1699648836431, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"24_0\",\"1\":\"24_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-3.109012665,\"1\":0.8721961469},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":24,\"1\":24}}"}, "description": null, "__type": "Data"}]]}}, "properties": {"immutable_search_space_and_opt_config": true}, "default_data_type": {"__type": "DataType", "name": "DATA"}}, "generation_strategy": {"__type": "GenerationStrategy", "db_id": null, "name": "Sobol+BoTorch", "steps": [{"__type": "GenerationStep", "model": {"__type": "Models", "name": "SOBOL"}, "num_trials": 12, "min_trials_observed": 6, "completion_criteria": [], "max_parallelism": null, "use_update": false, "enforce_num_trials": true, "model_kwargs": {"deduplicate": true, "seed": null}, "model_gen_kwargs": {}, "index": 0, "should_deduplicate": false, "transition_criteria": [{"threshold": 12, "enforce": true, "only_in_statuses": null, "transition_to": "GenerationStep_1", "not_in_statuses": null, "__type": "MaxTrials"}, {"statuses": [{"__type": "TrialStatus", "name": "COMPLETED"}, {"__type": "TrialStatus", "name": "EARLY_STOPPED"}], "threshold": 6, "transition_to": "GenerationStep_1", "__type": "MinTrials"}], "gen_unlimited_trials": true}, {"__type": "GenerationStep", "model": {"__type": "Models", "name": "BOTORCH_MODULAR"}, "num_trials": -1, "min_trials_observed": 0, "completion_criteria": [], "max_parallelism": 3, "use_update": false, "enforce_num_trials": true, "model_kwargs": {"torch_device": null, "transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "model_gen_kwargs": {}, "index": 1, "should_deduplicate": false, "transition_criteria": [{"threshold": -1, "enforce": true, "only_in_statuses": null, "transition_to": "GenerationStep_2", "not_in_statuses": null, "__type": "MaxTrials"}, {"statuses": [{"__type": "TrialStatus", "name": "COMPLETED"}, {"__type": "TrialStatus", "name": "EARLY_STOPPED"}], "threshold": 0, "transition_to": "GenerationStep_2", "__type": "MinTrials"}], "gen_unlimited_trials": true}], "curr_index": 1, "generator_runs": [{"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.34556832909584045, "x2": 0.8998619914054871, "x3": 0.9205441474914551, "x4": 0.15568500757217407, "x5": 0.4790315628051758, "x6": 0.047634951770305634}, "name": "0_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.043837"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0020190410014038207, "gen_time": 0.0015755839995108545, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 0, "scramble": true, "generated_points": null, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634]]}, "init_position": 1}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.5975945321843028, "x2": 0.1608173120766878, "x3": 0.9991439301520586, "x4": 0.4354516323655844, "x5": 0.49805970024317503, "x6": 0.527527536265552}, "name": "1_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.054306"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0014545829999406124, "gen_time": 0.0014145410004857695, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 1, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552]]}, "init_position": 2}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2350237090140581, "x2": 0.6300385370850563, "x3": 0.44755726493895054, "x4": 0.9293722407892346, "x5": 0.2906326949596405, "x6": 0.9519209349527955}, "name": "2_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.062736"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0010788749987113988, "gen_time": 0.0011238330007472541, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 2, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955]]}, "init_position": 3}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.8661647150292993, "x2": 0.197776704095304, "x3": 0.9055851427838206, "x4": 0.9940777402371168, "x5": 0.5372729385271668, "x6": 0.7754488028585911}, "name": "3_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.071489"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.001342666000709869, "gen_time": 0.001211540999065619, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 3, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911]]}, "init_position": 4}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.566324700601399, "x2": 0.7277999361976981, "x3": 0.9949833592399955, "x4": 0.026425880379974842, "x5": 0.604908237233758, "x6": 0.24109728448092937}, "name": "4_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.080935"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0016741679992264835, "gen_time": 0.0012215410006319871, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 4, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937]]}, "init_position": 5}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.988483153283596, "x2": 0.35287413466721773, "x3": 0.8216384099796414, "x4": 0.14335020631551743, "x5": 0.5516453264281154, "x6": 0.6434762999415398}, "name": "5_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.090488"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0017037919988069916, "gen_time": 0.0009751249999681022, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 5, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398]]}, "init_position": 6}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.12221025116741657, "x2": 0.5256350003182888, "x3": 0.6597777465358377, "x4": 0.13555301539599895, "x5": 0.074379269964993, "x6": 0.9562593204900622}, "name": "6_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.100739"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0020456250003917376, "gen_time": 0.001330541999777779, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 6, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622]]}, "init_position": 7}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.73419897723943, "x2": 0.03812931291759014, "x3": 0.6194512750953436, "x4": 0.9365793969482183, "x5": 0.5389744667336345, "x6": 0.1475576488301158}, "name": "7_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.111452"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0022249589983402984, "gen_time": 0.0012747079999826383, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 7, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158]]}, "init_position": 8}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.780962273478508, "x2": 0.8393641794100404, "x3": 0.6721038045361638, "x4": 0.2585572600364685, "x5": 0.1679433174431324, "x6": 0.7078540809452534}, "name": "8_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.122444"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.001958750000994769, "gen_time": 0.0014972080007282784, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 8, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534]]}, "init_position": 9}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.5788483498618007, "x2": 0.3142134537920356, "x3": 0.019604711793363094, "x4": 0.3354746289551258, "x5": 0.16610265895724297, "x6": 0.5644277287647128}, "name": "9_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.133609"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0016367909993277863, "gen_time": 0.0017315409986622399, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 9, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128]]}, "init_position": 10}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.3490928951650858, "x2": 0.5662246681749821, "x3": 0.7572343731299043, "x4": 0.3599182656034827, "x5": 0.44590070750564337, "x6": 0.9307971941307187}, "name": "10_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.144785"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.002274915999805671, "gen_time": 0.0013804999998683343, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 10, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128], [0.3490928951650858, 0.5662246681749821, 0.7572343731299043, 0.3599182656034827, 0.44590070750564337, 0.9307971941307187]]}, "init_position": 11}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.16439795773476362, "x2": 0.025402813218533993, "x3": 0.8527070758864284, "x4": 0.8268039105460048, "x5": 0.2759943390265107, "x6": 0.27521051559597254}, "name": "11_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.155694"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.002336792000278365, "gen_time": 0.001766540999597055, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 11, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128], [0.3490928951650858, 0.5662246681749821, 0.7572343731299043, 0.3599182656034827, 0.44590070750564337, 0.9307971941307187]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128], [0.3490928951650858, 0.5662246681749821, 0.7572343731299043, 0.3599182656034827, 0.44590070750564337, 0.9307971941307187], [0.16439795773476362, 0.025402813218533993, 0.8527070758864284, 0.8268039105460048, 0.2759943390265107, 0.27521051559597254]]}, "init_position": 12}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.4552874054947785, "x2": 0.3365340588990419, "x3": 0.10653586689335244, "x4": 0.2808056241598078, "x5": 0.16273102352394417, "x6": 0.6474192621063405}, "name": "12_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:47.378869"}, "model_predictions": [{"hartmann6": [-0.9441877686508071], "l2norm": [1.0328187257612655]}, {"hartmann6": {"hartmann6": [0.048995677045983996], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.01717706846730772]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.5788483498618007, "x2": 0.3142134537920356, "x3": 0.019604711793363094, "x4": 0.3354746289551258, "x5": 0.16610265895724297, "x6": 0.5644277287647128}, "name": "9_0"}, [{"hartmann6": -1.0278838947399898, "l2norm": 0.944929996400905}, {"hartmann6": {"hartmann6": 1.437671975861058e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 4.90408144320177e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.12333670800035179, "gen_time": 16.092193667000174, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.0173747402553337}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.36821334447451015, "x2": 0.3589521229774258, "x3": 0.19355545713881317, "x4": 0.24951358477611804, "x5": 0.16443059539562763, "x6": 0.718746513621701}, "name": "13_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:52.327491"}, "model_predictions": [{"hartmann6": [-1.4641122142582226], "l2norm": [1.0012706913375915]}, {"hartmann6": {"hartmann6": [0.030909051825217672], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.005692359105174811]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.4552874054947785, "x2": 0.3365340588990419, "x3": 0.10653586689335244, "x4": 0.2808056241598078, "x5": 0.16273102352394417, "x6": 0.6474192621063405}, "name": "12_0"}, [{"hartmann6": -1.461094938606239, "l2norm": 0.9254065996550563}, {"hartmann6": {"hartmann6": 2.2703963033213378e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 6.6053881965092e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.04543954200016742, "gen_time": 4.879726459001176, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -1.8956594179973916}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2736629388383685, "x2": 0.34896315255873195, "x3": 0.10274090061700827, "x4": 0.22201465717907948, "x5": 0.1854896518030625, "x6": 0.7134614061015596}, "name": "14_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:56.609112"}, "model_predictions": [{"hartmann6": [-1.5353721507629934], "l2norm": [0.9685656643117776]}, {"hartmann6": {"hartmann6": [0.029697857277550282], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.005534452500544122]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.36821334447451015, "x2": 0.3589521229774258, "x3": 0.19355545713881317, "x4": 0.24951358477611804, "x5": 0.16443059539562763, "x6": 0.718746513621701}, "name": "13_0"}, [{"hartmann6": -1.618518874569555, "l2norm": 0.9527768609065774}, {"hartmann6": {"hartmann6": 3.098069803895141e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 7.582907524341803e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.07428141700074775, "gen_time": 4.161116791001405, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.767056875390724}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.27862790145711586, "x2": 0.2678416417051815, "x3": 0.07332969645764803, "x4": 0.2116658989222811, "x5": 0.14532858649580174, "x6": 0.8069042766113912}, "name": "15_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:01.001249"}, "model_predictions": [{"hartmann6": [-1.6268025164664535], "l2norm": [0.9218983466621398]}, {"hartmann6": {"hartmann6": [0.029539489184193503], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.00646709525404583]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2736629388383685, "x2": 0.34896315255873195, "x3": 0.10274090061700827, "x4": 0.22201465717907948, "x5": 0.1854896518030625, "x6": 0.7134614061015596}, "name": "14_0"}, [{"hartmann6": -1.7219556240450526, "l2norm": 0.8943984213278539}, {"hartmann6": {"hartmann6": 3.842271386429435e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 8.589352759078205e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.054238333001194405, "gen_time": 4.299597334000282, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.984595157506448}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.24242211077361314, "x2": 0.405298114898372, "x3": 0.11383383562266966, "x4": 0.22010782981738555, "x5": 0.20584164625985782, "x6": 0.6606613471467421}, "name": "16_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:05.047618"}, "model_predictions": [{"hartmann6": [-1.7456807248478459], "l2norm": [0.9020008986123116]}, {"hartmann6": {"hartmann6": [0.014736574448469809], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.00078979608797791]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2736629388383685, "x2": 0.34896315255873195, "x3": 0.10274090061700827, "x4": 0.22201465717907948, "x5": 0.1854896518030625, "x6": 0.7134614061015596}, "name": "14_0"}, [{"hartmann6": -1.7219537974668724, "l2norm": 0.8943988277441965}, {"hartmann6": {"hartmann6": 3.89005602206933e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.069554059284809e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.06051074999959383, "gen_time": 3.971508124999673, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.3209312563313853}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.26456361129160944, "x2": 0.37005081505602005, "x3": 0.14056926502685665, "x4": 0.23055695919120733, "x5": 0.2837962383843752, "x6": 0.682020139238482}, "name": "17_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:09.072151"}, "model_predictions": [{"hartmann6": [-1.705345329763197], "l2norm": [0.9075856098546564]}, {"hartmann6": {"hartmann6": [0.01716663190206054], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0023026878705464378]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.24242211077361314, "x2": 0.405298114898372, "x3": 0.11383383562266966, "x4": 0.22010782981738555, "x5": 0.20584164625985782, "x6": 0.6606613471467421}, "name": "16_0"}, [{"hartmann6": -1.7486697460925418, "l2norm": 0.8736656731723248}, {"hartmann6": {"hartmann6": 4.366820160143231e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.665079633131103e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.037308875000235275, "gen_time": 3.970641333999083, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.9848168488157314}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2939662446339975, "x2": 0.3362031138043549, "x3": 0.17370161959673996, "x4": 0.2333654853567155, "x5": 0.32647620480075445, "x6": 0.7112117436026573}, "name": "18_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:13.377133"}, "model_predictions": [{"hartmann6": [-2.297403733959694], "l2norm": [0.9533942921228549]}, {"hartmann6": {"hartmann6": [0.014500056953731168], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0002042835068066559]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.26456361129160944, "x2": 0.37005081505602005, "x3": 0.14056926502685665, "x4": 0.23055695919120733, "x5": 0.2837962383843752, "x6": 0.682020139238482}, "name": "17_0"}, [{"hartmann6": -2.243585809108853, "l2norm": 0.9085917728022965}, {"hartmann6": {"hartmann6": 5.421074568785626e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.915864240383566e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.041473667000900605, "gen_time": 4.241230125000584, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.2244071664230693}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2628501072350645, "x2": 0.35420263999041296, "x3": 0.12722066820216826, "x4": 0.2788795074870812, "x5": 0.361534238347435, "x6": 0.726810075777407}, "name": "19_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:17.363245"}, "model_predictions": [{"hartmann6": [-2.293443813193414], "l2norm": [0.9514909675033829]}, {"hartmann6": {"hartmann6": [0.025806309669965766], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0008867119787893831]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2939662446339975, "x2": 0.3362031138043549, "x3": 0.17370161959673996, "x4": 0.2333654853567155, "x5": 0.32647620480075445, "x6": 0.7112117436026573}, "name": "18_0"}, [{"hartmann6": -2.3701303630510075, "l2norm": 0.9468348314760703}, {"hartmann6": {"hartmann6": 6.429084100800608e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.911508494619632e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.04359058299996832, "gen_time": 3.8790992080012074, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -3.189978755811567}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2846320057574449, "x2": 0.2984792862437796, "x3": 0.20438156262175977, "x4": 0.1977645008047584, "x5": 0.3322262667259729, "x6": 0.6451669518907412}, "name": "20_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:21.264612"}, "model_predictions": [{"hartmann6": [-2.33301737228191], "l2norm": [0.9185609916920718]}, {"hartmann6": {"hartmann6": [0.01838431684344131], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0005608691556302735]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2939662446339975, "x2": 0.3362031138043549, "x3": 0.17370161959673996, "x4": 0.2333654853567155, "x5": 0.32647620480075445, "x6": 0.7112117436026573}, "name": "18_0"}, [{"hartmann6": -2.3701265745078812, "l2norm": 0.9468357258146438}, {"hartmann6": {"hartmann6": 6.936897669775966e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.782811343310444e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.049071290999563644, "gen_time": 3.8114641249994747, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -3.1014403191058038}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.3152770673304702, "x2": 0.3298007563602044, "x3": 0.16560961921805775, "x4": 0.14190880181300594, "x5": 0.34858989357087156, "x6": 0.659230801214047}, "name": "21_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:25.042411"}, "model_predictions": [{"hartmann6": [-2.3663509290998426], "l2norm": [0.8985021252271612]}, {"hartmann6": {"hartmann6": [0.02385885913852919], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0007296228397805898]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2846320057574449, "x2": 0.2984792862437796, "x3": 0.20438156262175977, "x4": 0.1977645008047584, "x5": 0.3322262667259729, "x6": 0.6451669518907412}, "name": "20_0"}, [{"hartmann6": -2.4478018540163964, "l2norm": 0.8818235854765406}, {"hartmann6": {"hartmann6": 7.671718740585238e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.909521038527231e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.03181399999994028, "gen_time": 3.701914916999158, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -3.400073390643146}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.25303245365817595, "x2": 0.27491228632682185, "x3": 0.23092235470425962, "x4": 0.23383600861552004, "x5": 0.3324706543603699, "x6": 0.6155888186135499}, "name": "22_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:28.803539"}, "model_predictions": [{"hartmann6": [-2.536451043276815], "l2norm": [0.8631356646928647]}, {"hartmann6": {"hartmann6": [0.009347608483219074], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [6.75871576831065e-05]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2846320057574449, "x2": 0.2984792862437796, "x3": 0.20438156262175977, "x4": 0.1977645008047584, "x5": 0.3322262667259729, "x6": 0.6451669518907412}, "name": "20_0"}, [{"hartmann6": -2.4477955073184523, "l2norm": 0.8818240789711347}, {"hartmann6": {"hartmann6": 7.707444854452991e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.908049968477374e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.03645750000032422, "gen_time": 3.6971976250006264, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.192061180393865}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.22420905621003287, "x2": 0.24569695856207757, "x3": 0.2754493305462289, "x4": 0.2582100804116055, "x5": 0.3158264150965364, "x6": 0.6062330663417775}, "name": "23_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:32.555857"}, "model_predictions": [{"hartmann6": [-2.7047844723148957], "l2norm": [0.8501830565362622]}, {"hartmann6": {"hartmann6": [0.005992131927980093], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [6.520469742991018e-05]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.25303245365817595, "x2": 0.27491228632682185, "x3": 0.23092235470425962, "x4": 0.23383600861552004, "x5": 0.3324706543603699, "x6": 0.6155888186135499}, "name": "22_0"}, [{"hartmann6": -2.665140648241098, "l2norm": 0.8585485690290068}, {"hartmann6": {"hartmann6": 8.483242661619882e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.97262513270367e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.032488750000993605, "gen_time": 3.6951307500003168, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.8235253375544165}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.19673857480875104, "x2": 0.20346916128076148, "x3": 0.32427577169337435, "x4": 0.2743887310854332, "x5": 0.29739532905225424, "x6": 0.6416637893800289}, "name": "24_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:36.409852"}, "model_predictions": [{"hartmann6": [-2.9613611965128843], "l2norm": [0.8700139985228407]}, {"hartmann6": {"hartmann6": [0.006241104649089343], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [9.047703396406608e-05]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.22420905621003287, "x2": 0.24569695856207757, "x3": 0.2754493305462289, "x4": 0.2582100804116055, "x5": 0.3158264150965364, "x6": 0.6062330663417775}, "name": "23_0"}, [{"hartmann6": -2.878521887630775, "l2norm": 0.8487930369529724}, {"hartmann6": {"hartmann6": 9.394646520129807e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 1.0032134709459079e-07}}]], "generator_run_type": null, "index": 0, "fit_time": 0.041341583000757964, "gen_time": 3.7904962499997055, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.3900159098601774}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}], "had_initialized_model": true, "experiment": {"__type": "Experiment", "name": "hartmann_test_experiment", "description": null, "experiment_type": null, "search_space": {"__type": "SearchSpace", "parameters": [{"__type": "RangeParameter", "name": "x1", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}, {"__type": "RangeParameter", "name": "x2", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}, {"__type": "RangeParameter", "name": "x3", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}, {"__type": "RangeParameter", "name": "x4", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}, {"__type": "RangeParameter", "name": "x5", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}, {"__type": "RangeParameter", "name": "x6", "parameter_type": {"__type": "ParameterType", "name": "FLOAT"}, "lower": 0.0, "upper": 1.0, "log_scale": false, "logit_scale": false, "digits": null, "is_fidelity": false, "target_value": null}], "parameter_constraints": [{"__type": "ParameterConstraint", "constraint_dict": {"x1": 1.0, "x2": 1.0}, "bound": 2.0}]}, "optimization_config": {"__type": "OptimizationConfig", "objective": {"__type": "Objective", "metric": {"name": "hartmann6", "lower_is_better": true, "properties": {}, "__type": "Metric"}, "minimize": true}, "outcome_constraints": [{"__type": "OutcomeConstraint", "metric": {"name": "l2norm", "lower_is_better": true, "properties": {}, "__type": "Metric"}, "op": {"__type": "ComparisonOp", "name": "LEQ"}, "bound": 1.25, "relative": false}], "risk_measure": null}, "tracking_metrics": [], "runner": null, "status_quo": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:30.961373"}, "trials": {"0": {"__type": "Trial", "index": 0, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.043888"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.048203"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.044433"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.34556832909584045, "x2": 0.8998619914054871, "x3": 0.9205441474914551, "x4": 0.15568500757217407, "x5": 0.4790315628051758, "x6": 0.047634951770305634}, "name": "0_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.043837"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0020190410014038207, "gen_time": 0.0015755839995108545, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 0, "scramble": true, "generated_points": null, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634]]}, "init_position": 1}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "1": {"__type": "Trial", "index": 1, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.054352"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.058271"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.054910"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.5975945321843028, "x2": 0.1608173120766878, "x3": 0.9991439301520586, "x4": 0.4354516323655844, "x5": 0.49805970024317503, "x6": 0.527527536265552}, "name": "1_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.054306"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0014545829999406124, "gen_time": 0.0014145410004857695, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 1, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552]]}, "init_position": 2}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "2": {"__type": "Trial", "index": 2, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.062774"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.066243"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.063115"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2350237090140581, "x2": 0.6300385370850563, "x3": 0.44755726493895054, "x4": 0.9293722407892346, "x5": 0.2906326949596405, "x6": 0.9519209349527955}, "name": "2_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.062736"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0010788749987113988, "gen_time": 0.0011238330007472541, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 2, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955]]}, "init_position": 3}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "3": {"__type": "Trial", "index": 3, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.071528"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.074578"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.071925"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.8661647150292993, "x2": 0.197776704095304, "x3": 0.9055851427838206, "x4": 0.9940777402371168, "x5": 0.5372729385271668, "x6": 0.7754488028585911}, "name": "3_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.071489"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.001342666000709869, "gen_time": 0.001211540999065619, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 3, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911]]}, "init_position": 4}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "4": {"__type": "Trial", "index": 4, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.080982"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.084228"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.081577"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.566324700601399, "x2": 0.7277999361976981, "x3": 0.9949833592399955, "x4": 0.026425880379974842, "x5": 0.604908237233758, "x6": 0.24109728448092937}, "name": "4_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.080935"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0016741679992264835, "gen_time": 0.0012215410006319871, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 4, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937]]}, "init_position": 5}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "5": {"__type": "Trial", "index": 5, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.090528"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.093837"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.090925"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.988483153283596, "x2": 0.35287413466721773, "x3": 0.8216384099796414, "x4": 0.14335020631551743, "x5": 0.5516453264281154, "x6": 0.6434762999415398}, "name": "5_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.090488"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0017037919988069916, "gen_time": 0.0009751249999681022, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 5, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398]]}, "init_position": 6}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "6": {"__type": "Trial", "index": 6, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.100779"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.104444"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.101248"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.12221025116741657, "x2": 0.5256350003182888, "x3": 0.6597777465358377, "x4": 0.13555301539599895, "x5": 0.074379269964993, "x6": 0.9562593204900622}, "name": "6_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.100739"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0020456250003917376, "gen_time": 0.001330541999777779, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 6, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622]]}, "init_position": 7}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "7": {"__type": "Trial", "index": 7, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.111496"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.115672"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.112038"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.73419897723943, "x2": 0.03812931291759014, "x3": 0.6194512750953436, "x4": 0.9365793969482183, "x5": 0.5389744667336345, "x6": 0.1475576488301158}, "name": "7_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.111452"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0022249589983402984, "gen_time": 0.0012747079999826383, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 7, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158]]}, "init_position": 8}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "8": {"__type": "Trial", "index": 8, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.122483"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.125658"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.122816"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.780962273478508, "x2": 0.8393641794100404, "x3": 0.6721038045361638, "x4": 0.2585572600364685, "x5": 0.1679433174431324, "x6": 0.7078540809452534}, "name": "8_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.122444"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.001958750000994769, "gen_time": 0.0014972080007282784, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 8, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534]]}, "init_position": 9}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "9": {"__type": "Trial", "index": 9, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.133677"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.137509"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.134287"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.5788483498618007, "x2": 0.3142134537920356, "x3": 0.019604711793363094, "x4": 0.3354746289551258, "x5": 0.16610265895724297, "x6": 0.5644277287647128}, "name": "9_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.133609"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.0016367909993277863, "gen_time": 0.0017315409986622399, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 9, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128]]}, "init_position": 10}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "10": {"__type": "Trial", "index": 10, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.144824"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.147703"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.145191"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.3490928951650858, "x2": 0.5662246681749821, "x3": 0.7572343731299043, "x4": 0.3599182656034827, "x5": 0.44590070750564337, "x6": 0.9307971941307187}, "name": "10_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.144785"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.002274915999805671, "gen_time": 0.0013804999998683343, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 10, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128], [0.3490928951650858, 0.5662246681749821, 0.7572343731299043, 0.3599182656034827, 0.44590070750564337, 0.9307971941307187]]}, "init_position": 11}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "11": {"__type": "Trial", "index": 11, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.155746"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:31.159465"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:31.156244"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.16439795773476362, "x2": 0.025402813218533993, "x3": 0.8527070758864284, "x4": 0.8268039105460048, "x5": 0.2759943390265107, "x6": 0.27521051559597254}, "name": "11_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:31.155694"}, "model_predictions": null, "best_arm_predictions": null, "generator_run_type": null, "index": 0, "fit_time": 0.002336792000278365, "gen_time": 0.001766540999597055, "model_key": "Sobol", "model_kwargs": {"seed": null, "deduplicate": true, "init_position": 11, "scramble": true, "generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128], [0.3490928951650858, 0.5662246681749821, 0.7572343731299043, 0.3599182656034827, 0.44590070750564337, 0.9307971941307187]]}, "fallback_to_sample_polytope": false}, "bridge_kwargs": {"transforms": [{"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}], "transform_configs": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true}, "gen_metadata": {}, "model_state_after_gen": {"generated_points": {"__type": "ndarray", "value": [[0.34556832909584045, 0.8998619914054871, 0.9205441474914551, 0.15568500757217407, 0.4790315628051758, 0.047634951770305634], [0.5975945321843028, 0.1608173120766878, 0.9991439301520586, 0.4354516323655844, 0.49805970024317503, 0.527527536265552], [0.2350237090140581, 0.6300385370850563, 0.44755726493895054, 0.9293722407892346, 0.2906326949596405, 0.9519209349527955], [0.8661647150292993, 0.197776704095304, 0.9055851427838206, 0.9940777402371168, 0.5372729385271668, 0.7754488028585911], [0.566324700601399, 0.7277999361976981, 0.9949833592399955, 0.026425880379974842, 0.604908237233758, 0.24109728448092937], [0.988483153283596, 0.35287413466721773, 0.8216384099796414, 0.14335020631551743, 0.5516453264281154, 0.6434762999415398], [0.12221025116741657, 0.5256350003182888, 0.6597777465358377, 0.13555301539599895, 0.074379269964993, 0.9562593204900622], [0.73419897723943, 0.03812931291759014, 0.6194512750953436, 0.9365793969482183, 0.5389744667336345, 0.1475576488301158], [0.780962273478508, 0.8393641794100404, 0.6721038045361638, 0.2585572600364685, 0.1679433174431324, 0.7078540809452534], [0.5788483498618007, 0.3142134537920356, 0.019604711793363094, 0.3354746289551258, 0.16610265895724297, 0.5644277287647128], [0.3490928951650858, 0.5662246681749821, 0.7572343731299043, 0.3599182656034827, 0.44590070750564337, 0.9307971941307187], [0.16439795773476362, 0.025402813218533993, 0.8527070758864284, 0.8268039105460048, 0.2759943390265107, 0.27521051559597254]]}, "init_position": 12}, "generation_step_index": 0, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_0"}, "runner": null, "num_arms_created": 1, "generation_step_index": 0, "properties": {}}, "12": {"__type": "Trial", "index": 12, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:47.378917"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:47.390071"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:47.387767"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.4552874054947785, "x2": 0.3365340588990419, "x3": 0.10653586689335244, "x4": 0.2808056241598078, "x5": 0.16273102352394417, "x6": 0.6474192621063405}, "name": "12_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:47.378869"}, "model_predictions": [{"hartmann6": [-0.9441877686508071], "l2norm": [1.0328187257612655]}, {"hartmann6": {"hartmann6": [0.048995677045983996], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.01717706846730772]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.5788483498618007, "x2": 0.3142134537920356, "x3": 0.019604711793363094, "x4": 0.3354746289551258, "x5": 0.16610265895724297, "x6": 0.5644277287647128}, "name": "9_0"}, [{"hartmann6": -1.0278838947399898, "l2norm": 0.944929996400905}, {"hartmann6": {"hartmann6": 1.437671975861058e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 4.90408144320177e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.12333670800035179, "gen_time": 16.092193667000174, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.0173747402553337}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "13": {"__type": "Trial", "index": 13, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:52.327541"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:52.342559"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:52.339991"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.36821334447451015, "x2": 0.3589521229774258, "x3": 0.19355545713881317, "x4": 0.24951358477611804, "x5": 0.16443059539562763, "x6": 0.718746513621701}, "name": "13_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:52.327491"}, "model_predictions": [{"hartmann6": [-1.4641122142582226], "l2norm": [1.0012706913375915]}, {"hartmann6": {"hartmann6": [0.030909051825217672], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.005692359105174811]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.4552874054947785, "x2": 0.3365340588990419, "x3": 0.10653586689335244, "x4": 0.2808056241598078, "x5": 0.16273102352394417, "x6": 0.6474192621063405}, "name": "12_0"}, [{"hartmann6": -1.461094938606239, "l2norm": 0.9254065996550563}, {"hartmann6": {"hartmann6": 2.2703963033213378e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 6.6053881965092e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.04543954200016742, "gen_time": 4.879726459001176, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -1.8956594179973916}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "14": {"__type": "Trial", "index": 14, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:56.609164"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:39:56.619840"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:39:56.616724"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2736629388383685, "x2": 0.34896315255873195, "x3": 0.10274090061700827, "x4": 0.22201465717907948, "x5": 0.1854896518030625, "x6": 0.7134614061015596}, "name": "14_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:39:56.609112"}, "model_predictions": [{"hartmann6": [-1.5353721507629934], "l2norm": [0.9685656643117776]}, {"hartmann6": {"hartmann6": [0.029697857277550282], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.005534452500544122]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.36821334447451015, "x2": 0.3589521229774258, "x3": 0.19355545713881317, "x4": 0.24951358477611804, "x5": 0.16443059539562763, "x6": 0.718746513621701}, "name": "13_0"}, [{"hartmann6": -1.618518874569555, "l2norm": 0.9527768609065774}, {"hartmann6": {"hartmann6": 3.098069803895141e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 7.582907524341803e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.07428141700074775, "gen_time": 4.161116791001405, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.767056875390724}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "15": {"__type": "Trial", "index": 15, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:01.001358"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:01.006876"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:01.003766"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.27862790145711586, "x2": 0.2678416417051815, "x3": 0.07332969645764803, "x4": 0.2116658989222811, "x5": 0.14532858649580174, "x6": 0.8069042766113912}, "name": "15_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:01.001249"}, "model_predictions": [{"hartmann6": [-1.6268025164664535], "l2norm": [0.9218983466621398]}, {"hartmann6": {"hartmann6": [0.029539489184193503], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.00646709525404583]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2736629388383685, "x2": 0.34896315255873195, "x3": 0.10274090061700827, "x4": 0.22201465717907948, "x5": 0.1854896518030625, "x6": 0.7134614061015596}, "name": "14_0"}, [{"hartmann6": -1.7219556240450526, "l2norm": 0.8943984213278539}, {"hartmann6": {"hartmann6": 3.842271386429435e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 8.589352759078205e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.054238333001194405, "gen_time": 4.299597334000282, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.984595157506448}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "16": {"__type": "Trial", "index": 16, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:05.047671"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:05.053983"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:05.050841"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.24242211077361314, "x2": 0.405298114898372, "x3": 0.11383383562266966, "x4": 0.22010782981738555, "x5": 0.20584164625985782, "x6": 0.6606613471467421}, "name": "16_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:05.047618"}, "model_predictions": [{"hartmann6": [-1.7456807248478459], "l2norm": [0.9020008986123116]}, {"hartmann6": {"hartmann6": [0.014736574448469809], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.00078979608797791]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2736629388383685, "x2": 0.34896315255873195, "x3": 0.10274090061700827, "x4": 0.22201465717907948, "x5": 0.1854896518030625, "x6": 0.7134614061015596}, "name": "14_0"}, [{"hartmann6": -1.7219537974668724, "l2norm": 0.8943988277441965}, {"hartmann6": {"hartmann6": 3.89005602206933e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.069554059284809e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.06051074999959383, "gen_time": 3.971508124999673, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.3209312563313853}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "17": {"__type": "Trial", "index": 17, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:09.072203"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:09.084410"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:09.077709"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.26456361129160944, "x2": 0.37005081505602005, "x3": 0.14056926502685665, "x4": 0.23055695919120733, "x5": 0.2837962383843752, "x6": 0.682020139238482}, "name": "17_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:09.072151"}, "model_predictions": [{"hartmann6": [-1.705345329763197], "l2norm": [0.9075856098546564]}, {"hartmann6": {"hartmann6": [0.01716663190206054], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0023026878705464378]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.24242211077361314, "x2": 0.405298114898372, "x3": 0.11383383562266966, "x4": 0.22010782981738555, "x5": 0.20584164625985782, "x6": 0.6606613471467421}, "name": "16_0"}, [{"hartmann6": -1.7486697460925418, "l2norm": 0.8736656731723248}, {"hartmann6": {"hartmann6": 4.366820160143231e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.665079633131103e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.037308875000235275, "gen_time": 3.970641333999083, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.9848168488157314}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "18": {"__type": "Trial", "index": 18, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:13.377181"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:13.405623"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:13.395408"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2939662446339975, "x2": 0.3362031138043549, "x3": 0.17370161959673996, "x4": 0.2333654853567155, "x5": 0.32647620480075445, "x6": 0.7112117436026573}, "name": "18_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:13.377133"}, "model_predictions": [{"hartmann6": [-2.297403733959694], "l2norm": [0.9533942921228549]}, {"hartmann6": {"hartmann6": [0.014500056953731168], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0002042835068066559]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.26456361129160944, "x2": 0.37005081505602005, "x3": 0.14056926502685665, "x4": 0.23055695919120733, "x5": 0.2837962383843752, "x6": 0.682020139238482}, "name": "17_0"}, [{"hartmann6": -2.243585809108853, "l2norm": 0.9085917728022965}, {"hartmann6": {"hartmann6": 5.421074568785626e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.915864240383566e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.041473667000900605, "gen_time": 4.241230125000584, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.2244071664230693}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "19": {"__type": "Trial", "index": 19, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:17.363293"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:17.374286"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:17.371205"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2628501072350645, "x2": 0.35420263999041296, "x3": 0.12722066820216826, "x4": 0.2788795074870812, "x5": 0.361534238347435, "x6": 0.726810075777407}, "name": "19_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:17.363245"}, "model_predictions": [{"hartmann6": [-2.293443813193414], "l2norm": [0.9514909675033829]}, {"hartmann6": {"hartmann6": [0.025806309669965766], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0008867119787893831]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2939662446339975, "x2": 0.3362031138043549, "x3": 0.17370161959673996, "x4": 0.2333654853567155, "x5": 0.32647620480075445, "x6": 0.7112117436026573}, "name": "18_0"}, [{"hartmann6": -2.3701303630510075, "l2norm": 0.9468348314760703}, {"hartmann6": {"hartmann6": 6.429084100800608e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.911508494619632e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.04359058299996832, "gen_time": 3.8790992080012074, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -3.189978755811567}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "20": {"__type": "Trial", "index": 20, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:21.264670"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:21.282226"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:21.278755"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.2846320057574449, "x2": 0.2984792862437796, "x3": 0.20438156262175977, "x4": 0.1977645008047584, "x5": 0.3322262667259729, "x6": 0.6451669518907412}, "name": "20_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:21.264612"}, "model_predictions": [{"hartmann6": [-2.33301737228191], "l2norm": [0.9185609916920718]}, {"hartmann6": {"hartmann6": [0.01838431684344131], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0005608691556302735]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2939662446339975, "x2": 0.3362031138043549, "x3": 0.17370161959673996, "x4": 0.2333654853567155, "x5": 0.32647620480075445, "x6": 0.7112117436026573}, "name": "18_0"}, [{"hartmann6": -2.3701265745078812, "l2norm": 0.9468357258146438}, {"hartmann6": {"hartmann6": 6.936897669775966e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.782811343310444e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.049071290999563644, "gen_time": 3.8114641249994747, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -3.1014403191058038}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "21": {"__type": "Trial", "index": 21, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:25.042466"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:25.061863"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:25.054540"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.3152770673304702, "x2": 0.3298007563602044, "x3": 0.16560961921805775, "x4": 0.14190880181300594, "x5": 0.34858989357087156, "x6": 0.659230801214047}, "name": "21_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:25.042411"}, "model_predictions": [{"hartmann6": [-2.3663509290998426], "l2norm": [0.8985021252271612]}, {"hartmann6": {"hartmann6": [0.02385885913852919], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [0.0007296228397805898]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2846320057574449, "x2": 0.2984792862437796, "x3": 0.20438156262175977, "x4": 0.1977645008047584, "x5": 0.3322262667259729, "x6": 0.6451669518907412}, "name": "20_0"}, [{"hartmann6": -2.4478018540163964, "l2norm": 0.8818235854765406}, {"hartmann6": {"hartmann6": 7.671718740585238e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.909521038527231e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.03181399999994028, "gen_time": 3.701914916999158, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -3.400073390643146}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "22": {"__type": "Trial", "index": 22, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:28.803593"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:28.817314"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:28.811259"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.25303245365817595, "x2": 0.27491228632682185, "x3": 0.23092235470425962, "x4": 0.23383600861552004, "x5": 0.3324706543603699, "x6": 0.6155888186135499}, "name": "22_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:28.803539"}, "model_predictions": [{"hartmann6": [-2.536451043276815], "l2norm": [0.8631356646928647]}, {"hartmann6": {"hartmann6": [0.009347608483219074], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [6.75871576831065e-05]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.2846320057574449, "x2": 0.2984792862437796, "x3": 0.20438156262175977, "x4": 0.1977645008047584, "x5": 0.3322262667259729, "x6": 0.6451669518907412}, "name": "20_0"}, [{"hartmann6": -2.4477955073184523, "l2norm": 0.8818240789711347}, {"hartmann6": {"hartmann6": 7.707444854452991e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.908049968477374e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.03645750000032422, "gen_time": 3.6971976250006264, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.192061180393865}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "23": {"__type": "Trial", "index": 23, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:32.555917"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:32.564301"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:32.560935"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.22420905621003287, "x2": 0.24569695856207757, "x3": 0.2754493305462289, "x4": 0.2582100804116055, "x5": 0.3158264150965364, "x6": 0.6062330663417775}, "name": "23_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:32.555857"}, "model_predictions": [{"hartmann6": [-2.7047844723148957], "l2norm": [0.8501830565362622]}, {"hartmann6": {"hartmann6": [0.005992131927980093], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [6.520469742991018e-05]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.25303245365817595, "x2": 0.27491228632682185, "x3": 0.23092235470425962, "x4": 0.23383600861552004, "x5": 0.3324706543603699, "x6": 0.6155888186135499}, "name": "22_0"}, [{"hartmann6": -2.665140648241098, "l2norm": 0.8585485690290068}, {"hartmann6": {"hartmann6": 8.483242661619882e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 9.97262513270367e-08}}]], "generator_run_type": null, "index": 0, "fit_time": 0.032488750000993605, "gen_time": 3.6951307500003168, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.8235253375544165}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}, "24": {"__type": "Trial", "index": 24, "trial_type": null, "ttl_seconds": null, "status": {"__type": "TrialStatus", "name": "COMPLETED"}, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:36.409907"}, "time_completed": {"__type": "datetime", "value": "2023-11-10 13:40:36.431566"}, "time_staged": null, "time_run_started": {"__type": "datetime", "value": "2023-11-10 13:40:36.429305"}, "abandoned_reason": null, "failed_reason": null, "run_metadata": {}, "stop_metadata": {}, "generator_run": {"__type": "GeneratorRun", "arms": [{"__type": "Arm", "parameters": {"x1": 0.19673857480875104, "x2": 0.20346916128076148, "x3": 0.32427577169337435, "x4": 0.2743887310854332, "x5": 0.29739532905225424, "x6": 0.6416637893800289}, "name": "24_0"}], "weights": [1.0], "optimization_config": null, "search_space": null, "time_created": {"__type": "datetime", "value": "2023-11-10 13:40:36.409852"}, "model_predictions": [{"hartmann6": [-2.9613611965128843], "l2norm": [0.8700139985228407]}, {"hartmann6": {"hartmann6": [0.006241104649089343], "l2norm": [0.0]}, "l2norm": {"hartmann6": [0.0], "l2norm": [9.047703396406608e-05]}}], "best_arm_predictions": [{"__type": "Arm", "parameters": {"x1": 0.22420905621003287, "x2": 0.24569695856207757, "x3": 0.2754493305462289, "x4": 0.2582100804116055, "x5": 0.3158264150965364, "x6": 0.6062330663417775}, "name": "23_0"}, [{"hartmann6": -2.878521887630775, "l2norm": 0.8487930369529724}, {"hartmann6": {"hartmann6": 9.394646520129807e-07, "l2norm": 0.0}, "l2norm": {"hartmann6": 0.0, "l2norm": 1.0032134709459079e-07}}]], "generator_run_type": null, "index": 0, "fit_time": 0.041341583000757964, "gen_time": 3.7904962499997055, "model_key": "BoTorch", "model_kwargs": {"surrogate_specs": null, "surrogate": null, "acquisition_class": null, "acquisition_options": null, "botorch_acqf_class": null, "refit_on_update": true, "refit_on_cv": false, "warm_start_refit": true}, "bridge_kwargs": {"transform_configs": {"Derelativize": {"use_raw_status_quo": false}, "Winsorize": {"derelativize_with_raw_status_quo": false}}, "torch_dtype": {"__type": "torch_dtype", "value": "torch.float64"}, "torch_device": null, "status_quo_name": null, "status_quo_features": null, "optimization_config": null, "fit_out_of_design": false, "fit_abandoned": false, "fit_tracking_metrics": true, "fit_on_init": true, "default_model_gen_options": null, "transforms": [{"__type": "Type[Transform]", "index_in_registry": 16, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 9, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 7, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 6, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 3, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 5, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 20, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 15, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 4, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 1, "transform_type": ""}, {"__type": "Type[Transform]", "index_in_registry": 11, "transform_type": ""}]}, "gen_metadata": {"expected_acquisition_value": -2.3900159098601774}, "model_state_after_gen": {}, "generation_step_index": 1, "candidate_metadata_by_arm_signature": null, "generation_node_name": "GenerationStep_1"}, "runner": null, "num_arms_created": 1, "generation_step_index": 1, "properties": {}}}, "is_test": false, "data_by_trial": {"0": {"__type": "OrderedDict", "value": [[1699648771046, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"0_0\",\"1\":\"0_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.5200937708,\"1\":1.42567484},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":0,\"1\":0}}"}, "description": null, "__type": "Data"}]]}, "1": {"__type": "OrderedDict", "value": [[1699648771056, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"1_0\",\"1\":\"1_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.3708909513,\"1\":1.4481840065},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":1,\"1\":1}}"}, "description": null, "__type": "Data"}]]}, "2": {"__type": "OrderedDict", "value": [[1699648771064, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"2_0\",\"1\":\"2_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.058890455,\"1\":1.5833021819},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":2,\"1\":2}}"}, "description": null, "__type": "Data"}]]}, "3": {"__type": "OrderedDict", "value": [[1699648771073, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"3_0\",\"1\":\"3_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.0710027498,\"1\":1.8675157293},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":3,\"1\":3}}"}, "description": null, "__type": "Data"}]]}, "4": {"__type": "OrderedDict", "value": [[1699648771083, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"4_0\",\"1\":\"4_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.0553169651,\"1\":1.50504103},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":4,\"1\":4}}"}, "description": null, "__type": "Data"}]]}, "5": {"__type": "OrderedDict", "value": [[1699648771093, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"5_0\",\"1\":\"5_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.1298168745,\"1\":1.5860745167},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":5,\"1\":5}}"}, "description": null, "__type": "Data"}]]}, "6": {"__type": "OrderedDict", "value": [[1699648771103, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"6_0\",\"1\":\"6_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.9316933543,\"1\":1.2902995612},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":6,\"1\":6}}"}, "description": null, "__type": "Data"}]]}, "7": {"__type": "OrderedDict", "value": [[1699648771114, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"7_0\",\"1\":\"7_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.0014247742,\"1\":1.4538464731},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":7,\"1\":7}}"}, "description": null, "__type": "Data"}]]}, "8": {"__type": "OrderedDict", "value": [[1699648771124, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"8_0\",\"1\":\"8_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.1736620709,\"1\":1.5369684567},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":8,\"1\":8}}"}, "description": null, "__type": "Data"}]]}, "9": {"__type": "OrderedDict", "value": [[1699648771136, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"9_0\",\"1\":\"9_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.0278845539,\"1\":0.9449295383},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":9,\"1\":9}}"}, "description": null, "__type": "Data"}]]}, "10": {"__type": "OrderedDict", "value": [[1699648771147, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"10_0\",\"1\":\"10_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.8029479135,\"1\":1.4868194697},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":10,\"1\":10}}"}, "description": null, "__type": "Data"}]]}, "11": {"__type": "OrderedDict", "value": [[1699648771158, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"11_0\",\"1\":\"11_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-0.0360770826,\"1\":1.2610708776},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":11,\"1\":11}}"}, "description": null, "__type": "Data"}]]}, "12": {"__type": "OrderedDict", "value": [[1699648787389, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"12_0\",\"1\":\"12_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.4610966212,\"1\":0.9254061653},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":12,\"1\":12}}"}, "description": null, "__type": "Data"}]]}, "13": {"__type": "OrderedDict", "value": [[1699648792342, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"13_0\",\"1\":\"13_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.6185203303,\"1\":0.952776159},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":13,\"1\":13}}"}, "description": null, "__type": "Data"}]]}, "14": {"__type": "OrderedDict", "value": [[1699648796619, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"14_0\",\"1\":\"14_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.7219580047,\"1\":0.8943972694},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":14,\"1\":14}}"}, "description": null, "__type": "Data"}]]}, "15": {"__type": "OrderedDict", "value": [[1699648801006, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"15_0\",\"1\":\"15_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.2961334618,\"1\":0.9336847751},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":15,\"1\":15}}"}, "description": null, "__type": "Data"}]]}, "16": {"__type": "OrderedDict", "value": [[1699648805052, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"16_0\",\"1\":\"16_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.7486689894,\"1\":0.8736617421},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":16,\"1\":16}}"}, "description": null, "__type": "Data"}]]}, "17": {"__type": "OrderedDict", "value": [[1699648809083, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"17_0\",\"1\":\"17_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.2435912423,\"1\":0.908592051},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":17,\"1\":17}}"}, "description": null, "__type": "Data"}]]}, "18": {"__type": "OrderedDict", "value": [[1699648813404, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"18_0\",\"1\":\"18_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.3701323417,\"1\":0.9468311601},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":18,\"1\":18}}"}, "description": null, "__type": "Data"}]]}, "19": {"__type": "OrderedDict", "value": [[1699648817373, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"19_0\",\"1\":\"19_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.1769013249,\"1\":0.973379915},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":19,\"1\":19}}"}, "description": null, "__type": "Data"}]]}, "20": {"__type": "OrderedDict", "value": [[1699648821281, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"20_0\",\"1\":\"20_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.4478062156,\"1\":0.8818177658},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":20,\"1\":20}}"}, "description": null, "__type": "Data"}]]}, "21": {"__type": "OrderedDict", "value": [[1699648825060, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"21_0\",\"1\":\"21_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-1.95200767,\"1\":0.9010177497},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":21,\"1\":21}}"}, "description": null, "__type": "Data"}]]}, "22": {"__type": "OrderedDict", "value": [[1699648828816, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"22_0\",\"1\":\"22_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.6651516606,\"1\":0.858541164},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":22,\"1\":22}}"}, "description": null, "__type": "Data"}]]}, "23": {"__type": "OrderedDict", "value": [[1699648832562, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"23_0\",\"1\":\"23_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-2.8785413099,\"1\":0.8487910997},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":23,\"1\":23}}"}, "description": null, "__type": "Data"}]]}, "24": {"__type": "OrderedDict", "value": [[1699648836431, {"df": {"__type": "DataFrame", "value": "{\"arm_name\":{\"0\":\"24_0\",\"1\":\"24_0\"},\"metric_name\":{\"0\":\"hartmann6\",\"1\":\"l2norm\"},\"mean\":{\"0\":-3.109012665,\"1\":0.8721961469},\"sem\":{\"0\":0.0,\"1\":0.0},\"trial_index\":{\"0\":24,\"1\":24}}"}, "description": null, "__type": "Data"}]]}}, "properties": {"immutable_search_space_and_opt_config": true}, "default_data_type": {"__type": "DataType", "name": "DATA"}}}, "_enforce_sequential_optimization": true} \ No newline at end of file diff --git a/tutorials/generation_strategy.ipynb b/tutorials/generation_strategy.ipynb index 5187ef73a44..5d2ebe2810c 100644 --- a/tutorials/generation_strategy.ipynb +++ b/tutorials/generation_strategy.ipynb @@ -1,578 +1,454 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [], - "source": [ - "from ax.modelbridge.generation_strategy import GenerationStrategy, GenerationStep\n", - "from ax.modelbridge.registry import Models, ModelRegistryBase\n", - "from ax.modelbridge.dispatch_utils import choose_generation_strategy\n", - "from ax.modelbridge.modelbridge_utils import get_pending_observation_features\n", - "\n", - "from ax.utils.testing.core_stubs import get_branin_search_space, get_branin_experiment" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Generation Strategy (GS) Tutorial\n", - "\n", - "`GenerationStrategy` ([API reference](https://ax.dev/api/modelbridge.html#ax.modelbridge.generation_strategy.GenerationStrategy)) is a key abstraction in Ax:\n", - "- It allows for specifying multiple optimization algorithms to chain one after another in the course of the optimization. \n", - "- Many higher-level APIs in Ax use generation strategies: Service and Loop APIs, `Scheduler` etc. (tutorials for all those higher-level APIs are here: https://ax.dev/tutorials/).\n", - "- Generation strategy allows for storage and resumption of modeling setups, making optimization resumable from SQL or JSON snapshots.\n", - "\n", - "This tutorial walks through a few examples of generation strategies and discusses its important settings. Before reading it, we recommend familiarizing yourself with how `Model` and `ModelBridge` work in Ax: https://ax.dev/docs/models.html#deeper-dive-organization-of-the-modeling-stack.\n", - "\n", - "**Contents:**\n", - "1. Quick-start examples\n", - " 1. Manually configured GS\n", - " 2. Auto-selected GS\n", - " 3. Candidate generation from a GS\n", - "2. Deep dive: `GenerationStep` a building block of the generation strategy\n", - " 1. Describing a model\n", - " 2. Other `GenerationStep` settings\n", - " 3. Chaining `GenerationStep`-s together\n", - " 4. `max_parallelism` enforcement and handling the `MaxParallelismReachedException`\n", - "3. `GenerationStrategy` storage\n", - " 1. JSON storage\n", - " 2. SQL storage\n", - "4. Advanced considerations / \"gotchas\"\n", - " 1. Generation strategy produces `GeneratorRun`-s, not `Trial`-s\n", - " 2. `model_kwargs` elements that don't have associated serialization logic in Ax\n", - " 3. Why prefer `Models` registry enum entries over a factory function?\n", - " 4. How to request more modeling setups in `Models`?\n", - " \n", - "----" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Quick-start examples\n", - "\n", - "### 1A. Manually configured generation strategy\n", - "\n", - "Below is a typical generation strategy used for most single-objective optimization cases in Ax:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [], - "source": [ - "gs = GenerationStrategy(\n", - " steps=[\n", - " # 1. Initialization step (does not require pre-existing data and is well-suited for\n", - " # initial sampling of the search space)\n", - " GenerationStep(\n", - " model=Models.SOBOL,\n", - " num_trials=5, # How many trials should be produced from this generation step\n", - " min_trials_observed=3, # How many trials need to be completed to move to next model\n", - " max_parallelism=5, # Max parallelism for this step\n", - " model_kwargs={\"seed\": 999}, # Any kwargs you want passed into the model\n", - " model_gen_kwargs={}, # Any kwargs you want passed to `modelbridge.gen`\n", - " ),\n", - " # 2. Bayesian optimization step (requires data obtained from previous phase and learns\n", - " # from all data available at the time of each new candidate generation call)\n", - " GenerationStep(\n", - " model=Models.GPEI,\n", - " num_trials=-1, # No limitation on how many trials should be produced from this step\n", - " max_parallelism=3, # Parallelism limit for this step, often lower than for Sobol\n", - " # More on parallelism vs. required samples in BayesOpt:\n", - " # https://ax.dev/docs/bayesopt.html#tradeoff-between-parallelism-and-total-number-of-trials\n", - " ),\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 1B. Auto-selected generation strategy\n", - "\n", - "Ax provides a [`choose_generation_strategy`](https://github.com/facebook/Ax/blob/main/ax/modelbridge/dispatch_utils.py#L115) utility, which can auto-select a suitable generation strategy given a search space and an array of other optional settings. The utility is fairly simple at the moment, but additional development (support for multi-objective optimization, multi-fidelity optimization, Bayesian optimization with categorical kernels etc.) is coming soon." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 06-15 07:59:03] ax.modelbridge.dispatch_utils: Using Bayesian Optimization generation strategy: GenerationStrategy(name='Sobol+GPEI', steps=[Sobol for 5 trials, GPEI for subsequent trials]). Iterations after 5 will take longer to generate due to model-fitting.\n" - ] - }, - { - "data": { - "text/plain": [ - "GenerationStrategy(name='Sobol+GPEI', steps=[Sobol for 5 trials, GPEI for subsequent trials])" - ] - }, - "execution_count": 12, - "metadata": { - "bento_obj_id": "139922521218736" - }, - "output_type": "execute_result" - } - ], - "source": [ - "gs = choose_generation_strategy(\n", - " # Required arguments:\n", - " search_space=get_branin_search_space(), # Ax `SearchSpace`\n", - " # Some optional arguments (shown with their defaults), see API docs for more settings:\n", - " # https://ax.dev/api/modelbridge.html#module-ax.modelbridge.dispatch_utils\n", - " use_batch_trials=False, # Whether this GS will be used to generate 1-arm `Trial`-s or `BatchTrials`\n", - " no_bayesian_optimization=False, # Use quasi-random candidate generation without BayesOpt\n", - " max_parallelism_override=None, # Integer, to which to set the `max_parallelism` setting of all steps in this GS\n", - ")\n", - "gs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 1C. Candidate generation from a generation strategy\n", - "\n", - "While often used through Service or Loop API or other higher-order abstractions like the Ax `Scheduler` (where the generation strategy is used to fit models and produce candidates from them under-the-hood), it's also possible to use the GS directly, in place of a `ModelBridge` instance. The interface of `GenerationStrategy.gen` is the same as `ModelBridge.gen`.\n" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": {}, - "outputs": [], - "source": [ - "experiment = get_branin_experiment()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that it's important to **specify pending observations** to the call to `gen` to avoid getting the same points re-suggested. Without `pending_observations` argument, Ax models are not aware of points that should be excluded from generation. Points are considered \"pending\" when they belong to `STAGED`, `RUNNING`, or `ABANDONED` trials (with the latter included so model does not re-suggest points that are considered \"bad\" and should not be re-suggested).\n", - "\n", - "If the call to `get_pending_obervation_features` becomes slow in your setup (since it performs data-fetching etc.), you can opt for `get_pending_observation_features_based_on_trial_status` (also from `ax.modelbridge.modelbridge_utils`), but note the limitations of that utility (detailed in its docstring)." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "GeneratorRun(1 arms, total weight 1.0)" - ] - }, - "execution_count": 23, - "metadata": { - "bento_obj_id": "139922521218448" - }, - "output_type": "execute_result" - } - ], - "source": [ - "generator_run = gs.gen(\n", - " experiment=experiment, # Ax `Experiment`, for which to generate new candidates\n", - " data=None, # Ax `Data` to use for model training, optional.\n", - " n=1, # Number of candidate arms to produce\n", - " pending_observations=get_pending_observation_features(\n", - " experiment\n", - " ), # Points that should not be re-generated\n", - " # Any other kwargs specified will be passed through to `ModelBridge.gen` along with `GenerationStep.model_gen_kwargs`\n", - ")\n", - "generator_run" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Then we can add the newly produced [`GeneratorRun`](https://ax.dev/docs/glossary.html#generator-run) to the experiment as a [`Trial` (or `BatchTrial` if `n` > 1)](https://ax.dev/docs/glossary.html#trial):" - ] - }, - { - "cell_type": "code", - "execution_count": 24, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Trial(experiment_name='branin_test_experiment', index=0, status=TrialStatus.CANDIDATE, arm=Arm(name='0_0', parameters={'x1': 2.4094051076099277, 'x2': 13.29242150299251}))" - ] - }, - "execution_count": 24, - "metadata": { - "bento_obj_id": "139923550679968" - }, - "output_type": "execute_result" - } - ], - "source": [ - "trial = experiment.new_trial(generator_run)\n", - "trial" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Important notes on `GenerationStrategy.gen`:**\n", - "- if `data` argument above is not specified, GS will pull experiment data from cache via `experiment.lookup_data`,\n", - "- without specifying `pending_observations`, the GS (and any model in Ax) could produce the same candidate over and over, as without that argument the model is not 'aware' that the candidate is part of a `RUNNING` or `ABANDONED` trial and should not be re-suggested again.\n", - "\n", - "In cases where `get_pending_observation_features` is too slow and the experiment consists of 1-arm `Trial`-s only, it's possible to use `get_pending_observation_features_based_on_trial_status` instead (found in the same file)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that when using the Ax Service API, one of the arguments to `AxClient` is `choose_generation_strategy_kwargs`; specifying that argument is a convenient way to influence the choice of generation strategy in `AxClient` without manually specifying a full `GenerationStrategy`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "-----" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. `GenerationStep` as a building block of generation strategy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2A. Describing a model to use in a given `GenerationStep`\n", - "\n", - "There are two ways of specifying a model for a generation step: via an entry in a `Models` enum or via a 'factory function' –– a callable model constructor (e.g. [`get_GPEI`](https://github.com/facebook/Ax/blob/0e454b71d5e07b183c0866855555b6a21ddd5da1/ax/modelbridge/factory.py#L154) and other factory functions in the same file). Note that using the latter path, a factory function, will prohibit `GenerationStrategy` storage and is generally discouraged. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 2B. Other `GenerationStep` settings\n", - "\n", - "All of the available settings are described in the documentation:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "One step in the generation strategy, corresponds to a single model.\n", - " Describes the model, how many trials will be generated with this model, what\n", - " minimum number of observations is required to proceed to the next model, etc.\n", - "\n", - " NOTE: Model can be specified either from the model registry\n", - " (`ax.modelbridge.registry.Models` or using a callable model constructor. Only\n", - " models from the registry can be saved, and thus optimization can only be\n", - " resumed if interrupted when using models from the registry.\n", - "\n", - " Args:\n", - " model: A member of `Models` enum or a callable returning an instance of\n", - " `ModelBridge` with an instantiated underlying `Model`. Refer to\n", - " `ax/modelbridge/factory.py` for examples of such callables.\n", - " num_trials: How many trials to generate with the model from this step.\n", - " If set to -1, trials will continue to be generated from this model\n", - " as long as `generation_strategy.gen` is called (available only for\n", - " the last of the generation steps).\n", - " min_trials_observed: How many trials must be completed before the\n", - " generation strategy can proceed to the next step. Defaults to 0.\n", - " If `num_trials` of a given step have been generated but `min_trials_\n", - " observed` have not been completed, a call to `generation_strategy.gen`\n", - " will fail with a `DataRequiredError`.\n", - " max_parallelism: How many trials generated in the course of this step are\n", - " allowed to be run (i.e. have `trial.status` of `RUNNING`) simultaneously.\n", - " If `max_parallelism` trials from this step are already running, a call\n", - " to `generation_strategy.gen` will fail with a `MaxParallelismReached\n", - " Exception`, indicating that more trials need to be completed before\n", - " generating and running next trials.\n", - " use_update: Whether to use `model_bridge.update` instead or reinstantiating\n", - " model + bridge on every call to `gen` within a single generation step.\n", - " NOTE: use of `update` on stateful models that do not implement `_get_state`\n", - " may result in inability to correctly resume a generation strategy from\n", - " a serialized state.\n", - " enforce_num_trials: Whether to enforce that only `num_trials` are generated\n", - " from the given step. If False and `num_trials` have been generated, but\n", - " `min_trials_observed` have not been completed, `generation_strategy.gen`\n", - " will continue generating trials from the current step, exceeding `num_\n", - " trials` for it. Allows to avoid `DataRequiredError`, but delays\n", - " proceeding to next generation step.\n", - " model_kwargs: Dictionary of kwargs to pass into the model constructor on\n", - " instantiation. E.g. if `model` is `Models.SOBOL`, kwargs will be applied\n", - " as `Models.SOBOL(**model_kwargs)`; if `model` is `get_sobol`, `get_sobol(\n", - " **model_kwargs)`. NOTE: if generation strategy is interrupted and\n", - " resumed from a stored snapshot and its last used model has state saved on\n", - " its generator runs, `model_kwargs` is updated with the state dict of the\n", - " model, retrieved from the last generator run of this generation strategy.\n", - " model_gen_kwargs: Each call to `generation_strategy.gen` performs a call to the\n", - " step's model's `gen` under the hood; `model_gen_kwargs` will be passed to\n", - " the model's `gen` like so: `model.gen(**model_gen_kwargs)`.\n", - " index: Index of this generation step, for use internally in `Generation\n", - " Strategy`. Do not assign as it will be reassigned when instantiating\n", - " `GenerationStrategy` with a list of its steps.\n", - "\n", - " \n" - ] - } - ], - "source": [ - "print(GenerationStep.__doc__)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2C. Chaining `GenerationStep`-s together\n", - "\n", - "A `GenerationStrategy` moves from one step to another when: \n", - "1. `N=num_trials` generator runs were produced and attached as trials to the experiment AND \n", - "2. `M=min_trials_observed` have been completed and have data.\n", - "\n", - "**Caveat: `enforce_num_trials` setting**:\n", - "\n", - "1. If `enforce_num_trials=True` for a given generation step, if 1) is reached but 2) is not yet reached, the generation strategy will raise a `DataRequiredError`, indicating that more trials need to be completed before the next step.\n", - "2. If `enforce_num_trials=False`, the GS will continue producing generator runs from the current step until 2) is reached." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2D. `max_parallelism` enforcement\n", - "\n", - "Generation strategy can restrict the number of trials that can be ran simultaneously (to encourage sequential optimization, which benefits Bayesian optimization performance). When the parallelism limit is reached, a call to `GenerationStrategy.gen` will result in a `MaxParallelismReachedException`.\n", - "\n", - "The correct way to handle this exception:\n", - "1. Make sure that `GenerationStep.max_parallelism` is configured correctly for all steps in your generation strategy (to disable it completely, configure `GenerationStep.max_parallelism=None`),\n", - "2. When encountering the exception, wait to produce more generator runs until more trial evluations complete and log the trial completion via `trial.mark_completed`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "----\n", - "\n", - "## 3. SQL and JSON storage of a generation strategy" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When used through Service API or `Scheduler`, generation strategy will be automatically stored to SQL or JSON via specifying `DBSettings` to either `AxClient` or `Scheduler` (details in respective tutorials in the [\"Tutorials\" page](https://ax.dev/tutorials/)). Generation strategy can also be stored to SQL or JSON individually, as shown below.\n", - "\n", - "More detail on SQL and JSON storage in Ax generally can be [found in \"Building Blocks of Ax\" tutorial](https://ax.dev/tutorials/building_blocks.html#9.-Save-to-JSON-or-SQL)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3A. SQL storage\n", - "For SQL storage setup in Ax, read through the [\"Storage\" documentation page](https://ax.dev/docs/storage.html).\n", - "\n", - "Note that unlike an Ax experiment, a generation strategy does not have a name or another unique identifier. Therefore, a generation strategy is stored in association with experiment and can be retrieved by the associated experiment's name." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from ax.storage.sqa_store.save import save_generation_strategy, save_experiment\n", - "from ax.storage.sqa_store.load import (\n", - " load_experiment,\n", - " load_generation_strategy_by_experiment_name,\n", - ")\n", - "\n", - "from ax.storage.sqa_store.db import (\n", - " init_engine_and_session_factory,\n", - " get_engine,\n", - " create_all_tables,\n", - ")\n", - "from ax.storage.sqa_store.load import load_experiment\n", - "from ax.storage.sqa_store.save import save_experiment\n", - "\n", - "init_engine_and_session_factory(url=\"sqlite:///foo2.db\")\n", - "\n", - "engine = get_engine()\n", - "create_all_tables(engine)\n", - "\n", - "save_experiment(experiment)\n", - "save_generation_strategy(gs)\n", - "\n", - "experiment = load_experiment(experiment_name=experiment.name)\n", - "gs = load_generation_strategy_by_experiment_name(\n", - " experiment_name=experiment.name,\n", - " experiment=experiment, # Can optionally specify experiment object to avoid loading it from database twice\n", - ")\n", - "gs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3B. JSON storage" - ] - }, - { - "cell_type": "code", - "execution_count": 31, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "GenerationStrategy(name='Sobol+GPEI', steps=[Sobol for 5 trials, GPEI for subsequent trials])" - ] - }, - "execution_count": 31, - "metadata": { - "bento_obj_id": "139923550893296" - }, - "output_type": "execute_result" - } - ], - "source": [ - "from ax.storage.json_store.encoder import object_to_json\n", - "from ax.storage.json_store.decoder import object_from_json\n", - "\n", - "gs_json = object_to_json(gs) # Can be written to a file or string via `json.dump` etc.\n", - "gs = object_from_json(\n", - " gs_json\n", - ") # Decoded back from JSON (can be loaded from file, string via `json.load` etc.)\n", - "gs" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "------" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Advanced considerations\n", - "\n", - "Below is a list of important \"gotchas\" of using generation strategy (especially outside of the higher-level APIs like the Service API or the `Scheduler`):\n", - "\n", - "### 3A. `GenerationStrategy.gen` produces `GeneratorRun`-s, not trials\n", - "\n", - "Since `GenerationStrategy.gen` mimics `ModelBridge.gen` and allows for human-in-the-loop usage mode, a call to `gen` produces a `GeneratorRun`, which can then be added (or altered before addition or not added at all) to a `Trial` or `BatchTrial` on a given experiment. So it's important to add the generator run to a trial, since otherwise it will not be attached to the experiment on its own." - ] - }, - { - "cell_type": "code", - "execution_count": 27, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "Trial(experiment_name='branin_test_experiment', index=1, status=TrialStatus.CANDIDATE, arm=Arm(name='1_0', parameters={'x1': -0.34071301110088825, 'x2': 7.061324520036578}))" - ] - }, - "execution_count": 27, - "metadata": { - "bento_obj_id": "139923551043648" - }, - "output_type": "execute_result" - } - ], - "source": [ - "generator_run = gs.gen(\n", - " experiment=experiment,\n", - " n=1,\n", - " pending_observations=get_pending_observation_features(experiment),\n", - ")\n", - "experiment.new_trial(generator_run)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3B. `model_kwargs` elements that do not define serialization logic in Ax" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Note that passing objects that are not yet serializable in Ax (e.g. a BoTorch `Prior` object) as part of `GenerationStep.model_kwargs` or `GenerationStep.model_gen_kwargs` will prevent correct generation strategy storage. If this becomes a problem, feel free to open an issue on our Github: https://github.com/facebook/Ax/issues to get help with adding storage support for a given object." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3C. Why prefer `Models` enum entries over a factory function?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "1. **Storage potential:** a call to, for example, `Models.GPEI` captures all arguments to the model and model bridge and stores them on a generator runs, subsequently produced by the model. Since the capturing logic is part of `Models.__call__` function, it is not present in a factory function. Furthermore, there is no safe and flexible way to serialize callables in Python.\n", - "2. **Standardization:** While a 'factory function' is by default more flexible (accepts any specified inputs and produces a `ModelBridge` with an underlying `Model` instance based on them), it is not standard in terms of its inputs. `Models` introduces a standardized interface, making it easy to adapt any example to one's specific case." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 3D. How can I request more modeling setups added to `Models` and natively supported in Ax?" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Please open a [Github issue](https://github.com/facebook/Ax/issues) to request a new modeling setup in Ax (or for any other questions or requests)." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } - }, - "nbformat": 4, - "nbformat_minor": 2 + "cells": [ + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from ax.modelbridge.dispatch_utils import choose_generation_strategy\n", + "from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy\n", + "from ax.modelbridge.modelbridge_utils import get_pending_observation_features\n", + "from ax.modelbridge.registry import ModelRegistryBase, Models\n", + "\n", + "from ax.utils.testing.core_stubs import get_branin_experiment, get_branin_search_space" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Generation Strategy (GS) Tutorial\n", + "\n", + "`GenerationStrategy` ([API reference](https://ax.dev/api/modelbridge.html#ax.modelbridge.generation_strategy.GenerationStrategy)) is a key abstraction in Ax:\n", + "- It allows for specifying multiple optimization algorithms to chain one after another in the course of the optimization. \n", + "- Many higher-level APIs in Ax use generation strategies: Service and Loop APIs, `Scheduler` etc. (tutorials for all those higher-level APIs are here: https://ax.dev/tutorials/).\n", + "- Generation strategy allows for storage and resumption of modeling setups, making optimization resumable from SQL or JSON snapshots.\n", + "\n", + "This tutorial walks through a few examples of generation strategies and discusses its important settings. Before reading it, we recommend familiarizing yourself with how `Model` and `ModelBridge` work in Ax: https://ax.dev/docs/models.html#deeper-dive-organization-of-the-modeling-stack.\n", + "\n", + "**Contents:**\n", + "1. Quick-start examples\n", + " 1. Manually configured GS\n", + " 2. Auto-selected GS\n", + " 3. Candidate generation from a GS\n", + "2. Deep dive: `GenerationStep` a building block of the generation strategy\n", + " 1. Describing a model\n", + " 2. Other `GenerationStep` settings\n", + " 3. Chaining `GenerationStep`-s together\n", + " 4. `max_parallelism` enforcement and handling the `MaxParallelismReachedException`\n", + "3. `GenerationStrategy` storage\n", + " 1. JSON storage\n", + " 2. SQL storage\n", + "4. Advanced considerations / \"gotchas\"\n", + " 1. Generation strategy produces `GeneratorRun`-s, not `Trial`-s\n", + " 2. `model_kwargs` elements that don't have associated serialization logic in Ax\n", + " 3. Why prefer `Models` registry enum entries over a factory function?\n", + " 4. How to request more modeling setups in `Models`?\n", + " \n", + "----" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Quick-start examples\n", + "\n", + "### 1A. Manually configured generation strategy\n", + "\n", + "Below is a typical generation strategy used for most single-objective optimization cases in Ax:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gs = GenerationStrategy(\n", + " steps=[\n", + " # 1. Initialization step (does not require pre-existing data and is well-suited for\n", + " # initial sampling of the search space)\n", + " GenerationStep(\n", + " model=Models.SOBOL,\n", + " num_trials=5, # How many trials should be produced from this generation step\n", + " min_trials_observed=3, # How many trials need to be completed to move to next model\n", + " max_parallelism=5, # Max parallelism for this step\n", + " model_kwargs={\"seed\": 999}, # Any kwargs you want passed into the model\n", + " model_gen_kwargs={}, # Any kwargs you want passed to `modelbridge.gen`\n", + " ),\n", + " # 2. Bayesian optimization step (requires data obtained from previous phase and learns\n", + " # from all data available at the time of each new candidate generation call)\n", + " GenerationStep(\n", + " model=Models.BOTORCH_MODULAR,\n", + " num_trials=-1, # No limitation on how many trials should be produced from this step\n", + " max_parallelism=3, # Parallelism limit for this step, often lower than for Sobol\n", + " # More on parallelism vs. required samples in BayesOpt:\n", + " # https://ax.dev/docs/bayesopt.html#tradeoff-between-parallelism-and-total-number-of-trials\n", + " ),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1B. Auto-selected generation strategy\n", + "\n", + "Ax provides a [`choose_generation_strategy`](https://github.com/facebook/Ax/blob/main/ax/modelbridge/dispatch_utils.py#L115) utility, which can auto-select a suitable generation strategy given a search space and an array of other optional settings. The utility is fairly simple at the moment, but additional development (support for multi-objective optimization, multi-fidelity optimization, Bayesian optimization with categorical kernels etc.) is coming soon." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "gs = choose_generation_strategy(\n", + " # Required arguments:\n", + " search_space=get_branin_search_space(), # Ax `SearchSpace`\n", + " # Some optional arguments (shown with their defaults), see API docs for more settings:\n", + " # https://ax.dev/api/modelbridge.html#module-ax.modelbridge.dispatch_utils\n", + " use_batch_trials=False, # Whether this GS will be used to generate 1-arm `Trial`-s or `BatchTrials`\n", + " no_bayesian_optimization=False, # Use quasi-random candidate generation without BayesOpt\n", + " max_parallelism_override=None, # Integer, to which to set the `max_parallelism` setting of all steps in this GS\n", + ")\n", + "gs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 1C. Candidate generation from a generation strategy\n", + "\n", + "While often used through Service or Loop API or other higher-order abstractions like the Ax `Scheduler` (where the generation strategy is used to fit models and produce candidates from them under-the-hood), it's also possible to use the GS directly, in place of a `ModelBridge` instance. The interface of `GenerationStrategy.gen` is the same as `ModelBridge.gen`.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "experiment = get_branin_experiment()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that it's important to **specify pending observations** to the call to `gen` to avoid getting the same points re-suggested. Without `pending_observations` argument, Ax models are not aware of points that should be excluded from generation. Points are considered \"pending\" when they belong to `STAGED`, `RUNNING`, or `ABANDONED` trials (with the latter included so model does not re-suggest points that are considered \"bad\" and should not be re-suggested).\n", + "\n", + "If the call to `get_pending_obervation_features` becomes slow in your setup (since it performs data-fetching etc.), you can opt for `get_pending_observation_features_based_on_trial_status` (also from `ax.modelbridge.modelbridge_utils`), but note the limitations of that utility (detailed in its docstring)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "generator_run = gs.gen(\n", + " experiment=experiment, # Ax `Experiment`, for which to generate new candidates\n", + " data=None, # Ax `Data` to use for model training, optional.\n", + " n=1, # Number of candidate arms to produce\n", + " pending_observations=get_pending_observation_features(\n", + " experiment\n", + " ), # Points that should not be re-generated\n", + " # Any other kwargs specified will be passed through to `ModelBridge.gen` along with `GenerationStep.model_gen_kwargs`\n", + ")\n", + "generator_run" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then we can add the newly produced [`GeneratorRun`](https://ax.dev/docs/glossary.html#generator-run) to the experiment as a [`Trial` (or `BatchTrial` if `n` > 1)](https://ax.dev/docs/glossary.html#trial):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "trial = experiment.new_trial(generator_run)\n", + "trial" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Important notes on `GenerationStrategy.gen`:**\n", + "- if `data` argument above is not specified, GS will pull experiment data from cache via `experiment.lookup_data`,\n", + "- without specifying `pending_observations`, the GS (and any model in Ax) could produce the same candidate over and over, as without that argument the model is not 'aware' that the candidate is part of a `RUNNING` or `ABANDONED` trial and should not be re-suggested again.\n", + "\n", + "In cases where `get_pending_observation_features` is too slow and the experiment consists of 1-arm `Trial`-s only, it's possible to use `get_pending_observation_features_based_on_trial_status` instead (found in the same file)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that when using the Ax Service API, one of the arguments to `AxClient` is `choose_generation_strategy_kwargs`; specifying that argument is a convenient way to influence the choice of generation strategy in `AxClient` without manually specifying a full `GenerationStrategy`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "-----" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. `GenerationStep` as a building block of generation strategy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2A. Describing a model to use in a given `GenerationStep`\n", + "\n", + "There are two ways of specifying a model for a generation step: via an entry in a `Models` enum or via a 'factory function' –– a callable model constructor (e.g. [`get_GPEI`](https://github.com/facebook/Ax/blob/0e454b71d5e07b183c0866855555b6a21ddd5da1/ax/modelbridge/factory.py#L154) and other factory functions in the same file). Note that using the latter path, a factory function, will prohibit `GenerationStrategy` storage and is generally discouraged. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2B. Other `GenerationStep` settings\n", + "\n", + "All of the available settings are described in the documentation:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(GenerationStep.__doc__)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2C. Chaining `GenerationStep`-s together\n", + "\n", + "A `GenerationStrategy` moves from one step to another when: \n", + "1. `N=num_trials` generator runs were produced and attached as trials to the experiment AND \n", + "2. `M=min_trials_observed` have been completed and have data.\n", + "\n", + "**Caveat: `enforce_num_trials` setting**:\n", + "\n", + "1. If `enforce_num_trials=True` for a given generation step, if 1) is reached but 2) is not yet reached, the generation strategy will raise a `DataRequiredError`, indicating that more trials need to be completed before the next step.\n", + "2. If `enforce_num_trials=False`, the GS will continue producing generator runs from the current step until 2) is reached." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2D. `max_parallelism` enforcement\n", + "\n", + "Generation strategy can restrict the number of trials that can be ran simultaneously (to encourage sequential optimization, which benefits Bayesian optimization performance). When the parallelism limit is reached, a call to `GenerationStrategy.gen` will result in a `MaxParallelismReachedException`.\n", + "\n", + "The correct way to handle this exception:\n", + "1. Make sure that `GenerationStep.max_parallelism` is configured correctly for all steps in your generation strategy (to disable it completely, configure `GenerationStep.max_parallelism=None`),\n", + "2. When encountering the exception, wait to produce more generator runs until more trial evluations complete and log the trial completion via `trial.mark_completed`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "----\n", + "\n", + "## 3. SQL and JSON storage of a generation strategy" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When used through Service API or `Scheduler`, generation strategy will be automatically stored to SQL or JSON via specifying `DBSettings` to either `AxClient` or `Scheduler` (details in respective tutorials in the [\"Tutorials\" page](https://ax.dev/tutorials/)). Generation strategy can also be stored to SQL or JSON individually, as shown below.\n", + "\n", + "More detail on SQL and JSON storage in Ax generally can be [found in \"Building Blocks of Ax\" tutorial](https://ax.dev/tutorials/building_blocks.html#9.-Save-to-JSON-or-SQL)." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3A. SQL storage\n", + "For SQL storage setup in Ax, read through the [\"Storage\" documentation page](https://ax.dev/docs/storage.html).\n", + "\n", + "Note that unlike an Ax experiment, a generation strategy does not have a name or another unique identifier. Therefore, a generation strategy is stored in association with experiment and can be retrieved by the associated experiment's name." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from ax.storage.sqa_store.db import (\n", + " create_all_tables,\n", + " get_engine,\n", + " init_engine_and_session_factory,\n", + ")\n", + "from ax.storage.sqa_store.load import (\n", + " load_experiment,\n", + " load_generation_strategy_by_experiment_name,\n", + ")\n", + "from ax.storage.sqa_store.save import save_experiment, save_generation_strategy\n", + "\n", + "init_engine_and_session_factory(url=\"sqlite:///foo2.db\")\n", + "\n", + "engine = get_engine()\n", + "create_all_tables(engine)\n", + "\n", + "save_experiment(experiment)\n", + "save_generation_strategy(gs)\n", + "\n", + "experiment = load_experiment(experiment_name=experiment.name)\n", + "gs = load_generation_strategy_by_experiment_name(\n", + " experiment_name=experiment.name,\n", + " experiment=experiment, # Can optionally specify experiment object to avoid loading it from database twice\n", + ")\n", + "gs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3B. JSON storage" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from ax.storage.json_store.decoder import object_from_json\n", + "from ax.storage.json_store.encoder import object_to_json\n", + "\n", + "gs_json = object_to_json(gs) # Can be written to a file or string via `json.dump` etc.\n", + "gs = object_from_json(\n", + " gs_json\n", + ") # Decoded back from JSON (can be loaded from file, string via `json.load` etc.)\n", + "gs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Advanced considerations\n", + "\n", + "Below is a list of important \"gotchas\" of using generation strategy (especially outside of the higher-level APIs like the Service API or the `Scheduler`):\n", + "\n", + "### 3A. `GenerationStrategy.gen` produces `GeneratorRun`-s, not trials\n", + "\n", + "Since `GenerationStrategy.gen` mimics `ModelBridge.gen` and allows for human-in-the-loop usage mode, a call to `gen` produces a `GeneratorRun`, which can then be added (or altered before addition or not added at all) to a `Trial` or `BatchTrial` on a given experiment. So it's important to add the generator run to a trial, since otherwise it will not be attached to the experiment on its own." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "generator_run = gs.gen(\n", + " experiment=experiment,\n", + " n=1,\n", + " pending_observations=get_pending_observation_features(experiment),\n", + ")\n", + "experiment.new_trial(generator_run)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3B. `model_kwargs` elements that do not define serialization logic in Ax" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note that passing objects that are not yet serializable in Ax (e.g. a BoTorch `Prior` object) as part of `GenerationStep.model_kwargs` or `GenerationStep.model_gen_kwargs` will prevent correct generation strategy storage. If this becomes a problem, feel free to open an issue on our Github: https://github.com/facebook/Ax/issues to get help with adding storage support for a given object." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3C. Why prefer `Models` enum entries over a factory function?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "1. **Storage potential:** a call to, for example, `Models.GPEI` captures all arguments to the model and model bridge and stores them on a generator runs, subsequently produced by the model. Since the capturing logic is part of `Models.__call__` function, it is not present in a factory function. Furthermore, there is no safe and flexible way to serialize callables in Python.\n", + "2. **Standardization:** While a 'factory function' is by default more flexible (accepts any specified inputs and produces a `ModelBridge` with an underlying `Model` instance based on them), it is not standard in terms of its inputs. `Models` introduces a standardized interface, making it easy to adapt any example to one's specific case." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 3D. How can I request more modeling setups added to `Models` and natively supported in Ax?" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Please open a [Github issue](https://github.com/facebook/Ax/issues) to request a new modeling setup in Ax (or for any other questions or requests)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/gpei_hartmann_developer.ipynb b/tutorials/gpei_hartmann_developer.ipynb index f97ebf235fa..4b216818bac 100644 --- a/tutorials/gpei_hartmann_developer.ipynb +++ b/tutorials/gpei_hartmann_developer.ipynb @@ -1,710 +1,712 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "08064d6a-453e-44d7-85dc-896d40b6303a", - "showInput": true - }, - "source": [ - "# Developer API Example on Hartmann6\n", - "\n", - "The Developer API is suitable when the user wants maximal customization of the optimization loop. This tutorial demonstrates optimization of a Hartmann6 function using the `Experiment` construct. In this example, trials will be evaluated synchronously." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646323252842, - "executionStopTime": 1646323256492, - "hidden_ranges": [], - "originalKey": "7b98b243-30da-468b-82c7-7e22dbce6b57", - "requestMsgId": "7b98b243-30da-468b-82c7-7e22dbce6b57" - }, - "outputs": [], - "source": [ - "from ax import (\n", - " ComparisonOp,\n", - " ParameterType,\n", - " RangeParameter,\n", - " ChoiceParameter,\n", - " FixedParameter,\n", - " SearchSpace,\n", - " Experiment,\n", - " OutcomeConstraint,\n", - " OrderConstraint,\n", - " SumConstraint,\n", - " OptimizationConfig,\n", - " Objective,\n", - " Metric,\n", - ")\n", - "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", - "\n", - "init_notebook_plotting()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "f522bb04-8372-4647-8c90-cffb8a664be3", - "showInput": true - }, - "source": [ - "## 1. Create Search Space\n", - "\n", - "First, we define a search space, which defines the type and allowed range for the parameters." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646323256533, - "executionStopTime": 1646323256546, - "originalKey": "9b782d53-f9e2-4b13-a8ba-b7941aba802e", - "requestMsgId": "9b782d53-f9e2-4b13-a8ba-b7941aba802e" - }, - "outputs": [], - "source": [ - "hartmann_search_space = SearchSpace(\n", - " parameters=[\n", - " RangeParameter(\n", - " name=f\"x{i}\", parameter_type=ParameterType.FLOAT, lower=0.0, upper=1.0\n", - " )\n", - " for i in range(6)\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "9e0c312c-e290-4e7b-bf9c-45bd5c360c25", - "showInput": false - }, - "source": [ - "Note that there are two other parameter classes, FixedParameter and ChoiceParameter. Although we won't use these in this example, you can create them as follows.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646323256562, - "executionStopTime": 1646323256584, - "hidden_ranges": [], - "originalKey": "e29cbb8f-9045-4d9c-8a57-aeff1cd91da6", - "requestMsgId": "e29cbb8f-9045-4d9c-8a57-aeff1cd91da6", - "showInput": true - }, - "outputs": [], - "source": [ - "choice_param = ChoiceParameter(\n", - " name=\"choice\", values=[\"foo\", \"bar\"], parameter_type=ParameterType.STRING\n", - ")\n", - "fixed_param = FixedParameter(\n", - " name=\"fixed\", value=[True], parameter_type=ParameterType.BOOL\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "75b46af0-9739-46a6-9b95-21c8e2e9e22a", - "showInput": false - }, - "source": [ - "Sum constraints enforce that the sum of a set of parameters is greater or less than some bound, and order constraints enforce that one parameter is smaller than the other. We won't use these either, but see two examples below.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646323256616, - "executionStopTime": 1646323256621, - "hidden_ranges": [], - "originalKey": "b782e8cf-c11c-4f4e-a416-2577a56b4100", - "requestMsgId": "b782e8cf-c11c-4f4e-a416-2577a56b4100", - "showInput": true - }, - "outputs": [], - "source": [ - "sum_constraint = SumConstraint(\n", - " parameters=[\n", - " hartmann_search_space.parameters[\"x0\"],\n", - " hartmann_search_space.parameters[\"x1\"],\n", - " ],\n", - " is_upper_bound=True,\n", - " bound=5.0,\n", - ")\n", - "\n", - "order_constraint = OrderConstraint(\n", - " lower_parameter=hartmann_search_space.parameters[\"x0\"],\n", - " upper_parameter=hartmann_search_space.parameters[\"x1\"],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "7bf887e2-2b02-4237-ba5e-6fa8beaa85fb", - "showInput": false - }, - "source": [ - "## 2. Create Optimization Config\n", - "\n", - "Second, we define the `optimization_config` with an `objective` and `outcome_constraints`.\n", - "\n", - "When doing the optimization, we will find points that minimize the objective while obeying the constraints (which in this case means `l2norm < 1.25`).\n", - "\n", - "Note: we are using `Hartmann6Metric` and `L2NormMetric` here, which have built in evaluation functions for testing. For creating your own cutom metrics, see [8. Defining custom metrics](#8.-Defining-custom-metrics)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646323256629, - "executionStopTime": 1646323256633, - "hidden_ranges": [], - "originalKey": "d0e2b580-bfb5-4a73-8db1-34a3c43c3ef2", - "requestMsgId": "d0e2b580-bfb5-4a73-8db1-34a3c43c3ef2" - }, - "outputs": [], - "source": [ - "from ax.metrics.l2norm import L2NormMetric\n", - "from ax.metrics.hartmann6 import Hartmann6Metric\n", - "\n", - "param_names = [f\"x{i}\" for i in range(6)]\n", - "optimization_config = OptimizationConfig(\n", - " objective=Objective(\n", - " metric=Hartmann6Metric(name=\"hartmann6\", param_names=param_names),\n", - " minimize=True,\n", - " ),\n", - " outcome_constraints=[\n", - " OutcomeConstraint(\n", - " metric=L2NormMetric(name=\"l2norm\", param_names=param_names, noise_sd=0.2),\n", - " op=ComparisonOp.LEQ,\n", - " bound=1.25,\n", - " relative=False,\n", - " )\n", - " ],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "customInput": null, - "hidden_ranges": [], - "originalKey": "ed80a5e4-4786-4961-979e-22a295bfa7f0", - "showInput": false - }, - "source": [ - "## 3. Define a Runner\n", - "Before an experiment can collect data, it must have a Runner attached. A runner handles the deployment of trials. A trial must be \"run\" before it can be evaluated.\n", - "\n", - "Here, we have a dummy runner that does nothing. In practice, a runner might be in charge of pushing an experiment to production.\n", - "\n", - "The only method that needs to be defined for runner subclasses is run, which performs any necessary deployment logic, and returns a dictionary of resulting metadata. This metadata can later be accessed through the trial's `run_metadata` property." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646323256641, - "executionStopTime": 1646323256645, - "hidden_ranges": [], - "originalKey": "c9862804-4c0c-4691-be2c-5cb0eb778460", - "requestMsgId": "c9862804-4c0c-4691-be2c-5cb0eb778460", - "showInput": true - }, - "outputs": [], - "source": [ - "from ax import Runner\n", - "\n", - "\n", - "class MyRunner(Runner):\n", - " def run(self, trial):\n", - " trial_metadata = {\"name\": str(trial.index)}\n", - " return trial_metadata" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "customInput": null, - "hidden_ranges": [], - "originalKey": "131ab2a9-e2c7-4752-99a3-547c7dbe42ec", - "showInput": false - }, - "source": [ - "## 4. Create Experiment\n", - "Next, we make an `Experiment` with our search space, runner, and optimization config." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646323256653, - "executionStopTime": 1646323256658, - "hidden_ranges": [], - "originalKey": "18ce7d69-d556-48f5-9945-c75bedb362bb", - "requestMsgId": "18ce7d69-d556-48f5-9945-c75bedb362bb", - "showInput": true - }, - "outputs": [], - "source": [ - "exp = Experiment(\n", - " name=\"test_hartmann\",\n", - " search_space=hartmann_search_space,\n", - " optimization_config=optimization_config,\n", - " runner=MyRunner(),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "8a04eba9-97f2-45f7-8b10-7216fe9c0101", - "showInput": true - }, - "source": [ - "## 5. Perform Optimization\n", - "\n", - "Run the optimization using the settings defined on the experiment. We will create 5 random sobol points for exploration followed by 15 points generated using the GPEI optimizer.\n", - "\n", - "Instead of a member of the `Models` enum to produce generator runs, users can leverage a `GenerationStrategy`. See the [Generation Strategy Tutorial](https://ax.dev/tutorials/generation_strategy.html) for more info." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646323256665, - "executionStopTime": 1646323714923, - "hidden_ranges": [], - "originalKey": "b48e26da-57e7-4b81-baf0-122a71f0bb72", - "requestMsgId": "b48e26da-57e7-4b81-baf0-122a71f0bb72" - }, - "outputs": [], - "source": [ - "from ax.modelbridge.registry import Models\n", - "\n", - "NUM_SOBOL_TRIALS = 5\n", - "NUM_BOTORCH_TRIALS = 15\n", - "\n", - "print(f\"Running Sobol initialization trials...\")\n", - "sobol = Models.SOBOL(search_space=exp.search_space)\n", - "\n", - "for i in range(NUM_SOBOL_TRIALS):\n", - " # Produce a GeneratorRun from the model, which contains proposed arm(s) and other metadata\n", - " generator_run = sobol.gen(n=1)\n", - " # Add generator run to a trial to make it part of the experiment and evaluate arm(s) in it\n", - " trial = exp.new_trial(generator_run=generator_run)\n", - " # Start trial run to evaluate arm(s) in the trial\n", - " trial.run()\n", - " # Mark trial as completed to record when a trial run is completed\n", - " # and enable fetching of data for metrics on the experiment\n", - " # (by default, trials must be completed before metrics can fetch their data,\n", - " # unless a metric is explicitly configured otherwise)\n", - " trial.mark_completed()\n", - "\n", - "for i in range(NUM_BOTORCH_TRIALS):\n", - " print(\n", - " f\"Running GP+EI optimization trial {i + NUM_SOBOL_TRIALS + 1}/{NUM_SOBOL_TRIALS + NUM_BOTORCH_TRIALS}...\"\n", - " )\n", - " # Reinitialize GP+EI model at each step with updated data.\n", - " gpei = Models.BOTORCH(experiment=exp, data=exp.fetch_data())\n", - " generator_run = gpei.gen(n=1)\n", - " trial = exp.new_trial(generator_run=generator_run)\n", - " trial.run()\n", - " trial.mark_completed()\n", - "\n", - "print(\"Done!\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "f503e648-e3f2-419f-a60e-5bfcbc6775bd", - "showInput": true - }, - "source": [ - "## 6. Inspect trials' data\n", - "\n", - "Now we can inspect the `Experiment`'s data by calling `fetch_data()`, which retrieves evaluation data for all trials of the experiment.\n", - "\n", - "To fetch trial data, we need to run it and mark it completed. For most metrics in Ax, data is only available once the status of the trial is `COMPLETED`, since in real-worlds scenarios, metrics can typically only be fetched after the trial finished running.\n", - "\n", - "NOTE: Metrics classes may implement the `is_available_while_running` method. When this method returns `True`, data is available when trials are either `RUNNING` or `COMPLETED`. This can be used to obtain intermediate results from A/B test trials and other online experiments, or when metric values are available immediately, like in the case of synthetic problem metrics.\n", - "\n", - "We can also use the `fetch_trials_data` function to get evaluation data for a specific trials in the experiment, like so:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646323714950, - "executionStopTime": 1646323715210, - "hidden_ranges": [], - "originalKey": "65113ac3-956a-4fcc-abf7-a9d45f8ecb72", - "requestMsgId": "65113ac3-956a-4fcc-abf7-a9d45f8ecb72" - }, - "outputs": [], - "source": [ - "trial_data = exp.fetch_trials_data([NUM_SOBOL_TRIALS + NUM_BOTORCH_TRIALS - 1])\n", - "trial_data.df" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "customInput": null, - "hidden_ranges": [], - "originalKey": "74fa0cc5-075c-4b34-98b9-cbf74ad5bb26", - "showInput": true - }, - "source": [ - "The below call to `exp.fetch_data()` also attaches data to the last trial, which because of the way we looped through Botorch trials in [5. Perform Optimization](5.-Perform-Optimization), would otherwise not have data attached. This is necessary to get `objective_means` in [7. Plot results](7.-Plot-results)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646323715232, - "executionStopTime": 1646323715950, - "hidden_ranges": [], - "originalKey": "88fb1408-0965-48f9-a211-140ea57f46a6", - "requestMsgId": "88fb1408-0965-48f9-a211-140ea57f46a6", - "showInput": true - }, - "outputs": [], - "source": [ - "exp.fetch_data().df" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "940865f9-af61-4668-aea0-b19ed5c5497d", - "showInput": false - }, - "source": [ - "## 7. Plot results\n", - "Now we can plot the results of our optimization:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646323715983, - "executionStopTime": 1646323716634, - "hidden_ranges": [], - "originalKey": "5a4d2c4d-756a-492a-8938-d080a499b66c", - "requestMsgId": "5a4d2c4d-756a-492a-8938-d080a499b66c" - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from ax.plot.trace import optimization_trace_single_method\n", - "\n", - "# `plot_single_method` expects a 2-d array of means, because it expects to average means from multiple\n", - "# optimization runs, so we wrap out best objectives array in another array.\n", - "objective_means = np.array([[trial.objective_mean for trial in exp.trials.values()]])\n", - "best_objective_plot = optimization_trace_single_method(\n", - " y=np.minimum.accumulate(objective_means, axis=1),\n", - " optimum=-3.32237, # Known minimum objective for Hartmann6 function.\n", - ")\n", - "render(best_objective_plot)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "customInput": null, - "hidden_ranges": [], - "originalKey": "934db3fd-1dce-421b-8228-820025f3821a", - "showInput": true - }, - "source": [ - "## 8. Defining custom metrics\n", - "In order to perform an optimization, we also need to define an optimization config for the experiment. An optimization config is composed of an objective metric to be minimized or maximized in the experiment, and optionally a set of outcome constraints that place restrictions on how other metrics can be moved by the experiment.\n", - "\n", - "In order to define an objective or outcome constraint, we first need to subclass Metric. Metrics are used to evaluate trials, which are individual steps of the experiment sequence. Each trial contains one or more arms for which we will collect data at the same time.\n", - "\n", - "Our custom metric(s) will determine how, given a trial, to compute the mean and SEM of each of the trial's arms.\n", - "\n", - "The only method that needs to be defined for most metric subclasses is `fetch_trial_data`, which defines how a single trial is evaluated, and returns a pandas dataframe.\n", - " \n", - "The `is_available_while_running` method is optional and returns a boolean, specifying whether the trial data can be fetched before the trial is complete. See [6. Inspect trials' data](6.-Inspect-trials'-data) for more details." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646323716638, - "executionStopTime": 1646323716697, - "hidden_ranges": [], - "originalKey": "7ec75ae4-1d7f-4ff4-8d9d-b77fdf28ccfe", - "requestMsgId": "7ec75ae4-1d7f-4ff4-8d9d-b77fdf28ccfe", - "showInput": true - }, - "outputs": [], - "source": [ - "from ax import Data\n", - "import pandas as pd\n", - "\n", - "\n", - "class BoothMetric(Metric):\n", - " def fetch_trial_data(self, trial):\n", - " records = []\n", - " for arm_name, arm in trial.arms_by_name.items():\n", - " params = arm.parameters\n", - " records.append(\n", - " {\n", - " \"arm_name\": arm_name,\n", - " \"metric_name\": self.name,\n", - " \"trial_index\": trial.index,\n", - " # in practice, the mean and sem will be looked up based on trial metadata\n", - " # but for this tutorial we will calculate them\n", - " \"mean\": (params[\"x1\"] + 2 * params[\"x2\"] - 7) ** 2\n", - " + (2 * params[\"x1\"] + params[\"x2\"] - 5) ** 2,\n", - " \"sem\": 0.0,\n", - " }\n", - " )\n", - " return Data(df=pd.DataFrame.from_records(records))\n", - "\n", - " def is_available_while_running(self) -> bool:\n", - " return True" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "customInput": null, - "hidden_ranges": [], - "originalKey": "92fcddf9-9d86-45cd-b9fb-a0a7acdb267d", - "showInput": false - }, - "source": [ - "## 9. Save to JSON or SQL\n", - "At any point, we can also save our experiment to a JSON file. To ensure that our custom metrics and runner are saved properly, we first need to register them." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646324682655, - "executionStopTime": 1646324682796, - "hidden_ranges": [], - "originalKey": "f57e11d7-cc68-4323-a0cd-ff6f464dcd97", - "requestMsgId": "f57e11d7-cc68-4323-a0cd-ff6f464dcd97", - "showInput": true - }, - "outputs": [], - "source": [ - "from ax.storage.registry_bundle import RegistryBundle\n", - "\n", - "bundle = RegistryBundle(\n", - " metric_clss={BoothMetric: None, L2NormMetric: None, Hartmann6Metric: None},\n", - " runner_clss={MyRunner: None},\n", - ")\n", - "\n", - "from ax.storage.json_store.load import load_experiment\n", - "from ax.storage.json_store.save import save_experiment\n", - "\n", - "save_experiment(exp, \"experiment.json\", encoder_registry=bundle.encoder_registry)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646324718153, - "executionStopTime": 1646324720104, - "hidden_ranges": [], - "originalKey": "e19ec7fb-f266-417e-ad17-5662a53a9ae3", - "requestMsgId": "e19ec7fb-f266-417e-ad17-5662a53a9ae3", - "showInput": true - }, - "outputs": [], - "source": [ - "loaded_experiment = load_experiment(\n", - " \"experiment.json\", decoder_registry=bundle.decoder_registry\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "dc1f6800-437e-45de-85d3-276ae5f8ca99", - "showInput": false - }, - "source": [ - "To save our experiment to SQL, we must first specify a connection to a database and create all necessary tables.\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646324834810, - "executionStopTime": 1646324835293, - "hidden_ranges": [], - "originalKey": "a0376ade-9a26-430b-b08b-0b93e890539c", - "requestMsgId": "a0376ade-9a26-430b-b08b-0b93e890539c", - "showInput": true - }, - "outputs": [], - "source": [ - "from ax.storage.sqa_store.db import (\n", - " init_engine_and_session_factory,\n", - " get_engine,\n", - " create_all_tables,\n", - ")\n", - "from ax.storage.sqa_store.load import load_experiment\n", - "from ax.storage.sqa_store.save import save_experiment\n", - "\n", - "init_engine_and_session_factory(url=\"sqlite:///foo3.db\")\n", - "\n", - "engine = get_engine()\n", - "create_all_tables(engine)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646324891053, - "executionStopTime": 1646324897271, - "hidden_ranges": [], - "originalKey": "82f58ead-8f0d-44cf-9fa8-dd67f7c8c8df", - "requestMsgId": "82f58ead-8f0d-44cf-9fa8-dd67f7c8c8df", - "showInput": true - }, - "outputs": [], - "source": [ - "from ax.storage.sqa_store.sqa_config import SQAConfig\n", - "\n", - "exp.name = \"new\"\n", - "\n", - "sqa_config = SQAConfig(\n", - " json_encoder_registry=bundle.encoder_registry,\n", - " json_decoder_registry=bundle.decoder_registry,\n", - " metric_registry=bundle.metric_registry,\n", - " runner_registry=bundle.runner_registry,\n", - ")\n", - "\n", - "save_experiment(exp, config=sqa_config)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1646324904964, - "executionStopTime": 1646324906901, - "hidden_ranges": [], - "originalKey": "ed1be69c-da92-4a1d-a5e8-e76bba42f0ba", - "requestMsgId": "ed1be69c-da92-4a1d-a5e8-e76bba42f0ba", - "showInput": true - }, - "outputs": [], - "source": [ - "load_experiment(exp.name, config=sqa_config)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "customInput": null, - "originalKey": "d144e372-c212-4454-b507-564c825c1fc5", - "showInput": true - }, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 2 + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "08064d6a-453e-44d7-85dc-896d40b6303a", + "showInput": true + }, + "source": [ + "# Developer API Example on Hartmann6\n", + "\n", + "The Developer API is suitable when the user wants maximal customization of the optimization loop. This tutorial demonstrates optimization of a Hartmann6 function using the `Experiment` construct. In this example, trials will be evaluated synchronously." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646323252842, + "executionStopTime": 1646323256492, + "hidden_ranges": [], + "originalKey": "7b98b243-30da-468b-82c7-7e22dbce6b57", + "requestMsgId": "7b98b243-30da-468b-82c7-7e22dbce6b57" + }, + "outputs": [], + "source": [ + "from ax import (\n", + " ChoiceParameter,\n", + " ComparisonOp,\n", + " Experiment,\n", + " FixedParameter,\n", + " Metric,\n", + " Objective,\n", + " OptimizationConfig,\n", + " OrderConstraint,\n", + " OutcomeConstraint,\n", + " ParameterType,\n", + " RangeParameter,\n", + " SearchSpace,\n", + " SumConstraint,\n", + ")\n", + "from ax.modelbridge.registry import Models\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "\n", + "init_notebook_plotting()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "f522bb04-8372-4647-8c90-cffb8a664be3", + "showInput": true + }, + "source": [ + "## 1. Create Search Space\n", + "\n", + "First, we define a search space, which defines the type and allowed range for the parameters." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646323256533, + "executionStopTime": 1646323256546, + "originalKey": "9b782d53-f9e2-4b13-a8ba-b7941aba802e", + "requestMsgId": "9b782d53-f9e2-4b13-a8ba-b7941aba802e" + }, + "outputs": [], + "source": [ + "from ax.metrics.l2norm import L2NormMetric\n", + "from ax.metrics.hartmann6 import Hartmann6Metric\n", + "\n", + "\n", + "hartmann_search_space = SearchSpace(\n", + " parameters=[\n", + " RangeParameter(\n", + " name=f\"x{i}\", parameter_type=ParameterType.FLOAT, lower=0.0, upper=1.0\n", + " )\n", + " for i in range(6)\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "9e0c312c-e290-4e7b-bf9c-45bd5c360c25", + "showInput": false + }, + "source": [ + "Note that there are two other parameter classes, FixedParameter and ChoiceParameter. Although we won't use these in this example, you can create them as follows.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646323256562, + "executionStopTime": 1646323256584, + "hidden_ranges": [], + "originalKey": "e29cbb8f-9045-4d9c-8a57-aeff1cd91da6", + "requestMsgId": "e29cbb8f-9045-4d9c-8a57-aeff1cd91da6", + "showInput": true + }, + "outputs": [], + "source": [ + "choice_param = ChoiceParameter(\n", + " name=\"choice\", values=[\"foo\", \"bar\"], parameter_type=ParameterType.STRING\n", + ")\n", + "fixed_param = FixedParameter(\n", + " name=\"fixed\", value=[True], parameter_type=ParameterType.BOOL\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "75b46af0-9739-46a6-9b95-21c8e2e9e22a", + "showInput": false + }, + "source": [ + "Sum constraints enforce that the sum of a set of parameters is greater or less than some bound, and order constraints enforce that one parameter is smaller than the other. We won't use these either, but see two examples below.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646323256616, + "executionStopTime": 1646323256621, + "hidden_ranges": [], + "originalKey": "b782e8cf-c11c-4f4e-a416-2577a56b4100", + "requestMsgId": "b782e8cf-c11c-4f4e-a416-2577a56b4100", + "showInput": true + }, + "outputs": [], + "source": [ + "sum_constraint = SumConstraint(\n", + " parameters=[\n", + " hartmann_search_space.parameters[\"x0\"],\n", + " hartmann_search_space.parameters[\"x1\"],\n", + " ],\n", + " is_upper_bound=True,\n", + " bound=5.0,\n", + ")\n", + "\n", + "order_constraint = OrderConstraint(\n", + " lower_parameter=hartmann_search_space.parameters[\"x0\"],\n", + " upper_parameter=hartmann_search_space.parameters[\"x1\"],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "7bf887e2-2b02-4237-ba5e-6fa8beaa85fb", + "showInput": false + }, + "source": [ + "## 2. Create Optimization Config\n", + "\n", + "Second, we define the `optimization_config` with an `objective` and `outcome_constraints`.\n", + "\n", + "When doing the optimization, we will find points that minimize the objective while obeying the constraints (which in this case means `l2norm < 1.25`).\n", + "\n", + "Note: we are using `Hartmann6Metric` and `L2NormMetric` here, which have built in evaluation functions for testing. For creating your own cutom metrics, see [8. Defining custom metrics](#8.-Defining-custom-metrics)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646323256629, + "executionStopTime": 1646323256633, + "hidden_ranges": [], + "originalKey": "d0e2b580-bfb5-4a73-8db1-34a3c43c3ef2", + "requestMsgId": "d0e2b580-bfb5-4a73-8db1-34a3c43c3ef2" + }, + "outputs": [], + "source": [ + "param_names = [f\"x{i}\" for i in range(6)]\n", + "optimization_config = OptimizationConfig(\n", + " objective=Objective(\n", + " metric=Hartmann6Metric(name=\"hartmann6\", param_names=param_names),\n", + " minimize=True,\n", + " ),\n", + " outcome_constraints=[\n", + " OutcomeConstraint(\n", + " metric=L2NormMetric(name=\"l2norm\", param_names=param_names, noise_sd=0.2),\n", + " op=ComparisonOp.LEQ,\n", + " bound=1.25,\n", + " relative=False,\n", + " )\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "customInput": null, + "hidden_ranges": [], + "originalKey": "ed80a5e4-4786-4961-979e-22a295bfa7f0", + "showInput": false + }, + "source": [ + "## 3. Define a Runner\n", + "Before an experiment can collect data, it must have a Runner attached. A runner handles the deployment of trials. A trial must be \"run\" before it can be evaluated.\n", + "\n", + "Here, we have a dummy runner that does nothing. In practice, a runner might be in charge of pushing an experiment to production.\n", + "\n", + "The only method that needs to be defined for runner subclasses is run, which performs any necessary deployment logic, and returns a dictionary of resulting metadata. This metadata can later be accessed through the trial's `run_metadata` property." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646323256641, + "executionStopTime": 1646323256645, + "hidden_ranges": [], + "originalKey": "c9862804-4c0c-4691-be2c-5cb0eb778460", + "requestMsgId": "c9862804-4c0c-4691-be2c-5cb0eb778460", + "showInput": true + }, + "outputs": [], + "source": [ + "from ax import Runner\n", + "\n", + "\n", + "class MyRunner(Runner):\n", + " def run(self, trial):\n", + " trial_metadata = {\"name\": str(trial.index)}\n", + " return trial_metadata" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "customInput": null, + "hidden_ranges": [], + "originalKey": "131ab2a9-e2c7-4752-99a3-547c7dbe42ec", + "showInput": false + }, + "source": [ + "## 4. Create Experiment\n", + "Next, we make an `Experiment` with our search space, runner, and optimization config." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646323256653, + "executionStopTime": 1646323256658, + "hidden_ranges": [], + "originalKey": "18ce7d69-d556-48f5-9945-c75bedb362bb", + "requestMsgId": "18ce7d69-d556-48f5-9945-c75bedb362bb", + "showInput": true + }, + "outputs": [], + "source": [ + "exp = Experiment(\n", + " name=\"test_hartmann\",\n", + " search_space=hartmann_search_space,\n", + " optimization_config=optimization_config,\n", + " runner=MyRunner(),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "8a04eba9-97f2-45f7-8b10-7216fe9c0101", + "showInput": true + }, + "source": [ + "## 5. Perform Optimization\n", + "\n", + "Run the optimization using the settings defined on the experiment. We will create 5 random sobol points for exploration followed by 15 points generated using the GPEI optimizer.\n", + "\n", + "Instead of a member of the `Models` enum to produce generator runs, users can leverage a `GenerationStrategy`. See the [Generation Strategy Tutorial](https://ax.dev/tutorials/generation_strategy.html) for more info." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646323256665, + "executionStopTime": 1646323714923, + "hidden_ranges": [], + "originalKey": "b48e26da-57e7-4b81-baf0-122a71f0bb72", + "requestMsgId": "b48e26da-57e7-4b81-baf0-122a71f0bb72" + }, + "outputs": [], + "source": [ + "from ax.modelbridge.registry import Models\n", + "\n", + "NUM_SOBOL_TRIALS = 5\n", + "NUM_BOTORCH_TRIALS = 15\n", + "\n", + "print(f\"Running Sobol initialization trials...\")\n", + "sobol = Models.SOBOL(search_space=exp.search_space)\n", + "\n", + "for i in range(NUM_SOBOL_TRIALS):\n", + " # Produce a GeneratorRun from the model, which contains proposed arm(s) and other metadata\n", + " generator_run = sobol.gen(n=1)\n", + " # Add generator run to a trial to make it part of the experiment and evaluate arm(s) in it\n", + " trial = exp.new_trial(generator_run=generator_run)\n", + " # Start trial run to evaluate arm(s) in the trial\n", + " trial.run()\n", + " # Mark trial as completed to record when a trial run is completed\n", + " # and enable fetching of data for metrics on the experiment\n", + " # (by default, trials must be completed before metrics can fetch their data,\n", + " # unless a metric is explicitly configured otherwise)\n", + " trial.mark_completed()\n", + "\n", + "for i in range(NUM_BOTORCH_TRIALS):\n", + " print(\n", + " f\"Running BO trial {i + NUM_SOBOL_TRIALS + 1}/{NUM_SOBOL_TRIALS + NUM_BOTORCH_TRIALS}...\"\n", + " )\n", + " # Reinitialize GP+EI model at each step with updated data.\n", + " gpei = Models.BOTORCH_MODULAR(experiment=exp, data=exp.fetch_data())\n", + " generator_run = gpei.gen(n=1)\n", + " trial = exp.new_trial(generator_run=generator_run)\n", + " trial.run()\n", + " trial.mark_completed()\n", + "\n", + "print(\"Done!\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "f503e648-e3f2-419f-a60e-5bfcbc6775bd", + "showInput": true + }, + "source": [ + "## 6. Inspect trials' data\n", + "\n", + "Now we can inspect the `Experiment`'s data by calling `fetch_data()`, which retrieves evaluation data for all trials of the experiment.\n", + "\n", + "To fetch trial data, we need to run it and mark it completed. For most metrics in Ax, data is only available once the status of the trial is `COMPLETED`, since in real-worlds scenarios, metrics can typically only be fetched after the trial finished running.\n", + "\n", + "NOTE: Metrics classes may implement the `is_available_while_running` method. When this method returns `True`, data is available when trials are either `RUNNING` or `COMPLETED`. This can be used to obtain intermediate results from A/B test trials and other online experiments, or when metric values are available immediately, like in the case of synthetic problem metrics.\n", + "\n", + "We can also use the `fetch_trials_data` function to get evaluation data for a specific trials in the experiment, like so:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646323714950, + "executionStopTime": 1646323715210, + "hidden_ranges": [], + "originalKey": "65113ac3-956a-4fcc-abf7-a9d45f8ecb72", + "requestMsgId": "65113ac3-956a-4fcc-abf7-a9d45f8ecb72" + }, + "outputs": [], + "source": [ + "trial_data = exp.fetch_trials_data([NUM_SOBOL_TRIALS + NUM_BOTORCH_TRIALS - 1])\n", + "trial_data.df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "customInput": null, + "hidden_ranges": [], + "originalKey": "74fa0cc5-075c-4b34-98b9-cbf74ad5bb26", + "showInput": true + }, + "source": [ + "The below call to `exp.fetch_data()` also attaches data to the last trial, which because of the way we looped through Botorch trials in [5. Perform Optimization](5.-Perform-Optimization), would otherwise not have data attached. This is necessary to get `objective_means` in [7. Plot results](7.-Plot-results)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646323715232, + "executionStopTime": 1646323715950, + "hidden_ranges": [], + "originalKey": "88fb1408-0965-48f9-a211-140ea57f46a6", + "requestMsgId": "88fb1408-0965-48f9-a211-140ea57f46a6", + "showInput": true + }, + "outputs": [], + "source": [ + "exp.fetch_data().df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "940865f9-af61-4668-aea0-b19ed5c5497d", + "showInput": false + }, + "source": [ + "## 7. Plot results\n", + "Now we can plot the results of our optimization:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646323715983, + "executionStopTime": 1646323716634, + "hidden_ranges": [], + "originalKey": "5a4d2c4d-756a-492a-8938-d080a499b66c", + "requestMsgId": "5a4d2c4d-756a-492a-8938-d080a499b66c" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "from ax.plot.trace import optimization_trace_single_method\n", + "\n", + "# `plot_single_method` expects a 2-d array of means, because it expects to average means from multiple\n", + "# optimization runs, so we wrap out best objectives array in another array.\n", + "objective_means = np.array([[trial.objective_mean for trial in exp.trials.values()]])\n", + "best_objective_plot = optimization_trace_single_method(\n", + " y=np.minimum.accumulate(objective_means, axis=1),\n", + " optimum=-3.32237, # Known minimum objective for Hartmann6 function.\n", + ")\n", + "render(best_objective_plot)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "customInput": null, + "hidden_ranges": [], + "originalKey": "934db3fd-1dce-421b-8228-820025f3821a", + "showInput": true + }, + "source": [ + "## 8. Defining custom metrics\n", + "In order to perform an optimization, we also need to define an optimization config for the experiment. An optimization config is composed of an objective metric to be minimized or maximized in the experiment, and optionally a set of outcome constraints that place restrictions on how other metrics can be moved by the experiment.\n", + "\n", + "In order to define an objective or outcome constraint, we first need to subclass Metric. Metrics are used to evaluate trials, which are individual steps of the experiment sequence. Each trial contains one or more arms for which we will collect data at the same time.\n", + "\n", + "Our custom metric(s) will determine how, given a trial, to compute the mean and SEM of each of the trial's arms.\n", + "\n", + "The only method that needs to be defined for most metric subclasses is `fetch_trial_data`, which defines how a single trial is evaluated, and returns a pandas dataframe.\n", + " \n", + "The `is_available_while_running` method is optional and returns a boolean, specifying whether the trial data can be fetched before the trial is complete. See [6. Inspect trials' data](6.-Inspect-trials'-data) for more details." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646323716638, + "executionStopTime": 1646323716697, + "hidden_ranges": [], + "originalKey": "7ec75ae4-1d7f-4ff4-8d9d-b77fdf28ccfe", + "requestMsgId": "7ec75ae4-1d7f-4ff4-8d9d-b77fdf28ccfe", + "showInput": true + }, + "outputs": [], + "source": [ + "from ax import Data\n", + "import pandas as pd\n", + "\n", + "\n", + "class BoothMetric(Metric):\n", + " def fetch_trial_data(self, trial):\n", + " records = []\n", + " for arm_name, arm in trial.arms_by_name.items():\n", + " params = arm.parameters\n", + " records.append(\n", + " {\n", + " \"arm_name\": arm_name,\n", + " \"metric_name\": self.name,\n", + " \"trial_index\": trial.index,\n", + " # in practice, the mean and sem will be looked up based on trial metadata\n", + " # but for this tutorial we will calculate them\n", + " \"mean\": (params[\"x1\"] + 2 * params[\"x2\"] - 7) ** 2\n", + " + (2 * params[\"x1\"] + params[\"x2\"] - 5) ** 2,\n", + " \"sem\": 0.0,\n", + " }\n", + " )\n", + " return Data(df=pd.DataFrame.from_records(records))\n", + "\n", + " def is_available_while_running(self) -> bool:\n", + " return True" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "customInput": null, + "hidden_ranges": [], + "originalKey": "92fcddf9-9d86-45cd-b9fb-a0a7acdb267d", + "showInput": false + }, + "source": [ + "## 9. Save to JSON or SQL\n", + "At any point, we can also save our experiment to a JSON file. To ensure that our custom metrics and runner are saved properly, we first need to register them." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646324682655, + "executionStopTime": 1646324682796, + "hidden_ranges": [], + "originalKey": "f57e11d7-cc68-4323-a0cd-ff6f464dcd97", + "requestMsgId": "f57e11d7-cc68-4323-a0cd-ff6f464dcd97", + "showInput": true + }, + "outputs": [], + "source": [ + "from ax.storage.registry_bundle import RegistryBundle\n", + "\n", + "bundle = RegistryBundle(\n", + " metric_clss={BoothMetric: None, L2NormMetric: None, Hartmann6Metric: None},\n", + " runner_clss={MyRunner: None},\n", + ")\n", + "\n", + "from ax.storage.json_store.load import load_experiment\n", + "from ax.storage.json_store.save import save_experiment\n", + "\n", + "save_experiment(exp, \"experiment.json\", encoder_registry=bundle.encoder_registry)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646324718153, + "executionStopTime": 1646324720104, + "hidden_ranges": [], + "originalKey": "e19ec7fb-f266-417e-ad17-5662a53a9ae3", + "requestMsgId": "e19ec7fb-f266-417e-ad17-5662a53a9ae3", + "showInput": true + }, + "outputs": [], + "source": [ + "loaded_experiment = load_experiment(\n", + " \"experiment.json\", decoder_registry=bundle.decoder_registry\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "dc1f6800-437e-45de-85d3-276ae5f8ca99", + "showInput": false + }, + "source": [ + "To save our experiment to SQL, we must first specify a connection to a database and create all necessary tables.\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646324834810, + "executionStopTime": 1646324835293, + "hidden_ranges": [], + "originalKey": "a0376ade-9a26-430b-b08b-0b93e890539c", + "requestMsgId": "a0376ade-9a26-430b-b08b-0b93e890539c", + "showInput": true + }, + "outputs": [], + "source": [ + "from ax.storage.sqa_store.db import (\n", + " init_engine_and_session_factory,\n", + " get_engine,\n", + " create_all_tables,\n", + ")\n", + "from ax.storage.sqa_store.load import load_experiment\n", + "from ax.storage.sqa_store.save import save_experiment\n", + "\n", + "init_engine_and_session_factory(url=\"sqlite:///foo3.db\")\n", + "\n", + "engine = get_engine()\n", + "create_all_tables(engine)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646324891053, + "executionStopTime": 1646324897271, + "hidden_ranges": [], + "originalKey": "82f58ead-8f0d-44cf-9fa8-dd67f7c8c8df", + "requestMsgId": "82f58ead-8f0d-44cf-9fa8-dd67f7c8c8df", + "showInput": true + }, + "outputs": [], + "source": [ + "from ax.storage.sqa_store.sqa_config import SQAConfig\n", + "\n", + "exp.name = \"new\"\n", + "\n", + "sqa_config = SQAConfig(\n", + " json_encoder_registry=bundle.encoder_registry,\n", + " json_decoder_registry=bundle.decoder_registry,\n", + " metric_registry=bundle.metric_registry,\n", + " runner_registry=bundle.runner_registry,\n", + ")\n", + "\n", + "save_experiment(exp, config=sqa_config)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1646324904964, + "executionStopTime": 1646324906901, + "hidden_ranges": [], + "originalKey": "ed1be69c-da92-4a1d-a5e8-e76bba42f0ba", + "requestMsgId": "ed1be69c-da92-4a1d-a5e8-e76bba42f0ba", + "showInput": true + }, + "outputs": [], + "source": [ + "load_experiment(exp.name, config=sqa_config)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "originalKey": "d144e372-c212-4454-b507-564c825c1fc5", + "showInput": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/gpei_hartmann_loop.ipynb b/tutorials/gpei_hartmann_loop.ipynb index 7f411d35204..119970e1788 100644 --- a/tutorials/gpei_hartmann_loop.ipynb +++ b/tutorials/gpei_hartmann_loop.ipynb @@ -1,1032 +1,236 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Loop API Example on Hartmann6\n", - "\n", - "The loop API is the most lightweight way to do optimization in Ax. The user makes one call to `optimize`, which performs all of the optimization under the hood and returns the optimized parameters.\n", - "\n", - "For more customizability of the optimization procedure, consider the Service or Developer API." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 05-07 12:56:33] ipy_plotting: Injecting Plotly library into cell. Do not overwrite or delete cell.\n" - ] - } - ], - "source": [ - "import numpy as np\n", - "\n", - "from ax.plot.contour import plot_contour\n", - "from ax.plot.trace import optimization_trace_single_method\n", - "from ax.service.managed_loop import optimize\n", - "from ax.metrics.branin import branin\n", - "from ax.utils.measurement.synthetic_functions import hartmann6\n", - "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", - "\n", - "init_notebook_plotting()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Define evaluation function\n", - "\n", - "First, we define an evaluation function that is able to compute all the metrics needed for this experiment. This function needs to accept a set of parameter values and can also accept a weight. It should produce a dictionary of metric names to tuples of mean and standard error for those metrics." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": true - }, - "outputs": [], - "source": [ - "def hartmann_evaluation_function(parameterization):\n", - " x = np.array([parameterization.get(f\"x{i+1}\") for i in range(6)])\n", - " # In our case, standard error is 0, since we are computing a synthetic function.\n", - " return {\"hartmann6\": (hartmann6(x), 0.0), \"l2norm\": (np.sqrt((x**2).sum()), 0.0)}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If there is only one metric in the experiment – the objective – then evaluation function can return a single tuple of mean and SEM, in which case Ax will assume that evaluation corresponds to the objective. It can also return only the mean as a float, in which case Ax will treat SEM as unknown and use a model that can infer it. For more details on evaluation function, refer to the \"Trial Evaluation\" section in the docs." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Run optimization\n", - "The setup for the loop is fully compatible with JSON. The optimization algorithm is selected based on the properties of the problem search space." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 05-07 12:56:33] ax.modelbridge.dispatch_utils: Using Bayesian Optimization generation strategy. Iterations after 6 will take longer to generate due to model-fitting.\n", - "[INFO 05-07 12:56:33] ax.service.managed_loop: Started full optimization with 30 steps.\n", - "[INFO 05-07 12:56:33] ax.service.managed_loop: Running optimization trial 1...\n", - "[INFO 05-07 12:56:33] ax.service.managed_loop: Running optimization trial 2...\n", - "[INFO 05-07 12:56:33] ax.service.managed_loop: Running optimization trial 3...\n", - "[INFO 05-07 12:56:33] ax.service.managed_loop: Running optimization trial 4...\n", - "[INFO 05-07 12:56:33] ax.service.managed_loop: Running optimization trial 5...\n", - "[INFO 05-07 12:56:33] ax.service.managed_loop: Running optimization trial 6...\n", - "[INFO 05-07 12:56:33] ax.service.managed_loop: Running optimization trial 7...\n", - "[INFO 05-07 12:56:43] ax.service.managed_loop: Running optimization trial 8...\n", - "[INFO 05-07 12:56:54] ax.service.managed_loop: Running optimization trial 9...\n", - "[INFO 05-07 12:57:06] ax.service.managed_loop: Running optimization trial 10...\n", - "[INFO 05-07 12:57:19] ax.service.managed_loop: Running optimization trial 11...\n", - "[INFO 05-07 12:57:30] ax.service.managed_loop: Running optimization trial 12...\n", - "[INFO 05-07 12:57:45] ax.service.managed_loop: Running optimization trial 13...\n", - "[INFO 05-07 12:57:59] ax.service.managed_loop: Running optimization trial 14...\n", - "[INFO 05-07 12:58:12] ax.service.managed_loop: Running optimization trial 15...\n", - "[INFO 05-07 12:58:24] ax.service.managed_loop: Running optimization trial 16...\n", - "[INFO 05-07 12:58:38] ax.service.managed_loop: Running optimization trial 17...\n", - "[INFO 05-07 12:58:54] ax.service.managed_loop: Running optimization trial 18...\n", - "[INFO 05-07 12:59:14] ax.service.managed_loop: Running optimization trial 19...\n", - "[INFO 05-07 12:59:34] ax.service.managed_loop: Running optimization trial 20...\n", - "[INFO 05-07 12:59:53] ax.service.managed_loop: Running optimization trial 21...\n", - "[INFO 05-07 13:00:05] ax.service.managed_loop: Running optimization trial 22...\n", - "[INFO 05-07 13:00:20] ax.service.managed_loop: Running optimization trial 23...\n", - "[INFO 05-07 13:00:38] ax.service.managed_loop: Running optimization trial 24...\n", - "[INFO 05-07 13:00:51] ax.service.managed_loop: Running optimization trial 25...\n", - "[INFO 05-07 13:01:07] ax.service.managed_loop: Running optimization trial 26...\n", - "[INFO 05-07 13:01:23] ax.service.managed_loop: Running optimization trial 27...\n", - "[INFO 05-07 13:01:47] ax.service.managed_loop: Running optimization trial 28...\n", - "[INFO 05-07 13:02:05] ax.service.managed_loop: Running optimization trial 29...\n", - "[INFO 05-07 13:02:13] ax.service.managed_loop: Running optimization trial 30...\n" - ] - } - ], - "source": [ - "best_parameters, values, experiment, model = optimize(\n", - " parameters=[\n", - " {\n", - " \"name\": \"x1\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " \"value_type\": \"float\", # Optional, defaults to inference from type of \"bounds\".\n", - " \"log_scale\": False, # Optional, defaults to False.\n", - " },\n", - " {\n", - " \"name\": \"x2\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " },\n", - " {\n", - " \"name\": \"x3\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " },\n", - " {\n", - " \"name\": \"x4\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " },\n", - " {\n", - " \"name\": \"x5\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " },\n", - " {\n", - " \"name\": \"x6\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " },\n", - " ],\n", - " experiment_name=\"test\",\n", - " objective_name=\"hartmann6\",\n", - " evaluation_function=hartmann_evaluation_function,\n", - " minimize=True, # Optional, defaults to False.\n", - " parameter_constraints=[\"x1 + x2 <= 20\"], # Optional.\n", - " outcome_constraints=[\"l2norm <= 1.25\"], # Optional.\n", - " total_trials=30, # Optional.\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "And we can introspect optimization results:" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'x1': 0.4216336684550585,\n", - " 'x2': 0.9077372149314975,\n", - " 'x3': 0.3153028268916916,\n", - " 'x4': 0.5733001784328788,\n", - " 'x5': 0.2680636783388968,\n", - " 'x6': 0.06285915210168797}" - ] - }, - "execution_count": 4, - "metadata": { - "bento_obj_id": "139701375840904" - }, - "output_type": "execute_result" - } - ], - "source": [ - "best_parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'l2norm': 1.2270530489376026, 'hartmann6': -3.0942722656221813}" - ] - }, - "execution_count": 5, - "metadata": { - "bento_obj_id": "139701168862336" - }, - "output_type": "execute_result" - } - ], - "source": [ - "means, covariances = values\n", - "means" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For comparison, minimum of Hartmann6 is:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "-3.32237" - ] - }, - "execution_count": 6, - "metadata": { - "bento_obj_id": "139701419551552" - }, - "output_type": "execute_result" - } - ], - "source": [ - "hartmann6.fmin" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Plot results\n", - "Here we arbitrarily select \"x1\" and \"x2\" as the two parameters to plot for both metrics, \"hartmann6\" and \"l2norm\"." - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "render(plot_contour(model=model, param_x=\"x1\", param_y=\"x2\", metric_name=\"hartmann6\"))" - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "render(plot_contour(model=model, param_x=\"x1\", param_y=\"x2\", metric_name=\"l2norm\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We also plot optimization trace, which shows best hartmann6 objective value seen by each iteration of the optimization:" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "# `plot_single_method` expects a 2-d array of means, because it expects to average means from multiple\n", - "# optimization runs, so we wrap out best objectives array in another array.\n", - "best_objectives = np.array(\n", - " [[trial.objective_mean for trial in experiment.trials.values()]]\n", - ")\n", - "best_objective_plot = optimization_trace_single_method(\n", - " y=np.minimum.accumulate(best_objectives, axis=1),\n", - " optimum=hartmann6.fmin,\n", - " title=\"Model performance vs. # of iterations\",\n", - " ylabel=\"Hartmann6\",\n", - ")\n", - "render(best_objective_plot)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - } + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Loop API Example on Hartmann6\n", + "\n", + "The loop API is the most lightweight way to do optimization in Ax. The user makes one call to `optimize`, which performs all of the optimization under the hood and returns the optimized parameters.\n", + "\n", + "For more customizability of the optimization procedure, consider the Service or Developer API." + ] }, - "nbformat": 4, - "nbformat_minor": 2 + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from ax.metrics.branin import branin\n", + "\n", + "from ax.plot.contour import plot_contour\n", + "from ax.plot.trace import optimization_trace_single_method\n", + "from ax.service.managed_loop import optimize\n", + "from ax.utils.measurement.synthetic_functions import hartmann6\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "\n", + "init_notebook_plotting()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Define evaluation function\n", + "\n", + "First, we define an evaluation function that is able to compute all the metrics needed for this experiment. This function needs to accept a set of parameter values and can also accept a weight. It should produce a dictionary of metric names to tuples of mean and standard error for those metrics." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def hartmann_evaluation_function(parameterization):\n", + " x = np.array([parameterization.get(f\"x{i+1}\") for i in range(6)])\n", + " # In our case, standard error is 0, since we are computing a synthetic function.\n", + " return {\"hartmann6\": (hartmann6(x), 0.0), \"l2norm\": (np.sqrt((x**2).sum()), 0.0)}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "If there is only one metric in the experiment – the objective – then evaluation function can return a single tuple of mean and SEM, in which case Ax will assume that evaluation corresponds to the objective. It can also return only the mean as a float, in which case Ax will treat SEM as unknown and use a model that can infer it. For more details on evaluation function, refer to the \"Trial Evaluation\" section in the docs." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Run optimization\n", + "The setup for the loop is fully compatible with JSON. The optimization algorithm is selected based on the properties of the problem search space." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_parameters, values, experiment, model = optimize(\n", + " parameters=[\n", + " {\n", + " \"name\": \"x1\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " \"value_type\": \"float\", # Optional, defaults to inference from type of \"bounds\".\n", + " \"log_scale\": False, # Optional, defaults to False.\n", + " },\n", + " {\n", + " \"name\": \"x2\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " },\n", + " {\n", + " \"name\": \"x3\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " },\n", + " {\n", + " \"name\": \"x4\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " },\n", + " {\n", + " \"name\": \"x5\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " },\n", + " {\n", + " \"name\": \"x6\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " },\n", + " ],\n", + " experiment_name=\"test\",\n", + " objective_name=\"hartmann6\",\n", + " evaluation_function=hartmann_evaluation_function,\n", + " minimize=True, # Optional, defaults to False.\n", + " parameter_constraints=[\"x1 + x2 <= 20\"], # Optional.\n", + " outcome_constraints=[\"l2norm <= 1.25\"], # Optional.\n", + " total_trials=30, # Optional.\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "And we can introspect optimization results:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_parameters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "means, covariances = values\n", + "means" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For comparison, minimum of Hartmann6 is:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "hartmann6.fmin" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Plot results\n", + "Here we arbitrarily select \"x1\" and \"x2\" as the two parameters to plot for both metrics, \"hartmann6\" and \"l2norm\"." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "render(plot_contour(model=model, param_x=\"x1\", param_y=\"x2\", metric_name=\"hartmann6\"))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "render(plot_contour(model=model, param_x=\"x1\", param_y=\"x2\", metric_name=\"l2norm\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We also plot optimization trace, which shows best hartmann6 objective value seen by each iteration of the optimization:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# `plot_single_method` expects a 2-d array of means, because it expects to average means from multiple\n", + "# optimization runs, so we wrap out best objectives array in another array.\n", + "best_objectives = np.array(\n", + " [[trial.objective_mean for trial in experiment.trials.values()]]\n", + ")\n", + "best_objective_plot = optimization_trace_single_method(\n", + " y=np.minimum.accumulate(best_objectives, axis=1),\n", + " optimum=hartmann6.fmin,\n", + " title=\"Model performance vs. # of iterations\",\n", + " ylabel=\"Hartmann6\",\n", + ")\n", + "render(best_objective_plot)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/gpei_hartmann_service.ipynb b/tutorials/gpei_hartmann_service.ipynb index 5b7794ebce5..bdde8d91533 100644 --- a/tutorials/gpei_hartmann_service.ipynb +++ b/tutorials/gpei_hartmann_service.ipynb @@ -1,483 +1,483 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Service API Example on Hartmann6\n", - "\n", - "The Ax Service API is designed to allow the user to control scheduling of trials and data computation while having an easy to use interface with Ax.\n", - "\n", - "The user iteratively:\n", - "- Queries Ax for candidates\n", - "- Schedules / deploys them however they choose\n", - "- Computes data and logs to Ax\n", - "- Repeat" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from ax.service.ax_client import AxClient, ObjectiveProperties\n", - "from ax.utils.measurement.synthetic_functions import hartmann6\n", - "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", - "\n", - "init_notebook_plotting()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 1. Initialize client\n", - "\n", - "Create a client object to interface with Ax APIs. By default this runs locally without storage." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ax_client = AxClient()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 2. Set up experiment\n", - "An experiment consists of a **search space** (parameters and parameter constraints) and **optimization configuration** (objectives and outcome constraints). Note that:\n", - "- Only `parameters`, and `objectives` arguments are required.\n", - "- Dictionaries in `parameters` have the following required keys: \"name\" - parameter name, \"type\" - parameter type (\"range\", \"choice\" or \"fixed\"), \"bounds\" for range parameters, \"values\" for choice parameters, and \"value\" for fixed parameters.\n", - "- Dictionaries in `parameters` can optionally include \"value_type\" (\"int\", \"float\", \"bool\" or \"str\"), \"log_scale\" flag for range parameters, and \"is_ordered\" flag for choice parameters.\n", - "- `parameter_constraints` should be a list of strings of form \"p1 >= p2\" or \"p1 + p2 <= some_bound\".\n", - "- `outcome_constraints` should be a list of strings of form \"constrained_metric <= some_bound\"." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ax_client.create_experiment(\n", - " name=\"hartmann_test_experiment\",\n", - " parameters=[\n", - " {\n", - " \"name\": \"x1\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " \"value_type\": \"float\", # Optional, defaults to inference from type of \"bounds\".\n", - " \"log_scale\": False, # Optional, defaults to False.\n", - " },\n", - " {\n", - " \"name\": \"x2\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " },\n", - " {\n", - " \"name\": \"x3\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " },\n", - " {\n", - " \"name\": \"x4\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " },\n", - " {\n", - " \"name\": \"x5\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " },\n", - " {\n", - " \"name\": \"x6\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " },\n", - " ],\n", - " objectives={\"hartmann6\": ObjectiveProperties(minimize=True)},\n", - " parameter_constraints=[\"x1 + x2 <= 2.0\"], # Optional.\n", - " outcome_constraints=[\"l2norm <= 1.25\"], # Optional.\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 3. Define how to evaluate trials\n", - "When using Ax a service, evaluation of parameterizations suggested by Ax is done either locally or, more commonly, using an external scheduler. Below is a dummy evaluation function that outputs data for two metrics \"hartmann6\" and \"l2norm\". Note that all returned metrics correspond to either the `objectives` set on experiment creation or the metric names mentioned in `outcome_constraints`." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "\n", - "\n", - "def evaluate(parameters):\n", - " x = np.array([parameters.get(f\"x{i+1}\") for i in range(6)])\n", - " # In our case, standard error is 0, since we are computing a synthetic function.\n", - " return {\"hartmann6\": (hartmann6(x), 0.0), \"l2norm\": (np.sqrt((x**2).sum()), 0.0)}" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Result of the evaluation should generally be a mapping of the format: `{metric_name -> (mean, SEM)}`. If there is only one metric in the experiment – the objective – then evaluation function can return a single tuple of mean and SEM, in which case Ax will assume that evaluation corresponds to the objective. _It can also return only the mean as a float, in which case Ax will treat SEM as unknown and use a model that can infer it._ \n", - "\n", - "For more details on evaluation function, refer to the \"Trial Evaluation\" section in the Ax docs at [ax.dev](https://ax.dev/)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 4. Run optimization loop\n", - "With the experiment set up, we can start the optimization loop.\n", - "\n", - "At each step, the user queries the client for a new trial then submits the evaluation of that trial back to the client.\n", - "\n", - "Note that Ax auto-selects an appropriate optimization algorithm based on the search space. For more advance use cases that require a specific optimization algorithm, pass a `generation_strategy` argument into the `AxClient` constructor. Note that when Bayesian Optimization is used, generating new trials may take a few minutes." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "for i in range(25):\n", - " parameters, trial_index = ax_client.get_next_trial()\n", - " # Local evaluation here can be replaced with deployment to external system.\n", - " ax_client.complete_trial(trial_index=trial_index, raw_data=evaluate(parameters))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### How many trials can run in parallel?\n", - "By default, Ax restricts number of trials that can run in parallel for some optimization stages, in order to improve the optimization performance and reduce the number of trials that the optimization will require. To check the maximum parallelism for each optimization stage:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ax_client.get_max_parallelism()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "The output of this function is a list of tuples of form (number of trials, max parallelism), so the example above means \"the max parallelism is 12 for the first 12 trials and 3 for all subsequent trials.\" This is because the first 12 trials are produced quasi-randomly and can all be evaluated at once, and subsequent trials are produced via Bayesian optimization, which converges on optimal point in fewer trials when parallelism is limited. `MaxParallelismReachedException` indicates that the parallelism limit has been reached –– refer to the 'Service API Exceptions Meaning and Handling' section at the end of the tutorial for handling." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### How to view all existing trials during optimization?" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ax_client.generation_strategy.trials_as_df" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 5. Retrieve best parameters\n", - "\n", - "Once it's complete, we can access the best parameters found, as well as the corresponding metric values." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_parameters, values = ax_client.get_best_parameters()\n", - "best_parameters" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "means, covariances = values\n", - "means" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "For comparison, Hartmann6 minimum:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "hartmann6.fmin" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 6. Plot the response surface and optimization trace\n", - "Here we arbitrarily select \"x1\" and \"x2\" as the two parameters to plot for both metrics, \"hartmann6\" and \"l2norm\"." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "render(ax_client.get_contour_plot())" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also retrieve a contour plot for the other metric, \"l2norm\" –– say, we are interested in seeing the response surface for parameters \"x3\" and \"x4\" for this one." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "render(ax_client.get_contour_plot(param_x=\"x3\", param_y=\"x4\", metric_name=\"l2norm\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Here we plot the optimization trace, showing the progression of finding the point with the optimal objective:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "render(\n", - " ax_client.get_optimization_trace(objective_optimum=hartmann6.fmin)\n", - ") # Objective_optimum is optional." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## 7. Save / reload optimization to JSON / SQL\n", - "We can serialize the state of optimization to JSON and save it to a `.json` file or save it to the SQL backend. For the former:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ax_client.save_to_json_file() # For custom filepath, pass `filepath` argument." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "restored_ax_client = (\n", - " AxClient.load_from_json_file()\n", - ") # For custom filepath, pass `filepath` argument." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "To store state of optimization to an SQL backend, first follow [setup instructions](https://ax.dev/docs/storage.html#sql) on Ax website." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Having set up the SQL backend, pass `DBSettings` to `AxClient` on instantiation (note that `SQLAlchemy` dependency will have to be installed – for installation, refer to [optional dependencies](https://ax.dev/docs/installation.html#optional-dependencies) on Ax website):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from ax.storage.sqa_store.structs import DBSettings\n", - "\n", - "# URL is of the form \"dialect+driver://username:password@host:port/database\".\n", - "db_settings = DBSettings(url=\"sqlite:///foo.db\")\n", - "# Instead of URL, can provide a `creator function`; can specify custom encoders/decoders if necessary.\n", - "new_ax = AxClient(db_settings=db_settings)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "When valid `DBSettings` are passed into `AxClient`, a unique experiment name is a required argument (`name`) to `ax_client.create_experiment`. The **state of the optimization is auto-saved** any time it changes (i.e. a new trial is added or completed, etc). \n", - "\n", - "To reload an optimization state later, instantiate `AxClient` with the same `DBSettings` and use `ax_client.load_experiment_from_database(experiment_name=\"my_experiment\")`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Special Cases" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Evaluation failure**: should any optimization iterations fail during evaluation, `log_trial_failure` will ensure that the same trial is not proposed again." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "_, trial_index = ax_client.get_next_trial()\n", - "ax_client.log_trial_failure(trial_index=trial_index)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Adding custom trials**: should there be need to evaluate a specific parameterization, `attach_trial` will add it to the experiment." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ax_client.attach_trial(\n", - " parameters={\"x1\": 0.9, \"x2\": 0.9, \"x3\": 0.9, \"x4\": 0.9, \"x5\": 0.9, \"x6\": 0.9}\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "**Need to run many trials in parallel**: for optimal results and optimization efficiency, we strongly recommend sequential optimization (generating a few trials, then waiting for them to be completed with evaluation data). However, if your use case needs to dispatch many trials in parallel before they are updated with data and you are running into the *\"All trials for current model have been generated, but not enough data has been observed to fit next model\"* error, instantiate `AxClient` as `AxClient(enforce_sequential_optimization=False)`." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Service API Exceptions Meaning and Handling\n", - "[**`DataRequiredError`**](https://ax.dev/api/exceptions.html#ax.exceptions.core.DataRequiredError): Ax generation strategy needs to be updated with more data to proceed to the next optimization model. When the optimization moves from initialization stage to the Bayesian optimization stage, the underlying BayesOpt model needs sufficient data to train. For optimal results and optimization efficiency (finding the optimal point in the least number of trials), we recommend sequential optimization (generating a few trials, then waiting for them to be completed with evaluation data). Therefore, the correct way to handle this exception is to wait until more trial evaluations complete and log their data via `ax_client.complete_trial(...)`. \n", - "\n", - "However, if there is strong need to generate more trials before more data is available, instantiate `AxClient` as `AxClient(enforce_sequential_optimization=False)`. With this setting, as many trials will be generated from the initialization stage as requested, and the optimization will move to the BayesOpt stage whenever enough trials are completed." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "[**`MaxParallelismReachedException`**](https://ax.dev/api/modelbridge.html#ax.modelbridge.generation_strategy.MaxParallelismReachedException): generation strategy restricts the number of trials that can be ran simultaneously (to encourage sequential optimization), and the parallelism limit has been reached. The correct way to handle this exception is the same as `DataRequiredError` – to wait until more trial evluations complete and log their data via `ax_client.complete_trial(...)`.\n", - " \n", - "In some cases higher parallelism is important, so `enforce_sequential_optimization=False` kwarg to AxClient allows to suppress limiting of parallelism. It's also possible to override the default parallelism setting for all stages of the optimization by passing `choose_generation_strategy_kwargs` to `ax_client.create_experiment`:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ax_client = AxClient()\n", - "ax_client.create_experiment(\n", - " parameters=[\n", - " {\"name\": \"x\", \"type\": \"range\", \"bounds\": [-5.0, 10.0]},\n", - " {\"name\": \"y\", \"type\": \"range\", \"bounds\": [0.0, 15.0]},\n", - " ],\n", - " # Sets max parallelism to 10 for all steps of the generation strategy.\n", - " choose_generation_strategy_kwargs={\"max_parallelism_override\": 10},\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "ax_client.get_max_parallelism() # Max parallelism is now 10 for all stages of the optimization." - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 2 + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Service API Example on Hartmann6\n", + "\n", + "The Ax Service API is designed to allow the user to control scheduling of trials and data computation while having an easy to use interface with Ax.\n", + "\n", + "The user iteratively:\n", + "- Queries Ax for candidates\n", + "- Schedules / deploys them however they choose\n", + "- Computes data and logs to Ax\n", + "- Repeat" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from ax.service.ax_client import AxClient, ObjectiveProperties\n", + "from ax.utils.measurement.synthetic_functions import hartmann6\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "\n", + "init_notebook_plotting()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Initialize client\n", + "\n", + "Create a client object to interface with Ax APIs. By default this runs locally without storage." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax_client = AxClient()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Set up experiment\n", + "An experiment consists of a **search space** (parameters and parameter constraints) and **optimization configuration** (objectives and outcome constraints). Note that:\n", + "- Only `parameters`, and `objectives` arguments are required.\n", + "- Dictionaries in `parameters` have the following required keys: \"name\" - parameter name, \"type\" - parameter type (\"range\", \"choice\" or \"fixed\"), \"bounds\" for range parameters, \"values\" for choice parameters, and \"value\" for fixed parameters.\n", + "- Dictionaries in `parameters` can optionally include \"value_type\" (\"int\", \"float\", \"bool\" or \"str\"), \"log_scale\" flag for range parameters, and \"is_ordered\" flag for choice parameters.\n", + "- `parameter_constraints` should be a list of strings of form \"p1 >= p2\" or \"p1 + p2 <= some_bound\".\n", + "- `outcome_constraints` should be a list of strings of form \"constrained_metric <= some_bound\"." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax_client.create_experiment(\n", + " name=\"hartmann_test_experiment\",\n", + " parameters=[\n", + " {\n", + " \"name\": \"x1\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " \"value_type\": \"float\", # Optional, defaults to inference from type of \"bounds\".\n", + " \"log_scale\": False, # Optional, defaults to False.\n", + " },\n", + " {\n", + " \"name\": \"x2\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " },\n", + " {\n", + " \"name\": \"x3\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " },\n", + " {\n", + " \"name\": \"x4\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " },\n", + " {\n", + " \"name\": \"x5\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " },\n", + " {\n", + " \"name\": \"x6\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " },\n", + " ],\n", + " objectives={\"hartmann6\": ObjectiveProperties(minimize=True)},\n", + " parameter_constraints=[\"x1 + x2 <= 2.0\"], # Optional.\n", + " outcome_constraints=[\"l2norm <= 1.25\"], # Optional.\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Define how to evaluate trials\n", + "When using Ax a service, evaluation of parameterizations suggested by Ax is done either locally or, more commonly, using an external scheduler. Below is a dummy evaluation function that outputs data for two metrics \"hartmann6\" and \"l2norm\". Note that all returned metrics correspond to either the `objectives` set on experiment creation or the metric names mentioned in `outcome_constraints`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "\n", + "def evaluate(parameters):\n", + " x = np.array([parameters.get(f\"x{i+1}\") for i in range(6)])\n", + " # In our case, standard error is 0, since we are computing a synthetic function.\n", + " return {\"hartmann6\": (hartmann6(x), 0.0), \"l2norm\": (np.sqrt((x**2).sum()), 0.0)}" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Result of the evaluation should generally be a mapping of the format: `{metric_name -> (mean, SEM)}`. If there is only one metric in the experiment – the objective – then evaluation function can return a single tuple of mean and SEM, in which case Ax will assume that evaluation corresponds to the objective. _It can also return only the mean as a float, in which case Ax will treat SEM as unknown and use a model that can infer it._ \n", + "\n", + "For more details on evaluation function, refer to the \"Trial Evaluation\" section in the Ax docs at [ax.dev](https://ax.dev/)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Run optimization loop\n", + "With the experiment set up, we can start the optimization loop.\n", + "\n", + "At each step, the user queries the client for a new trial then submits the evaluation of that trial back to the client.\n", + "\n", + "Note that Ax auto-selects an appropriate optimization algorithm based on the search space. For more advance use cases that require a specific optimization algorithm, pass a `generation_strategy` argument into the `AxClient` constructor. Note that when Bayesian Optimization is used, generating new trials may take a few minutes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "for i in range(25):\n", + " parameters, trial_index = ax_client.get_next_trial()\n", + " # Local evaluation here can be replaced with deployment to external system.\n", + " ax_client.complete_trial(trial_index=trial_index, raw_data=evaluate(parameters))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### How many trials can run in parallel?\n", + "By default, Ax restricts number of trials that can run in parallel for some optimization stages, in order to improve the optimization performance and reduce the number of trials that the optimization will require. To check the maximum parallelism for each optimization stage:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax_client.get_max_parallelism()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The output of this function is a list of tuples of form (number of trials, max parallelism), so the example above means \"the max parallelism is 12 for the first 12 trials and 3 for all subsequent trials.\" This is because the first 12 trials are produced quasi-randomly and can all be evaluated at once, and subsequent trials are produced via Bayesian optimization, which converges on optimal point in fewer trials when parallelism is limited. `MaxParallelismReachedException` indicates that the parallelism limit has been reached –– refer to the 'Service API Exceptions Meaning and Handling' section at the end of the tutorial for handling." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### How to view all existing trials during optimization?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax_client.generation_strategy.trials_as_df" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. Retrieve best parameters\n", + "\n", + "Once it's complete, we can access the best parameters found, as well as the corresponding metric values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_parameters, values = ax_client.get_best_parameters()\n", + "best_parameters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "means, covariances = values\n", + "means" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "For comparison, Hartmann6 minimum:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "hartmann6.fmin" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. Plot the response surface and optimization trace\n", + "Here we arbitrarily select \"x1\" and \"x2\" as the two parameters to plot for both metrics, \"hartmann6\" and \"l2norm\"." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "render(ax_client.get_contour_plot())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also retrieve a contour plot for the other metric, \"l2norm\" –– say, we are interested in seeing the response surface for parameters \"x3\" and \"x4\" for this one." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "render(ax_client.get_contour_plot(param_x=\"x3\", param_y=\"x4\", metric_name=\"l2norm\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Here we plot the optimization trace, showing the progression of finding the point with the optimal objective:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "render(\n", + " ax_client.get_optimization_trace(objective_optimum=hartmann6.fmin)\n", + ") # Objective_optimum is optional." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 7. Save / reload optimization to JSON / SQL\n", + "We can serialize the state of optimization to JSON and save it to a `.json` file or save it to the SQL backend. For the former:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax_client.save_to_json_file() # For custom filepath, pass `filepath` argument." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "restored_ax_client = (\n", + " AxClient.load_from_json_file()\n", + ") # For custom filepath, pass `filepath` argument." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To store state of optimization to an SQL backend, first follow [setup instructions](https://ax.dev/docs/storage.html#sql) on Ax website." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Having set up the SQL backend, pass `DBSettings` to `AxClient` on instantiation (note that `SQLAlchemy` dependency will have to be installed – for installation, refer to [optional dependencies](https://ax.dev/docs/installation.html#optional-dependencies) on Ax website):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "from ax.storage.sqa_store.structs import DBSettings\n", + "\n", + "# URL is of the form \"dialect+driver://username:password@host:port/database\".\n", + "db_settings = DBSettings(url=\"sqlite:///foo.db\")\n", + "# Instead of URL, can provide a `creator function`; can specify custom encoders/decoders if necessary.\n", + "new_ax = AxClient(db_settings=db_settings)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When valid `DBSettings` are passed into `AxClient`, a unique experiment name is a required argument (`name`) to `ax_client.create_experiment`. The **state of the optimization is auto-saved** any time it changes (i.e. a new trial is added or completed, etc). \n", + "\n", + "To reload an optimization state later, instantiate `AxClient` with the same `DBSettings` and use `ax_client.load_experiment_from_database(experiment_name=\"my_experiment\")`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Special Cases" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Evaluation failure**: should any optimization iterations fail during evaluation, `log_trial_failure` will ensure that the same trial is not proposed again." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "_, trial_index = ax_client.get_next_trial()\n", + "ax_client.log_trial_failure(trial_index=trial_index)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Adding custom trials**: should there be need to evaluate a specific parameterization, `attach_trial` will add it to the experiment." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax_client.attach_trial(\n", + " parameters={\"x1\": 0.9, \"x2\": 0.9, \"x3\": 0.9, \"x4\": 0.9, \"x5\": 0.9, \"x6\": 0.9}\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Need to run many trials in parallel**: for optimal results and optimization efficiency, we strongly recommend sequential optimization (generating a few trials, then waiting for them to be completed with evaluation data). However, if your use case needs to dispatch many trials in parallel before they are updated with data and you are running into the *\"All trials for current model have been generated, but not enough data has been observed to fit next model\"* error, instantiate `AxClient` as `AxClient(enforce_sequential_optimization=False)`." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Service API Exceptions Meaning and Handling\n", + "[**`DataRequiredError`**](https://ax.dev/api/exceptions.html#ax.exceptions.core.DataRequiredError): Ax generation strategy needs to be updated with more data to proceed to the next optimization model. When the optimization moves from initialization stage to the Bayesian optimization stage, the underlying BayesOpt model needs sufficient data to train. For optimal results and optimization efficiency (finding the optimal point in the least number of trials), we recommend sequential optimization (generating a few trials, then waiting for them to be completed with evaluation data). Therefore, the correct way to handle this exception is to wait until more trial evaluations complete and log their data via `ax_client.complete_trial(...)`. \n", + "\n", + "However, if there is strong need to generate more trials before more data is available, instantiate `AxClient` as `AxClient(enforce_sequential_optimization=False)`. With this setting, as many trials will be generated from the initialization stage as requested, and the optimization will move to the BayesOpt stage whenever enough trials are completed." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "[**`MaxParallelismReachedException`**](https://ax.dev/api/modelbridge.html#ax.modelbridge.generation_strategy.MaxParallelismReachedException): generation strategy restricts the number of trials that can be ran simultaneously (to encourage sequential optimization), and the parallelism limit has been reached. The correct way to handle this exception is the same as `DataRequiredError` – to wait until more trial evluations complete and log their data via `ax_client.complete_trial(...)`.\n", + " \n", + "In some cases higher parallelism is important, so `enforce_sequential_optimization=False` kwarg to AxClient allows to suppress limiting of parallelism. It's also possible to override the default parallelism setting for all stages of the optimization by passing `choose_generation_strategy_kwargs` to `ax_client.create_experiment`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax_client = AxClient()\n", + "ax_client.create_experiment(\n", + " parameters=[\n", + " {\"name\": \"x\", \"type\": \"range\", \"bounds\": [-5.0, 10.0]},\n", + " {\"name\": \"y\", \"type\": \"range\", \"bounds\": [0.0, 15.0]},\n", + " ],\n", + " # Sets max parallelism to 10 for all steps of the generation strategy.\n", + " choose_generation_strategy_kwargs={\"max_parallelism_override\": 10},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "ax_client.get_max_parallelism() # Max parallelism is now 10 for all stages of the optimization." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/gss.ipynb b/tutorials/gss.ipynb index ab4d81fccf5..6e6ff3d8aed 100644 --- a/tutorials/gss.ipynb +++ b/tutorials/gss.ipynb @@ -1,563 +1,543 @@ { - "metadata": { - "kernelspec": { - "cinder_runtime": true, - "display_name": "python3", - "ipyflow_runtime": false, - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3" - } + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "06e172a0-2da3-4c90-93c2-be01bf4f6d45", + "showInput": false + }, + "source": [ + "This tutorial illustrates use of a Global Stopping Strategy (GSS) in combination with the Service API. For background on the Service API, see the Service API Tutorial: https://ax.dev/tutorials/gpei_hartmann_service.html GSS is also supported in the Scheduler API, where it can be provided as part of `SchedulerOptions`. For more on `Scheduler`, see the Scheduler tutorial: https://ax.dev/tutorials/scheduler.html\n", + "\n", + "Global Stopping stops an optimization loop when some data-based criteria are met which suggest that future trials will not be very helpful. For example, we might stop when there has been very little improvement in the last five trials. This is as opposed to trial-level early stopping, which monitors the results of expensive evaluations and terminates those that are unlikely to produce promising results, freeing resources to explore more promising configurations. For more on trial-level early stopping, see the tutorial: https://ax.dev/tutorials/early_stopping/early_stopping.html" + ] }, - "nbformat": 4, - "nbformat_minor": 2, - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "06e172a0-2da3-4c90-93c2-be01bf4f6d45", - "showInput": false - }, - "source": [ - "This tutorial illustrates use of a Global Stopping Strategy (GSS) in combination with the Service API. For background on the Service API, see the Service API Tutorial: https://ax.dev/tutorials/gpei_hartmann_service.html GSS is also supported in the Scheduler API, where it can be provided as part of `SchedulerOptions`. For more on `Scheduler`, see the Scheduler tutorial: https://ax.dev/tutorials/scheduler.html\n", - "\n", - "Global Stopping stops an optimization loop when some data-based criteria are met which suggest that future trials will not be very helpful. For example, we might stop when there has been very little improvement in the last five trials. This is as opposed to trial-level early stopping, which monitors the results of expensive evaluations and terminates those that are unlikely to produce promising results, freeing resources to explore more promising configurations. For more on trial-level early stopping, see the tutorial: https://ax.dev/tutorials/early_stopping/early_stopping.html" - ] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customOutput": null, - "executionStartTime": 1683829335587, - "executionStopTime": 1683829339370, - "originalKey": "00a04d2c-d990-41c1-9eef-bbb05fba000d", - "requestMsgId": "1c560539-1c7d-4c7a-ae55-e87c3b601859" - }, - "source": [ - "import numpy as np\n", - "\n", - "from ax.service.ax_client import AxClient, ObjectiveProperties\n", - "from ax.utils.measurement.synthetic_functions import Branin, branin\n", - "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", - "\n", - "init_notebook_plotting()" - ], - "execution_count": 1, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "8688d729-b402-4a4c-b796-94fdcf5e022c", - "showInput": false - }, - "source": [ - "# 1. What happens without global stopping? Optimization can run for too long.\n", - "This example uses the Branin test problem. We run 25 trials, which turns out to be far more than needed, because we get close to the optimum quite quickly." - ] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829339516, - "executionStopTime": 1683829339531, - "originalKey": "320a952b-9e78-43e1-a55b-76a355e90f83", - "requestMsgId": "14e3a517-c7d0-4300-92d9-57ceb5afca34", - "showInput": true - }, - "source": [ - "def evaluate(parameters):\n", - " x = np.array([parameters.get(f\"x{i+1}\") for i in range(2)])\n", - " return {\"branin\": (branin(x), 0.0)}" - ], - "execution_count": 2, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829339659, - "executionStopTime": 1683829339668, - "originalKey": "5740fbc2-97d6-465b-b01c-61e6c34c0220", - "requestMsgId": "ff819cc9-ff17-4763-a857-83662b01e955", - "showInput": true - }, - "source": [ - "params = [\n", - " {\n", - " \"name\": f\"x{i + 1}\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [*Branin._domain[i]],\n", - " \"value_type\": \"float\",\n", - " \"log_scale\": False,\n", - " }\n", - "\n", - " for i in range(2)\n", - "]" - ], - "execution_count": 3, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829339782, - "executionStopTime": 1683829339834, - "originalKey": "65667172-14df-437b-bdd0-5a59580e4054", - "requestMsgId": "e0bc2847-17a5-43d7-bf49-ed97c90f1d50", - "showInput": true - }, - "source": [ - "ax_client = AxClient(random_seed=0, verbose_logging=False)\n", - "\n", - "ax_client.create_experiment(\n", - " name=\"branin_test_experiment\",\n", - " parameters=params,\n", - " objectives={\"branin\": ObjectiveProperties(minimize=True)},\n", - " is_test=True,\n", - ")" - ], - "execution_count": 4, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829339928, - "executionStopTime": 1683829356006, - "originalKey": "1f208de3-5189-4847-a779-940795977845", - "requestMsgId": "95f327f2-327f-4284-93ae-3053c9b6ec45", - "showInput": true - }, - "source": [ - "%%time\n", - "for i in range(25):\n", - " parameters, trial_index = ax_client.get_next_trial()\n", - " # Local evaluation here can be replaced with deployment to external system.\n", - " ax_client.complete_trial(\n", - " trial_index=trial_index, raw_data=evaluate(parameters)\n", - " )" - ], - "execution_count": 5, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829356136, - "executionStopTime": 1683829356616, - "originalKey": "a369aafa-8ee4-4c02-bea6-673271da81ab", - "requestMsgId": "b601e1e9-fd2d-4faf-a369-04e5c4a9f8cb", - "showInput": true - }, - "source": [ - "render(ax_client.get_optimization_trace())" - ], - "execution_count": 6, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "ca391462-4695-44f1-bc53-070a947c5648", - "showInput": false - }, - "source": [ - "# 2. Optimization with global stopping, with the Service API" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "5a2690ef-0990-4cbd-9bc9-529b1455a4c3", - "showInput": false - }, - "source": [ - "Rather than running a fixed number of trials, we can use a GlobalStoppingStrategy (GSS), which checks whether some stopping criteria have been met when `get_next_trial` is called. Here, we use an `ImprovementGlobalStoppingStrategy`, which checks whether the the last `window_size` trials have improved by more than some threshold amount.\n", - "\n", - "For single-objective optimization, which we are doing here, `ImprovementGlobalStoppingStrategy` checks if an improvement is \"significant\" by comparing it to the inter-quartile range (IQR) of the objective values attained so far. \n", - "\n", - "`ImprovementGlobalStoppingStrategy` also supports multi-objective optimization (MOO), in which case it checks whether the percentage improvement in hypervolume over the last `window_size` trials exceeds `improvement_bar`." - ] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829356716, - "executionStopTime": 1683829356725, - "originalKey": "a6634232-448a-4b84-98cd-399c755537df", - "requestMsgId": "7e428336-eeeb-4e5b-91c4-fcf5a671773d", - "showInput": true - }, - "source": [ - "from ax.global_stopping.strategies.improvement import ImprovementGlobalStoppingStrategy\n", - "from ax.exceptions.core import OptimizationShouldStop" - ], - "execution_count": 7, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829356822, - "executionStopTime": 1683829356829, - "originalKey": "c313de63-03ee-4a65-aa5c-5e7b6f436480", - "requestMsgId": "953b064b-8db6-430f-909d-872469bc1e16", - "showInput": true - }, - "source": [ - "# Start considering stopping only after the 5 initialization trials + 5 GPEI trials.\n", - "# Stop if the improvement in the best point in the past 5 trials is less than\n", - "# 1% of the IQR thus far.\n", - "stopping_strategy = ImprovementGlobalStoppingStrategy(\n", - " min_trials=5 + 5, window_size=5, improvement_bar=0.01\n", - ")" - ], - "execution_count": 8, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829356961, - "executionStopTime": 1683829356997, - "originalKey": "a2c6c699-f0d2-4001-9bee-3964594e435c", - "requestMsgId": "2ba6f82b-1443-4274-83d1-03c56f0190d0", - "showInput": true - }, - "source": [ - "ax_client_gss = AxClient(\n", - " global_stopping_strategy=stopping_strategy, random_seed=0, verbose_logging=False\n", - ")\n", - "\n", - "ax_client_gss.create_experiment(\n", - " name=\"branin_test_experiment\",\n", - " parameters=params,\n", - " objectives={\"branin\": ObjectiveProperties(minimize=True)},\n", - " is_test=True,\n", - ")" - ], - "execution_count": 9, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "7ff170a1-e885-429f-9695-8b64b5b8e209", - "showInput": false - }, - "source": [ - "If there has not been much improvement, `ImprovementGlobalStoppingStrategy` will raise an exception. If the exception is raised, we catch it and terminate optimization." - ] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829357114, - "executionStopTime": 1683829363866, - "originalKey": "3db097cb-1e6e-4320-806a-981dcef6bade", - "requestMsgId": "fd039109-2a23-4287-8935-b74274405e56", - "showInput": true - }, - "source": [ - "for i in range(25):\n", - " try:\n", - " parameters, trial_index = ax_client_gss.get_next_trial()\n", - " except OptimizationShouldStop as exc:\n", - " print(exc.message)\n", - " break\n", - " ax_client_gss.complete_trial(trial_index=trial_index, raw_data=evaluate(parameters))" - ], - "execution_count": 10, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829363988, - "executionStopTime": 1683829364103, - "originalKey": "ffb53ed2-8775-492d-a357-348957637454", - "requestMsgId": "f0f765dd-85db-4519-90d0-064a1bf64b6d", - "showInput": true - }, - "source": [ - "render(ax_client_gss.get_optimization_trace())" - ], - "execution_count": 11, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "b01707f3-0bbf-4003-9222-29ba5e3c77b2", - "showInput": false - }, - "source": [ - "# 3. Write your own custom Global Stopping Strategy" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "23b8372b-0067-4934-b599-210b994e06f1", - "showInput": false - }, - "source": [ - "You can write a custom Global Stopping Strategy by subclassing `BaseGlobalStoppingStrategy` and use it where `ImprovementGlobalStoppingStrategy` was used above." - ] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829364214, - "executionStopTime": 1683829364222, - "originalKey": "2e5512a9-82ed-43a0-8616-6cee7f648b0f", - "requestMsgId": "d5c268a1-fefe-49d5-8ff4-a2cb40fe278b", - "showInput": true - }, - "source": [ - "from ax.global_stopping.strategies.base import BaseGlobalStoppingStrategy\n", - "from typing import Tuple\n", - "from ax.core.experiment import Experiment\n", - "from ax.core.base_trial import TrialStatus\n", - "from ax.global_stopping.strategies.improvement import constraint_satisfaction" - ], - "execution_count": 12, - "outputs": [] - }, - { - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "584df5ac-c0f6-4c48-8cec-f9765a04e635", - "showInput": false - }, - "source": [ - "Here, we define `SimpleThresholdGlobalStoppingStrategy`, which stops when we observe a point better than a provided threshold. This can be useful when there is a known optimum. For example, the Branin function has an optimum of zero. When the optimum is not known, this can still be useful from a satisficing perspective: For example, maybe we need a model to take up less than a certain amount of RAM so it doesn't crash our usual hardware, but there is no benefit to further improvements." - ] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829490325, - "executionStopTime": 1683829490340, - "originalKey": "bbd24d6e-a873-49d6-abe3-4d832acb8a60", - "requestMsgId": "74b77cb7-54eb-4321-afae-942b62b90f5d", - "showInput": true - }, - "source": [ - "class SimpleThresholdGlobalStoppingStrategy(BaseGlobalStoppingStrategy):\n", - " \"\"\"\n", - " A GSS that stops when we observe a point better than `threshold`.\n", - " \"\"\"\n", - " def __init__(\n", - " self,\n", - " min_trials: int,\n", - " inactive_when_pending_trials: bool = True,\n", - " threshold: float = 0.1\n", - " ):\n", - " self.threshold = threshold\n", - " super().__init__(\n", - " min_trials=min_trials,\n", - " inactive_when_pending_trials=inactive_when_pending_trials\n", - " )\n", - " \n", - " def _should_stop_optimization(\n", - " self, experiment: Experiment\n", - " ) -> Tuple[bool, str]:\n", - " \"\"\"\n", - " Check if the best seen is better than `self.threshold`.\n", - " \"\"\"\n", - " feasible_objectives = [\n", - " trial.objective_mean\n", - " for trial in experiment.trials_by_status[TrialStatus.COMPLETED]\n", - " if constraint_satisfaction(trial)\n", - " ]\n", - "\n", - " # Computing the interquartile for scaling the difference\n", - " if len(feasible_objectives) <= 1:\n", - " message = \"There are not enough feasible arms tried yet.\"\n", - " return False, message\n", - " \n", - " minimize = experiment.optimization_config.objective.minimize\n", - " if minimize:\n", - " best = np.min(feasible_objectives)\n", - " stop = best < self.threshold\n", - " else:\n", - " best = np.max(feasible_objectives)\n", - " stop = best > self.threshold\n", - "\n", - " comparison = \"less\" if minimize else \"greater\"\n", - " if stop:\n", - " message = (\n", - " f\"The best objective seen is {best:.3f}, which is {comparison} \"\n", - " f\"than the threshold of {self.threshold:.3f}.\"\n", - " )\n", - " else:\n", - " message = \"\"\n", - "\n", - " return stop, message" - ], - "execution_count": 20, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829491609, - "executionStopTime": 1683829491626, - "originalKey": "f3dc5682-0539-4c85-a66a-0d3128f0cc1c", - "requestMsgId": "9ee9e413-be32-49fc-a7bc-8e1898d1dbf5", - "showInput": true - }, - "source": [ - "stopping_strategy = SimpleThresholdGlobalStoppingStrategy(min_trials=5, threshold=1.)" - ], - "execution_count": 21, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829491833, - "executionStopTime": 1683829491894, - "originalKey": "3d6c1ab2-c3ee-49c8-9969-45f2455bbd60", - "requestMsgId": "08232010-46f8-4b28-b581-454ddacdc57b", - "showInput": true - }, - "source": [ - "ax_client_custom_gss = AxClient(\n", - " global_stopping_strategy=stopping_strategy,\n", - " random_seed=0,\n", - " verbose_logging=False,\n", - ")\n", - "\n", - "ax_client_custom_gss.create_experiment(\n", - " name=\"branin_test_experiment\",\n", - " parameters=params,\n", - " objectives={\"branin\": ObjectiveProperties(minimize=True)},\n", - " is_test=True,\n", - ")" - ], - "execution_count": 22, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1683829492064, - "executionStopTime": 1683829495338, - "originalKey": "a306cb15-364f-4e91-b569-9067843a7578", - "requestMsgId": "81121dac-3a2a-4dde-b866-44e448e73ad5", - "showInput": true - }, - "source": [ - "for i in range(25):\n", - " try:\n", - " parameters, trial_index = ax_client_custom_gss.get_next_trial()\n", - " except OptimizationShouldStop as exc:\n", - " print(exc.message)\n", - " break\n", - " ax_client_custom_gss.complete_trial(\n", - " trial_index=trial_index, raw_data=evaluate(parameters)\n", - " )" - ], - "execution_count": 23, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1683829495351, - "executionStopTime": 1683829495740, - "originalKey": "3cb59624-d9bb-4b7a-9f57-7cb968dce889", - "requestMsgId": "4dd4ed93-07ab-4dd1-92a9-f003f405ccbc", - "showInput": true, - "customOutput": null - }, - "source": [ - "render(ax_client_custom_gss.get_optimization_trace())" - ], - "execution_count": 24, - "outputs": [] - }, - { - "cell_type": "code", - "metadata": { - "originalKey": "5f4eaa42-a8cb-42b2-b8b4-b2fa53398270", - "showInput": true, - "customInput": null - }, - "source": [ - "" - ], - "execution_count": null, - "outputs": [] - } - ] + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "customOutput": null, + "executionStartTime": 1683829335587, + "executionStopTime": 1683829339370, + "originalKey": "00a04d2c-d990-41c1-9eef-bbb05fba000d", + "requestMsgId": "1c560539-1c7d-4c7a-ae55-e87c3b601859" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "from ax.service.ax_client import AxClient, ObjectiveProperties\n", + "from ax.utils.measurement.synthetic_functions import Branin, branin\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "\n", + "init_notebook_plotting()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "8688d729-b402-4a4c-b796-94fdcf5e022c", + "showInput": false + }, + "source": [ + "# 1. What happens without global stopping? Optimization can run for too long.\n", + "This example uses the Branin test problem. We run 25 trials, which turns out to be far more than needed, because we get close to the optimum quite quickly." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829339516, + "executionStopTime": 1683829339531, + "originalKey": "320a952b-9e78-43e1-a55b-76a355e90f83", + "requestMsgId": "14e3a517-c7d0-4300-92d9-57ceb5afca34", + "showInput": true + }, + "outputs": [], + "source": [ + "def evaluate(parameters):\n", + " x = np.array([parameters.get(f\"x{i+1}\") for i in range(2)])\n", + " return {\"branin\": (branin(x), 0.0)}" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829339659, + "executionStopTime": 1683829339668, + "originalKey": "5740fbc2-97d6-465b-b01c-61e6c34c0220", + "requestMsgId": "ff819cc9-ff17-4763-a857-83662b01e955", + "showInput": true + }, + "outputs": [], + "source": [ + "params = [\n", + " {\n", + " \"name\": f\"x{i + 1}\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [*Branin._domain[i]],\n", + " \"value_type\": \"float\",\n", + " \"log_scale\": False,\n", + " }\n", + "\n", + " for i in range(2)\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829339782, + "executionStopTime": 1683829339834, + "originalKey": "65667172-14df-437b-bdd0-5a59580e4054", + "requestMsgId": "e0bc2847-17a5-43d7-bf49-ed97c90f1d50", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client = AxClient(random_seed=0, verbose_logging=False)\n", + "\n", + "ax_client.create_experiment(\n", + " name=\"branin_test_experiment\",\n", + " parameters=params,\n", + " objectives={\"branin\": ObjectiveProperties(minimize=True)},\n", + " is_test=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829339928, + "executionStopTime": 1683829356006, + "originalKey": "1f208de3-5189-4847-a779-940795977845", + "requestMsgId": "95f327f2-327f-4284-93ae-3053c9b6ec45", + "showInput": true + }, + "outputs": [], + "source": [ + "%%time\n", + "for i in range(25):\n", + " parameters, trial_index = ax_client.get_next_trial()\n", + " # Local evaluation here can be replaced with deployment to external system.\n", + " ax_client.complete_trial(\n", + " trial_index=trial_index, raw_data=evaluate(parameters)\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829356136, + "executionStopTime": 1683829356616, + "originalKey": "a369aafa-8ee4-4c02-bea6-673271da81ab", + "requestMsgId": "b601e1e9-fd2d-4faf-a369-04e5c4a9f8cb", + "showInput": true + }, + "outputs": [], + "source": [ + "render(ax_client.get_optimization_trace())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "ca391462-4695-44f1-bc53-070a947c5648", + "showInput": false + }, + "source": [ + "# 2. Optimization with global stopping, with the Service API" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "5a2690ef-0990-4cbd-9bc9-529b1455a4c3", + "showInput": false + }, + "source": [ + "Rather than running a fixed number of trials, we can use a GlobalStoppingStrategy (GSS), which checks whether some stopping criteria have been met when `get_next_trial` is called. Here, we use an `ImprovementGlobalStoppingStrategy`, which checks whether the the last `window_size` trials have improved by more than some threshold amount.\n", + "\n", + "For single-objective optimization, which we are doing here, `ImprovementGlobalStoppingStrategy` checks if an improvement is \"significant\" by comparing it to the inter-quartile range (IQR) of the objective values attained so far. \n", + "\n", + "`ImprovementGlobalStoppingStrategy` also supports multi-objective optimization (MOO), in which case it checks whether the percentage improvement in hypervolume over the last `window_size` trials exceeds `improvement_bar`." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829356716, + "executionStopTime": 1683829356725, + "originalKey": "a6634232-448a-4b84-98cd-399c755537df", + "requestMsgId": "7e428336-eeeb-4e5b-91c4-fcf5a671773d", + "showInput": true + }, + "outputs": [], + "source": [ + "from ax.global_stopping.strategies.improvement import ImprovementGlobalStoppingStrategy\n", + "from ax.exceptions.core import OptimizationShouldStop" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829356822, + "executionStopTime": 1683829356829, + "originalKey": "c313de63-03ee-4a65-aa5c-5e7b6f436480", + "requestMsgId": "953b064b-8db6-430f-909d-872469bc1e16", + "showInput": true + }, + "outputs": [], + "source": [ + "# Start considering stopping only after the 5 initialization trials + 5 GPEI trials.\n", + "# Stop if the improvement in the best point in the past 5 trials is less than\n", + "# 1% of the IQR thus far.\n", + "stopping_strategy = ImprovementGlobalStoppingStrategy(\n", + " min_trials=5 + 5, window_size=5, improvement_bar=0.01\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829356961, + "executionStopTime": 1683829356997, + "originalKey": "a2c6c699-f0d2-4001-9bee-3964594e435c", + "requestMsgId": "2ba6f82b-1443-4274-83d1-03c56f0190d0", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client_gss = AxClient(\n", + " global_stopping_strategy=stopping_strategy, random_seed=0, verbose_logging=False\n", + ")\n", + "\n", + "ax_client_gss.create_experiment(\n", + " name=\"branin_test_experiment\",\n", + " parameters=params,\n", + " objectives={\"branin\": ObjectiveProperties(minimize=True)},\n", + " is_test=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "7ff170a1-e885-429f-9695-8b64b5b8e209", + "showInput": false + }, + "source": [ + "If there has not been much improvement, `ImprovementGlobalStoppingStrategy` will raise an exception. If the exception is raised, we catch it and terminate optimization." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829357114, + "executionStopTime": 1683829363866, + "originalKey": "3db097cb-1e6e-4320-806a-981dcef6bade", + "requestMsgId": "fd039109-2a23-4287-8935-b74274405e56", + "showInput": true + }, + "outputs": [], + "source": [ + "for i in range(25):\n", + " try:\n", + " parameters, trial_index = ax_client_gss.get_next_trial()\n", + " except OptimizationShouldStop as exc:\n", + " print(exc.message)\n", + " break\n", + " ax_client_gss.complete_trial(trial_index=trial_index, raw_data=evaluate(parameters))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829363988, + "executionStopTime": 1683829364103, + "originalKey": "ffb53ed2-8775-492d-a357-348957637454", + "requestMsgId": "f0f765dd-85db-4519-90d0-064a1bf64b6d", + "showInput": true + }, + "outputs": [], + "source": [ + "render(ax_client_gss.get_optimization_trace())" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "b01707f3-0bbf-4003-9222-29ba5e3c77b2", + "showInput": false + }, + "source": [ + "# 3. Write your own custom Global Stopping Strategy" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "23b8372b-0067-4934-b599-210b994e06f1", + "showInput": false + }, + "source": [ + "You can write a custom Global Stopping Strategy by subclassing `BaseGlobalStoppingStrategy` and use it where `ImprovementGlobalStoppingStrategy` was used above." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829364214, + "executionStopTime": 1683829364222, + "originalKey": "2e5512a9-82ed-43a0-8616-6cee7f648b0f", + "requestMsgId": "d5c268a1-fefe-49d5-8ff4-a2cb40fe278b", + "showInput": true + }, + "outputs": [], + "source": [ + "from ax.global_stopping.strategies.base import BaseGlobalStoppingStrategy\n", + "from typing import Tuple\n", + "from ax.core.experiment import Experiment\n", + "from ax.core.base_trial import TrialStatus\n", + "from ax.global_stopping.strategies.improvement import constraint_satisfaction" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "584df5ac-c0f6-4c48-8cec-f9765a04e635", + "showInput": false + }, + "source": [ + "Here, we define `SimpleThresholdGlobalStoppingStrategy`, which stops when we observe a point better than a provided threshold. This can be useful when there is a known optimum. For example, the Branin function has an optimum of zero. When the optimum is not known, this can still be useful from a satisficing perspective: For example, maybe we need a model to take up less than a certain amount of RAM so it doesn't crash our usual hardware, but there is no benefit to further improvements." + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829490325, + "executionStopTime": 1683829490340, + "originalKey": "bbd24d6e-a873-49d6-abe3-4d832acb8a60", + "requestMsgId": "74b77cb7-54eb-4321-afae-942b62b90f5d", + "showInput": true + }, + "outputs": [], + "source": [ + "class SimpleThresholdGlobalStoppingStrategy(BaseGlobalStoppingStrategy):\n", + " \"\"\"\n", + " A GSS that stops when we observe a point better than `threshold`.\n", + " \"\"\"\n", + " def __init__(\n", + " self,\n", + " min_trials: int,\n", + " inactive_when_pending_trials: bool = True,\n", + " threshold: float = 0.1\n", + " ):\n", + " self.threshold = threshold\n", + " super().__init__(\n", + " min_trials=min_trials,\n", + " inactive_when_pending_trials=inactive_when_pending_trials\n", + " )\n", + " \n", + " def _should_stop_optimization(\n", + " self, experiment: Experiment\n", + " ) -> Tuple[bool, str]:\n", + " \"\"\"\n", + " Check if the best seen is better than `self.threshold`.\n", + " \"\"\"\n", + " feasible_objectives = [\n", + " trial.objective_mean\n", + " for trial in experiment.trials_by_status[TrialStatus.COMPLETED]\n", + " if constraint_satisfaction(trial)\n", + " ]\n", + "\n", + " # Computing the interquartile for scaling the difference\n", + " if len(feasible_objectives) <= 1:\n", + " message = \"There are not enough feasible arms tried yet.\"\n", + " return False, message\n", + " \n", + " minimize = experiment.optimization_config.objective.minimize\n", + " if minimize:\n", + " best = np.min(feasible_objectives)\n", + " stop = best < self.threshold\n", + " else:\n", + " best = np.max(feasible_objectives)\n", + " stop = best > self.threshold\n", + "\n", + " comparison = \"less\" if minimize else \"greater\"\n", + " if stop:\n", + " message = (\n", + " f\"The best objective seen is {best:.3f}, which is {comparison} \"\n", + " f\"than the threshold of {self.threshold:.3f}.\"\n", + " )\n", + " else:\n", + " message = \"\"\n", + "\n", + " return stop, message" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829491609, + "executionStopTime": 1683829491626, + "originalKey": "f3dc5682-0539-4c85-a66a-0d3128f0cc1c", + "requestMsgId": "9ee9e413-be32-49fc-a7bc-8e1898d1dbf5", + "showInput": true + }, + "outputs": [], + "source": [ + "stopping_strategy = SimpleThresholdGlobalStoppingStrategy(min_trials=5, threshold=1.)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829491833, + "executionStopTime": 1683829491894, + "originalKey": "3d6c1ab2-c3ee-49c8-9969-45f2455bbd60", + "requestMsgId": "08232010-46f8-4b28-b581-454ddacdc57b", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client_custom_gss = AxClient(\n", + " global_stopping_strategy=stopping_strategy,\n", + " random_seed=0,\n", + " verbose_logging=False,\n", + ")\n", + "\n", + "ax_client_custom_gss.create_experiment(\n", + " name=\"branin_test_experiment\",\n", + " parameters=params,\n", + " objectives={\"branin\": ObjectiveProperties(minimize=True)},\n", + " is_test=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829492064, + "executionStopTime": 1683829495338, + "originalKey": "a306cb15-364f-4e91-b569-9067843a7578", + "requestMsgId": "81121dac-3a2a-4dde-b866-44e448e73ad5", + "showInput": true + }, + "outputs": [], + "source": [ + "for i in range(25):\n", + " try:\n", + " parameters, trial_index = ax_client_custom_gss.get_next_trial()\n", + " except OptimizationShouldStop as exc:\n", + " print(exc.message)\n", + " break\n", + " ax_client_custom_gss.complete_trial(\n", + " trial_index=trial_index, raw_data=evaluate(parameters)\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1683829495351, + "executionStopTime": 1683829495740, + "originalKey": "3cb59624-d9bb-4b7a-9f57-7cb968dce889", + "requestMsgId": "4dd4ed93-07ab-4dd1-92a9-f003f405ccbc", + "showInput": true + }, + "outputs": [], + "source": [ + "render(ax_client_custom_gss.get_optimization_trace())" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "originalKey": "5f4eaa42-a8cb-42b2-b8b4-b2fa53398270", + "showInput": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/modular_botax.ipynb b/tutorials/modular_botax.ipynb index 7835915ec39..23798ee6ef5 100644 --- a/tutorials/modular_botax.ipynb +++ b/tutorials/modular_botax.ipynb @@ -1,1213 +1,1214 @@ { - "cells": [ - { - "cell_type": "code", - "execution_count": 1, - "id": "about-preview", - "metadata": { - "originalKey": "cca773d8-5e94-4b5a-ae54-22295be8936a" - }, - "outputs": [], - "source": [ - "from typing import Any, Dict, Optional, Tuple, Type\n", - "\n", - "# Ax wrappers for BoTorch components\n", - "from ax.models.torch.botorch_modular.model import BoTorchModel\n", - "from ax.models.torch.botorch_modular.surrogate import Surrogate\n", - "from ax.models.torch.botorch_modular.acquisition import Acquisition\n", - "\n", - "# Ax data tranformation layer\n", - "from ax.modelbridge.torch import TorchModelBridge\n", - "from ax.modelbridge.registry import Cont_X_trans, Y_trans, Models\n", - "\n", - "# Experiment examination utilities\n", - "from ax.service.utils.report_utils import exp_to_df\n", - "\n", - "# Test Ax objects\n", - "from ax.utils.testing.core_stubs import (\n", - " get_branin_experiment,\n", - " get_branin_data,\n", - " get_branin_experiment_with_multi_objective,\n", - " get_branin_data_multi_objective,\n", - ")\n", - "\n", - "# BoTorch components\n", - "from botorch.models.model import Model\n", - "from botorch.models.gp_regression import FixedNoiseGP\n", - "from botorch.acquisition.monte_carlo import (\n", - " qExpectedImprovement,\n", - " qNoisyExpectedImprovement,\n", - ")\n", - "from gpytorch.mlls.exact_marginal_log_likelihood import ExactMarginalLogLikelihood" - ] - }, - { - "cell_type": "markdown", - "id": "northern-affairs", - "metadata": { - "originalKey": "58ea5ebf-ff3a-40b4-8be3-1b85c99d1c4a" - }, - "source": [ - "# Setup and Usage of BoTorch Models in Ax\n", - "\n", - "Ax provides a set of flexible wrapper abstractions to mix-and-match BoTorch components like `Model` and `AcquisitionFunction` and combine them into a single `Model` object in Ax. The wrapper abstractions: `Surrogate`, `Acquisition`, and `BoTorchModel` – are located in `ax/models/torch/botorch_modular` directory and aim to encapsulate boilerplate code that interfaces between Ax and BoTorch. This functionality is in beta-release and still evolving.\n", - "\n", - "This tutorial walks through setting up a custom combination of BoTorch components in Ax in following steps:\n", - "\n", - "1. **Quick-start example of `BoTorchModel` use**\n", - "1. **`BoTorchModel` = `Surrogate` + `Acquisition` (overview)**\n", - " 1. Example with minimal options that uses the defaults\n", - " 2. Example showing all possible options\n", - " 3. Surrogate and Acquisition Q&A\n", - "2. **I know which Botorch Model and AcquisitionFunction I'd like to combine in Ax. How do set this up?**\n", - " 1. Making a `Surrogate` from BoTorch `Model`\n", - " 2. Using an arbitrary BoTorch `AcquisitionFunction` in Ax\n", - "3. **Using `Models.BOTORCH_MODULAR`** (convenience wrapper that enables storage and resumability)\n", - "4. **Utilizing `BoTorchModel` in generation strategies** (abstraction that allows to chain models together and use them in Ax Service API etc.)\n", - " 1. Specifying `pending_observations` to avoid the model re-suggesting points that are part of `RUNNING` or `ABANDONED` trials.\n", - "5. **Customizing a `Surrogate` or `Acquisition`** (for cases where existing subcomponent classes are not sufficient)" - ] - }, - { - "cell_type": "markdown", - "id": "pending-support", - "metadata": { - "originalKey": "c06d1b5c-067d-4618-977e-c8269a98bd0a" - }, - "source": [ - "## 1. Quick-start example\n", - "\n", - "Here we set up a `BoTorchModel` with `FixedNoiseGP` with `qNoisyExpectedImprovement`, one of the most popular combinations in Ax:" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "id": "parental-sending", - "metadata": { - "originalKey": "72934cf2-4ecf-483a-93bd-4df88b19a7b8" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 06-07 16:00:42] ax.core.experiment: The is_test flag has been set to True. This flag is meant purely for development and integration testing purposes. If you are running a live experiment, please set this flag to False\n" - ] - } - ], - "source": [ - "experiment = get_branin_experiment(with_trial=True)\n", - "data = get_branin_data(trials=[experiment.trials[0]])" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "id": "rough-somerset", - "metadata": { - "originalKey": "e571212c-7872-4ebc-b646-8dad8d4266fd" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 06-07 16:00:42] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" - ] - } - ], - "source": [ - "# `Models` automatically selects a model + model bridge combination.\n", - "# For `BOTORCH_MODULAR`, it will select `BoTorchModel` and `TorchModelBridge`.\n", - "model_bridge_with_GPEI = Models.BOTORCH_MODULAR(\n", - " experiment=experiment,\n", - " data=data,\n", - " surrogate=Surrogate(FixedNoiseGP), # Optional, will use default if unspecified\n", - " botorch_acqf_class=qNoisyExpectedImprovement, # Optional, will use default if unspecified\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "hairy-wiring", - "metadata": { - "originalKey": "fba91372-7aa6-456d-a22b-78ab30c26cd8" - }, - "source": [ - "Now we can use this model to generate candidates (`gen`), predict outcome at a point (`predict`), or evaluate acquisition function value at a given point (`evaluate_acquisition_function`)." - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "id": "consecutive-summary", - "metadata": { - "originalKey": "59582fc6-8089-4320-864e-d98ee271d4f7" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "Arm(parameters={'x1': 10.0, 'x2': 0.0})" - ] - }, - "execution_count": 4, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "generator_run = model_bridge_with_GPEI.gen(n=1)\n", - "generator_run.arms[0]" - ] - }, - { - "cell_type": "markdown", - "id": "diverse-richards", - "metadata": { - "originalKey": "8cfe0fa9-8cce-4718-ba43-e8a63744d626" - }, - "source": [ - "-----\n", - "Before you read the rest of this tutorial:\n", - "\n", - "- Note that the concept of ‘model’ is Ax is somewhat a misnomer; we use ['model'](https://ax.dev/docs/glossary.html#model) to refer to an optimization setup capable of producing candidate points for optimization (and often capable of being fit to data, with exception for quasi-random generators). See [Models documentation page](https://ax.dev/docs/models.html) for more information.\n", - "- Learn about `ModelBridge` in Ax, as users should rarely be interacting with a `Model` object directly (more about ModelBridge, a data transformation layer in Ax, [here](https://ax.dev/docs/models.html#deeper-dive-organization-of-the-modeling-stack))." - ] - }, - { - "cell_type": "markdown", - "id": "grand-committee", - "metadata": { - "originalKey": "7037fd14-bcfe-44f9-b915-c23915d2bda9" - }, - "source": [ - "## 2. BoTorchModel = Surrogate + Acquisition\n", - "\n", - "A `BoTorchModel` in Ax consists of two main subcomponents: a surrogate model and an acquisition function. A surrogate model is represented as an instance of Ax’s `Surrogate` class, which is a wrapper around BoTorch's `Model` class. The acquisition function is represented as an instance of Ax’s `Acquisition` class, a wrapper around BoTorch's `AcquisitionFunction` class." - ] - }, - { - "cell_type": "markdown", - "id": "thousand-blanket", - "metadata": { - "originalKey": "08b12c6c-14da-4342-95bd-f607a131ce9d" - }, - "source": [ - "### 2A. Example that uses defaults and requires no options\n", - "\n", - "BoTorchModel does not always require surrogate and acquisition specification. If instantiated without one or both components specified, defaults are selected based on properties of experiment and data (see Appendix 2 for auto-selection logic)." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "changing-xerox", - "metadata": { - "originalKey": "b1bca702-07b2-4818-b2b9-2107268c383c" - }, - "outputs": [], - "source": [ - "# The surrogate is not specified, so it will be auto-selected\n", - "# during `model.fit`.\n", - "GPEI_model = BoTorchModel(botorch_acqf_class=qExpectedImprovement)\n", - "\n", - "# The acquisition class is not specified, so it will be\n", - "# auto-selected during `model.gen` or `model.evaluate_acquisition`\n", - "GPEI_model = BoTorchModel(surrogate=Surrogate(FixedNoiseGP))\n", - "\n", - "# Both the surrogate and acquisition class will be auto-selected.\n", - "GPEI_model = BoTorchModel()" - ] - }, - { - "cell_type": "markdown", - "id": "lovely-mechanics", - "metadata": { - "originalKey": "5cec0f06-ae2c-47d3-bd95-441c45762e38" - }, - "source": [ - "### 2B. Example with all the options\n", - "Below are the full set of configurable settings of a `BoTorchModel` with their descriptions:" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "id": "twenty-greek", - "metadata": { - "originalKey": "25b13c48-edb0-4b3f-ba34-4f4a4176162a" - }, - "outputs": [], - "source": [ - "model = BoTorchModel(\n", - " # Optional `Surrogate` specification to use instead of default\n", - " surrogate=Surrogate(\n", - " # BoTorch `Model` type\n", - " botorch_model_class=FixedNoiseGP,\n", - " # Optional, MLL class with which to optimize model parameters\n", - " mll_class=ExactMarginalLogLikelihood,\n", - " # Optional, dictionary of keyword arguments to underlying\n", - " # BoTorch `Model` constructor\n", - " model_options={},\n", - " ),\n", - " # Optional BoTorch `AcquisitionFunction` to use instead of default\n", - " botorch_acqf_class=qExpectedImprovement,\n", - " # Optional dict of keyword arguments, passed to the input\n", - " # constructor for the given BoTorch `AcquisitionFunction`\n", - " acquisition_options={},\n", - " # Optional Ax `Acquisition` subclass (if the given BoTorch\n", - " # `AcquisitionFunction` requires one, which is rare)\n", - " acquisition_class=None,\n", - " # Less common model settings shown with default values, refer\n", - " # to `BoTorchModel` documentation for detail\n", - " refit_on_update=True,\n", - " refit_on_cv=False,\n", - " warm_start_refit=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "fourth-material", - "metadata": { - "originalKey": "db0feafe-8af9-40a3-9f67-72c7d1fd808e" - }, - "source": [ - "## 2C. `Surrogate` and `Acquisition` Q&A\n", - "\n", - "**Why is the `surrogate` argument expected to be an instance, but `botorch_acqf_class` –– a class?** Because a BoTorch `AcquisitionFunction` object (and therefore its Ax wrapper, `Acquisition`) is ephemeral: it is constructed, immediately used, and destroyed during `BoTorchModel.gen`, so there is no reason to keep around an `Acquisition` instance. A `Surrogate`, on another hand, is kept in memory as long as its parent `BoTorchModel` is.\n", - "\n", - "**How to know when to use specify acquisition_class (and thereby a non-default Acquisition type) instead of just passing in botorch_acqf_class?** In short, custom `Acquisition` subclasses are needed when a given `AcquisitionFunction` in BoTorch needs some non-standard subcomponents or inputs (e.g. a custom BoTorch `MCAcquisitionObjective`). \n", - "\n", - "**Please post any other questions you have to our dedicated issue on Github: https://github.com/facebook/Ax/issues/363.** This functionality is in beta-release and your feedback will be of great help to us!" - ] - }, - { - "cell_type": "markdown", - "id": "violent-course", - "metadata": { - "originalKey": "86018ee5-f7b8-41ae-8e2d-460fe5f0c15b" - }, - "source": [ - "## 3. I know which Botorch `Model` and `AcquisitionFunction` I'd like to combine in Ax. How do set this up?" - ] - }, - { - "cell_type": "markdown", - "id": "unlike-football", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "b29a846d-d7bc-4143-8318-10170c9b4298", - "showInput": false - }, - "source": [ - "### 3a. Making a `Surrogate` from BoTorch `Model`:\n", - "Most models should work with base `Surrogate` in Ax, except for BoTorch `ModelListGP`. `ModelListGP` is a special case because its purpose is to combine multiple sub-models into a single `Model` in BoTorch. It is most commonly used for multi-objective and constrained optimization. Whether or not `ModelListGP` is used is determined automatically based on the `Model` class and the data being used via the `ax.models.torch.botorch_modular.utils.use_model_list` function.\n", - "\n", - "If your `Model` is not a `ModelListGP`, the steps to set it up as a `Surrogate` are:\n", - "1. Implement a [`construct_inputs` class method](https://github.com/pytorch/botorch/blob/main/botorch/models/model.py#L143). The purpose of this method is to produce arguments to a particular model from a standardized set of inputs passed to BoTorch `Model`-s from [`Surrogate.construct`](https://github.com/facebook/Ax/blob/main/ax/models/torch/botorch_modular/surrogate.py#L148) in Ax. It should accept training data in form of a `SupervisedDataset` container and optionally other keyword arguments and produce a dictionary of arguments to `__init__` of the `Model`. See [`SingleTaskMultiFidelityGP.construct_inputs`](https://github.com/pytorch/botorch/blob/5b3172f3daa22f6ea2f6f4d1d0a378a9518dcd8d/botorch/models/gp_regression_fidelity.py#L131) for an example.\n", - "2. Pass any additional needed keyword arguments for the `Model` constructor (that cannot be constructed from the training data and other arguments to `construct_inputs`) via `model_options` argument to `Surrogate`." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "id": "dynamic-university", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "6c2ea955-c7a4-42ff-a4d7-f787113d4d53" - }, - "outputs": [], - "source": [ - "from botorch.models.model import Model\n", - "from botorch.utils.datasets import SupervisedDataset\n", - "\n", - "\n", - "class MyModelClass(Model):\n", - "\n", - " ... # Implementation of `MyModelClass`\n", - "\n", - " @classmethod\n", - " def construct_inputs(\n", - " cls, training_data: SupervisedDataset, **kwargs\n", - " ) -> Dict[str, Any]:\n", - " fidelity_features = kwargs.get(\"fidelity_features\")\n", - " if fidelity_features is None:\n", - " raise ValueError(f\"Fidelity features required for {cls.__name__}.\")\n", - "\n", - " return {\n", - " **super().construct_inputs(training_data=training_data, **kwargs),\n", - " \"fidelity_features\": fidelity_features,\n", - " }\n", - "\n", - "\n", - "surrogate = Surrogate(\n", - " botorch_model_class=MyModelClass, # Must implement `construct_inputs`\n", - " # Optional dict of additional keyword arguments to `MyModelClass`\n", - " model_options={},\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "otherwise-context", - "metadata": { - "originalKey": "b9072296-956d-4add-b1f6-e7e0415ba65c" - }, - "source": [ - "NOTE: if you run into a case where base `Surrogate` does not work with your BoTorch `Model`, please let us know in this Github issue: https://github.com/facebook/Ax/issues/363, so we can find the right solution and augment this tutorial." - ] - }, - { - "cell_type": "markdown", - "id": "northern-invite", - "metadata": { - "originalKey": "335cabdf-2bf6-48e8-ba0c-1404a8ef47f9" - }, - "source": [ - "### 3B. Using an arbitrary BoTorch `AcquisitionFunction` in Ax" - ] - }, - { - "cell_type": "markdown", - "id": "surrounded-denial", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "e3f0c788-2131-4116-9518-4ae7daeb991f", - "showInput": false - }, - "source": [ - "Steps to set up any `AcquisitionFunction` in Ax are:\n", - "1. Define an input constructor function. The purpose of this method is to produce arguments to a acquisition function from a standardized set of inputs passed to BoTorch `AcquisitionFunction`-s from `Acquisition.__init__` in Ax. For example, see [`construct_inputs_qEHVI`](https://github.com/pytorch/botorch/blob/main/botorch/acquisition/input_constructors.py#L477), which creates a fairly complex set of arguments needed by `qExpectedHypervolumeImprovement` –– a popular multi-objective optimization acquisition function offered in Ax and BoTorch. For more examples, see this collection in BoTorch: [botorch/acquisition/input_constructors.py](https://github.com/pytorch/botorch/blob/main/botorch/acquisition/input_constructors.py) \n", - " 1. Note that the new input constructor needs to be decorated with `@acqf_input_constructor(AcquisitionFunctionClass)` to register it.\n", - "2. (Optional) If a given `AcquisitionFunction` requires specific options passed to the BoTorch `optimize_acqf`, it's possible to add default optimizer options for a given `AcquisitionFunction` to avoid always manually passing them via `acquisition_options`.\n", - "3. Specify the BoTorch `AcquisitionFunction` class as `botorch_acqf_class` to `BoTorchModel`\n", - "4. (Optional) Pass any additional keyword arguments to acquisition function constructor or to the optimizer function via `acquisition_options` argument to `BoTorchModel`." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "id": "interested-search", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "6967ce3e-929b-4d9a-8cd1-72bf94f0be3a" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from ax.models.torch.botorch_modular.optimizer_argparse import optimizer_argparse\n", - "from botorch.acquisition.acquisition import AcquisitionFunction\n", - "from botorch.acquisition.input_constructors import MaybeDict, acqf_input_constructor\n", - "from botorch.utils.datasets import SupervisedDataset\n", - "from torch import Tensor\n", - "\n", - "\n", - "class MyAcquisitionFunctionClass(AcquisitionFunction):\n", - " ... # Actual contents of the acquisition function class.\n", - "\n", - "\n", - "# 1. Add input constructor\n", - "@acqf_input_constructor(MyAcquisitionFunctionClass)\n", - "def construct_inputs_my_acqf(\n", - " model: Model,\n", - " training_data: MaybeDict[SupervisedDataset],\n", - " objective_thresholds: Tensor,\n", - " **kwargs: Any,\n", - ") -> Dict[str, Any]:\n", - " pass\n", - "\n", - "\n", - "# 2. Register default optimizer options\n", - "@optimizer_argparse.register(MyAcquisitionFunctionClass)\n", - "def _argparse_my_acqf(\n", - " acqf: MyAcquisitionFunctionClass, sequential: bool = True\n", - ") -> dict:\n", - " return {\n", - " \"sequential\": sequential\n", - " } # default to sequentially optimizing batches of queries\n", - "\n", - "\n", - "# 3-4. Specifying `botorch_acqf_class` and `acquisition_options`\n", - "BoTorchModel(\n", - " botorch_acqf_class=MyAcquisitionFunctionClass,\n", - " acquisition_options={\n", - " \"alpha\": 10**-6,\n", - " # The sub-dict by the key \"optimizer_options\" can be passed\n", - " # to propagate options to `optimize_acqf`, used in\n", - " # `Acquisition.optimize`, to add/override the default\n", - " # optimizer options registered above.\n", - " \"optimizer_options\": {\"sequential\": False},\n", - " },\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "metallic-imaging", - "metadata": { - "originalKey": "29256ab1-f214-4604-a423-4c7b4b36baa0" - }, - "source": [ - "See section 2A for combining the resulting `Surrogate` instance and `Acquisition` type into a `BoTorchModel`. You can also leverage `Models.BOTORCH_MODULAR` for ease of use; more on it in section 4 below or in section 1 quick-start example." - ] - }, - { - "cell_type": "markdown", - "id": "descending-australian", - "metadata": { - "originalKey": "1d15082f-1df7-4cdb-958b-300483eb7808" - }, - "source": [ - "## 4. Using `Models.BOTORCH_MODULAR` \n", - "\n", - "To simplify the instantiation of an Ax ModelBridge and its undelying Model, Ax provides a [`Models` registry enum](https://github.com/facebook/Ax/blob/main/ax/modelbridge/registry.py#L355). When calling entries of that enum (e.g. `Models.BOTORCH_MODULAR(experiment, data)`), the inputs are automatically distributed between a `Model` and a `ModelBridge` for a given setup. A call to a `Model` enum member yields a model bridge with an underlying model, ready for use to generate candidates.\n", - "\n", - "Here we use `Models.BOTORCH_MODULAR` to set up a model with all-default subcomponents:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "id": "attached-border", - "metadata": { - "originalKey": "385b2f30-fd86-4d88-8784-f238ea8a6abb" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 06-07 16:00:43] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" - ] - }, - { - "data": { - "text/plain": [ - "GeneratorRun(1 arms, total weight 1.0)" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_bridge_with_GPEI = Models.BOTORCH_MODULAR(\n", - " experiment=experiment,\n", - " data=data,\n", - ")\n", - "model_bridge_with_GPEI.gen(1)" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "id": "powerful-gamma", - "metadata": { - "originalKey": "89930a31-e058-434b-b587-181931e247b6" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "botorch.acquisition.monte_carlo.qNoisyExpectedImprovement" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_bridge_with_GPEI.model.botorch_acqf_class" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "id": "improved-replication", - "metadata": { - "originalKey": "f9a9cb14-20c3-4e1d-93a3-6a35c281ae01" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "botorch.models.gp_regression.FixedNoiseGP" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_bridge_with_GPEI.model.surrogate.botorch_model_class" - ] - }, - { - "cell_type": "markdown", - "id": "connected-sheet", - "metadata": { - "originalKey": "8b6a9ddc-d2d2-4cd5-a6a8-820113f78262" - }, - "source": [ - "We can use the same `Models.BOTORCH_MODULAR` to set up a model for multi-objective optimization:" - ] - }, + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "about-preview", + "metadata": { + "originalKey": "cca773d8-5e94-4b5a-ae54-22295be8936a" + }, + "outputs": [], + "source": [ + "from typing import Any, Dict, Optional, Tuple, Type\n", + "\n", + "from ax.modelbridge.registry import Cont_X_trans, Models, Y_trans\n", + "\n", + "# Ax data tranformation layer\n", + "from ax.modelbridge.torch import TorchModelBridge\n", + "from ax.models.torch.botorch_modular.acquisition import Acquisition\n", + "\n", + "# Ax wrappers for BoTorch components\n", + "from ax.models.torch.botorch_modular.model import BoTorchModel\n", + "from ax.models.torch.botorch_modular.surrogate import Surrogate\n", + "\n", + "# Experiment examination utilities\n", + "from ax.service.utils.report_utils import exp_to_df\n", + "\n", + "# Test Ax objects\n", + "from ax.utils.testing.core_stubs import (\n", + " get_branin_data,\n", + " get_branin_data_multi_objective,\n", + " get_branin_experiment,\n", + " get_branin_experiment_with_multi_objective,\n", + ")\n", + "from botorch.acquisition.monte_carlo import (\n", + " qExpectedImprovement,\n", + " qNoisyExpectedImprovement,\n", + ")\n", + "from botorch.models.gp_regression import FixedNoiseGP\n", + "\n", + "# BoTorch components\n", + "from botorch.models.model import Model\n", + "from gpytorch.mlls.exact_marginal_log_likelihood import ExactMarginalLogLikelihood" + ] + }, + { + "cell_type": "markdown", + "id": "northern-affairs", + "metadata": { + "originalKey": "58ea5ebf-ff3a-40b4-8be3-1b85c99d1c4a" + }, + "source": [ + "# Setup and Usage of BoTorch Models in Ax\n", + "\n", + "Ax provides a set of flexible wrapper abstractions to mix-and-match BoTorch components like `Model` and `AcquisitionFunction` and combine them into a single `Model` object in Ax. The wrapper abstractions: `Surrogate`, `Acquisition`, and `BoTorchModel` – are located in `ax/models/torch/botorch_modular` directory and aim to encapsulate boilerplate code that interfaces between Ax and BoTorch. This functionality is in beta-release and still evolving.\n", + "\n", + "This tutorial walks through setting up a custom combination of BoTorch components in Ax in following steps:\n", + "\n", + "1. **Quick-start example of `BoTorchModel` use**\n", + "1. **`BoTorchModel` = `Surrogate` + `Acquisition` (overview)**\n", + " 1. Example with minimal options that uses the defaults\n", + " 2. Example showing all possible options\n", + " 3. Surrogate and Acquisition Q&A\n", + "2. **I know which Botorch Model and AcquisitionFunction I'd like to combine in Ax. How do set this up?**\n", + " 1. Making a `Surrogate` from BoTorch `Model`\n", + " 2. Using an arbitrary BoTorch `AcquisitionFunction` in Ax\n", + "3. **Using `Models.BOTORCH_MODULAR`** (convenience wrapper that enables storage and resumability)\n", + "4. **Utilizing `BoTorchModel` in generation strategies** (abstraction that allows to chain models together and use them in Ax Service API etc.)\n", + " 1. Specifying `pending_observations` to avoid the model re-suggesting points that are part of `RUNNING` or `ABANDONED` trials.\n", + "5. **Customizing a `Surrogate` or `Acquisition`** (for cases where existing subcomponent classes are not sufficient)" + ] + }, + { + "cell_type": "markdown", + "id": "pending-support", + "metadata": { + "originalKey": "c06d1b5c-067d-4618-977e-c8269a98bd0a" + }, + "source": [ + "## 1. Quick-start example\n", + "\n", + "Here we set up a `BoTorchModel` with `FixedNoiseGP` with `qNoisyExpectedImprovement`, one of the most popular combinations in Ax:" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "parental-sending", + "metadata": { + "originalKey": "72934cf2-4ecf-483a-93bd-4df88b19a7b8" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 13, - "id": "documentary-jurisdiction", - "metadata": { - "originalKey": "8001de33-d9d9-4888-a5d1-7a59ebeccfd5" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 06-07 16:00:43] ax.core.experiment: The is_test flag has been set to True. This flag is meant purely for development and integration testing purposes. If you are running a live experiment, please set this flag to False\n", - "[INFO 06-07 16:00:43] ax.modelbridge.transforms.standardize_y: Outcome branin_a is constant, within tolerance.\n", - "[INFO 06-07 16:00:43] ax.modelbridge.transforms.standardize_y: Outcome branin_b is constant, within tolerance.\n", - "/Users/santorella/repos/botorch/botorch/optim/initializers.py:403: BadInitialCandidatesWarning: Unable to find non-zero acquisition function values - initial conditions are being selected randomly.\n", - " warnings.warn(\n" - ] - }, - { - "data": { - "text/plain": [ - "GeneratorRun(1 arms, total weight 1.0)" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_bridge_with_EHVI = Models.BOTORCH_MODULAR(\n", - " experiment=get_branin_experiment_with_multi_objective(\n", - " has_objective_thresholds=True, with_batch=True\n", - " ),\n", - " data=get_branin_data_multi_objective(),\n", - ")\n", - "model_bridge_with_EHVI.gen(1)" - ] - }, + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 06-07 16:00:42] ax.core.experiment: The is_test flag has been set to True. This flag is meant purely for development and integration testing purposes. If you are running a live experiment, please set this flag to False\n" + ] + } + ], + "source": [ + "experiment = get_branin_experiment(with_trial=True)\n", + "data = get_branin_data(trials=[experiment.trials[0]])" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "rough-somerset", + "metadata": { + "originalKey": "e571212c-7872-4ebc-b646-8dad8d4266fd" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 14, - "id": "changed-maintenance", - "metadata": { - "originalKey": "dcfdbecc-4a9a-49ac-ad55-0bc04b2ec566" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "botorch.acquisition.multi_objective.monte_carlo.qNoisyExpectedHypervolumeImprovement" - ] - }, - "execution_count": 14, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_bridge_with_EHVI.model.botorch_acqf_class" - ] - }, + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 06-07 16:00:42] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" + ] + } + ], + "source": [ + "# `Models` automatically selects a model + model bridge combination.\n", + "# For `BOTORCH_MODULAR`, it will select `BoTorchModel` and `TorchModelBridge`.\n", + "model_bridge_with_GPEI = Models.BOTORCH_MODULAR(\n", + " experiment=experiment,\n", + " data=data,\n", + " surrogate=Surrogate(FixedNoiseGP), # Optional, will use default if unspecified\n", + " botorch_acqf_class=qNoisyExpectedImprovement, # Optional, will use default if unspecified\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "hairy-wiring", + "metadata": { + "originalKey": "fba91372-7aa6-456d-a22b-78ab30c26cd8" + }, + "source": [ + "Now we can use this model to generate candidates (`gen`), predict outcome at a point (`predict`), or evaluate acquisition function value at a given point (`evaluate_acquisition_function`)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "consecutive-summary", + "metadata": { + "originalKey": "59582fc6-8089-4320-864e-d98ee271d4f7" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 15, - "id": "operating-shelf", - "metadata": { - "originalKey": "16727a51-337d-4715-bf51-9cb6637a950f" - }, - "outputs": [ - { - "data": { - "text/plain": [ - "botorch.models.gp_regression.FixedNoiseGP" - ] - }, - "execution_count": 15, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "model_bridge_with_EHVI.model.surrogate.botorch_model_class" + "data": { + "text/plain": [ + "Arm(parameters={'x1': 10.0, 'x2': 0.0})" ] - }, + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "generator_run = model_bridge_with_GPEI.gen(n=1)\n", + "generator_run.arms[0]" + ] + }, + { + "cell_type": "markdown", + "id": "diverse-richards", + "metadata": { + "originalKey": "8cfe0fa9-8cce-4718-ba43-e8a63744d626" + }, + "source": [ + "-----\n", + "Before you read the rest of this tutorial:\n", + "\n", + "- Note that the concept of ‘model’ is Ax is somewhat a misnomer; we use ['model'](https://ax.dev/docs/glossary.html#model) to refer to an optimization setup capable of producing candidate points for optimization (and often capable of being fit to data, with exception for quasi-random generators). See [Models documentation page](https://ax.dev/docs/models.html) for more information.\n", + "- Learn about `ModelBridge` in Ax, as users should rarely be interacting with a `Model` object directly (more about ModelBridge, a data transformation layer in Ax, [here](https://ax.dev/docs/models.html#deeper-dive-organization-of-the-modeling-stack))." + ] + }, + { + "cell_type": "markdown", + "id": "grand-committee", + "metadata": { + "originalKey": "7037fd14-bcfe-44f9-b915-c23915d2bda9" + }, + "source": [ + "## 2. BoTorchModel = Surrogate + Acquisition\n", + "\n", + "A `BoTorchModel` in Ax consists of two main subcomponents: a surrogate model and an acquisition function. A surrogate model is represented as an instance of Ax’s `Surrogate` class, which is a wrapper around BoTorch's `Model` class. The acquisition function is represented as an instance of Ax’s `Acquisition` class, a wrapper around BoTorch's `AcquisitionFunction` class." + ] + }, + { + "cell_type": "markdown", + "id": "thousand-blanket", + "metadata": { + "originalKey": "08b12c6c-14da-4342-95bd-f607a131ce9d" + }, + "source": [ + "### 2A. Example that uses defaults and requires no options\n", + "\n", + "BoTorchModel does not always require surrogate and acquisition specification. If instantiated without one or both components specified, defaults are selected based on properties of experiment and data (see Appendix 2 for auto-selection logic)." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "changing-xerox", + "metadata": { + "originalKey": "b1bca702-07b2-4818-b2b9-2107268c383c" + }, + "outputs": [], + "source": [ + "# The surrogate is not specified, so it will be auto-selected\n", + "# during `model.fit`.\n", + "GPEI_model = BoTorchModel(botorch_acqf_class=qExpectedImprovement)\n", + "\n", + "# The acquisition class is not specified, so it will be\n", + "# auto-selected during `model.gen` or `model.evaluate_acquisition`\n", + "GPEI_model = BoTorchModel(surrogate=Surrogate(FixedNoiseGP))\n", + "\n", + "# Both the surrogate and acquisition class will be auto-selected.\n", + "GPEI_model = BoTorchModel()" + ] + }, + { + "cell_type": "markdown", + "id": "lovely-mechanics", + "metadata": { + "originalKey": "5cec0f06-ae2c-47d3-bd95-441c45762e38" + }, + "source": [ + "### 2B. Example with all the options\n", + "Below are the full set of configurable settings of a `BoTorchModel` with their descriptions:" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "twenty-greek", + "metadata": { + "originalKey": "25b13c48-edb0-4b3f-ba34-4f4a4176162a" + }, + "outputs": [], + "source": [ + "model = BoTorchModel(\n", + " # Optional `Surrogate` specification to use instead of default\n", + " surrogate=Surrogate(\n", + " # BoTorch `Model` type\n", + " botorch_model_class=FixedNoiseGP,\n", + " # Optional, MLL class with which to optimize model parameters\n", + " mll_class=ExactMarginalLogLikelihood,\n", + " # Optional, dictionary of keyword arguments to underlying\n", + " # BoTorch `Model` constructor\n", + " model_options={},\n", + " ),\n", + " # Optional BoTorch `AcquisitionFunction` to use instead of default\n", + " botorch_acqf_class=qExpectedImprovement,\n", + " # Optional dict of keyword arguments, passed to the input\n", + " # constructor for the given BoTorch `AcquisitionFunction`\n", + " acquisition_options={},\n", + " # Optional Ax `Acquisition` subclass (if the given BoTorch\n", + " # `AcquisitionFunction` requires one, which is rare)\n", + " acquisition_class=None,\n", + " # Less common model settings shown with default values, refer\n", + " # to `BoTorchModel` documentation for detail\n", + " refit_on_update=True,\n", + " refit_on_cv=False,\n", + " warm_start_refit=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "fourth-material", + "metadata": { + "originalKey": "db0feafe-8af9-40a3-9f67-72c7d1fd808e" + }, + "source": [ + "## 2C. `Surrogate` and `Acquisition` Q&A\n", + "\n", + "**Why is the `surrogate` argument expected to be an instance, but `botorch_acqf_class` –– a class?** Because a BoTorch `AcquisitionFunction` object (and therefore its Ax wrapper, `Acquisition`) is ephemeral: it is constructed, immediately used, and destroyed during `BoTorchModel.gen`, so there is no reason to keep around an `Acquisition` instance. A `Surrogate`, on another hand, is kept in memory as long as its parent `BoTorchModel` is.\n", + "\n", + "**How to know when to use specify acquisition_class (and thereby a non-default Acquisition type) instead of just passing in botorch_acqf_class?** In short, custom `Acquisition` subclasses are needed when a given `AcquisitionFunction` in BoTorch needs some non-standard subcomponents or inputs (e.g. a custom BoTorch `MCAcquisitionObjective`). \n", + "\n", + "**Please post any other questions you have to our dedicated issue on Github: https://github.com/facebook/Ax/issues/363.** This functionality is in beta-release and your feedback will be of great help to us!" + ] + }, + { + "cell_type": "markdown", + "id": "violent-course", + "metadata": { + "originalKey": "86018ee5-f7b8-41ae-8e2d-460fe5f0c15b" + }, + "source": [ + "## 3. I know which Botorch `Model` and `AcquisitionFunction` I'd like to combine in Ax. How do set this up?" + ] + }, + { + "cell_type": "markdown", + "id": "unlike-football", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "b29a846d-d7bc-4143-8318-10170c9b4298", + "showInput": false + }, + "source": [ + "### 3a. Making a `Surrogate` from BoTorch `Model`:\n", + "Most models should work with base `Surrogate` in Ax, except for BoTorch `ModelListGP`. `ModelListGP` is a special case because its purpose is to combine multiple sub-models into a single `Model` in BoTorch. It is most commonly used for multi-objective and constrained optimization. Whether or not `ModelListGP` is used is determined automatically based on the `Model` class and the data being used via the `ax.models.torch.botorch_modular.utils.use_model_list` function.\n", + "\n", + "If your `Model` is not a `ModelListGP`, the steps to set it up as a `Surrogate` are:\n", + "1. Implement a [`construct_inputs` class method](https://github.com/pytorch/botorch/blob/main/botorch/models/model.py#L143). The purpose of this method is to produce arguments to a particular model from a standardized set of inputs passed to BoTorch `Model`-s from [`Surrogate.construct`](https://github.com/facebook/Ax/blob/main/ax/models/torch/botorch_modular/surrogate.py#L148) in Ax. It should accept training data in form of a `SupervisedDataset` container and optionally other keyword arguments and produce a dictionary of arguments to `__init__` of the `Model`. See [`SingleTaskMultiFidelityGP.construct_inputs`](https://github.com/pytorch/botorch/blob/5b3172f3daa22f6ea2f6f4d1d0a378a9518dcd8d/botorch/models/gp_regression_fidelity.py#L131) for an example.\n", + "2. Pass any additional needed keyword arguments for the `Model` constructor (that cannot be constructed from the training data and other arguments to `construct_inputs`) via `model_options` argument to `Surrogate`." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "dynamic-university", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "6c2ea955-c7a4-42ff-a4d7-f787113d4d53" + }, + "outputs": [], + "source": [ + "from botorch.models.model import Model\n", + "from botorch.utils.datasets import SupervisedDataset\n", + "\n", + "\n", + "class MyModelClass(Model):\n", + "\n", + " ... # Implementation of `MyModelClass`\n", + "\n", + " @classmethod\n", + " def construct_inputs(\n", + " cls, training_data: SupervisedDataset, **kwargs\n", + " ) -> Dict[str, Any]:\n", + " fidelity_features = kwargs.get(\"fidelity_features\")\n", + " if fidelity_features is None:\n", + " raise ValueError(f\"Fidelity features required for {cls.__name__}.\")\n", + "\n", + " return {\n", + " **super().construct_inputs(training_data=training_data, **kwargs),\n", + " \"fidelity_features\": fidelity_features,\n", + " }\n", + "\n", + "\n", + "surrogate = Surrogate(\n", + " botorch_model_class=MyModelClass, # Must implement `construct_inputs`\n", + " # Optional dict of additional keyword arguments to `MyModelClass`\n", + " model_options={},\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "otherwise-context", + "metadata": { + "originalKey": "b9072296-956d-4add-b1f6-e7e0415ba65c" + }, + "source": [ + "NOTE: if you run into a case where base `Surrogate` does not work with your BoTorch `Model`, please let us know in this Github issue: https://github.com/facebook/Ax/issues/363, so we can find the right solution and augment this tutorial." + ] + }, + { + "cell_type": "markdown", + "id": "northern-invite", + "metadata": { + "originalKey": "335cabdf-2bf6-48e8-ba0c-1404a8ef47f9" + }, + "source": [ + "### 3B. Using an arbitrary BoTorch `AcquisitionFunction` in Ax" + ] + }, + { + "cell_type": "markdown", + "id": "surrounded-denial", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "e3f0c788-2131-4116-9518-4ae7daeb991f", + "showInput": false + }, + "source": [ + "Steps to set up any `AcquisitionFunction` in Ax are:\n", + "1. Define an input constructor function. The purpose of this method is to produce arguments to a acquisition function from a standardized set of inputs passed to BoTorch `AcquisitionFunction`-s from `Acquisition.__init__` in Ax. For example, see [`construct_inputs_qEHVI`](https://github.com/pytorch/botorch/blob/main/botorch/acquisition/input_constructors.py#L477), which creates a fairly complex set of arguments needed by `qExpectedHypervolumeImprovement` –– a popular multi-objective optimization acquisition function offered in Ax and BoTorch. For more examples, see this collection in BoTorch: [botorch/acquisition/input_constructors.py](https://github.com/pytorch/botorch/blob/main/botorch/acquisition/input_constructors.py) \n", + " 1. Note that the new input constructor needs to be decorated with `@acqf_input_constructor(AcquisitionFunctionClass)` to register it.\n", + "2. (Optional) If a given `AcquisitionFunction` requires specific options passed to the BoTorch `optimize_acqf`, it's possible to add default optimizer options for a given `AcquisitionFunction` to avoid always manually passing them via `acquisition_options`.\n", + "3. Specify the BoTorch `AcquisitionFunction` class as `botorch_acqf_class` to `BoTorchModel`\n", + "4. (Optional) Pass any additional keyword arguments to acquisition function constructor or to the optimizer function via `acquisition_options` argument to `BoTorchModel`." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "interested-search", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "6967ce3e-929b-4d9a-8cd1-72bf94f0be3a" + }, + "outputs": [ { - "cell_type": "markdown", - "id": "fatal-butterfly", - "metadata": { - "originalKey": "5c64eecc-5ce5-4907-bbcc-5b3cbf4358ae" - }, - "source": [ - "Furthermore, the quick-start example at the top of this tutorial shows how to specify surrogate and acquisition subcomponents to `Models.BOTORCH_MODULAR`. " + "data": { + "text/plain": [ + "" ] - }, + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from ax.models.torch.botorch_modular.optimizer_argparse import optimizer_argparse\n", + "from botorch.acquisition.acquisition import AcquisitionFunction\n", + "from botorch.acquisition.input_constructors import MaybeDict, acqf_input_constructor\n", + "from botorch.utils.datasets import SupervisedDataset\n", + "from torch import Tensor\n", + "\n", + "\n", + "class MyAcquisitionFunctionClass(AcquisitionFunction):\n", + " ... # Actual contents of the acquisition function class.\n", + "\n", + "\n", + "# 1. Add input constructor\n", + "@acqf_input_constructor(MyAcquisitionFunctionClass)\n", + "def construct_inputs_my_acqf(\n", + " model: Model,\n", + " training_data: MaybeDict[SupervisedDataset],\n", + " objective_thresholds: Tensor,\n", + " **kwargs: Any,\n", + ") -> Dict[str, Any]:\n", + " pass\n", + "\n", + "\n", + "# 2. Register default optimizer options\n", + "@optimizer_argparse.register(MyAcquisitionFunctionClass)\n", + "def _argparse_my_acqf(\n", + " acqf: MyAcquisitionFunctionClass, sequential: bool = True\n", + ") -> dict:\n", + " return {\n", + " \"sequential\": sequential\n", + " } # default to sequentially optimizing batches of queries\n", + "\n", + "\n", + "# 3-4. Specifying `botorch_acqf_class` and `acquisition_options`\n", + "BoTorchModel(\n", + " botorch_acqf_class=MyAcquisitionFunctionClass,\n", + " acquisition_options={\n", + " \"alpha\": 10**-6,\n", + " # The sub-dict by the key \"optimizer_options\" can be passed\n", + " # to propagate options to `optimize_acqf`, used in\n", + " # `Acquisition.optimize`, to add/override the default\n", + " # optimizer options registered above.\n", + " \"optimizer_options\": {\"sequential\": False},\n", + " },\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "metallic-imaging", + "metadata": { + "originalKey": "29256ab1-f214-4604-a423-4c7b4b36baa0" + }, + "source": [ + "See section 2A for combining the resulting `Surrogate` instance and `Acquisition` type into a `BoTorchModel`. You can also leverage `Models.BOTORCH_MODULAR` for ease of use; more on it in section 4 below or in section 1 quick-start example." + ] + }, + { + "cell_type": "markdown", + "id": "descending-australian", + "metadata": { + "originalKey": "1d15082f-1df7-4cdb-958b-300483eb7808" + }, + "source": [ + "## 4. Using `Models.BOTORCH_MODULAR` \n", + "\n", + "To simplify the instantiation of an Ax ModelBridge and its undelying Model, Ax provides a [`Models` registry enum](https://github.com/facebook/Ax/blob/main/ax/modelbridge/registry.py#L355). When calling entries of that enum (e.g. `Models.BOTORCH_MODULAR(experiment, data)`), the inputs are automatically distributed between a `Model` and a `ModelBridge` for a given setup. A call to a `Model` enum member yields a model bridge with an underlying model, ready for use to generate candidates.\n", + "\n", + "Here we use `Models.BOTORCH_MODULAR` to set up a model with all-default subcomponents:" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "attached-border", + "metadata": { + "originalKey": "385b2f30-fd86-4d88-8784-f238ea8a6abb" + }, + "outputs": [ { - "cell_type": "markdown", - "id": "hearing-interface", - "metadata": { - "originalKey": "a0163432-f0ca-4582-ad84-16c77c99f20b" - }, - "source": [ - "## 5. Utilizing `BoTorchModel` in generation strategies\n", - "\n", - "Generation strategy is a key concept in Ax, enabling use of Service API (a.k.a. `AxClient`) and many other higher-level abstractions. A `GenerationStrategy` allows to chain multiple models in Ax and thereby automate candidate generation. Refer to the \"Generation Strategy\" tutorial for more detail in generation strategies.\n", - "\n", - "An example generation stategy with the modular `BoTorchModel` would look like this:" - ] + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 06-07 16:00:43] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" + ] }, { - "cell_type": "code", - "execution_count": 16, - "id": "received-registration", - "metadata": { - "originalKey": "f7eabbcf-607c-4bed-9a0e-6ac6e8b04350" - }, - "outputs": [], - "source": [ - "from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy\n", - "from botorch.acquisition import UpperConfidenceBound\n", - "from ax.modelbridge.modelbridge_utils import get_pending_observation_features\n", - "\n", - "gs = GenerationStrategy(\n", - " steps=[\n", - " GenerationStep( # Initialization step\n", - " # Which model to use for this step\n", - " model=Models.SOBOL,\n", - " # How many generator runs (each of which is then made a trial)\n", - " # to produce with this step\n", - " num_trials=5,\n", - " # How many trials generated from this step must be `COMPLETED`\n", - " # before the next one\n", - " min_trials_observed=5,\n", - " ),\n", - " GenerationStep( # BayesOpt step\n", - " model=Models.BOTORCH_MODULAR,\n", - " # No limit on how many generator runs will be produced\n", - " num_trials=-1,\n", - " model_kwargs={ # Kwargs to pass to `BoTorchModel.__init__`\n", - " \"surrogate\": Surrogate(FixedNoiseGP),\n", - " \"botorch_acqf_class\": qNoisyExpectedImprovement,\n", - " },\n", - " ),\n", - " ]\n", - ")" + "data": { + "text/plain": [ + "GeneratorRun(1 arms, total weight 1.0)" ] - }, + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_bridge_with_GPEI = Models.BOTORCH_MODULAR(\n", + " experiment=experiment,\n", + " data=data,\n", + ")\n", + "model_bridge_with_GPEI.gen(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "powerful-gamma", + "metadata": { + "originalKey": "89930a31-e058-434b-b587-181931e247b6" + }, + "outputs": [ { - "cell_type": "markdown", - "id": "logical-windsor", - "metadata": { - "originalKey": "212c4543-220e-4605-8f72-5f86cf52f722" - }, - "source": [ - "Set up an experiment and generate 10 trials in it, adding synthetic data to experiment after each one:" + "data": { + "text/plain": [ + "botorch.acquisition.monte_carlo.qNoisyExpectedImprovement" ] - }, + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_bridge_with_GPEI.model.botorch_acqf_class" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "improved-replication", + "metadata": { + "originalKey": "f9a9cb14-20c3-4e1d-93a3-6a35c281ae01" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 17, - "id": "viral-cheese", - "metadata": { - "originalKey": "30cfcdd7-721d-4f89-b851-7a94140dfad6" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 06-07 16:00:44] ax.core.experiment: The is_test flag has been set to True. This flag is meant purely for development and integration testing purposes. If you are running a live experiment, please set this flag to False\n" - ] - }, - { - "data": { - "text/plain": [ - "SearchSpace(parameters=[RangeParameter(name='x1', parameter_type=FLOAT, range=[-5.0, 10.0]), RangeParameter(name='x2', parameter_type=FLOAT, range=[0.0, 15.0])], parameter_constraints=[])" - ] - }, - "execution_count": 17, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "experiment = get_branin_experiment(minimize=True)\n", - "\n", - "assert len(experiment.trials) == 0\n", - "experiment.search_space" + "data": { + "text/plain": [ + "botorch.models.gp_regression.FixedNoiseGP" ] - }, + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_bridge_with_GPEI.model.surrogate.botorch_model_class" + ] + }, + { + "cell_type": "markdown", + "id": "connected-sheet", + "metadata": { + "originalKey": "8b6a9ddc-d2d2-4cd5-a6a8-820113f78262" + }, + "source": [ + "We can use the same `Models.BOTORCH_MODULAR` to set up a model for multi-objective optimization:" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "documentary-jurisdiction", + "metadata": { + "originalKey": "8001de33-d9d9-4888-a5d1-7a59ebeccfd5" + }, + "outputs": [ { - "cell_type": "markdown", - "id": "incident-newspaper", - "metadata": { - "originalKey": "2807d7ce-8a6b-423c-b5f5-32edba09c78e" - }, - "source": [ - "## 5a. Specifying `pending_observations`\n", - "Note that it's important to **specify pending observations** to the call to `gen` to avoid getting the same points re-suggested. Without `pending_observations` argument, Ax models are not aware of points that should be excluded from generation. Points are considered \"pending\" when they belong to `STAGED`, `RUNNING`, or `ABANDONED` trials (with the latter included so model does not re-suggest points that are considered \"bad\" and should not be re-suggested).\n", - "\n", - "If the call to `get_pending_observation_features` becomes slow in your setup (since it performs data-fetching etc.), you can opt for `get_pending_observation_features_based_on_trial_status` (also from `ax.modelbridge.modelbridge_utils`), but note the limitations of that utility (detailed in its docstring)." - ] + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 06-07 16:00:43] ax.core.experiment: The is_test flag has been set to True. This flag is meant purely for development and integration testing purposes. If you are running a live experiment, please set this flag to False\n", + "[INFO 06-07 16:00:43] ax.modelbridge.transforms.standardize_y: Outcome branin_a is constant, within tolerance.\n", + "[INFO 06-07 16:00:43] ax.modelbridge.transforms.standardize_y: Outcome branin_b is constant, within tolerance.\n", + "/Users/santorella/repos/botorch/botorch/optim/initializers.py:403: BadInitialCandidatesWarning: Unable to find non-zero acquisition function values - initial conditions are being selected randomly.\n", + " warnings.warn(\n" + ] }, { - "cell_type": "code", - "execution_count": 18, - "id": "casual-spread", - "metadata": { - "originalKey": "58aafd65-a366-4b66-a1b1-31b207037a2e" - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Completed trial #0, suggested by Sobol.\n", - "Completed trial #1, suggested by Sobol.\n", - "Completed trial #2, suggested by Sobol.\n", - "Completed trial #3, suggested by Sobol.\n", - "Completed trial #4, suggested by Sobol.\n", - "Completed trial #5, suggested by BoTorch.\n", - "Completed trial #6, suggested by BoTorch.\n", - "Completed trial #7, suggested by BoTorch.\n", - "Completed trial #8, suggested by BoTorch.\n", - "Completed trial #9, suggested by BoTorch.\n" - ] - } - ], - "source": [ - "for _ in range(10):\n", - " # Produce a new generator run and attach it to experiment as a trial\n", - " generator_run = gs.gen(\n", - " experiment=experiment,\n", - " n=1,\n", - " pending_observations=get_pending_observation_features(experiment=experiment),\n", - " )\n", - " trial = experiment.new_trial(generator_run)\n", - "\n", - " # Mark the trial as 'RUNNING' so we can mark it 'COMPLETED' later\n", - " trial.mark_running(no_runner_required=True)\n", - "\n", - " # Attach data for the new trial and mark it 'COMPLETED'\n", - " experiment.attach_data(get_branin_data(trials=[trial]))\n", - " trial.mark_completed()\n", - "\n", - " print(f\"Completed trial #{trial.index}, suggested by {generator_run._model_key}.\")" + "data": { + "text/plain": [ + "GeneratorRun(1 arms, total weight 1.0)" ] - }, + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_bridge_with_EHVI = Models.BOTORCH_MODULAR(\n", + " experiment=get_branin_experiment_with_multi_objective(\n", + " has_objective_thresholds=True, with_batch=True\n", + " ),\n", + " data=get_branin_data_multi_objective(),\n", + ")\n", + "model_bridge_with_EHVI.gen(1)" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "changed-maintenance", + "metadata": { + "originalKey": "dcfdbecc-4a9a-49ac-ad55-0bc04b2ec566" + }, + "outputs": [ { - "cell_type": "markdown", - "id": "circular-vermont", - "metadata": { - "originalKey": "9d3b86bf-b691-4315-8b8f-60504b37818c" - }, - "source": [ - "Now we examine the experiment and observe the trials that were added to it and produced by the generation strategy:" + "data": { + "text/plain": [ + "botorch.acquisition.multi_objective.monte_carlo.qNoisyExpectedHypervolumeImprovement" ] - }, + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_bridge_with_EHVI.model.botorch_acqf_class" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "operating-shelf", + "metadata": { + "originalKey": "16727a51-337d-4715-bf51-9cb6637a950f" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 19, - "id": "significant-particular", - "metadata": { - "originalKey": "ca12913d-e3fd-4617-a247-e3432665bac1" - }, - "outputs": [ - { - "data": { - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
trial_indexarm_nametrial_statusgeneration_methodbraninx1x2
000_0COMPLETEDSobol18.295380-4.56028012.821902
111_0COMPLETEDSobol17.7096900.6959024.371646
222_0COMPLETEDSobol55.4839258.8466899.346672
333_0COMPLETEDSobol21.169355-0.9040839.831698
444_0COMPLETEDSobol41.1838178.1520927.442010
555_0COMPLETEDBoTorch129.479026-5.0000006.382025
666_0COMPLETEDBoTorch44.640343-1.67565915.000000
777_0COMPLETEDBoTorch21.1719422.5279687.163640
888_0COMPLETEDBoTorch1.5854503.5117022.737128
999_0COMPLETEDBoTorch11.7855062.3744720.000000
\n", - "
" - ], - "text/plain": [ - " trial_index arm_name trial_status generation_method branin x1 \n", - "0 0 0_0 COMPLETED Sobol 18.295380 -4.560280 \\\n", - "1 1 1_0 COMPLETED Sobol 17.709690 0.695902 \n", - "2 2 2_0 COMPLETED Sobol 55.483925 8.846689 \n", - "3 3 3_0 COMPLETED Sobol 21.169355 -0.904083 \n", - "4 4 4_0 COMPLETED Sobol 41.183817 8.152092 \n", - "5 5 5_0 COMPLETED BoTorch 129.479026 -5.000000 \n", - "6 6 6_0 COMPLETED BoTorch 44.640343 -1.675659 \n", - "7 7 7_0 COMPLETED BoTorch 21.171942 2.527968 \n", - "8 8 8_0 COMPLETED BoTorch 1.585450 3.511702 \n", - "9 9 9_0 COMPLETED BoTorch 11.785506 2.374472 \n", - "\n", - " x2 \n", - "0 12.821902 \n", - "1 4.371646 \n", - "2 9.346672 \n", - "3 9.831698 \n", - "4 7.442010 \n", - "5 6.382025 \n", - "6 15.000000 \n", - "7 7.163640 \n", - "8 2.737128 \n", - "9 0.000000 " - ] - }, - "execution_count": 19, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "exp_to_df(experiment)" + "data": { + "text/plain": [ + "botorch.models.gp_regression.FixedNoiseGP" ] - }, + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "model_bridge_with_EHVI.model.surrogate.botorch_model_class" + ] + }, + { + "cell_type": "markdown", + "id": "fatal-butterfly", + "metadata": { + "originalKey": "5c64eecc-5ce5-4907-bbcc-5b3cbf4358ae" + }, + "source": [ + "Furthermore, the quick-start example at the top of this tutorial shows how to specify surrogate and acquisition subcomponents to `Models.BOTORCH_MODULAR`. " + ] + }, + { + "cell_type": "markdown", + "id": "hearing-interface", + "metadata": { + "originalKey": "a0163432-f0ca-4582-ad84-16c77c99f20b" + }, + "source": [ + "## 5. Utilizing `BoTorchModel` in generation strategies\n", + "\n", + "Generation strategy is a key concept in Ax, enabling use of Service API (a.k.a. `AxClient`) and many other higher-level abstractions. A `GenerationStrategy` allows to chain multiple models in Ax and thereby automate candidate generation. Refer to the \"Generation Strategy\" tutorial for more detail in generation strategies.\n", + "\n", + "An example generation stategy with the modular `BoTorchModel` would look like this:" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "received-registration", + "metadata": { + "originalKey": "f7eabbcf-607c-4bed-9a0e-6ac6e8b04350" + }, + "outputs": [], + "source": [ + "from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy\n", + "from botorch.acquisition import UpperConfidenceBound\n", + "from ax.modelbridge.modelbridge_utils import get_pending_observation_features\n", + "\n", + "gs = GenerationStrategy(\n", + " steps=[\n", + " GenerationStep( # Initialization step\n", + " # Which model to use for this step\n", + " model=Models.SOBOL,\n", + " # How many generator runs (each of which is then made a trial)\n", + " # to produce with this step\n", + " num_trials=5,\n", + " # How many trials generated from this step must be `COMPLETED`\n", + " # before the next one\n", + " min_trials_observed=5,\n", + " ),\n", + " GenerationStep( # BayesOpt step\n", + " model=Models.BOTORCH_MODULAR,\n", + " # No limit on how many generator runs will be produced\n", + " num_trials=-1,\n", + " model_kwargs={ # Kwargs to pass to `BoTorchModel.__init__`\n", + " \"surrogate\": Surrogate(FixedNoiseGP),\n", + " \"botorch_acqf_class\": qNoisyExpectedImprovement,\n", + " },\n", + " ),\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "logical-windsor", + "metadata": { + "originalKey": "212c4543-220e-4605-8f72-5f86cf52f722" + }, + "source": [ + "Set up an experiment and generate 10 trials in it, adding synthetic data to experiment after each one:" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "viral-cheese", + "metadata": { + "originalKey": "30cfcdd7-721d-4f89-b851-7a94140dfad6" + }, + "outputs": [ { - "cell_type": "markdown", - "id": "obvious-transparency", - "metadata": { - "originalKey": "c25da720-6d3d-4f16-b878-24f2d2755783" - }, - "source": [ - "## 6. Customizing a `Surrogate` or `Acquisition`\n", - "\n", - "We expect the base `Surrogate` and `Acquisition` classes to work with most BoTorch components, but there could be a case where you would need to subclass one of aforementioned abstractions to handle a given BoTorch component. If you run into a case like this, feel free to open an issue on our [Github issues page](https://github.com/facebook/Ax/issues) –– it would be very useful for us to know \n", - "\n", - "One such example would be a need for a custom `MCAcquisitionObjective` or posterior transform. To subclass `Acquisition` accordingly, one would override the `get_botorch_objective_and_transform` method:" - ] + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 06-07 16:00:44] ax.core.experiment: The is_test flag has been set to True. This flag is meant purely for development and integration testing purposes. If you are running a live experiment, please set this flag to False\n" + ] }, { - "cell_type": "code", - "execution_count": 22, - "id": "organizational-balance", - "metadata": { - "originalKey": "e7f8e413-f01e-4f9d-82c1-4912097637af" - }, - "outputs": [], - "source": [ - "from botorch.acquisition.objective import MCAcquisitionObjective, PosteriorTransform\n", - "from botorch.acquisition.risk_measures import RiskMeasureMCObjective\n", - "\n", - "class CustomObjectiveAcquisition(Acquisition):\n", - " def get_botorch_objective_and_transform(\n", - " self,\n", - " botorch_acqf_class: Type[AcquisitionFunction],\n", - " model: Model,\n", - " objective_weights: Tensor,\n", - " objective_thresholds: Optional[Tensor] = None,\n", - " outcome_constraints: Optional[Tuple[Tensor, Tensor]] = None,\n", - " X_observed: Optional[Tensor] = None,\n", - " risk_measure: Optional[RiskMeasureMCObjective] = None,\n", - " ) -> Tuple[Optional[MCAcquisitionObjective], Optional[PosteriorTransform]]:\n", - " ... # Produce the desired `MCAcquisitionObjective` and `PosteriorTransform` instead of the default" + "data": { + "text/plain": [ + "SearchSpace(parameters=[RangeParameter(name='x1', parameter_type=FLOAT, range=[-5.0, 10.0]), RangeParameter(name='x2', parameter_type=FLOAT, range=[0.0, 15.0])], parameter_constraints=[])" ] - }, + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "experiment = get_branin_experiment(minimize=True)\n", + "\n", + "assert len(experiment.trials) == 0\n", + "experiment.search_space" + ] + }, + { + "cell_type": "markdown", + "id": "incident-newspaper", + "metadata": { + "originalKey": "2807d7ce-8a6b-423c-b5f5-32edba09c78e" + }, + "source": [ + "## 5a. Specifying `pending_observations`\n", + "Note that it's important to **specify pending observations** to the call to `gen` to avoid getting the same points re-suggested. Without `pending_observations` argument, Ax models are not aware of points that should be excluded from generation. Points are considered \"pending\" when they belong to `STAGED`, `RUNNING`, or `ABANDONED` trials (with the latter included so model does not re-suggest points that are considered \"bad\" and should not be re-suggested).\n", + "\n", + "If the call to `get_pending_observation_features` becomes slow in your setup (since it performs data-fetching etc.), you can opt for `get_pending_observation_features_based_on_trial_status` (also from `ax.modelbridge.modelbridge_utils`), but note the limitations of that utility (detailed in its docstring)." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "casual-spread", + "metadata": { + "originalKey": "58aafd65-a366-4b66-a1b1-31b207037a2e" + }, + "outputs": [ { - "cell_type": "markdown", - "id": "theoretical-horizon", - "metadata": { - "originalKey": "7299f0fc-e19e-4383-99de-ef7a9a987fe9" - }, - "source": [ - "Then to use the new subclass in `BoTorchModel`, just specify `acquisition_class` argument along with `botorch_acqf_class` (to `BoTorchModel` directly or to `Models.BOTORCH_MODULAR`, which just passes the relevant arguments to `BoTorchModel` under the hood, as discussed in section 4):" - ] - }, + "name": "stdout", + "output_type": "stream", + "text": [ + "Completed trial #0, suggested by Sobol.\n", + "Completed trial #1, suggested by Sobol.\n", + "Completed trial #2, suggested by Sobol.\n", + "Completed trial #3, suggested by Sobol.\n", + "Completed trial #4, suggested by Sobol.\n", + "Completed trial #5, suggested by BoTorch.\n", + "Completed trial #6, suggested by BoTorch.\n", + "Completed trial #7, suggested by BoTorch.\n", + "Completed trial #8, suggested by BoTorch.\n", + "Completed trial #9, suggested by BoTorch.\n" + ] + } + ], + "source": [ + "for _ in range(10):\n", + " # Produce a new generator run and attach it to experiment as a trial\n", + " generator_run = gs.gen(\n", + " experiment=experiment,\n", + " n=1,\n", + " pending_observations=get_pending_observation_features(experiment=experiment),\n", + " )\n", + " trial = experiment.new_trial(generator_run)\n", + "\n", + " # Mark the trial as 'RUNNING' so we can mark it 'COMPLETED' later\n", + " trial.mark_running(no_runner_required=True)\n", + "\n", + " # Attach data for the new trial and mark it 'COMPLETED'\n", + " experiment.attach_data(get_branin_data(trials=[trial]))\n", + " trial.mark_completed()\n", + "\n", + " print(f\"Completed trial #{trial.index}, suggested by {generator_run._model_key}.\")" + ] + }, + { + "cell_type": "markdown", + "id": "circular-vermont", + "metadata": { + "originalKey": "9d3b86bf-b691-4315-8b8f-60504b37818c" + }, + "source": [ + "Now we examine the experiment and observe the trials that were added to it and produced by the generation strategy:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "significant-particular", + "metadata": { + "originalKey": "ca12913d-e3fd-4617-a247-e3432665bac1" + }, + "outputs": [ { - "cell_type": "code", - "execution_count": 23, - "id": "approximate-rolling", - "metadata": { - "originalKey": "07fe169a-78de-437e-9857-7c99cc48eedc" - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 06-07 16:01:54] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" - ] - }, - { - "data": { - "text/plain": [ - "" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
trial_indexarm_nametrial_statusgeneration_methodbraninx1x2
000_0COMPLETEDSobol18.295380-4.56028012.821902
111_0COMPLETEDSobol17.7096900.6959024.371646
222_0COMPLETEDSobol55.4839258.8466899.346672
333_0COMPLETEDSobol21.169355-0.9040839.831698
444_0COMPLETEDSobol41.1838178.1520927.442010
555_0COMPLETEDBoTorch129.479026-5.0000006.382025
666_0COMPLETEDBoTorch44.640343-1.67565915.000000
777_0COMPLETEDBoTorch21.1719422.5279687.163640
888_0COMPLETEDBoTorch1.5854503.5117022.737128
999_0COMPLETEDBoTorch11.7855062.3744720.000000
\n", + "
" ], - "source": [ - "Models.BOTORCH_MODULAR(\n", - " experiment=experiment,\n", - " data=data,\n", - " acquisition_class=CustomObjectiveAcquisition,\n", - " botorch_acqf_class=MyAcquisitionFunctionClass,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "id": "representative-implement", - "metadata": { - "originalKey": "608d5f0d-4528-4aa6-869d-db38fcbfb256" - }, - "source": [ - "To use a custom `Surrogate` subclass, pass the `surrogate` argument of that type:\n", - "```\n", - "Models.BOTORCH_MODULAR(\n", - " experiment=experiment, \n", - " data=data,\n", - " surrogate=CustomSurrogate(botorch_model_class=MyModelClass),\n", - ")\n", - "```" + "text/plain": [ + " trial_index arm_name trial_status generation_method branin x1 \n", + "0 0 0_0 COMPLETED Sobol 18.295380 -4.560280 \\\n", + "1 1 1_0 COMPLETED Sobol 17.709690 0.695902 \n", + "2 2 2_0 COMPLETED Sobol 55.483925 8.846689 \n", + "3 3 3_0 COMPLETED Sobol 21.169355 -0.904083 \n", + "4 4 4_0 COMPLETED Sobol 41.183817 8.152092 \n", + "5 5 5_0 COMPLETED BoTorch 129.479026 -5.000000 \n", + "6 6 6_0 COMPLETED BoTorch 44.640343 -1.675659 \n", + "7 7 7_0 COMPLETED BoTorch 21.171942 2.527968 \n", + "8 8 8_0 COMPLETED BoTorch 1.585450 3.511702 \n", + "9 9 9_0 COMPLETED BoTorch 11.785506 2.374472 \n", + "\n", + " x2 \n", + "0 12.821902 \n", + "1 4.371646 \n", + "2 9.346672 \n", + "3 9.831698 \n", + "4 7.442010 \n", + "5 6.382025 \n", + "6 15.000000 \n", + "7 7.163640 \n", + "8 2.737128 \n", + "9 0.000000 " ] - }, - { - "cell_type": "markdown", - "id": "framed-intermediate", - "metadata": { - "originalKey": "64f1289e-73c7-4cc5-96ee-5091286a8361" - }, - "source": [ - "------" - ] - }, - { - "cell_type": "markdown", - "id": "metropolitan-feedback", - "metadata": { - "originalKey": "d1e37569-dd0d-4561-b890-2f0097a345e0" - }, - "source": [ - "## Appendix 1: Methods available on `BoTorchModel`\n", - "\n", - "Note that usually all these methods are used through `ModelBridge` –– a convertion and transformation layer that adapts Ax abstractions to inputs required by the given model.\n", - "\n", - "**Core methods on `BoTorchModel`:**\n", - "* `fit` selects a surrogate if needed and fits the surrogate model to data via `Surrogate.fit`,\n", - "* `predict` estimates metric values at a given point via `Surrogate.predict`,\n", - "* `gen` instantiates an acquisition function via `Acquisition.__init__` and optimizes it to generate candidates.\n", - "\n", - "**Other methods on `BoTorchModel`:**\n", - "* `update` updates surrogate model with training data and optionally reoptimizes model parameters via `Surrogate.update`,\n", - "* `cross_validate` re-fits the surrogate model to subset of training data and makes predictions for test data,\n", - "* `evaluate_acquisition_function` instantiates an acquisition function and evaluates it for a given point.\n", - "------\n" - ] - }, - { - "cell_type": "markdown", - "id": "possible-transsexual", - "metadata": { - "originalKey": "b02f928c-57d9-4b2a-b4fe-c6d28d368b12" - }, - "source": [ - "## Appendix 2: Default surrogate models and acquisition functions\n", - "\n", - "By default, the chosen surrogate model will be:\n", - "* if fidelity parameters are present in search space: `FixedNoiseMultiFidelityGP` (if [SEM](https://ax.dev/docs/glossary.html#sem)s are known on observations) and `SingleTaskMultiFidelityGP` (if variance unknown and needs to be inferred),\n", - "* if task parameters are present: a set of `FixedNoiseMultiTaskGP` (if known variance) or `MultiTaskGP` (if unknown variance), wrapped in a `ModelListGP` and each modeling one task,\n", - "* `FixedNoiseGP` (known variance) and `SingleTaskGP` (unknown variance) otherwise.\n", - "\n", - "The chosen acquisition function will be:\n", - "* for multi-objective settings: `qExpectedHypervolumeImprovement`,\n", - "* `qExpectedImprovement` (known variance) and `qNoisyExpectedImprovement` (unknown variance) otherwise.\n", - "----" - ] - }, + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "exp_to_df(experiment)" + ] + }, + { + "cell_type": "markdown", + "id": "obvious-transparency", + "metadata": { + "originalKey": "c25da720-6d3d-4f16-b878-24f2d2755783" + }, + "source": [ + "## 6. Customizing a `Surrogate` or `Acquisition`\n", + "\n", + "We expect the base `Surrogate` and `Acquisition` classes to work with most BoTorch components, but there could be a case where you would need to subclass one of aforementioned abstractions to handle a given BoTorch component. If you run into a case like this, feel free to open an issue on our [Github issues page](https://github.com/facebook/Ax/issues) –– it would be very useful for us to know \n", + "\n", + "One such example would be a need for a custom `MCAcquisitionObjective` or posterior transform. To subclass `Acquisition` accordingly, one would override the `get_botorch_objective_and_transform` method:" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "organizational-balance", + "metadata": { + "originalKey": "e7f8e413-f01e-4f9d-82c1-4912097637af" + }, + "outputs": [], + "source": [ + "from botorch.acquisition.objective import MCAcquisitionObjective, PosteriorTransform\n", + "from botorch.acquisition.risk_measures import RiskMeasureMCObjective\n", + "\n", + "class CustomObjectiveAcquisition(Acquisition):\n", + " def get_botorch_objective_and_transform(\n", + " self,\n", + " botorch_acqf_class: Type[AcquisitionFunction],\n", + " model: Model,\n", + " objective_weights: Tensor,\n", + " objective_thresholds: Optional[Tensor] = None,\n", + " outcome_constraints: Optional[Tuple[Tensor, Tensor]] = None,\n", + " X_observed: Optional[Tensor] = None,\n", + " risk_measure: Optional[RiskMeasureMCObjective] = None,\n", + " ) -> Tuple[Optional[MCAcquisitionObjective], Optional[PosteriorTransform]]:\n", + " ... # Produce the desired `MCAcquisitionObjective` and `PosteriorTransform` instead of the default" + ] + }, + { + "cell_type": "markdown", + "id": "theoretical-horizon", + "metadata": { + "originalKey": "7299f0fc-e19e-4383-99de-ef7a9a987fe9" + }, + "source": [ + "Then to use the new subclass in `BoTorchModel`, just specify `acquisition_class` argument along with `botorch_acqf_class` (to `BoTorchModel` directly or to `Models.BOTORCH_MODULAR`, which just passes the relevant arguments to `BoTorchModel` under the hood, as discussed in section 4):" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "approximate-rolling", + "metadata": { + "originalKey": "07fe169a-78de-437e-9857-7c99cc48eedc" + }, + "outputs": [ { - "cell_type": "markdown", - "id": "continuous-strain", - "metadata": { - "originalKey": "76ae9852-9d21-43d6-bf75-bb087a474dd6" - }, - "source": [ - "## Appendix 3: Handling storage errors that arise from objects that don't have serialization logic in A\n", - "\n", - "Attempting to store a generator run produced via `Models.BOTORCH_MODULAR` instance that included options without serization logic with will produce an error like: `\"Object passed to 'object_to_json' (of type ) is not registered with a corresponding encoder in ENCODER_REGISTRY.\"`" - ] + "name": "stderr", + "output_type": "stream", + "text": [ + "[INFO 06-07 16:01:54] ax.modelbridge.transforms.standardize_y: Outcome branin is constant, within tolerance.\n" + ] }, { - "cell_type": "markdown", - "id": "broadband-voice", - "metadata": { - "originalKey": "6487b68e-b808-4372-b6ba-ab02ce4826bc" - }, - "source": [ - "The two options for handling this error are:\n", - "1. disabling storage of `BoTorchModel`'s options by passing `no_model_options_storage=True` to `Models.BOTORCH_MODULAR(...)` call –– this will prevent model options from being stored on the generator run, so a generator run can be saved but cannot be used to restore the model that produced it,\n", - "2. specifying serialization logic for a given object that needs to occur among the `Model` or `AcquisitionFunction` options. Tutorial for this is in the works, but in the meantime you can [post an issue on the Ax GitHub](https://github.com/facebook/Ax/issues) to get help with this." + "data": { + "text/plain": [ + "" ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.8" - } + ], + "source": [ + "Models.BOTORCH_MODULAR(\n", + " experiment=experiment,\n", + " data=data,\n", + " acquisition_class=CustomObjectiveAcquisition,\n", + " botorch_acqf_class=MyAcquisitionFunctionClass,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "representative-implement", + "metadata": { + "originalKey": "608d5f0d-4528-4aa6-869d-db38fcbfb256" + }, + "source": [ + "To use a custom `Surrogate` subclass, pass the `surrogate` argument of that type:\n", + "```\n", + "Models.BOTORCH_MODULAR(\n", + " experiment=experiment, \n", + " data=data,\n", + " surrogate=CustomSurrogate(botorch_model_class=MyModelClass),\n", + ")\n", + "```" + ] + }, + { + "cell_type": "markdown", + "id": "framed-intermediate", + "metadata": { + "originalKey": "64f1289e-73c7-4cc5-96ee-5091286a8361" + }, + "source": [ + "------" + ] + }, + { + "cell_type": "markdown", + "id": "metropolitan-feedback", + "metadata": { + "originalKey": "d1e37569-dd0d-4561-b890-2f0097a345e0" + }, + "source": [ + "## Appendix 1: Methods available on `BoTorchModel`\n", + "\n", + "Note that usually all these methods are used through `ModelBridge` –– a convertion and transformation layer that adapts Ax abstractions to inputs required by the given model.\n", + "\n", + "**Core methods on `BoTorchModel`:**\n", + "* `fit` selects a surrogate if needed and fits the surrogate model to data via `Surrogate.fit`,\n", + "* `predict` estimates metric values at a given point via `Surrogate.predict`,\n", + "* `gen` instantiates an acquisition function via `Acquisition.__init__` and optimizes it to generate candidates.\n", + "\n", + "**Other methods on `BoTorchModel`:**\n", + "* `update` updates surrogate model with training data and optionally reoptimizes model parameters via `Surrogate.update`,\n", + "* `cross_validate` re-fits the surrogate model to subset of training data and makes predictions for test data,\n", + "* `evaluate_acquisition_function` instantiates an acquisition function and evaluates it for a given point.\n", + "------\n" + ] + }, + { + "cell_type": "markdown", + "id": "possible-transsexual", + "metadata": { + "originalKey": "b02f928c-57d9-4b2a-b4fe-c6d28d368b12" + }, + "source": [ + "## Appendix 2: Default surrogate models and acquisition functions\n", + "\n", + "By default, the chosen surrogate model will be:\n", + "* if fidelity parameters are present in search space: `FixedNoiseMultiFidelityGP` (if [SEM](https://ax.dev/docs/glossary.html#sem)s are known on observations) and `SingleTaskMultiFidelityGP` (if variance unknown and needs to be inferred),\n", + "* if task parameters are present: a set of `FixedNoiseMultiTaskGP` (if known variance) or `MultiTaskGP` (if unknown variance), wrapped in a `ModelListGP` and each modeling one task,\n", + "* `FixedNoiseGP` (known variance) and `SingleTaskGP` (unknown variance) otherwise.\n", + "\n", + "The chosen acquisition function will be:\n", + "* for multi-objective settings: `qExpectedHypervolumeImprovement`,\n", + "* `qExpectedImprovement` (known variance) and `qNoisyExpectedImprovement` (unknown variance) otherwise.\n", + "----" + ] + }, + { + "cell_type": "markdown", + "id": "continuous-strain", + "metadata": { + "originalKey": "76ae9852-9d21-43d6-bf75-bb087a474dd6" + }, + "source": [ + "## Appendix 3: Handling storage errors that arise from objects that don't have serialization logic in A\n", + "\n", + "Attempting to store a generator run produced via `Models.BOTORCH_MODULAR` instance that included options without serization logic with will produce an error like: `\"Object passed to 'object_to_json' (of type ) is not registered with a corresponding encoder in ENCODER_REGISTRY.\"`" + ] + }, + { + "cell_type": "markdown", + "id": "broadband-voice", + "metadata": { + "originalKey": "6487b68e-b808-4372-b6ba-ab02ce4826bc" + }, + "source": [ + "The two options for handling this error are:\n", + "1. disabling storage of `BoTorchModel`'s options by passing `no_model_options_storage=True` to `Models.BOTORCH_MODULAR(...)` call –– this will prevent model options from being stored on the generator run, so a generator run can be saved but cannot be used to restore the model that produced it,\n", + "2. specifying serialization logic for a given object that needs to occur among the `Model` or `AcquisitionFunction` options. Tutorial for this is in the works, but in the meantime you can [post an issue on the Ax GitHub](https://github.com/facebook/Ax/issues) to get help with this." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "nbformat": 4, - "nbformat_minor": 5 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 } diff --git a/tutorials/multi_task.ipynb b/tutorials/multi_task.ipynb index 929c7fd460d..0efbc74c04c 100644 --- a/tutorials/multi_task.ipynb +++ b/tutorials/multi_task.ipynb @@ -1,587 +1,587 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "bbfd01ea-97cb-4830-ab6d-60236151a3cd", - "showInput": false - }, - "source": [ - "# Multi-task Bayesian Optimization\n", - "\n", - "This tutorial uses synthetic functions to illustrate Bayesian optimization using a multi-task Gaussian Process in Ax. A typical use case is optimizing an expensive-to-evaluate (online) system with supporting (offline) simulations of that system.\n", - "\n", - "Bayesian optimization with a multi-task kernel (Multi-task Bayesian optimization) is described by Swersky et al. (2013). Letham and Bakshy (2019) describe using multi-task Bayesian optimization to tune a ranking system with a mix of online and offline (simulator) experiments.\n", - "\n", - "This tutorial produces the results of Online Appendix 2 from [that paper](https://arxiv.org/pdf/1904.01049.pdf).\n", - "\n", - "The synthetic problem used here is to maximize the Hartmann 6 function, a classic optimization test problem in 6 dimensions. The objective is treated as unknown and are modeled with separate GPs. The objective is noisy.\n", - "\n", - "Throughout the optimization we can make nosiy observations directly of the objective (an online observation), and we can make noisy observations of a biased version of the objective (offline observations). Bias is simulated by passing the function values through a piecewise linear function. Offline observations are much less time-consuming than online observations, so we wish to use them to improve our ability to optimize the online objective." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "3ce827be-d20b-48d3-a6ff-291bd442c748", - "vscode": { - "languageId": "python" - } - }, - "outputs": [], - "source": [ - "import os\n", - "import time\n", - "\n", - "from copy import deepcopy\n", - "from typing import Optional\n", - "\n", - "import numpy as np\n", - "\n", - "import torch\n", - "\n", - "from ax.core.data import Data\n", - "from ax.core.experiment import Experiment\n", - "from ax.core.generator_run import GeneratorRun\n", - "from ax.core.multi_type_experiment import MultiTypeExperiment\n", - "from ax.core.objective import Objective\n", - "from ax.core.observation import ObservationFeatures, observations_from_data\n", - "from ax.core.optimization_config import OptimizationConfig\n", - "from ax.core.parameter import ParameterType, RangeParameter\n", - "from ax.core.search_space import SearchSpace\n", - "from ax.metrics.hartmann6 import Hartmann6Metric\n", - "from ax.modelbridge.factory import get_sobol\n", - "from ax.modelbridge.registry import Models, MT_MTGP_trans, ST_MTGP_trans\n", - "from ax.modelbridge.torch import TorchModelBridge\n", - "from ax.modelbridge.transforms.convert_metric_names import tconfig_from_mt_experiment\n", - "from ax.plot.diagnostic import interact_batch_comparison\n", - "from ax.runners.synthetic import SyntheticRunner\n", - "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", - "from ax.utils.common.typeutils import checked_cast\n", - "\n", - "init_notebook_plotting()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "vscode": { - "languageId": "python" - } - }, - "outputs": [], - "source": [ - "SMOKE_TEST = os.environ.get(\"SMOKE_TEST\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "76100312-e604-46ed-a123-9b0296ced6ff", - "showInput": false - }, - "source": [ - "## 1. Define Metric classes\n", - "For this example, the online system is optimizing a Hartmann6 function. The Metric objects for these are directly imported above. We create analagous offline versions of this metrics which are identical but have a transform applied (a piecewise linear function). We construct Metric objects for each of them." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "2315ca64-74e5-4084-829e-e8a482c653e5", - "vscode": { - "languageId": "python" - } - }, - "outputs": [], - "source": [ - "# Create metric with artificial offline bias, for the objective\n", - "# by passing the true values through a piecewise linear function.\n", - "\n", - "\n", - "class OfflineHartmann6Metric(Hartmann6Metric):\n", - " def f(self, x: np.ndarray) -> float:\n", - " raw_res = super().f(x)\n", - " m = -0.35\n", - " if raw_res < m:\n", - " return (1.5 * (raw_res - m)) + m\n", - " else:\n", - " return (6.0 * (raw_res - m)) + m" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "b0e2089f-a7a3-4a8b-b8b3-ab6d75ca7f09", - "showInput": false - }, - "source": [ - "## 2. Create experiment\n", - "\n", - "A MultiTypeExperiment is used for managing online and offline trials together. It is constructed in several steps:\n", - "\n", - "1. Create the search space - This is done in the usual way.\n", - "2. Specify optimization config - Also done in the usual way.\n", - "3. Initialize Experiment - In addition to the search_space and optimization_config, specify that \"online\" is the default trial_type. This is the main trial type for which we're optimizing. Optimization metrics are defined to be for this type and new trials assume this trial type by default.\n", - "4. Establish offline trial_type - Register the \"offline\" trial type and specify how to deploy trials of this type.\n", - "5. Add offline metrics - Create the offline metrics and add them to the experiment. When adding the metrics, we need to specify the trial type (\"offline\") and online metric name it is associated with so the model can link them.\n", - "\n", - "Finally, because this is a synthetic benchmark problem where the true function values are known, we will also register metrics with the true (noiseless) function values for plotting below." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "39504f84-793e-4dae-ae55-068f1b762706", - "vscode": { - "languageId": "python" - } - }, - "outputs": [], - "source": [ - "def get_experiment(include_true_metric=True):\n", - " noise_sd = 0.1 # Observations will have this much Normal noise added to them\n", - "\n", - " # 1. Create simple search space for [0,1]^d, d=6\n", - " param_names = [f\"x{i}\" for i in range(6)]\n", - " parameters = [\n", - " RangeParameter(\n", - " name=param_names[i],\n", - " parameter_type=ParameterType.FLOAT,\n", - " lower=0.0,\n", - " upper=1.0,\n", - " )\n", - " for i in range(6)\n", - " ]\n", - " search_space = SearchSpace(parameters=parameters)\n", - "\n", - " # 2. Specify optimization config\n", - " online_objective = Hartmann6Metric(\n", - " \"objective\", param_names=param_names, noise_sd=noise_sd\n", - " )\n", - " opt_config = OptimizationConfig(\n", - " objective=Objective(online_objective, minimize=True)\n", - " )\n", - "\n", - " # 3. Init experiment\n", - " exp = MultiTypeExperiment(\n", - " name=\"mt_exp\",\n", - " search_space=search_space,\n", - " default_trial_type=\"online\",\n", - " default_runner=SyntheticRunner(),\n", - " optimization_config=opt_config,\n", - " )\n", - "\n", - " # 4. Establish offline trial_type, and how those trials are deployed\n", - " exp.add_trial_type(\"offline\", SyntheticRunner())\n", - "\n", - " # 5. Add offline metrics that provide biased estimates of the online metrics\n", - " offline_objective = OfflineHartmann6Metric(\n", - " \"offline_objective\", param_names=param_names, noise_sd=noise_sd\n", - " )\n", - " # Associate each offline metric with corresponding online metric\n", - " exp.add_tracking_metric(\n", - " metric=offline_objective, trial_type=\"offline\", canonical_name=\"objective\"\n", - " )\n", - "\n", - " return exp" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "5a00218e-c27d-4d6f-bef0-3e562217533a", - "showInput": false - }, - "source": [ - "## 3. Vizualize the simulator bias\n", - "\n", - "These figures compare the online measurements to the offline measurements on a random set of points, for the objective metric. You can see the offline measurements are biased but highly correlated. This produces Fig. S3 from the paper." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "8260b668-91ef-404e-aa8c-4bf43f6a5660", - "vscode": { - "languageId": "python" - } - }, - "outputs": [], - "source": [ - "# Generate 50 points from a Sobol sequence\n", - "exp = get_experiment(include_true_metric=False)\n", - "s = get_sobol(exp.search_space, scramble=False)\n", - "gr = s.gen(50)\n", - "# Deploy them both online and offline\n", - "exp.new_batch_trial(trial_type=\"online\", generator_run=gr).run()\n", - "exp.new_batch_trial(trial_type=\"offline\", generator_run=gr).run()\n", - "# Fetch data\n", - "data = exp.fetch_data()\n", - "observations = observations_from_data(exp, data)\n", - "# Plot the arms in batch 0 (online) vs. batch 1 (offline)\n", - "render(interact_batch_comparison(observations, exp, 1, 0))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "69cf9e8e-361e-4546-871f-6bb8641d1b97" - }, - "source": [ - "## 4. The Bayesian optimization loop\n", - "\n", - "Here we construct a Bayesian optimization loop that interleaves online and offline batches. The loop defined here is described in Algorithm 1 of the paper. We compare multi-task Bayesian optimization to regular Bayesian optimization using only online observations.\n", - "\n", - "Here we measure performance over 3 repetitions of the loop. Each one takes 1-2 hours so the whole benchmark run will take several hours to complete." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "3d124563-8a1f-411e-9822-972568ce1970", - "vscode": { - "languageId": "python" - } - }, - "outputs": [], - "source": [ - "# Settings for the optimization benchmark.\n", - "\n", - "# Number of repeated experiments, each with independent observation noise.\n", - "# This should be changed to 50 to reproduce the results from the paper.\n", - "if SMOKE_TEST:\n", - " n_batches = 1\n", - " n_init_online = 2\n", - " n_init_offline = 2\n", - " n_opt_online = 2\n", - " n_opt_offline = 2\n", - "else:\n", - " n_batches = 3 # Number of optimized BO batches\n", - " n_init_online = 5 # Size of the quasirandom initialization run online\n", - " n_init_offline = 20 # Size of the quasirandom initialization run offline\n", - " n_opt_online = 5 # Batch size for BO selected points to be run online\n", - " n_opt_offline = 20 # Batch size for BO selected to be run offline" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "5447b3e7-b245-4fab-ad4a-165d7c63e09c" - }, - "source": [ - "#### 4a. Optimization with online observations only\n", - "For the online-only case, we run `n_init_online` sobol points followed by `n_batches` batches of `n_opt_online` points selected by the GP. This is a normal Bayesian optimization loop." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "040354c2-4313-46db-b40d-8adc8da6fafb", - "vscode": { - "languageId": "python" - } - }, - "outputs": [], - "source": [ - "# This function runs a Bayesian optimization loop, making online observations only.\n", - "def run_online_only_bo():\n", - " t1 = time.time()\n", - " ### Do BO with online only\n", - " ## Quasi-random initialization\n", - " exp_online = get_experiment()\n", - " m = get_sobol(exp_online.search_space, scramble=False)\n", - " gr = m.gen(n=n_init_online)\n", - " exp_online.new_batch_trial(trial_type=\"online\", generator_run=gr).run()\n", - " ## Do BO\n", - " for b in range(n_batches):\n", - " print(\"Online-only batch\", b, time.time() - t1)\n", - " # Fit the GP\n", - " m = Models.BOTORCH_MODULAR(\n", - " experiment=exp_online,\n", - " data=exp_online.fetch_data(),\n", - " search_space=exp_online.search_space,\n", - " )\n", - " # Generate the new batch\n", - " gr = m.gen(\n", - " n=n_opt_online,\n", - " search_space=exp_online.search_space,\n", - " optimization_config=exp_online.optimization_config,\n", - " )\n", - " exp_online.new_batch_trial(trial_type=\"online\", generator_run=gr).run()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "c1837efe-9f41-4eb8-a415-309392724141" - }, - "source": [ - "#### 4b. Multi-task Bayesian optimization\n", - "Here we incorporate offline observations to accelerate the optimization, while using the same total number of online observations as in the loop above. The strategy here is that outlined in Algorithm 1 of the paper.\n", - "\n", - "1. Initialization - Run `n_init_online` Sobol points online, and `n_init_offline` Sobol points offline.\n", - "2. Fit model - Fit an MTGP to both online and offline observations.\n", - "3. Generate candidates - Generate `n_opt_offline` candidates using NEI.\n", - "4. Launch offline batch - Run the `n_opt_offline` candidates offline and observe their offline metrics.\n", - "5. Update model - Update the MTGP with the new offline observations.\n", - "6. Select points for online batch - Select the best (maximum utility) `n_opt_online` of the NEI candidates, after incorporating their offline observations, and run them online.\n", - "7. Update model and repeat - Update the model with the online observations, and repeat from step 3 for the next batch." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "vscode": { - "languageId": "python" - } - }, - "outputs": [], - "source": [ - "def get_MTGP(\n", - " experiment: Experiment,\n", - " data: Data,\n", - " search_space: Optional[SearchSpace] = None,\n", - " trial_index: Optional[int] = None,\n", - " device: torch.device = torch.device(\"cpu\"),\n", - " dtype: torch.dtype = torch.double,\n", - ") -> TorchModelBridge:\n", - " \"\"\"Instantiates a Multi-task Gaussian Process (MTGP) model that generates\n", - " points with EI.\n", - "\n", - " If the input experiment is a MultiTypeExperiment then a\n", - " Multi-type Multi-task GP model will be instantiated.\n", - " Otherwise, the model will be a Single-type Multi-task GP.\n", - " \"\"\"\n", - "\n", - " if isinstance(experiment, MultiTypeExperiment):\n", - " trial_index_to_type = {\n", - " t.index: t.trial_type for t in experiment.trials.values()\n", - " }\n", - " transforms = MT_MTGP_trans\n", - " transform_configs = {\n", - " \"TrialAsTask\": {\"trial_level_map\": {\"trial_type\": trial_index_to_type}},\n", - " \"ConvertMetricNames\": tconfig_from_mt_experiment(experiment),\n", - " }\n", - " else:\n", - " # Set transforms for a Single-type MTGP model.\n", - " transforms = ST_MTGP_trans\n", - " transform_configs = None\n", - "\n", - " # Choose the status quo features for the experiment from the selected trial.\n", - " # If trial_index is None, we will look for a status quo from the last\n", - " # experiment trial to use as a status quo for the experiment.\n", - " if trial_index is None:\n", - " trial_index = len(experiment.trials) - 1\n", - " elif trial_index >= len(experiment.trials):\n", - " raise ValueError(\"trial_index is bigger than the number of experiment trials\")\n", - "\n", - " status_quo = experiment.trials[trial_index].status_quo\n", - " if status_quo is None:\n", - " status_quo_features = None\n", - " else:\n", - " status_quo_features = ObservationFeatures(\n", - " parameters=status_quo.parameters,\n", - " trial_index=trial_index, # pyre-ignore[6]\n", - " )\n", - "\n", - " \n", - " return checked_cast(\n", - " TorchModelBridge,\n", - " Models.ST_MTGP(\n", - " experiment=experiment,\n", - " search_space=search_space or experiment.search_space,\n", - " data=data,\n", - " transforms=transforms,\n", - " transform_configs=transform_configs,\n", - " torch_dtype=dtype,\n", - " torch_device=device,\n", - " status_quo_features=status_quo_features,\n", - " ),\n", - " )" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "37735b0e-e488-4927-a3da-a7d32d9f1ae0", - "vscode": { - "languageId": "python" - } - }, - "outputs": [], - "source": [ - "# Online batches are constructed by selecting the maximum utility points from the offline\n", - "# batch, after updating the model with the offline results. This function selects the max utility points according\n", - "# to the MTGP predictions.\n", - "def max_utility_from_GP(n, m, experiment, search_space, gr):\n", - " obsf = []\n", - " for arm in gr.arms:\n", - " params = deepcopy(arm.parameters)\n", - " params[\"trial_type\"] = \"online\"\n", - " obsf.append(ObservationFeatures(parameters=params))\n", - " # Make predictions\n", - " f, cov = m.predict(obsf)\n", - " # Compute expected utility\n", - " u = -np.array(f[\"objective\"])\n", - " best_arm_indx = np.flip(np.argsort(u))[:n]\n", - " gr_new = GeneratorRun(\n", - " arms=[gr.arms[i] for i in best_arm_indx],\n", - " weights=[1.0] * n,\n", - " )\n", - " return gr_new\n", - "\n", - "\n", - "# This function runs a multi-task Bayesian optimization loop, as outlined in Algorithm 1 and above.\n", - "def run_mtbo():\n", - " t1 = time.time()\n", - " online_trials = []\n", - " ## 1. Quasi-random initialization, online and offline\n", - " exp_multitask = get_experiment()\n", - " # Online points\n", - " m = get_sobol(exp_multitask.search_space, scramble=False)\n", - " gr = m.gen(\n", - " n=n_init_online,\n", - " )\n", - " tr = exp_multitask.new_batch_trial(trial_type=\"online\", generator_run=gr)\n", - " tr.run()\n", - " online_trials.append(tr.index)\n", - " # Offline points\n", - " m = get_sobol(exp_multitask.search_space, scramble=False)\n", - " gr = m.gen(\n", - " n=n_init_offline,\n", - " )\n", - " exp_multitask.new_batch_trial(trial_type=\"offline\", generator_run=gr).run()\n", - " ## Do BO\n", - " for b in range(n_batches):\n", - " print(\"Multi-task batch\", b, time.time() - t1)\n", - " # (2 / 7). Fit the MTGP\n", - " m = get_MTGP(\n", - " experiment=exp_multitask,\n", - " data=exp_multitask.fetch_data(),\n", - " search_space=exp_multitask.search_space,\n", - " )\n", - "\n", - " # 3. Finding the best points for the online task\n", - " gr = m.gen(\n", - " n=n_opt_offline,\n", - " optimization_config=exp_multitask.optimization_config,\n", - " fixed_features=ObservationFeatures(\n", - " parameters={}, trial_index=online_trials[-1]\n", - " ),\n", - " )\n", - "\n", - " # 4. But launch them offline\n", - " exp_multitask.new_batch_trial(trial_type=\"offline\", generator_run=gr).run()\n", - "\n", - " # 5. Update the model\n", - " m = get_MTGP(\n", - " experiment=exp_multitask,\n", - " data=exp_multitask.fetch_data(),\n", - " search_space=exp_multitask.search_space,\n", - " )\n", - "\n", - " # 6. Select max-utility points from the offline batch to generate an online batch\n", - " gr = max_utility_from_GP(\n", - " n=n_opt_online,\n", - " m=m,\n", - " experiment=exp_multitask,\n", - " search_space=exp_multitask.search_space,\n", - " gr=gr,\n", - " )\n", - " tr = exp_multitask.new_batch_trial(trial_type=\"online\", generator_run=gr)\n", - " tr.run()\n", - " online_trials.append(tr.index)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "6708d9ee-34be-4d85-91cc-ed2af5dd8026" - }, - "source": [ - "#### 4c. Run both loops\n", - "Run both Bayesian optimization loops and aggregate results." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "f94a7537-61a6-4200-8e56-01de41aff6c9", - "vscode": { - "languageId": "python" - } - }, - "outputs": [], - "source": [ - "runners = {\n", - " \"GP, online only\": run_online_only_bo,\n", - " \"MTGP\": run_mtbo,\n", - "}\n", - "for k, r in runners.items():\n", - " r()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "1de5ae27-c925-4599-9425-332765a03416" - }, - "source": [ - "#### References\n", - "Benjamin Letham and Eytan Bakshy. Bayesian optimization for policy search via online-offline experimentation. _arXiv preprint arXiv:1603.09326_, 2019.\n", - "\n", - "Kevin Swersky, Jasper Snoek, and Ryan P Adams. Multi-task Bayesian optimization. In _Advances in Neural Information Processing Systems_ 26, NIPS, pages 2004–2012, 2013." - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "bbfd01ea-97cb-4830-ab6d-60236151a3cd", + "showInput": false + }, + "source": [ + "# Multi-task Bayesian Optimization\n", + "\n", + "This tutorial uses synthetic functions to illustrate Bayesian optimization using a multi-task Gaussian Process in Ax. A typical use case is optimizing an expensive-to-evaluate (online) system with supporting (offline) simulations of that system.\n", + "\n", + "Bayesian optimization with a multi-task kernel (Multi-task Bayesian optimization) is described by Swersky et al. (2013). Letham and Bakshy (2019) describe using multi-task Bayesian optimization to tune a ranking system with a mix of online and offline (simulator) experiments.\n", + "\n", + "This tutorial produces the results of Online Appendix 2 from [that paper](https://arxiv.org/pdf/1904.01049.pdf).\n", + "\n", + "The synthetic problem used here is to maximize the Hartmann 6 function, a classic optimization test problem in 6 dimensions. The objective is treated as unknown and are modeled with separate GPs. The objective is noisy.\n", + "\n", + "Throughout the optimization we can make nosiy observations directly of the objective (an online observation), and we can make noisy observations of a biased version of the objective (offline observations). Bias is simulated by passing the function values through a piecewise linear function. Offline observations are much less time-consuming than online observations, so we wish to use them to improve our ability to optimize the online objective." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "3ce827be-d20b-48d3-a6ff-291bd442c748", + "vscode": { + "languageId": "python" + } + }, + "outputs": [], + "source": [ + "import os\n", + "import time\n", + "\n", + "from copy import deepcopy\n", + "from typing import Optional\n", + "\n", + "import numpy as np\n", + "\n", + "import torch\n", + "\n", + "from ax.core.data import Data\n", + "from ax.core.experiment import Experiment\n", + "from ax.core.generator_run import GeneratorRun\n", + "from ax.core.multi_type_experiment import MultiTypeExperiment\n", + "from ax.core.objective import Objective\n", + "from ax.core.observation import ObservationFeatures, observations_from_data\n", + "from ax.core.optimization_config import OptimizationConfig\n", + "from ax.core.parameter import ParameterType, RangeParameter\n", + "from ax.core.search_space import SearchSpace\n", + "from ax.metrics.hartmann6 import Hartmann6Metric\n", + "from ax.modelbridge.factory import get_sobol\n", + "from ax.modelbridge.registry import Models, MT_MTGP_trans, ST_MTGP_trans\n", + "from ax.modelbridge.torch import TorchModelBridge\n", + "from ax.modelbridge.transforms.convert_metric_names import tconfig_from_mt_experiment\n", + "from ax.plot.diagnostic import interact_batch_comparison\n", + "from ax.runners.synthetic import SyntheticRunner\n", + "from ax.utils.common.typeutils import checked_cast\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "\n", + "init_notebook_plotting()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "python" + } + }, + "outputs": [], + "source": [ + "SMOKE_TEST = os.environ.get(\"SMOKE_TEST\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "76100312-e604-46ed-a123-9b0296ced6ff", + "showInput": false + }, + "source": [ + "## 1. Define Metric classes\n", + "For this example, the online system is optimizing a Hartmann6 function. The Metric objects for these are directly imported above. We create analagous offline versions of this metrics which are identical but have a transform applied (a piecewise linear function). We construct Metric objects for each of them." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "2315ca64-74e5-4084-829e-e8a482c653e5", + "vscode": { + "languageId": "python" + } + }, + "outputs": [], + "source": [ + "# Create metric with artificial offline bias, for the objective\n", + "# by passing the true values through a piecewise linear function.\n", + "\n", + "\n", + "class OfflineHartmann6Metric(Hartmann6Metric):\n", + " def f(self, x: np.ndarray) -> float:\n", + " raw_res = super().f(x)\n", + " m = -0.35\n", + " if raw_res < m:\n", + " return (1.5 * (raw_res - m)) + m\n", + " else:\n", + " return (6.0 * (raw_res - m)) + m" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "b0e2089f-a7a3-4a8b-b8b3-ab6d75ca7f09", + "showInput": false + }, + "source": [ + "## 2. Create experiment\n", + "\n", + "A MultiTypeExperiment is used for managing online and offline trials together. It is constructed in several steps:\n", + "\n", + "1. Create the search space - This is done in the usual way.\n", + "2. Specify optimization config - Also done in the usual way.\n", + "3. Initialize Experiment - In addition to the search_space and optimization_config, specify that \"online\" is the default trial_type. This is the main trial type for which we're optimizing. Optimization metrics are defined to be for this type and new trials assume this trial type by default.\n", + "4. Establish offline trial_type - Register the \"offline\" trial type and specify how to deploy trials of this type.\n", + "5. Add offline metrics - Create the offline metrics and add them to the experiment. When adding the metrics, we need to specify the trial type (\"offline\") and online metric name it is associated with so the model can link them.\n", + "\n", + "Finally, because this is a synthetic benchmark problem where the true function values are known, we will also register metrics with the true (noiseless) function values for plotting below." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "39504f84-793e-4dae-ae55-068f1b762706", + "vscode": { + "languageId": "python" + } + }, + "outputs": [], + "source": [ + "def get_experiment(include_true_metric=True):\n", + " noise_sd = 0.1 # Observations will have this much Normal noise added to them\n", + "\n", + " # 1. Create simple search space for [0,1]^d, d=6\n", + " param_names = [f\"x{i}\" for i in range(6)]\n", + " parameters = [\n", + " RangeParameter(\n", + " name=param_names[i],\n", + " parameter_type=ParameterType.FLOAT,\n", + " lower=0.0,\n", + " upper=1.0,\n", + " )\n", + " for i in range(6)\n", + " ]\n", + " search_space = SearchSpace(parameters=parameters)\n", + "\n", + " # 2. Specify optimization config\n", + " online_objective = Hartmann6Metric(\n", + " \"objective\", param_names=param_names, noise_sd=noise_sd\n", + " )\n", + " opt_config = OptimizationConfig(\n", + " objective=Objective(online_objective, minimize=True)\n", + " )\n", + "\n", + " # 3. Init experiment\n", + " exp = MultiTypeExperiment(\n", + " name=\"mt_exp\",\n", + " search_space=search_space,\n", + " default_trial_type=\"online\",\n", + " default_runner=SyntheticRunner(),\n", + " optimization_config=opt_config,\n", + " )\n", + "\n", + " # 4. Establish offline trial_type, and how those trials are deployed\n", + " exp.add_trial_type(\"offline\", SyntheticRunner())\n", + "\n", + " # 5. Add offline metrics that provide biased estimates of the online metrics\n", + " offline_objective = OfflineHartmann6Metric(\n", + " \"offline_objective\", param_names=param_names, noise_sd=noise_sd\n", + " )\n", + " # Associate each offline metric with corresponding online metric\n", + " exp.add_tracking_metric(\n", + " metric=offline_objective, trial_type=\"offline\", canonical_name=\"objective\"\n", + " )\n", + "\n", + " return exp" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "5a00218e-c27d-4d6f-bef0-3e562217533a", + "showInput": false + }, + "source": [ + "## 3. Vizualize the simulator bias\n", + "\n", + "These figures compare the online measurements to the offline measurements on a random set of points, for the objective metric. You can see the offline measurements are biased but highly correlated. This produces Fig. S3 from the paper." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "8260b668-91ef-404e-aa8c-4bf43f6a5660", + "vscode": { + "languageId": "python" + } + }, + "outputs": [], + "source": [ + "# Generate 50 points from a Sobol sequence\n", + "exp = get_experiment(include_true_metric=False)\n", + "s = get_sobol(exp.search_space, scramble=False)\n", + "gr = s.gen(50)\n", + "# Deploy them both online and offline\n", + "exp.new_batch_trial(trial_type=\"online\", generator_run=gr).run()\n", + "exp.new_batch_trial(trial_type=\"offline\", generator_run=gr).run()\n", + "# Fetch data\n", + "data = exp.fetch_data()\n", + "observations = observations_from_data(exp, data)\n", + "# Plot the arms in batch 0 (online) vs. batch 1 (offline)\n", + "render(interact_batch_comparison(observations, exp, 1, 0))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "69cf9e8e-361e-4546-871f-6bb8641d1b97" + }, + "source": [ + "## 4. The Bayesian optimization loop\n", + "\n", + "Here we construct a Bayesian optimization loop that interleaves online and offline batches. The loop defined here is described in Algorithm 1 of the paper. We compare multi-task Bayesian optimization to regular Bayesian optimization using only online observations.\n", + "\n", + "Here we measure performance over 3 repetitions of the loop. Each one takes 1-2 hours so the whole benchmark run will take several hours to complete." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "3d124563-8a1f-411e-9822-972568ce1970", + "vscode": { + "languageId": "python" } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.17" + }, + "outputs": [], + "source": [ + "# Settings for the optimization benchmark.\n", + "\n", + "# Number of repeated experiments, each with independent observation noise.\n", + "# This should be changed to 50 to reproduce the results from the paper.\n", + "if SMOKE_TEST:\n", + " n_batches = 1\n", + " n_init_online = 2\n", + " n_init_offline = 2\n", + " n_opt_online = 2\n", + " n_opt_offline = 2\n", + "else:\n", + " n_batches = 3 # Number of optimized BO batches\n", + " n_init_online = 5 # Size of the quasirandom initialization run online\n", + " n_init_offline = 20 # Size of the quasirandom initialization run offline\n", + " n_opt_online = 5 # Batch size for BO selected points to be run online\n", + " n_opt_offline = 20 # Batch size for BO selected to be run offline" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "5447b3e7-b245-4fab-ad4a-165d7c63e09c" + }, + "source": [ + "#### 4a. Optimization with online observations only\n", + "For the online-only case, we run `n_init_online` sobol points followed by `n_batches` batches of `n_opt_online` points selected by the GP. This is a normal Bayesian optimization loop." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "040354c2-4313-46db-b40d-8adc8da6fafb", + "vscode": { + "languageId": "python" + } + }, + "outputs": [], + "source": [ + "# This function runs a Bayesian optimization loop, making online observations only.\n", + "def run_online_only_bo():\n", + " t1 = time.time()\n", + " ### Do BO with online only\n", + " ## Quasi-random initialization\n", + " exp_online = get_experiment()\n", + " m = get_sobol(exp_online.search_space, scramble=False)\n", + " gr = m.gen(n=n_init_online)\n", + " exp_online.new_batch_trial(trial_type=\"online\", generator_run=gr).run()\n", + " ## Do BO\n", + " for b in range(n_batches):\n", + " print(\"Online-only batch\", b, time.time() - t1)\n", + " # Fit the GP\n", + " m = Models.BOTORCH_MODULAR(\n", + " experiment=exp_online,\n", + " data=exp_online.fetch_data(),\n", + " search_space=exp_online.search_space,\n", + " )\n", + " # Generate the new batch\n", + " gr = m.gen(\n", + " n=n_opt_online,\n", + " search_space=exp_online.search_space,\n", + " optimization_config=exp_online.optimization_config,\n", + " )\n", + " exp_online.new_batch_trial(trial_type=\"online\", generator_run=gr).run()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "c1837efe-9f41-4eb8-a415-309392724141" + }, + "source": [ + "#### 4b. Multi-task Bayesian optimization\n", + "Here we incorporate offline observations to accelerate the optimization, while using the same total number of online observations as in the loop above. The strategy here is that outlined in Algorithm 1 of the paper.\n", + "\n", + "1. Initialization - Run `n_init_online` Sobol points online, and `n_init_offline` Sobol points offline.\n", + "2. Fit model - Fit an MTGP to both online and offline observations.\n", + "3. Generate candidates - Generate `n_opt_offline` candidates using NEI.\n", + "4. Launch offline batch - Run the `n_opt_offline` candidates offline and observe their offline metrics.\n", + "5. Update model - Update the MTGP with the new offline observations.\n", + "6. Select points for online batch - Select the best (maximum utility) `n_opt_online` of the NEI candidates, after incorporating their offline observations, and run them online.\n", + "7. Update model and repeat - Update the model with the online observations, and repeat from step 3 for the next batch." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "vscode": { + "languageId": "python" } + }, + "outputs": [], + "source": [ + "def get_MTGP(\n", + " experiment: Experiment,\n", + " data: Data,\n", + " search_space: Optional[SearchSpace] = None,\n", + " trial_index: Optional[int] = None,\n", + " device: torch.device = torch.device(\"cpu\"),\n", + " dtype: torch.dtype = torch.double,\n", + ") -> TorchModelBridge:\n", + " \"\"\"Instantiates a Multi-task Gaussian Process (MTGP) model that generates\n", + " points with EI.\n", + "\n", + " If the input experiment is a MultiTypeExperiment then a\n", + " Multi-type Multi-task GP model will be instantiated.\n", + " Otherwise, the model will be a Single-type Multi-task GP.\n", + " \"\"\"\n", + "\n", + " if isinstance(experiment, MultiTypeExperiment):\n", + " trial_index_to_type = {\n", + " t.index: t.trial_type for t in experiment.trials.values()\n", + " }\n", + " transforms = MT_MTGP_trans\n", + " transform_configs = {\n", + " \"TrialAsTask\": {\"trial_level_map\": {\"trial_type\": trial_index_to_type}},\n", + " \"ConvertMetricNames\": tconfig_from_mt_experiment(experiment),\n", + " }\n", + " else:\n", + " # Set transforms for a Single-type MTGP model.\n", + " transforms = ST_MTGP_trans\n", + " transform_configs = None\n", + "\n", + " # Choose the status quo features for the experiment from the selected trial.\n", + " # If trial_index is None, we will look for a status quo from the last\n", + " # experiment trial to use as a status quo for the experiment.\n", + " if trial_index is None:\n", + " trial_index = len(experiment.trials) - 1\n", + " elif trial_index >= len(experiment.trials):\n", + " raise ValueError(\"trial_index is bigger than the number of experiment trials\")\n", + "\n", + " status_quo = experiment.trials[trial_index].status_quo\n", + " if status_quo is None:\n", + " status_quo_features = None\n", + " else:\n", + " status_quo_features = ObservationFeatures(\n", + " parameters=status_quo.parameters,\n", + " trial_index=trial_index, # pyre-ignore[6]\n", + " )\n", + "\n", + " \n", + " return checked_cast(\n", + " TorchModelBridge,\n", + " Models.ST_MTGP(\n", + " experiment=experiment,\n", + " search_space=search_space or experiment.search_space,\n", + " data=data,\n", + " transforms=transforms,\n", + " transform_configs=transform_configs,\n", + " torch_dtype=dtype,\n", + " torch_device=device,\n", + " status_quo_features=status_quo_features,\n", + " ),\n", + " )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "37735b0e-e488-4927-a3da-a7d32d9f1ae0", + "vscode": { + "languageId": "python" + } + }, + "outputs": [], + "source": [ + "# Online batches are constructed by selecting the maximum utility points from the offline\n", + "# batch, after updating the model with the offline results. This function selects the max utility points according\n", + "# to the MTGP predictions.\n", + "def max_utility_from_GP(n, m, experiment, search_space, gr):\n", + " obsf = []\n", + " for arm in gr.arms:\n", + " params = deepcopy(arm.parameters)\n", + " params[\"trial_type\"] = \"online\"\n", + " obsf.append(ObservationFeatures(parameters=params))\n", + " # Make predictions\n", + " f, cov = m.predict(obsf)\n", + " # Compute expected utility\n", + " u = -np.array(f[\"objective\"])\n", + " best_arm_indx = np.flip(np.argsort(u))[:n]\n", + " gr_new = GeneratorRun(\n", + " arms=[gr.arms[i] for i in best_arm_indx],\n", + " weights=[1.0] * n,\n", + " )\n", + " return gr_new\n", + "\n", + "\n", + "# This function runs a multi-task Bayesian optimization loop, as outlined in Algorithm 1 and above.\n", + "def run_mtbo():\n", + " t1 = time.time()\n", + " online_trials = []\n", + " ## 1. Quasi-random initialization, online and offline\n", + " exp_multitask = get_experiment()\n", + " # Online points\n", + " m = get_sobol(exp_multitask.search_space, scramble=False)\n", + " gr = m.gen(\n", + " n=n_init_online,\n", + " )\n", + " tr = exp_multitask.new_batch_trial(trial_type=\"online\", generator_run=gr)\n", + " tr.run()\n", + " online_trials.append(tr.index)\n", + " # Offline points\n", + " m = get_sobol(exp_multitask.search_space, scramble=False)\n", + " gr = m.gen(\n", + " n=n_init_offline,\n", + " )\n", + " exp_multitask.new_batch_trial(trial_type=\"offline\", generator_run=gr).run()\n", + " ## Do BO\n", + " for b in range(n_batches):\n", + " print(\"Multi-task batch\", b, time.time() - t1)\n", + " # (2 / 7). Fit the MTGP\n", + " m = get_MTGP(\n", + " experiment=exp_multitask,\n", + " data=exp_multitask.fetch_data(),\n", + " search_space=exp_multitask.search_space,\n", + " )\n", + "\n", + " # 3. Finding the best points for the online task\n", + " gr = m.gen(\n", + " n=n_opt_offline,\n", + " optimization_config=exp_multitask.optimization_config,\n", + " fixed_features=ObservationFeatures(\n", + " parameters={}, trial_index=online_trials[-1]\n", + " ),\n", + " )\n", + "\n", + " # 4. But launch them offline\n", + " exp_multitask.new_batch_trial(trial_type=\"offline\", generator_run=gr).run()\n", + "\n", + " # 5. Update the model\n", + " m = get_MTGP(\n", + " experiment=exp_multitask,\n", + " data=exp_multitask.fetch_data(),\n", + " search_space=exp_multitask.search_space,\n", + " )\n", + "\n", + " # 6. Select max-utility points from the offline batch to generate an online batch\n", + " gr = max_utility_from_GP(\n", + " n=n_opt_online,\n", + " m=m,\n", + " experiment=exp_multitask,\n", + " search_space=exp_multitask.search_space,\n", + " gr=gr,\n", + " )\n", + " tr = exp_multitask.new_batch_trial(trial_type=\"online\", generator_run=gr)\n", + " tr.run()\n", + " online_trials.append(tr.index)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "6708d9ee-34be-4d85-91cc-ed2af5dd8026" + }, + "source": [ + "#### 4c. Run both loops\n", + "Run both Bayesian optimization loops and aggregate results." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "f94a7537-61a6-4200-8e56-01de41aff6c9", + "vscode": { + "languageId": "python" + } + }, + "outputs": [], + "source": [ + "runners = {\n", + " \"GP, online only\": run_online_only_bo,\n", + " \"MTGP\": run_mtbo,\n", + "}\n", + "for k, r in runners.items():\n", + " r()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "1de5ae27-c925-4599-9425-332765a03416" + }, + "source": [ + "#### References\n", + "Benjamin Letham and Eytan Bakshy. Bayesian optimization for policy search via online-offline experimentation. _arXiv preprint arXiv:1603.09326_, 2019.\n", + "\n", + "Kevin Swersky, Jasper Snoek, and Ryan P Adams. Multi-task Bayesian optimization. In _Advances in Neural Information Processing Systems_ 26, NIPS, pages 2004–2012, 2013." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "nbformat": 4, - "nbformat_minor": 4 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 } diff --git a/tutorials/multiobjective_optimization.ipynb b/tutorials/multiobjective_optimization.ipynb index 5cfc5ceef41..bba5d9b68b0 100644 --- a/tutorials/multiobjective_optimization.ipynb +++ b/tutorials/multiobjective_optimization.ipynb @@ -1,1023 +1,1026 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "customInput": null, - "hidden_ranges": [], - "originalKey": "95e7a97a-bf78-48d4-a0c1-c0e8dfc4fed9", - "showInput": true - }, - "source": [ - "# Multi-Objective Optimization Ax API\n", - "### Using the Service API\n", - "For Multi-objective optimization (MOO) in the `AxClient`, objectives are specified through the `ObjectiveProperties` dataclass. An `ObjectiveProperties` requires a boolean `minimize`, and also accepts an optional floating point `threshold`. If a `threshold` is not specified, Ax will infer it through the use of heuristics. If the user knows the region of interest (because they have specs or prior knowledge), then specifying the thresholds is preferable to inferring it. But if the user would need to guess, inferring is preferable.\n", - "\n", - "\n", - "To learn more about how to choose a threshold, see [Set Objective Thresholds to focus candidate generation in a region of interest](#Set-Objective-Thresholds-to-focus-candidate-generation-in-a-region-of-interest). See the [Service API Tutorial](/tutorials/gpei_hartmann_service.html) for more infomation on running experiments with the Service API." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "hidden_ranges": [], - "originalKey": "06bf2029-0ea4-40b4-aced-956f1411cb6e", - "showInput": true - }, - "outputs": [], - "source": [ - "from ax.service.ax_client import AxClient\n", - "from ax.service.utils.instantiation import ObjectiveProperties\n", - "\n", - "import torch\n", - "\n", - "# Plotting imports and initialization\n", - "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", - "from ax.plot.pareto_utils import compute_posterior_pareto_frontier\n", - "from ax.plot.pareto_frontier import plot_pareto_frontier\n", - "\n", - "init_notebook_plotting()\n", - "\n", - "# Load our sample 2-objective problem\n", - "from botorch.test_functions.multi_objective import BraninCurrin\n", - "\n", - "branin_currin = BraninCurrin(negate=True).to(\n", - " dtype=torch.double,\n", - " device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1628191188673, - "executionStopTime": 1628191188746, - "hidden_ranges": [], - "originalKey": "c687973d-1b09-4a8f-9108-1f74adf64d4d", - "requestMsgId": "ea523260-8896-48e4-a62f-3530d268b209", - "showInput": true - }, - "outputs": [], - "source": [ - "ax_client = AxClient()\n", - "ax_client.create_experiment(\n", - " name=\"moo_experiment\",\n", - " parameters=[\n", - " {\n", - " \"name\": f\"x{i+1}\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " }\n", - " for i in range(2)\n", - " ],\n", - " objectives={\n", - " # `threshold` arguments are optional\n", - " \"a\": ObjectiveProperties(minimize=False, threshold=branin_currin.ref_point[0]),\n", - " \"b\": ObjectiveProperties(minimize=False, threshold=branin_currin.ref_point[1]),\n", - " },\n", - " overwrite_existing_experiment=True,\n", - " is_test=True,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "customInput": null, - "hidden_ranges": [], - "originalKey": "70fd45e1-a2ce-4034-bb44-086507833472", - "showInput": true - }, - "source": [ - "### Create an Evaluation Function\n", - "In the case of MOO experiments, evaluation functions can be any arbitrary function that takes in a `dict` of parameter names mapped to values and returns a `dict` of objective names mapped to a `tuple` of mean and SEM values." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1628191201840, - "executionStopTime": 1628191201871, - "hidden_ranges": [], - "originalKey": "a0e4fa8d-ebc7-4dc6-b370-ed4a83e3208f", - "requestMsgId": "9cfd336d-c317-4d1c-a028-42d45903bac6", - "showInput": true - }, - "outputs": [], - "source": [ - "def evaluate(parameters):\n", - " evaluation = branin_currin(\n", - " torch.tensor([parameters.get(\"x1\"), parameters.get(\"x2\")])\n", - " )\n", - " # In our case, standard error is 0, since we are computing a synthetic function.\n", - " # Set standard error to None if the noise level is unknown.\n", - " return {\"a\": (evaluation[0].item(), 0.0), \"b\": (evaluation[1].item(), 0.0)}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "customInput": null, - "hidden_ranges": [], - "originalKey": "4200cd7c-8e13-4cbf-b0c1-72b52d900aaf", - "showInput": true - }, - "source": [ - "### Run Optimization" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "customInput": null, - "executionStartTime": 1628191208271, - "executionStopTime": 1628191238749, - "originalKey": "f91b1a1e-c78a-4262-a211-a13115c007c1", - "requestMsgId": "842a1cf8-97a3-43d6-83a3-f258ea96ae20", - "showInput": true - }, - "outputs": [], - "source": [ - "for i in range(25):\n", - " parameters, trial_index = ax_client.get_next_trial()\n", - " # Local evaluation here can be replaced with deployment to external system.\n", - " ax_client.complete_trial(trial_index=trial_index, raw_data=evaluate(parameters))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "customInput": null, - "hidden_ranges": [], - "originalKey": "e0a6feb4-8c38-42e4-9d7c-62b79307e043", - "showInput": false - }, - "source": [ - "### Plot Pareto Frontier" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "customInput": null, - "executionStartTime": 1628191262231, - "executionStopTime": 1628191270720, - "hidden_ranges": [], - "originalKey": "c2c2b222-6b68-4f1a-839f-16b50019ada4", - "requestMsgId": "563d345b-573c-4d93-a480-5db88a283250", - "showInput": true - }, - "outputs": [], - "source": [ - "objectives = ax_client.experiment.optimization_config.objective.objectives\n", - "frontier = compute_posterior_pareto_frontier(\n", - " experiment=ax_client.experiment,\n", - " data=ax_client.experiment.fetch_data(),\n", - " primary_objective=objectives[1].metric,\n", - " secondary_objective=objectives[0].metric,\n", - " absolute_metrics=[\"a\", \"b\"],\n", - " num_points=20,\n", - ")\n", - "render(plot_pareto_frontier(frontier, CI_level=0.90))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "f4f6ce29-4a0c-4ac5-84a7-f83a4de9112c", - "showInput": true - }, - "source": [ - "# Deep Dive\n", - "\n", - "In the rest of this tutorial, we will show two algorithms available in Ax for multi-objective optimization\n", - "and visualize how they compare to eachother and to quasirandom search.\n", - "\n", - "MOO covers the case where we care about multiple\n", - "outcomes in our experiment but we do not know before hand a specific weighting of those\n", - "objectives (covered by `ScalarizedObjective`) or a specific constraint on one objective \n", - "(covered by `OutcomeConstraint`s) that will produce the best result.\n", - "\n", - "The solution in this case is to find a whole Pareto frontier, a surface in outcome-space\n", - "containing points that can't be improved on in every outcome. This shows us the\n", - "tradeoffs between objectives that we can choose to make." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "e04a24fa-dcfc-4430-960f-9c0e772fd754", - "showInput": true - }, - "source": [ - "### Problem Statement\n", - "\n", - "Optimize a list of M objective functions $ \\bigl(f^{(1)}( x),..., f^{(M)}( x) \\bigr)$ over a bounded search space $\\mathcal X \\subset \\mathbb R^d$.\n", - "\n", - "We assume $f^{(i)}$ are expensive-to-evaluate black-box functions with no known analytical expression, and no observed gradients. For instance, a machine learning model where we're interested in maximizing accuracy and minimizing inference time, with $\\mathcal X$ the set of possible configuration spaces" - ] - }, - { - "attachments": { - "pareto_front%20%281%29.png": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAE5wAABCzCAIAAACj6tz9AAAABGdBTUEAALGPC/xhBQAADGVpQ0NQSUNDIFByb2ZpbGUAAEiJlZcHXJNHG8DvHZkkrEAEZIS9RJEZQEYIK4KATEFUQhJIGDEmBBUXoqUK1i2iOCpaFVCwDkDqQMQ6i+K2juJApVKLVVyofBcS0Npv/L7jd+/93+eee+55Hu7y3gGg08mXyXJRXQDypPnyuPBg1qSUVBbpESDAP20AAIUvUMg4sbFRkMFQ+/fy+jpAVO0VF5Wtf/b/16IvFCkEACBpkDOECkEe5BYA8GKBTJ4PADEEyq1n5stULIZsIIcOQp6r4iw1r1Rxhpp3DOokxHEhNwFApvH58iwAtNugnFUgyIJ2tB9BdpUKJVIAdAwgBwjEfCHkBMij8vKmq7gIsgPUl0HeDZmd8YXNrL/Zzxi2z+dnDbM6rsFCDpEoZLn82f9nav53yctVDs1hBytNLI+IU8UPc3gzZ3qkimmQe6QZ0TGqXEN+KxGq8w4AShUrIxLV+qipQMGF+QNMyK5CfkgkZFPIYdLc6CiNPCNTEsaDDFcLOkuSz0vQjF0iUoTGa2xukk+PixniTDmXoxlbx5cPzqvSb1PmJHI09m+KRbwh+68KxQnJkKkAYNQCSVI0ZLgGMQNFTnykWgezKhRzo4d05Mo4lf82kNkiaXiw2j6WlikPi9Poy/IUQ/FiJWIJL1rDFfnihAh1frAaAX/QfyPIDSIpJ3HIjkgxKWooFqEoJFQdO9YukiZq4sXuyfKD4zRje2W5sRp9nCzKDVfJrSCbKAriNWPxcflwcart41Gy/NgEtZ94ejZ/fKzaH7wARAEuCAEsoIQ1A0wH2UDS3tPYA9/UPWGAD+QgC4iAi0YyNCJ5sEcKn/GgEPwBSQQUw+OCB3tFoADKPw5L1U8XkDnYWzA4Igc8hpwHIkEufFcOjpIOz5YEHkGJ5B+zC6CvubCq+v4p40BJlEaiHLLL0hnSJIYSQ4gRxDCiI26CB+B+eBR8BsHqhrNxnyFvP+sTHhM6CA8I1widhFvTJMXyr3yZADqh/TBNxBlfRozbQZueeDDuD61DyzgTNwEuuAech4MHwpk9oZSr8VsVO+vfxDkcwRc51+hRXCkoZQQliOLw9UhtJ23PYSuqjH6ZH7WvGcNZ5Q73fD0/94s8C2Eb+bUmtgQ7gJ3GTmBnsSNYI2Bhx7Em7AJ2VMXDa+jR4Boami1u0J8caEfyj/n4mjlVmVS41rp2u37Q9IF80ax81QbjTpfNlkuyxPksDvwKiFg8qWD0KJabq5srAKpvivpn6iVz8FuBMM99lhXfBcA/ZWBg4MhnWRTcpwefwm3e81lmXwsA/RgAZ74RKOUFahmuehDgr4EO3FHGwBxYAwcYkRvwAn4gCISC8SAGJIAUMBXmWQzXsxzMBHPBQlACysBKsA5sBFvBdrAb7AX7QSM4Ak6An8F5cAlcA7fh+ukCz0AveA36EQQhIXSEgRgjFogt4oy4IWwkAAlFopA4JAVJR7IQKaJE5iKLkDJkNbIR2YZUIz8ih5ETyFmkA7mF3Ee6kb+Q9yiG0lAD1Ay1Q8egbJSDRqIJ6BQ0C52BFqKL0eVoBVqF7kEb0BPoefQa2ok+Q/swgGlhTMwSc8HYGBeLwVKxTEyOzcdKsXKsCqvDmuF/+grWifVg73AizsBZuAtcwxF4Ii7AZ+Dz8WX4Rnw33oC34Vfw+3gv/olAJ5gSnAm+BB5hEiGLMJNQQign7CQcIpyCu6mL8JpIJDKJ9kRvuBtTiNnEOcRlxM3EemILsYP4kNhHIpGMSc4kf1IMiU/KJ5WQNpD2kI6TLpO6SG/JWmQLshs5jJxKlpKLyeXkGvIx8mXyE3I/RZdiS/GlxFCElNmUFZQdlGbKRUoXpZ+qR7Wn+lMTqNnUhdQKah31FPUO9aWWlpaVlo/WRC2JVpFWhdY+rTNa97Xe0fRpTjQuLY2mpC2n7aK10G7RXtLpdDt6ED2Vnk9fTq+mn6Tfo7/VZmiP1uZpC7UXaFdqN2hf1n6uQ9Gx1eHoTNUp1CnXOaBzUadHl6Jrp8vV5evO163UPax7Q7dPj6E3Vi9GL09vmV6N3lm9p/okfTv9UH2h/mL97fon9R8yMIY1g8sQMBYxdjBOMboMiAb2BjyDbIMyg70G7Qa9hvqGHoZJhrMMKw2PGnYyMaYdk8fMZa5g7mdeZ74fYTaCM0I0YumIuhGXR7wxGmkUZCQyKjWqN7pm9N6YZRxqnGO8yrjR+K4JbuJkMtFkpskWk1MmPSMNRvqNFIwsHbl/5K+mqKmTaZzpHNPtphdM+8zMzcLNZGYbzE6a9ZgzzYPMs83Xmh8z77ZgWARYSCzWWhy3+J1lyOKwclkVrDZWr6WpZYSl0nKbZbtlv5W9VaJVsVW91V1rqjXbOtN6rXWrda+Nhc0Em7k2tTa/2lJs2bZi2/W2p23f2NnbJdt9a9do99TeyJ5nX2hfa3/Hge4Q6DDDocrhqiPRke2Y47jZ8ZIT6uTpJHaqdLrojDp7OUucNzt3jCKM8hklHVU16oYLzYXjUuBS63J/NHN01Oji0Y2jn4+xGZM6ZtWY02M+uXq65rrucL09Vn/s+LHFY5vH/uXm5CZwq3S76k53D3Nf4N7k/sLD2UPkscXjpifDc4Lnt56tnh+9vL3kXnVe3d423unem7xvsA3Ysexl7DM+BJ9gnwU+R3ze+Xr55vvu9/3Tz8Uvx6/G7+k4+3GicTvGPfS38uf7b/PvDGAFpAd8H9AZaBnID6wKfBBkHSQM2hn0hOPIyebs4TwPdg2WBx8KfsP15c7jtoRgIeEhpSHtofqhiaEbQ++FWYVlhdWG9YZ7hs8Jb4kgRERGrIq4wTPjCXjVvN7x3uPnjW+LpEXGR26MfBDlFCWPap6AThg/Yc2EO9G20dLoxhgQw4tZE3M31j52RuxPE4kTYydWTnwcNzZubtzpeEb8tPia+NcJwQkrEm4nOiQqE1uTdJLSkqqT3iSHJK9O7pw0ZtK8SedTTFIkKU2ppNSk1J2pfZNDJ6+b3JXmmVaSdn2K/ZRZU85ONZmaO/XoNJ1p/GkH0gnpyek16R/4Mfwqfl8GL2NTRq+AK1gveCYMEq4Vdov8RatFTzL9M1dnPs3yz1qT1S0OFJeLeyRcyUbJi+yI7K3Zb3JicnblDOQm59bnkfPS8w5L9aU50rbp5tNnTe+QOctKZJ0zfGesm9Erj5TvVCCKKYqmfAN4eL+gdFB+o7xfEFBQWfB2ZtLMA7P0ZklnXZjtNHvp7CeFYYU/zMHnCOa0zrWcu3Du/XmcedvmI/Mz5rcusF6weEFXUXjR7oXUhTkLfyl2LV5d/GpR8qLmxWaLixY//Cb8m9oS7RJ5yY1v/b7dugRfIlnSvtR96Yaln0qFpefKXMvKyz4sEyw7993Y7yq+G1ieubx9hdeKLSuJK6Urr68KXLV7td7qwtUP10xY07CWtbZ07at109adLfco37qeul65vrMiqqJpg82GlRs+bBRvvFYZXFm/yXTT0k1vNgs3X94StKVuq9nWsq3vv5d8f3Nb+LaGKruq8u3E7QXbH+9I2nH6B/YP1TtNdpbt/LhLuqtzd9zutmrv6uoa05oVtWitsrZ7T9qeS3tD9jbVudRtq2fWl+0D+5T7fv8x/cfr+yP3tx5gH6g7aHtw0yHGodIGpGF2Q2+juLGzKaWp4/D4w63Nfs2Hfhr9064jlkcqjxoeXXGMemzxsYHjhcf7WmQtPSeyTjxsndZ6++Skk1fbJra1n4o8debnsJ9PnuacPn7G/8yRs75nD59jn2s873W+4YLnhUO/eP5yqN2rveGi98WmSz6XmjvGdRy7HHj5xJWQKz9f5V09fy36Wsf1xOs3b6Td6LwpvPn0Vu6tF78W/Np/u+gO4U7pXd275fdM71X95vhbfadX59H7IfcvPIh/cPuh4OGzR4pHH7oWP6Y/Ln9i8aT6qdvTI91h3Zd+n/x71zPZs/6ekj/0/tj03OH5wT+D/rzQO6m364X8xcBfy14av9z1yuNVa19s373Xea/735S+NX67+x373en3ye+f9M/8QPpQ8dHxY/OnyE93BvIGBmR8OX/wKIDBimZmAvDXLnhOSAGAcQmeHyar73yDBVHfUwcJ/CdW3wsHixcAdbBRHde5LQDsg9WuCNqG76qjekIQQN3dh6umKDLd3dS2aPDGQ3g7MPDSDABSMwAf5QMD/ZsHBj7COyp2C4CWGeq7pqoQ4d3g+yAVXTMSFoGvivoe+kWMX7dA5YEH+Lr9F7miiVD3w44kAAAAIGNIUk0AAHomAACAhAAA+gAAAIDoAAB1MAAA6mAAADqYAAAXcJy6UTwAAAAJcEhZcwABM5UAATOVAWBIbPYAACAASURBVHic7N1BbttKEADRjOH7X3n+IkEQ2PiJSKk8HPq9pWFRLa16oUKPOecPAAAAAAAAAAAAAAAAAAAova0eAAAAAAAAAAAAAAAAAACA+xO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAA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AAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhnr0HAACALJZl+fY/67p2mQQAAAAAAAAAAAAAAOpZ/Jk+AAD8zFn/5MwMAAAAAAAAAAAAAADXiVoBAJjads76JydnAAAAAAAAAAAAAAC44tF7AAAA6GZ/0Xr0lwEAAAAAAAAAAAAAgG9ErQAAAAAAAAAAAAAAAAAAhBO1AgAwqRObVy1rBQAAAAAAAAAAAACA00StAAAAAAAAAAAAAAAAAACEE7UCADCj0ztXLWsFAAAAAAAAAAAAAIBzRK0AAAAAAAAAAAAAAAAAAIQTtQIAMJ2L21YtawUAAAAAAAAAAAAAgBNErQAAAAAAAAAAAAAAAAAAhBO1AgAwlyZ7Vi1rBQAAAAAAAAAAAACAo0StAABMpGGMqmsFAAAAAAAAAAAAAIBDRK0AAAAAAAAAAAAAAAAAAIQTtQIAMIvmu1UtawUAAAAAAAAAAAAAgP1ErQAATCEoQNW1AgAAAAAAAAAAAADATqJWAAC4RNcKAAAAAAAAAAAAAAB7iFoBAKhPdwoAAAAAAAAAAAAAAN2JWgEAKO6GolU0CwAAAAAAAAAAAAAAb4laAQCo7LbcVNcKAAAAAAAAAAAAAADbRK0AANCGrhUAAAAAAAAAAAAAADaIWgEAKEtlCgAAAAAAAAAAAAAAeYhaAQCoqUvRKqMFAAAAAAAAAAAAAIDfiFoBACioY1yqawUAAAAAAAAAAAAAgJdErQAAVNM9K+0+AAAAAAAAAAAAAAAAJCRqBQCA9nStAAAAAAAAAAAAAADwjagVAIBS1KQAAAAAAAAAAAAAAJCTqBUAgDpSFa2phgEAAAAAAAAAAAAAgO5ErQAAFJEwIk04EgAAAAAAAAAAAAAA9CJqBQCggrT5aNrBAAAAAAAAAAAAAADgZqJWAACGlzwcTT4eAAAAAAAAAAAAAADcQ9QKAMDYhkhGhxgSAAAAAAAAAAAAAABCiVoBABjYQLHoQKMCAAAAAAAAAAAAAEAEUSsAAKMaLhMdbmAAAAAAAAAAAAAAAGhI1AoAwJAGDUQHHRsAAAAAAAAAAAAAAK4TtQIAMJ6h09ChhwcAAAAAAAAAAAAAgNNErQAADKZAFFrgFgAAAAAAAAAAAAAA4ChRKwAAIymTg5a5EQAAAAAAAAAAAAAA2EnUCgDAMIqFoMVuBwAAAAAAAAAAAAAAtolaAQAYQ8kEtORNAQAAAAAAAAAAAADAS8u6rr1nAACAN2rHn87kAAAAAAAADGH5138+/7H++6++k/CNVwMAAADAKEStAABkV7to/eRYDgAAAAAAQGZfzeQX8WQe3g4AAAAAA3n0HgAAALbMULR+THObAAAAAAAAjOhnM0lyXhkAAAAAadnUCgBAXrOlng7nAAAAAAAApLLRRtoFmspvb8prAgAAACAbm1oBAEgqomhtWI1GBKizRbwAAAAAAABkpmgdyG9vxMpWAAAAALKxqRUAgIziitZW39z2215+OQAAAAAAAPRi8+eIvDUAAAAA8hO1AgCQS3Qm2jZqbfiFv30/AAAAAAAA3MmC1qF5fQAAAAAk9+g9AAAA/E9QIBoqqD4d8VEAAAAAAAAwOknk6DZe08bLBQAAAIDbiFoBAMgiLuOM3nqqawUAAAAAAKAARWsNulYAAAAAMhO1AgDQ37Is4xatoVcJfTIAAAAAAADwRdFaia4VAAAAgLRErQAAdBYabd5TtEZfS9cKAAAAAABAKEVrPbpWAAAAAHIStQIA0E30GtI7i9boK1rZCgAAAAAAQBBFa1W6VgAAAAASErUCANBHdKJ5f9F6w3V1rQAAAAAA8Dd7d4/curEtYFRQKeJEFDo+Ho2HdkZzFDvkRJTiBXwl61ISiJ9G997da5WTa+uQ3WgQom/5qw2UpWjtm64VAAAAgGimVv+tPwAAw2qbs5Z69zrvsu/dAQAAAAAAYA1F6yAcNAAAAABxiFoBAKinwqDRh99v60StBd/oyBoAAAAAAADgJwOGjutnk/Z3BQY8bgAAAABiErUCAFBDhcLzaV3kWS1qLfhex1cCAAAAAAAAnw2SOK6vWBd0c0EGOXQAAAAAgntpvQAAAHpWp+q8Cdh2zvNc4Qp8vEXAKwAAAAAAAEBARVLPsIrv7uMFOy4/p9f3jncHAAAAQCgmtQIAUFjNkPXD+q+1NSe1ln3HTXzPBwAAAAAA4FvLzWfqsrFarJv3KnV8+gAAAABk8dx6AQAAdEXA+VWT5TU5CAAAAAAAAFJL2jROr++3v2q+Y7X3KivpEQMAAADQE5NaAQAoJkXRWn9Sa9n33coXfgAAAAAAAD4s1JhJc8e2fWl/Fy3pjgAAAABI5KX1AgAA6ESKorWheZ5NTwUAAAAAAKChvPNFv7VjOyuLzfWvfPvJnkLQ6fW9p+0AAAAAEJBJrQAAFJCoaG01qbX4AtbznR8AAAAAAIDlUDNXx7g1Z929u/VvlOsCPvV1PwAAAACQi6gVAIACKoeaR77ENo9aC65hJd/5AQAAAAAABtdTwVg/NF35jrku41NfdwUAAAAAiTy3XgAAAOlJNLeqvIUmc3QBAAAAAACguCajU+frZc2rbZ0fCwAAAABjMqkVAICjajaTx7++RpjUWnYla/jaDwAAAAAAMKw+BnI2yVl3rCHL9bzp494AAAAAIBeTWgEAyGGe587KzP52BAAAAAAAQDR9VIsRitaVL55rXuvyjnLtBQAAAIAsRK0AACTQcfzZ8dYAAAAAAADguCBF6/q30IICAAAAwAJRKwAAoY0wznSEPQIAAAAAAFBfB2NaQxWt698oUddqWCsAAAAAlYlaAQCIa6jUc6jNAgAAAAAAcLYOcsSARet6HVz/m242AgAAAEAQolYAACIac3jpmLsGAAAAAACgvoAV6J3IRWv8q7dJZ9sBAAAAIDhRKwAARxXvMAcPO4unrYNfTwAAAAAAgAEtF6EixuPWXMNEM06Xt5NoIwAAAADEJ2oFACAQo0o/uA4AAAAAAAAMK/KY1k3koAAAAABwZ/LfygMAUMQ0TUf+eLXvpQfX+aHmF+kja/aFHwAAAAAAYDTZx7QmKlrXLLX5ItfLfucMaOWHxdkBAAAAoby0XgAAAJ2Y53lHeym5XON2lVxeAAAAAAAAHso+GjT7+r+aXt/7SAq72Ug6xz8UC6/gTAEAAID6RK0AABSzqWvVW271ccVWXmRXGAAAAAAAgDs9BWwR9jJfLz1VuJ1tJ6+ap3D3XhE+VgAAAED3RK0AAJS0PFNUZlnEw7rVdQYAAAAAABhT9iIx+/p/0s2M0242ElCQm//zMpw1AAAAcBJRKwAA5Ykq63CdAQAAAAAAGJPcjg4ECVl/8rE8HzcAAACgrMl/Bw8AwFB+mm66lS/SAAAAAAAAhPIwkAtepm0K/ELtZeXKQ615QfYbKb7gLesCRw8AAAAUYVIrAAAAAAAAAAAAwInytqwfzG4FAAAAinhuvQAAAAAAAAAAAAAOMV0zvixN48NbJctG4phe3zu7aLcddbYpAAAAoBqTWgEAAAAAAAAAAGhJHUeXur+xbxvUzAMAAACbmNQKAAAAAAAAAACQWPfh3J1oBV209VQw2i231WiDTIfaLAAAAHCcqBUAAAAAAAAAAKBnA1aXMWUJ/9wwu42cd468dwAAAGATUSsAAAAAAAAAAADNCOHogzv5SdoKAAAArCBqBQAAAAAAAAAAyOphP2bqJjs8vG2Ei58pOe+4IAAAAMACUSsAAAAAAAAAAADUoPTrjHpzgSsDAAAAfEvUCgAAAAAAAAAAkJJmjIYGv/3krGu4SgAAAMBXolYAAAAAAAAAAIA+zddL6yU80EfwFv8679Dlpkrp476tRtoKAAAAfCZqBQAAAAAAAAAAAHhMn7mb6wYAAADciFoBAAAAAAAAAADyUYgl1dPB9bSXNUbbb3GSYAAAAOBJ1AoAAAAAAAAAAACwTI1ZiisJAAAAgxO1AgAAAAAAAAAAdGi+XlovgdzcQjfmixbnegIAAMDIRK0AAAAAAAAAAADJSMIIovtbsfsNtiIVBgAAgGGJWgEAAAAAAAAAAADuqS7P5goDAADAgEStAAAAAAAAAAAAUI+QLwXHVIfrDAAAAKMRtQIAAAAAAAAAAGSypgGbr5cKK6F7a26k/qLE6fW9v01F5moDAADAUEStAAAAAAAAAAAAAE9PAstGXHYAAAAYh6gVAAAAAAAAAAAAQFrZkosPAAAAgxC1AgAAAAAAAAAAAKMTVTbnCAAAAGAEolYAAAAAAAAAAIA01kRf8/VSYSVFJFrqsNacUQctYgdb6IODAAAAgO6JWgEAAAAAAAAAAIBxCSlDcRwAAADQN1ErAAAAAAAAAAAAMCgJZUAOBQAAADomagUAAAAAAAAAAABGJJ4My9EAAABAr0StAAAAAAAAAAAAOai8YtpxLv0dZcYdZVzzUBwQAAAAdEnUCgAAAAAAAAAAQDPz9dJ6CYxIMJmCYwIAAID+iFoBAAAAAAAAAAD60X0jKnKrr/ubish85AEAAKAzolYAAAAAAAAAAADYSXGXkVPLxXkBAABAT0StAAAAAAAAAAAAtGQQKDUpJAEAAAAaErUCAAAAAAAAAAAAQ1C0JuXgAAAAoBuiVgAAAAAAAAAAgAT6brqSDmvt+1C2in814q+QBY4PAAAA+iBqBQAAAAAAAAAAIBNtG4zJZx8AAAA6IGoFAAAAAAAAAACgvXTDWvV1uTgvAAAAgAhErQAAAAAAAAAAAEDPFK3dcJQAAACQnagVAAAAAAAAAACgE+mGnd5Zv/7mYVvzBVSW/daiJ6N9+gAAAKAzolYAAAAAAAAAAACgWxpIAAAAgDhErQAAAAAAAAAAAESRYljr17c2yDQsRWuXHCsAAADkJWoFAAAAAAAAAAAgkOBdq5oOIvBJBAAAgKRErQAAAAAAAAAAAMSSa/DpfL3o62JyLgAAAADRiFoBAAAAAAAAAAAIZ2XXWrla/Pp2ufrboShau+eIAQAAICNRKwAAAAAAAAAAQHRjtluhutbp9X3MU9jEJaIytxwAAACkI2oFAAAAAAAAAAAgqCBd60+vb0xrWFpHAAAAgJhErQAAAAAAAAAAAMTVvGs9o2hVw0IpAmYAAADIRdQKAAAAAAAAAABAaOu71uJ5mxmtGakcAQAAAMIStQIAAAAAAAAAABDd+oi0VNC4kMgqWiEUGTMAAAAk8tJ6AQAAAAAAAAAAAPDYfL2sTNduP7YvPX34ForW4PSNAAAAAJGJWgEAAAAAAAAAAMjhFpRuSls//8H1P7+8ACCa6fXdxxMAAABSELUCAAAAAAAAAACQyfqRrR+OT+/Uy6VgTCsAAABAcM+tFwAAAAAAAAAAAADbzNdLzcpU0QrxSZoBAAAgBZNaAQAAAAAAAAAASOnWmp5asp2Rs0pkT6JpBAAAAIhP1AoAAAAAAAAAAEBiH41o2aZRegoAAAAAxYlaAQAAAAAAAAAA6EGRulXLCnlNr+8+wgAAABCcqBUAAAAAAAAAAICu3FVty42rBK4PZef0AgAAAHASUSsAAAAAAAAAAAA9Oztb3ZRTamjhVIa1AgAAQHDPrRcAAAAAAAAAAAAAsJ8xrQAAAABZiFoBAAAAAAAAAACAAkzIBAAAAGCZqBUAAAAAAAAAACA6rSDASib3AgAAQGSiVgAAAAAAAAAAAKhBnHwGBSMAAABAIqJWAAAAAAAAAAAAAAAAAABOJ2oFAAAAAAAAAACAnYwJhYB8MAEAACAsUSsAAAAAAAAAAACcbr5eWi8BAAAAABoTtQIAAAAAAAAAAABLws69DLswAAAAAL4lagUAAAAAAAAAAOiEwC8sY1oBAAAA4EnUCgAAAAAAAAAAAPuoiCEsH08AAACISdQKAAAAAAAAAAAAJzKm9SSqRQAAAIB0RK0AAAAAAAAAAAAJCCMJzi0KAAAAwEOiVgAAAAAAAAAAANhs5ZhQqScAAAAAfHhpvQAAAAAAAAAAAAD4xtdqVCAKrDe9vntoAAAAQDQmtQIAAAAAAAAAABDOt3NQp9f3lfNRz2ZMKwAAAADsYFIrAAAAAAAAAABQ0l3sJ+pjq4e9qOmLlQUJie/EXBUAAAAAy0StAAAAAAAAAADAIctpmca1skGCz7bbNKYVAAAAAPZ5br0AAAAAAAAAAAAgq+n1feuwxB1/JJqGWxghklx/bYPfSCMc1mej7RcAAACAfUxqBQAAAAAAAAAANjvYE97+eK4K7m7LH/8z1y6CC96p3qRYJAAAAADEJGoFAAAAAAAAAAA2KFj0ZUlbl7ecZRfU5H6AIKbXd59HAAAACOW59QIAAAAAAAAAAIA0zphRGXzu5crlBd8Fpaw5aAUdAAAAAPzEpFao4e3trcjr/Pr1q8jrVGDLu9lyZKW2/DTkrm05sgG3XMTb21uiLQ94yh7aR9hyZLa824Bbfsqz6wG3/OTePsCWI7PlIwbctS1HZsu72XJkHtpH2HJktrybLUfmoX1EhS3vyPnWF6F/fv+7dT1BtrxGwVOer5eHq4owmXDvlv/a9NOVd7ryfjh43NEeX2t2/ef3vwfv8Wi7ZnCJfjWXYsu7DbjlpyF3bcuRDbhlAIDsTGoFAAAAAAAAAAAeWw7b5uvl9tfXv7/y9f/+Z1vNWIHhq/E1b3e/2pFns4OPJwAAAEBSolYAAAAAAAAAAOCBhX7s25b17gdWvkvArnUTlV3fVg4srbASAAAAAMhL1AoAAAAAAAAAACxZLlprrqQmhSqfKVoBAAAAoAhRKwAAAAAAAAAA8KOfWr6HA1rvfnjlT2Yf1lpHxy3xJtWuw5qitddDUfMCAAAAUJaoFQAAAAAAAAAA+N5C0Vp5JSmEuixJJ80GzCNHLloBAAAAoDhRKwAAAAAAAAAA8I1WRWuEYa1Ji9ChVOhIp9d3RSsAAAAAlCVqBQAAAAAAAAAA7pnRGtzgB1GnaA2ykuACDtcFAAAAIDJRKwAAAAAAAAAAAFEsRJLz9XL769QFrBzQ+jRA0WpkMQAAAADFiVoBAAAAAAAAAID/0XxM69///FXnjQoK2Df2VyRW2NH6nDXgiQMAAABAfKJWAAAAAAAAAADgP82L1ub6a0HTWRjWun6M6ia3lzWgFQAAAADOJmoFAAAAAAAAAAAeUPEF1PehLHStTxsb1GWbXseA1jvLxwQAAAAAX720XgAAAAAAAAAAABCFIaWdmV7f80aYf37/+/c/fy3/zN0du2azu2/yvFdyH08DAAAAAM4gagUAAAAAAAAAAJYcb/m6r+Na5Y7z9dL3tf3z+99fv36t3+NJV2O0nHWl+Xp5e2u9CAAAAACyeW69AAAAAAAAAAAAIIS+88iVXISAGjal8/WiaAUAAACAgkxqBQAAAAAAAAAAfqToy256fe/gEG9bqJYcd3DFDlJ3AwAAAHASk1oBAAAAAAAAAAANW1ZD5ZcV5qYazbqSqwQAAADAPia1AgAAAAAAAAAA3yvSrXWfy6r7Kvt8wYvcXU7wTvefWQAAAAAaErUCAAAAAAAAAMDoojVsf37/23oJmczXy/IJTq/vvXabX/e15mbu9WpU4wICAAAAsJuoFQAAAAAAAAAA+MaA3Vq0uJcdBrxvAQAAACCR59YLAAAAAAAAAAAAWjq15JSJ1vGw5HQQrPTwVpENAwAAAHCEqBUAAAAAAAAAALjXsFv78/vfVm+9g8APAAAAAGA9USsAAAAAAAAAAIzLAM9uyGs5LtGY1jgrAQAAAGATUSsAAAAAAAAAAHCKXMVsrtXu0P0GAQAAAID4pnmeW68BAADqmaapyOv4Ig0AAAAAAPTh29Cx1AjEHRVlw+mL+5rPaOMil3cRbbVEk+v+0WmzUrRbFwAAAAZnUisAAAAAAAAAAAxKEnZQulDKibPA7QEAAABABaJWAAAAAAAAAACgPIFcE+k6W7Jwa5GUWxcAAACiEbUCAAAAAAAAAAAhNEyPxklwx9kpm7gxAAAAAKhD1AoAAAAAAAAAAPynSFkqkGvIWEKKc1MBAAAAUIqoFQAAAAAAAAAAaC9dNZduwR8kx9xJekvk/QwCAAAAjEzUCgAAAAAAAAAA/D+RWB+cIwW5nQAAAAAoSNQKAAAAAAAAAACDOqlVSzf1Md2C11g+3C63zD7LN4OildTcwAAAABDQS+sFAAAAAAAAAAAAzQQJfoIsYyjT67vLjrwZAAAAgMpMagUAAAAAAAAAANgmRQ6aYpFE5hYCAAAAoDhRKwAAAAAAAAAAUIzBj6EsR4kOa3DLN0CKojXFIgEAAAD4TNQKAAAAAAAAAAC01DZLE3YyJnc+3dM8AwAAQEyiVgAAAAAAAAAAgG4Z1soOakAAAAAATiJqBQAAAAAAAAAAythRSGZs59KtWdfKneVDz3WH51otAAAAAKJWAAAAAAAAAAAAAAAAAABOJ2oFAAAAAAAAAAAGNc6QUsNa+dDTmFb4iTsZAAAAwnppvQBI7+3trcjr/Pr1q8jrAAAAQE/8ezcA5OJ3NwAkUuoX95Pf3XyyI4wUHdU0Xy8LZzS9vjuOEShaAQDq8H+YAwD8xKRWAAAAAAAAAACAtVJXf+a1Dq7XojXvygEAAAAGJGoFAAAAAAAAAAAYhfxvWL0WrfCV+xkAAAAiE7UCAAAAAAAAAABH7Rjy2Tw6Mpj0K9dkTM0/jAAAAACMQ9QKAAAAAAAAAAAwkOWCUdfape6PVZcLAAAAkIWoFQAAAAAAAAAAYJVuwjld61CWD7Sbuxpu3NIAAAAQnKgVAAAAAAAAAAA4ZEfXPN4XAAAgAElEQVQDKTpqTtc6iHGK1p72AgAAANAxUSsAAAAAAAAAADAc0eaTrnUA4xStcOOuBgAAgPhErQAAAAAAAAAAAIPStXZM0QoAAABAQKJWAAAAAAAAAABgvx3dY9KaLumyH9K1dmnMorXXfQEAAAD0RNQKAAAAAAAAAAAwNF1rZ8YsWsG9DQAAACmIWgEAAAAAAAAAgLGoNL/StXZj8KK1+w0CAAAAZCdqBQAAAAAAAAAAQNfag8GLVkbm9gYAAIAsRK0AAAAAAAAAAMBOO0LHpN1R0mVvNV8vCzvVtQa3cEDLJ9uZcXYKAAAAkJGoFQAAAAAAAAAAgP/oWjNaLlprrgTqc5MDAABAIqJWAAAAAAAAAABgILLMNXStuSha74y5awAAAIAURK0AAAAAAAAAAEAlSrNEdK1ZKFoZnPscAAAAchG1AgAAAAAAAAAAe4xTNg5bTM3Xy7B7z87ZDb59AAAAgLBErQAAAAAAAAAAAPxIHJiOI2Mc7nYAAABIR9QKAAAAAAAAAACMYpzpsmXdjf1UkYVydzRO54NL0T1HDAAAABm9tF4AAAAAAAAAAAAwBPVRdk4wLEfzk/l6kbIDAAAAhGJSKwAAAAAAAAAAwI/kggABeTgDAABAUqJWAAAAAAAAAABgM8MPgRSkjwAAAAChiFoBAAAAAAAAAIAhCHFhTLrW/jhTAAAAyGua57n1GgAAoJ5pmoq8ji/SAAAAAADA4HYEos0bpH1Ra/NlA8dp2nvisQwAAACpmdQKAAAAAAAAAADwPekU9MFnGQAAACAIUSsAAAAAAAAAAHA6RRnQlqdQH5wjAAAAZCdqBQAAAAAAAAAA+je9vrdeAgCHKFoBAACgA6JWAAAAAAAAAAAAoH+SyNQcHwAAAPRB1AoAAAAAAAAAAPANARX0x+caAAAAoC1RKwAAAAAAAAAAADAKXWtGTg0AAAC6IWoFAAAAAAAAAAA6N72+t14CEIhCMhfnBQAAAD0RtQIAAAAAAAAAAAAQkaIVAAAAOiNqBQAAAAAAAAAAerZvTKuMCvrmM56CYwIAAID+iFoBAAAAAAAAAACA4Qgmg3NAAAAA0CVRKwAAAAAAAAAA0K19Y1qBQcgmw3I0AAAA0CtRKwAAAAAAAAAAADAo8WRADgUAAAA6JmoFAAAAAAAAAAA2S1Ec7R7TmmJ3QCk+8qE4DgAAAOibqBUAAAAAAAAAAOjQ7qIVGJCQMggHAQAAAN0TtQIAAAAAAAAAAL1RtAJbySmbcwQAAAAwAlErAAAAAAAAAABwOpUpEJ+osiEXHwAAAAYhagUAAAAAAAAAAPYIGyAdDGjD7guowBOgCZcdAAAAxiFqBQAAAAAAAAAA+mEkLHCQwLIyFxwAAACGImoFAAAAAAAAAAB22lQiVchNFa1AEfP1orSsw3UGAACA0YhaAQAAAAAAAACAHihagbL0lmdzhQEAAGBA0zzPrdcAAAD1TNNU5HV8kQYAAAAAAPiwqSY9I2EqmLMqrIA7gvkzeNgCAADAsExqBQAAAAAAAAAADmnbJunNgFPJL4tzSQEAAGBkolYAAAAAAAAAAKCegg3q9PquaAUqmK8XHWYpriQAAAAMTtQKAAAAAAAAAAActSlSKlKiylmBytSYB2mDAQAAgKenp2me59ZrAACAeqZpKvI6vkgDAAAAAAB8tTU03Vc3rXmX+XrZUb2qrYA1RPU7eMACAAAAN6JWAADGImoFAAAAAAA41Xld68pX/nhBUStwHl3reh6tAAAAwGeiVgAAxiJqBQAAAAAAONvu1utr+LQ7kd23BuUVsIm09SHPVQAAAOCOqBUAgLGIWgEAAAAAAOqo3HrddVOiVqAOXetPPFEBAACAb4laAQAYi6gVAAAAAACgmmqt1/ERr9++CMBK0tbPPE4BAACABaJWAADGImoFAAAAAACo7NTW69t0yphWoAlpqwcpAAAA8NBL6wUAAAAAAAAAAAA9+2icCuZeuikgoNujacy01WMZAAAAWEnUCgAAAAAAAAAA1HC8bhVNAfGNlrZ6MgMAAACbTPM8t14DAADUM01TkdfxRRoAAAAAAKCsbwOwfa3UjpZMlAWcpOO61ZMTAAAA2EHUCgDAWEStAAAAAAAAfdvXj0mzgFP1lLZ6YAIAAABHvLReAAAAAAAAAAAAAEDPPkLQ1HWrnBUAAAA4TtQKAAAAAAAAAAAMTaYFVJOxbvWQBAAAAAoStQIAAAAAAAAAAJ1IFIkBgwtetwpZAQAAgJOIWgEAAAAAAAAAAADa+JyPtg1chawAAABABaJWAAAAAAAAAABgXCIuII67J9LZjasHIAAAAFCfqBUAAAAAAAAAAOhB2wmHAMX9FJ3ueNzpVwEAAIAgRK0AAAAAAAAAAAAAaShUAQAAgLyeWy8AAAAAAAAAAADgqH1jWoVhAAAAAAA1iVoBAAAAAAAAAAAAAAAAADjdS+sFAAAAAAAAAAAAaXwdiJp32GnelQMAAAAAJCVqBQAAAAAAAAAAHvjast79o7aB6MLyAAAAAACI47n1AgAAAAAAAAAAgNDWJKPT63uustSYVgAAAACA+kStAAAAAAAAAADAj+KnqjtWqGgFAAAAAGhC1AoAAAAAAAAAAHxvay8av4AFAAAAAKAhUSsAAAAAAAAAAPCNFIWqMa0AAAAAAImIWgEAAAAAAAAAgHu7i9aaKWyK7BYAAAAAgA+iVgAAAAAAAAAAYBTGtAIAAAAANCRqBQAAAAAAAAAA/keKCag7FqloBQAAAABoS9QKAAAAAAAAAAD0T9EKAAAAANCcqBUAAAAAAAAAAEgmxSxZAAAAAADuiFoBAAAAAAAAAID/HOxFKwxE3bFCY1oBAAAAACIQtQIAAAAAAAAAAGkoWgEAAAAA8nppvQBI7+3trcjr/Pr1q8jrAAAAQE/8ezcA5OJ3NwAkUuoX95Pf3YSnaAX64F+6ASAXv7sBAH5iUisAAAAAAAAAAFDG2QXp1jGtilYAAAAAgFBErQAAAAAAAAAAQAKKVgAAAACA7EStAAAAAAAAAABAAadGpIpWAAAAAIAOiFoBAAAAAAAAAICjFK0AAAAAADwkagUAAAAAAAAAAA5RtAIAAAAAsIaoFQAAAAAAAAAA+M+mKHS+XhStAAAAAACs9NJ6AQAAAAAAAAAAQDJ12lFFKwAAAABAZ0StAAAAAAAAAADAKtWq0a0565OiFQAAAAAgg+fWCwAAAAAAAAAAAGL5KRDd0ZrusGNAq6IVAAAAACAFUSsAAAAAAAAAALDW2V3rjqL1pJUAAAAAAFCcqBUAAAAAAAAAALi3EIue1LVOr++KVgAAAACAvr20XgAAAAAAAAAAABDRfL38VJne/n6ppnRHJStnBQAAAADIyKRWAAAAAAAAAABgj+MjW3dMZ31StAIAAAAApGVSKwAAAAAAAAAA8L2FYa03H/90a2i6L4iVswIAAAAApCZqBQAAAAAAAAAAfnTrSB82qJ9/4Kf09MhkVzkrAAAAAEAHRK0AAAAAAAAAAMADD0e2fnYkXv32rQu+GgAAAAAADT23XgAAAAAAAAAAAJBA/bh0vl4UrQAAAAAAPTGpFQAAAAAAAAAAWOWWmJYdxPrTuwAAAAAA0B9RKwAAAAAAAAAAsMFJaauWFQAAAACge6JWAAAAAAAAAABgs48G9UjdKmQFAAAAABiKqBUAAAAAAAAAANjv2zD1a+mqXwUAAAAAQNQKAAAAAAAAAAAUJmEFAAAAAOCr59YLAAAAAAAAAAAAAAAAAACgf9M8z63XAAAA9UzTVOR1fJEGAAAAAAAAAAAAAIBNTGoFAAAAAAAAAAAAAAAAAOB0olYAAAAAAAAAAAAAAAAAAE4nagUAAAAAAAAAAAAAAAAA4HSiVgAAAAAAAAAAAAAAAAAATidqBQAAAAAAAAAAAAAAAADgdKJWAAAAAAAAAAAAAAAAAABOJ2oFAAAAAAAAAAAAAAAAAOB0olYAAAAAAAAAAAAAAAAAAE4nagUAAAAAAAAAAAAAAAAA4HSiVgAAAAAAAAAAAAAAAAAATidqBQAAAAAAAAAAAAAAAADgdKJWAAAAAAAAAAAAAAAAAABOJ2oFAAAAAAAAAAAAAAAA+D/27iCpkWMJwLCY4AgcgRuwIDgd4nQTLLgBR+AOvAV+GAup1Wp1dVVmfl/MwnZgUV1VEuMY/5EANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmhO1AgAAAAAAAAAAAAAAAADQnKgVAAAAAAAAAAAAAAAAAIDmRK0AAAAAAAAAAAAAAAAAADQnagUAAAAAAAAAAAAAAAAAoDlRKwAAAAAAAAAAAAAAAAAAzYlaAQAAAAAAAAAAAAAAAABoTtQKAAAAAAAAAAAAAAAAAEBzolYAAAAAAAAAAAAAAAAAAJoTtQIAAAAAAAAAAAAAAAAA0JyoFQAAAAAAAAAAAAAAAACA5kStAAAAAAAAAAAAAAAAAAA0J2oFAAAAAAAAAAAAAAAAAKA5USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACaE7UCAAAAAAAAAAAAAAAAANCcqBUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmhO1AgAAAAAAAAAAAAAAAADQnKgVAAAAAAAAAAAAAAAAAIDmRK0AAAAAAAAAAAAAAAAAADQnagUAAAAAAAAAAAAAAAAAoDlRKwAAAAAAAAAAAAAAAAAAzYlaAQAAAAAAAAAAAAAAAABoTtQKAAAAAAAAAAAAAAAAAEBzolYAAAAAAAAAAAAAAAAAAJoTtQIAAAAAAAAAAAAAAAAA0JyoFQAAAAAAAAAAAAAAAACA5kStAAAAAAAAAAAAAAAAAAA0J2oFAAAAAAAAAAAAAAAAAKA5USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaO629wIgvL9//67yOk9PT6u8DgAAAGTiv7sBIBY/uwEgkLV+cO/87AaATfiPbgCIxc9uAIBTTGoFAAAAAAAAAAAAAAAAAKA5USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACaE7UCAAAAAAAAAAAAAAAAANCcqBUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmrvtvQAAAAAY3cfD/ddf3L29910JBxwNAL89Pu+//uL1Zd9zHRzjdAAAAAAAAAAAijOpFQAAAE76eLj/ziZ3PxJKRnBwNE4HgMfn/XczufvRTzKIg9NxQAAAAAAAAAAABYlaAQAA4DiRZDiODKAyhWRETg0AAAAAAAAAoBpRKwAAABwy9jOEu7f33//Q2QEUZOZnFK8v+9//0PEBAAAAAAAAAJQiagUAAID/mEgij1aUdHTqRHStAHVM9JBHE0r6OnUoulYAAAAAAAAAgCJErQAAAPCvUzHk3du7onVMulaAyk6VkK8ve0XrsHStAAAAAAAAAACViVoBAABgt9vtPh7uJ4rWjRfDRSa6VmkrQFaPz/uJonXTpXC5ia5V2goAAAAAAAAAkJuoFQAAAKameipaQ5g4Jl0rQD4T3aOiNYqJk9K1AgAAAAAAAAAkJmoFAACgOkVrDrpWgCIUrWnoWgEAAAAAAAAAChK1AgAAUJqiNRNdK0B6itZkdK0AAAAAAAAAANWIWgEAAKhL0ZqPrhUgMUVrSrpWAAAAAAAAAIBSbj4/P3uvAQAAtnNzc7PK6/iNNCSgaE3M4QLko2jNzfkCAAAAAAAAABRhUisAAAAViR5zM68VIBnFY3rmtQIAAAAAAAAAFCFqBQAAoBxFawW6VoA0FK1F6FoBAAAAAAAAACoQtQIAAFCLovWnj4f771+917I+XStAAhGL1sfnfZQIc7R16loBAAAAAAAAANK7+fz87L0GAADYzs3NzSqv4zfSEJSi9affu5FyExw6QFzhitajCx5tqeMvMty5AwAAAAAAAAAw323vBQAAAMBGDOf86ehufDzcl+o8qz0vQCxpJnN+P0jfIDPHfj4+73WtAAAAAAAAAAChmdQKAEAtJrVCWdNFa7WysdrwUqcPEM50gTls1jgzHN1y/QMuaY6gFwAAAAAAAAAAgLNMagUAAKC6Uk1jzXG1d2/vNR8cIKUEQeNBsbn6EyUYyvr6sk/wFAAAAAAAAAAA/GZSKwAAtZjUCjVVG0x61MyqM/GGuAYAUUzUjIMXrat0mJc+4/XfdNhdjXsTAAAAAAAAAAA4xaRWAAAAkjOi0w6c9fFwr2sFGIT5nBvvQNA69PF5H3TlAAAAAAAAAADF/em9AAAAAGhouudM3zF+PNwrWr9NH7eNAhjBdM8pYlzd4Fs6vTz9MwAAAAAAAABARKJWAAAA0ipbtH61rCrN33StACNTtG4sxJbqWgEAAAAAAAAAkrntvQAAAABgBYJMAGC+EEUrAAAAAAAAAAD53Hx+fvZeAwAAbOfm5maV1/EbaRhf+jGtjSrWBDtzVvq7ARBRjjGtUQaHRtnPbzmuBwAAAAAAAAAAO1ErAADViFqhiATVYq/JqyE253oJbghAJmmSxRBRa6D9/CnNJQEAAAAAAAAAKO5P7wUAAAAAAABbEH8CAAAAAAAAANCXqBUAAIBsDOE8UPCRz5rek15jcgFqMoFzG68v+9CbOb34EDNyAQAAAAAAAADYiVoBAABIRo747e7t/etX74WE5CIBbEOLuI3QOetM7hIAAAAAAAAAQAi3vRcAAAAA26lQeFZ4xlXcvb0rVwEGVyHFbC3THr6+7JWrAAAAAAAAAADRmdQKAABAHtONYuLa83soa+JnbGF6uySvAK1NB4qZaswuXl/2+fZw+okkrwAAAAAAAAAA4zOpFQAAAIJRrgIAE/K1rAAAAAAAAAAApHHz+fnZew0AALCdm5ubVV7Hb6RhQGXHtM4xf+howY1ycwK5dHyu44ORpRzT2n1SaNB9u1TKy5PVpW8KxwcAAAAAAAAA6ZnUCgAAQAaXpm4w08fDvTBye2u9o0+9jjOF7rrHn8noAH96fN7bkO2t9aY+9TrOFAAAAAAAAADSELUCAACQn4CNCXdv76Lo7jY+goNv5yMCRpOsXvt+nNVT3mQbNd/ry14X3d3GR3Dw7cpefgAAAAAAAABIQNQKAABAeIpEmjKstZFx3rk/V+KsYQNlc8RTGd78DRHyzWRYayPjvHl/rsRZAwAAAAAAAEAsolYAAAAANjJOyHrK9wrVrcBmJHmMbJyQ9ZTvFXorAQAAAAAAAEAIN5+fn73XAAAA27m5uVnldfxGGsZxtpFTpu0uKQnLbpeL1NT4LesERw/rOhvIhc7Sjj5d6CcaWe671N34LesERw8AAAAAAAAAIzOpFQAAAIBWQuesX8xuBaCO0C3rN7NbAQAAAAAAAGBkJrUCAFCLSa2QjOmaM5nUOofrtKIELesprgFcI/1oTZNaN5b+Rm0pR856lGsAAAAAAAAAAEMxqRUAAACA1STOWb8Y3ApAMolz1i8GtwIAAAAAAADAUP70XgAAAAAslL6dYzSu3LSPh/tSW1TteeF66cM5BuTWTXt83pfaomrPCwAAAAAAAABjErUCAACQljmKXMSFWaxy3ln52WF1hihyKXdmscp5Z+VnBwAAAAAAAIAR3PZeAAAAAABR6Tm/fO2DLhqA8ek5v3ztgy4aAAAAAAAAALZnUisAAAAhnU3p1GUscPbaaDi/mVD6mz2BCWc7OmkZy5y9ORrObyaU/mZDAAAAAAAAAGB7JrUCAAAAcAHd5rSPh3tRPQBDkW5OMLIVAAAAAAAAADZmUisAAADxaOroqPj1K/74MxnZCgcEdfRV/AYWf/yZjLEFAAAAAAAAgM2IWgEAAEjImEQWc3lOEWpeynbBfGYkcg335xSh5qVsFwAAAAAAAABsQNQKAAAAwBn6zGWUwAD0os9cRgkMAAAAAAAAAK2JWgEAAAhGIUZ3pS6hLPN6NpDi5GGMoNQ9lGVezwYCAAAAAAAAQDuiVgAAAACOU2OuRRsMwDbUmGuxkwAAAAAAAADQiKgVAACAbO7e3nsvgdhcoS8izNXZUjjq9WXfewmE5xZ90WGuy8xbAAAAAAAAAGhB1AoAAEAkkjAGkfsqGivajo2lGj0Y48h9G+WX7dhYAAAAAAAAAFiXqBUAAACAf6kuW7PDAKxLddmaHQYAAAAAAACAFYlaAQAAAPiH3nIbZuECsBa95TbsMwAAAAAAAACsRdQKAABAGHMasLu39w1WQnpzLlK+KDHfEw3OhpPenAbs9eX818Acc+5Svi4x3xON7PF5b8MBAAAAAAAA4HqiVgAAAAAEln3YdgAWE1h2YdsBAAAAAAAA4Eq3vRcAAAAAQGfSyo4+Hu6NmAZOmc7nzLktS1fZ1+Pz3rsPAAAAAAAAABYTtQIAAACUpmjtTtcKfLsoVjz4YpVdEYrWEehaAQAAAAAAAGCxm8/Pz95rAACA7dzc3KzyOn4jDdub092pwk6ZXy3aw58q3DpF6zii3yU4MKe7y5eEHX3qs4+5eqOYb2PnS3/xFK1DCX2XAAAAAAAAAKAXk1oBAAAAilK0DsW8VqimXZ34/cqKu2QUraMxrxUAAAAAAAAAFvjTewEAAAAAdKBoHZBDgSIen/fb1ImbfSMoy1sMAAAAAAAAAC4lagUAAAAoRzw5LEcDuXWpTKWtOTjEYTkaAAAAAAAAALjIbe8FAAAAwHkqL4b18XB/9/beexWX8YYaXMRLBQckXkddtC2vL+e/+KIXfHzez3nNCiJuhffU4CJeKgAAAAAAAADoRdQKAAAAUIiiNQRdKyQzs0i8NIr7/vqZr//1ZdK7cBStAAAAAAAAAEAmf3ovAAAAANYhAGN1+S6VojUQh0V6ddLKs0Xi68v+69fib3HRv567kMx3r3KfVyZOCgAAAAAAAABmErUCAAAAlCCSBBjNlS3r71eb+ZXquyicVCzOCwAAAAAAAADmELUCAAAAwIh0yJDYujnrgpdV343PGUXk1AAAAAAAAADgrNveC4Dw/v79u8rrPD09rfI6AAAA8Js8MqiPh/u7t/feqwBW1iJnPXj9OWXd43OTsBaK884CIJa1/rB758+7AWAT/kc1AIjFz24AgFNMagUAAGB0YjwGN/4VHX+FTHB8hGNQ4YRGA1qPfqM5X1b2sMZ/8PFXCAAAAAAAAACwjKgVAAAAIDNJJMAgxhzeKJ4ckEOJzgkCAAAAAAAAwARRKwAAAAAMTZkMCWxftM7/jgK8oTiOHJwjAAAAAAAAAJwiagUAAABISwyZhqOE0Mac0Qo0pWsFAAAAAAAAgKNErQAAAGRw9/beewnkFPpqySCTcaBkUiry7PiwNYe1hr5dmQ4CAAAAAAAAAOAoUSsAAAAAADQRKLCUU3bnCPJxpgAAAAAAAADwm6gVAAAAICFTPVNyrDC4g4R1hKL1ojUI8GB13lYAAAAAAAAAcOC29wIAAAAAWJn0EaCXEUJWIpI+AgAAAAAAAABFmNQKAAAAAGEoloFLGdY6Ptuem/MFAAAAAAAAgJ9ErQAAAACpiB7Tc8QAAAAAAAAAAAAEJWoFAABgaNotQhjnoo6zEqAmAwkTKHKI4zzmOCuhHacMAAAAAAAAAN9ErQAAAAAQjHoZuMjry773EqA6XSsAAAAAAAAAfBG1AgAAACQhdASAWISOAAAAAAAAAEA1olYAAAAAiEfDDLSjtIQWvLMAAAAAAAAAYCdqBQAAAMhB4ggAsUgcAQAAAAAAAICCRK0AAAAAEJKSGQBiUTIDAAAAAAAAgKgVAAAAIDxxIwDTXl/2F3299K41OwwAAAAAAAAA1CRqBQAAAICo9MwAEIueGQAAAAAAAIDiRK0AAAAAsckaASAWWSMAAAAAAAAAUJaoFQAAAAACUzUDAAAAAAAAAAAQhagVAAAAAABgI8a04g4AAAAAAAAAUJmoFQAAACAwUzrZuQZAG7o7AAAAAAAAAABWJ2oFAAAAAACA7YjGAQAAAAAAACjrtvcCILynp6feSwAAAKAo8zkBIBYpIwAwFH/YDQCx+NkNALH42Q0AcIqoFQAAAADC+3i4v3t7770KKOdUoPj6cvyfAwAAAAAAAABAcX96LwAAAAAgPDEhQDWPz/uJkZumcY5PeEx3PigAAAAAAAAAqEnUCgAAwNC0gnDKx8N97yUAHCoSCs5J0eRq/OZWAAAAAAAAAACIWgEAAAAgA50zbGN+l6hgBAAAAAAAAACAA6JWAAAAAABoQtcKTPARAQAAAAAAAEBBolYAAACAeMzkBOhCgcZiLg8AAAAAAAAAwE7UCgAAAABpqJ1hQFJGAAAAAAAAAAD4JmoFAAAAOEkiCEBZry/73ktYQkVMLG4sAAAAAAAAANWIWgEAAMhAeQgAgYi4qMadBwAAAAAAAAD4ImoFAAAACEbFDQAAAAAAAAAAAEQkagUAAACAPDTPMJrXl33vJex2JoUCAAAAAAAAADAGUSsAAACju3t7770EmOKKAvw0SMMJE9xShqI5BwAAAAAAAKAUUSsAAAAAAPAfss8VSRYBAAAAAAAAAMuEzHMAACAASURBVL6JWgEAAAAi+Xi4770EAOaShgIAAAAAAAAAwE+iVgAAAAAAWF/cojXuygEAAAAAAAAAGNxt7wUAAAAkcTA78e7tvddKgLWYiUpQHw/3fgzN8fi8//m3Kj7meH3ZH9ycia9su5RLzFxzAnWeFAAAAAAAAAAgKFErAADAQtO1m8Z1eyIuAKZN124a1409Pu8Tb3LiRwNayP2RCAAAAAAAAAA/iVoBAAAutmB449e/Ejq57PsId2/vZmYyptDva6hjwfDGr38ldGLU8RHmjzNNI/RVOZDpWY5K/4AAAAAAAAAAACMTtQIAAFzgyq4yYtp68MjffxvrKQAo68q0MmLaevDI338b6ylGdjTZHXnKYrXAeDT2HwAAAAAAAADgJ1ErAADALCuOCY2Stk4/cpSngGSMLIb5VgzJoqSt048c5Snoyw0BAAAAAAAAAKCpP70XAAAAEECLimzwMm3m8gZ/CgDKajEacfBxizOXN/hThDbm3l60KkUrAAAAAAAAAACtiVoBAADOmNNt3r29//y14it3MebC5mzsmCsnqJnv/Q1WAgsU/zycU/G9vux//lrxlbsYcGFzdnXAZc906uniPlEOM9/7zdcBAAAAAAAAAMBpolYAAIAp01HQqYo1dNc64JIAYL7pqu1UxRq6ax1wSRWEaCONaQUAAAAAAAAAYDSiVgAAgJMm8s6zE1lDd60Xib5+ADKZSPjOTmQN3bVeJPr6Bxd0exWt0F3QTw8AAAAAAAAAuJSoFQAA4LjponXLlWxJoQpAXNNF63br2JYIqqNT92qQQ5m/jMRvEAAAAAAAAAAARiNqBQAAOOJU23l2QOvBF1/57TiQOCdmNHPelS4kDOVUv3d2QOvBF1/57fipQio5bNfafQHbm/PIFe4kAAAAAAAAAMDgRK0AAACHJorWjVcSwmjbohD+7aI9sYFARBNF66brCGKobUncXnZ8tIu+9VD3AQAAAAAAAACA9EStAAAA/9GraB2hJBxhDQBwqV5F6wg15ghrYOKmdTkgRetQvEkBAAAAAAAAAA6IWgEAAP5lRuv4nMVFPh7uF7TKy/6talxFGIQZrYMrchDTXeuWWaOidUK15wUAAAAAAAAAGNNt7wUAAAAAK1slSf1+kYL1pqYXgEu9vkzFq4/P+6FGB+fLOw1EBQAAAAAAAACIQtQKAADwj+5jWj8e7sPVg2MuOOJOHjVIWrl4GTlOARhZ9zGtG5SKqxtwwRG38aizXeuu2f4XL1oBAAAAAAAAAAhE1AoAALDbDVC0djdIPwkAM3UvWrszmnJAX9fvbNq6W++iXnoN6rxBAAAAAAAAAAAYk6gVAADgpDpFayx3b+8SXPry4QDDEuwNaHp+aUpzHvnKunXBlhZ/dxR/fAAAAAAAAACAcYhaAQAADClN6OPhXnbIMj4QIIRqkWR6j8/7ZM3h/JT355dNb8I11z7Z9h7wgQAAAAAAAAAAEIioFQAA4Ljrk8j0aVzHatSwVjrSS8Owrs/20qdxvcrGgsNad//f7YsevMUu5c5ZZ7IJAAAAAAAAAADjELUCAADVaSN3NgGAUArmkb/ZhCgWpK3rfmsAAAAAAAAAABiKqBUAAOAIkxgT+Hi4r3COvZ4xawid9bmgAv1edI/P+8SHuGXamngbjxJ4AwAAAAAAAADEImoFAABKE7DFdff2nv74Ro5yR15bU2UfHMYhYAvq9WXv7L5z00ZbUS1nnanvtrj5AAAAAAAAAAAHRK0AAACHVonW9JYQTvq3LSS2SrSWPjxTPI5jxbq1+LGmf9sCAAAAAAAAAOQjagUAAOoaLWCTiV7q7LDWj4d7u8qKXCfobrSArXhPeKmzIysfn/fVtvT3805vUbX9uZ4dAwAAAAAAAAAYjagVAADgPwpGa6PFvQBwkYLR2mhxLysqeJ8BAAAAAAAAACjlT+8FAAAA9NG05JSJbuZshOwsmOnsVSlYvMNompacMtFtnC02HQTznb0tCmEAAAAAAAAAgAGJWgEAAP7VMVqL1cvFWi0AiXWM1mL1crFWC1CQD2oAAAAAAAAAihC1AgAAFZnemYnClusZ0wrjM8AzDdUWqzCmFQAAAAAAAAAgKFErAADAymIVs7FWu0yFZwQ4oMS+SKxiNtZqF0j/gAAAAAAAAAAAUJmoFQAA4B8d+x/p0ZVsIE25YDCsjpMYDYG8ht2jNXcMAAAAAAAAAGBYolYAAKAcczuvFDHwc+hMiHU9Ir4B4XpGd14pXODnxJnmhgAAAAAAAAAAxCVqBQAAWFOsOi4TpR+NuFqQnjqui3CdLYGMdrtGWw8AAAAAAAAAQF+iVgAAgM46JnOlEtxSD8t8LgawQMdErU6CW+dJuZS7AQAAAAAAAAAQmqgVAABgt1upLFXH9WWiJqtzqWBkq5Sl6riOjK+kBfeKoFxdAAAAAAAAAOoQtQIAAPQULpkLt+CfVMcccCXIKvRn9fjCdUfhFvxNcsxvbgUAAAAAAAAAQHSiVgAAAPFPHo6SFblOMLK4oSY/OUfW5UYBAAAAAAAAAIxP1AoAAJTTKFQLN/Ix3IJnmj7frE/NAtOXYeSideS1QSONQrVwIx/DLXiO6cNN+cgsNn0fFK0AAAAAAAAAACHc9l4AAABAB4MkYYMso5qPh3s7j7wZwhkkVxtkGaU8Pu9tO7vghfPryz70+gEAAAAAAAAAVmRSKwAAAHNFaUGjrJNhuUJAGiFy0BCLZHBuEaG5wAAAAAAAAACUImoFAABYgamPo5mOEp1XcdMXQNFKdO7wTKYmDmU66HJYTN8BQSAAAAAAAAAAQCC3vRcA4f39+3eV13l6elrldQAAiKJvdKTqpKwcl//u7T3Hg0AsfcM5YSdlufwAAO2s9YfdO3/eDQCb8D+qAUAsfnYDAJxiUisAAAA5GdbKAkZcAvRiWCvLRBnTGmWdAAAAAAAAAACtiVoBAACutSCPjBjO5VuzrrWg6UOPeMmBZRYUkhGDtHBr1rXy2/S5h7vk8JtrDAAAAAAAAEA1olYAAAAASEKbDQAAAAAAAAAAwMhErQAAAOWUmlBqWCvfko1pDbdg4Bp1hpQa1spPyca0hlswAAAAAAAAAEALolYAAICrLKgipWgb07WyS1e0AtdYEEZK0baka+VLsqIVjnKTAQAAAAAAAChI1AoAAMB50ZM/XWtxilaKcJn5KXQopWtF0QoAAAAAAAAAkJWoFQAAgBK0XmUlLlpDLx5gmmqxssRFa+jFAwAAAAAAAACsQtQKAACw3IIJn90jNFNJj7ItNXV/PwLbWzDks3uEZjDpb/akrO7vR1iR+wwAAAAAAABATaJWAAAAqpguGHWtKTlW6hBpk8907qVrzcrJAgAAAAAAAADkJmoFAADgjEyhlK61lOkDzXGxczwFsLo00/90rdVMn2mOi53jKQAAAAAAAAAAFhO1AgAALLQggJSfjUDXWkSFohW+udIzLWgg5Wfd6VrrqFC0wjdXGgAAAAAAAICyRK0AAACFKDa/6FrTK1W0Jnsc4IBoc6drrUHRCgAAAAAAAABQhKgVAACAinStiZUqWgGK0LXmVq1ozfdEXModAAAAAAAAAKAyUSsAAMASC6LHoCld0GXPoWtNSdFKQS72TAu6x6DRUdBln6Vrzapa0QoAAAAAAAAAUJyoFQAAgLp0rcmULVoTPxrAT7rWfMoWrYkfDQAAAAAAAABgmqgVAACgConmUbrWNMoWrRTnbuem0vxN15pJ2aKV4txtAAAAAAAAAIoTtQIAAFCdrjUBRWuFZwT4omvNQdFa4RkBAAAAAAAAAH4TtQIAAFxsQeUYtDcLuuwF7t7eJx5W1zq4iQOaPlmIzvWeb0HoGLQ3C7rsS72+7CeeVNc6vokzmj5ciM71BgAAAAAAAABRKwAAAPxD1xrRdNG65Uq6q/a8ALrWoKaL1u3WMYBqzwsAAAAAAAAAsBO1AgAAFKHJnEnXGouilcpc8vRkmXPoWsNRtFKZSw4AAAAAAAAAO1ErAADABnRHsehao1C0/lb2wWF1uqNAdK2BKFp/K/vgAAAAAAAAAEBZt70XAAAAEEydrLFyHff17HXOOpPK9/bL3du7q1uBq36ROmVj2Tru68HrHHQyZe8t1bjqAAAAAAAAAPDFpFYAAAA4TjMWjiMDqEwwFpFT29mEGpwyAAAAAAAAAHwzqRWu9fT01HsJAABwhrGNix2MbNVMDuXnSFJH85Nhrem58BUYOrrMwchWFdloXl/2TgcAYCj+sBsAYvGzGwBi8bMbAOAUUSsAAEBb0qMEHOKwHA0FufYb0NpF5wRH5nSO+pn7ko9rDwAAAAAAAAA//em9AAAAAEYkmoLQvIWhINEUhOYtDAAAAAAAAAAUIWoFAAC4wMfDfe8lAMyia03JsS5g+CEAHcmVAQAAAAAAAOCAqBUAACA5IS4AxCLEhZrUj/k4UwAAAAAAAAD4TdQKAAAAkJOpnsk4UID0NJAAAAAAAAAAQHqiVgAAAA7ppiANb+c0HCXThHAAo/HJDAAAAAAAAABHiVoBAAAa0iABcD0/TbakQQL68imUg3MEAAAAAAAAgFNErQAAAJl9PNz3XgLQmR4SYnl83vdeAtCZHjI6JwgAAAAAAAAAE0StAAAAAMnpWkNzfAAFqSIBAAAAAAAAgKxErQAAAPyHegpS8tYOysExh/gNYBw+kwEAAAAAAABgmqgVAAAAAEakaAWoTBsZkVMDAAAAAAAAgLNErQAAAGl9PNz3XgIwEIUkjO/xed97CcBAFJKxOC8AAAAAAAAAmEPUCgAAAFCFrjUQhwXATicZh5MCAAAAAAAAgJlErQAAADktG9OqoYL0vM1DcEw1LRvTKqOC9LzNAQAAAAAAAIBMRK0AAAAAtQgmB+eAADigax2cAwIAAAAAAACA+UStAAAACS0b0wrUIZsclqMpa9mYVqAO2eSwHA0AAAAAAAAAXETUCgAAAFCReHJADgUAYlG0AgAAAAAAAMClRK0AAAAXCJEbLR7TGuLpgBV51w/FcTQSIjdaPKY1xNMBa/GWH40TAQAAAAAAAIAFRK0AAACpLC5agZqElINwEJUtLlqBglSU43AWAAAAAAAAALCMqBUAACAPRSuwgJyyO0dQmaIVuNTry15O2Z0jAAAAAAAAAIDFRK0AAAANqUyBEESVHdn80ahMgRBElR3ZfAAAAAAAAAC4hqgVAADgMsPWR1cGtMM+F7ANHwJd2PZtDFsfXRnQDvtcwDZ8CHRh2wEAAAAAAADgSqJWAACADIyEBa4nsNyYDS/OSFjgegLLLb2+7G04AAAAAAAAAFxP1AoAAHCxizKkDXJTRSuwFpnlNu7e3m31xi7KkDbITRWtwFpkltuwzwAAAAAAAACwFlErAABAbIpWYF1iy9bsMIpWYF16y9bsMAAAAAAAAACs6Obz87P3GgAAYDs3NzervM7/2Lt75EaSMwHDKAattucIiqApQwaDfQHpGDrC3oDgDXQEHWP3AuqgMcaaHTFHkE231sCIiwGBQv3lz5f5PDHGzDRZyKwsgGzjjc8v0hwW1qQpEqYdc1aFFfCVZj4Fn7dlLapJUyRMO+asCivgK818Cj5vAQAAAAAAAGBfJrUCAACsVDZMEpsBqckvd+eWFlc2TBKbAanJL/f1/nZ0SwEAAAAAAABgd6JWAACAHHZsUP/9lz8pWoE8RJh7+eXX39zMcHZsUJ9fj4pWIA8R5l7cSQAAAAAAAABIRNQKAACw3qJCaZcSVc4KZKbG3M4NrMqiSGmXElXOCmRmvuh2biAAAAAAAAAApDOM41h6DQAAkM8wDLtcxy/SnFsamq6rm+a8yi+//raielVbAXOI6lfwAVutpaHpurppzqu8v60Z4qq2AuYQ1a/gAxYAAAAAAAAAUhO1AgDQF1EriaTrWmde+fOColYgKWnrfD5dK5eua5155c8LilqBpKSt8/l0BQAAAAAAAIAMRK0AAPRF1Eo6q0Ovr9XT6kR23RpkV8BS0tZpPlejWB16fa2eViey69YguwIW0bXe5XMVAAAAAAAAALIRtQIA0BdRK6llDr0uuilRK5CNrvUqn6gRZW69LropUSuQjbT1Kp+oAAAAAAAAAJCZqBUAgL6IWskgW+i1fcTr1YsAzCdtPecTNa5sodf2Ea9XLwIwn7T1k49TAAAAAAAAAChC1AoAQF9ErWSTNPS62k0Z0wqUIm31WdqGpKHX1XTKmFagFGmrz1IAAAAAAAAAKOWx9AIAAADa9Bk47dh6iaaAOp0+nfpMW30yt+QzcNqx9RJNAXU6fTr1mbb6ZAYAAAAAAACAskStAAAAaW2vWxVTQAi9pa0+nBu2vW5VTAEhdJW2+mQGAAAAAAAAgEoM4ziWXgMAAOQzDMMu1/GLNHu5Wn+tC6VWhGSKLCCRhtNWn5xcrb/WtVIrQjJRFpBIw2mrT04AAAAAAAAAqIqoFQCAvohaadW6fkyaBaTWUt3qM5N9revHpFlAai3VrT4zAQAAAAAAAKBCj6UXAAAAAECzPkPQuHWrlhWArpxC0NBpq5YVAAAAAAAAAGomagUAAOiUTAvIKVzd6kOSCsm0gGw+P3AC1a0+JAEAAAAAAAAgBFErAABAeFEKMYBD9XWrlpU8AkViQOfOS9E6P7u0rAAAAAAAAAAQi6gVAAAAgALO89GygauQFQDmqCdwFbICAAAAAAAAQFyiVgAAgB4puICqXHwopW5cfQYSkYILqMrFh1LSxtUHIAAAAAAAAAC0RNQKAAAQW9nxhgAp3IpOF33iKVepVtnxhgAp3OpOF33iiVcBAAAAAAAAoAeiVgAAAABi0KkCQCw6VQAAAAAAAADgwkPpBQAAALDeujGtqjAAKGXdmFZVGAAAAAAAAAAA0AZRKwAAAAAAAAAAAAAAAAAAyT2WXgAAAEAAXweixh12GnflADDf14GocYedxl05AAAAAAAAAADABVErAADATV9b1os/KhuITiwPAPr0tWW9+KOygejE8gAAAAAAAAAAAHrwUHoBAAAAlZqTjP77L3+KVZYa0wpAw+Yko8+vx1hlqTGtAAAAAAAAAABAS0StAAAAV9Sfqq5YoaIVgIbVn6quWKGiFQAAAAAAAAAAaIyoFQAA4NLSXrT+AhYA2ra0F62/gAUAAAAAAAAAAGiSqBUAAOAPQhSqxrQCwKcQhaoxrQAAAAAAAAAAAAdRKwAAwLnVRWvOFDZEdgsAeawuWnOmsCGyWwAAAAAAAAAAgAxErQAAAO0zphUAYjGmFQAAAAAAAAAAaNJj6QVAeD9+/NjlOi8vL7tcBwCA1UJMQF2xSEUrEJq/dzMhxATUFYtUtAKh+dkNAIHs9YP74Gc3AGThL90AEIuf3QAAt5jUCgAA0DJFKwDEomgFAAAAAAAAAAAaJmoFAAAII8QsWQDgU4hZsgAAAAAAAAAAANmIWgEAAA6Hzb1ohoGoK1ZoTCsADdvYi2YYiLpihca0AgAAAAAAAAAAbRO1AgAABKBoBYBYFK0AAAAAAAAAAABfiVoBAAAapGgFgFgUrQAAAAAAAAAAQA9ErQAAAFulLkiXjmlVtALAtNQF6dIxrYpWAAAAAAAAAACgE6JWAACAqilaASAWRSsAAAAAAAAAAMAtolYAAIBNkkakilYA2F3SiFTRCgAAAAAAAAAAMEHUCgAAsJ6iFQBiUbQCAAAAAAAAAAAUJGoFAABYSdEKALEoWgEAAAAAAAAAAMoStQIAABwOC6PQX379TdEKAGUtikLf346KVgAAAAAAAAAAgOIeSy8AAAAgjDztqKIVAPaSpx1VtAIAAAAAAAAAAMwkagUAALgjWzW6NGc9KFoB4Jps1ejSnPWgaAUAAAAAAAAAAPr2UHoBAAAAtbgViK5oTVdYMaBV0QpA524Foita0xVWDGhVtAIAAAAAAAAAAJ0TtQIAANyXumtdUbQmWgkAtCF117qiaE2yDgAAAAAAAAAAgFBErQAAAP9vIhZN1LX++y9/UrQCwGoTsWiirvX59ahoBQAAAAAAAAAAWOex9AIAAADq8suvv92qTE//f6+mdEUlK2cFgK/e325Wpqf/v1dTuqKSlbMCAAAAAAAAAACcM6kVAABgme0jW1dMZz0oWgFgre0jW1dMZz0oWgEAAAAAAAAAAL4wqRUAAODSxLDWk88/XRqargti5awAMG1iWOvJ558uDU3XBbFyVgAAAAAAAAAAgKtErQAAAFecOtK7Der5F9xKT7dMdpWzAsBMp470boN6/gW30tMtk13lrAAAAAAAAAAAABNErQAAADfdHdl6bku8evWld7waAHTi7sjWc1vi1asvvePVAAAAAAAAAAAAmvRQegEAAABVyx+X/vLrb4pWAFgtf1z6/nZUtAIAAAAAAAAAAMxhUisAAMAdp8R030Gst14FANjulJjuO4j11qsAAAAAAAAAAAAw3zCOY+k1AABAPsMw7HIdv0h3a/e0VcsKAEntnrZqWQEAAAAAAAAAAFYTtQIA0BdRK3vZUrcKWQEgvy11q5AVAAAAAAAAAABgF6JWAAD6Imolqa+lq34VAGr2tXTVrwIAAAAAAAAAAKQjagUAoC+iVgAAAAAAAAAAAAAAKOKh9AIAAAAAAAAAAAAAAAAAAGifqBUAAAAAAAAAAAAAAAAAgORErQAAAAAAAAAAAAAAAAAAJCdqBQAAAAAAAAAAAAAAAAAgOVErAAAAAAAAAAAAAAAAAADJiVoBAAAAAAAAAAAAAAAAAEhO1AoAAAAAAAAAAAAAAAAAQHKiVgAAAAAAAAAAAAAAAAAAkhO1AgAAAAAAAAAAAAAAAACQnKgVAAAAAAAAAAAAAAAAAIDkRK0AAAAAAAAAAAAAAAAAACQnagUAAAAAAAAAAAAAAAAAIDlRKwAAAAAAAAAAAAAAAAAAyYlaAQAAAAAAAAAAAAAAAABITtQKAAAAAAAAAAAAAAAAAEByolYAAAAAAAAAAAAAAAAAAJITtQIAAAAAAAAAAAAAAAAAkJyoFQAAAAAAAAAAAAAAAACA5EStAAAAAAAAAAAAAAAAAAAkJ2oFAAAAAAAAAAAAAAAAACA5USsAAAAAAAAAAAAAAAAAAMmJWgEAAAAAAAAAAAAAAAAASE7UCgAAAAAAAAAAAAAAAABAcqJWAAAAAAAAAAAAAAAAAACSE7UCAAAAAAAAAAAAAAAAAJCcqBUAAAAAAAAAAAAAAAAAgORErQAAAAAAAAAAAAAAAAAAJCdqBQAAAAAAAAAAAAAAAAAgOVErAAAAAAAAAAAAAAAAAADJiVoBAAAAAAAAAAAAAAAAAEhO1AoAAAAAAAAAAAAAAAAAQHKiVgAAAAAAAAAAAAAAAAAAkhO1AgAAAAAAAAAAAAAAAACQnKgVAAAAAAAAAAAAAAAAAIDkRK0AAAAAAAAAAAAAAAAAACQnagUAAAAAAAAAAAAAAAAAIDlRKwAAAAAAAAAAAAAAAAAAyYlaAQAAAAAAAAAAAAAAAABITtQKAAAAAAAAAAAAAAAAAEByolYAAAAAAAAAAAAAAAAAAJITtQIAAAAAAAAAAAAAAAAAkJyoFQAAAAAAAAAAAAAAAACA5EStAAAAAAAAAAAAAAAAAAAkJ2oFAAAAAAAAAAAAAAAAACA5USsAAAAAAAAAAAAAAAAAAMmJWgEAAAAAAAAAAAAAAAAASE7UCgAAAAAAAAAAAAAAAABAcqJWAAAAAAAAAAAAAAAAAACSE7UCAAAAAAAAAAAAAAAAAJCcqBUAAAAAAAAAAAAAAAAAgORErQAAAAAAAAAAAAAAAAAAJCdqBQAAAAAAAAAAAAAAAAAgOVErAAAAAAAAAAAAAAAAAADJPZZeAIT348ePXa7z8vKyy3UAAACgJf7eDQCx+NkNAIHs9YP74Gc3AGThL90AEIuf3QAAt5jUCgAAAAAAAAAAAAAAAABAcqJWAAAAAAAAAAAAAAAAAACSE7UCAAAAAAAAAAAAAAAAAJCcqBUAAAAAAAAAAAAAAAAAgORErQAAAAAAAAAAAAAAAAAAJCdqBQAAAAAAAAAAAAAAAAAgOVErAAAAAAAAAAAAAAAAAADJiVoBAAAAAAAAAAAAAAAAAEhO1AoAAAAAAAAAAAAAAAAAQHKiVgAAAAAAAAAAAAAAAAAAkhO1AgAAAAAAAAAAAAAAAACQnKgVAAAAAAAAAAAAAAAAAIDkRK0AAAAAAAAAAAAAAAAAACQnagUAAAAAAAAAAAAAAAAAIDlRKwAAAAAAAAAAAAAAAAAAyYlaAQAAAAAAAAAAAAAAAABITtQKAAAAAAAAAAAAAAAAAEByolYAAAAAAAAAAAAAAAAAAJJ7LL0AAAAAAAAAADr1/Ho8/cv727HkOvjC0QAAADRgePo4/cv481vZlXDB0QAA0DOTWgEAAAAAAADI7fn1+JlNHs4SSmpwcTROBwAAIJzh6eMzmzycJZTU4OJonA4AAL0RtQIAAAAAAACQlUgyHEcGAAAQiEgyHEcGAEBXRK0AAAAAAAAAZGLsZwjvb8ev/9PZAQAA1M/YzxDGn9++/k9nBwBAP0StAAAAAAAAAOQwkURerSgp6NaJ6FoBAACqNZFEXq0oKejWiehaAQDowTCOY+k1AABAPsMw7HIdv0gDAAAAwCK3Ykg5a82cGgAAQBS3Ykg5a82cGgAAfRK1AgDQF1ErAAAAAGRmQGtojg8AAKByBrSG5vgAAOjQQ+kFAAAAAAAAANAsSWR0E8c0cbgAAADkIYmMbuKYJg4XAABCE7UCAAAAAAAAkISitQ26VgAAgDopWtugawUAoDeiVgAAAAAAAAD2p2htia4VAACgNorWluhaAQDoiqgVAAAAAAAAgJ0pWtujawUAAKiHorU9ulYAAPohagUAAAAAAABgT4rWVulaAQAAaqBobZWuFQCATohaAQAAAAAAANiNorVtulYAAICyFK1t07UCANADUSsAAAAAAAAAayXeKwAAIABJREFU+1C09kDXCgAAUIqitQe6VgAAmjeM41h6DQAAkM8wDLtcxy/SAAAAAHBB0frV/Mgz3C1y3AAAAJn1VrQuCjjbuwO9HTcAAF0RtQIA0BdRKwAAAACkIHE82WtUaYib5tABAACy6SRx3GsSaRv3pJNDBwCgQ4+lFwAAAAAAAABAbHuVnHHtfgdOF4ybhj6/HuMuHgAAoDZ7pZ51SrG7z2u2Gn8OTx+tbg0AgB6Y1AoAQF9MagUAAACAfU33nG2Xjdlq3mpvY8+nDwAAkMd08xm6bMwZ6wa9UQ2fPgAAPXsovQAAAAAAAAAA2tRw0/j8esw5n7baWbgNHzEAAED9gjaNw9PH6Z/8L5rzFXcR9IgBAGCaSa0AAPTFpFYAAAAA2NFEbNlq7liwL632lnb4GAAAAOQx0WEGzR1rKEvD3br2HgMAADr3WHoBAAAAAAAAAIRU7fjQRNbtd2bVOefip6+JlYk+vx5jLRgAAKAeNfSfO1q0nUWt5tIbdfr6NnLQ4emjjY0AANAVk1oBAOiLSa0AAAAAsIvpCLOxjnFpzrpx+xHvbcQ1AwAA1Gw61IzVMc6MTnfZ1NLANcqdbOl5AAAAUSsAAH0RtQIAAADAdl0VjIuK1h33PvG6dd7hrp4KAACApFoqGO9Wpom2M79ujXI/W3oqAADo3GPpBQAAAAAAAABAjUrlrJ8XvLWA59ejRhQAAID6TXSYqSPM0/XnpK3D04ciFAAAcjKpFQCAvpjUCgAAAAAbdTKQc37RmnrLt1ZS4a3u5NkAAABIqpmBnAWL1vkr+RTixjbzbAAA0LmH0gsAAAAAAAAAIIxOqsV6itY8L7GX6aUumnwLAADQp2aqxVsbGX9+y7+LOa84J3wtbnojIbYAAACHw+Gx9AIAAAAAAAAAoCIz28s8renEYp5fj4F6VwAAAPoxUbRmXsn5S99tPoenj0DZMAAAxDWM41h6DQAAkM8wDLtcxy/SAAAAAHSohzGt9RStc1ZS5z3v4TkBAABIoY0xrRUWrefupq2VrHNCG88JAAA9eyi9AAAAAAAAAAACmFl7hharaA2q4a0BAABscTe2DKHyovUwYyXRDyL6+gEA6IGoFQAAAAAAAICtGhi/GbForTMQbeBhAAAAqE09UegKoRdfIfcTAIDoRK0AAAAAAAAA3DEdTzYQMUYsWms2faPa2CMAAMCOpqdrRokYo8wIbWBY6/QW6l8/AACdE7UCAAAAAAAA0LV6ilYAAAAI6lZIWWeRW+eqAACgE4+lFwAAAAAAAABA1doe06poTeT97Thxb59fj25pVVaMz3WCAACwlzbGtJLZ+PPbxJMzPH14cuqxbnauEwQAGiZqBQAAAAAAAOCmFalbIIrWgnStRez4jr51KccKAACLrKvdahNxF81HoQ1sIaId3wtXL+VMAYA2iFoBAAAAAAAAWCl0vVZh0dpYQjw9rJU88h/BxSuG/pQAAIDiogds0ddfuekulzwyH8HFy3mLAQBBiVoBAAAAAAAAuK7hIrHCovXQXwVqWGsiVT1F54tx3AAAcEGRSFKGtSZSzzv3fCXOGgAIRNQKAAAAAAAAABBeVS3rVZ8rVLcCAEBL6gn8lpqedKoI5Vz9z7nAFQAIZBjHsfQaAAAgn2EYdrmOX6QBAAAAaN7dQC5ullbnmNaTRV1iiCNo+EGqRP0t6wSnDwBAz+42clGytImN1L+F6VOof/2Hhh6kOtXfsk5z+gBAnUxqBQAAAAAAAKAjNRetp9cN3SiSTRvPidmtAAAA1Cl6znpy2oW0FQCozUPpBQAAAAAAAABQHdM16xflCO6us404M6fn1wbL5yY3BQAAEzqZrtlGFli5u4+KU1hkePo4/VN6IXtqclMAQGgmtQIAAAAAAADQi8rHtH6+urqPr3p4KgxuBQAAoJQemk+DWwGASpjUCgAAAAAAAMAf9NDOVW666Ht/OzaW/HnkpnU4xbTDLQMA0JUe2jmq4pGb1tsU0972CwBUaBjHsfQaAAAgn2EYdrmOX6QBAAAAaNjdlixoURliTOuFizVXtbZFWn2oUhN2HjwbAAC06G5OFmuOYujtTC++5pVfCH0KBWk7PRgAQBGPpRcAAAAAAAAAAMkFjQPlfN0K+sSm8Pza2mhiAADozfD0IZyjNnLWk9N98A4FADJ7KL0AAAAAAAAAACpioiYp3H1sNJzn3I0Lz69H9wQAgGaYqBlFrIO4u1oN56fh6cPduOCeAACZmdQKAAAAAAAAQOPm53CSXcqSbk443RxvUgAAiKjOYa0qvg459AmmtgIA2ZjUCgAAAAAAAMDvBHUU1PnjZxjpTG4UAACh9RzU9bz3SnR+BIaRzuQuAQAZiFoBADYZZiu9UgAAAACAHZiRyGoengkqzaXcMQAAWtX2jMSqYrnpxUQ8iIhrzkPOupQ7BgCk9lh6AQAAkWxpU79+7ziO25YDAAAAAMB98+M31SX5iTNXO906b1sAAIjlVMrJL8lGnLna8PThrQoAJGJSKwDAlKTTVo1yBQAAAACqIq6juN4ewt72m4J7CABAIOK6T8VvRfEFlNLVxo0b3c49BAASEbUCAFyXPzSVtgIAAAAA7E7wRrU8nHtxJwEAoKx1sxxrjuVMp2xAtU9XRG4mALA7USsAwB8Un5tafAEAAAAAALe8vx1LLyGhtndXCTf55Pn1qMPcl1sKAEAbOmwpi6StDRd6HT5CVzV8xKW4pQDAvkStAAC/qy0lVbcCAAAAADnpwahE849i8xssyL0FAKBmkrAJOdPWuy/UfBfa/KPY/AZLqXm6MgAQjqgVAGB9zjrOs315G68AAAAAANAnhRu18Uym5g4DAEARu4SgGZI5RWvbVJcZuMMAwC5ErQBA15bmrOtq1e2Bq5GtAAAAAAAQnd4yD/cZAABCS9clKlrbJrbMxq0GALYTtQIAnZqfie44c/Xzauu+V9oKAAAAACQypwF7f7v/NXDXnAepvSjx+fXY3qZq5oYDAFCbOQ1Y9KJy3/XvXs31k+HNOYj27kZ7O6qcGw4AbPRYegEAAAXMz1kTLeB05XWF6um70q0NAAAAAKANmZO2uy+nCu6WurKU59ej9x0AAMR1quZ2aWV7iIp7JrAsYnj68K4BAFYTtQIA3bmbkmbrRcdxXD15dRgGXSsAAAAAwF7WlW+LYsWLL9badULRWpauFQAAchp/fks0YXVLO6dobZuitSBdKwCwmqgVAOhIPTnrxSuuHtmqawUAAAAAyG+XTPH8IqK7Vilaa6BrBQCAnFJ0rYcNaauitW2K1uJ0rQDAOkIIAKAXFRat51aPbPXr3FKrb/UFdx4AAACAZszp7iImYYt6wpkbTNooRrzJq7X61J1TtFYl+uMEAEBovXWVqTvDmfeqt9t+oYftK1rrEf1ZAgDyeyi9AACAHKY7xnEciweKqxewV6IJAAAAAMCE59dj6kYxw0uQjaOsjRMBAIBsUudtw9PH3Zqxh6Szc4rWqjgOAGApUSsA0L67RWu2lSSiawUAAAAAuLBvwJYzh5O2NsAJ1sm5AABANhl60Vtp65zk9aBoDU5CWSGHAgAs8lh6ARDejx8/drnOy8vLLtcBYJGqitZxHFfnqcMwVLUXAIC9+Hs3AMTiZzfQnjkV3Pvb/a9ZWtM9vx7nXJYKKSdr5p0FQGj+0g3EMv78liFyO73EqVCd+XJy1ujEk9Uanj68vwCAmUStAEDjJjLRCitQXSsAAAAAkJkAb8LdmzO/jvv8yvk3/PSVPQd4EftDbygAAOBCzwFenq71sOQmK+7ORUwQe35DhRDxoQIAihC1AgAti1W0bqdrBQAAAADYy0SduKW0XFq3Rgw7oWbeUwAAkNOiGaoZVkJoNTxI3KVrBQDmeCi9AACAVIIWrTWvDQAAAADoU4cB2K3i9P1ttxxu/nWaHP7Z5EPV5Ek1yUkBAFCb5gOwshscf35r/g5/1d6WFa2BOCwA4C5RKwDQo2EYJpLX0FrdFwAAAABANhNF674vND+R1eDVzxnF4rwAACCzIo1lnzlrk0SS4TgyAGCaqBUAaNOctnP4jwzrWcSwVgAAAACALbbkale/d8cBrVcvPufLnl+PMrxqOZqInBoAAGQmMQUAAE5ErQAArQ1ubWkvAAAAAAA53SpaU7/u/JeQ4VXIocTl7AAAIL+caevw9GFcZAMcYlAODgCYIGoFAPidFhQAAAAA6I2g664MRWvmF4rFIwoAAISm6bpF2lqJ+u9M/StkguMDAG4RtQIADVqdpzbTtTazEQAAAACADE5B6dd+MnNoOvPldJ5VcRzROUEAACgoW9d6kLbG5Mga4BABgKtErQAAf1BJDjqOY+klAAAAAAB0pHjRuogMrxIOog3OEQAACsrZtR70dQAAUAdRKwAAAAAAAABUYX5JK8MrzhG0xGkCAEB+p9Gp+StTI1ujcEzNcJQAwFeiVgCAS5UMawUAAAAAqEHNA0v3UtWY1n661h4eLQAAgLsyjyqtQQ1ZaQ1rSC30o9X86fTGgQIAF0StAEBrJKkn7gMAAAAAwDpiS+6KXhTzlTMFAIAMaktJq1oMAAD0Q9QKAHCFIhQAAAAAgFL6GdYalNsOAACw1KKcdfz57fRP0iWd1NbZchAbN8qxAgDnRK0AAAAAAAAA8LtwY1oFlrAX7yYAAEhkac566z/TkdvVw1k0zOECAJ9ErQAAAAAAAAAAs+ge2+Z8AQBgX/PnoE70q3nSViNbAQAgG1ErAAAAAAAAABwONY1pXbQSGR4AAAAV2p6zXnzZ5hXdp2sty/1vniMGAE5ErQAAAAAAAAA9UkISQlUPalWLIRGnDADAXnput2ZOPV06gjXbyNbUL1GV3vYLAEANRK0AAAAAAAAAEJsMLwM3GQAAYI75A1rXXT9D2qrzLMJt74SDBgAOolYAoD3jOFZyEQAAAAAAAnl/O5ZeAlAFATMAAKyWumg9v0LStFV3B+l4fwEAj6UXAAAAAAAAAABQNZUjAADAXXNCtX1L1NPVBHINcIgAAF0xqRUAAAAAAAAAqrN0cqzqEnbkDQUAAEvlL1pTX1ZmmY1b3SGHDgCdE7UCAA0ax7HgtwMAAAAAAC3RNwIAAEwrWLR+XjzF9XV3AACQgqgVAOAPmilam9kIAAAAAMBSS2ecrvsWoG1iZgAAmKl40Xr+KnleCNhONA4APXssvQAI7+XlpfQSALhiHMdhGEqvYr3QiwcA2JG/dwNALH52A9AeZSMAUAl/6Qbiyhyanl5ur15uePoQyialbAQA6JBJrQBAs5aOKh3H0XRTAAAAAAAATiTNAABwV7VFoqmtAABQLVErANCy+Z2qnBUAAAAAgOgEeAAAAOQ0p2gtW5bukrZWG+42wL3tnAcAALolagUA2jf+x6I/Cq29HQEAAAAAQH46YTwDAACwRSWzUitZBgAAcCJqBQA6Mn5RekUAAAAAAAAAAADxxBqxuHFka6zNRuGucvAYAECvRK0AANUZhqH0EgAAAAAAoHdGdHLiSQAAgHUqnI9a4ZIAAKBDolYAgNaYQAsAAAAAAAAAAKRzd7hitfnoxpGtAADAdqJWAAAAAAAAAFrz/nYsvQQAAACgUiu61rsdL4u4n3zyMABAh0StAABNMaYVAAAAAICWlOqTn1/LvC518jwAAMC5Ngo081pP3AcAAPITtQIA1GUYhtJLAAAAAAC6YJYpAAAApNNzKxhl71HWCc1rI5UHAOYTtQIAtMOYVgAAAAAAAAAAgJl0rUUoGAEAOidqBQCoiDGtAAAAAABQ3PPrsfQSqI6nAgAAAAAAdiFqBQBohDGtAAAAAADn3t+OpZcAAAAArbk7YzPc7NNwCwYAgOhErQAAAAAAAAAAAAAAdErXmtPdLpo+eTAAoCuiVgCAWgzDsPp7jWkFAAAAANji+fVYegndqfaeV7swAAAAmE8iCABAtUStAADhKVoBAAAAgHQEfoG8vx1LLwFa5vMQAIAUlIcAAEBvRK0AAFXYMqYVAAAAAICrRJ4AAADAHOPPb6WX0AUVNxM8HgDQD1ErAEB5W4pWY1oBAAAAAAAAAAAAAIAQRK0AAIEpWgEAAACALQwypXL5H9Hn19yvCAAANMzwTyrnEQUAoAhRKwBAYavHtCpaAQAAAADu6ifc7WenUJDsGQAAAAAANhK1AgCUpGgFAAAAAKhEba1abesBAAAAAACA7UStAADxKFoBAAAAAAAAAID8xp/fpr9gePrIs5LM7m6cu1p9NtiRhwQAOvFYegEAAP1aN6ZV0QoAAABAhy5GVr6/Ha9/HVzz/nY09bQ2TgQAAOpxURAp96ABykAAAGomagUAKEPRCgAAAAATpoM3jWtmz6/HTm5y3J0GXXZtpLYAAHRiunbTuOY3PH24zwAAQD8eSi8AAKA7wzAoWgEAAADglufXxUM1V3xLbQpuoZMYspNtNsapUafoP3EAgM4NTx9L5zeu+JbalN2CWrUNTZ5jk5sCACAEk1oBALKSswIAAADALRszodO3x6rgLrb8+Z+xdkEKi94OHhgAAOCujVXn6dtjJXAXW/78z1i7qNP489vdeb/h7nP0eBsAAAIRtQIA5KNoBQAAAICrdpx6FyVtnd5ylF3E8v42axzu8+vRnQcAAFqyY6oXJW2921seIuyCenhaAABgX6JWyOHHjx+7XOfl5WWX62Rgy6vZcs322vKhy13bcs05a4envIsfP34E2nKHp+xDewtbrpktr9bhlg9xdt3hlg+e7Q1suWa2vEWHu7blmtnyara82o5F6/k1z7vE2j60Z255Y125466jaGbLi94U//jbX7dv3CcYFNfhs23Lq9lyzWx5iw53bcs1a2nLKYZPDk8f//rn/179o0BbntjFIjVseabMH9qVDGuduevvf//z9EUCHvTUjv74ldftvmWzcJmpkk8PACCph9ILAABo2fAfK77XgFYAAAAAejAn3nt/O57/s+OVi6hwYf/421/vfk2Fy15hzk5jCbqjmW/85OsAAIDWzUnIxp/fxp/f/vXP/z39M/PK0wVgQXVWc3PqrDpXPqHJTV21S/yc2Zx3aMR9AQDQDFErAMDOvn///v3799Ut6+FwGMdR0QoAAABAD6bDtlsVa+iutcIl8VXZY/KQAAAAu5juCU8t69cuMXTX2kZC2ZgQh1LhwwwAAG0TtQIALPZ90pYry1kBAAAA6MdEuXd3ImvornWR6Ouv0MzRpiHuvFmmAADALRMl4dWW9VzornWR6Osvbs6w1vpNPwbGmQIAQAqPpRcAAFCvjYXqIlpWAAAAALoyXbTmW0deITrJHvzjb3/9r//+n9KruG7+Q9LwO6UU71AAAJoxXbTmXElOISaCtmf8+e3unR+ePqp98BStAABQhEmtAADXZStaTWcFAAAAoDe3yrG7A1ovvnjjy3Fu5vzSZszZb/4np5Oidc42Q28QAADKulUY3h3Qeq6fYa3ZVFt15hExOY5btM55V8bdHQAAbRC1AgCUJGcFAAAAoDcTRWvWdQRR1W3pMA/OueVOilZoQ4efhwBAFBNFa+aVhFBb1xex/DzMfrpq2933v/9Zkg0AAP/H3t0bVY6sARhGU1gkgjkmxSSwG8aEsBnAZLAh3DB2ExhqzGuSCK6uce6eYvnRkVr9qf+ex5yhREvdR4Dx1leKqBUAoKTpH6UXAgAAAABHKFW0/vHX36HXX0MBVZuVw2mP2ThFKwAAsF+porWGMrC2YHI067vWSnbq4qGtLXgGAIDOiFoBAKowvVJ6LQAAAAAQwozWyq2MPHtSSdeqaH1jkNsEAIC8zGitX997sf7uinetitbubxAAgPqJWgEAPvbz589S31raCgAAAABwjOJd62hFq5HFAAAAvZqfbyof2frt+9flovXnf/7bevBZvBkGAIA1rksvAACgXsld67dv3/Z/91PXOs/z/ksBAAAAQHHFx7T+8dffzU0irTBivHt4rHBVO/35+29//PX3xS/Lfu+b8s7+HjsAAJBR8TGt375/bS4FrHPB0+1L6wNd5+eblV3l6cuOud+L01mvaj0SAADQJZNaAQDy+/nz5/xvyZea/pFxeQAAAABwsOJFa3GmU1Zu/bzWXFupaAUAAHIpXrQWZzRlbTadvdPU1qBNnG5fLk5nPVG0AgDAkUxqBQA4wrlrTc5TDW4FAAAAoDM6vQqtnFnapVPXunJk61XqAU5oYkf7pIx2vwAAEGScorUt66eYtu50Ajfd7PmL95/eTd93tJx1tPsFAKBOolYAgEPtrFunadK1AgAAANAWQ0o7c/fw2HF2uD7rfX2wlx9I8kegv+fsbQAAANkNUkgOZbp96aZJTkhb33z9mkeR/CnoL+/0QgAAoBWiVgCAMuZ5Tu5ar4xsBQAAAKBx+2u97uu4UkHjyMNaT/78/bf7+/tNByz7aewvZ11p2BsHAIC89ieR375/zbKSas3PN09Pxb71aOXhnluOe1b9Fa1rjHnXAABUSNQKAFDMKUw1shUAAACAjnWfnq7hIbTo14/HIhun6gQAANYbrY38kIfQhLSRrRFUnQAAUANRKwBAYUa2AgAAADAa2V7r7h4eR9jE0z0elrZ2/0jV3QAAcIz9Y1opbrp96XIfzzdVpG7tPmetoRkGAICVRK0AAOUld61XRrYCAAAAUDENW6P+/P23P/76u/QqanFuTYPOc/ct63oeBQAAbCJga9f8fDP49h1Zt3bfsq7nUQAAUA9RKwBAFXStAAAAAAwiS7fWfS6r7qtQ3rp1tC3u/jMLAACVyDLe89v3r/svUrMuh6A26s1e5GpcX1/26SnLJWs3eCYNAEBzRK0AALXQtQIAAADQk9oatj9//630ElpycVjr3cPjaFnm2fsbv3jah31W63lEtMWJBQCKqy1gMwFyq4vDWqfblwHj2w9v+eJpH/BBJfAhBQCgKqJWAICK6FoBAAAA6NuAFVBtcS8RBjzYAABAhQZM+2qLe4kw4MEGAIDufSm9AAAA/mVPmJocxAIAAABAXqElp0z0GBdn29oIVmplkm0lywAAgItCS85v37/GXZzXLraakl1WunhUjGkFAKA2olYAgK7oWgEAAACoVsFg7GKfWRVlHQAAAFsVnGbZVi9n7CcAAEBxolYAgOrsGdZ6pWsFAAAAoDQDPLvRVgxMnVoZ0woAAK0wvbMnClv2M6YVAIAWTTuTCQAAguxpU/2OtyBX9OshAwAAAHzms4YtS7qWVsyWqubaWu2HFIns1NYR0uSzUlXnFgAYzWcBW5Y8Mq2YLVVmtrXaz1y8i9oWTG0aOkKafNar59wCAEFMagUA6JBhrQAAAADUpmD/Iz3aw9MjlAMGAABZFIx/dEc7eYCEquqAVbUYauaoAMAIRK0AAJXaOQhU1woAAABAEeYc7tRc42fHWeB4AABAXuYc7tRiKGXTWeB4AADQKFErAEC3dK0AAAAAdEYgV0RznS2tcLQAAKAq6rhSWkxtaYKjBQBAtUStAAD12jmsFQAAAAAoWM2Nk+COc6ds4mDQKz02AMBZwWRuqAR3qJtlPQcDAIB2iVoBAHpmWCsAAAAANcjS/wjkClJwkV2dh6rOVQEAwLIsZak6riwTNcnOoQIAoGbXpRcAzXt6espynfv7+yzXAQAAgJ74uxsA2uJnN7Vprk9rbsFndw+P7S6eCCp0AIDs/NFNbZpL5ppb8GvT7UvT6yc7IToAAE0zqRUAoGrzPO+8gmGtAAAAAJSldeyDfSQjxwkAAHIROnbDVpJRtcep2oVRD4cEAAYhagUAAAAAAACyCWrVmpv62NyC11je3C5vmTTLh0HRCgAAyYJSn+ZGPja34JWW97fXuybB8mHQBAIAUL/r0gsAACDcNE37J74CAAAAwEqVFGuVLGModw+PHjvyZvrmLQcAFFdJrlbJMkYz3b548sibAQDogEmtAAAAAAAAAOU1EUo1sUhqVv8Rqn+FAABAglZa0FbWSbUcIQAAmiBqBQCoXZYhq9M07b8IAAAAABRh8GNVlpM/mzW45QOgFwUAgAqZ+lib5SjRfg1u+QA0UbQ2sUgAAKKJWgEAAAAAAIDelG3nhJ2MyckHAIBBlG3SVJ0My+Gne5pnABiHqBUAAAAAAACADQxrJYExrXTAMQYA4BiGtZJADQgAQENErQAAo5imqfQSAAAAAGCzhEKyxeiouTXrWnljedPbOuFtrRYAAPZIyCNbDOf6W7OudUDLm97iIQcAYGSiVgAAAAAAAAAAAAAAIJwElw85GAAwFFErAEAD5nkuvQQAAAAAYJVxhpQa1spZT2NaAQCAmg01odSwVs6MaQUAoDOiVgAAAAAAAKBSCWGkfO5IulauOi1aG102oZwKAKA/CVWkdu5gulauFK0AAPRI1AoAAAAAAABQUtOhlK51cF0WrQAAQE9aT/50rYPrtWhtd+UEcSQAYDSiVgCgW9M7pVdUnocAAAAAAGQnXByWohUAAOAAWq9h9Vq0AgCAqBUA6M1CwqpuBQAAAICGJAz5LB7RGUz6nmcypuIfxv06uAUych4AgP4kTPgsXtCZSvohj2VMxT+PAACwh6gVAOjH+mBV2goAAAAAkNFy7qVr7ZJtBQAAOMxywahr7VL326rL5cxhAIABiVoBgE4kRKq6VgAAAACguG6m/+lah7K8od2cajhxpAEA2tVTKKVrHcryhvZ0sAEAGJOoFQDoQXKeqmsFAAAAgDolNJCio+J0rYMYp2jt6V4AAOC1hABSRFcDXesgFK0AAHRP1AoANG9nmKprBQAAAACyEG1e6VoHME7RCgAAVEWxeaJr7d5QRWtnt0MaxwAAxiRqBQAAAAAAACAbXWvHBixau7wpNnEGAACoja61Y0MVrQAAjEzUCgC0LcucVcNaAQAAAKAqCd1jo9FRo8u+SNfapQGLVgAA6FJC9NhoStfostfQtXZpzKK11/tiJQcAAIYlagUAAAAAAAAgM11rZ0arcvdSAAAgAElEQVQuWvu+O5bZfQAAqqVr7cyYRSsAAMMStQIAAAAAAADspdJ8T9fajZGLVgAAoAYSzQ/pWrsxeNHa/Q3yGVsPACMTtQIADZumqcJLAQAAAABwomvtgKL1apjb5A37DgBA/XStHRi8aAUAYEyiVgCAgczzXHoJAAAAAHBBQujYaHfU6LK3+vXjceFOda2VW9ig5Z0FAADqlFA5NtrUNbrsBPPzzcLN6lort7BByzvbmXHulDObDgCDm4QNAEC78o5Xrfz3oiw3W/k9HiPXsfEwAQAAAII0GrU2uuwjLeeRx62D1WzZGxrsoYx5yAGAETQatTa67IMt55FHroSVbNlrAuzRDHjIAYDXTGoFAAAAAAAA2EXqtoZ5rW1RtAIAAJWQuq1kXmtbFK1vjHnXw7LdAICoFQCgAXln0gIAAABAT/R1DdG1tkLR+qGR73009hoA4Ex31BZdaysUrQAADO669AIAAKowz3PpJYQb4R4BAAAAaN04ZeOwxdTpxsfZ6J4Me2gBAKAb42SNI2eBp3sfZ697MvK5PZmfbxzdETjqAMCVSa0AAAAAAAAAHEwe2RxbduI5jMAuAwDQAc1Yc2wZAABDEbUCAAAAAAAApDN0NM2vH4+vyzEVWVXebI3dAQAASjG2Mdn8fPO6k9RMVuXN1tidM4+ie7YYADi5Lr0AAIB08zxP05TlOvsvUrkR7hEAAACAAWntWmcHq2VrPvPrx6OUvWNOPgDAa9KjDtjEatkaAABGZlIrAEDtsoS7AAAAAEA9RFPQNB/hXtlZAIA+aAWhaT7CHbO5AMCZqBUAGJ0RpgAAAABQCcMPAQAAIMh0+1J6CQCrSB+7ZFsBgNdErQDA0AYpWge5TQAAAAA4nhAXxmSkZ3/sKQBAhYS4AAAAXRK1AgBt25NrSj0BAAAAAIA0Gsie2E0AAICqmOrZGRsKALwhagUABtVK0TpN084rtHKnAAAAADAI6RQAAAAE0U1BN3ycu2ErAYD3RK0AwHDmedZ5AgAAAEAH1KFAWd5CfbCPAAAf0iABxXkRAQD0StQKADRvZaE6/yN6PRkZ0woAAAAANbt7eCy9BKAwPWTr7CAAQLWm25fSSwBgL2UyAPAhUSsA0LkWW9ZcxrxrAAAAAACANRStAAAAlZNENs32AQCfEbUCAD1YqDf3Dzstpd2VAwAAAACfEVBBf3yuAQCgEuop6JKPdqNsHACwQNQKAHSiy651D2NaAQAAAADgGLrWFtk1AACAVsgjm2PLAIBlolYAYAjNda07F6xoBQAAAIBodw+PpZcAVEQh2Rb7BQBQuen2pfQSAAAAiCJqBQD6oeQ88RwAAAAAAOB4OslW2CkAAIDmmPzZEJsFAFwkagUAurLQc07T1Mq81lbWCQAAAADDShvTKqOC7vmY188eAQDUL21Mq4YKuudj3gTbBACsIWoFAHqzPKe0/l505wqNaQUAAAAAAPiQohUAAKBpgsnK2SAAYCVRKwAwnJq7VkUrAAAAANQvbUwrMAjZZLVsDQBAE9LGtALjkE1Wy9YAAOuJWgGADl1sO2vuWpMpWgEAAAAAoAbiSQAAAIgjnqyQTQEANhG1AgB9mud5OfKcpqm2tHXPehStAAAAAHSgiQwseUxrE3cH5OIjXxs7AgDQRG6UPKa1ibsDMvKpr4rtAAC2ErUCAD1bM7K1hrR1zzIu5rsAAAAAQC7JRSswIBVlPewFAEATkotWYExCykrYCAAggagVAOjcmuCzbNpqQCsAAAAANEHRCmylpSzu149HuwAA0ARFK5BATlmcLQAA0ohaAYD+rSw/i6StilYAAAAASKYyBeonqizIkwcA2ENlCjRBVFmQhw8AJBO1AgBDmOd5U9p6QN2657usvx0AAAAAaEu1AdLOgLba+wKO4SVwPM8cAOC9auujnQFttfcFHMNLoAiPHQDYQ9QKAAxkUwgaV7fuvKycFQAAAAAOZiQssJ/G8kieNgBAQ4yEBfYTWB7MAwcAdhK1AgBjSZhxOr2y51vvv4gBrQAAAACMYFOJdEBuqmgFclFaHsNzBgBYsClDOiA3VbQCuczPN0rLY3jOAMB+olYAYETJdej0zvqvT1rp/8lZAQAAAKAIRSuQl94ymicMANAQRSuQnd4ylHIYAMhlUkcAAIPbmZtG89tadrl23NYAAAAAhNpUk0YkTBlzVoUV8IZgPoKXLQDAeptq0oh+KWPOKq8C3tPMR/C+BQAyMqkVABjd/I/SC/mXOlcFAAAAAIcp2ybpzYBQv348KjDz8jwBADYpGyaJzYBo8svsPFIAIC9RKwDA/1XSkdawBgAAAABoS8YG9e7hUdEKHEOHmYsnCQAQKmODOt2+KFqBY8zPNzrMLDxJACDCJJkAAPjMNE3HfCO/kh0p17baNQAAAIADbOpL90dNQTmr2gpYpqVP5gULALDHpr50f9EUlLNKrYBlWvo9vGMBgCCiVgCAtfI2rn4NK0XUCgAAANCWra1XWuC05rv8+pEyxFVwBayha03gBQsAsN/W1iutblrzXebnm4TwTG0FrCRt3coLFgAIJWoFANhrOZL061ZtRK0AAAAAzYnrWlde+XxBUSsQStq6klcrAEBGcV3ryiufLyhqBULpWtfzdgUAoolaAQAYi6gVAAAAoEXJodf78Ck5kU1bg/IK2ETXepH3KgBAdsmh1/vqKTmRTVuD7ArYStq6zHsVADiGqBUAgLGIWgEAAADadXDr9aabErUCh5G2fsgbFQAg1MGh15tuStQKHEna+p43KgBwJFErAABjEbUCAAAANO2w0Gv/iNcPLwKwnrT1zOsUAOAYh1Ve+0e8fngRgPV0ra95owIABxO1AgAwFlErAAAAQAdCQ68P0yljWoFSBk9bvUgBAI4XGnp92E0Z0wqUIm31LgUAirguvQAAAAAAAACAbc6NU8bWSzcF1On0dhowbfVaBgAo5Rw4ZWy9RFNAnU5vpzHTVm9mAKAgUSsAAAAAAADQqv11q2gKaMJQaas3MwBAJfbXrYopoAmjpa1ezgBAcdM8z6XXAAAAx5mmKct1/CINAAAAUL8P66+0ViohJBNlAUE6Tlu9OQEAGvJh/ZUWSiWEZIosIE6vdas3JwBQD1ErAABjEbUCAAAAsFVaPybNAqJ1U7d6YQIAjCwtHpNmAdF6Slu9MwGA2lyXXgAAAAAAAAAAAJudWtCm01Y5KwAAAHU6h6Dt1q1aVgCgWqJWAAAAAAAAgMxkWsBhzi+chupWL0kAAPaQaQFHaq5u9ZIEAOonagUAAAAAAAD4VEORGDC416Vohe8uISsAAO+1UogBXFVft2pZAYCGiFoBAAAAAAAAALpSSeAqZAUAAKA/r/PRsoGrkBUAaJSoFQAAAAAAACAnERdQlTcvpdDG1QsQAIBoCi6gKu9fSnGZqxcgANANUSsAAAAAAADAxwqONwQIstCdrnzpKVcBAMii7HhDgCAL6ema955yFQAYgagVAAAAAAAAAAC1KgAAAAQSrAIAnHwpvQAAAAAAAACAGqWNaZWEAQAAwEVpY1r1YAAAAB0QtQIAAAAAAAAAAAAAAAAAEO669AIAAAAAAACAob0fiNrusNN2Vw4AAECX3g9EbXfYabsrBwAA4DVRKwAAAAAAAFDA+5b1zX+VDUQXlgcAAACVe9+yvvmvsoHowvIAAADo3pfSCwAAAAAAAACGsyYZvXt4bKssNaYVAACAGqxJRqfbl7bKUmNaAQAAumFSK+z19PSU5Tr39/dZrgMAAAA98Xc3ALTFz25Wqj9VTVihohVoTq4f3Fd+dgPAIfzRzUr1p6oJK1S0Ai3ysxsA4DMmtQIAAAAAAADH2dqL1l/AAgAAQCW29qL1F7AAAAD0R9QKAAAAAAAAHKSJQtWYVgAAAFrURKFqTCsAAACiVgAAAAAAAOAIyUXrkSlsE9ktAAAAvJFctB6ZwjaR3QIAABBN1AoAAAAAAACQzphWAAAACGJMKwAAQH9ErQAAAAAAAEC4JiagJixS0QoAAEBxTUxATVikohUAAKBLolYAAAAAAACAFIpWAAAACKJoBQAA6JWoFQAAAAAAAKCNWbIAAADQoiZmyQIAAHAMUSsAAAAAAAAQa2cvesBA1IQVGtMKAABADXb2ogcMRE1YoTGtAAAAHRO1AgAAAAAAAENTtAIAAEAQRSsAAABviFoBAAAAAAAANlC0AgAAQBBFKwAAQPdErQAAAAAAAEC9ogvSrWNaFa0AAAB0I7og3TqmVdEKAAAwAlErAAAAAAAAMChFKwAAAARRtAIAAPAhUSsAAAAAAABQqdCIVNEKAADAyEIjUkUrAAAAnxG1AgAAAAAAADVStAIAAEAQRSsAAACliFoBAAAAAACA6ihaAQAAIIiiFQAAgIJErQAAAAAAAECsTVHorx+PilYAAABYaVMUOj/fKFoBAAAo67r0AgAAAAAAAAAOakcVrQAAAAzomHZU0QoAAMAaolYAAAAAAACgmMOq0a0565WiFQAAgMYdVo1uzVmvFK0AAAAD+1J6AQAAAAAAAED/PgtEE1rTBAkDWhWtAAAAtOKzQDShNU2QMKBV0QoAADAyUSsAAAAAAABQUnTXmlC0hqwDAAAADhfdtSYUrUErAQAAoBWiVgAAAAAAAOAIC7FoUNd69/CoaAUAAGAEC7FoUNc63b4oWgEAAEhwXXoBAAAAAAAAwCh+/fi0Mj39e66mNKGSlbMCAADQtPn55rPK9PTvuZrShEpWzgoAAMCZSa0AAAAAAABALfaPbE2YznqlaAUAAGAA+0e2JkxnvVK0AgAA8G/TPM+l1wAAAMeZpinLdfwiDQAAAJBsZXS6NTRNC2LlrAAAAPRkZXS6NTRNC2LlrAAAALwnagUAYCyiVgAAAIBKbGpQP0tP90x2lbMCAADQq00N6mfp6Z7JrnJWAAAAPiNqBQBgLKJWAAAAgHrsSVL3kLMCAADQvT1J6h5yVgAAAJaJWgEAGIuoFQAAAKAqB3etclYAAADGcXDXKmcFAABgDVErAABjEbUCAAAAVCg6bdWyAgAAMKzotFXLCgAAwCaiVgAAxiJqBQAAAKhW9rRVywoAAAAn2dNWLSsAAABpRK0AAIxF1AoAAABQvz11q5AVAAAAFuypW4WsAAAA7CdqBQBgLKJWAAAAgEa9L131qwAAAJDF+9JVvwoAAEAQUSsAAGMRtQIAAAAAAAAAAAAAQBFfSi8AAAAAAAAAAAAAAAAAAID+iVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcNelFwDNe3p6ynKd+/v7LNcBAACAnvi7GwDa4mc3ADQk1w/uKz+7AeAQ/ugGgLb42Q0A8BmTWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBwolYAAAAAAAAAAAAAAAAAAMKJWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBwolYAAAAAAAAAAAAAAAAAAMKJWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBwolYAAAAAAAAAAAAAAAAAAMKJWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBwolYAAAAAAAAAAAAAAAAAAMKJWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBwolYAAAAAAAAAAAAAAAAAAMKJWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBw0zzPpdcAAADHmaYpy3X8Ig0AAAAAAAAAAAAAAJuY1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABDuf+zdsQ0DIRAAQSO5KfoPKOtdgQNL7L+wZgo4kR0EK0StAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAOTeTx8AjrfW2jJnzrllDgAAAPwT724AOIvdDQAH2bW4X3Y3ANzCoxsAzmJ3AwB846dWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHLjuq6nzwAAAPcZY2yZ4yINAAAAAAAAAAAAAAA/8VMrAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAALn30weA4621tsyZc26ZAwAAAP/EuxsAzmJ3A8BBdi3ul90NALfw6AaAs9jdAADf+KkVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACA3Liu6+kzAADAfcYYW+a4SAMAAAAAAAAAAAAAwE/81AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAJ4/PxUAACAASURBVAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABA7v30AeB4a60tc+acW+YAAADAP/HuBoCz2N0AcJBdi/tldwPALTy6AeAsdjcAwDd+agUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgN67revoMAABwnzHGljku0gAAAAAAAAAAAAAA8BM/tQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQez99ADjeWmvLnDnnljkAAADwT7y7AeAsdjcAHGTX4n7Z3QBwC49uADiL3Q0A8I2fWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAgA97d3fVuJI1YNhiEQIh0BFwRTAngxNOZ9DB+IoImhDIQd+F5/MwGAv9lFS1dz3PmouZc2i5SiUb6Fnv2gAAAAAAAAAAALC7YRzH2msAAIDjDMNQ5Dp+kAYAAAAAAAAAAAAAgEVMagUAAAAAAAAAAAAAAAAAYHeiVgAAAAAAAAAAAAAAAAAAdidqBQAAAAAAAAAAAAAAAABgd6JWAAAAAAAAAAAAAAAAAAB291h7AQAAAAAAUMzHy/Plvzy9vdddCbecDgAAAAAAAABA54ZxHGuvAQAAjjMMQ5Hr+EEaAABacw0mr5STTXFAAAAAAAAAAAA81F4AAAAAAABsdRtM0j6nBgAAAAAAAADQG5NaAQDoi0mtAACQzEQYaRBoa+4dlpMCAAAAAAAAAOiESa0AAAAAAESlaI3l3qEY2QoAAAAAAAAA0AmTWgEA6ItJrQAAkIaxn0E5OAAAAAAAAACAbolaAQDoi6gVAAASMKA1OicIAAAAAAAAANCnh9oLAAAAAACABfSQCUyc1MT5AgAAAAAAAAAQnagVAAAAAIAwFK1p6FoBAAAAAAAAADokagUAAAAAIAZFazK6VgAAAAAAAACA3ohaAQAAAAAIQNGakq4VAAAAAAAAAKArolYAAAAAAFqnaE1M1woAAAAAAAAA0A9RKwAAAAAATVO0pqdrBQAAAAAAAADohKgVAAAAAIB2KVo7oWsFAAAAAAAAAOjBMI5j7TUAAMBxhmEoch0/SAMAwAG6Klrnp5v59n7V1YkDAAAAAAAAAHRI1AoAQF9ErQAAEEX6vrHUANIcd+Mq/bkDAAAAAAAAAPTssfYCAAAAAADgq1LBZ2v22Nfna+bOPj9ennNvEAAAAAAAAAAgPZNaAQDoi0mtAADQvunyM2jWeHCmG/QuXaR8AAAAAAAAAAAAOJnUCgAAAABAIBGDxipTZ68vGvGOPb29Zx3VCwAAAAAAAADQOZNaAQDoi0mtAADQuImaMVaf2VSWGevWXaR5EgAAAAAAAAAAuHqovQAAAAAAAPiPpkLQLVrbSGvr2SjZdgAAAAAAAAAA+mFSKwAAfTGpFQAAmjVdKkYZzrm0t5y/ryIlZ5TbeJHjkQAAAAAAAAAA4ErUCgBAX0StAADQphz54szudON2ttetUe7nKcuDAQAAAAAAAADAxWPtBQAAAAAAQAZzWtMiEeb1Iqvr1o+XZzkoAAAAAAAAAADHM6kVAIC+mNQKAAANSjCN88e+dKddbJnaGuLGnlI8HgAAAAAAAAAAXIhaAQDoi6gVAABakyBZrL6F1WlriNt7auAOAwAAAAAAAABQxEPtBQAAAAAAQGATveXT2/sxveXqF9oy6BUAAAAAAAAAAJYStQIAAAAAUE30CZzTReuRK1n9iiG61umthdgCAAAAAAAAAAAnUSsAAAAAALVEbxGbKlq3vG70gzil2AIAAAAAAAAAQA9ErQAAAAAAtKjxMa0NFq1bXr39KLTx5wEAAAAAAAAAgDlErQAAAAAAVDBdUTZeMDZbtG5ZQ/Sutf31AwAAAAAAAAAgagUAAAAAgDJaKFov2lkJAAAAAAAAAABcDeM41l4DAAAcZxiGItfxgzQAAGyRckxra8teN7m0tV3cCv3wdGLj1FyHCAAAAAAAAACJPdZeAAAAAAAAfdkYvLWpwQzv6e095a2e9vHy3OBZJLbHM/btNR0rAAAAAAAAAORgUisAAH0xqRUAAKoLPWkzypjWqxXNYbN7uQr9CCXQQiztlAEAAAAAAAAgKJNaAQAAAAA4Tgs5XHH6uqYY1rqH1t65n9fjuAEAAAAAAAAgEFErAAAAAABscu3rcsR1olAuWgtZ70n2BgQAAAAAAACA3IZxHGuvAQAAjjMMQ5Hr+EEaAABW+LGRa7xJm9/4NbWRFWliU+v/VvRnqXFRctZ7nD4AAAAAAAAANMukVgAAAAAAKMywUyKK3rJeXTbiPQgAAAAAAAAADTKpFQCAvpjUCgAAtSQYrbk0+WtnR4a1MiFNy3qPJwEAAAAAAAAA2vFQewEAAAAAAJBT+laQ6D5ennt4SjvZJgAAAAAAAACEIGoFAAAAAGB3CYqyBFvojSOb0GHn2eGWAQAAAAAAAKBBolYAAAAAAOp7enuvvQSC8cys03nb2fn2AQAAAAAAAKA6USsAAAAAAOylkXxuRf/ZyMopSM955VYAAAAAAAAAQC2iVgAAAAAA9vVjPGbkJuv8+OQIF6/cilvSVgAAAAAAAAA4nqgVAAAAAAAgLenmNDcHAAAAAAAAAI4kagUAAAAAYEeCMerq+QmUs87kRgEAAAAAAADAYUStAABrDEvUXiwAAEDTnt7eay+BwDw/96g0l5K2AgAAAAAAAMABRK0AALNs6VSVrgAAAAmsiycllxxPnLmFWwcAAAAAAAAAuxK1AgDctWuDKnAFAAB6IA+jBV09h11tdifuIQAAAAAAAADs57H2AgAAmnN8ZXp9xXEcD35pAAAAIA01ZimXO2nSMgAAAAAAAAAUZ1IrAMB/VZ+bWn0BAAAAB4vVjC1dbazdxeU+n06nj5dnRWtxbikAAAAAAAAAFGdSK2x1Pp+LXOf19bXIdQBYp6mU1OBWAIArv3dDaCl7sKe395n7Ulo25ePlOfGJpHyvNSL3kwMApX7pPvm9GwAO4S/MASAW37sBAO4RtQIAvWsqZ/3isjZpKwAAQFMuhdtERpgjgcuxix4oWvd2ucPeEQAAAAAAAABQxEPtBQAA1NRy0Xo1DEOIdQIAAHTl6e39NnL79h+2QPeYlZM9jFsNAAAAAAAAAEWY1AoAdGpdJrpoaGrZEnUYBiNbAQCAQOYEYG32n4sk2EIOT2/vPz5yHy/Pmc5LY3m8ZI8QAAAAAAAAAFRhUisA0KNFuen4yaJXWf0H7zGyFQAAADgpWutx5wEAAAAAAABgI1ErANCX+V1o2R61bNpa5DoAAABARLrKutx/AAAAAAAAANhC1AoAdGRRzrrHAkpd2chWAAAA5lvR4D29ve+xErZTVLbAKQAAAAAAAADAaqJWAKAXcyrQ/XLWPV5F1woAADRrTvElm6SsOU9U9BYx+vozcRYAAAAAAAAAsI6oFQDowsyi9YCVfH657a+oawUAAGCa9C4NR9kaJwIAAAAAAAAAK4haAYD8fiw/jxnQeu+lN15B1woAAEBZhug2SD/ZJucCAAAAAAAAAEuJWgGA5OYUrcesZL8F6FoBAAAgMeVky5wOAAAAAAAAACwiagUAMpuuPSsOaP1C1woAAGQi8WrHirNIP6Y13PMZbsEdckYAAAAAAAAAMJ+oFQDoVCM565WuFQAAACAoXSsAAAAAAAAAzCRqBQDSmog8WytaL3StAABAP9KPA21Bh2Nao6//llQyEIcFAAAAAAAAAHOIWgGAnMIVrRe6VgAAAOBCJAkAAAAAAAAA5CNqBQASCh12ttzcAgAAEEWHY1qTUbRG5NQAAAAAAAAA4EeiVgCgLz0ko6GbXgAAALZTtEanjYzL2QEAAAAAAADANFErAJDNRNIZpWjdvk5dKwAAUIugi/Z5StmVBwwAAAAAAAAAJohaAYBeRClaL2KtFgAAgHYY0xqdJBIAAAAAAAAASEzUCgCkYkLplVsBAADQIUVrdIrWHJwjAAAAAAAAANwjagUAuhBx8GnENQMAABCLorUpSshMnCYAAAAAAAAAfEvUCgDkYTbpF24IAADQJiHlTpZGdCkPIuWmAAAAAAAAAADSELUCAPkZeQoAAEB6itboDPbMx5kCAAAAAAAAwC1RKwCQRMqppNtz3JS3BQAAgC8UrdAmXSsAAAAAAAAAfDEYXAYA5HCv3oz+0872KjX6HSiuVOjrxgIAwLfmFFyKyrIUrV9EfAilj4m19rABAAAAAAAAQF0mtQIAyQ2f1F7LGoa1AgAAUJC+rkGK1tycLwAAAAAAAAB8JmoFADKY2W1GD1wBAADgi0W9nKIVqtC1AgAAAAAAAMCVqBUA6JSuFQAAoDjh1sEUrau186y2sxIAAAAAAAAAgAOIWgGAfkUZ2TqOY+0lAAAA0BxFKwSiXgYAAAAAAACAi8faCwAAqGwYhvTVaA97BAAA6Mr8QE7O2jKhIwAAAAAAAADQG5NaAQAAAAAgEkUrRKRhBgAAAAAAAICTqBUASGAYhupXAAAAgGMoWtOQOAIAAAAAAAAAHRK1AgAAAABADIpWCE3JDAAAAAAAAACPtRcAANCEYRjGcay9irvGcTROFgAAoHMzczg5awjiRgAAAAAAAACgTya1AgB0QRMLAAAQmqIVctAzAwAAAAAAANA5k1oBAAAAAKBd8xM4RWsUskYAAAAAAAAAoFsmtQIAAAAAQKPmD2hVtEIUqmYAAAAAAAAAeiZqBQAAAACAFs0vWvdeCQUJGgEAAAAAAACAnolaAQAAAACgOYpWAAAAAAAAAADyEbUCAAAAAEBb5hStT2/vilYIysBeAAAAAAAAALolagUAwhvHsZGLAAAAwHYzi9YDVkJxUkYAAAAAAAAAoHOiVgAAAAAAaIWiFTqhcAYAAAAAAACgT4+1FwAAAAAAAJxOMyI3OWspVe6kiBEAAAAAAAAAwKRWACCDcRwr/nEAAAAuJJdbKFoBAAAAAAAAAEhP1AoAJLE6TFW0AgAAUJ2iFTpkeC8AAAAAAAAAHXqsvQAAgJoUrQAAAFTXSNF6uwwlbUHyRQAAAAAAAACAk6gVAMjkUqgOw7Do6zvR1WYBAACiaCRnBQAAAAAAAACAYzzUXgAAQGEz681Ykef8UhcAAIAomipazREFAAAAAAAAAOAAolYAIKHx/y36VwAAAHCYporWNhewjjqXWDyxAAAAAAAAAPRG1AoAZDbeqL0iAAAARFwBilbK8swDAAAAAAAAAFw81l4AAAAAAAB0ZLpvlLMCAAAAAAAAAJCYSa0AAPkZUQsAANAIRSsAAAAAAAAAAD0TtQIAtG4YhtpLAAAAmEuWOUHR2gi3mqZMfzIAAAAAAAAAQDKiVgAAAAAA2F3LRaumblduLwAAAAAAAADA1WPtBQAAsK9xHGsvAQAAoHcTWWObU0PbXBUAAAAAAAAAANGZ1AoA0LRhGGovAQAAgE3CFa0AAAAAAAAAALATk1oBAAAAgB596Qy1hexE0XqkibsNAAAAAAAAAEALRK0AAJmN41h7CQAA0Irp2k3jerCPl+f0N3n6kWtn+0JQqK6Hj0QAAAAAAAAAuHiovQAAAO4ahqH2EgAAIIOPl+el2d6KP9KailuQZp3iFK0dOvjmR/8kAQAAAAAAAAAoy6RWAIC0jGkFAICNOdnlj8fqD79s+fo/Y+0iuokHr7WDkFwCAAAAAAAAAHAkUSsAQKOMaQUAgC0KpnpR0tbpLUfZRQKBilYAAAAAAAAAADiYqBWOcD6fi1zn9fW1yHUOYMur2XLLSm351OWubfl488e0ptnywc7nc6Atd3jKPrS3sOWW2fJqHW75FGfXHW755NneYOaW9xg++fHyvKhIbHPLS3exyOct/1r49Z+FfrB//fvPvS/++/vP3/tPRZVd33tsph8Sn2CLzHkvQBXey1t0uGtbbpktr2bLLfOhvYUtt8yWV7PllvnQ3sKWW2bLq9lyy3xob2HLLetwywAA0YlaAQBaZEwrAACsNifv/NLstVCEbrFHxLvR399/JvLOi1///vP3959j1nOM6S1P/9uP0ovp0Ir3PgAAAAAAAAAAB3uovQAAAMqbP6YVAACSma7ant7eL/+5/edFrl9Fg0vq048RLwAAAAAAAAAAIGoFAGjOxjGtilYAALo1kXd+27J++YLtrxJC9PW3SdEKbOTDGQAAAAAAAIBOiFoBAAAAgAymi9YjV3IkEVQLFK0AAAAAAAAAADCTqBUAoC3GtAIAwAr32s4fB7R++eKNL8dnf3//qb2EIyhaGzHnXZm4bwcAAAAAAAAAiELUCgCQh6IVAIA+TRStB68khKZuS/QiNPr6v9XUEwIAAAAAAAAAQDKiVgCAhmwc0woAAB2qVbS2MKy1hTV06+Pl2f3nRymzZwAAAAAAAACALUStAACt2Fi0GtMKAECHzGht3N/ff2ovYRdy1oh8LAAAAAAAAAAAtEDUCgCQgaIVAADgGIrWBjkUAAAAAAAAAIAoRK0AAE3YMqZV0QoAQJ+qj2mN2NE1OKzy17//1F7CAhEPHQAAAAAAAAAA2iFqBQCoT9EKAABLVS9aq1NXAgAAAAAAAAAA4YhaAQAAAIAk+ilaA/n7+0/tJRTTQ0ic9U2UdV8AAAAAAAAAAOGIWgEAKjOmFQAAluqhLezKr3//qb0EAvOBAAAAAAAAAAAQiKgVAKAmRSsAAJSyfRJj+jSu1rDKTMNaiciYVgAAAAAAAACAdohaAQBCUrQCANCt9OnpHG4CAAAAAAAAAAAQkagVAKCa1WNaFa0AAPCFSYzR/fr3n9pLICSBNwAAAAAAAABALI+1FwAA0ClFKwAArCBgC+rv7z8JstXbdvp8Ppe6+Ovra6lL8Vnd4j3Hkw8AAAAAAAAAUJBJrQAAFShaAQCgoCLRWvpc1jBb8kn/tgUAAAAAAAAAyEfUCgBwNEUrAACs09rAQ5noIn9//5n+gtbOlwS8SQEAAAAAAAAAWvNYewEQ3vl8rr0EALqgaAUA+NHEL+mvr69HroQjdRitmU4JAAAUUfD/7PZ7NwAcoNT3bt+4AeAYvncDANxjUisAwKHWjWlVtAIAwK5jPGWixzCslYJ+fNt2WLwTmicWAAAAAAAAgE6IWgEAjqNoBQCAsiomQLHqo1irBQAAAAAAAAAAshK1AgAcRNEKAACrGeCZxo/DWmEOY1oBAAAAAAAAAIIaZBKw0fl8LnKd19fXItcBoE2K1nasO4tbTgcAjuH3bi7uBWxFurUf67j9XnqFWKv9lhyR7QI9Reves3SonYcWgK6U+qX75PduADiEvzAHgFh87wYAuMekVgCA3a2oKMdx1EwCAMC0iv2P9GgLd4+9ecYAAAAAAAAAAJolagUA2Ne6onWPlQAAQFDmHG4ULvBz4kzzhAAAAAAAAAAAxCVqBQDYkaIVAAAap46rIlxnSyCtPV2trQcAAAAAAAAAoC5RKwBAQxStAADQvoqJWj8Jbj87ZSnPBgAAAAAAAABAaKJWAIC9LB3TqmgFAID5ipSl6riKjK9kD54rgvLoAgAAAAAAANAPUSsAwC4WFa3jOCpaAQAghHDdUbgFX0mOueWpAAAAAAAAAACITtQKAFDe0qJ1v5UAAEBKcUNNPnOOlOWJAgAAAAAAAABon6gVAKAwRSsAAJS1U6gWbuRjlsxCrwAAIABJREFUuAXPMX24KbfMatPPQ8tFa8trAwAAAAAAAAA42GPtBQAApKJoBQCAPTSShDWyjK58vDy77ZwUzgAAAAAAAAAAWZjUCgBQjKIVAABoSogcNMQiaZyniNA8wAAAAAAAAAB0RdQKAFDG/KJ1HEdFKwAA1GXqY1Omgy6HxfQzIAgEAAAAAAAAAAhE1AoAUMCionXXlQAAADupG84JO+mWhx8AAAAAAAAAIBNRKwDAVopWAACAjQxrZZ0oY1qjrBMAAAAAAAAAYG+iVgCATRStAAAQzopCMmKQFm7NulZuTZ97uIccbnmMAQAAAAAAAOiNqBUAYD1FKwAAAAAAAAAAAAAAwEyiVgCAlWYWreM4KloBAIAt+hlSalgrnyUb0xpuwQAAAAAAAAAAexC1AgCsMb9o3XslAADAIivCSCnakXStXCQrWuFbnmQAAAAAAAAAOiRqBQBYTNEKAAA0LnQopWtF0QoAAAAAAAAAkJWoFQBgGUUrAADA3lSLPUtctIZePAAAAAAAAABAEYPcAgBgPkVrAjMP8UdOGQAgohVDPqtHaOsGk1Zf9naJy0amTRx9gnM3apirBM8zAAAAAAAAAKxgUisAwFyKVgAAgMNM517KwKycLAAAAAAAAABAbqJWAIBZYhWtw3dqLwoAADhImul/utbe9DCeN8cuAAAAAAAAAABWE7UCAPwsVtEKAAB8a0UDKT+rTtfajx6KVrjySAMAAAAAAADQLVErAMAP5hSt4zi2U7QaygoAAGmINk+61j50VbQm2w4AAAAAAAAAwCKiVgCAKTOL1gNWslGIRQIAAHxL15pbV0UrnDzVAAAAAAAAAPRN1AoAcFeaohUAAFjRPQaNjoIu+0e61qwUrQAAAAAAAAAAXRG1AgB8T9EKAADQFF1rPt0WrYm3xo+cPgAAAAAAAACdE7UCAHxD0QoAAFSn0ryla82k26IVAAAAAAAAAKBnolYAgK8UrQAAAM3SteagaO1hj9xy7gAAAAAAAAAgagUA+B/Ri9Y56wcAgN6sCB2DdkdBl73U09v7xE51re2bOKPpwwUAAAAAAAAAIDpRKwDAf0UvWu+JuGYAAIBputagpovWI1dSXW/7xYkDAAAAAAAAwEnUCgAw3ziO6lAAAOAYssw5dK3hKFoBAAAAAAAAADonagUA+I/pMa1yVgAA6Ie4LhBdayCK1lvdbrxDzhoAAAAAAAAALh5rLwAAoAk5itbpXQAAQJ/6KRu7LaYuG+/noJPp9rkFAAAAAAAAAOiTSa0AAEmKVgAAgJ5pIyNyaic3oQ9OGQAAAAAAAACuRK0AQO8UrQAAQGsMHV3n6e39czmmImvNl9NxQFduBQAAAAAAAADQj8faCwAAqEnRCgAAfKEui84Jtszp0CGPPQAAAAAAAAB8ZlIrANCvZEXrve2E2wgAALCCaApC8xbOyskCAAAAAAAAwBeiVgCgU8mKVgAA4FsfL8+1lwAwi/oRAAAAAAAAAOiBqBUA6JGiFQAAaJYQFyAHoTIAAAAAAAAA3BK1AgDdmShax3EMWrROZ7oAAABA+zSQmThNAAAAAAAAAPiWqBUA6Mt00XrkSgAAAEqRTkEa3s4AAAAAAAAAQG6iVgCgI1mLVmNaAQCgFDkZANv5bgIAAAAAAAAA94haAYBeZCpah/818ZXhtgYAAJ37eHmuvQSgMj1kdE4QAAAAAAAAACY81l4AAMARpstPk04BAACAdjy9vUvcAQAAAAAAAICUTGoFAPLTrAIAAIkZCQgpeWsH5eAAAAAAAAAAYJqoFQBITtEKAAAAwAEUrQAAAAAAAADwI1ErAJCZohUAAAjk4+W59hKAhigkY3FeAAAAAAAAADCHqBUASEvRCgAAAISmk4zCSQEAAAAAAADATKJWACAnRevpdBrHsfYSAACAudaNaZVRQXre5u1zRgAAAAAAAAAwn6gVAEhI0QoAAACkoZlsmdMBAAAAAAAAgEVErQBANopWAAAgnHVjWoF+KCcBAAAAAAAAgBxErQBAKopWAAAAICVda4McCgAAAAAAAAAsJWoFAPJQtAIAAF+EyI1Wj2kNsTugIO/6pjgOAAAAAAAAAFhB1AoAJKFoBQAAIlpdtAJ9ElI2wkEAAAAAAAAAwDqiVgCAnMZxrL0EAADgB4pWYAU5ZV1Pb++OAAAAAAAAAABWE7UCABkY0woAABShMgVCEFXW4s4DAAAAAAAAwEaiVgAgPEUrAAAwodkAaWNA2+y+gGP4EDieew4AAAAAAAAA24laAQAAAACOZiQssJ3G8kjuNgAAAAAAAAAUIWoFAAAAAJJbVCIdkJsqWoFSlJbHcJ8BAAAAAAAAoBRRKwAAAADAcRStQFlPb++Sy125vQAAAAAAAABQ0DCOY+01AABsMgxD7SU0x894E0o9MG4yAEA4i2rSPRKmgjmrwgq4pZkvzoctAAAAAAAAABRnUisAAAAA0IW6bZLYDNibArMs9xMAAAAAAAAA9vBYewEAAFsZmAkAABT38fJcKmeSswKHuXxw+djZTtEKAAAAAAAAADsxqRUAAAAA6MWiSKlIFSYtA44nyNzi6e3dDQQAAAAAAACA/QwmmwEA0JVhGIpcxw/SAABxLQ1N19VNc17l6e19RfWqtgJm0tUv5QMWAAAAAAAAAPYmagUAoC+iVgAATnt2rTOvfL2gqBXYla51Jh+tAAAAAAAAAHAMUSsAAH0RtQIAcLE69LoNn1YnsuvWoLwClpK2TvO5CgAAAAAAAACHEbUCANAXUSsAAJ8dHHp96aZErcCRpK23fKICAAAAAAAAwMEeai8AAAAAAKCaI3OmIq+lvwJW8wHy2dPbuxsCAAAAAAAAAMczqRUAgL6Y1AoAwLd2HWD4bTdlTCtQS+cjW32QAgAAAAAAAEBFj7UXAAAAAABQ37VxKth66aaANl0+nTpMW30sAwAAAAAAAEB1olYAAAAAgP/aXreKpoAQukpbfTIDAAAAAAAAQCOGcRxrrwEAAI4zDEOR6/hBGgCgT9/WX+taqRUhmSgL2E/WutUnJwAAAAAAAAA0RdQKAEBfRK0AALRgXTwmzQL2liZt9YEJAAAAAAAAAG16rL0AAAAAAAAAmnBtQYPWrVpWAAAAAAAAAGicqBW2Op/PRa7z+vpa5DoAAACQid+74UqpBRwpVt3qExIA1in1S/fJ790AcAh/YQ4AsfjeDQBwj6gVAAAAAOBQIQoxgIvPvWhrH19aVgAAAAAAAAAIR9QKAAAAAADAz6oHripWAAAAAAAAAIhO1AoAAAAA0DodF9Ca28+lPTJXn34AAAAAAAAAkIyoFQAAAADgOFVmGwIc4BKgns/nIld7fX0tch0AAAAAAAAAoCkPtRcAAAAAAAAAAAAAAAAAAEB+olYAAAAAgIOsG9N6GX4IAAAAAAAAAAAQnagVAAAAAAAAAAAAAAAAAIDdPdZeAAAAAABAYbcDUeMOO427cgAAAAAAAAAAgC9ErQAAAABAErct65d/VTcQnVgeAAAAAAAAAABADx5qLwAAAAAAoIA5yejHy3OsstSYVgAAAAAAAAAAIBNRKwAAAAAQXvup6ooVKloBAAAAAAAAAIBkRK0AAAAAQGxLe9H2C1gAAAAAAAAAAICURK0AAAAAQGAhClVjWgEAAAAAAAAAAE6iVgAAAAAgrtVF65EpbIjsFgAAAAAAAAAA4ACiVgAAAACAthjTCgAAAAAAAAAApCRqBQAAAABCCjEBdcUiFa0AAAAAAAAAAEBWolYAAAAAgFYoWgEAAAAAAAAAgMRErQAAAAAAuwgxSxYAAAAAAAAAAOAwolYAAAAAIJ6NvegBA1FXrNCYVgAAAAAAAAAAIDdRKwAAAABAYYpWAAAAAAAAAACAW6JWAAAAAIDKFK0AAAAAAAAAAEAPRK0AAAAAQF/2LkiXjmlVtAIAAAAAAAAAAJ0QtQIAAAAAFKNoBQAAAAAAAAAAuGcYx7H2GgAA4DjDMBS5jh+kAQDqWtqOXu0akSpaAQAAAAAAAAAAJpjUCgAAAAD0QtEKAAAAAAAAAABQkagVAAAAAOiCohUAAAAAAAAAAKCuYRzH2msAAIDjDMNQ5Dp+kAYAqG5+R7p3QapoBQAAAAAAAAAAmOOx9gIAAAAAAHZxTDuqaAUAAAAAAAAAAJhJ1AoAAAAApHJYNbo0Zz0pWgEAAAAAAAAAgL4N4zjWXgMAABxnGIYi1/GDNABAC+5lpQe0owa0AgAAAAAAAAAALPVQewEAAAAAAIWtmKG66/UVrQAAAAAAAAAAACeTWgEA6I1JrQAAyUz0pXukpCtyWUUrAAAAAAAAAADAhagVAIC+iFoBAPKZDk1LNaVyVgAAAAAAAAAAgI0eai8AAAAAAGBHK2LU2ysoWgEAAAAAAAAAALYzqRUAgL6Y1AoAkNLM6HRpaLouiJWzAgAAAAAAAAAAfEvUCgBAX0StAACJLWpQ76WnWya7ylkBAAAAAAAAAAAmiFqB/2PvDo4iObYFDMMEJmACsoAFMRZITsgDLeQB4MEs5IGckCyYYIEFwgR84C36RT8e0NXV1ZWV55z8vtDi6sbQZGVm00Mo/jgAMBZRKwBAbeckqeeQswIAAAAAAAAAABwlagUAYCyiVgCA8jbuWuWsAAAAAAAAAAAAM4laAQAYi6gVAGAQrdNWLSsAAAAAAAAAAMCpRK0AAIxF1AoAMJTV01YtKwAAAAAAAAAAwGKiVgAAxiJqBQAY0zl1q5AVAAAAAAAAAABgFaJWAADGImoFAGDvc+mqXwUAAAAAAAAAAGhH1AoAwFhErQAAAAAAAAAAAAAA0MW33gsAAAAAAAAAAAAAAAAAAKA+USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACaE7UCAAAAAAAAAAAAAAAAANCcqBUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmhO1AgAAAAAAAAAAAAAAAADQnKgVAAAAAAAAAAAAAAAAAIDmRK0AAAAAAAAAAAAAAAAAADQnagUAAAAAAAAAAAAAAAAAoDlRKwAAAAAAAAAAAAAAAAAAzYlaAQAAAAAAAAAAAAAAAABoTtQKAAAAAAAAAAAAAAAAAEBzolYAAAAAAAAAAAAAAAAAAJoTtQIAAAAAAAAAAAAAAAAA0JyoFQAAAAAAAAAAAAAAAACA5kStAAAAAAAAAAAAAAAAAAA0J2oFAAAAAAAAAAAAAAAAAKA5USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACaE7UCAAAAAAAAAAAAAAAAANCcqBUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmrvqvQBI7+fPn6u8zvfv31d5HQAAAKjE790AkIvPbgBIZK0P7guf3QCwCb90A0AuPrsBAA4xqRUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmhO1AgAAAAAAAAAAAAAAAADQnKgVAAAAAAAAAAAAAAAAAIDmRK0AAAAAAAAAAAAAAAAAADQnagUAAAAAAAAAAAAAAAAAoDlRKwAAAAAAAAAAAAAAAAAAzYlaAQAAAAAAAAAAAAAAAABoTtQKAAAAAAAAAAAAAAAAAEBzolYAAAAAAAAAAAAAAAAAAJoTtQIAAAAAAAAAAAAAAAAA0JyoFQAAAAAAAAAAAAAAAACA5kStAAAAAAAAAAAAAAAAAAA0J2oFAAAAAAAAAAAAAAAAAKA5USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACau3x7e+u9BgAA2M7l5eUqr+Mv0gAAAAAAAAAAAAAAcBKTWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACaE7UCAAAAAAAAAAAAAAAAANCcqBUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHNXvRcAAAAAAAAAR7ze3uz+x/XzS9+V8JnTAQAAyO7u/mH3P54eH3qug08cDQAAAPVcvr299V4DAABs5/LycpXX8RdpAAAA2MY+mNxTTobigAAAAFLbN5N74sk4nA4AAAAlfeu9AAAAAAAAAPja52CS+JwaAABAFp+bSYJzZAAAABRgUisAAGMxqRUAAABSmAgjDQKN5tBhOSkAAICwJtpIs0BDOXRSjgkAAIC8TGoFAAAAAAAgFkVrLocOxchWAACAmBStiRw6ESNbAQAAyMukVgAAxmJSKwAAAARn7GdSDg4AACAFkz8zcmoAAABUImoFAGAsolYAAAAIy4DW7JwgAABAZAa0pub4AAAAKONb7wUAAAAAAACAHrKCiZOaOF8AAAA2IInMbuKYJg4XAAAAAhK1AgAAAAAA0JmitQxdKwAAQECK1hp0rQAAANQgagUAAAAAAKAnRWsxulYAAIBQFK2V6FoBAAAoQNQKAAAAAABAN4rWknStAAAAQSha69G1AgAAkJ2oFQAAAAAAgD4UrYXpWgEAALpTtFalawUAACC1y7e3t95rAACA7VxeXq7yOv4iDQAAAGdStI7AKQMAAPQSuWj9vLbuS8oo8hEDAADABJNaAQAAAAAA2JrWcRDmtQIAAHSRLnc0X3QB81oBAABIyqRWAADGYlIrAAAAdDdU0bog3RxqE+o9LAAAQHfxi9YvVxhkbenEP24AAAD4QNQKAMBYRK0AAADQV/m+cfUBpOW3pcYDAgAABBE/cYy/wnRsKQAAALlc9V4AAAAAAAAAo1g9+Iyj3aPtX7lq/Pl6e1P10QAAADY2ETem8H79asxV3N0/2EkAAACiMakVAICxmNQKAAAAvUxnn0mzxi6Zbsm9SvpQAAAAcUwXrXHKxvPL2zjPEkeW0wcAAIALk1oBAAAAAADoLmPQ2HHq7O5bp9u06+eXwqN6AQAAIivWNGYcSNv6CJ4eHzJuCwAAAGP61nsBAAAAAAAA1DdRM6aLM19vbyLEmUGWcZKJs073LAAAAKFMBI3FilYOmThovSsAAAChmNQKAAAAAABAW2V6xVMf5NRed8FGJZ3a+qXX25saDwIAALAxySJH3d0/yJsBAAAI4vLt7a33GgAAYDuXl5ervI6/SAMAAMBM06FmoohxZnG6yhMty4CzbGaZKwEAABDBdNEarWMctr/d7CBy3QcAAADG9K33AgAAAAAAACirTL54tDK9fn7Z/bPKt1v2Ulkm4k4/WpanAAAAiEDByAfThz5sVAwAAEAoolYAAAAAAAA46PX25mia26jOLdy1AgAAwDjUxQAAAPCeqBUAAAAAAIAmCoxp7ZWzvv8Wp35Jiq7VsFYAAIDzGdPKlwxrBQAAIDhRKwAAAAAAAOsrULRO2+wRFqSzKaJQXSsAAMA5FK1ZdDkLXSsAAACRiVoBAAAAAADgC4e6yg0GtJ5PFAoAAADdqYsBAADgM1ErAAAAAAAAKyswpnWiaN14JYu/b/yu1bBWAACAZZKOaR1tQGjfgzCsFQAAgLBErQAAAAAAAKypQIsYrWhd/N2zn0X29QMAALQgR0whbFq85yIBAADQi6gVAAAAAACA7aQY03rI6+2NzHJdqe8DAABAQPFbSjbjMgAAABCTqBUAAAAAAIDVTDefKQrGo9lqx7S15LDW6YeKv34AAIAtTU/XFDEGEecgpldiWCsAAABdiFoBAAAAAADgZGJLAAAA4LM4RSsAAADEdPn29tZ7DQAAsJ3Ly8tVXsdfpAEAAOCzAmNaL06sVbd/qAUxbYqdr3F5Clul4naOAABwpuxjWkeYCxrzFLLfnBGs8u5wlAAAQBaiVgAAxiJqBQAAgEaONm9ZerZT4z1d6yrK3J8CNp5C7GQBAGCmo81b8J5N0dpR9stTzJbvBScLAADEdNV7AQAAAAAAANSXpVvbOOdj7/r5xeZ31HHz33/rLD8oAAAgoOzpWqL1HyoSIz/C0+PDCFFxWB03/8O3jnxLAQCAoYhaAQAAAAAAONfIOeLr7Y0SbwP2eXUB37YCVwAAOKRwkZirsstYtM5xd/+Q/RECCvi2fb8kJw4AAHQkagUAAAAAAAAYRcCW9Uv7dapbAQCAIAI2igSU5Z7s16luBQAAtnf59vbWew0AALCdy8vLVV7HX6QBAABg72gjl6hJW9b7bfyACxaZ5Qgq3aVosrSsE5w+AADDOtrIpWjSvnyKFCvfmTiFLE9R4yKFlaVlneACAAAAmzGpFQAAAAAAAKCmAi3rntmtAABALwWKVhop0LLu7Z7FlQYAADZgUisAAGMxqRUAAADWVWy0pkmt3RW7UR1Vylm/5CYAADCIGtM1Dz1FisVf5F//Xo3rFESlnPVLLgMAANCOSa0AAAAAAAAAdZTPWXd2jyltBQCAvLIkc2WKVlZRvmXdM7gVAABo51vvBQAAAAAAAJBVvXZuQSCnqdtYvVu3otfbm9H2Z8BHBgBgKOPkc2GNVrS6chPu7h8G3J8xnxoAAGhN1AoAAAAAAEArgk9O5c4sM3jbOfjjAwAwsqppZRD1Wj4XZhlhpx0AAADWJWoFAAAAAACA/3NSVKnApDs9556tAACAROLXlRMJX/zFsyIx5560FQAAWIuoFQAAAAAAgCWOxmN5g8+ZK+/ygCM0e0c3doRNmEPD+SXbAgBAGUfjMWllO4WL1qPrVy3uaTi/ZE8AAIDzXfVeAAAAAAAAAIRz/fwy3cUlSnYTLZX5dJvTXm9v3HwAAGCZwkUrM+k2p+32x9sBAABYTNQK5/r58+cqr/P9+/dVXgcAAAAq8Xs3AIQ1J6hb/FEe5LN7V8R9eFKZXBAjJ4ty1pl2GzXsPYE51vql+yLMZzcAVDKnqVv2ab79B3eZPnCchO/u/mGch/2szI1tTdoKR/mP3QAAh4haAQAAAAAAWN9/f/3dewnrUMR1cXRS7pjsyQLSVgAAqvrx26+9l1DToaCxUrn39Pig2/ySbVlg8AQaAABY5lvvBQAAAAAAAACzLGgatXxlKFrPYfcAACCUsAncCEUrhyhaF7u7l0kDAACnEbUCAAAAAABwGnkYEQx1D4d62EbsIQAAicjDurDt7w21G5rMVdhDAABgPlErAAAAAAAA1GRMawGvtzdqzLXYTAAA4JCJHs+Y1tqkmCuymQAAwExXvRcAAAAAAABANf/99XfvJRQ0Wox3/fwy2iN/ZgdaeL290XsDAJDdj99+7b2EE8SPQgcsWp8ezSa9uBBhNrDb0qpvHAAAYC0mtQIAAAAAAHAClV0WI2R7tW9j7afry94CABCZyi6OwcO82lfx7l7W25C9BQAApolaAQAAAAAAIDoN3lBeb2+ceGs2GQAA2DlU3w1etNYmudyATQYAACaIWgEAAAAAAKCaEca0VqW03JLdBgCAwSlaByS23IytBgAADhG1AgAAAAAAMNecAOy/v/7eYCVDObW7K1O0znmQYlFiscdJwZ4DABDKnAbsx2+/tl/IEAYv7uaEu/W2qN4TBWfDAQCAL4laAQAAAAAAIC7F3TicdS92HgAABjTR2hnTWpXAsou7+wc7DwAAfCBqBQAAAAAAgKAWtHZlxrSORlfZl/0HAAB2FK1V6Sr7sv8AAMB7olYAAAAAAAAoQtGalKIyAqcAAADjONTXKVqrUlRG4BQAAIA9USsAAAAAAACzzCm+/vvr7w1WMohTE7uSReuch8reImZffyXOAgCAvuYUXz9++7X9QopTtO7NeeQCIWKBRyjDWQAAADuiVgAAAAAAAIjl9fZG0ToIFWU0TgQAAGrT1I3GiUfjRAAAgAtRKwAAAAAAAISyIGdVtCaln4zJuQAAwIAGHNM6Av1kTM4FAAAQtQIAAAAAAEAUBrSOQzkZmdMBAICSDqV0itaSlJOROR0AABicqBUAAAAAAIDjJF5Nvd7e7P456asUrXvp7me6BQ/IGQEAsDGJV2t2eLGMW5dxzQAAAOMQtQIAAAAAAEA3C1rWi4uL6+cXRWteasksnBQAAIzAmNZ6FK0pOCYAABiZqBUAAAAAAIB1/PfX372XkMB+KKucdabRnpdQdK0AAITy47dfey8hq0P5nKK13g5IJRNxWAAAMKyr3gsAAAAAAACAIpr2b9rOGkSSAAAAGxPOjcNZp3N3/1CvrAYAAI4yqRUAAAAAAABW0C5WHHA6a1WK1oycGgAAVCWlgwikyAAAMCBRKwAAAAAAAJyradHa6JXZmDYyL2cHAAB56eXG4awBAACyELUCAAAAAABwhKCro9fbm90/vRcSXfAtCr48jnKCAAA0JcZrZGJjjWk9SfwrGn+FTHB8AAAwGlErAAAAAAAAJKBuBQAAAPhMElmAQwQAgKFc9V4ApPf9+/feSwAAAICy/N4NALmM/Nl9/fyyWW4b2wFPAAAgAElEQVS6+0bXzy/bfDvOJ0Wu4fX2xvuOYkb+4AaApHx8n8SYVsjl7v7Be5NifHADABwiagUAAAAAAIAVnFO7LYgepa1ZKFor0bUCAABEY8InAABAOt96LwAAAAAAAIAKhF7nuH5+2f9z0he+3t6M0Ey6XQAAAAYYnkToOF/qq+Wgi3GgAAAwCFErAAAAAAAABCJtrcS51ONMAQAgu9QNJ5SnawUAgBGIWgEAAAAAACCcZWlro8WwjBOpyskCAEBworhBOGgAAICkRK0AAAAAAAAQlJGtAAAAcBKh4yAcdGEOFwAAyhO1AgAAAAAAQFyndq0XxkjG4BRqc74AAJDU0+ND7yUAx+laAQCgNlErAAAAAAAAhHb9/LJgZGujxQA73mUAABCQEG4QDhoAACA1USsAAAAAAABThFtB6FqPivPIcVYCAADEJ88jBReVjblyAABQmKgVAAAAAAAAapJWdmHbx+GsAQAglKMJ3NPjkT9AClpHAACA7EStAAAAAAAAkMOpw1ovRHcAAABAIYrWoThuAACoStQKAAAAAAAAaehag7Pbo3HiAAAQhPgNAAAAshC1AgAAAAAAAAAAAAChSZcH5NABAKAkUSsAAAAAAABkYlhrWPZ5TM4dAABSeHp86L0EAAAA4OJC1AoAAAAAAAAj0N0BAABQlVmOUJg3OAAA1CNqBQAAAAAAgGQWDGulNdnwyJw+AABAa8pGAACAMkStAAAAAAAAMATdHQAAAPVoHaE8b3MAAChG1AoAAAAAAAAAZxGNAwBAZE+PD72XwFk0jQAAAJWIWgEAAAAAACCf6+eXBV+lu2vExgIAAAAAAADMIWoFAAAAAAAAAAAAIB8DPEfglLlwDQAAoBZRKwAAAAAAAAzETNHV2VJ23AQAAAAAAAA4StQKAAAAAAAAAAAAQDImN8JQvOUBAKAMUSsAAAAAAACkdP380nsJAAAAAA3pGAEAAOoRtQIAAAAAAAAVdKl8X29vtv+mhOU+AABAQE+PD72XUIFtBAAAYC2iVgAAAAAAAKYYB1qP7g4AACAOreAyBnjCgLzxAQCghqveCwAAAAAAAIBAPgefsl4AAACA7SkYAQAASjKpFQAAAAAAAC4uLi5eb2++HGF66P8HF4PP3AoAAAAAAACYIGoFAAAAAACA4x2atBUAAAAA+jK/FwAAChC1AgAAAAAAMLr5taquFQAAALpTtY3AKQMAAFQlagUAAAAAAGBoOtX4Yp5RzFURgbsBAAAkoh0FAABgY6JWAAAAAAAAVpA04lqw7KRPCgAAQGrKQwAAAKAGUSsAAAAAAAAAAAAAAAmI/AEAIDtRKwAAAAAAAJzGsFYAAADo5aSe7enxhD9MHKpFAACAwkStAAAAAAAAHHH9/NJ7Cayp5IFu/FDCZqa5IQAAnER4SXCuKAAAACsStQIAAAAAAAAAAAAAAAAA0JyoFQAAAAAAgEFlH6WYff0AAAAAsMDd/UPvJQAAAMuJWgEAAAAAABjU9fNL7yUAAAAA8P/oFQEAAGq76r0AAAAAAACA1XwYXClZpJHUVyvd4g2kBQCAOD6UZk+PD1//OWhG7rgu+wkAAMD2RK0AAAAAAEBi07WbxnVjr7c3Nhlgx49EAKCG6eBN47qxu/sHmwwAAABk9633AgAAAAAAAJZ4vb05dX7jgi+JpuMjSLOiyX6Z17Xx/bT5AACM4O7+4dQRjgu+JJqOj6BWJSyXEwAAgHWZ1AoAAAAAACRzZk62+/JcieaHR97/a66nKCP1tqdePAAAsI0zq87dl+eq4D488v5fcz0FAAAAQAqiVgAAAAAAII0VpyNmSVunHznLUwAAAJDCikNKs6St04+c5SkABnR3/+DnMwAAJPWt9wIAAAAAAABmWbFobfqaK5q5vOBPEdypSXCQhHjZoQdZPAAAENOKRWvT11zRzOUFfwoAAACAXExqBQAAAAAAEpiT8H0I9uYXoTFLv4Cp6vXzy9FVhd3P82V/rqTrX/DeBwAAFpjTbX4YiDe/CI05SS9gqvr0+HB0VWH3k4wWvPE3EPC9CQAAwLpErQAAAAAAQHTTVduhnm1Ogbl//WhRXMCitbDpqxLtbly4HgAAwNqmE7JDSducAnP/+tE6TNVcUg4OAAAACvjWewEAAAAAAABTpmvD6eBwfo6YvRLMvv6wAhaty5R5EAAAYHUTleDT45EYdX6qmr1FzL5+AAAAgDhErQAAAAAAQFy55meuRaG6vUPXKeBZLFhS4TcLBBfwZwgAwAfTRet269iWQhUAAACgI1ErAAAAAAAQ1KEW6OiA1g9/+Mxvx3sD5pGhLsZoReuc593+AUNdCQAAOMehtvPogNYPf/jMb8d7hVtiopnzlnQhAQAAaEHUCgAAAAAARDRRtG68khRCbUvS5G9iD4M8UZBlAAAANUwUrZuuI4lQ2yIPBgAAAFITtQIAAAAAAOH0KlojRIMR1jCs6a4149GEqp0BAIA4ehWtEWrMCGsAAAAAGJmoFQAAAAAAiMWM1uBqH8T00/XqWhcktdfPL7VPameEZwQAgNWZ0RqcgyAIVxEAAIBGRK0AAAAAAADwf452rRunrQu+XY3UM+NoXAAAAEjByGIAAAA6ErUCAAAAAACBdB/TmrGjC1gwZtzG945u6S5t3eAxhy1aAQCARrqPac2Y0gWcV5lxGwEAAAB2rnovAAAAAAAA4H91L1q7y96CVrK7dUdPZP8HVr+lyy7DOG8WAABgge5Fa3daUAAAAIDuTGoFAAAAAABCE+kFNM6hzH/StWa3Ln6d6+eXcc5lZ7TnBQCARsYpWhNxKHTnEgIAANCOSa0AAAAAAEAIhpQW83p7U6M5nDmyde/zn5yzD2fe/xpb/Z4fCAAAsDpDSou5u3+QHbKMnwYAAAD0JWqFc/38+XOV1/n+/fsqrwMAAACV+L0bgPNTvfJpXK+a8fr55ejeLv4oD/jZfWra+l7TS1gvZ51p2AcHWNFav3RfhPzsBmCm86vI8nVcr3D06fHh6N4u+zRP/cE9Z1s+/PlWSynNvgGswn/sBgA4RNQKAAAAAAD0Vz49ncMmxHdO2tpiJQAAADOVT0/nsAkAAAAAEXzrvQAAAAAAAICvyfay++WP33svoYnr55eOl7Pvd99GhGwYAABGYBhjdn/+82/vJXQw/9664V9SdwMAANCdSa0AAAAAAEBnArakrp9fRj6792XpBvtQPmQ9id0AAICTaNiSenp8cHZsTwwMAABAa6JWAAAAAAAgolWitfLJpbQviEaB65jnW/5tCwAAQazSrZVPLtV9Mc3JfZ3dl8q/ZwEAAEhB1AoAAAAAAPQULWAbMyNc7Oiw1l/++P2/v/7ebD0RfHmF5txzd2+m7hs1+IxiAADSidawSQ1PcrTe/POff3/89utWywlkd5G+3Bx37Bx2DwAAgA2IWgEAAAAAgHC6R2vb08jVNuCVBi689wGAwAbs1qLFvaxiwJsMAAAABXzrvQAAAAAAAGBcTUtOmeg2jiZbv/zx+zYroYCjb1uJIAAAnKRpySkT3cbRbvPPf/7dZCGkd/Q9KxIGAABgG6JWAAAAAAAglo7RWq5eLtdqAQAACKJjt5Yrmcu1WgAAAIAsRK0AAAAAAEAfJqmWIa9lFca0AgDAukxSLUNey/kSjWmNsxIAAAAaEbUCAAAAAAAF5Spmc612gV/++L33EgAAAFhTrmI212oX+POff3svAQAAAGAuUSsAAAAAABBIx0mMhkCew+7RmjsGAACr6DgC0fTFc9g9mnLByMi9BQCAvEStAAAAAABAB+Vnk7aWLvAzrJVpfiYAAMC6ys8mbS1dK2VYKxP8QAAAACAUUSsAAAAAAFCNOq6LdJ0tibhdAAAQikCuix+//dp7CdSULuEGAAAgO1ErAAAAAABAz2RunATXsFYOSfcuENkyh3sCAPBex2punATXsFa+NM5bAAAAgCxErQAAAAAAQBSr9D/p6rhK/vvr795LoCBlIAAArGWVslQg15FhrazOmFYAAAC2J2oFAAAAAABGly6ZS7fgPcNa+UyIDgAA5aWr5tIteM+wVj5IWqHnfQ8CAAAwh6gVAAAAAAAIIW+oyXuGtbIuPxkAAGAtIrEaDGtlRX4skJfbCwAAqYlaAQAAAACADhqFaulGPqZb8BzTXathrbw3/RZQtAIAwGKNap90Ux/TLXiO6a7VsFb2pu+/JhAAAIBernovAAAAAAAAGFSQXC3IMobyyx+/G+jKRfKo+/r5JfX6ac2HCwAQQZBiLcgyhvLnP/8a6ErJohsAAIAaTGoFAAAAAADIJEUopVnlfCmuOgAAUE+KClezyplS3HMAAACqErUCAAAAAABFmJoYynTX+ssfv2+2EmKafsMqWgEAICCDH0OZ7lr//OffzVZCQNPv1hRFa4pFAgAAsIyoFQAAAAAAGFffcE6Fy7BcfgAAGETfLE2Fy5jcfMrTPAMAQHaiVgAAAAAAAJowrJVlsoxpzbJOtuduAACwDcNaWUANCAAAQHeiVgAAAAAAoIIFgx8zRkfp1qxr5bPpd2u6Sw4AAINYMPsxYzuXbs26Vj6YfqvmuuG5VgsAAMB8V70XAOl9//699xIAAACgLL93A0AuX352v57+JQDABnwKA0AuBz+7J8tVn/hAMWpnEvEpDABwiEmtAAAAAAAAHSwYLZvU9ODNcfaBnWJjWtMtGAAAxrFgtGxS033XOPvARa0xrQAAABQmagUAAAAAANJbEEZK0baka2WnWNEKX3KTAYCSFoSR8rkt6Vq5ULQCAACQh6gVAAAAAAAgh9ShlK4VRSsAABBc6upP1zq4qkVr3pXTiCsBAAA1iFoBAAAAAADYgmpxZIWL1tSLBwAAKtF6Datq0QoAAEBVolYAAAAAACC3BUM+u0doBpN+Zk+G1f39CCtynwGAkhYM+ewe0RlM+pk9GVP3NyMAAAB8JmoFAAAAAABgI9O5l661KicLAACwjemCUddaUvlj1eWy5zIAAEAZolYAAAAAAIAEykz/07WOZvpMa1zsGk/B+dwEAIDUyrRSutahTB9omVsNAABAMaJWAAAAAAAgsQUNpOioO13rOEYoWgEAoLYFDaSOrjtd6yDGKVorPQsAAAAXolYAAAAAAICNiTYvdK1jULQCAABdiDYvdK0DGKdohR23GgAAKhG1AgAAAAAA0IGutbbRitZ6T8Sp3AEAAKLRtRamaAUAACA1USsAAAAAAJDVgu4xaXSUdNlH6VqrGq1oBQCAqhZ0j0lruqTLPkrXWtKYRWvV52ImFwAAAIoRtQIAAAAAANCNrrWeYYvWwo/GUU4fAICwdK3FjFm0AgAAUIyoFQAAAAAAYDsqzc90rZUMW7QCAABBqDQ/07WWMXjRWv4BOcTRAwBAPaJWAAAAAAAAOtO11qBoHeEZ+cy5AwAQn661gMGLVgAAACq5fHt7670GAADYzuXl5Sqv4y/SAAAA3S0IHSN0R0mXvZmJ/RlqHzJydjsa7AENdcMBgKEsCB0jZHVJl72Zif0Zah/ScXB7GuzRjHbDAQBgECa1AgAAAAAAEMVEG6YVjEzRujfa8+LEAQDIZSIP0wqGpWgFAACgGFErAAAAAADARmSZc+ha01G0AgAAQcgy59C15qJo/WDMpx6W4wYAgKpErQAAAAAAwBDEdYnoWhNRtH427IMPyFkDALwnPUpE15qFohUAAICSrnovAAAAAAAA4GTjlI3DFlO7Bx/noIsZ9t4CAEAZ45SNw5aBuwcf56ArGfbS7j09Pri6I3DVAQCgMJNaAQAAAAAACEobmZFTu7AJY3DKAAAUoBlLx5Ht2AcAAIDURK0AAAAAAABbMHR0mevnl/flmIosmg+n44D2bAUAAGzM5MZlnh4f3veBWsFQPhyN02EcbjsAANR21XsBAAAAAAAAzanLsnOCkTkdBuTaAwB8oD7KzgmG5WgOeXp8kLJX5doDAEB5JrUCAAAAAAAEJZqC1LyFq3KyAABl6KYAAAAAtidqBQAAAAAAknm9vem9BOB/2Lub47iNNADDAoshMARmwINL0VnOQRkoGJUPjEAMgTnMHrimZQ4GBBr99e/z1B5211VwoxuDGR7e+gAAgGEZfgh0QZc+JMcKAAAzELUCAAAAAACEE+LCnIz0HI8zBQBokxAX5iSABAAA6JGoFQAAAAAAACCKBnIkThMAAADiqJQBAGASolYAAAAAAIAWSadgGD7OAADQIOkUjMFneRiOEgAA5iFqBQAAAAAABicnA+A83yYAALfIkIC6vIUG4BABAGAqolYAAAAAAIBYr0+PtZcAVKaH7J0TBABo2R9/fqu9BKAySSQAAEBHRK0AAAAAAAAA4VSR/XJ2AAAAEEeTDAAAsxG1AgAAAAAANEdABUPy0QYAgEYIqGA8PtedcnAAADAhUSsAAAAAAAAArJMiAwAA9EIe2R1HBgAAcxK1AgAAAAAABHp9eqy9BKAhCsm+OC8AgPb98ee32ksAGiKS7IjDAgCAaYlaAQAAAAAAAMrRSfbCSQEAAPRIKgkAANA4USsAAAAAAECUtDGtMioYno95+5wRAEAX0sa0Ct5geD7m7XNGAAAwM1ErAAAAAAAAQGmayZY5HQAAAIijaAUAgMmJWgEAAAAAAEKkjWkF5qGcbJNzAQDoRdqYVmASsslmORoAAEDUCgAAAAAAAFCHfrI1TgQAAGAY4skGORQAAOCLqBUAAAAAAOhOF8VR8pjWLu4OyMinvh3OAgDgTRfFUfKY1i7uDsjFR74pjgMAAHgjagUAAAAAAMgsuWgF5qSlbIFTAADoSHLRCkxISNkIBwEAALwTtQIAAAAAAOSkaAUSKCrrsv8AAB1RtAJHySmrcwQAAMDvRK0AAAAAAMDgVKZAF3SVtdh5AICTVKZA+/7+65uushY7DwAAfCBqBQAAAAAA+tNsgHQyoG32voAyvATKs+cAAKuaDZBOBrTN3hdQhpdAefYcAAC4JmoFAAAAAADIw0hY4DyNZUl2GwCgL0bCAudpLIsxHRcAALhF1AoAAAAAAHTpUIlUIDdVtAK5KC3LsM8AANsOlUgFclNFK5CL0rIAmwwAAGwQtQIAAAAAAJylaAXyenh+kVzGsb0AAN1RtAJ5SS5D2V4AAGDbcrlcaq8BAADKWZYly3X8kAYAAGjEoZo0ImHKmLMqrIBrmvnsvGwBAA45VJNGVEwZc1aRFXBNM5+dly0AAPApk1oBAAAAAICO1W2TxGZANAVmXvYTAOCoum2S2AyIpsDM6O+/vtlPAABgD1ErAAAAAAAwi4wN6uvTo6IVKOPh+UWKeZ5tBAAoIGOD+sef3xStQBk6zCxsIwAAsJ+oFQAAAAAA6NuhSClLiSpnBcoTZJ5h9wAAzjjUKWUpUeWsQGFGjJ5k9wAAgEOWy+VSew0AAFDOsixZruOHNAAAQGuOhqZpgdOef8vD80tC9Sq4AnbS1R/i7QoAkMvR0DQtcNrzb/n7r5QhroIrYA9R/VHergAAQAJRKwAAcxG1AgAADCyua9155fcLilqBULrWnbxaAQDyiutad175/YKiViCUtHUP71UAACCZqBUAgLmIWgEAAMaWHHpdh0/JiWzaGpRXwFHS1g1eqgAAQZJDr+v2KTmRTVuD+Ao4RNe6zUsVAAA4Q9QKAMBcRK0AAAAzKBx6fUinRK1ASdLWD7xOAQAKKNx6fUinRK1AMdLWa16nAADAeaJWAADmImoFAACYRLHK6/yI19WLAOyna33ndQoAUEyx0Ov8iNfViwDsJ219410KAADkImoFAGAuolYAAICphIZeq+mUMa1ALZOnrV6kAABVhIZeq/WUMa1ALTOnrd6iAABAXve1FwDd+/nzZ5brfP36Nct1AAAAYCT+7gbgpPfGKWPrpZva4LsbKnp7O02YtnotQ7JcX9xffHcDTOw9c8rYekmnbvFHN9T19naaLW31ToYzfHcDANwiagUAAAAAAMZ3vm4VTQFdiIj5m+XNDADQjvN1q24K6MI8aavXMgAAEEfUCgAAAAAATGS1gFpNv4q1UqIsIMLAg1u9NgEAWrYaQa3WX8VyKV0WkF3EnOp2eG0CAADRRK0AAAAAAMDscvVRQ8ZjQNcGS1vlrAAAncrVRw0ZjwFdG2lwq5YVAAAoRtQKAAAAAAAAMLL3FrTTulXLCgAAQMu6HtyqZQUAAMoTtQIAAAAAAFSj1AJK6qtu9YYEAOA8sRZQUkd1q9cjAABQkagVAAAAAAAggy4KMYA3v/eiTb2+hKwAANzSfiEG8O73ZLSp15eWFQAAaIGoFQAAAAAAAGBe1QNXISsAAAADqxu4qlgBAIAGiVoBAAAAAADq0HEBrbl+L2XPXL36AAAoRsoFtOb6vZQ3c/XeAwAAuiBqBQAAAAAAOKvKbEOAAjSoAAC0oPxsQ4AyZKgAAMCE7movAAAAAAAAAAAAAAAAAACA8YlaAQAAAAAATkkb02r4IQAAAOyRNqbV8EMAAACANolaAQAAAAAAAAAAAAAAAAAId197AQAAAAAAALtcD0Ttd9hpvysHAABgVNcDUfsddtrvygEAAACGJ2oFAAAAAACadt2yfvhHdQPRjeUBAABA+65b1g//qG4gurE8AAAAAHp0V3sBAAAAAAAAN+1JRl+fHvsqS41pBQAAoBF7ktE//vzWV1lqTCsAAABAy0StAAAAAABAo9pPVRNWqGgFAACgEe2nqgkrVLQCAAAANE7UCgAAAAAAtOhoL9p+AQsAAADtONqLtl/AAgAAANAFUSsAAAAAANCcLgpVY1oBAADoVBeFqjGtAAAAAEMStQIAAAAAAG1JLlpLprBdZLcAAABwLbloLZnCdpHdAgAAAJBA1AoAAAAAAFCCMa0AAAAQx5hWAAAAgC6IWgEAAAAAgIZ0MQE1YZGKVgAAAFrQxQTUhEUqWgEAAAB6IWoFAAAAAACIpWgFAACAOIpWAAAAgI6IWgEAAAAAAA7oYpYsAAAAdKqLWbIAAAAAJFsul0vtNQAAQDnLsmS5jh/SAAAAEU72ogUGoias0JhWAAAAGnGyFy0wEDVhhca0AgAAAPTFpFYAAAAAAIBdFK0AAAAQR9EKAAAAMANRKwAAAAAAQAhFKwAAAMRRtAIAAAD0SNQKAAAAAACMILogPTqmVdEKAADASKIL0qNjWhWtAAAAAJ0StQIAAAAAAHxC0QoAAABxFK0AAAAA8xC1AgAAAAAA3QuNSBWtAAAATC40IlW0AgAAAExF1AoAAAAAAPRN0QoAAABxFK0AAAAAZCRqBQAAAAAAOqZoBQAAgDiKVgAAAADyWi6XS+01AABAOcuyZLmOH9IAAABB9nek0QWpohUAAIDx7O9IowtSRSsAAADAnO5rLwAAAAAAAOCAMu2oohUAAIA5lWlHFa0AAAAA0xK1AgAAAAAAHShWjR7NWb8oWgEAAOhfsWr0aM76RdEKAAAAMJblcrnUXgMAAJSzLEuW6/ghDQAAEOdWVlqgHTWgFQAAgOHdykoLtKMGtAIAAABwV3sBAAAAAAAAuyTMUA29vqIVAACAkSTMUA29vqIVAAAAYEgmtQIAMBeTWgEAALqw0ZdGpKQJuayiFQAAgH5t9KURKWlCLqtoBQAAABiVqBUAgLmIWgEAAHqxHZrmakrlrAAAAMxpOzTN1ZTKWQEAAAD44K72AgAAAAAAAA5LiFGvr6BoBQAAgFUJMer1FRStAAAAAFwzqRUAgLmY1AoAANCRndHp0dA0LYiVswIAADCYndHp0dA0LYiVswIAAABMQtQKAMBcRK0AAADdOdSg3kpPz0x2lbMCAAAwsEMN6q309MxkVzkrAAAAwFRErQAAzEXUCgAA0KMzSeoZclYAAABmcCZJPUPOCgAAADAhUSsAAHMRtQIAAHSqcNcqZwUAAGAqhbtWOSsAAADAtEStAADMRdQKAADQtei0VcsKAADAzKLTVi0rAAAAAKJWAADmImoFAAAYQPa0VcsKAAAA77KnrVpWAAAAAN6JWgEAmIuoFQAAYCRn6lYhKwAAAGw7U7cKWQEAAABYJWoFAGAuolYAAIDhXZeu+lUAAADI5bp01a8CAAAAsJ+oFQCAuYhaAQAAAAAAAAAAAACgirvaCwAAAAAAAAAAAAAAAAAAYHyiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACDcfe0FQPd+/vyZ5Tpfv37Nch0AAAAYib+7AaAvvrsBoCO5vri/+O4GgCL80Q0AffHdDQBwi0mtAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAMdyVxgAACAASURBVAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQLjlcrnUXgMAAJSzLEuW6/ghDQAAAAAAAAAAAAAAh5jUCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADh7msvAAAAAAAAAACAobw+Pb79l4fnl7or4QNHAwAAAABAXcvlcqm9BgAAKGdZlizX8UMaAAAAAACuvTeT78ST7XA6AAAAAABUd1d7AQAAAAAAAAAAjOC6maRxjgwAAAAAgMJMagUAYC4mtQIAAAAAQHYbbaRZoE25dVKOCQAAAACAMkxqBQAAAAAAAAAgnaK1I7dOxMhWAAAAAADKMKkVAIC5mNQKAAAAAAAZmfzZI6cGAAAAAEAtolYAAOYiagUAAAAAgCwMaO2a4wMAAAAAoIq72gsAAAAAAAAAAKAzksjebRzTxuECAAAAAMBJolYAAAAAAAAAAA5QtI5B1woAAAAAQHmiVgAAAAAAAAAA9lK0jkTXCgAAAABAYaJWAAAAAAAAAAB2UbSOR9cKAAAAAEBJolYAAAAAAAAAAD6naB2VrhUAAAAAgGKWy+VSew0AAFDOsixZruOHNAAAAAAAU1G0Jvt961reK0cMAAAAAEABolYAAOYiagUAAAAAgKPkjmlW963lHXPQAAAAAABEu6u9AAAAAAAAAAAA2iV0THNr3zb2s7qNA2152QAAAAAAdETUCgAAAAAAAADAOkVrmn4TUF0rAAAAAAChRK0AAAAAAAAAAKwQMaYZeN8GvjUAAAAAAMoQtQIAAAAAAAAA8NF2vmhM68C2D1fXCgAAAADAGaJWAAAAAAAAAAAOULRuGKP5dMQAAAAAAAQRtQIAAAAAAAAA8B8bZabcccMYReubjYMe6TYBAAAAAChM1AoAAAAAAAAAwL8ki2mm2repbhYAAAAAgIxErQAAAAAAAAAA/N92rGhM61S2j1vXCgAAAABAAlErAAAAAAAAAABfvihaTxi18NS1AgAAAACQl6gVAAAAAAAAAADSaTsBAAAAAGAnUSsAAAAAAAAAAMa0Jhq+aDWsFQAAAACAjEStAAAAAAAAAACzU7SyQdcKAAAAAEAuolYAAAAAAAAAAEih5wQAAAAAgENErQAAAAAAAAAAUzOmNc1URathrQAAAAAAZCFqBQAAAAAAAACYlxwxjX37wIYAAAAAALCHqBUAAAAAAAAAgHXGtPLOwwAAAAAAwHmiVgAAAAAAAACASW1P1xQx3jLtVNLtR2LabQEAAAAAYD9RKwAAAAAAAAAA7CXdBAAAAACAZKJWAAAAAAAAAIAZGdOa4NamzbNdhrUCAAAAAHDGfe0FAAAAAAAAAABQmvgwo3mK1j1enx5tSHVZPuDOEQAAAACIIGoFAAAAAAAAAOA/xGyrVkPBCffq4flFFN2OuLPwwAMAAAAAEUStAAAAAAAAAABzUSQmsGn7GdYareLT+Pu/2ikDAAAAAAlErQAAAAAAAAAAsOVWQyjqo5gGs2qBKwAAAACQQNQKAAAAAAAAADCRT9M4cdpOM2/Uw/PL9oNkWGsuDbasq97X6dwBAAAAgG2iVgAAAAAAAAAAuGm1KlTuEaqXlvWauhUAAAAA2HZXewEAAAAAAAAAABRiTOtR/baF0T59VGxdgtenx7f/1F5IBsPcCAAAAACQl0mtAAAAAAAAAACw4laSJ/0lu1H7T4NbAQAAAIAPTGoFAAAAAAAAAJjCqNVcYdq8/Txye0wy0XSS2wQAAAAAPmVSK5z18+fPLNf5+vVrlusAAADASPzdDQB98d0NAL379f3Hr+Nf6KN+d68GeIrW3z08v8gUz5hw995u2ecI0vijGwD64rsbAOAWUSsAAAAAAAAAAPzHhLUhJU3+gElbAQAAAGBmd7UXAAAAAAAAAABAuE8jul/ff5RZSb80eNc+3ZPJ681rr0+P9uSNrQAAAACAOZnUCgAAAAAAAAAA/1oN7RStnCTgXGVqKwAAAADMxqRWAAAAAAAAAIDBqen2U7Rm5/EzkvRT9gcAAAAA5iFqBQAAAAAAAACY3a/vP2ovoQnKugSK320eqp2kvwAAAAAwifvaCwAAGN+yLL//z8vlUmslAAAAAAAAHCXaJI1EM8Hr06NPHAAAAACMzaRWAIBYH4rW1f8HAAAAAAAgjrJup9WN0tdlMeFDOOEt52JkKwAAAACMTdQKABDoVr+qawUAAAAAAGiKopVcNJlZ2EMAAAAAGJWoFQAgxLIsylUAAAAAAKALv77/qL2EyuRzJ6l/33mWMpIHAwAAAMCQRK0AAPnJWQEAAAAAgEZIwpIJNfOa4VGc4R7Ls6sAAAAAMJj72gsAABiKnBUAAAAAAKAvq8mcopVDhJehXp8efSQBAAAAYBgmtQIAZKNoBQAAAAAA6IuilfMUrQXYZAAAAAAYhqgVACCDZVkUrQAAAAAAQGv2ZGC/vv8osJI2yeQy2lMCD7nhQ95Um16fHu02AAAAAAxA1AoAcIqcFQAAAAAAYCTGtLKfxrI8ew4AAAAAvRO1AgAkkrMCAAAAAAD0azWNU7Syn7qyFjsPAAAAAF0TtQIAHLP8o/ZCAAAAAAAASCSK4ySPUF32HwAAAAD6JWoFANhFywoAAAAAAPRlT/T16/uPAitpza2dMab1pD0bOEaLOMZd9M4pAAAAAECnRK0AAOuW/6q9HAAAAAAAAAIpWtlJS9kOZwEAAAAAPRK1AgB8+XKVsKpYAQAAAAAAhrRawSla2UlF2RonAgAAAADdEbUCAOO7DlYlrAAAAAAAABPSv3GG56dNzgUAAAAA+iJqBQAAAAAAAAAYjcrr2q09Maa1sE4fzk6XPQmnAwAAAAAdEbUCAKS7XC6Xy6X2KgAAAAAAAEikaGUPzWT7nBEAAAAA9ELUCgBw2OUftRcCAAAAAACQ7tf3H7WXUM5q8KZozW7ILVVL9sJJAQAAAEAXFjEGADC8ZVmyXOfWD6e06/sZVkv08wAAAAAAAC3YE3cN2R+uurUbeXdgf1A39s4P9uzpJPvS0aMFAAAAANMyqRUA4BPmsgIAAAAAAPSrTNEKtECEDAAAAADtE7UCAKy4/Kb2WgAAAAAAAMhM0coeCskeOTUAAAAAaJyoFQCY2uWG2usCAAAAAABIp+l6t7oVitbqunhEu1gkq5wdAAAAALTsvvYCAADCiVQBAAAAAAAmJGwjmYcHAAAAACCISa0AAAAAAAAAAIzmVpRoTCufUrQOwCECAAAAQLNErQAAAAAAAAAATEHRCvPQtQIAAABAm0StAAAAAAAAAADTGTvvXI3Zxr7ldvS+z0rIkThNAAAAAGiQqBUAAAAAAAAAgHHI2Ejm4QEAAAAAiCZqBQAAAAAAAABgELeixN7HhwJphMoAAAAA0BpRKwAAAAAAAAAAI1O0sof6cVROFgAAAACaImoFAAAAAAAAAGAEq+maopU9dI8AAAAAAGWIWgEAAAAAAAAA6J4oEbjF+wEAAAAA2iFqBQAAAAAAAAAYx5zt1q27Nqa1WU09qE0tBgAAAABgbKJWAAAAAAAAAAAGpGgF3kmXAQAAAKARolYAAAAAAAAAADq22qopWtlJ6wgAAAAAUJKoFQAAAAAAAACAXikSgZ28LgAAAACgBaJWAAAAAAAAAAC6dCtRM6aVnVSOs3HiAAAAAFCdqBUAAAAAAAAAgHEoWgEAAAAAoFmiVgAAAAAAAAAA+rM6cVHRyn6Gds7JuQMAAABAXaJWAAAAAAAAAAA6I0sDAAAAAIAeiVoBAAAAAAAAAOjJraLVmFb200UDAAAAAFQhagUAAAAAAAAAoHuKVmAnSTMAAAAAVCRqBQAAAAAAAACgG6s1mqKVQzSNAAAAAAC1iFoBAAAAAAAAAOiDFhHIwssEAAAAAGoRtQIAAAAAAAAA0IFbEZoxrQAAAAAA0AtRKwAAAAAAAAAAvVK0cpQRnbzxJAAAAABAFaJWAAAAAAAAAABat5qfKVoBAAAAAKAvolYAAAAAAAAAAJpmoOJ4agXJniUAAAAAgLruay8AAAAAAAAAAIBsHp5f5sn2Or3TM8s2nBYyen169JkCAAAAgMJMagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAGF+no30BAAAAAEYiagUAAAAAAAAAAGBGUmcAAAAAKEzUCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAACQR7NzL5tdGAAAAADAVEStAAAAAAAAAADTEfgBAAAAAADl3ddeAAAAAAAAAAAAbHl4fqm9hE8cioTbvx2YyuvTo08lAAAAABRjUisAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAQzFykMaVf0QPjdIFAAAAACCOqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAOZlli8AAAAAFCNqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAADIwLhLAAAAAAC23ddeAAAAAAAAAAAwqQ/928PzS62VzOn16dGeMwOpLQAAAABAO0StAAAAAAAAAEAh22mZxjWjh+cXIR9t8tEGAAAAAJjZXe0FwP/Yu7ujyJEsAKMlAhMwgbaApzKmPWhz8KCNqScsaEzAh5oHJpgefoSUypu/58S87CyIzJJKqtrYLy4AAAAAAAAA43t5uN/bWCb8SmsG2ALAJNyuAQAAAKAMk1oBAAAAAAAAgEAHM6HXX+9rtOO7Lb/9x752AQAAAAAAkJ2oFQAAAAAAAAAIkXHqXS9p6/qWe9kFAAAAAABAEFErlHC5XLIc53w+ZzlOAbaczJZblmvLpyl3PeGWOzLhWc7icrl0tOUJz7Kb9hG23DJbTjbhlk/97HrCLZ9c2wfYcsts+YgJd23LLbPlZLbcMjftI2y5ZY1vOWPR+vcx/zz+Pn6cult+ebjf3rUeOsuPv3/8+plxMWW4aR9Rd8tb3gJv19sYW4Z3Jryw3bSPsOWW2XIyW26Zm/YRttyyCbcMANA7USsAAAAAAAAAkNmutm37r5xOpx+/fmbpWrOLiHgBAAAAAAAGc1N7AQAAAAAAAADAUNbzzrun59d/Pv77jcf/dvpoeYpWAAAAAACALUStAAAAAAAAAEA2K3nnpy3rux/Y+Fca7Fp3EcFCMd5uAAAAAABNEbUCAAAAAAAAAHmsF60lV1JSy8ncn8fftZfALLa8EQa+DwAAAAAAsJGoFQAAAAAAAADI4Kuk7dsBre9+eONP9j6stR0tR7m98BoCAAAAAMBGolYAAAAAAAAA4KiVorXwSrrgZZmcCBYAAAAAgGmJWgEAAAAAAACAQ2oVrS0Ma22/Tvzz+Lv2EgaXdg20f+Vkp+WmfRO+MQEAAACgvNvaCwAAAAAAAAAAOmZGK3M6Hr+9HWGAN4sUEAAAAACAjUStcNTlcqm9BAAAAOB0Wv2Sfj6fS64EADgd+9/PPbsBoLCXh/sjA12HeXbXKjNfHu5/bP5ho3cBppXr/6g2zIMbABrn2Q0A8JWb2gsAAAAAAAAAAHpVfUzrj18/y/yhjAYYywkAAAAAAJBG1AoAAAAAAAAApKhetFZXa7DnXmZ7Ut08twUAAAAAANaJWgEAAAAAAACAbKRrnepx5i2N6KXuBgAAAACgBaJWAAAAAAAAAGA3GVtfxMZU5PIDAAAAAOCNqBUAAAAAAAAAyON4ujZ8K6vuAwAAAAAAZnZbewEAAAAAAAAAQGeGT0+3GO9F+PHr55/H37VX0ZMsiXLvF1Lv6wcAAAAAoDBRKwAAAAAAAACQgRmkjbt7etYfrqtyDb/+0cvlUv5Pl+HOAAAAAADA325qLwAAAAAAAAAA6IkwEnjlbsBgNNgAAAAAUICoFQAAAAAAAAA4KksINHwgVz2X+nYBP379LLMSJlH9mgcAAAAAoDWiVgAAAAAAAABgq9a60z+Pv2svAQAAAAAAgK1ErQAAAAAAAADAIRMOY2wt7t3OsFZy+fZdMOGdAQAAAACAb4laAQAAAAAAAIBNQkvOfjNRAAAAAAAANhK1AgAAAAAAAADpKg5j/PP4u9afTtDO1Mp2VkK/OhrT2s5KAAAAAAA4iVoBAAAAAAAAgC1MUp3Hj18/ay8BAAAAAAAY03K9XmuvAfp2uVyyHOd8Pmc5DgDlLcuS8Fs+htWSdr4+cgYBoAzfuwGgL57dAGP7KmrNMgUxrZitNYCxr9V+ZX0Xu6bgenZPaP366etqhzetXbrwji/dANAXz24AgK+Y1AoAAAAAAAAAJKrY/0iPQhnWygqNKAAAAAAAyUStAAAAAAAAAMA3NGwHNZjg7prFCts1eLUDAAAAANAOUSsAAAAAAAAAUJNitk2GtfIpb1hGpccGAAAAgDJErQAAAAAAAABAZyqmRyMVfYa1kp0sEAAAAACAdaJWAAAAAAAAACBFlnptpEZ0PIa18k6nb1ipLQAAAABAO0StAAAAAAAAAEBPuuvTWl6wYa1k1PKlDgAAAABAI0StAAAAAAAAAMBu6rVhrHethrXyZn1Mq3sCAAAAAABbiFoBAAAAAAAAgG8E5WrrjVyDultwFrpWTrNe/MxDlQ0AAAAAxSzX67X2GgAA+rYsS8Jv+RhWS9r5+sgZBAAAAAA4LiGTq9sdpXV9XbRShnCyrvcrRJTLuvavYQAAAAAYhkmtAAAAAAAAAABRegml1tcpCJxc70XrqZNFAgAAAADMQNQKAAAAAAAAAFSgk4QueKsCAAAAAJCRqBUAAAAAAAAA6EPdWYvDp32GtZLABFQG4DIGAAAAgJJErQAAAAAAAAAAnE66Vj5YP+lSQAAAAAAA9hK1AgAAAAAAAAClJeSRPeZzPa4ZRuX9CAAAAADQAlErAAAAAAAAAAD/MqyVN8a0AgAAAACQnagVAAAAAAAAAOAbU8WculZOilam4WIGAAAAgMJErQAAAAAAAABAUQlVpOioMF3r5EYtWvtdOQAAAADAMEStAAAAAAAAAAD59Z7P9b5+ko1atAIAAAAA0AJRKwAAAAAAAAAA+xjWOidFK4NxSQMAAABAeaJWAAAAAAAAAKCchBiyenQ0bcC5/spP+7KMbfjTWv1+AgAAAAAwOVErAAAAAAAAAACf07VOZf2EykEBAAAAADhO1AoAAAAAAAAAkNlI+Z+udRKKVmbjqgYAAACAKkStAAAAAAAAAEAhCQGk6KgFutbhTVW0DrYdAAAAAIC+iFoBAAAAAAAAAL6k2Hylax3YVEUrvHJhAwAAAEAtolYAAAAAAAAAAL6nax3SnEXrqPsCAAAAAGifqBUAAAAAAAAAKCEheuw0POt02VvoWgczZ9EKAAAAAEBFolYAAAAAAAAAALbStQ5j8qJ1+A2ywtkHAAAAgIpErQAAAAAAAAAAn5NofkrXOoDJi1YAAAAAAGoRtQIAAAAAAAAAsM/d0/NK96hrbdzKCVo/s4OZZ6f8zXkHAAAAgLpErQAAAAAAAABAuITKsdPuqNNlp9G19mi9aC25EgAAAAAAJiRqBQAAAAAAAAAgka61L4rWd+bc9cyccQAAAACoTtQKAAAAAAAAAPAJTeZGutZeKFoBAAAAAKhO1AoAAAAAAAAANEdi15e7p2enrFPO3eTbn4pzDQAAAAAtELUCAAAAAAAAALHmGdc5eTE1+fZ75JQxD1c7AAAAADRC1AoAAAAAAAAAQB7vxn6qyJry7tQ4O2+8FAAAAAAAxdzWXgAAAAAAAAAAQHPmmS4bQSLYLKeGObnyAQAAAKAdJrUCAAAAAAAAAG1RHwGFue0AAAAAAJQhagUAAAAAAAAAyEAUB13zFh6VMwsAAAAATRG1AgAAAAAAAACBXh7uay8BgEkpWgEAAACgNaJWAAAAAAAAAID/EeLCnASQAAAAAADRRK0AAAAAAAAAAACnk651LM4mAAAAADRI1AoAAAAAAAAAcJR0CqApbssAAAAA0CZRKwAAAAAAAADQEBkSUJe7EAAAAABAHFErAAAAAAAAAMB/Xh7uay8BqEzX2jtnEAAAAACaJWoFAAAAAAAAAAD4H1Vkv5w7AAAAAGiZqBUAAAAAAAAA4BABFUAj3JABAAAAoHGiVgAAAAAAAAAAgPfkkd1xygAAAACgfaJWAAAAAAAAAIB/vTzc114C0BCRJAAAAABAXqJWAAAAAAAAAACAz+lae+FMAQAAAEAXRK0AAAAAAAAAAKdT6phWGRUMz9u8fc4RAAAAAPRC1AoAcMiyLIV/EQAAAAAAAChMM9kyZwcAAAAAOiJqBQBIdzBM1bUCAAAAAEA70sa0AvNQTrbJeQEAAACAvohaAQASZUlSda0AAAAAAADQC/1ka5wRAAAAAOiOqBUAIEXGGFXXCgAAAADA2LoojpLHtHaxOyAj7/p2OBcAAAAA0CNRKwDAVstfejkyAAAAAADwreSiFZiTlrIFzgIAAAAAdOq29gIAAEroKBbNstTr9Xr8IAAAAAAAMANFK5Dg7unZ3aMiRSsAAAAA9MukVgAAAAAAAACgIToxoAu6ylq88gAAAADQNVErAAAAAAAAABCr2QDpYEDb7L6AMtwEyvOaAwAAAEDvRK0AAAAAAAAAwIyMhAWO01iW5NUGAAAAgAGIWgEAAAAAAACAcLtKpAK5qaIVyEVpWcDd07PXGQAAAADGIGoFAAAAAAAAAOaiaAXyklyG8toCAAAAwEiW6/Vaew0AAOGWZam9hKJ8xluR62LwIgMAAAAAJNhVk0ZUTBlzVpEV8JFmPjs3WwAAAAAYjEmtAAD/c21Y7dcGAAAAAACOqtsmic2AaArMvLyeAAAAADCe29oLAAAoYYwidIxdAAAAAADARi8P97lyJjkrUMzrjctt5yA5KwAAAACMyqRWAAAAAAAAAKCcXZ1SlipMWgaUp8k8wqsHAAAAAANbzPuCgy6XS5bjnM/nLMcBANYty5LlOD5IA0AZvncDQF88uwHYbm9omhY4bfkrd0/PCdXrAMFVrgf3ybMbVunqdxng7gpxfOkGgL54dgMAfMWkVgAAAAAAAACgtL3Z0q4q7OXh/vWfb9egngKiuc9s57UCAAAAgBnc1l4AAAAAAAAAADCjvSNS//7hj+FT8uhXQxSBaK83HHebFXJWAAAAAJiHqBUAAAAAAAAAqCM59DrShkmngCr2lvyTcE8GAAAAgNnc1F4AAAAAAAAAADC1kkVTlr8lwQLS3D09u4G88WoAAAAAwJxMagUAAAAAAAAAKkse2br3T7xjaiJQXoE7XuO0rAAAAAAwM1ErAAAAAAAAANCEt8wpY+slnQLaNGfa6p4MAAAAAIhaAQAAAAAAAIC2HK9bdVNAF+ZJW92WAQAAAIBXolYAAAAAAAAAoFGfRlCf1l/FcildFpBdxJzqdrhtAgAAAAB/E7UCAAAAAAAAAD3J1UcNGY8BXRtpcKuWFQAAAAD4lKgVAAAAAAAAAACgFV0PbtWyAgAAAADrRK0AAAAAAAAAAJuItYCSOqpb3R4BAAAAgI1ErQAAAAAAAADAdNovxADe/J2MNnX70rICAAAAAHuJWgEAAAAAAAAAAPpQN3BVsQIAAAAAB4laAQAAAAAAAAC+J+UCWvPxvpQ3c3XfAwAAAACyE7UCAAAAAAAAAHMpP9sQoAwZKgAAAADQuJvaCwAAAAAAAAAAAAAAAAAAYHyiVgAAAAAAAABgImljWg0/BAAAAAAAOE7UCgAAAAAAAAAAAAAAAABAuNvaCwAAAAAAAAAABvRxIGq/w077XTkAAAAAAEBTRK0AAAAAAAAAQDYfW9Z3/1XdQHRleQAAAAAAAES7qb0AAAAAAAAAAGAQW5LRl4f7vspSY1oBAAAAAAByEbUCAAAAAAAAABm0n6omrFDRCgAAAAAAkJGoFQAAAAAAAAA4am8v2n4BCwAAAAAAQHaiVgAAAAAAAADgkC4KVWNaAQAAAAAAqluu12vtNQAAQDnLsmQ5jg/SAAAAAACvjhStxarRtEWKWgEAAAAAAPIyqRUAAAAAAAAA4D1FKwAAAAAAQHaiVgAAAAAAAAAg0ZExrcUkLFLRCgAAAAAAEEHUCgAAAAAAAADwH0UrAAAAAABAEFErAAAAAAAAADCsLmbJAgAAAAAATELUCgAAAAAAAACkONiLFhiImrBCY1oBAAAAAADiiFoBAAAAAAAAgAEpWgEAAAAAAFojagUAAAAAAAAAULQCAAAAAACEE7UCAAAAAAAAAKVFF6R7x7QqWgEAAAAAAAoQtQIAAAAAAAAAQ1G0AgAAAAAAtEnUCgAAAAAAAAAUFRqRWP2IVAAAIABJREFUKloBAAAAAACaJWoFAAAAAAAAAMpRtAIAAAAAAExL1AoAAAAAAAAAFKJoBQAAAAAAmNlyvV5rrwEAAMpZliXLcXyQBgAAAAA47elIowtSRSsAAAAAAED7bmsvAAAAAAAAAAAYVpl2VNEKAAAAAADQBVErAAAAAAAAAJBZsWp0b856UrQCAAAAAADUs1yv19prAACAcpZlyXIcH6QBAAAAAF59lZUWaEcNaAUAAAAAAOjLTe0FAAAAAAAAAAADSpihGnp8RSsAAAAAAEB1JrUCADAXk1oBAAAAALJb6UsjUtKEXFbRCgAAAAAA0AJRKwAAcxG1AgAAAABEWA9NczWlclYAAAAAAICu3dReAAAAAAAAAAAwuIQY9eMRFK0AAAAAAAC9M6kVAIC5mNQKAAAAABBkY3S6NzRNC2LlrAAAAAAAAA0StQIAMBdRKwAAAABAqF0N6lfp6ZHJrnJWAAAAAACAZolaAQCYi6gVAAAAACDakST1CDkrAAAAAABA40StAADMRdQKAAAAAFBA4a5VzgoAAAAAANAFUSsAAHMRtQIAAAAAFBOdtmpZAQAAAAAA+iJqBQBgLqJWAAAAAIDCsqetWlYAAAAAAIBOiVoBAJiLqBUAAAAAoJYjdauQFQAAAAAAYACiVgAA5iJqBQAAAABoysfSVb8KAAAAAAAwKlErAABzEbUCAAAAAAAAAAAAAEAVN7UXAAAAAAAAAAAAAAAAAADA+EStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABDutvYCoHuXyyXLcc7nc5bjAAAAwEh87waAvnh2A0BHcj24T57dAFCEL90A0BfPbgCAr5jUCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIRbrtdr7TUAAEA5y7JkOY4P0gAAAAAAAAAAAAAAsItJrQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFuay8Aune5XLIc53w+ZzkOAAAAjMT3bgDoi2c3AHQk14P75NkNAEX40g0AffHsBgD4ikmtAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAA8A97d2zDQAgEQNBIbor+gy8LV+DAEvsvrJkCTmQHwQoAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAIDcWGs9fQYAALjPGGPLHBdpAAAAAAAAAAAAAAD4iZ9aAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAA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AAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiNtdbTZwAAgPuMMbbMcZEGAAAAAAAAAAAAAICf+KkVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAA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AAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyC3btp19BwAAOM6yLLuc44c0AAAAAAAAAAAAAAD8iTe1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJB7nn0BmN4YY5dz1nXd5RwAAAD4Jp67AWAudjcATGSvxf2wuwHgEB66AWAudjcAwCve1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABAbtm27ew7AADAcZZl2eUcP6QBAAAAAAAAAAAAAOBPvKkVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAJ98IBgAAH+JJREFUAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAA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AAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAG77diwAAAAAMMjfehT7yiMA2EmtAAAAAAAAAAAAAAAAAADspFYAAAAAAAAAAAAAAAAAAHZSKwAAAAAAAAAAAAAAAAAAO6kVAAAAAAAAAAAAAAAAAICd1AoAAAAAAAAAAAAAAAAAwE5qBQAAAAAAAAAAAAAAAABgJ7UCAAAAAAAAAAAAAAAAALCTWgEAAAAAAAAAAAAAAAAA2EmtAAAAAAAAAAAAAAAAAADspFYAAAAAAAAAAAAAAAAAAHZSKwAAAAAAAAAAAAAAAAAAO6kVAAAAAAAAAAAAAAAAAICd1AoAAAAAAAAAAAAAAAAAwE5qBQAAAAAAAAAAAAAAAABgJ7UCAAAAAAAAAAAAAAAAALCTWgEAAAAAAAAAAAAAAAAA2EmtAAAAAAAAAAAAAAAAAADspFYAAAAAAAAAAAAAAAAAAHZSKwAAAAAAAAAAAAAAAAAAO6kVAAAAAAAAAAAAAAAAAICd1AoAAAAAAAAAAAAAAAAAwE5qBQAAAAAAAAAAAAAAAABgJ7UCAAAAAAAAAAAAAAAAALCTWgEAAAAAAAAAAAAAAAAA2EmtAAAAAAAAAAAAAAAAAADsAmIeM7La1XzAAAAAAElFTkSuQmCC" - } - }, - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "1842c5bf-4113-406b-b2c7-bc2535e9dd6c", - "showInput": false - }, - "source": [ - "### Pareto Optimality\n", - "\n", - "In a multi-objective optimization problem, there typically is no single best solution. Rather, the *goal* is to identify the set of Pareto optimal solutions such that any improvement in one objective means deteriorating another. Provided with the Pareto set, decision-makers can select an objective trade-off according to their preferences. In the plot below, the red dots are the Pareto optimal solutions (assuming both objectives are to be minimized).\n", - "![pareto front](attachment:pareto_front%20%281%29.png)" - ] - }, - { - "attachments": { - "hv_figure%20%281%29.png": { - "image/png": "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AAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg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rFQA4BXv6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgG47juPuOwAAAAAAAAAAAAAAAADAb+U9PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAKBD41sAABGaSURBVAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAA/9q7g9sKYSiKgkRKU/S/oCzSgjlfMU48U4DFXbzlEQAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA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" - } - }, - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "cefa89be-ef41-40d9-9458-d6faed3c6c91", - "showInput": false - }, - "source": [ - "### Evaluating the Quality of a Pareto Front (Hypervolume)\n", - "\n", - "Given a reference point $ r \\in \\mathbb R^M$, which we represent as a list of M `ObjectiveThreshold`s, one for each coordinate, the hypervolume (HV) of a Pareto set $\\mathcal P = \\{ f(x_i)\\}_{i=1}^{|\\mathcal P|}$ is the volume of the space dominated (superior in every one of our M objectives) by $\\mathcal P$ and bounded from above by a point $ r$. The reference point should be set to be slightly worse (10% is reasonable) than the worst value of each objective that a decision maker would tolerate. In the figure below, the grey area is the hypervolume in this 2-objective problem.\n", - "![hv_figure](attachment:hv_figure%20%281%29.png)" - ] - }, - { - "attachments": { - "objective_thresholds_comparison.png": { - "image/png": "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Hgw1OCBqOHupVwQIECBAgACByRUQ2J/csbfkBAgQIECAAAECJySQO02zXb16Nc6fP19lQsqIOqHB8LYECBAgQIAAAQIECBAgQIAAAQIERkBAYH8EBkkXCRAgQIAAAQIExk9ARtT4jaklIkCAAAECBAgQIECAAAECBAgQIHBUAk6MdFSy5kuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA5BQGD/EBDNggABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIHJWAwP5RyZovAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBA4BAGB/UNANAsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHBUAgL7RyVrvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BAEBPYPAdEsCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAUQkI7B+VrPkSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFDEBDYPwREsyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkclILB/VLLmS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDkGgeQjzMAsCBAgQIECAAAECBAgMtUCntxedXie2u9vlei/6/X7USo9rtXpMNdrlMhXteivq5b5GgAABAgQIECBAgAABAgQIECBAYNgEBPaHbUT0hwABAgQIECBAgACBQxfIgP7q7lrc33oQT3aexF4J7mcQv1lvxtnZM3Fm6nQstReiXYL8GgECBAgQIECAAAECBAgQIECAAIFhExDYH7YR0R8CBAgQIEDgyAT60Y9erxe7ve7TbN1aLVr1RgnsNY7sPc2YAIGTFeiW7/tubzcebj+KO5v3YqOzWbL2d6LX71UZ+1WG/mZEp9sp2fu1WIz5aDVa5bnM59cIECBAgAABAgQIECBAgAABAgQIDIeAwP5wjINeECBAgAABAscgkKW3t0vw7uFWZut2o1EC+svTc7HQmqkCesfQBW9BgMAxC3T6e7G+uxEPth/G3RLYzwN8+vv70O/Go53V2CnB/tnmTCnH36yy+DPIrxEgQIAAAQIECBAgQIAAAQIECBAYFgGB/WEZCf0gQIAAAQIEjkxgc28nnuxuxd2N1Xiw9TgebW9EtwTz6rUS2J+ai9MzC3Fp/nR1u9VoytQ9spEwYwLHL5AB+3s7D0pwf7Oq1NF/Qbw+A/2dUpo/A/yteqsE+OfK+uH4++odCRAgQIAAAQIECBAgQIAAAQIECLxMQGD/ZTIeJ0CAAAECBMZGYG1nK756cjf++fYf44vHd2K7BPq7vX6VpT/Xmo7zc6fi31/5KNrLrVgsWfwydcdm6C0IgSpgnxn7O93dZzP1n7PpltL8WaZ/q739fE7/c1O6S4AAAQIECBAgQIAAAQIECBAgQOD4BerH/5bekQABAgQIECBwPAJZej9L7t9afxD/+871uLf5uLpfi3opw18vGbn16v7q9nr89v6X8cmjG7Hb3TueznkXAgSOSaAfvbIuqArwvyILv5quBPjjew8BOKZuexsCBAgQIECAAAECBAgQIECAAAEC+wQE9vdhuEmAAAECBAiMl8BeKbe/0dmOO5uP4vrqrXi8s1EF+DIjP4P69XKdWbrrna34fPVOfLV2r2T1dqpy3eMlYWkITK5AftfbzVY5mKfxcoRSiz9j/nkqjmbd6TheDuUZAgQIECBAgAABAgQIECBAgACBkxIQ2D8pee9LgAABAgQIHLnA1t5u3Np4FA+3nsTOXqcE9TMT989bSeaN7VKme7McBJCv6ZQDAjQCBMZDoFFrxHRjOlq15ksP2sls/lr5N92YiqnmVInyvyK1fzxoLAUBAgQIECBAgAABAgQIECBAgMAICTRHqK+6SoAAAQIECBB4LYFuidhvl4D+Timvn5n5jVKCP7P1n28Z1OuWkv1Ztj+nyxL+GgEC4yGQQf3zM2fLd7xTDtzZik4v1wfdKpCfS5jf/1a9FXOt2Tg7czqW24u5phiPhbcUBAgQIECAAAECBAgQIECAAAECYyMgsD82Q2lBCBAgQIAAgecFMjSXZbj/FMx/dbDu1VM8/y7uEyAwzALtRitO1Zdiq7tVVeXYLKfe2O3tPj0tR+l4riNmmjOxPL0Yp6aWY645Vz02zMs0KX3LY6x6edDVbjd2d0rVle7TA69ynd5ollMsTJVTLDQb1WVSTCwnAQIECBAgQIAAAQIECBAgMLkCAvuTO/aWnAABAgQIjL3AdAnonZstwbrpuWg32iUTvwSFnlvqvF8vQaKZUn57tjUdU2W6ZindrREgMB4CWWI/SvD+7PSZmG3OxurOWqx31mOrnHqj2WhWZfqXpxZjoT0fMyW7/08HAo3H8o/yUvR7vdja2I7Vu4/j1hd3Y2t9Jzp7e9Eqwfz5pbk4/85KLJ9ZjNnFGeM2ygOt7wQIECBAgAABAgQIECBAgMCBBAT2D8RkIgIECBAgQGAUBaZKYH9lZjHOlMtSCe5v7m6XsvydZxYlM/Rb9WZ5fr4cADAf082SAVqvPzONOwQIjLZABvezJH+7ngfuNEtW/kxst3eiUQ7iycezDP90ObinOghgtBd1bHrf3evG9uZO3P7yXtz56l7cvfmgup+PZ5b+3MJM7Gzvxs613bj47rnvsvfHBsCCECBAgAABAgQIECBAgAABAgSeExDYfw7EXQIECBAgMAoCMkoPNkrpVC//rsyfjV9e/GF8+vBm3Fp/GLvdvZK93y8ZnlEF805PL8RfnnsvPjh1sWT2tw42c1MRIDByAll2f741XwL5c6XvT+t3ZDA/1xWC+sM1nJ3dvVh7tB7Xf/tlCe7fj87ubrXeHvRyc30rVu8/ju2t7ZhfnomF5YVSeUW1lYGPawIECBAgQIAAAQIECBAgQGD8BAT2x29MLREBAgQIECCwTyADdpmx/6MqcBcx156uMvd7JbCfJfjnp2bi7MxSFdS/MHcqmrL19+m5SWD8BPJ7X2rzj9+CjdkSrd5fi28+vxNrD9djd3unHIbx7IlU+t1u7JZS/Y8fPImbf7gdVz4op1SZmx4zBYtDgAABAgQIECBAgAABAgQIEPiTgMD+nyzcIkCAAAECBMZUYLY1FVmWf3lqLn5azqv9pJTk7/V75fza9VKSO8twT5dMz6lSkr8ha3dMPwMWiwCB0RJYKwH7O1/fi62NXF8/rbDy/BL0ev3YWNuMb768E8srS7Fy+fkp3CdAgAABAgQIECBAgAABAgQIjI+AwP74jKUlIUCAAAECBF4i0CjltxsliN9qlPMylyD+YrtTZX9m5m670SwBfZtEL6HzMAECBE5EoFsy8ju7ZV39kqB+diqLL2Rwf29nL3rd3on005sOr0B+drS3F3D6p7c3NAcCBAgQIECAAAECBAgcloC92IclaT4ECBAgQIDA0AvkObSbJSt/vu08zEM/WDpIgMBEC2QwsV4OyqpOmpDx2RedPaE8nsH9Wp5CJW9oBAgQIECAAAECBAgQIECAAIExFih7QDQCBAgQIECAAAECBAgQIDA8Aq2pVkzPTUW9VFt5YeZ1Cern441SiWVmbjqaLcesD8/o6QkBAgQIECBAgAABAgQIECBwFAIC+0ehap4ECBAgQIAAAQIECBAg8MYCS6fn48LVlZhbnI1mOWVKOX/K00te5e3SGs1mLJyaj4vvnY/5pdmnD/o/AQIECBAgQIAAAQIECBAgQGBMBaQ1jOnAWiwCBAgQIECAAAECBAiMqsDyylIJ3Dfi/u1Hsb66Edsb3Sq2Xy1PluAvmfzt6VbkdO/8+GrMzLZHdVH1mwABAgQIECBAgAABAgQIECBwIAGB/QMxmYgAAQIECBAgQIAAAQIEjksgS/DPzM/ED//i3Vg+sxD3bj2MrY3t6Ox2otVuVZn8Zy+ejpVLZ2J6pl1K9jeOq2vehwABAgQIECBAgAABAgQIECBwIgIC+yfC7k0JECBAgAABAgQIECBA4GUC9Xo9pkrAviqzvzwXMwszsfG4ZO5v7sb07FQsZKn+a+ditjzeLJn9GgECBAgQIECAAAECBAgQIEBg3AUE9sd9hC0fAQIECBAgQIAAAQIERlCgVquVTPx6zC3NxdWpVuztdaPX7VWPZTA/A/+N8rxGgAABAgQIECBAgAABAgQIEJgEAYH9SRhly0iAAAECBAgQIECAAIERFMjgfqvdrC4j2H1dJkCAAAECBAgQOKBAv9+LTn8vdrpbsbm3Gf1+P+q1esw2Z2OqMR3Neitq5Z9GgAABAgQmWUBgf5JH37ITIECAAAECBAgQIECAAAECBAgQIECAAIETFOhlUL/Xia3uZqztrsbqzsPIx5q1ZixPn46F1mLMNOeq+xns1wgQIECAwKQKCOxP6shbbgIECBAgQIAAAQIECBAgQIAAAQIECBAgcIIC/ejHemct1jqr8Wj7YcnW34jd7k559GnG/ubeesy25uPU1OlYbC+XIP/SCfbWWxMgQIAAgZMVENg/WX/vToAAAQIECBAgQIAAAQIECBAgQIAAAQIEJlAgw/f92Nh7Eg+375dM/Uex2ytB/VKGf9C2a1uxUx7r9XrRKBn88yV7X0n+gY5rAgQIEJg0AXVrJm3ELS8BAgQIECBAgAABAgQIECBAgAABAgQIEDhhgQzq9/rdkrH/pCrBv9fvVD2q1Uro/ttLPtDp7cbj3Uex2VmvSvTn6zQCBAgQIDCJAgL7kzjqlpkAAQIECBAgQIAAAQIECBAgQIAAAQIECJygQLffKxn6u7Gztx07pfx+r9x/UcvHd7rbsV0uWaa/Ww4G0AgQIECAwCQKCOxP4qhbZgIECBAgQIAAAQIECBAgQIAAAQIECBAgcIIC3V63BPV3otPtRLe3F6UG/wt7k6X5c9rd7m4V3M/bGgECBAgQmEQBgf1JHHXLTIAAAQIECBAgQIAAAQIECBAgQIAAAQIETlCgXqtHs96MRr0RebvU339hb7Isf73+dNpWvfV02hdO6UECBAgQIDDeAgL74z2+lo4AAQIECBAgQIAAAQIECBAgQIAAAQIECAydQAbzM1DfqrdLcL8VtfLvRS0fb347ncD+i4Q8RoAAAQKTIiCwPykjbTkJECBAgAABAgQIECBAgAABAgQIECBAgMCQCDwN7LdjujFdXeolgJ9l9/e3vJ/TDabJgwCq7P79E7lNgAABAgQmRKA5IctpMQkQIECAAAECBAgQIECAAAECBAgQIECAAIEhEchM/AzSL0wtRafXice1R7Hd3Yq9/t53PcxS/TPN2VhqnyrTLY51UD8PYuju9cqy96NWTj1QL6cgqNVfXMXgOyA3CBAgQGCiBAT2J2q4LSwBAgQIECBAgAABAgQIECBAgAABAgQIEBgOgQzun5o6G9MleN/YaMba7qPY2NsonSvB7RL0n23MxvLU6Tg/dymm6jPD0ekj6kUG9nd3OtHv9aPZalSXRr1xRO9mtgQIECAwigIC+6M4avpMgAABAgQIECBAgAABAgQIECBAgAABAgTGQCCz9qfq03Fm5lzMtxeq7P0qsF+C/s16q5Thn4l2eX4cS/B3dvfiyaON2Li/E7W9b2Jnayd6GdhvNmJmfjrmFmfj7KXTsXBqvhzoIHt/DD7uFoEAAQJvJSCw/1Z8XkyAAAECBAgQIECAAAECBAgQIECAAAECBAi8qUBm7bdKAH+5lNuPyMtktMzQ39ncjdU7T2LtfgnuP9qKznZm7Pei3mjE/NJsnFpZKrfLgQ8z7WhNtaJeSvRrBAgQIDC5AgL7kzv2lpwAAQIECBAgQIAAAQIECBAgQIAAAQIECBA4ZoFeCd7vZbb+g424/fn92NvZi95ev2Tr97JYQXS73dhY24q9TrcE9aei1+3FpffOx/Tc9DH31NsRIECAwDAJCOwP02joCwECBAgQIECAAAECBAgQIECAAAECBAgQIDDWAt0SsF97tB6r99ZKtv56ycSvRaNk6X/XSnC/s9spgf29uHfrYZWxf/bymRLY/24KNwgQIEBgAgXUbZnAQbfIBAgQIECAAAECBAgQIECAAAECBAgQIECAwMkI7JSS+3dv3I+Hdx+VbPxuKb9fIvnPt1p5oFw2n2zFk9XN6O51n5/CfQIECBCYMAGB/QkbcItLgAABAgQIECBAgAABAgQIECBAgAABAgQInJxAv5Tc39naLVn5e9HvvyCov69rGdDPzP1XTbfvJW4SIECAwJgKCOyP6cBaLAIECBAgQIAAAQIECBAgQIAAAQIECBAgQGD4BKpQfhXQL7e+zcx/US+rYP7TiSO+P/7/opd7jAABAgTGTEBgf8wG1OIQIECAAAECBAgQIECAAAECBAgQIECAAAECwyvQnmrF2UtnYunMYtRrGdl/Qati/rWYmm3HzNxMNBrCOS9Q8hABAgQmSqA5UUtrYQkQIECAAAECBAgQIECAAAECBAgQIECAAAECJyjQbDdjeWUxlktgPwP3/e63nSnB/H75V8t/JeDfbDVj6XSZrkybtzUCBAgQmGwBh3hN9vhbegIECBAgQIAAAQIECBAgQIAAAQIECBAgQOAYBTL7fnZ+JhbPzMfpi0sxszgd9Xo9er0S1u+WS7lutlsxtzQfl39wMa7+8FJ1AMAxdtFbESBAgMAQCjjEawgHRZcIECBAgAABAgQIECBAgAABAgQIECBA4E8CvZLS3OntVJduv1OeqJUS5o2Yqs9Es94utzOH7SUlzf80G7cIDIVAZuM3mo0SuJ+NlSuno7sT0d3tx9b6dvS6vZKd34jZxdlYXF6IC9dWYmF5vkwvT3MoBk8nCBAgcIICAvsniO+tCRAgQIAAAQIECBAgQIAAAQIECBAgQOD7BbI0ea+/Fxud1Vgvl629J6VMeT1atak4NXM+5mrL5X6rKl/+/XPyLIHhEpien4qz187E0kLJ2m/Pxuq9x7HX6VbZ+Qun5iMvmclfrztoZbhGTm8IECBwMgIC+yfj7l0JECBAgAABAgQIECBAgAABAgQIECBA4BUCGdRf230Qazv3S2D/cez0NqPb2y2vepqxv9vbivnmcixNn4vpxlyVvf+KWXqawFAJZNC+PVXK7i/MVln8vV7J2C/Z/O3pVnU9VJ3VGQIECBA4UQGB/RPl9+YECBAgQIAAAQIECBAgQIAAAQIECBAg8CKBXr8XvehWQf27W1/FbncruiVzP8uYZ+v3+7G5txZbzfVo1EvG/lS9BPZb5RnZzRWQ/42MQL1RrwL5GczXCBAgQIDAywQE9l8m43ECBAgQIECAAAECBAgQIECAAAECBAgQODGBTm8ntjprsVkuGdTPIP8gqJ+dytsZ3O+UE5Sv7twp5crLecmbi8L6JzZi3pgAAQIECBA4SoH6Uc7cvAkQIECAAAECBAgQIECAAAECBAgQIECAwJsI7JXA/kZnNXa6pfx+ydR/YSvJ+d1+p2TuP4mdvc1M43/hZB4kQIAAAQIECIy6gMD+qI+g/hMgQIAAAQIECBAgQIAAAQIECBAgQGAMBfa+Ddjv9XdLFv7Ly+v3o18F97v97hgqWCQCBAgQIECAwFMBgX2fBAIECBAgQIAAAQIECBAgQIAAAQIECBAYOoEM5tdrjfx/6dv3ZOJXMf/vC/0P3aLpEAECBAgQIEDgtQUE9l+bzAsIECBAgAABAgQIECBAgAABAgQIECBA4KgF6rVmtBsz0ag3vi+sX7qRBwA0y/8bR90l8ydAgAABAgQInJiAwP6J0XtjAgQIHEwgy8kN/h3sFaYiQIAAAQIECBAgQIAAAQIECIy+wFQJ6i9Pr8RMYyEaVeD+xeX4m7VWLLROxWxrocT4XzzN6GtYAgIECBAgQGDSBZqTDmD5CRAgMMwCVUC/nB+u339abq4qP1dzTNYwj5m+ESBAgAABAgQIECBAgAABAocj0Ky3Yq62FPOt5dja24jd3mbs9TslAaJX3iBL75cc/RLUn2kuxGL7TLmeP5w3NhcCBAgQIECAwBAKCOwP4aDoEgECky3Q7/fKj9Sd2Ojci+3OWuz1tktgv/xgLUecN+tTMVV+rM61VqJVn6nOMzfZWpaeAAECBAgQIECAAAECBAgQGFeBUmC/2h+yNH0umo12PNq+E5t7ZV9Jf7cK6mf5/fnmqZKtfzoWp85GZvhnsF8jQIAAAQIECIyjgMD+OI6qZSJAYKQFev292Ok+idvr/ycebl8vR6Q/jl7J2s8fplPNxViauhJXF39ZfrSeF9gf6ZHWeQIECBAgQIAAAQIECBAgQOBVAtX+kMZsCfE3Ss5DLWb3FqPb65SXlbB/rVGV358upfozqJ/l+jUCBAgQIECAwLgK2NIZ15G1XAQIjKzAo+2v4v7WpyWo/3lsdh5WR6FnKf48RVx/r2Tul9v5w3Vl5sM4N/vj8nhjZJdVxwkQIECAAAECBAgQIECAAAECrxLIgH2j2aiC9/2pnPrpKQufluMvd8tOE5n6r1L0PAECBAgQIDDqAgL7oz6C+k+AwNgI9MuP0iy5/3j3Rtze+D9V1v5er5SWy4h+aSWeX45IL+eSK491+pvRrLXjzMwPytHo+dO1lKbTCBAgQIAAAQIECBAgQIAAAQJjK1D2f1T7QMZ2AS0YAQIECBAgQOB7BUSCvpfHkwQIEDg+gV6/E7u99dgp54rb6a4/Lb//bVB/0Iv8AduPXnl+M7bLdNvdtRLs3x087ZoAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQGAMBQT2x3BQLRIBAqMp0Ot3o9PbKpftkpW/U8L3pez+C1oG9rvl+WraEuDvlgMCNAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgfEVENgf37G1ZAQIjJhAluHPrP0M8Pez7n5eXtbKc/0yXbfXKdcvPgDgZS/1OAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwGgJNEeru3pLgACB8RVo1JrRrs9Hqz4TjXqrKrlfovt/tsDljHJRr7ej2ZiJqeZ8mbb9Z9N4gAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYHwEZOyPz1haEgIERlwgg/VTjcWYbixEuzEbGeh/UavXGiX4P/t02uZyNOtTL5rMYwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAmMiILA/JgNpMQgQGH2BzMSv1eqxMHUpzs18FNMlaF9y86tS+1mev1eV3K9VWf1nZj6I5amrUS/B/3ydRoAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgML4CL04HHd/ltWQECBAYaoEM0s+3V0oQf68qxd+oTcVud70E97tVv9uN+er5syWwvzB1oQT2G+Vxgf2hHlSdI0CAAAECBAgQIECAAAECBAgQIECAAAECBAi8pYDA/lsCejkBAgQOW2C6uVTK60/HXOtMbOzej7Xdm9Ht7VTZ/IvtyzE3da6U618s5fhnSkhf4ZXD9jc/AgQIECBAgAABAgQIECBAgAABAgQIECBAgMCwCQjsD9uI6A8BAhMv0Ki1otFolsD9dLQbs+UyVzL4OyWwX4vZ1tmYai4qwT/xnxIABAgQIECAAAECBAgQIECAAAECBAgQIECAwCQJCOxP0mhbVgIERkig5OLXmpHZ+1PlEqUwf5bcf1p0X+n9ERpIXSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIvLWAwP5bE5oBAQIEjlJAMP8odc2bAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAKAk7OPAqjpI8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMLECAvsTO/QWnAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRGQUBgfxRGSR8JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYGIFBPYndugtOAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMgoDA/iiMkj4SIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwMQKCOxP7NBbcAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYBQGB/VEYJX0kQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYkVENif2KG34AQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwCgIC+6MwSvpIgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhMrILA/sUNvwQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgFAQE9kdhlPSRAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCZWQGB/YofeghMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAKAgI7I/CKOkjAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEysgMD+xA69BSdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBURAQ2B+FUdJHAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJhYAYH9iR16C06AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECoyDQHIVOHkcf+/1+9Hq9ePLkSXz55Zfx6NGjWF9fj+np6VhYWIhr167FqVOnYmpqKmq12nF0yXsQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEQ2N/3Idjd3Y27d+/Gr3/96/jqq69idXU1ZmZm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gACBIRYQ2B/iwdE1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgsO8zQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEhlhAYH+IB0fXCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAwL7PAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGGIBgf0hHhxdI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAvs+AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYIgFBPaHeHB0jQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINBEQIECAAAECBCZFoNftRWd3LzaebEav2496ox4z89MxPdOOWq32HcPjra14tLkZq5tbsbm7G/1+P9rNZsy0W3F+YTFOz81GvUy//zXfvdgNAgQIECBAgAABAgQIECBAgAABAgQIECBwyAIC+4cManYECBAgQIDA8AlkYL7X68fudifWVzfi9o37sdfpRrME6lcunYrGykI0SuC+Vq9VQfz76+vxyZ07cf3e/bj3ZL167fz0VJxdmI+/uno15srrplqtaOw7GGD4llqPCBAgQIAAAQIECBAgQIAAAQIECBAgQGBcBAT2x2UkLQcBAgQIECDwUoHVB0/i7s2H8fnHN+KbL+7G43K/W7L3G41GLJ9diPNXTseP/837MX1mLu5ub8Snd+/Gp7fvxJOdndje7US/zHlzd6dk8G/GbmevCvb//OqVOLe48NL39AQBAgQIECBAgAABAgQIECBAgAABAgQIEDgsAYH9w5I0HwIECBAgQGDoBDJTv/wX9289io//vz/G7359PW58fjt2NneqLPx6rZTiX5iOc5dOR7NVSu1fW4qvehtx/cGD+OL+/arUfim4Xy3XZjWvfmyVQP/Gzm5cPrUcS7Mz0S4HByjJP3RDr0MECBAgQIAAAQIECBAgQIAAAQIECBAYKwGB/bEaTgtDgAABAgQI7BfI8vud3b24cf1O/OYffh9rj9ajW0rw1+v1cnk6ZWenEw/urMa//OqTaN5ciMdX2rHW3Y0M+u9vg+D91u5uPNxYjztra3Fmfi7Ozs9HU0n+/VRuEyBAgAABAgQIECBAgAABAgQIECBAgMAhCwjsHzKo2REg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" - } - }, - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "1819970e-9b48-4b57-b280-35bf2c4919d2", - "showInput": false - }, - "source": [ - "### Set Objective Thresholds to focus candidate generation in a region of interest\n", - "\n", - "The below plots show three different sets of points generated by the qNEHVI [1] algorithm with different objective thresholds (aka reference points). Note that here we use absolute thresholds, but thresholds can also be relative to a status_quo arm.\n", - "\n", - "The first plot shows the points without the `ObjectiveThreshold`s visible (they're set far below the origin of the graph).\n", - "\n", - "The second shows the points generated with (-18, -6) as thresholds. The regions violating the thresholds are greyed out. Only the white region in the upper right exceeds both threshold, points in this region dominate the intersection of these thresholds (this intersection is the reference point). Only points in this region contribute to the hypervolume objective. A few exploration points are not in the valid region, but almost all the rest of the points are.\n", - "\n", - "The third shows points generated with a very strict pair of thresholds, (-18, -2). Only the white region in the upper right exceeds both thresholds. Many points do not lie in the dominating region, but there are still more focused there than in the second examples.\n", - "![objective_thresholds_comparison.png](attachment:objective_thresholds_comparison.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "f2f39a8f-279f-49a1-b645-d51caed24d9c" - }, - "source": [ - "### Further Information\n", - "A deeper explanation of our the qNEHVI [1] and qNParEGO [2] algorithms this notebook explores can be found at \n", - "\n", - "[1] [S. Daulton, M. Balandat, and E. Bakshy. Parallel Bayesian Optimization of Multiple Noisy Objectives with Expected Hypervolume Improvement. Advances in Neural Information Processing Systems 34, 2021.](https://arxiv.org/abs/2105.08195)\n", - "\n", - "[2] [S. Daulton, M. Balandat, and E. Bakshy. Differentiable Expected Hypervolume Improvement for Parallel Multi-Objective Bayesian Optimization. Advances in Neural Information Processing Systems 33, 2020.](https://arxiv.org/abs/2006.05078)\n", - "\n", - "In addition, the underlying BoTorch implementation has a researcher-oriented tutorial at https://botorch.org/tutorials/multi_objective_bo." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "0ac396dd-8040-4f87-8abe-472127734aef" - }, - "source": [ - "## Setup" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191302514, - "executionStopTime": 1628191302546, - "hidden_ranges": [], - "originalKey": "500597fc-a996-48f4-a8fe-defd429162b8", - "requestMsgId": "07dd11c9-cd20-4bfa-b2d9-9a7bf70b2e44" - }, - "outputs": [], - "source": [ - "import pandas as pd\n", - "from ax import *\n", - "\n", - "import numpy as np\n", - "\n", - "from ax.core.metric import Metric\n", - "from ax.metrics.noisy_function import NoisyFunctionMetric\n", - "from ax.service.utils.report_utils import exp_to_df\n", - "from ax.runners.synthetic import SyntheticRunner\n", - "\n", - "# Factory methods for creating multi-objective optimization modesl.\n", - "from ax.modelbridge.factory import get_MOO_EHVI, get_MOO_PAREGO\n", - "\n", - "# Analysis utilities, including a method to evaluate hypervolumes\n", - "from ax.modelbridge.modelbridge_utils import observed_hypervolume" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "0b43c263-41da-4aa8-99f3-4a2a7fc49e4b" - }, - "source": [ - "## Define experiment configurations" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "963a036d-a250-4e3c-9570-afe6f2192f9a" - }, - "source": [ - "### Search Space" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191313915, - "executionStopTime": 1628191313944, - "hidden_ranges": [], - "originalKey": "90637eb4-730f-4f3d-8712-875bf88d6c2d", - "requestMsgId": "fbb9db8e-5414-4add-ad10-0bd00583ebf5" - }, - "outputs": [], - "source": [ - "x1 = RangeParameter(name=\"x1\", lower=0, upper=1, parameter_type=ParameterType.FLOAT)\n", - "x2 = RangeParameter(name=\"x2\", lower=0, upper=1, parameter_type=ParameterType.FLOAT)\n", - "\n", - "search_space = SearchSpace(\n", - " parameters=[x1, x2],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "ac3cf1fe-d39d-48bb-a31d-e3ee0d70418b", - "showInput": false - }, - "source": [ - "### MultiObjectiveOptimizationConfig\n", - "\n", - "To optimize multiple objective we must create a `MultiObjective` containing the metrics we'll optimize and `MultiObjectiveOptimizationConfig` (which contains `ObjectiveThreshold`s) instead of our more typical `Objective` and `OptimizationConfig`\n", - "\n", - "We define `NoisyFunctionMetric`s to wrap our synthetic Branin-Currin problem's outputs. Add noise to see how robust our different optimization algorithms are." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191319191, - "executionStopTime": 1628191319220, - "hidden_ranges": [], - "originalKey": "9fdb11b6-7845-4f06-90fd-527fee088d76", - "requestMsgId": "febe0d60-fe60-4d55-ba6f-724c8ce7601d" - }, - "outputs": [], - "source": [ - "class MetricA(NoisyFunctionMetric):\n", - " def f(self, x: np.ndarray) -> float:\n", - " return float(branin_currin(torch.tensor(x))[0])\n", - "\n", - "\n", - "class MetricB(NoisyFunctionMetric):\n", - " def f(self, x: np.ndarray) -> float:\n", - " return float(branin_currin(torch.tensor(x))[1])\n", - "\n", - "\n", - "metric_a = MetricA(\"a\", [\"x1\", \"x2\"], noise_sd=0.0, lower_is_better=False)\n", - "metric_b = MetricB(\"b\", [\"x1\", \"x2\"], noise_sd=0.0, lower_is_better=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191321755, - "executionStopTime": 1628191321791, - "hidden_ranges": [], - "originalKey": "27065b03-7234-49c1-b3ae-f6442ec4e3d6", - "requestMsgId": "d4010fca-5cbd-4a41-a779-cfa97ec15cc3" - }, - "outputs": [], - "source": [ - "mo = MultiObjective(\n", - " objectives=[Objective(metric=metric_a), Objective(metric=metric_b)],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1628191323464, - "executionStopTime": 1628191323491, - "originalKey": "c58b70de-06b5-4e03-8958-c3c55d4c295a", - "requestMsgId": "27e7efe5-d29e-4211-944e-41e6de065299" - }, - "outputs": [], - "source": [ - "objective_thresholds = [\n", - " ObjectiveThreshold(metric=metric, bound=val, relative=False)\n", - " for metric, val in zip(mo.metrics, branin_currin.ref_point)\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191325491, - "executionStopTime": 1628191325519, - "hidden_ranges": [], - "originalKey": "4b1ce9ba-e2e5-4a8a-9c15-5d01a2940a55", - "requestMsgId": "314ea591-0d2e-4fb5-b091-2aa2ea27f0eb" - }, - "outputs": [], - "source": [ - "optimization_config = MultiObjectiveOptimizationConfig(\n", - " objective=mo,\n", - " objective_thresholds=objective_thresholds,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "3b7b797c-2478-48d6-84ea-c62a886db31f", - "showInput": false - }, - "source": [ - "## Define experiment creation utilities\n", - "\n", - "These construct our experiment, then initialize with Sobol points before we fit a Gaussian Process model to those initial points." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1628191328765, - "executionStopTime": 1628191328792, - "originalKey": "a52ace6c-8144-446b-97d5-2f27879ca187", - "requestMsgId": "6a222fb5-231e-4476-86a6-c29ca5113332" - }, - "outputs": [], - "source": [ - "# Reasonable defaults for number of quasi-random initialization points and for subsequent model-generated trials.\n", - "N_INIT = 6\n", - "N_BATCH = 25" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191330913, - "executionStopTime": 1628191330991, - "hidden_ranges": [], - "originalKey": "9fd6ec68-4c53-4276-a98a-61431cdc05d5", - "requestMsgId": "8f659995-6b8f-4544-8392-03daaf8220b8" - }, - "outputs": [], - "source": [ - "def build_experiment():\n", - " experiment = Experiment(\n", - " name=\"pareto_experiment\",\n", - " search_space=search_space,\n", - " optimization_config=optimization_config,\n", - " runner=SyntheticRunner(),\n", - " )\n", - " return experiment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191334273, - "executionStopTime": 1628191334299, - "hidden_ranges": [], - "originalKey": "a8eef6a6-1d53-494a-907f-10ca35492a8c", - "requestMsgId": "b207dbd4-0a53-4efd-bbb9-9dee8835d60b" - }, - "outputs": [], - "source": [ - "## Initialize with Sobol samples\n", - "\n", - "\n", - "def initialize_experiment(experiment):\n", - " sobol = Models.SOBOL(search_space=experiment.search_space, seed=1234)\n", - "\n", - " for _ in range(N_INIT):\n", - " experiment.new_trial(sobol.gen(1)).run()\n", - "\n", - " return experiment.fetch_data()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "0c918735-9fda-4c36-90b5-163443e66c72", - "showInput": false - }, - "source": [ - "# Sobol\n", - "We use quasirandom points as a fast baseline for evaluating the quality of our multi-objective optimization algorithms." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191356513, - "executionStopTime": 1628191356896, - "hidden_ranges": [], - "originalKey": "5ee13832-804a-413f-a6bc-1f8f96a817d8", - "requestMsgId": "5b40f1e6-45b9-40e4-8569-9d459e98ca57" - }, - "outputs": [], - "source": [ - "sobol_experiment = build_experiment()\n", - "sobol_data = initialize_experiment(sobol_experiment)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191362562, - "executionStopTime": 1628191408255, - "hidden_ranges": [], - "originalKey": "0c6a6d44-29db-43dd-982d-dc664d00b009", - "requestMsgId": "8aca7b5b-aab8-4a39-9a49-d7b1e0c714c5" - }, - "outputs": [], - "source": [ - "sobol_model = Models.SOBOL(\n", - " experiment=sobol_experiment,\n", - " data=sobol_data,\n", - ")\n", - "sobol_hv_list = []\n", - "for i in range(N_BATCH):\n", - " generator_run = sobol_model.gen(1)\n", - " trial = sobol_experiment.new_trial(generator_run=generator_run)\n", - " trial.run()\n", - " exp_df = exp_to_df(sobol_experiment)\n", - " outcomes = np.array(exp_df[[\"a\", \"b\"]], dtype=np.double)\n", - " # Fit a GP-based model in order to calculate hypervolume.\n", - " # We will not use this model to generate new points.\n", - " dummy_model = get_MOO_EHVI(\n", - " experiment=sobol_experiment,\n", - " data=sobol_experiment.fetch_data(),\n", - " )\n", - " try:\n", - " hv = observed_hypervolume(modelbridge=dummy_model)\n", - " except:\n", - " hv = 0\n", - " print(\"Failed to compute hv\")\n", - " sobol_hv_list.append(hv)\n", - " print(f\"Iteration: {i}, HV: {hv}\")\n", - "\n", - "sobol_outcomes = np.array(exp_to_df(sobol_experiment)[[\"a\", \"b\"]], dtype=np.double)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "767a7e9b-8902-424e-bfc4-f7afdba47302" - }, - "source": [ - "## qNEHVI\n", - "Noisy Expected Hypervolume Improvement. This is our current recommended algorithm for multi-objective optimization." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191422463, - "executionStopTime": 1628191422803, - "hidden_ranges": [], - "originalKey": "8fc6bfb4-3012-4ce2-99ed-288378098c50", - "requestMsgId": "0fd945a2-ac45-4a74-82cc-7173e15ced85" - }, - "outputs": [], - "source": [ - "ehvi_experiment = build_experiment()\n", - "ehvi_data = initialize_experiment(ehvi_experiment)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191425090, - "executionStopTime": 1628191500240, - "hidden_ranges": [], - "originalKey": "27dd9425-b77e-4027-8412-30dd40c5abf1", - "requestMsgId": "65430b82-de1e-4946-9d8d-4a75762354c1" - }, - "outputs": [], - "source": [ - "ehvi_hv_list = []\n", - "ehvi_model = None\n", - "for i in range(N_BATCH):\n", - " ehvi_model = get_MOO_EHVI(\n", - " experiment=ehvi_experiment,\n", - " data=ehvi_data,\n", - " )\n", - " generator_run = ehvi_model.gen(1)\n", - " trial = ehvi_experiment.new_trial(generator_run=generator_run)\n", - " trial.run()\n", - " ehvi_data = Data.from_multiple_data([ehvi_data, trial.fetch_data()])\n", - "\n", - " exp_df = exp_to_df(ehvi_experiment)\n", - " outcomes = np.array(exp_df[[\"a\", \"b\"]], dtype=np.double)\n", - " try:\n", - " hv = observed_hypervolume(modelbridge=ehvi_model)\n", - " except:\n", - " hv = 0\n", - " print(\"Failed to compute hv\")\n", - " ehvi_hv_list.append(hv)\n", - " print(f\"Iteration: {i}, HV: {hv}\")\n", - "\n", - "ehvi_outcomes = np.array(exp_to_df(ehvi_experiment)[[\"a\", \"b\"]], dtype=np.double)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "e93178b6-5ba4-4c01-b8a2-e05971b7326f", - "showInput": false - }, - "source": [ - "## Plot qNEHVI Pareto Frontier based on model posterior \n", - "\n", - "The plotted points are samples from the fitted model's posterior, not observed samples." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1628191505148, - "executionStopTime": 1628191521900, - "hidden_ranges": [], - "originalKey": "71e013c5-638f-4ba4-bb9a-3e4a7d3eb9fa", - "requestMsgId": "681433c5-fc21-4699-9fe1-8e444c671153" - }, - "outputs": [], - "source": [ - "frontier = compute_posterior_pareto_frontier(\n", - " experiment=ehvi_experiment,\n", - " data=ehvi_experiment.fetch_data(),\n", - " primary_objective=metric_b,\n", - " secondary_objective=metric_a,\n", - " absolute_metrics=[\"a\", \"b\"],\n", - " num_points=20,\n", - ")\n", - "\n", - "render(plot_pareto_frontier(frontier, CI_level=0.90))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "77b2dbce-f1e4-443a-8f81-2e1cbe207301" - }, - "source": [ - "## qNParEGO\n", - "This is a good alternative algorithm for multi-objective optimization when qNEHVI runs too slowly." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "2f796182-558b-47aa-8072-4dbf40123133" - }, - "outputs": [], - "source": [ - "parego_experiment = build_experiment()\n", - "parego_data = initialize_experiment(parego_experiment)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "72999188-90f5-43e0-b1d9-d468e7d51191" - }, - "outputs": [], - "source": [ - "parego_hv_list = []\n", - "parego_model = None\n", - "for i in range(N_BATCH):\n", - " parego_model = get_MOO_PAREGO(\n", - " experiment=parego_experiment,\n", - " data=parego_data,\n", - " )\n", - " generator_run = parego_model.gen(1)\n", - " trial = parego_experiment.new_trial(generator_run=generator_run)\n", - " trial.run()\n", - " parego_data = Data.from_multiple_data([parego_data, trial.fetch_data()])\n", - "\n", - " exp_df = exp_to_df(parego_experiment)\n", - " outcomes = np.array(exp_df[[\"a\", \"b\"]], dtype=np.double)\n", - " try:\n", - " hv = observed_hypervolume(modelbridge=parego_model)\n", - " except:\n", - " hv = 0\n", - " print(\"Failed to compute hv\")\n", - " parego_hv_list.append(hv)\n", - " print(f\"Iteration: {i}, HV: {hv}\")\n", - "\n", - "parego_outcomes = np.array(exp_to_df(parego_experiment)[[\"a\", \"b\"]], dtype=np.double)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "67ded85f-7c58-4c31-8df5-b0d8d07e4299", - "showInput": false - }, - "source": [ - "## Plot qNParEGO Pareto Frontier based on model posterior \n", - "\n", - "The plotted points are samples from the fitted model's posterior, not observed samples." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "3b1f39fd-ef75-4ea4-865b-f7b54b90da07" - }, - "outputs": [], - "source": [ - "frontier = compute_posterior_pareto_frontier(\n", - " experiment=parego_experiment,\n", - " data=parego_experiment.fetch_data(),\n", - " primary_objective=metric_b,\n", - " secondary_objective=metric_a,\n", - " absolute_metrics=[\"a\", \"b\"],\n", - " num_points=20,\n", - ")\n", - "\n", - "render(plot_pareto_frontier(frontier, CI_level=0.90))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "collapsed": true, - "hidden_ranges": [], - "originalKey": "a67f7345-1777-4372-8704-bb80c4c4e783" - }, - "source": [ - "## Plot empirical data" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "collapsed": true, - "hidden_ranges": [], - "originalKey": "de878adc-0eb2-4599-8c1b-e0adbc0c0765", - "showInput": false - }, - "source": [ - "#### Plot observed hypervolume, with color representing the iteration that a point was generated on.\n", - "\n", - "To examine optimization process from another perspective, we plot the collected observations under each algorithm where the color corresponds to the BO iteration at which the point was collected. The plot on the right for $q$NEHVI shows that the $q$NEHVI quickly identifies the Pareto frontier and most of its evaluations are very close to the Pareto frontier. $q$NParEGO also identifies has many observations close to the Pareto frontier, but relies on optimizing random scalarizations, which is a less principled way of optimizing the Pareto front compared to $q$NEHVI, which explicitly attempts focuses on improving the Pareto front. Sobol generates random points and has few points close to the Pareto front." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "c6296697-ef07-422d-b965-35e4e5104a12" - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from matplotlib import pyplot as plt\n", - "\n", - "%matplotlib inline\n", - "\n", - "from matplotlib.cm import ScalarMappable\n", - "\n", - "fig, axes = plt.subplots(1, 3, figsize=(20, 6))\n", - "algos = [\"Sobol\", \"qNParEGO\", \"qNEHVI\"]\n", - "outcomes_list = [sobol_outcomes, parego_outcomes, ehvi_outcomes]\n", - "cm = plt.cm.get_cmap(\"viridis\")\n", - "BATCH_SIZE = 1\n", - "\n", - "n_results = N_BATCH * BATCH_SIZE + N_INIT\n", - "batch_number = torch.cat(\n", - " [\n", - " torch.zeros(N_INIT),\n", - " torch.arange(1, N_BATCH + 1).repeat(BATCH_SIZE, 1).t().reshape(-1),\n", - " ]\n", - ").numpy()\n", - "for i, train_obj in enumerate(outcomes_list):\n", - " x = i\n", - " sc = axes[x].scatter(\n", - " train_obj[:n_results, 0],\n", - " train_obj[:n_results, 1],\n", - " c=batch_number[:n_results],\n", - " alpha=0.8,\n", - " )\n", - " axes[x].set_title(algos[i])\n", - " axes[x].set_xlabel(\"Objective 1\")\n", - " axes[x].set_xlim(-150, 5)\n", - " axes[x].set_ylim(-15, 0)\n", - "axes[0].set_ylabel(\"Objective 2\")\n", - "norm = plt.Normalize(batch_number.min(), batch_number.max())\n", - "sm = ScalarMappable(norm=norm, cmap=cm)\n", - "sm.set_array([])\n", - "fig.subplots_adjust(right=0.9)\n", - "cbar_ax = fig.add_axes([0.93, 0.15, 0.01, 0.7])\n", - "cbar = fig.colorbar(sm, cax=cbar_ax)\n", - "cbar.ax.set_title(\"Iteration\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "ca12287f-c7b8-4ef8-8eb9-57760eda5fed", - "showInput": true - }, - "source": [ - "# Hypervolume statistics\n", - "The hypervolume of the space dominated by points that dominate the reference point." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "ec8b764b-c27d-4722-9e3d-d81cebb3624a" - }, - "source": [ - "#### Plot the results\n", - "The plot below shows a common metric of multi-objective optimization performance when the true Pareto frontier is known: the log difference between the hypervolume of the true Pareto front and the hypervolume of the approximate Pareto front identified by each algorithm. The log hypervolume difference is plotted at each step of the optimization for each of the algorithms.\n", - "\n", - "The plot show that $q$NEHVI vastly outperforms $q$NParEGO which outperforms the Sobol baseline." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "d50b98bc-5ab1-4826-a5b2-474a13f4bae0" - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from matplotlib import pyplot as plt\n", - "\n", - "%matplotlib inline\n", - "\n", - "iters = np.arange(1, N_BATCH + 1)\n", - "log_hv_difference_sobol = np.log10(branin_currin.max_hv - np.asarray(sobol_hv_list))[\n", - " : N_BATCH + 1\n", - "]\n", - "log_hv_difference_parego = np.log10(branin_currin.max_hv - np.asarray(parego_hv_list))[\n", - " : N_BATCH + 1\n", - "]\n", - "log_hv_difference_ehvi = np.log10(branin_currin.max_hv - np.asarray(ehvi_hv_list))[\n", - " : N_BATCH + 1\n", - "]\n", - "\n", - "fig, ax = plt.subplots(1, 1, figsize=(8, 6))\n", - "ax.plot(iters, log_hv_difference_sobol, label=\"Sobol\", linewidth=1.5)\n", - "ax.plot(iters, log_hv_difference_parego, label=\"qNParEGO\", linewidth=1.5)\n", - "ax.plot(iters, log_hv_difference_ehvi, label=\"qNEHVI\", linewidth=1.5)\n", - "ax.set(\n", - " xlabel=\"number of observations (beyond initial points)\",\n", - " ylabel=\"Log Hypervolume Difference\",\n", - ")\n", - "ax.legend(loc=\"lower right\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "customInput": null, + "hidden_ranges": [], + "originalKey": "95e7a97a-bf78-48d4-a0c1-c0e8dfc4fed9", + "showInput": true + }, + "source": [ + "# Multi-Objective Optimization Ax API\n", + "### Using the Service API\n", + "For Multi-objective optimization (MOO) in the `AxClient`, objectives are specified through the `ObjectiveProperties` dataclass. An `ObjectiveProperties` requires a boolean `minimize`, and also accepts an optional floating point `threshold`. If a `threshold` is not specified, Ax will infer it through the use of heuristics. If the user knows the region of interest (because they have specs or prior knowledge), then specifying the thresholds is preferable to inferring it. But if the user would need to guess, inferring is preferable.\n", + "\n", + "\n", + "To learn more about how to choose a threshold, see [Set Objective Thresholds to focus candidate generation in a region of interest](#Set-Objective-Thresholds-to-focus-candidate-generation-in-a-region-of-interest). See the [Service API Tutorial](/tutorials/gpei_hartmann_service.html) for more infomation on running experiments with the Service API." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "hidden_ranges": [], + "originalKey": "06bf2029-0ea4-40b4-aced-956f1411cb6e", + "showInput": true + }, + "outputs": [], + "source": [ + "import torch\n", + "from ax.plot.pareto_frontier import plot_pareto_frontier\n", + "from ax.plot.pareto_utils import compute_posterior_pareto_frontier\n", + "from ax.service.ax_client import AxClient\n", + "from ax.service.utils.instantiation import ObjectiveProperties\n", + "\n", + "# Plotting imports and initialization\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "from botorch.test_functions.multi_objective import BraninCurrin\n", + "\n", + "init_notebook_plotting()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Load our sample 2-objective problem\n", + "branin_currin = BraninCurrin(negate=True).to(\n", + " dtype=torch.double,\n", + " device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1628191188673, + "executionStopTime": 1628191188746, + "hidden_ranges": [], + "originalKey": "c687973d-1b09-4a8f-9108-1f74adf64d4d", + "requestMsgId": "ea523260-8896-48e4-a62f-3530d268b209", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client = AxClient()\n", + "ax_client.create_experiment(\n", + " name=\"moo_experiment\",\n", + " parameters=[\n", + " {\n", + " \"name\": f\"x{i+1}\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " }\n", + " for i in range(2)\n", + " ],\n", + " objectives={\n", + " # `threshold` arguments are optional\n", + " \"a\": ObjectiveProperties(minimize=False, threshold=branin_currin.ref_point[0]),\n", + " \"b\": ObjectiveProperties(minimize=False, threshold=branin_currin.ref_point[1]),\n", + " },\n", + " overwrite_existing_experiment=True,\n", + " is_test=True,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "customInput": null, + "hidden_ranges": [], + "originalKey": "70fd45e1-a2ce-4034-bb44-086507833472", + "showInput": true + }, + "source": [ + "### Create an Evaluation Function\n", + "In the case of MOO experiments, evaluation functions can be any arbitrary function that takes in a `dict` of parameter names mapped to values and returns a `dict` of objective names mapped to a `tuple` of mean and SEM values." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1628191201840, + "executionStopTime": 1628191201871, + "hidden_ranges": [], + "originalKey": "a0e4fa8d-ebc7-4dc6-b370-ed4a83e3208f", + "requestMsgId": "9cfd336d-c317-4d1c-a028-42d45903bac6", + "showInput": true + }, + "outputs": [], + "source": [ + "def evaluate(parameters):\n", + " evaluation = branin_currin(\n", + " torch.tensor([parameters.get(\"x1\"), parameters.get(\"x2\")])\n", + " )\n", + " # In our case, standard error is 0, since we are computing a synthetic function.\n", + " # Set standard error to None if the noise level is unknown.\n", + " return {\"a\": (evaluation[0].item(), 0.0), \"b\": (evaluation[1].item(), 0.0)}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "customInput": null, + "hidden_ranges": [], + "originalKey": "4200cd7c-8e13-4cbf-b0c1-72b52d900aaf", + "showInput": true + }, + "source": [ + "### Run Optimization" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "executionStartTime": 1628191208271, + "executionStopTime": 1628191238749, + "originalKey": "f91b1a1e-c78a-4262-a211-a13115c007c1", + "requestMsgId": "842a1cf8-97a3-43d6-83a3-f258ea96ae20", + "showInput": true + }, + "outputs": [], + "source": [ + "for i in range(25):\n", + " parameters, trial_index = ax_client.get_next_trial()\n", + " # Local evaluation here can be replaced with deployment to external system.\n", + " ax_client.complete_trial(trial_index=trial_index, raw_data=evaluate(parameters))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "customInput": null, + "hidden_ranges": [], + "originalKey": "e0a6feb4-8c38-42e4-9d7c-62b79307e043", + "showInput": false + }, + "source": [ + "### Plot Pareto Frontier" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "customInput": null, + "executionStartTime": 1628191262231, + "executionStopTime": 1628191270720, + "hidden_ranges": [], + "originalKey": "c2c2b222-6b68-4f1a-839f-16b50019ada4", + "requestMsgId": "563d345b-573c-4d93-a480-5db88a283250", + "showInput": true + }, + "outputs": [], + "source": [ + "objectives = ax_client.experiment.optimization_config.objective.objectives\n", + "frontier = compute_posterior_pareto_frontier(\n", + " experiment=ax_client.experiment,\n", + " data=ax_client.experiment.fetch_data(),\n", + " primary_objective=objectives[1].metric,\n", + " secondary_objective=objectives[0].metric,\n", + " absolute_metrics=[\"a\", \"b\"],\n", + " num_points=20,\n", + ")\n", + "render(plot_pareto_frontier(frontier, CI_level=0.90))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "f4f6ce29-4a0c-4ac5-84a7-f83a4de9112c", + "showInput": true + }, + "source": [ + "# Deep Dive\n", + "\n", + "In the rest of this tutorial, we will show two algorithms available in Ax for multi-objective optimization\n", + "and visualize how they compare to eachother and to quasirandom search.\n", + "\n", + "MOO covers the case where we care about multiple\n", + "outcomes in our experiment but we do not know before hand a specific weighting of those\n", + "objectives (covered by `ScalarizedObjective`) or a specific constraint on one objective \n", + "(covered by `OutcomeConstraint`s) that will produce the best result.\n", + "\n", + "The solution in this case is to find a whole Pareto frontier, a surface in outcome-space\n", + "containing points that can't be improved on in every outcome. This shows us the\n", + "tradeoffs between objectives that we can choose to make." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "e04a24fa-dcfc-4430-960f-9c0e772fd754", + "showInput": true + }, + "source": [ + "### Problem Statement\n", + "\n", + "Optimize a list of M objective functions $ \\bigl(f^{(1)}( x),..., f^{(M)}( x) \\bigr)$ over a bounded search space $\\mathcal X \\subset \\mathbb R^d$.\n", + "\n", + "We assume $f^{(i)}$ are expensive-to-evaluate black-box functions with no known analytical expression, and no observed gradients. For instance, a machine learning model where we're interested in maximizing accuracy and minimizing inference time, with $\\mathcal X$ the set of possible configuration spaces" + ] + }, + { + "attachments": { + "pareto_front%20%281%29.png": { + "image/png": "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AACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAA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AAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhnr0HAACALJZl+fY/67p2mQQAAAAAAAAAAAAAAOpZ/Jk+AAD8zFn/5MwMAAAAAAAAAAAAAADXiVoBAJjads76JydnAAAAAAAAAAAAAAC44tF7AAAA6GZ/0Xr0lwEAAAAAAAAAAAAAgG9ErQAAAAAAAAAAAAAAAAAAhBO1AgAwqRObVy1rBQAAAAAAAAAAAACA00StAAAAAAAAAAAAAAAAAACEE7UCADCj0ztXLWsFAAAAAAAAAAAAAIBzRK0AAAAAAAAAAAAAAAAAAIQTtQIAMJ2L21YtawUAAAAAAAAAAAAAgBNErQAAAAAAAAAAAAAAAAAAhBO1AgAwlyZ7Vi1rBQAAAAAAAAAAAACAo0StAABMpGGMqmsFAAAAAAAAAAAAAIBDRK0AAAAAAAAAAAAAAAAAAIQTtQIAMIvmu1UtawUAAAAAAAAAAAAAgP1ErQAATCEoQNW1AgAAAAAAAAAAAADATqJWAAC4RNcKAAAAAAAAAAAAAAB7iFoBAKhPdwoAAAAAAAAAAAAAAN2JWgEAKO6GolU0CwAAAAAAAAAAAAAAb4laAQCo7LbcVNcKAAAAAAAAAAAAAADbRK0AANCGrhUAAAAAAAAAAAAAADaIWgEAKEtlCgAAAAAAAAAAAAAAeYhaAQCoqUvRKqMFAAAAAAAAAAAAAIDfiFoBACioY1yqawUAAAAAAAAAAAAAgJdErQAAVNM9K+0+AAAAAAAAAAAAAAAAJCRqBQCA9nStAAAAAAAAAAAAAADwjagVAIBS1KQAAAAAAAAAAAAAAJCTqBUAgDpSFa2phgEAAAAAAAAAAAAAgO5ErQAAFJEwIk04EgAAAAAAAAAAAAAA9CJqBQCggrT5aNrBAAAAAAAAAAAAAADgZqJWAACGlzwcTT4eAAAAAAAAAAAAAADcQ9QKAMDYhkhGhxgSAAAAAAAAAAAAAABCiVoBABjYQLHoQKMCAAAAAAAAAAAAAEAEUSsAAKMaLhMdbmAAAAAAAAAAAAAAAGhI1AoAwJAGDUQHHRsAAAAAAAAAAAAAAK4TtQIAMJ6h09ChhwcAAAAAAAAAAAAAgNNErQAADKZAFFrgFgAAAAAAAAAAAAAA4ChRKwAAIymTg5a5EQAAAAAAAAAAAAAA2EnUCgDAMIqFoMVuBwAAAAAAAAAAAAAAtolaAQAYQ8kEtORNAQAAAAAAAAAAAADAS8u6rr1nAACAN2rHn87kAAAAAAAADGH5138+/7H++6++k/CNVwMAAADAKEStAABkV7to/eRYDgAAAAAAQGZfzeQX8WQe3g4AAAAAA3n0HgAAALbMULR+THObAAAAAAAAjOhnM0lyXhkAAAAAadnUCgBAXrOlng7nAAAAAAAApLLRRtoFmspvb8prAgAAACAbm1oBAEgqomhtWI1GBKizRbwAAAAAAABkpmgdyG9vxMpWAAAAALKxqRUAgIziitZW39z2215+OQAAAAAAAPRi8+eIvDUAAAAA8hO1AgCQS3Qm2jZqbfiFv30/AAAAAAAA3MmC1qF5fQAAAAAk9+g9AAAA/E9QIBoqqD4d8VEAAAAAAAAwOknk6DZe08bLBQAAAIDbiFoBAMgiLuOM3nqqawUAAAAAAKAARWsNulYAAAAAMhO1AgDQ37Is4xatoVcJfTIAAAAAAADwRdFaia4VAAAAgLRErQAAdBYabd5TtEZfS9cKAAAAAABAKEVrPbpWAAAAAHIStQIA0E30GtI7i9boK1rZCgAAAAAAQBBFa1W6VgAAAAASErUCANBHdKJ5f9F6w3V1rQAAAAAA8Dd7d4/curEtYFRQKeJEFDo+Ho2HdkZzFDvkRJTiBXwl61ISiJ9G997da5WTa+uQ3WgQom/5qw2UpWjtm64VAAAAgGimVv+tPwAAw2qbs5Z69zrvsu/dAQAAAAAAYA1F6yAcNAAAAABxiFoBAKinwqDRh99v60StBd/oyBoAAAAAAADgJwOGjutnk/Z3BQY8bgAAAABiErUCAFBDhcLzaV3kWS1qLfhex1cCAAAAAAAAnw2SOK6vWBd0c0EGOXQAAAAAgntpvQAAAHpWp+q8Cdh2zvNc4Qp8vEXAKwAAAAAAAEBARVLPsIrv7uMFOy4/p9f3jncHAAAAQCgmtQIAUFjNkPXD+q+1NSe1ln3HTXzPBwAAAAAA4FvLzWfqsrFarJv3KnV8+gAAAABk8dx6AQAAdEXA+VWT5TU5CAAAAAAAAFJL2jROr++3v2q+Y7X3KivpEQMAAADQE5NaAQAoJkXRWn9Sa9n33coXfgAAAAAAAD4s1JhJc8e2fWl/Fy3pjgAAAABI5KX1AgAA6ESKorWheZ5NTwUAAAAAAKChvPNFv7VjOyuLzfWvfPvJnkLQ6fW9p+0AAAAAEJBJrQAAFJCoaG01qbX4AtbznR8AAAAAAIDlUDNXx7g1Z929u/VvlOsCPvV1PwAAAACQi6gVAIACKoeaR77ENo9aC65hJd/5AQAAAAAABtdTwVg/NF35jrku41NfdwUAAAAAiTy3XgAAAOlJNLeqvIUmc3QBAAAAAACguCajU+frZc2rbZ0fCwAAAABjMqkVAICjajaTx7++RpjUWnYla/jaDwAAAAAAMKw+BnI2yVl3rCHL9bzp494AAAAAIBeTWgEAyGGe587KzP52BAAAAAAAQDR9VIsRitaVL55rXuvyjnLtBQAAAIAsRK0AACTQcfzZ8dYAAAAAAADguCBF6/q30IICAAAAwAJRKwAAoY0wznSEPQIAAAAAAFBfB2NaQxWt698oUddqWCsAAAAAlYlaAQCIa6jUc6jNAgAAAAAAcLYOcsSARet6HVz/m242AgAAAEAQolYAACIac3jpmLsGAAAAAACgvoAV6J3IRWv8q7dJZ9sBAAAAIDhRKwAARxXvMAcPO4unrYNfTwAAAAAAgAEtF6EixuPWXMNEM06Xt5NoIwAAAADEJ2oFACAQo0o/uA4AAAAAAAAMK/KY1k3koAAAAABwZ/LfygMAUMQ0TUf+eLXvpQfX+aHmF+kja/aFHwAAAAAAYDTZx7QmKlrXLLX5ItfLfucMaOWHxdkBAAAAoby0XgAAAJ2Y53lHeym5XON2lVxeAAAAAAAAHso+GjT7+r+aXt/7SAq72Ug6xz8UC6/gTAEAAID6RK0AABSzqWvVW271ccVWXmRXGAAAAAAAgDs9BWwR9jJfLz1VuJ1tJ6+ap3D3XhE+VgAAAED3RK0AAJS0PFNUZlnEw7rVdQYAAAAAABhT9iIx+/p/0s2M0242ElCQm//zMpw1AAAAcBJRKwAA5Ykq63CdAQAAAAAAGJPcjg4ECVl/8rE8HzcAAACgrMl/Bw8AwFB+mm66lS/SAAAAAAAAhPIwkAtepm0K/ELtZeXKQ615QfYbKb7gLesCRw8AAAAUYVIrAAAAAAAAAAAAwInytqwfzG4FAAAAinhuvQAAAAAAAAAAAAAOMV0zvixN48NbJctG4phe3zu7aLcddbYpAAAAoBqTWgEAAAAAAAAAAGhJHUeXur+xbxvUzAMAAACbmNQKAAAAAAAAAACQWPfh3J1oBV209VQw2i231WiDTIfaLAAAAHCcqBUAAAAAAAAAAKBnA1aXMWUJ/9wwu42cd468dwAAAGATUSsAAAAAAAAAAADNCOHogzv5SdoKAAAArCBqBQAAAAAAAAAAyOphP2bqJjs8vG2Ei58pOe+4IAAAAMACUSsAAAAAAAAAAADUoPTrjHpzgSsDAAAAfEvUCgAAAAAAAAAAkJJmjIYGv/3krGu4SgAAAMBXolYAAAAAAAAAAIA+zddL6yU80EfwFv8679Dlpkrp476tRtoKAAAAfCZqBQAAAAAAAAAAAHhMn7mb6wYAAADciFoBAAAAAAAAAADyUYgl1dPB9bSXNUbbb3GSYAAAAOBJ1AoAAAAAAAAAAACwTI1ZiisJAAAAgxO1AgAAAAAAAAAAdGi+XlovgdzcQjfmixbnegIAAMDIRK0AAAAAAAAAAADJSMIIovtbsfsNtiIVBgAAgGGJWgEAAAAAAAAAAADuqS7P5goDAADAgEStAAAAAAAAAAAAUI+QLwXHVIfrDAAAAKMRtQIAAAAAAAAAAGSypgGbr5cKK6F7a26k/qLE6fW9v01F5moDAADAUEStAAAAAAAAAAAAAE9PAstGXHYAAAAYh6gVAAAAAAAAAAAAQFrZkosPAAAAgxC1AgAAAAAAAAAAAKMTVTbnCAAAAGAEolYAAAAAAAAAAIA01kRf8/VSYSVFJFrqsNacUQctYgdb6IODAAAAgO6JWgEAAAAAAAAAAIBxCSlDcRwAAADQN1ErAAAAAAAAAAAAMCgJZUAOBQAAADomagUAAAAAAAAAAABGJJ4My9EAAABAr0StAAAAAAAAAAAAOai8YtpxLv0dZcYdZVzzUBwQAAAAdEnUCgAAAAAAAAAAQDPz9dJ6CYxIMJmCYwIAAID+iFoBAAAAAAAAAAD60X0jKnKrr/ubish85AEAAKAzolYAAAAAAAAAAADYSXGXkVPLxXkBAABAT0StAAAAAAAAAAAAtGQQKDUpJAEAAAAaErUCAAAAAAAAAAAAQ1C0JuXgAAAAoBuiVgAAAAAAAAAAgAT6brqSDmvt+1C2in814q+QBY4PAAAA+iBqBQAAAAAAAAAAIBNtG4zJZx8AAAA6IGoFAAAAAAAAAACgvXTDWvV1uTgvAAAAgAhErQAAAAAAAAAAAEDPFK3dcJQAAACQnagVAAAAAAAAAACgE+mGnd5Zv/7mYVvzBVSW/daiJ6N9+gAAAKAzolYAAAAAAAAAAACgWxpIAAAAgDhErQAAAAAAAAAAAESRYljr17c2yDQsRWuXHCsAAADkJWoFAAAAAAAAAAAgkOBdq5oOIvBJBAAAgKRErQAAAAAAAAAAAMSSa/DpfL3o62JyLgAAAADRiFoBAAAAAAAAAAAIZ2XXWrla/Pp2ufrboShau+eIAQAAICNRKwAAAAAAAAAAQHRjtluhutbp9X3MU9jEJaIytxwAAACkI2oFAAAAAAAAAAAgqCBd60+vb0xrWFpHAAAAgJhErQAAAAAAAAAAAMTVvGs9o2hVw0IpAmYAAADIRdQKAAAAAAAAAABAaOu71uJ5mxmtGakcAQAAAMIStQIAAAAAAAAAABDd+oi0VNC4kMgqWiEUGTMAAAAk8tJ6AQAAAAAAAAAAAPDYfL2sTNduP7YvPX34ForW4PSNAAAAAJGJWgEAAAAAAAAAAMjhFpRuSls//8H1P7+8ACCa6fXdxxMAAABSELUCAAAAAAAAAACQyfqRrR+OT+/Uy6VgTCsAAABAcM+tFwAAAAAAAAAAAADbzNdLzcpU0QrxSZoBAAAgBZNaAQAAAAAAAAAASOnWmp5asp2Rs0pkT6JpBAAAAIhP1AoAAAAAAAAAAEBiH41o2aZRegoAAAAAxYlaAQAAAAAAAAAA6EGRulXLCnlNr+8+wgAAABCcqBUAAAAAAAAAAICu3FVty42rBK4PZef0AgAAAHASUSsAAAAAAAAAAAA9Oztb3ZRTamjhVIa1AgAAQHDPrRcAAAAAAAAAAAAAsJ8xrQAAAABZiFoBAAAAAAAAAACAAkzIBAAAAGCZqBUAAAAAAAAAACA6rSDASib3AgAAQGSiVgAAAAAAAAAAAKhBnHwGBSMAAABAIqJWAAAAAAAAAAAAAAAAAABOJ2oFAAAAAAAAAACAnYwJhYB8MAEAACAsUSsAAAAAAAAAAACcbr5eWi8BAAAAABoTtQIAAAAAAAAAAABLws69DLswAAAAAL4lagUAAAAAAAAAAOiEwC8sY1oBAAAA4EnUCgAAAAAAAAAAAPuoiCEsH08AAACISdQKAAAAAAAAAAAAJzKm9SSqRQAAAIB0RK0AAAAAAAAAAAAJCCMJzi0KAAAAwEOiVgAAAAAAAAAAANhs5ZhQqScAAAAAfHhpvQAAAAAAAAAAAAD4xtdqVCAKrDe9vntoAAAAQDQmtQIAAAAAAAAAABDOt3NQp9f3lfNRz2ZMKwAAAADsYFIrAAAAAAAAAABQ0l3sJ+pjq4e9qOmLlQUJie/EXBUAAAAAy0StAAAAAAAAAADAIctpmca1skGCz7bbNKYVAAAAAPZ5br0AAAAAAAAAAAAgq+n1feuwxB1/JJqGWxghklx/bYPfSCMc1mej7RcAAACAfUxqBQAAAAAAAAAANjvYE97+eK4K7m7LH/8z1y6CC96p3qRYJAAAAADEJGoFAAAAAAAAAAA2KFj0ZUlbl7ecZRfU5H6AIKbXd59HAAAACOW59QIAAAAAAAAAAIA0zphRGXzu5crlBd8Fpaw5aAUdAAAAAPzEpFao4e3trcjr/Pr1q8jrVGDLu9lyZKW2/DTkrm05sgG3XMTb21uiLQ94yh7aR9hyZLa824Bbfsqz6wG3/OTePsCWI7PlIwbctS1HZsu72XJkHtpH2HJktrybLUfmoX1EhS3vyPnWF6F/fv+7dT1BtrxGwVOer5eHq4owmXDvlv/a9NOVd7ryfjh43NEeX2t2/ef3vwfv8Wi7ZnCJfjWXYsu7DbjlpyF3bcuRDbhlAIDsTGoFAAAAAAAAAAAeWw7b5uvl9tfXv7/y9f/+Z1vNWIHhq/E1b3e/2pFns4OPJwAAAEBSolYAAAAAAAAAAOCBhX7s25b17gdWvkvArnUTlV3fVg4srbASAAAAAMhL1AoAAAAAAAAAACxZLlprrqQmhSqfKVoBAAAAoAhRKwAAAAAAAAAA8KOfWr6HA1rvfnjlT2Yf1lpHxy3xJtWuw5qitddDUfMCAAAAUJaoFQAAAAAAAAAA+N5C0Vp5JSmEuixJJ80GzCNHLloBAAAAoDhRKwAAAAAAAAAA8I1WRWuEYa1Ji9ChVOhIp9d3RSsAAAAAlCVqBQAAAAAAAAAA7pnRGtzgB1GnaA2ykuACDtcFAAAAIDJRKwAAAAAAAAAAAFEsRJLz9XL769QFrBzQ+jRA0WpkMQAAAADFiVoBAAAAAAAAAID/0XxM69///FXnjQoK2Df2VyRW2NH6nDXgiQMAAABAfKJWAAAAAAAAAADgP82L1ub6a0HTWRjWun6M6ia3lzWgFQAAAADOJmoFAAAAAAAAAAAeUPEF1PehLHStTxsb1GWbXseA1jvLxwQAAAAAX720XgAAAAAAAAAAABCFIaWdmV7f80aYf37/+/c/fy3/zN0du2azu2/yvFdyH08DAAAAAM4gagUAAAAAAAAAAJYcb/m6r+Na5Y7z9dL3tf3z+99fv36t3+NJV2O0nHWl+Xp5e2u9CAAAAACyeW69AAAAAAAAAAAAIIS+88iVXISAGjal8/WiaAUAAACAgkxqBQAAAAAAAAAAfqToy256fe/gEG9bqJYcd3DFDlJ3AwAAAHASk1oBAAAAAAAAAAANW1ZD5ZcV5qYazbqSqwQAAADAPia1AgAAAAAAAAAA3yvSrXWfy6r7Kvt8wYvcXU7wTvefWQAAAAAaErUCAAAAAAAAAMDoojVsf37/23oJmczXy/IJTq/vvXabX/e15mbu9WpU4wICAAAAsJuoFQAAAAAAAAAA+MaA3Vq0uJcdBrxvAQAAACCR59YLAAAAAAAAAAAAWjq15JSJ1vGw5HQQrPTwVpENAwAAAHCEqBUAAAAAAAAAALjXsFv78/vfVm+9g8APAAAAAGA9USsAAAAAAAAAAIzLAM9uyGs5LtGY1jgrAQAAAGATUSsAAAAAAAAAAHCKXMVsrtXu0P0GAQAAAID4pnmeW68BAADqmaapyOv4Ig0AAAAAAPTh29Cx1AjEHRVlw+mL+5rPaOMil3cRbbVEk+v+0WmzUrRbFwAAAAZnUisAAAAAAAAAAAxKEnZQulDKibPA7QEAAABABaJWAAAAAAAAAACgPIFcE+k6W7Jwa5GUWxcAAACiEbUCAAAAAAAAAAAhNEyPxklwx9kpm7gxAAAAAKhD1AoAAAAAAAAAAPynSFkqkGvIWEKKc1MBAAAAUIqoFQAAAAAAAAAAaC9dNZduwR8kx9xJekvk/QwCAAAAjEzUCgAAAAAAAAAA/D+RWB+cIwW5nQAAAAAoSNQKAAAAAAAAAACDOqlVSzf1Md2C11g+3C63zD7LN4OildTcwAAAABDQS+sFAAAAAAAAAAAAzQQJfoIsYyjT67vLjrwZAAAAgMpMagUAAAAAAAAAANgmRQ6aYpFE5hYCAAAAoDhRKwAAAAAAAAAAUIzBj6EsR4kOa3DLN0CKojXFIgEAAAD4TNQKAAAAAAAAAAC01DZLE3YyJnc+3dM8AwAAQEyiVgAAAAAAAAAAgG4Z1soOakAAAAAATiJqBQAAAAAAAAAAythRSGZs59KtWdfKneVDz3WH51otAAAAAKJWAAAAAAAAAAAAAAAAAABOJ2oFAAAAAAAAAAAGNc6QUsNa+dDTmFb4iTsZAAAAwnppvQBI7+3trcjr/Pr1q8jrAAAAQE/8ezcA5OJ3NwAkUuoX95Pf3XyyI4wUHdU0Xy8LZzS9vjuOEShaAQDq8H+YAwD8xKRWAAAAAAAAAACAtVJXf+a1Dq7XojXvygEAAAAGJGoFAAAAAAAAAAAYhfxvWL0WrfCV+xkAAAAiE7UCAAAAAAAAAABH7Rjy2Tw6Mpj0K9dkTM0/jAAAAACMQ9QKAAAAAAAAAAAwkOWCUdfape6PVZcLAAAAkIWoFQAAAAAAAAAAYJVuwjld61CWD7Sbuxpu3NIAAAAQnKgVAAAAAAAAAAA4ZEfXPN4XAAAgAElEQVQDKTpqTtc6iHGK1p72AgAAANAxUSsAAAAAAAAAADAc0eaTrnUA4xStcOOuBgAAgPhErQAAAAAAAAAAAIPStXZM0QoAAABAQKJWAAAAAAAAAABgvx3dY9KaLumyH9K1dmnMorXXfQEAAAD0RNQKAAAAAAAAAAAwNF1rZ8YsWsG9DQAAACmIWgEAAAAAAAAAgLGoNL/StXZj8KK1+w0CAAAAZCdqBQAAAAAAAAAAQNfag8GLVkbm9gYAAIAsRK0AAAAAAAAAAMBOO0LHpN1R0mVvNV8vCzvVtQa3cEDLJ9uZcXYKAAAAkJGoFQAAAAAAAAAAgP/oWjNaLlprrgTqc5MDAABAIqJWAAAAAAAAAABgILLMNXStuSha74y5awAAAIAURK0AAAAAAAAAAEAlSrNEdK1ZKFoZnPscAAAAchG1AgAAAAAAAAAAe4xTNg5bTM3Xy7B7z87ZDb59AAAAgLBErQAAAAAAAAAAAPxIHJiOI2Mc7nYAAABIR9QKAAAAAAAAAACMYpzpsmXdjf1UkYVydzRO54NL0T1HDAAAABm9tF4AAAAAAAAAAAAwBPVRdk4wLEfzk/l6kbIDAAAAhGJSKwAAAAAAAAAAwI/kggABeTgDAABAUqJWAAAAAAAAAABgM8MPgRSkjwAAAAChiFoBAAAAAAAAAIAhCHFhTLrW/jhTAAAAyGua57n1GgAAoJ5pmoq8ji/SAAAAAADA4HYEos0bpH1Ra/NlA8dp2nvisQwAAACpmdQKAAAAAAAAAADwPekU9MFnGQAAACAIUSsAAAAAAAAAAHA6RRnQlqdQH5wjAAAAZCdqBQAAAAAAAAAA+je9vrdeAgCHKFoBAACgA6JWAAAAAAAAAAAAoH+SyNQcHwAAAPRB1AoAAAAAAAAAAPANARX0x+caAAAAoC1RKwAAAAAAAAAAADAKXWtGTg0AAAC6IWoFAAAAAAAAAAA6N72+t14CEIhCMhfnBQAAAD0RtQIAAAAAAAAAAAAQkaIVAAAAOiNqBQAAAAAAAAAAerZvTKuMCvrmM56CYwIAAID+iFoBAAAAAAAAAACA4Qgmg3NAAAAA0CVRKwAAAAAAAAAA0K19Y1qBQcgmw3I0AAAA0CtRKwAAAAAAAAAAADAo8WRADgUAAAA6JmoFAAAAAAAAAAA2S1Ec7R7TmmJ3QCk+8qE4DgAAAOibqBUAAAAAAAAAAOjQ7qIVGJCQMggHAQAAAN0TtQIAAAAAAAAAAL1RtAJbySmbcwQAAAAwAlErAAAAAAAAAABwOpUpEJ+osiEXHwAAAAYhagUAAAAAAAAAAPYIGyAdDGjD7guowBOgCZcdAAAAxiFqBQAAAAAAAAAA+mEkLHCQwLIyFxwAAACGImoFAAAAAAAAAAB22lQiVchNFa1AEfP1orSsw3UGAACA0YhaAQAAAAAAAACAHihagbL0lmdzhQEAAGBA0zzPrdcAAAD1TNNU5HV8kQYAAAAAAPiwqSY9I2EqmLMqrIA7gvkzeNgCAADAsExqBQAAAAAAAAAADmnbJunNgFPJL4tzSQEAAGBkolYAAAAAAAAAAKCegg3q9PquaAUqmK8XHWYpriQAAAAMTtQKAAAAAAAAAAActSlSKlKiylmBytSYB2mDAQAAgKenp2me59ZrAACAeqZpKvI6vkgDAAAAAAB8tTU03Vc3rXmX+XrZUb2qrYA1RPU7eMACAAAAN6JWAADGImoFAAAAAAA41Xld68pX/nhBUStwHl3reh6tAAAAwGeiVgAAxiJqBQAAAAAAONvu1utr+LQ7kd23BuUVsIm09SHPVQAAAOCOqBUAgLGIWgEAAAAAAOqo3HrddVOiVqAOXetPPFEBAACAb4laAQAYi6gVAAAAAACgmmqt1/ERr9++CMBK0tbPPE4BAACABaJWAADGImoFAAAAAACo7NTW69t0yphWoAlpqwcpAAAA8NBL6wUAAAAAAAAAAAA9+2icCuZeuikgoNujacy01WMZAAAAWEnUCgAAAAAAAAAA1HC8bhVNAfGNlrZ6MgMAAACbTPM8t14DAADUM01TkdfxRRoAAAAAAKCsbwOwfa3UjpZMlAWcpOO61ZMTAAAA2EHUCgDAWEStAAAAAAAAfdvXj0mzgFP1lLZ6YAIAAABHvLReAAAAAAAAAAAAAEDPPkLQ1HWrnBUAAAA4TtQKAAAAAAAAAAAMTaYFVJOxbvWQBAAAAAoStQIAAAAAAAAAAJ1IFIkBgwtetwpZAQAAgJOIWgEAAAAAAAAAAADa+JyPtg1chawAAABABaJWAAAAAAAAAABgXCIuII67J9LZjasHIAAAAFCfqBUAAAAAAAAAAOhB2wmHAMX9FJ3ueNzpVwEAAIAgRK0AAAAAAAAAAAAAaShUAQAAgLyeWy8AAAAAAAAAAADgqH1jWoVhAAAAAAA1iVoBAAAAAAAAAAAAAAAAADjdS+sFAAAAAAAAAAAAaXwdiJp32GnelQMAAAAAJCVqBQAAAAAAAAAAHvjast79o7aB6MLyAAAAAACI47n1AgAAAAAAAAAAgNDWJKPT63uustSYVgAAAACA+kStAAAAAAAAAADAj+KnqjtWqGgFAAAAAGhC1AoAAAAAAAAAAHxvay8av4AFAAAAAKAhUSsAAAAAAAAAAPCNFIWqMa0AAAAAAImIWgEAAAAAAAAAgHu7i9aaKWyK7BYAAAAAgA+iVgAAAAAAAAAAYBTGtAIAAAAANCRqBQAAAAAAAAAA/keKCag7FqloBQAAAABoS9QKAAAAAAAAAAD0T9EKAAAAANCcqBUAAAAAAAAAAEgmxSxZAAAAAADuiFoBAAAAAAAAAID/HOxFKwxE3bFCY1oBAAAAACIQtQIAAAAAAAAAAGkoWgEAAAAA8nppvQBI7+3trcjr/Pr1q8jrAAAAQE/8ezcA5OJ3NwAkUuoX95Pf3YSnaAX64F+6ASAXv7sBAH5iUisAAAAAAAAAAFDG2QXp1jGtilYAAAAAgFBErQAAAAAAAAAAQAKKVgAAAACA7EStAAAAAAAAAABAAadGpIpWAAAAAIAOiFoBAAAAAAAAAICjFK0AAAAAADwkagUAAAAAAAAAAA5RtAIAAAAAsIaoFQAAAAAAAAAA+M+mKHS+XhStAAAAAACs9NJ6AQAAAAAAAAAAQDJ12lFFKwAAAABAZ0StAAAAAAAAAADAKtWq0a0565OiFQAAAAAgg+fWCwAAAAAAAAAAAGL5KRDd0ZrusGNAq6IVAAAAACAFUSsAAAAAAAAAALDW2V3rjqL1pJUAAAAAAFCcqBUAAAAAAAAAALi3EIue1LVOr++KVgAAAACAvr20XgAAAAAAAAAAABDRfL38VJne/n6ppnRHJStnBQAAAADIyKRWAAAAAAAAAABgj+MjW3dMZ31StAIAAAAApGVSKwAAAAAAAAAA8L2FYa03H/90a2i6L4iVswIAAAAApCZqBQAAAAAAAAAAfnTrSB82qJ9/4Kf09MhkVzkrAAAAAEAHRK0AAAAAAAAAAMADD0e2fnYkXv32rQu+GgAAAAAADT23XgAAAAAAAAAAAJBA/bh0vl4UrQAAAAAAPTGpFQAAAAAAAAAAWOWWmJYdxPrTuwAAAAAA0B9RKwAAAAAAAAAAsMFJaauWFQAAAACge6JWAAAAAAAAAABgs48G9UjdKmQFAAAAABiKqBUAAAAAAAAAANjv2zD1a+mqXwUAAAAAQNQKAAAAAAAAAAAUJmEFAAAAAOCr59YLAAAAAAAAAAAAAAAAAACgf9M8z63XAAAA9UzTVOR1fJEGAAAAAAAAAAAAAIBNTGoFAAAAAAAAAAAAAAAAAOB0olYAAAAAAAAAAAAAAAAAAE4nagUAAAAAAAAAAAAAAAAA4HSiVgAAAAAAAAAAAAAAAAAATidqBQAAAAAAAAAAAAAAAADgdKJWAAAAAAAAAAAAAAAAAABOJ2oFAAAAAAAAAAAAAAAAAOB0olYAAAAAAAAAAAAAAAAAAE4nagUAAAAAAAAAAAAAAAAA4HSiVgAAAAAAAAAAAAAAAAAATidqBQAAAAAAAAAAAAAAAADgdKJWAAAAAAAAAAAAAAAAAABOJ2oFAAAAAAAAAAAAAAAA+D/27iCpkWMJwLCY4AgcgRuwIDgd4nQTLLgBR+AOvAV+GAup1Wp1dVVmfl/MwnZgUV1VEuMY/5EANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmhO1AgAAAAAAAAAAAAAAAADQnKgVAAAAAAAAAAAAAAAAAIDmRK0AAAAAAAAAAAAAAAAAADQnagUAAAAAAAAAAAAAAAAAoDlRKwAAAAAAAAAAAAAAAAAAzYlaAQAAAAAAAAAAAAAAAABoTtQKAAAAAAAAAAAAAAAAAEBzolYAAAAAAAAAAAAAAAAAAJoTtQIAAAAAAAAAAAAAAAAA0JyoFQAAAAAAAAAAAAAAAACA5kStAAAAAAAAAAAAAAAAAAA0J2oFAAAAAAAAAAAAAAAAAKA5USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACaE7UCAAAAAAAAAAAAAAAAANCcqBUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmhO1AgAAAAAAAAAAAAAAAADQnKgVAAAAAAAAAAAAAAAAAIDmRK0AAAAAAAAAAAAAAAAAADQnagUAAAAAAAAAAAAAAAAAoDlRKwAAAAAAAAAAAAAAAAAAzYlaAQAAAAAAAAAAAAAAAABoTtQKAAAAAAAAAAAAAAAAAEBzolYAAAAAAAAAAAAAAAAAAJoTtQIAAAAAAAAAAAAAAAAA0JyoFQAAAAAAAAAAAAAAAACA5kStAAAAAAAAAAAAAAAAAAA0J2oFAAAAAAAAAAAAAAAAAKA5USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaO629wIgvL9//67yOk9PT6u8DgAAAGTiv7sBIBY/uwEgkLV+cO/87AaATfiPbgCIxc9uAIBTTGoFAAAAAAAAAAAAAAAAAKA5USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACaE7UCAAAAAAAAAAAAAAAAANCcqBUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmrvtvQAAAAAY3cfD/ddf3L29910JBxwNAL89Pu+//uL1Zd9zHRzjdAAAAAAAAAAAijOpFQAAAE76eLj/ziZ3PxJKRnBwNE4HgMfn/XczufvRTzKIg9NxQAAAAAAAAAAABYlaAQAA4DiRZDiODKAyhWRETg0AAAAAAAAAoBpRKwAAABwy9jOEu7f33//Q2QEUZOZnFK8v+9//0PEBAAAAAAAAAJQiagUAAID/mEgij1aUdHTqRHStAHVM9JBHE0r6OnUoulYAAAAAAAAAgCJErQAAAPCvUzHk3du7onVMulaAyk6VkK8ve0XrsHStAAAAAAAAAACViVoBAABgt9vtPh7uJ4rWjRfDRSa6VmkrQFaPz/uJonXTpXC5ia5V2goAAAAAAAAAkJuoFQAAAKameipaQ5g4Jl0rQD4T3aOiNYqJk9K1AgAAAAAAAAAkJmoFAACgOkVrDrpWgCIUrWnoWgEAAAAAAAAAChK1AgAAUJqiNRNdK0B6itZkdK0AAAAAAAAAANWIWgEAAKhL0ZqPrhUgMUVrSrpWAAAAAAAAAIBSbj4/P3uvAQAAtnNzc7PK6/iNNCSgaE3M4QLko2jNzfkCAAAAAAAAABRhUisAAAAViR5zM68VIBnFY3rmtQIAAAAAAAAAFCFqBQAAoBxFawW6VoA0FK1F6FoBAAAAAAAAACoQtQIAAFCLovWnj4f771+917I+XStAAhGL1sfnfZQIc7R16loBAAAAAAAAANK7+fz87L0GAADYzs3NzSqv4zfSEJSi9affu5FyExw6QFzhitajCx5tqeMvMty5AwAAAAAAAAAw323vBQAAAMBGDOf86ehufDzcl+o8qz0vQCxpJnN+P0jfIDPHfj4+73WtAAAAAAAAAAChmdQKAEAtJrVCWdNFa7WysdrwUqcPEM50gTls1jgzHN1y/QMuaY6gFwAAAAAAAAAAgLNMagUAAKC6Uk1jzXG1d2/vNR8cIKUEQeNBsbn6EyUYyvr6sk/wFAAAAAAAAAAA/GZSKwAAtZjUCjVVG0x61MyqM/GGuAYAUUzUjIMXrat0mJc+4/XfdNhdjXsTAAAAAAAAAAA4xaRWAAAAkjOi0w6c9fFwr2sFGIT5nBvvQNA69PF5H3TlAAAAAAAAAADF/em9AAAAAGhouudM3zF+PNwrWr9NH7eNAhjBdM8pYlzd4Fs6vTz9MwAAAAAAAABARKJWAAAA0ipbtH61rCrN33StACNTtG4sxJbqWgEAAAAAAAAAkrntvQAAAABgBYJMAGC+EEUrAAAAAAAAAAD53Hx+fvZeAwAAbOfm5maV1/EbaRhf+jGtjSrWBDtzVvq7ARBRjjGtUQaHRtnPbzmuBwAAAAAAAAAAO1ErAADViFqhiATVYq/JqyE253oJbghAJmmSxRBRa6D9/CnNJQEAAAAAAAAAKO5P7wUAAAAAAABbEH8CAAAAAAAAANCXqBUAAIBsDOE8UPCRz5rek15jcgFqMoFzG68v+9CbOb34EDNyAQAAAAAAAADYiVoBAABIRo747e7t/etX74WE5CIBbEOLuI3QOetM7hIAAAAAAAAAQAi3vRcAAAAA26lQeFZ4xlXcvb0rVwEGVyHFbC3THr6+7JWrAAAAAAAAAADRmdQKAABAHtONYuLa83soa+JnbGF6uySvAK1NB4qZaswuXl/2+fZw+okkrwAAAAAAAAAA4zOpFQAAAIJRrgIAE/K1rAAAAAAAAAAApHHz+fnZew0AALCdm5ubVV7Hb6RhQGXHtM4xf+howY1ycwK5dHyu44ORpRzT2n1SaNB9u1TKy5PVpW8KxwcAAAAAAAAA6ZnUCgAAQAaXpm4w08fDvTBye2u9o0+9jjOF7rrHn8noAH96fN7bkO2t9aY+9TrOFAAAAAAAAADSELUCAACQn4CNCXdv76Lo7jY+goNv5yMCRpOsXvt+nNVT3mQbNd/ry14X3d3GR3Dw7cpefgAAAAAAAABIQNQKAABAeIpEmjKstZFx3rk/V+KsYQNlc8RTGd78DRHyzWRYayPjvHl/rsRZAwAAAAAAAEAsolYAAAAANjJOyHrK9wrVrcBmJHmMbJyQ9ZTvFXorAQAAAAAAAEAIN5+fn73XAAAA27m5uVnldfxGGsZxtpFTpu0uKQnLbpeL1NT4LesERw/rOhvIhc7Sjj5d6CcaWe671N34LesERw8AAAAAAAAAIzOpFQAAAIBWQuesX8xuBaCO0C3rN7NbAQAAAAAAAGBkJrUCAFCLSa2QjOmaM5nUOofrtKIELesprgFcI/1oTZNaN5b+Rm0pR856lGsAAAAAAAAAAEMxqRUAAACA1STOWb8Y3ApAMolz1i8GtwIAAAAAAADAUP70XgAAAAAslL6dYzSu3LSPh/tSW1TteeF66cM5BuTWTXt83pfaomrPCwAAAAAAAABjErUCAACQljmKXMSFWaxy3ln52WF1hihyKXdmscp5Z+VnBwAAAAAAAIAR3PZeAAAAAABR6Tm/fO2DLhqA8ek5v3ztgy4aAAAAAAAAALZnUisAAAAhnU3p1GUscPbaaDi/mVD6mz2BCWc7OmkZy5y9ORrObyaU/mZDAAAAAAAAAGB7JrUCAAAAcAHd5rSPh3tRPQBDkW5OMLIVAAAAAAAAADZmUisAAADxaOroqPj1K/74MxnZCgcEdfRV/AYWf/yZjLEFAAAAAAAAgM2IWgEAAEjImEQWc3lOEWpeynbBfGYkcg335xSh5qVsFwAAAAAAAABsQNQKAAAAwBn6zGWUwAD0os9cRgkMAAAAAAAAAK2JWgEAAAhGIUZ3pS6hLPN6NpDi5GGMoNQ9lGVezwYCAAAAAAAAQDuiVgAAAACOU2OuRRsMwDbUmGuxkwAAAAAAAADQiKgVAACAbO7e3nsvgdhcoS8izNXZUjjq9WXfewmE5xZ90WGuy8xbAAAAAAAAAGhB1AoAAEAkkjAGkfsqGivajo2lGj0Y48h9G+WX7dhYAAAAAAAAAFiXqBUAAACAf6kuW7PDAKxLddmaHQYAAAAAAACAFYlaAQAAAPiH3nIbZuECsBa95TbsMwAAAAAAAACsRdQKAABAGHMasLu39w1WQnpzLlK+KDHfEw3OhpPenAbs9eX818Acc+5Svi4x3xON7PF5b8MBAAAAAAAA4HqiVgAAAAAEln3YdgAWE1h2YdsBAAAAAAAA4Eq3vRcAAAAAQGfSyo4+Hu6NmAZOmc7nzLktS1fZ1+Pz3rsPAAAAAAAAABYTtQIAAACUpmjtTtcKfLsoVjz4YpVdEYrWEehaAQAAAAAAAGCxm8/Pz95rAACA7dzc3KzyOn4jDdub092pwk6ZXy3aw58q3DpF6zii3yU4MKe7y5eEHX3qs4+5eqOYb2PnS3/xFK1DCX2XAAAAAAAAAKAXk1oBAAAAilK0DsW8VqimXZ34/cqKu2QUraMxrxUAAAAAAAAAFvjTewEAAAAAdKBoHZBDgSIen/fb1ImbfSMoy1sMAAAAAAAAAC4lagUAAAAoRzw5LEcDuXWpTKWtOTjEYTkaAAAAAAAAALjIbe8FAAAAwHkqL4b18XB/9/beexWX8YYaXMRLBQckXkddtC2vL+e/+KIXfHzez3nNCiJuhffU4CJeKgAAAAAAAADoRdQKAAAAUIiiNQRdKyQzs0i8NIr7/vqZr//1ZdK7cBStAAAAAAAAAEAmf3ovAAAAANYhAGN1+S6VojUQh0V6ddLKs0Xi68v+69fib3HRv567kMx3r3KfVyZOCgAAAAAAAABmErUCAAAAlCCSBBjNlS3r71eb+ZXquyicVCzOCwAAAAAAAADmELUCAAAAwIh0yJDYujnrgpdV343PGUXk1AAAAAAAAADgrNveC4Dw/v79u8rrPD09rfI6AAAA8Js8MqiPh/u7t/feqwBW1iJnPXj9OWXd43OTsBaK884CIJa1/rB758+7AWAT/kc1AIjFz24AgFNMagUAAGB0YjwGN/4VHX+FTHB8hGNQ4YRGA1qPfqM5X1b2sMZ/8PFXCAAAAAAAAACwjKgVAAAAIDNJJMAgxhzeKJ4ckEOJzgkCAAAAAAAAwARRKwAAAAAMTZkMCWxftM7/jgK8oTiOHJwjAAAAAAAAAJwiagUAAABISwyZhqOE0Mac0Qo0pWsFAAAAAAAAgKNErQAAAGRw9/beewnkFPpqySCTcaBkUiry7PiwNYe1hr5dmQ4CAAAAAAAAAOAoUSsAAAAAADQRKLCUU3bnCPJxpgAAAAAAAADwm6gVAAAAICFTPVNyrDC4g4R1hKL1ojUI8GB13lYAAAAAAAAAcOC29wIAAAAAWJn0EaCXEUJWIpI+AgAAAAAAAABFmNQKAAAAAGEoloFLGdY6Ptuem/MFAAAAAAAAgJ9ErQAAAACpiB7Tc8QAAAAAAAAAAAAEJWoFAABgaNotQhjnoo6zEqAmAwkTKHKI4zzmOCuhHacMAAAAAAAAAN9ErQAAAAAQjHoZuMjry773EqA6XSsAAAAAAAAAfBG1AgAAACQhdASAWISOAAAAAAAAAEA1olYAAAAAiEfDDLSjtIQWvLMAAAAAAAAAYCdqBQAAAMhB4ggAsUgcAQAAAAAAAICCRK0AAAAAEJKSGQBiUTIDAAAAAAAAgKgVAAAAIDxxIwDTXl/2F3299K41OwwAAAAAAAAA1CRqBQAAAICo9MwAEIueGQAAAAAAAIDiRK0AAAAAsckaASAWWSMAAAAAAAAAUJaoFQAAAAACUzUDAAAAAAAAAAAQhagVAAAAAABgI8a04g4AAAAAAAAAUJmoFQAAACAwUzrZuQZAG7o7AAAAAAAAAABWJ2oFAAAAAACA7YjGAQAAAAAAACjrtvcCILynp6feSwAAAKAo8zkBIBYpIwAwFH/YDQCx+NkNALH42Q0AcIqoFQAAAADC+3i4v3t7770KKOdUoPj6cvyfAwAAAAAAAABAcX96LwAAAAAgPDEhQDWPz/uJkZumcY5PeEx3PigAAAAAAAAAqEnUCgAAwNC0gnDKx8N97yUAHCoSCs5J0eRq/OZWAAAAAAAAAACIWgEAAAAgA50zbGN+l6hgBAAAAAAAAACAA6JWAAAAAABoQtcKTPARAQAAAAAAAEBBolYAAACAeMzkBOhCgcZiLg8AAAAAAAAAwE7UCgAAAABpqJ1hQFJGAAAAAAAAAAD4JmoFAAAAOEkiCEBZry/73ktYQkVMLG4sAAAAAAAAANWIWgEAAMhAeQgAgYi4qMadBwAAAAAAAAD4ImoFAAAACEbFDQAAAAAAAAAAAEQkagUAAACAPDTPMJrXl33vJex2JoUCAAAAAAAAADAGUSsAAACju3t7770EmOKKAvw0SMMJE9xShqI5BwAAAAAAAKAUUSsAAAAAAPAfss8VSRYBAAAAAAAAAMuEzHMAACAASURBVL6JWgEAAAAi+Xi4770EAOaShgIAAAAAAAAAwE+iVgAAAAAAWF/cojXuygEAAAAAAAAAGNxt7wUAAAAkcTA78e7tvddKgLWYiUpQHw/3fgzN8fi8//m3Kj7meH3ZH9ycia9su5RLzFxzAnWeFAAAAAAAAAAgKFErAADAQtO1m8Z1eyIuAKZN124a1409Pu8Tb3LiRwNayP2RCAAAAAAAAAA/iVoBAAAutmB449e/Ejq57PsId2/vZmYyptDva6hjwfDGr38ldGLU8RHmjzNNI/RVOZDpWY5K/4AAAAAAAAAAACMTtQIAAFzgyq4yYtp68MjffxvrKQAo68q0MmLaevDI338b6ylGdjTZHXnKYrXAeDT2HwAAAAAAAADgJ1ErAADALCuOCY2Stk4/cpSngGSMLIb5VgzJoqSt048c5Snoyw0BAAAAAAAAAKCpP70XAAAAEECLimzwMm3m8gZ/CgDKajEacfBxizOXN/hThDbm3l60KkUrAAAAAAAAAACtiVoBAADOmNNt3r29//y14it3MebC5mzsmCsnqJnv/Q1WAgsU/zycU/G9vux//lrxlbsYcGFzdnXAZc906uniPlEOM9/7zdcBAAAAAAAAAMBpolYAAIAp01HQqYo1dNc64JIAYL7pqu1UxRq6ax1wSRWEaCONaQUAAAAAAAAAYDSiVgAAgJMm8s6zE1lDd60Xib5+ADKZSPjOTmQN3bVeJPr6Bxd0exWt0F3QTw8AAAAAAAAAuJSoFQAA4LjponXLlWxJoQpAXNNF63br2JYIqqNT92qQQ5m/jMRvEAAAAAAAAAAARiNqBQAAOOJU23l2QOvBF1/57TiQOCdmNHPelS4kDOVUv3d2QOvBF1/57fipQio5bNfafQHbm/PIFe4kAAAAAAAAAMDgRK0AAACHJorWjVcSwmjbohD+7aI9sYFARBNF66brCGKobUncXnZ8tIu+9VD3AQAAAAAAAACA9EStAAAA/9GraB2hJBxhDQBwqV5F6wg15ghrYOKmdTkgRetQvEkBAAAAAAAAAA6IWgEAAP5lRuv4nMVFPh7uF7TKy/6talxFGIQZrYMrchDTXeuWWaOidUK15wUAAAAAAAAAGNNt7wUAAAAAK1slSf1+kYL1pqYXgEu9vkzFq4/P+6FGB+fLOw1EBQAAAAAAAACIQtQKAADwj+5jWj8e7sPVg2MuOOJOHjVIWrl4GTlOARhZ9zGtG5SKqxtwwRG38aizXeuu2f4XL1oBAAAAAAAAAAhE1AoAALDbDVC0djdIPwkAM3UvWrszmnJAX9fvbNq6W++iXnoN6rxBAAAAAAAAAAAYk6gVAADgpDpFayx3b+8SXPry4QDDEuwNaHp+aUpzHvnKunXBlhZ/dxR/fAAAAAAAAACAcYhaAQAADClN6OPhXnbIMj4QIIRqkWR6j8/7ZM3h/JT355dNb8I11z7Z9h7wgQAAAAAAAAAAEIioFQAA4Ljrk8j0aVzHatSwVjrSS8Owrs/20qdxvcrGgsNad//f7YsevMUu5c5ZZ7IJAAAAAAAAAADjELUCAADVaSN3NgGAUArmkb/ZhCgWpK3rfmsAAAAAAAAAABiKqBUAAOAIkxgT+Hi4r3COvZ4xawid9bmgAv1edI/P+8SHuGXamngbjxJ4AwAAAAAAAADEImoFAABKE7DFdff2nv74Ro5yR15bU2UfHMYhYAvq9WXv7L5z00ZbUS1nnanvtrj5AAAAAAAAAAAHRK0AAACHVonW9JYQTvq3LSS2SrSWPjxTPI5jxbq1+LGmf9sCAAAAAAAAAOQjagUAAOoaLWCTiV7q7LDWj4d7u8qKXCfobrSArXhPeKmzIysfn/fVtvT3805vUbX9uZ4dAwAAAAAAAAAYjagVAADgPwpGa6PFvQBwkYLR2mhxLysqeJ8BAAAAAAAAACjlT+8FAAAA9NG05JSJbuZshOwsmOnsVSlYvMNompacMtFtnC02HQTznb0tCmEAAAAAAAAAgAGJWgEAAP7VMVqL1cvFWi0AiXWM1mL1crFWC1CQD2oAAAAAAAAAihC1AgAAFZnemYnClusZ0wrjM8AzDdUWqzCmFQAAAAAAAAAgKFErAADAymIVs7FWu0yFZwQ4oMS+SKxiNtZqF0j/gAAAAAAAAAAAUJmoFQAA4B8d+x/p0ZVsIE25YDCsjpMYDYG8ht2jNXcMAAAAAAAAAGBYolYAAKAcczuvFDHwc+hMiHU9Ir4B4XpGd14pXODnxJnmhgAAAAAAAAAAxCVqBQAAWFOsOi4TpR+NuFqQnjqui3CdLYGMdrtGWw8AAAAAAAAAQF+iVgAAgM46JnOlEtxSD8t8LgawQMdErU6CW+dJuZS7AQAAAAAAAAAQmqgVAABgt1upLFXH9WWiJqtzqWBkq5Sl6riOjK+kBfeKoFxdAAAAAAAAAOoQtQIAAPQULpkLt+CfVMcccCXIKvRn9fjCdUfhFvxNcsxvbgUAAAAAAAAAQHSiVgAAAPFPHo6SFblOMLK4oSY/OUfW5UYBAAAAAAAAAIxP1AoAAJTTKFQLN/Ix3IJnmj7frE/NAtOXYeSideS1QSONQrVwIx/DLXiO6cNN+cgsNn0fFK0AAAAAAAAAACHc9l4AAABAB4MkYYMso5qPh3s7j7wZwhkkVxtkGaU8Pu9tO7vghfPryz70+gEAAAAAAAAAVmRSKwAAAHNFaUGjrJNhuUJAGiFy0BCLZHBuEaG5wAAAAAAAAACUImoFAABYgamPo5mOEp1XcdMXQNFKdO7wTKYmDmU66HJYTN8BQSAAAAAAAAAAQCC3vRcA4f39+3eV13l6elrldQAAiKJvdKTqpKwcl//u7T3Hg0AsfcM5YSdlufwAAO2s9YfdO3/eDQCb8D+qAUAsfnYDAJxiUisAAAA5GdbKAkZcAvRiWCvLRBnTGmWdAAAAAAAAAACtiVoBAACutSCPjBjO5VuzrrWg6UOPeMmBZRYUkhGDtHBr1rXy2/S5h7vk8JtrDAAAAAAAAEA1olYAAAAASEKbDQAAAAAAAAAAwMhErQAAAOWUmlBqWCvfko1pDbdg4Bp1hpQa1spPyca0hlswAAAAAAAAAEALolYAAICrLKgipWgb07WyS1e0AtdYEEZK0baka+VLsqIVjnKTAQAAAAAAAChI1AoAAMB50ZM/XWtxilaKcJn5KXQopWtF0QoAAAAAAAAAkJWoFQAAgBK0XmUlLlpDLx5gmmqxssRFa+jFAwAAAAAAAACsQtQKAACw3IIJn90jNFNJj7ItNXV/PwLbWzDks3uEZjDpb/akrO7vR1iR+wwAAAAAAABATaJWAAAAqpguGHWtKTlW6hBpk8907qVrzcrJAgAAAAAAAADkJmoFAADgjEyhlK61lOkDzXGxczwFsLo00/90rdVMn2mOi53jKQAAAAAAAAAAFhO1AgAALLQggJSfjUDXWkSFohW+udIzLWgg5Wfd6VrrqFC0wjdXGgAAAAAAAICyRK0AAACFKDa/6FrTK1W0Jnsc4IBoc6drrUHRCgAAAAAAAABQhKgVAACAinStiZUqWgGK0LXmVq1ozfdEXModAAAAAAAAAKAyUSsAAMASC6LHoCld0GXPoWtNSdFKQS72TAu6x6DRUdBln6Vrzapa0QoAAAAAAAAAUJyoFQAAgLp0rcmULVoTPxrAT7rWfMoWrYkfDQAAAAAAAABgmqgVAACgConmUbrWNMoWrRTnbuem0vxN15pJ2aKV4txtAAAAAAAAAIoTtQIAAFCdrjUBRWuFZwT4omvNQdFa4RkBAAAAAAAAAH4TtQIAAFxsQeUYtDcLuuwF7t7eJx5W1zq4iQOaPlmIzvWeb0HoGLQ3C7rsS72+7CeeVNc6vokzmj5ciM71BgAAAAAAAABRKwAAAPxD1xrRdNG65Uq6q/a8ALrWoKaL1u3WMYBqzwsAAAAAAAAAsBO1AgAAFKHJnEnXGouilcpc8vRkmXPoWsNRtFKZSw4AAAAAAAAAO1ErAADABnRHsehao1C0/lb2wWF1uqNAdK2BKFp/K/vgAAAAAAAAAEBZt70XAAAAEEydrLFyHff17HXOOpPK9/bL3du7q1uBq36ROmVj2Tru68HrHHQyZe8t1bjqAAAAAAAAAPDFpFYAAAA4TjMWjiMDqEwwFpFT29mEGpwyAAAAAAAAAHwzqRWu9fT01HsJAABwhrGNix2MbNVMDuXnSFJH85Nhrem58BUYOrrMwchWFdloXl/2TgcAYCj+sBsAYvGzGwBi8bMbAOAUUSsAAEBb0qMEHOKwHA0FufYb0NpF5wRH5nSO+pn7ko9rDwAAAAAAAAA//em9AAAAAEYkmoLQvIWhINEUhOYtDAAAAAAAAAAUIWoFAAC4wMfDfe8lAMyia03JsS5g+CEAHcmVAQAAAAAAAOCAqBUAACA5IS4AxCLEhZrUj/k4UwAAAAAAAAD4TdQKAAAAkJOpnsk4UID0NJAAAAAAAAAAQHqiVgAAAA7ppiANb+c0HCXThHAAo/HJDAAAAAAAAABHiVoBAAAa0iABcD0/TbakQQL68imUg3MEAAAAAAAAgFNErQAAAJl9PNz3XgLQmR4SYnl83vdeAtCZHjI6JwgAAAAAAAAAE0StAAAAAMnpWkNzfAAFqSIBAAAAAAAAgKxErQAAAPyHegpS8tYOysExh/gNYBw+kwEAAAAAAABgmqgVAAAAAEakaAWoTBsZkVMDAAAAAAAAgLNErQAAAGl9PNz3XgIwEIUkjO/xed97CcBAFJKxOC8AAAAAAAAAmEPUCgAAAFCFrjUQhwXATicZh5MCAAAAAAAAgJlErQAAADktG9OqoYL0vM1DcEw1LRvTKqOC9LzNAQAAAAAAAIBMRK0AAAAAtQgmB+eAADigax2cAwIAAAAAAACA+UStAAAACS0b0wrUIZsclqMpa9mYVqAO2eSwHA0AAAAAAAAAXETUCgAAAFCReHJADgUAYlG0AgAAAAAAAMClRK0AAAAXCJEbLR7TGuLpgBV51w/FcTQSIjdaPKY1xNMBa/GWH40TAQAAAAAAAIAFRK0AAACpLC5agZqElINwEJUtLlqBglSU43AWAAAAAAAAALCMqBUAACAPRSuwgJyyO0dQmaIVuNTry15O2Z0jAAAAAAAAAIDFRK0AAAANqUyBEESVHdn80ahMgRBElR3ZfAAAAAAAAAC4hqgVAADgMsPWR1cGtMM+F7ANHwJd2PZtDFsfXRnQDvtcwDZ8CHRh2wEAAAAAAADgSqJWAACADIyEBa4nsNyYDS/OSFjgegLLLb2+7G04AAAAAAAAAFxP1AoAAHCxizKkDXJTRSuwFpnlNu7e3m31xi7KkDbITRWtwFpkltuwzwAAAAAAAACwFlErAABAbIpWYF1iy9bsMIpWYF16y9bsMAAAAAAAAACs6Obz87P3GgAAYDs3NzervM7/2Lt75EaSMwHDKAattucIiqApQwaDfQHpGDrC3oDgDXQEHWP3AuqgMcaaHTFHkE231sCIiwGBQv3lz5f5PDHGzDRZyKwsgGzjjc8v0hwW1qQpEqYdc1aFFfCVZj4Fn7dlLapJUyRMO+asCivgK818Cj5vAQAAAAAAAGBfJrUCAACsVDZMEpsBqckvd+eWFlc2TBKbAanJL/f1/nZ0SwEAAAAAAABgd6JWAACAHHZsUP/9lz8pWoE8RJh7+eXX39zMcHZsUJ9fj4pWIA8R5l7cSQAAAAAAAABIRNQKAACw3qJCaZcSVc4KZKbG3M4NrMqiSGmXElXOCmRmvuh2biAAAAAAAAAApDOM41h6DQAAkM8wDLtcxy/SnFsamq6rm+a8yi+//raielVbAXOI6lfwAVutpaHpurppzqu8v60Z4qq2AuYQ1a/gAxYAAAAAAAAAUhO1AgDQF1EriaTrWmde+fOColYgKWnrfD5dK5eua5155c8LilqBpKSt8/l0BQAAAAAAAIAMRK0AAPRF1Eo6q0Ovr9XT6kR23RpkV8BS0tZpPlejWB16fa2eViey69YguwIW0bXe5XMVAAAAAAAAALIRtQIA0BdRK6llDr0uuilRK5CNrvUqn6gRZW69LropUSuQjbT1Kp+oAAAAAAAAAJCZqBUAgL6IWskgW+i1fcTr1YsAzCdtPecTNa5sodf2Ea9XLwIwn7T1k49TAAAAAAAAAChC1AoAQF9ErWSTNPS62k0Z0wqUIm31WdqGpKHX1XTKmFagFGmrz1IAAAAAAAAAKOWx9AIAAADa9Bk47dh6iaaAOp0+nfpMW30yt+QzcNqx9RJNAXU6fTr1mbb6ZAYAAAAAAACAskStAAAAaW2vWxVTQAi9pa0+nBu2vW5VTAEhdJW2+mQGAAAAAAAAgEoM4ziWXgMAAOQzDMMu1/GLNHu5Wn+tC6VWhGSKLCCRhtNWn5xcrb/WtVIrQjJRFpBIw2mrT04AAAAAAAAAqIqoFQCAvohaadW6fkyaBaTWUt3qM5N9revHpFlAai3VrT4zAQAAAAAAAKBCj6UXAAAAAECzPkPQuHWrlhWArpxC0NBpq5YVAAAAAAAAAGomagUAAOiUTAvIKVzd6kOSCsm0gGw+P3AC1a0+JAEAAAAAAAAgBFErAABAeFEKMYBD9XWrlpU8AkViQOfOS9E6P7u0rAAAAAAAAAAQi6gVAAAAgALO89GygauQFQDmqCdwFbICAAAAAAAAQFyiVgAAgB4puICqXHwopW5cfQYSkYILqMrFh1LSxtUHIAAAAAAAAAC0RNQKAAAQW9nxhgAp3IpOF33iKVepVtnxhgAp3OpOF33iiVcBAAAAAAAAoAeiVgAAAABi0KkCQCw6VQAAAAAAAADgwkPpBQAAALDeujGtqjAAKGXdmFZVGAAAAAAAAAAA0AZRKwAAAAAAAAAAAAAAAAAAyT2WXgAAAEAAXweixh12GnflADDf14GocYedxl05AAAAAAAAAADABVErAADATV9b1os/KhuITiwPAPr0tWW9+KOygejE8gAAAAAAAAAAAHrwUHoBAAAAlZqTjP77L3+KVZYa0wpAw+Yko8+vx1hlqTGtAAAAAAAAAABAS0StAAAAV9Sfqq5YoaIVgIbVn6quWKGiFQAAAAAAAAAAaIyoFQAA4NLSXrT+AhYA2ra0F62/gAUAAAAAAAAAAGiSqBUAAOAPQhSqxrQCwKcQhaoxrQAAAAAAAAAAAAdRKwAAwLnVRWvOFDZEdgsAeawuWnOmsCGyWwAAAAAAAAAAgAxErQAAAO0zphUAYjGmFQAAAAAAAAAAaNJj6QVAeD9+/NjlOi8vL7tcBwCA1UJMQF2xSEUrEJq/dzMhxATUFYtUtAKh+dkNAIHs9YP74Gc3AGThL90AEIuf3QAAt5jUCgAA0DJFKwDEomgFAAAAAAAAAAAaJmoFAAAII8QsWQDgU4hZsgAAAAAAAAAAANmIWgEAAA6Hzb1ohoGoK1ZoTCsADdvYi2YYiLpihca0AgAAAAAAAAAAbRO1AgAABKBoBYBYFK0AAAAAAAAAAABfiVoBAAAapGgFgFgUrQAAAAAAAAAAQA9ErQAAAFulLkiXjmlVtALAtNQF6dIxrYpWAAAAAAAAAACgE6JWAACAqilaASAWRSsAAAAAAAAAAMAtolYAAIBNkkakilYA2F3SiFTRCgAAAAAAAAAAMEHUCgAAsJ6iFQBiUbQCAAAAAAAAAAAUJGoFAABYSdEKALEoWgEAAAAAAAAAAMoStQIAABwOC6PQX379TdEKAGUtikLf346KVgAAAAAAAAAAgOIeSy8AAAAgjDztqKIVAPaSpx1VtAIAAAAAAAAAAMwkagUAALgjWzW6NGc9KFoB4Jps1ejSnPWgaAUAAAAAAAAAAPr2UHoBAAAAtbgViK5oTVdYMaBV0QpA524Foita0xVWDGhVtAIAAAAAAAAAAJ0TtQIAANyXumtdUbQmWgkAtCF117qiaE2yDgAAAAAAAAAAgFBErQAAAP9vIhZN1LX++y9/UrQCwGoTsWiirvX59ahoBQAAAAAAAAAAWOex9AIAAADq8suvv92qTE//f6+mdEUlK2cFgK/e325Wpqf/v1dTuqKSlbMCAAAAAAAAAACcM6kVAABgme0jW1dMZz0oWgFgre0jW1dMZz0oWgEAAAAAAAAAAL4wqRUAAODSxLDWk88/XRqargti5awAMG1iWOvJ558uDU3XBbFyVgAAAAAAAAAAgKtErQAAAFecOtK7Der5F9xKT7dMdpWzAsBMp470boN6/gW30tMtk13lrAAAAAAAAAAAABNErQAAADfdHdl6bku8evWld7waAHTi7sjWc1vi1asvvePVAAAAAAAAAAAAmvRQegEAAABVyx+X/vLrb4pWAFgtf1z6/nZUtAIAAAAAAAAAAMxhUisAAMAdp8R030Gst14FANjulJjuO4j11qsAAAAAAAAAAAAw3zCOY+k1AABAPsMw7HIdv0h3a/e0VcsKAEntnrZqWQEAAAAAAAAAAFYTtQIA0BdRK3vZUrcKWQEgvy11q5AVAAAAAAAAAABgF6JWAAD6Imolqa+lq34VAGr2tXTVrwIAAAAAAAAAAKQjagUAoC+iVgAAAAAAAAAAAAAAKOKh9AIAAAAAAAAAAAAAAAAAAGifqBUAAAAAAAAAAAAAAAAAgORErQAAAAAAAAAAAAAAAAAAJCdqBQAAAAAAAAAAAAAAAAAgOVErAAAAAAAAAAAAAAAAAADJiVoBAAAAAAAAAAAAAAAAAEhO1AoAAAAAAAAAAAAAAAAAQHKiVgAAAAAAAAAAAAAAAAAAkhO1AgAAAAAAAAAAAAAAAACQnKgVAAAAAAAAAAAAAAAAAIDkRK0AAAAAAAAAAAAAAAAAACQnagUAAAAAAAAAAAAAAAAAIDlRKwAAAAAAAAAAAAAAAAAAyYlaAQAAAAAAAAAAAAAAAABITtQKAAAAAAAAAAAAAAAAAEByolYAAAAAAAAAAAAAAAAAAJITtQIAAAAAAAAAAAAAAAAAkJyoFQAAAAAAAAAAAAAAAACA5EStAAAAAAAAAAAAAAAAAAAkJ2oFAAAAAAAAAAAAAAAAACA5USsAAAAAAAAAAAAAAAAAAMmJWgEAAAAAAAAAAAAAAAAASE7UCgAAAAAAAAAAAAAAAABAcqJWAAAAAAAAAAAAAAAAAACSE7UCAAAAAAAAAAAAAAAAAJCcqBUAAAAAAAAAAAAAAAAAgORErQAAAAAAAAAAAAAAAAAAJCdqBQAAAAAAAAAAAAAAAAAgOVErAAAAAAAAAAAAAAAAAADJiVoBAAAAAAAAAAAAAAAAAEhO1AoAAAAAAAAAAAAAAAAAQHKiVgAAAAAAAAAAAAAAAAAAkhO1AgAAAAAAAAAAAAAAAACQnKgVAAAAAAAAAAAAAAAAAIDkRK0AAAAAAAAAAAAAAAAAACQnagUAAAAAAAAAAAAAAAAAIDlRKwAAAAAAAAAAAAAAAAAAyYlaAQAAAAAAAAAAAAAAAABITtQKAAAAAAAAAAAAAAAAAEByolYAAAAAAAAAAAAAAAAAAJITtQIAAAAAAAAAAAAAAAAAkJyoFQAAAAAAAAAAAAAAAACA5EStAAAAAAAAAAAAAAAAAAAkJ2oFAAAAAAAAAAAAAAAAACA5USsAAAAAAAAAAAAAAAAAAMmJWgEAAAAAAAAAAAAAAAAASE7UCgAAAAAAAAAAAAAAAABAcqJWAAAAAAAAAAAAAAAAAACSE7UCAAAAAAAAAAAAAAAAAJCcqBUAAAAAAAAAAAAAAAAAgORErQAAAAAAAAAAAAAAAAAAJCdqBQAAAAAAAAAAAAAAAAAgOVErAAAAAAAAAAAAAAAAAADJPZZeAIT348ePXa7z8vKyy3UAAACgJf7eDQCx+NkNAIHs9YP74Gc3AGThL90AEIuf3QAAt5jUCgAAAAAAAAAAAAAAAABAcqJWAAAAAAAAAAAAAAAAAACSE7UCAAAAAAAAAAAAAAAAAJCcqBUAAAAAAAAAAAAAAAAAgORErQAAAAAAAAAAAAAAAAAAJCdqBQAAAAAAAAAAAAAAAAAgOVErAAAAAAAAAAAAAAAAAADJiVoBAAAAAAAAAAAAAAAAAEhO1AoAAAAAAAAAAAAAAAAAQHKiVgAAAAAAAAAAAAAAAAAAkhO1AgAAAAAAAAAAAAAAAACQnKgVAAAAAAAAAAAAAAAAAIDkRK0AAAAAAAAAAAAAAAAAACQnagUAAAAAAAAAAAAAAAAAIDlRKwAAAAAAAAAAAAAAAAAAyYlaAQAAAAAAAAAAAAAAAABITtQKAAAAAAAAAAAAAAAAAEByolYAAAAAAAAAAAAAAAAAAJJ7LL0AAAAAAAAAADr1/Ho8/cv727HkOvjC0QAAADRgePo4/cv481vZlXDB0QAA0DOTWgEAAAAAAADI7fn1+JlNHs4SSmpwcTROBwAAIJzh6eMzmzycJZTU4OJonA4AAL0RtQIAAAAAAACQlUgyHEcGAAAQiEgyHEcGAEBXRK0AAAAAAAAAZGLsZwjvb8ev/9PZAQAA1M/YzxDGn9++/k9nBwBAP0StAAAAAAAAAOQwkURerSgp6NaJ6FoBAACqNZFEXq0oKejWiehaAQDowTCOY+k1AABAPsMw7HIdv0gDAAAAwCK3Ykg5a82cGgAAQBS3Ykg5a82cGgAAfRK1AgDQF1ErAAAAAGRmQGtojg8AAKByBrSG5vgAAOjQQ+kFAAAAAAAAANAsSWR0E8c0cbgAAADkIYmMbuKYJg4XAABCE7UCAAAAAAAAkISitQ26VgAAgDopWtugawUAoDeiVgAAAAAAAAD2p2htia4VAACgNorWluhaAQDoiqgVAAAAAAAAgJ0pWtujawUAAKiHorU9ulYAAPohagUAAAAAAABgT4rWVulaAQAAaqBobZWuFQCATohaAQAAAAAAANiNorVtulYAAICyFK1t07UCANADUSsAAAAAAAAAayXeKwAAIABJREFU+1C09kDXCgAAUIqitQe6VgAAmjeM41h6DQAAkM8wDLtcxy/SAAAAAHBB0frV/Mgz3C1y3AAAAJn1VrQuCjjbuwO9HTcAAF0RtQIA0BdRKwAAAACkIHE82WtUaYib5tABAACy6SRx3GsSaRv3pJNDBwCgQ4+lFwAAAAAAAABAbHuVnHHtfgdOF4ybhj6/HuMuHgAAoDZ7pZ51SrG7z2u2Gn8OTx+tbg0AgB6Y1AoAQF9MagUAAACAfU33nG2Xjdlq3mpvY8+nDwAAkMd08xm6bMwZ6wa9UQ2fPgAAPXsovQAAAAAAAAAA2tRw0/j8esw5n7baWbgNHzEAAED9gjaNw9PH6Z/8L5rzFXcR9IgBAGCaSa0AAPTFpFYAAAAA2NFEbNlq7liwL632lnb4GAAAAOQx0WEGzR1rKEvD3br2HgMAADr3WHoBAAAAAAAAAIRU7fjQRNbtd2bVOefip6+JlYk+vx5jLRgAAKAeNfSfO1q0nUWt5tIbdfr6NnLQ4emjjY0AANAVk1oBAOiLSa0AAAAAsIvpCLOxjnFpzrpx+xHvbcQ1AwAA1Gw61IzVMc6MTnfZ1NLANcqdbOl5AAAAUSsAAH0RtQIAAADAdl0VjIuK1h33PvG6dd7hrp4KAACApFoqGO9Wpom2M79ujXI/W3oqAADo3GPpBQAAAAAAAABAjUrlrJ8XvLWA59ejRhQAAID6TXSYqSPM0/XnpK3D04ciFAAAcjKpFQCAvpjUCgAAAAAbdTKQc37RmnrLt1ZS4a3u5NkAAABIqpmBnAWL1vkr+RTixjbzbAAA0LmH0gsAAAAAAAAAIIxOqsV6itY8L7GX6aUumnwLAADQp2aqxVsbGX9+y7+LOa84J3wtbnojIbYAAACHw+Gx9AIAAAAAAAAAoCIz28s8renEYp5fj4F6VwAAAPoxUbRmXsn5S99tPoenj0DZMAAAxDWM41h6DQAAkM8wDLtcxy/SAAAAAHSohzGt9RStc1ZS5z3v4TkBAABIoY0xrRUWrefupq2VrHNCG88JAAA9eyi9AAAAAAAAAAACmFl7hharaA2q4a0BAABscTe2DKHyovUwYyXRDyL6+gEA6IGoFQAAAAAAAICtGhi/GbForTMQbeBhAAAAqE09UegKoRdfIfcTAIDoRK0AAAAAAAAA3DEdTzYQMUYsWms2faPa2CMAAMCOpqdrRokYo8wIbWBY6/QW6l8/AACdE7UCAAAAAAAA0LV6ilYAAAAI6lZIWWeRW+eqAACgE4+lFwAAAAAAAABA1doe06poTeT97Thxb59fj25pVVaMz3WCAACwlzbGtJLZ+PPbxJMzPH14cuqxbnauEwQAGiZqBQAAAAAAAOCmFalbIIrWgnStRez4jr51KccKAACLrKvdahNxF81HoQ1sIaId3wtXL+VMAYA2iFoBAAAAAAAAWCl0vVZh0dpYQjw9rJU88h/BxSuG/pQAAIDiogds0ddfuekulzwyH8HFy3mLAQBBiVoBAAAAAAAAuK7hIrHCovXQXwVqWGsiVT1F54tx3AAAcEGRSFKGtSZSzzv3fCXOGgAIRNQKAAAAAAAAABBeVS3rVZ8rVLcCAEBL6gn8lpqedKoI5Vz9z7nAFQAIZBjHsfQaAAAgn2EYdrmOX6QBAAAAaN7dQC5ullbnmNaTRV1iiCNo+EGqRP0t6wSnDwBAz+42clGytImN1L+F6VOof/2Hhh6kOtXfsk5z+gBAnUxqBQAAAAAAAKAjNRetp9cN3SiSTRvPidmtAAAA1Cl6znpy2oW0FQCozUPpBQAAAAAAAABQHdM16xflCO6us404M6fn1wbL5yY3BQAAEzqZrtlGFli5u4+KU1hkePo4/VN6IXtqclMAQGgmtQIAAAAAAADQi8rHtH6+urqPr3p4KgxuBQAAoJQemk+DWwGASpjUCgAAAAAAAMAf9NDOVW666Ht/OzaW/HnkpnU4xbTDLQMA0JUe2jmq4pGb1tsU0972CwBUaBjHsfQaAAAgn2EYdrmOX6QBAAAAaNjdlixoURliTOuFizVXtbZFWn2oUhN2HjwbAAC06G5OFmuOYujtTC++5pVfCH0KBWk7PRgAQBGPpRcAAAAAAAAAAMkFjQPlfN0K+sSm8Pza2mhiAADozfD0IZyjNnLWk9N98A4FADJ7KL0AAAAAAAAAACpioiYp3H1sNJzn3I0Lz69H9wQAgGaYqBlFrIO4u1oN56fh6cPduOCeAACZmdQKAAAAAAAAQOPm53CSXcqSbk443RxvUgAAiKjOYa0qvg459AmmtgIA2ZjUCgAAAAAAAMDvBHUU1PnjZxjpTG4UAACh9RzU9bz3SnR+BIaRzuQuAQAZiFoBADYZZiu9UgAAAACAHZiRyGoengkqzaXcMQAAWtX2jMSqYrnpxUQ8iIhrzkPOupQ7BgCk9lh6AQAAkWxpU79+7ziO25YDAAAAAMB98+M31SX5iTNXO906b1sAAIjlVMrJL8lGnLna8PThrQoAJGJSKwDAlKTTVo1yBQAAAACqIq6juN4ewt72m4J7CABAIOK6T8VvRfEFlNLVxo0b3c49BAASEbUCAFyXPzSVtgIAAAAA7E7wRrU8nHtxJwEAoKx1sxxrjuVMp2xAtU9XRG4mALA7USsAwB8Un5tafAEAAAAAALe8vx1LLyGhtndXCTf55Pn1qMPcl1sKAEAbOmwpi6StDRd6HT5CVzV8xKW4pQDAvkStAAC/qy0lVbcCAAAAADnpwahE849i8xssyL0FAKBmkrAJOdPWuy/UfBfa/KPY/AZLqXm6MgAQjqgVAGB9zjrOs315G68AAAAAANAnhRu18Uym5g4DAEARu4SgGZI5RWvbVJcZuMMAwC5ErQBA15bmrOtq1e2Bq5GtAAAAAAAQnd4yD/cZAABCS9clKlrbJrbMxq0GALYTtQIAnZqfie44c/Xzauu+V9oKAAAAACQypwF7f7v/NXDXnAepvSjx+fXY3qZq5oYDAFCbOQ1Y9KJy3/XvXs31k+HNOYj27kZ7O6qcGw4AbPRYegEAAAXMz1kTLeB05XWF6um70q0NAAAAAKANmZO2uy+nCu6WurKU59ej9x0AAMR1quZ2aWV7iIp7JrAsYnj68K4BAFYTtQIA3bmbkmbrRcdxXD15dRgGXSsAAAAAwF7WlW+LYsWLL9badULRWpauFQAAchp/fks0YXVLO6dobZuitSBdKwCwmqgVAOhIPTnrxSuuHtmqawUAAAAAyG+XTPH8IqK7Vilaa6BrBQCAnFJ0rYcNaauitW2K1uJ0rQDAOkIIAKAXFRat51aPbPXr3FKrb/UFdx4AAACAZszp7iImYYt6wpkbTNooRrzJq7X61J1TtFYl+uMEAEBovXWVqTvDmfeqt9t+oYftK1rrEf1ZAgDyeyi9AACAHKY7xnEciweKqxewV6IJAAAAAMCE59dj6kYxw0uQjaOsjRMBAIBsUudtw9PH3Zqxh6Szc4rWqjgOAGApUSsA0L67RWu2lSSiawUAAAAAuLBvwJYzh5O2NsAJ1sm5AABANhl60Vtp65zk9aBoDU5CWSGHAgAs8lh6ARDejx8/drnOy8vLLtcBYJGqitZxHFfnqcMwVLUXAIC9+Hs3AMTiZzfQnjkV3Pvb/a9ZWtM9vx7nXJYKKSdr5p0FQGj+0g3EMv78liFyO73EqVCd+XJy1ujEk9Uanj68vwCAmUStAEDjJjLRCitQXSsAAAAAkJkAb8LdmzO/jvv8yvk3/PSVPQd4EftDbygAAOBCzwFenq71sOQmK+7ORUwQe35DhRDxoQIAihC1AgAti1W0bqdrBQAAAADYy0SduKW0XFq3Rgw7oWbeUwAAkNOiGaoZVkJoNTxI3KVrBQDmeCi9AACAVIIWrTWvDQAAAADoU4cB2K3i9P1ttxxu/nWaHP7Z5EPV5Ek1yUkBAFCb5gOwshscf35r/g5/1d6WFa2BOCwA4C5RKwDQo2EYJpLX0FrdFwAAAABANhNF674vND+R1eDVzxnF4rwAACCzIo1lnzlrk0SS4TgyAGCaqBUAaNOctnP4jwzrWcSwVgAAAACALbbkale/d8cBrVcvPufLnl+PMrxqOZqInBoAAGQmMQUAAE5ErQAArQ1ubWkvAAAAAAA53SpaU7/u/JeQ4VXIocTl7AAAIL+caevw9GFcZAMcYlAODgCYIGoFAPidFhQAAAAA6I2g664MRWvmF4rFIwoAAISm6bpF2lqJ+u9M/StkguMDAG4RtQIADVqdpzbTtTazEQAAAACADE5B6dd+MnNoOvPldJ5VcRzROUEAACgoW9d6kLbG5Mga4BABgKtErQAAf1BJDjqOY+klAAAAAAB0pHjRuogMrxIOog3OEQAACsrZtR70dQAAUAdRKwAAAAAAAABUYX5JK8MrzhG0xGkCAEB+p9Gp+StTI1ujcEzNcJQAwFeiVgCAS5UMawUAAAAAqEHNA0v3UtWY1n661h4eLQAAgLsyjyqtQQ1ZaQ1rSC30o9X86fTGgQIAF0StAEBrJKkn7gMAAAAAwDpiS+6KXhTzlTMFAIAMaktJq1oMAAD0Q9QKAHCFIhQAAAAAgFL6GdYalNsOAACw1KKcdfz57fRP0iWd1NbZchAbN8qxAgDnRK0AAAAAAAAA8LtwY1oFlrAX7yYAAEhkac566z/TkdvVw1k0zOECAJ9ErQAAAAAAAAAAs+ge2+Z8AQBgX/PnoE70q3nSViNbAQAgG1ErAAAAAAAAABwONY1pXbQSGR4AAAAV2p6zXnzZ5hXdp2sty/1vniMGAE5ErQAAAAAAAAA9UkISQlUPalWLIRGnDADAXnput2ZOPV06gjXbyNbUL1GV3vYLAEANRK0AAAAAAAAAEJsMLwM3GQAAYI75A1rXXT9D2qrzLMJt74SDBgAOolYAoD3jOFZyEQAAAAAAAnl/O5ZeAlAFATMAAKyWumg9v0LStFV3B+l4fwEAj6UXAAAAAAAAAABQNZUjAADAXXNCtX1L1NPVBHINcIgAAF0xqRUAAAAAAAAAqrN0cqzqEnbkDQUAAEvlL1pTX1ZmmY1b3SGHDgCdE7UCAA0ax7HgtwMAAAAAAC3RNwIAAEwrWLR+XjzF9XV3AACQgqgVAOAPmilam9kIAAAAAMBSS2ecrvsWoG1iZgAAmKl40Xr+KnleCNhONA4APXssvQAI7+XlpfQSALhiHMdhGEqvYr3QiwcA2JG/dwNALH52A9AeZSMAUAl/6Qbiyhyanl5ur15uePoQyialbAQA6JBJrQBAs5aOKh3H0XRTAAAAAAAATiTNAABwV7VFoqmtAABQLVErANCy+Z2qnBUAAAAAgOgEeAAAAOQ0p2gtW5bukrZWG+42wL3tnAcAALolagUA2jf+x6I/Cq29HQEAAAAAQH46YTwDAACwRSWzUitZBgAAcCJqBQA6Mn5RekUAAAAAAAAAAADxxBqxuHFka6zNRuGucvAYAECvRK0AANUZhqH0EgAAAAAAoHdGdHLiSQAAgHUqnI9a4ZIAAKBDolYAgNaYQAsAAAAAAAAAAKRzd7hitfnoxpGtAADAdqJWAAAAAAAAAFrz/nYsvQQAAACgUiu61rsdL4u4n3zyMABAh0StAABNMaYVAAAAAICWlOqTn1/LvC518jwAAMC5Ngo081pP3AcAAPITtQIA1GUYhtJLAAAAAAC6YJYpAAAApNNzKxhl71HWCc1rI5UHAOYTtQIAtMOYVgAAAAAAAAAAgJl0rUUoGAEAOidqBQCoiDGtAAAAAABQ3PPrsfQSqI6nAgAAAAAAdiFqBQBohDGtAAAAAADn3t+OpZcAAAAArbk7YzPc7NNwCwYAgOhErQAAAAAAAAAAAAAAdErXmtPdLpo+eTAAoCuiVgCAWgzDsPp7jWkFAAAAANji+fVYegndqfaeV7swAAAAmE8iCABAtUStAADhKVoBAAAAgHQEfoG8vx1LLwFa5vMQAIAUlIcAAEBvRK0AAFXYMqYVAAAAAICrRJ4AAADAHOPPb6WX0AUVNxM8HgDQD1ErAEB5W4pWY1oBAAAAAAAAAAAAAIAQRK0AAIEpWgEAAACALQwypXL5H9Hn19yvCAAANMzwTyrnEQUAoAhRKwBAYavHtCpaAQAAAADu6ifc7WenUJDsGQAAAAAANhK1AgCUpGgFAAAAAKhEba1abesBAAAAAACA7UStAADxKFoBAAAAAAAAAID8xp/fpr9gePrIs5LM7m6cu1p9NtiRhwQAOvFYegEAAP1aN6ZV0QoAAABAhy5GVr6/Ha9/HVzz/nY09bQ2TgQAAOpxURAp96ABykAAAGomagUAKEPRCgAAAAATpoM3jWtmz6/HTm5y3J0GXXZtpLYAAHRiunbTuOY3PH24zwAAQD8eSi8AAKA7wzAoWgEAAADglufXxUM1V3xLbQpuoZMYspNtNsapUafoP3EAgM4NTx9L5zeu+JbalN2CWrUNTZ5jk5sCACAEk1oBALKSswIAAADALRszodO3x6rgLrb8+Z+xdkEKi94OHhgAAOCujVXn6dtjJXAXW/78z1i7qNP489vdeb/h7nP0eBsAAAIRtQIA5KNoBQAAAICrdpx6FyVtnd5ylF3E8v42axzu8+vRnQcAAFqyY6oXJW2921seIuyCenhaAABgX6JWyOHHjx+7XOfl5WWX62Rgy6vZcs322vKhy13bcs05a4envIsfP34E2nKHp+xDewtbrpktr9bhlg9xdt3hlg+e7Q1suWa2vEWHu7blmtnyara82o5F6/k1z7vE2j60Z255Y125466jaGbLi94U//jbX7dv3CcYFNfhs23Lq9lyzWx5iw53bcs1a2nLKYZPDk8f//rn/179o0BbntjFIjVseabMH9qVDGuduevvf//z9EUCHvTUjv74ldftvmWzcJmpkk8PACCph9ILAABo2fAfK77XgFYAAAAAejAn3nt/O57/s+OVi6hwYf/421/vfk2Fy15hzk5jCbqjmW/85OsAAIDWzUnIxp/fxp/f/vXP/z39M/PK0wVgQXVWc3PqrDpXPqHJTV21S/yc2Zx3aMR9AQDQDFErAMDOvn///v3799Ut6+FwGMdR0QoAAABAD6bDtlsVa+iutcIl8VXZY/KQAAAAu5juCU8t69cuMXTX2kZC2ZgQh1LhwwwAAG0TtQIALPZ90pYry1kBAAAA6MdEuXd3ImvornWR6Ouv0MzRpiHuvFmmAADALRMl4dWW9VzornWR6Osvbs6w1vpNPwbGmQIAQAqPpRcAAFCvjYXqIlpWAAAAALoyXbTmW0deITrJHvzjb3/9r//+n9KruG7+Q9LwO6UU71AAAJoxXbTmXElOISaCtmf8+e3unR+ePqp98BStAABQhEmtAADXZStaTWcFAAAAoDe3yrG7A1ovvnjjy3Fu5vzSZszZb/4np5Oidc42Q28QAADKulUY3h3Qeq6fYa3ZVFt15hExOY5btM55V8bdHQAAbRC1AgCUJGcFAAAAoDcTRWvWdQRR1W3pMA/OueVOilZoQ4efhwBAFBNFa+aVhFBb1xex/DzMfrpq2933v/9Zkg0AAP/H3t0bVY6sARhGU1gkgjkmxSSwG8aEsBnAZLAh3DB2ExhqzGuSCK6uce6eYvnRkVr9qf+ex5yhREvdR4Dx1leKqBUAoKTpH6UXAgAAAABHKFW0/vHX36HXX0MBVZuVw2mP2ThFKwAAsF+porWGMrC2YHI067vWSnbq4qGtLXgGAIDOiFoBAKowvVJ6LQAAAAAQwozWyq2MPHtSSdeqaH1jkNsEAIC8zGitX997sf7uinetitbubxAAgPqJWgEAPvbz589S31raCgAAAABwjOJd62hFq5HFAAAAvZqfbyof2frt+9flovXnf/7bevBZvBkGAIA1rksvAACgXsld67dv3/Z/91PXOs/z/ksBAAAAQHHFx7T+8dffzU0irTBivHt4rHBVO/35+29//PX3xS/Lfu+b8s7+HjsAAJBR8TGt375/bS4FrHPB0+1L6wNd5+eblV3l6cuOud+L01mvaj0SAADQJZNaAQDy+/nz5/xvyZea/pFxeQAAAABwsOJFa3GmU1Zu/bzWXFupaAUAAHIpXrQWZzRlbTadvdPU1qBNnG5fLk5nPVG0AgDAkUxqBQA4wrlrTc5TDW4FAAAAoDM6vQqtnFnapVPXunJk61XqAU5oYkf7pIx2vwAAEGScorUt66eYtu50Ajfd7PmL95/eTd93tJx1tPsFAKBOolYAgEPtrFunadK1AgAAANAWQ0o7c/fw2HF2uD7rfX2wlx9I8kegv+fsbQAAANkNUkgOZbp96aZJTkhb33z9mkeR/CnoL+/0QgAAoBWiVgCAMuZ5Tu5ar4xsBQAAAKBx+2u97uu4UkHjyMNaT/78/bf7+/tNByz7aewvZ11p2BsHAIC89ieR375/zbKSas3PN09Pxb71aOXhnluOe1b9Fa1rjHnXAABUSNQKAFDMKUw1shUAAACAjnWfnq7hIbTo14/HIhun6gQAANYbrY38kIfQhLSRrRFUnQAAUANRKwBAYUa2AgAAADAa2V7r7h4eR9jE0z0elrZ2/0jV3QAAcIz9Y1opbrp96XIfzzdVpG7tPmetoRkGAICVRK0AAOUld61XRrYCAAAAUDENW6P+/P23P/76u/QqanFuTYPOc/ct63oeBQAAbCJga9f8fDP49h1Zt3bfsq7nUQAAUA9RKwBAFXStAAAAAAwiS7fWfS6r7qtQ3rp1tC3u/jMLAACVyDLe89v3r/svUrMuh6A26s1e5GpcX1/26SnLJWs3eCYNAEBzRK0AALXQtQIAAADQk9oatj9//630ElpycVjr3cPjaFnm2fsbv3jah31W63lEtMWJBQCKqy1gMwFyq4vDWqfblwHj2w9v+eJpH/BBJfAhBQCgKqJWAICK6FoBAAAA6NuAFVBtcS8RBjzYAABAhQZM+2qLe4kw4MEGAIDufSm9AAAA/mVPmJocxAIAAABAXqElp0z0GBdn29oIVmplkm0lywAAgItCS85v37/GXZzXLraakl1WunhUjGkFAKA2olYAgK7oWgEAAACoVsFg7GKfWRVlHQAAAFsVnGbZVi9n7CcAAEBxolYAgOrsGdZ6pWsFAAAAoDQDPLvRVgxMnVoZ0woAAK0wvbMnClv2M6YVAIAWTTuTCQAAguxpU/2OtyBX9OshAwAAAHzms4YtS7qWVsyWqubaWu2HFIns1NYR0uSzUlXnFgAYzWcBW5Y8Mq2YLVVmtrXaz1y8i9oWTG0aOkKafNar59wCAEFMagUA6JBhrQAAAADUpmD/Iz3aw9MjlAMGAABZFIx/dEc7eYCEquqAVbUYauaoAMAIRK0AAJXaOQhU1woAAABAEeYc7tRc42fHWeB4AABAXuYc7tRiKGXTWeB4AADQKFErAEC3dK0AAAAAdEYgV0RznS2tcLQAAKAq6rhSWkxtaYKjBQBAtUStAAD12jmsFQAAAAAoWM2Nk+COc6ds4mDQKz02AMBZwWRuqAR3qJtlPQcDAIB2iVoBAHpmWCsAAAAANcjS/wjkClJwkV2dh6rOVQEAwLIsZak6riwTNcnOoQIAoGbXpRcAzXt6espynfv7+yzXAQAAgJ74uxsA2uJnN7Vprk9rbsFndw+P7S6eCCp0AIDs/NFNbZpL5ppb8GvT7UvT6yc7IToAAE0zqRUAoGrzPO+8gmGtAAAAAJSldeyDfSQjxwkAAHIROnbDVpJRtcep2oVRD4cEAAYhagUAAAAAAACyCWrVmpv62NyC11je3C5vmTTLh0HRCgAAyYJSn+ZGPja34JWW97fXuybB8mHQBAIAUL/r0gsAACDcNE37J74CAAAAwEqVFGuVLGModw+PHjvyZvrmLQcAFFdJrlbJMkYz3b548sibAQDogEmtAAAAAAAAAOU1EUo1sUhqVv8Rqn+FAABAglZa0FbWSbUcIQAAmiBqBQCoXZYhq9M07b8IAAAAABRh8GNVlpM/mzW45QOgFwUAgAqZ+lib5SjRfg1u+QA0UbQ2sUgAAKKJWgEAAAAAAIDelG3nhJ2MyckHAIBBlG3SVJ0My+Gne5pnABiHqBUAAAAAAACADQxrJYExrXTAMQYA4BiGtZJADQgAQENErQAAo5imqfQSAAAAAGCzhEKyxeiouTXrWnljedPbOuFtrRYAAPZIyCNbDOf6W7OudUDLm97iIQcAYGSiVgAAAAAAAAAAAAAAIJwElw85GAAwFFErAEAD5nkuvQQAAAAAYJVxhpQa1spZT2NaAQCAmg01odSwVs6MaQUAoDOiVgAAAAAAAKBSCWGkfO5IulauOi1aG102oZwKAKA/CVWkdu5gulauFK0AAPRI1AoAAAAAAABQUtOhlK51cF0WrQAAQE9aT/50rYPrtWhtd+UEcSQAYDSiVgCgW9M7pVdUnocAAAAAAGQnXByWohUAAOAAWq9h9Vq0AgCAqBUA6M1CwqpuBQAAAICGJAz5LB7RGUz6nmcypuIfxv06uAUych4AgP4kTPgsXtCZSvohj2VMxT+PAACwh6gVAOjH+mBV2goAAAAAkNFy7qVr7ZJtBQAAOMxywahr7VL326rL5cxhAIABiVoBgE4kRKq6VgAAAACguG6m/+lah7K8od2cajhxpAEA2tVTKKVrHcryhvZ0sAEAGJOoFQDoQXKeqmsFAAAAgDolNJCio+J0rYMYp2jt6V4AAOC1hABSRFcDXesgFK0AAHRP1AoANG9nmKprBQAAAACyEG1e6VoHME7RCgAAVEWxeaJr7d5QRWtnt0MaxwAAxiRqBQAAAAAAACAbXWvHBixau7wpNnEGAACoja61Y0MVrQAAjEzUCgC0LcucVcNaAQAAAKAqCd1jo9FRo8u+SNfapQGLVgAA6FJC9NhoStfostfQtXZpzKK11/tiJQcAAIYlagUAAAAAAAAgM11rZ0arcvdSAAAgAElEQVQuWvu+O5bZfQAAqqVr7cyYRSsAAMMStQIAAAAAAADspdJ8T9fajZGLVgAAoAYSzQ/pWrsxeNHa/Q3yGVsPACMTtQIADZumqcJLAQAAAABwomvtgKL1apjb5A37DgBA/XStHRi8aAUAYEyiVgCAgczzXHoJAAAAAHBBQujYaHfU6LK3+vXjceFOda2VW9ig5Z0FAADqlFA5NtrUNbrsBPPzzcLN6lort7BByzvbmXHulDObDgCDm4QNAEC78o5Xrfz3oiw3W/k9HiPXsfEwAQAAAII0GrU2uuwjLeeRx62D1WzZGxrsoYx5yAGAETQatTa67IMt55FHroSVbNlrAuzRDHjIAYDXTGoFAAAAAAAA2EXqtoZ5rW1RtAIAAJWQuq1kXmtbFK1vjHnXw7LdAICoFQCgAXln0gIAAABAT/R1DdG1tkLR+qGR73009hoA4Ex31BZdaysUrQAADO669AIAAKowz3PpJYQb4R4BAAAAaN04ZeOwxdTpxsfZ6J4Me2gBAKAb42SNI2eBp3sfZ697MvK5PZmfbxzdETjqAMCVSa0AAAAAAAAAHEwe2RxbduI5jMAuAwDQAc1Yc2wZAABDEbUCAAAAAAAApDN0NM2vH4+vyzEVWVXebI3dAQAASjG2Mdn8fPO6k9RMVuXN1tidM4+ie7YYADi5Lr0AAIB08zxP05TlOvsvUrkR7hEAAACAAWntWmcHq2VrPvPrx6OUvWNOPgDAa9KjDtjEatkaAABGZlIrAEDtsoS7AAAAAEA9RFPQNB/hXtlZAIA+aAWhaT7CHbO5AMCZqBUAGJ0RpgAAAABQCcMPAQAAIMh0+1J6CQCrSB+7ZFsBgNdErQDA0AYpWge5TQAAAAA4nhAXxmSkZ3/sKQBAhYS4AAAAXRK1AgBt25NrSj0BAAAAAIA0Gsie2E0AAICqmOrZGRsKALwhagUABtVK0TpN084rtHKnAAAAADAI6RQAAAAE0U1BN3ycu2ErAYD3RK0AwHDmedZ5AgAAAEAH1KFAWd5CfbCPAAAf0iABxXkRAQD0StQKADRvZaE6/yN6PRkZ0woAAAAANbt7eCy9BKAwPWTr7CAAQLWm25fSSwBgL2UyAPAhUSsA0LkWW9ZcxrxrAAAAAACANRStAAAAlZNENs32AQCfEbUCAD1YqDf3Dzstpd2VAwAAAACfEVBBf3yuAQCgEuop6JKPdqNsHACwQNQKAHSiy651D2NaAQAAAADgGLrWFtk1AACAVsgjm2PLAIBlolYAYAjNda07F6xoBQAAAIBodw+PpZcAVEQh2Rb7BQBQuen2pfQSAAAAiCJqBQD6oeQ88RwAAAAAAOB4OslW2CkAAIDmmPzZEJsFAFwkagUAurLQc07T1Mq81lbWCQAAAADDShvTKqOC7vmY188eAQDUL21Mq4YKuudj3gTbBACsIWoFAHqzPKe0/l505wqNaQUAAAAAAPiQohUAAKBpgsnK2SAAYCVRKwAwnJq7VkUrAAAAANQvbUwrMAjZZLVsDQBAE9LGtALjkE1Wy9YAAOuJWgGADl1sO2vuWpMpWgEAAAAAoAbiSQAAAIgjnqyQTQEANhG1AgB9mud5OfKcpqm2tHXPehStAAAAAHSgiQwseUxrE3cH5OIjXxs7AgDQRG6UPKa1ibsDMvKpr4rtAAC2ErUCAD1bM7K1hrR1zzIu5rsAAAAAQC7JRSswIBVlPewFAEATkotWYExCykrYCAAggagVAOjcmuCzbNpqQCsAAAAANEHRCmylpSzu149HuwAA0ARFK5BATlmcLQAA0ohaAYD+rSw/i6StilYAAAAASKYyBeonqizIkwcA2ENlCjRBVFmQhw8AJBO1AgBDmOd5U9p6QN2657usvx0AAAAAaEu1AdLOgLba+wKO4SVwPM8cAOC9auujnQFttfcFHMNLoAiPHQDYQ9QKAAxkUwgaV7fuvKycFQAAAAAOZiQssJ/G8kieNgBAQ4yEBfYTWB7MAwcAdhK1AgBjSZhxOr2y51vvv4gBrQAAAACMYFOJdEBuqmgFclFaHsNzBgBYsClDOiA3VbQCuczPN0rLY3jOAMB+olYAYETJdej0zvqvT1rp/8lZAQAAAKAIRSuQl94ymicMANAQRSuQnd4ylHIYAMhlUkcAAIPbmZtG89tadrl23NYAAAAAhNpUk0YkTBlzVoUV8IZgPoKXLQDAeptq0oh+KWPOKq8C3tPMR/C+BQAyMqkVABjd/I/SC/mXOlcFAAAAAIcp2ybpzYBQv348KjDz8jwBADYpGyaJzYBo8svsPFIAIC9RKwDA/1XSkdawBgAAAABoS8YG9e7hUdEKHEOHmYsnCQAQKmODOt2+KFqBY8zPNzrMLDxJACDCJJkAAPjMNE3HfCO/kh0p17baNQAAAIADbOpL90dNQTmr2gpYpqVP5gULALDHpr50f9EUlLNKrYBlWvo9vGMBgCCiVgCAtfI2rn4NK0XUCgAAANCWra1XWuC05rv8+pEyxFVwBayha03gBQsAsN/W1iutblrzXebnm4TwTG0FrCRt3coLFgAIJWoFANhrOZL061ZtRK0AAAAAzYnrWlde+XxBUSsQStq6klcrAEBGcV3ryiufLyhqBULpWtfzdgUAoolaAQAYi6gVAAAAoEXJodf78Ck5kU1bg/IK2ETXepH3KgBAdsmh1/vqKTmRTVuD7ArYStq6zHsVADiGqBUAgLGIWgEAAADadXDr9aabErUCh5G2fsgbFQAg1MGh15tuStQKHEna+p43KgBwJFErAABjEbUCAAAANO2w0Gv/iNcPLwKwnrT1zOsUAOAYh1Ve+0e8fngRgPV0ra95owIABxO1AgAwFlErAAAAQAdCQ68P0yljWoFSBk9bvUgBAI4XGnp92E0Z0wqUIm31LgUAirguvQAAAAAAAACAbc6NU8bWSzcF1On0dhowbfVaBgAo5Rw4ZWy9RFNAnU5vpzHTVm9mAKAgUSsAAAAAAADQqv11q2gKaMJQaas3MwBAJfbXrYopoAmjpa1ezgBAcdM8z6XXAAAAx5mmKct1/CINAAAAUL8P66+0ViohJBNlAUE6Tlu9OQEAGvJh/ZUWSiWEZIosIE6vdas3JwBQD1ErAABjEbUCAAAAsFVaPybNAqJ1U7d6YQIAjCwtHpNmAdF6Slu9MwGA2lyXXgAAAAAAAAAAAJudWtCm01Y5KwAAAHU6h6Dt1q1aVgCgWqJWAAAAAAAAgMxkWsBhzi+chupWL0kAAPaQaQFHaq5u9ZIEAOonagUAAAAAAAD4VEORGDC416Vohe8uISsAAO+1UogBXFVft2pZAYCGiFoBAAAAAAAAALpSSeAqZAUAAKA/r/PRsoGrkBUAaJSoFQAAAAAAACAnERdQlTcvpdDG1QsQAIBoCi6gKu9fSnGZqxcgANANUSsAAAAAAADAxwqONwQIstCdrnzpKVcBAMii7HhDgCAL6ema955yFQAYgagVAAAAAAAAAAC1KgAAAAQSrAIAnHwpvQAAAAAAAACAGqWNaZWEAQAAwEVpY1r1YAAAAB0QtQIAAAAAAAAAAAAAAAAAEO669AIAAAAAAACAob0fiNrusNN2Vw4AAECX3g9EbXfYabsrBwAA4DVRKwAAAAAAAFDA+5b1zX+VDUQXlgcAAACVe9+yvvmvsoHowvIAAADo3pfSCwAAAAAAAACGsyYZvXt4bKssNaYVAACAGqxJRqfbl7bKUmNaAQAAumFSK+z19PSU5Tr39/dZrgMAAAA98Xc3ALTFz25Wqj9VTVihohVoTq4f3Fd+dgPAIfzRzUr1p6oJK1S0Ai3ysxsA4DMmtQIAAAAAAADH2dqL1l/AAgAAQCW29qL1F7AAAAD0R9QKAAAAAAAAHKSJQtWYVgAAAFrURKFqTCsAAACiVgAAAAAAAOAIyUXrkSlsE9ktAAAAvJFctB6ZwjaR3QIAABBN1AoAAAAAAACQzphWAAAACGJMKwAAQH9ErQAAAAAAAEC4JiagJixS0QoAAEBxTUxATVikohUAAKBLolYAAAAAAACAFIpWAAAACKJoBQAA6JWoFQAAAAAAAKCNWbIAAADQoiZmyQIAAHAMUSsAAAAAAAAQa2cvesBA1IQVGtMKAABADXb2ogcMRE1YoTGtAAAAHRO1AgAAAAAAAENTtAIAAEAQRSsAAABviFoBAAAAAAAANlC0AgAAQBBFKwAAQPdErQAAAAAAAEC9ogvSrWNaFa0AAAB0I7og3TqmVdEKAAAwAlErAAAAAAAAMChFKwAAAARRtAIAAPAhUSsAAAAAAABQqdCIVNEKAADAyEIjUkUrAAAAnxG1AgAAAAAAADVStAIAAEAQRSsAAACliFoBAAAAAACA6ihaAQAAIIiiFQAAgIJErQAAAAAAAECsTVHorx+PilYAAABYaVMUOj/fKFoBAAAo67r0AgAAAAAAAAAOakcVrQAAAAzomHZU0QoAAMAaolYAAAAAAACgmMOq0a0565WiFQAAgMYdVo1uzVmvFK0AAAAD+1J6AQAAAAAAAED/PgtEE1rTBAkDWhWtAAAAtOKzQDShNU2QMKBV0QoAADAyUSsAAAAAAABQUnTXmlC0hqwDAAAADhfdtSYUrUErAQAAoBWiVgAAAAAAAOAIC7FoUNd69/CoaAUAAGAEC7FoUNc63b4oWgEAAEhwXXoBAAAAAAAAwCh+/fi0Mj39e66mNKGSlbMCAADQtPn55rPK9PTvuZrShEpWzgoAAMCZSa0AAAAAAABALfaPbE2YznqlaAUAAGAA+0e2JkxnvVK0AgAA8G/TPM+l1wAAAMeZpinLdfwiDQAAAJBsZXS6NTRNC2LlrAAAAPRkZXS6NTRNC2LlrAAAALwnagUAYCyiVgAAAIBKbGpQP0tP90x2lbMCAADQq00N6mfp6Z7JrnJWAAAAPiNqBQBgLKJWAAAAgHrsSVL3kLMCAADQvT1J6h5yVgAAAJaJWgEAGIuoFQAAAKAqB3etclYAAADGcXDXKmcFAABgDVErAABjEbUCAAAAVCg6bdWyAgAAMKzotFXLCgAAwCaiVgAAxiJqBQAAAKhW9rRVywoAAAAn2dNWLSsAAABpRK0AAIxF1AoAAABQvz11q5AVAAAAFuypW4WsAAAA7CdqBQBgLKJWAAAAgEa9L131qwAAAJDF+9JVvwoAAEAQUSsAAGMRtQIAAAAAAAAAAAAAQBFfSi8AAAAAAAAAAAAAAAAAAID+iVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcKJWAAAAAAAAAAAAAAAAAADCiVoBAAAAAAAAAAAAAAAAAAgnagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAAAAAAACAcNelFwDNe3p6ynKd+/v7LNcBAACAnvi7GwDa4mc3ADQk1w/uKz+7AeAQ/ugGgLb42Q0A8BmTWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBwolYAAAAAAAAAAAAAAAAAAMKJWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBwolYAAAAAAAAAAAAAAAAAAMKJWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBwolYAAAAAAAAAAAAAAAAAAMKJWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBwolYAAAAAAAAAAAAAAAAAAMKJWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBwolYAAAAAAAAAAAAAAAAAAMKJWgEAAAAAAAAAAAAAAAAACCdqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAAAAAAAAAIBw0zzPpdcAAADHmaYpy3X8Ig0AAAAAAAAAAAAAAJuY1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABDuf+zdsQ0DIRAAQSO5KfoPKOtdgQNL7L+wZgo4kR0EK0StAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAOTeTx8AjrfW2jJnzrllDgAAAPwT724AOIvdDQAH2bW4X3Y3ANzCoxsAzmJ3AwB846dWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHLjuq6nzwAAAPcZY2yZ4yINAAAAAAAAAAAAAAA/8VMrAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAADlRKwAAAAAAAAAAAAAAAAAAOVErAAAAAAAAAAAAAAAAAAA5USsAAAAAAAAAAAAAAAAAALn30weA4621tsyZc26ZAwAAAP/EuxsAzmJ3A8BBdi3ul90NALfw6AaAs9jdAADf+KkVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACA3Liu6+kzAADAfcYYW+a4SAMAAAAAAAAAAAAAwE/81AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAJ4/PxUAACAASURBVAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABA7v30AeB4a60tc+acW+YAAADAP/HuBoCz2N0AcJBdi/tldwPALTy6AeAsdjcAwDd+agUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgN67revoMAABwnzHGljku0gAAAAAAAAAAAAAA8BM/tQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQez99ADjeWmvLnDnnljkAAADwT7y7AeAsdjcAHGTX4n7Z3QBwC49uADiL3Q0A8I2fWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAgA97d3fVuJI1YNhiEQIh0BFwRTAngxNOZ9DB+IoImhDIQd+F5/MwGAv9lFS1dz3PmouZc2i5SiUb6Fnv2gAAAAAAAAAAALC7YRzH2msAAIDjDMNQ5Dp+kAYAAAAAAAAAAAAAgEVMagUAAAAAAAAAAAAAAAAAYHeiVgAAAAAAAAAAAAAAAAAAdidqBQAAAAAAAAAAAAAAAABgd6JWAAAAAAAAAAAAAAAAAAB291h7AQAAAAAAUMzHy/Plvzy9vdddCbecDgAAAAAAAABA54ZxHGuvAQAAjjMMQ5Hr+EEaAABacw0mr5STTXFAAAAAAAAAAAA81F4AAAAAAABsdRtM0j6nBgAAAAAAAADQG5NaAQDoi0mtAACQzEQYaRBoa+4dlpMCAAAAAAAAAOiESa0AAAAAAESlaI3l3qEY2QoAAAAAAAAA0AmTWgEA6ItJrQAAkIaxn0E5OAAAAAAAAACAbolaAQDoi6gVAAASMKA1OicIAAAAAAAAANCnh9oLAAAAAACABfSQCUyc1MT5AgAAAAAAAAAQnagVAAAAAIAwFK1p6FoBAAAAAAAAADokagUAAAAAIAZFazK6VgAAAAAAAACA3ohaAQAAAAAIQNGakq4VAAAAAAAAAKArolYAAAAAAFqnaE1M1woAAAAAAAAA0A9RKwAAAAAATVO0pqdrBQAAAAAAAADohKgVAAAAAIB2KVo7oWsFAAAAAAAAAOjBMI5j7TUAAMBxhmEoch0/SAMAwAG6Klrnp5v59n7V1YkDAAAAAAAAAHRI1AoAQF9ErQAAEEX6vrHUANIcd+Mq/bkDAAAAAAAAAPTssfYCAAAAAADgq1LBZ2v22Nfna+bOPj9ennNvEAAAAAAAAAAgPZNaAQDoi0mtAADQvunyM2jWeHCmG/QuXaR8AAAAAAAAAAAAOJnUCgAAAABAIBGDxipTZ68vGvGOPb29Zx3VCwAAAAAAAADQOZNaAQDoi0mtAADQuImaMVaf2VSWGevWXaR5EgAAAAAAAAAAuHqovQAAAAAAAPiPpkLQLVrbSGvr2SjZdgAAAAAAAAAA+mFSKwAAfTGpFQAAmjVdKkYZzrm0t5y/ryIlZ5TbeJHjkQAAAAAAAAAA4ErUCgBAX0StAADQphz54szudON2ttetUe7nKcuDAQAAAAAAAADAxWPtBQAAAAAAQAZzWtMiEeb1Iqvr1o+XZzkoAAAAAAAAAADHM6kVAIC+mNQKAAANSjCN88e+dKddbJnaGuLGnlI8HgAAAAAAAAAAXIhaAQDoi6gVAABakyBZrL6F1WlriNt7auAOAwAAAAAAAABQxEPtBQAAAAAAQGATveXT2/sxveXqF9oy6BUAAAAAAAAAAJYStQIAAAAAUE30CZzTReuRK1n9iiG61umthdgCAAAAAAAAAAAnUSsAAAAAALVEbxGbKlq3vG70gzil2AIAAAAAAAAAQA9ErQAAAAAAtKjxMa0NFq1bXr39KLTx5wEAAAAAAAAAgDlErQAAAAAAVDBdUTZeMDZbtG5ZQ/Sutf31AwAAAAAAAAAgagUAAAAAgDJaKFov2lkJAAAAAAAAAABcDeM41l4DAAAcZxiGItfxgzQAAGyRckxra8teN7m0tV3cCv3wdGLj1FyHCAAAAAAAAACJPdZeAAAAAAAAfdkYvLWpwQzv6e095a2e9vHy3OBZJLbHM/btNR0rAAAAAAAAAORgUisAAH0xqRUAAKoLPWkzypjWqxXNYbN7uQr9CCXQQiztlAEAAAAAAAAgKJNaAQAAAAA4Tgs5XHH6uqYY1rqH1t65n9fjuAEAAAAAAAAgEFErAAAAAABscu3rcsR1olAuWgtZ70n2BgQAAAAAAACA3IZxHGuvAQAAjjMMQ5Hr+EEaAABW+LGRa7xJm9/4NbWRFWliU+v/VvRnqXFRctZ7nD4AAAAAAAAANMukVgAAAAAAKMywUyKK3rJeXTbiPQgAAAAAAAAADTKpFQCAvpjUCgAAtSQYrbk0+WtnR4a1MiFNy3qPJwEAAAAAAAAA2vFQewEAAAAAAJBT+laQ6D5ennt4SjvZJgAAAAAAAACEIGoFAAAAAGB3CYqyBFvojSOb0GHn2eGWAQAAAAAAAKBBolYAAAAAAOp7enuvvQSC8cys03nb2fn2AQAAAAAAAKA6USsAAAAAAOylkXxuRf/ZyMopSM955VYAAAAAAAAAQC2iVgAAAAAA9vVjPGbkJuv8+OQIF6/cilvSVgAAAAAAAAA4nqgVAAAAAAAgLenmNDcHAAAAAAAAAI4kagUAAAAAYEeCMerq+QmUs87kRgEAAAAAAADAYUStAABrDEvUXiwAAEDTnt7eay+BwDw/96g0l5K2AgAAAAAAAMABRK0AALNs6VSVrgAAAAmsiycllxxPnLmFWwcAAAAAAAAAuxK1AgDctWuDKnAFAAB6IA+jBV09h11tdifuIQAAAAAAAADs57H2AgAAmnN8ZXp9xXEcD35pAAAAIA01ZimXO2nSMgAAAAAAAAAUZ1IrAMB/VZ+bWn0BAAAAB4vVjC1dbazdxeU+n06nj5dnRWtxbikAAAAAAAAAFGdSK2x1Pp+LXOf19bXIdQBYp6mU1OBWAIArv3dDaCl7sKe395n7Ulo25ePlOfGJpHyvNSL3kwMApX7pPvm9GwAO4S/MASAW37sBAO4RtQIAvWsqZ/3isjZpKwAAQFMuhdtERpgjgcuxix4oWvd2ucPeEQAAAAAAAABQxEPtBQAA1NRy0Xo1DEOIdQIAAHTl6e39NnL79h+2QPeYlZM9jFsNAAAAAAAAAEWY1AoAdGpdJrpoaGrZEnUYBiNbAQCAQOYEYG32n4sk2EIOT2/vPz5yHy/Pmc5LY3m8ZI8QAAAAAAAAAFRhUisA0KNFuen4yaJXWf0H7zGyFQAAADgpWutx5wEAAAAAAABgI1ErANCX+V1o2R61bNpa5DoAAABARLrKutx/AAAAAAAAANhC1AoAdGRRzrrHAkpd2chWAAAA5lvR4D29ve+xErZTVLbAKQAAAAAAAADAaqJWAKAXcyrQ/XLWPV5F1woAADRrTvElm6SsOU9U9BYx+vozcRYAAAAAAAAAsI6oFQDowsyi9YCVfH657a+oawUAAGCa9C4NR9kaJwIAAAAAAAAAK4haAYD8fiw/jxnQeu+lN15B1woAAEBZhug2SD/ZJucCAAAAAAAAAEuJWgGA5OYUrcesZL8F6FoBAAAgMeVky5wOAAAAAAAAACwiagUAMpuuPSsOaP1C1woAAGQi8WrHirNIP6Y13PMZbsEdckYAAAAAAAAAMJ+oFQDoVCM565WuFQAAACAoXSsAAAAAAAAAzCRqBQDSmog8WytaL3StAABAP9KPA21Bh2Nao6//llQyEIcFAAAAAAAAAHOIWgGAnMIVrRe6VgAAAOBCJAkAAAAAAAAA5CNqBQASCh12ttzcAgAAEEWHY1qTUbRG5NQAAAAAAAAA4EeiVgCgLz0ko6GbXgAAALZTtEanjYzL2QEAAAAAAADANFErAJDNRNIZpWjdvk5dKwAAUIugi/Z5StmVBwwAAAAAAAAAJohaAYBeRClaL2KtFgAAgHYY0xqdJBIAAAAAAAAASEzUCgCkYkLplVsBAADQIUVrdIrWHJwjAAAAAAAAANwjagUAuhBx8GnENQMAABCLorUpSshMnCYAAAAAAAAAfEvUCgDkYTbpF24IAADQJiHlTpZGdCkPIuWmAAAAAAAAAADSELUCAPkZeQoAAEB6itboDPbMx5kCAAAAAAAAwC1RKwCQRMqppNtz3JS3BQAAgC8UrdAmXSsAAAAAAAAAfDEYXAYA5HCv3oz+0872KjX6HSiuVOjrxgIAwLfmFFyKyrIUrV9EfAilj4m19rABAAAAAAAAQF0mtQIAyQ2f1F7LGoa1AgAAUJC+rkGK1tycLwAAAAAAAAB8JmoFADKY2W1GD1wBAADgi0W9nKIVqtC1AgAAAAAAAMCVqBUA6JSuFQAAoDjh1sEUrau186y2sxIAAAAAAAAAgAOIWgGAfkUZ2TqOY+0lAAAA0BxFKwSiXgYAAAAAAACAi8faCwAAqGwYhvTVaA97BAAA6Mr8QE7O2jKhIwAAAAAAAADQG5NaAQAAAAAgEkUrRKRhBgAAAAAAAICTqBUASGAYhupXAAAAgGMoWtOQOAIAAAAAAAAAHRK1AgAAAABADIpWCE3JDAAAAAAAAACPtRcAANCEYRjGcay9irvGcTROFgAAoHMzczg5awjiRgAAAAAAAACgTya1AgB0QRMLAAAQmqIVctAzAwAAAAAAANA5k1oBAAAAAKBd8xM4RWsUskYAAAAAAAAAoFsmtQIAAAAAQKPmD2hVtEIUqmYAAAAAAAAAeiZqBQAAAACAFs0vWvdeCQUJGgEAAAAAAACAnolaAQAAAACgOYpWAAAAAAAAAADyEbUCAAAAAEBb5hStT2/vilYIysBeAAAAAAAAALolagUAwhvHsZGLAAAAwHYzi9YDVkJxUkYAAAAAAAAAoHOiVgAAAAAAaIWiFTqhcAYAAAAAAACgT4+1FwAAAAAAAJxOMyI3OWspVe6kiBEAAAAAAAAAwKRWACCDcRwr/nEAAAAuJJdbKFoBAAAAAAAAAEhP1AoAJLE6TFW0AgAAUJ2iFTpkeC8AAAAAAAAAHXqsvQAAgJoUrQAAAFTXSNF6uwwlbUHyRQAAAAAAAACAk6gVAMjkUqgOw7Do6zvR1WYBAACiaCRnBQAAAAAAAACAYzzUXgAAQGEz681Ykef8UhcAAIAomipazREFAAAAAAAAAOAAolYAIKHx/y36VwAAAHCYporWNhewjjqXWDyxAAAAAAAAAPRG1AoAZDbeqL0iAAAARFwBilbK8swDAAAAAAAAAFw81l4AAAAAAAB0ZLpvlLMCAAAAAAAAAJCYSa0AAPkZUQsAANAIRSsAAAAAAAAAAD0TtQIAtG4YhtpLAAAAmEuWOUHR2gi3mqZMfzIAAAAAAAAAQDKiVgAAAAAA2F3LRaumblduLwAAAAAAAADA1WPtBQAAsK9xHGsvAQAAoHcTWWObU0PbXBUAAAAAAAAAANGZ1AoA0LRhGGovAQAAgE3CFa0AAAAAAAAAALATk1oBAAAAgB596Qy1hexE0XqkibsNAAAAAAAAAEALRK0AAJmN41h7CQAA0Irp2k3jerCPl+f0N3n6kWtn+0JQqK6Hj0QAAAAAAAAAuHiovQAAAO4ahqH2EgAAIIOPl+el2d6KP9KailuQZp3iFK0dOvjmR/8kAQAAAAAAAAAoy6RWAIC0jGkFAICNOdnlj8fqD79s+fo/Y+0iuokHr7WDkFwCAAAAAAAAAHAkUSsAQKOMaQUAgC0KpnpR0tbpLUfZRQKBilYAAAAAAAAAADiYqBWOcD6fi1zn9fW1yHUOYMur2XLLSm351OWubfl488e0ptnywc7nc6Atd3jKPrS3sOWW2fJqHW75FGfXHW755NneYOaW9xg++fHyvKhIbHPLS3exyOct/1r49Z+FfrB//fvPvS/++/vP3/tPRZVd33tsph8Sn2CLzHkvQBXey1t0uGtbbpktr2bLLfOhvYUtt8yWV7PllvnQ3sKWW2bLq9lyy3xob2HLLetwywAA0YlaAQBaZEwrAACsNifv/NLstVCEbrFHxLvR399/JvLOi1///vP3959j1nOM6S1P/9uP0ovp0Ir3PgAAAAAAAAAAB3uovQAAAMqbP6YVAACSma7ant7eL/+5/edFrl9Fg0vq048RLwAAAAAAAAAAIGoFAGjOxjGtilYAALo1kXd+27J++YLtrxJC9PW3SdEKbOTDGQAAAAAAAIBOiFoBAAAAgAymi9YjV3IkEVQLFK0AAAAAAAAAADCTqBUAoC3GtAIAwAr32s4fB7R++eKNL8dnf3//qb2EIyhaGzHnXZm4bwcAAAAAAAAAiELUCgCQh6IVAIA+TRStB68khKZuS/QiNPr6v9XUEwIAAAAAAAAAQDKiVgCAhmwc0woAAB2qVbS2MKy1hTV06+Pl2f3nRymzZwAAAAAAAACALUStAACt2Fi0GtMKAECHzGht3N/ff2ovYRdy1oh8LAAAAAAAAAAAtEDUCgCQgaIVAADgGIrWBjkUAAAAAAAAAIAoRK0AAE3YMqZV0QoAQJ+qj2mN2NE1OKzy17//1F7CAhEPHQAAAAAAAAAA2iFqBQCoT9EKAABLVS9aq1NXAgAAAAAAAAAA4YhaAQAAAIAk+ilaA/n7+0/tJRTTQ0ic9U2UdV8AAAAAAAAAAOGIWgEAKjOmFQAAluqhLezKr3//qb0EAvOBAAAAAAAAAAAQiKgVAKAmRSsAAJSyfRJj+jSu1rDKTMNaiciYVgAAAAAAAACAdohaAQBCUrQCANCt9OnpHG4CAAAAAAAAAAAQkagVAKCa1WNaFa0AAPCFSYzR/fr3n9pLICSBNwAAAAAAAABALI+1FwAA0ClFKwAArCBgC+rv7z8JstXbdvp8Ppe6+Ovra6lL8Vnd4j3Hkw8AAAAAAAAAUJBJrQAAFShaAQCgoCLRWvpc1jBb8kn/tgUAAAAAAAAAyEfUCgBwNEUrAACs09rAQ5noIn9//5n+gtbOlwS8SQEAAAAAAAAAWvNYewEQ3vl8rr0EALqgaAUA+NHEL+mvr69HroQjdRitmU4JAAAUUfD/7PZ7NwAcoNT3bt+4AeAYvncDANxjUisAwKHWjWlVtAIAwK5jPGWixzCslYJ+fNt2WLwTmicWAAAAAAAAgE6IWgEAjqNoBQCAsiomQLHqo1irBQAAAAAAAAAAshK1AgAcRNEKAACrGeCZxo/DWmEOY1oBAAAAAAAAAIIaZBKw0fl8LnKd19fXItcBoE2K1nasO4tbTgcAjuH3bi7uBWxFurUf67j9XnqFWKv9lhyR7QI9Reves3SonYcWgK6U+qX75PduADiEvzAHgFh87wYAuMekVgCA3a2oKMdx1EwCAMC0iv2P9GgLd4+9ecYAAAAAAAAAAJolagUA2Ne6onWPlQAAQFDmHG4ULvBz4kzzhAAAAAAAAAAAxCVqBQDYkaIVAAAap46rIlxnSyCtPV2trQcAAAAAAAAAoC5RKwBAQxStAADQvoqJWj8Jbj87ZSnPBgAAAAAAAABAaKJWAIC9LB3TqmgFAID5ipSl6riKjK9kD54rgvLoAgAAAAAAANAPUSsAwC4WFa3jOCpaAQAghHDdUbgFX0mOueWpAAAAAAAAAACITtQKAFDe0qJ1v5UAAEBKcUNNPnOOlOWJAgAAAAAAAABon6gVAKAwRSsAAJS1U6gWbuRjlsxCrwAAIABJREFUuAXPMX24KbfMatPPQ8tFa8trAwAAAAAAAAA42GPtBQAApKJoBQCAPTSShDWyjK58vDy77ZwUzgAAAAAAAAAAWZjUCgBQjKIVAABoSogcNMQiaZyniNA8wAAAAAAAAAB0RdQKAFDG/KJ1HEdFKwAA1GXqY1Omgy6HxfQzIAgEAAAAAAAAAAhE1AoAUMCionXXlQAAADupG84JO+mWhx8AAAAAAAAAIBNRKwDAVopWAACAjQxrZZ0oY1qjrBMAAAAAAAAAYG+iVgCATRStAAAQzopCMmKQFm7NulZuTZ97uIccbnmMAQAAAAAAAOiNqBUAYD1FKwAAAAAAAAAAAAAAwEyiVgCAlWYWreM4KloBAIAt+hlSalgrnyUb0xpuwQAAAAAAAAAAexC1AgCsMb9o3XslAADAIivCSCnakXStXCQrWuFbnmQAAAAAAAAAOiRqBQBYTNEKAAA0LnQopWtF0QoAAAAAAAAAkJWoFQBgGUUrAADA3lSLPUtctIZePAAAAAAAAABAEYPcAgBgPkVrAjMP8UdOGQAgohVDPqtHaOsGk1Zf9naJy0amTRx9gnM3apirBM8zAAAAAAAAAKxgUisAwFyKVgAAgMNM517KwKycLAAAAAAAAABAbqJWAIBZYhWtw3dqLwoAADhImul/utbe9DCeN8cuAAAAAAAAAABWE7UCAPwsVtEKAAB8a0UDKT+rTtfajx6KVrjySAMAAAAAAADQLVErAMAP5hSt4zi2U7QaygoAAGmINk+61j50VbQm2w4AAAAAAAAAwCKiVgCAKTOL1gNWslGIRQIAAHxL15pbV0UrnDzVAAAAAAAAAPRN1AoAcFeaohUAAFjRPQaNjoIu+0e61qwUrQAAAAAAAAAAXRG1AgB8T9EKAADQFF1rPt0WrYm3xo+cPgAAAAAAAACdE7UCAHxD0QoAAFSn0ryla82k26IVAAAAAAAAAKBnolYAgK8UrQAAAM3SteagaO1hj9xy7gAAAAAAAAAgagUA+B/Ri9Y56wcAgN6sCB2DdkdBl73U09v7xE51re2bOKPpwwUAAAAAAAAAIDpRKwDAf0UvWu+JuGYAAIBputagpovWI1dSXW/7xYkDAAAAAAAAwEnUCgAw3ziO6lAAAOAYssw5dK3hKFoBAAAAAAAAADonagUA+I/pMa1yVgAA6Ie4LhBdayCK1lvdbrxDzhoAAAAAAAAALh5rLwAAoAk5itbpXQAAQJ/6KRu7LaYuG+/noJPp9rkFAAAAAAAAAOiTSa0AAEmKVgAAgJ5pIyNyaic3oQ9OGQAAAAAAAACuRK0AQO8UrQAAQGsMHV3n6e39czmmImvNl9NxQFduBQAAAAAAAADQj8faCwAAqEnRCgAAfKEui84Jtszp0CGPPQAAAAAAAAB8ZlIrANCvZEXrve2E2wgAALCCaApC8xbOyskCAAAAAAAAwBeiVgCgU8mKVgAA4FsfL8+1lwAwi/oRAAAAAAAAAOiBqBUA6JGiFQAAaJYQFyAHoTIAAAAAAAAA3BK1AgDdmShax3EMWrROZ7oAAABA+zSQmThNAAAAAAAAAPiWqBUA6Mt00XrkSgAAAEqRTkEa3s4AAAAAAAAAQG6iVgCgI1mLVmNaAQCgFDkZANv5bgIAAAAAAAAA94haAYBeZCpah/818ZXhtgYAAJ37eHmuvQSgMj1kdE4QAAAAAAAAACY81l4AAMARpstPk04BAACAdjy9vUvcAQAAAAAAAICUTGoFAPLTrAIAAIkZCQgpeWsH5eAAAAAAAAAAYJqoFQBITtEKAAAAwAEUrQAAAAAAAADwI1ErAJCZohUAAAjk4+W59hKAhigkY3FeAAAAAAAAADCHqBUASEvRCgAAAISmk4zCSQEAAAAAAADATKJWACAnRevpdBrHsfYSAACAudaNaZVRQXre5u1zRgAAAAAAAAAwn6gVAEhI0QoAAACkoZlsmdMBAAAAAAAAgEVErQBANopWAAAgnHVjWoF+KCcBAAAAAAAAgBxErQBAKopWAAAAICVda4McCgAAAAAAAAAsJWoFAPJQtAIAAF+EyI1Wj2kNsTugIO/6pjgOAAAAAAAAAFhB1AoAJKFoBQAAIlpdtAJ9ElI2wkEAAAAAAAAAwDqiVgCAnMZxrL0EAADgB4pWYAU5ZV1Pb++OAAAAAAAAAABWE7UCABkY0woAABShMgVCEFXW4s4DAAAAAAAAwEaiVgAgPEUrAAAwodkAaWNA2+y+gGP4EDieew4AAAAAAAAA24laAQAAAACOZiQssJ3G8kjuNgAAAAAAAAAUIWoFAAAAAJJbVCIdkJsqWoFSlJbHcJ8BAAAAAAAAoBRRKwAAAADAcRStQFlPb++Sy125vQAAAAAAAABQ0DCOY+01AABsMgxD7SU0x894E0o9MG4yAEA4i2rSPRKmgjmrwgq4pZkvzoctAAAAAAAAABRnUisAAAAA0IW6bZLYDNibArMs9xMAAAAAAAAA9vBYewEAAFsZmAkAABT38fJcKmeSswKHuXxw+djZTtEKAAAAAAAAADsxqRUAAAAA6MWiSKlIFSYtA44nyNzi6e3dDQQAAAAAAACA/QwmmwEA0JVhGIpcxw/SAABxLQ1N19VNc17l6e19RfWqtgJm0tUv5QMWAAAAAAAAAPYmagUAoC+iVgAATnt2rTOvfL2gqBXYla51Jh+tAAAAAAAAAHAMUSsAAH0RtQIAcLE69LoNn1YnsuvWoLwClpK2TvO5CgAAAAAAAACHEbUCANAXUSsAAJ8dHHp96aZErcCRpK23fKICAAAAAAAAwMEeai8AAAAAAKCaI3OmIq+lvwJW8wHy2dPbuxsCAAAAAAAAAMczqRUAgL6Y1AoAwLd2HWD4bTdlTCtQS+cjW32QAgAAAAAAAEBFj7UXAAAAAABQ37VxKth66aaANl0+nTpMW30sAwAAAAAAAEB1olYAAAAAgP/aXreKpoAQukpbfTIDAAAAAAAAQCOGcRxrrwEAAI4zDEOR6/hBGgCgT9/WX+taqRUhmSgL2E/WutUnJwAAAAAAAAA0RdQKAEBfRK0AALRgXTwmzQL2liZt9YEJAAAAAAAAAG16rL0AAAAAAAAAmnBtQYPWrVpWAAAAAAAAAGicqBW2Op/PRa7z+vpa5DoAAACQid+74UqpBRwpVt3qExIA1in1S/fJ790AcAh/YQ4AsfjeDQBwj6gVAAAAAOBQIQoxgIvPvWhrH19aVgAAAAAAAAAIR9QKAAAAAADAz6oHripWAAAAAAAAAIhO1AoAAAAA0DodF9Ca28+lPTJXn34AAAAAAAAAkIyoFQAAAADgOFVmGwIc4BKgns/nIld7fX0tch0AAAAAAAAAoCkPtRcAAAAAAAAAAAAAAAAAAEB+olYAAAAAgIOsG9N6GX4IAAAAAAAAAAAQnagVAAAAAAAAAAAAAAAAAIDdPdZeAAAAAABAYbcDUeMOO427cgAAAAAAAAAAgC9ErQAAAABAErct65d/VTcQnVgeAAAAAAAAAABADx5qLwAAAAAAoIA5yejHy3OsstSYVgAAAAAAAAAAIBNRKwAAAAAQXvup6ooVKloBAAAAAAAAAIBkRK0AAAAAQGxLe9H2C1gAAAAAAAAAAICURK0AAAAAQGAhClVjWgEAAAAAAAAAAE6iVgAAAAAgrtVF65EpbIjsFgAAAAAAAAAA4ACiVgAAAACAthjTCgAAAAAAAAAApCRqBQAAAABCCjEBdcUiFa0AAAAAAAAAAEBWolYAAAAAgFYoWgEAAAAAAAAAgMRErQAAAAAAuwgxSxYAAAAAAAAAAOAwolYAAAAAIJ6NvegBA1FXrNCYVgAAAAAAAAAAIDdRKwAAAABAYYpWAAAAAAAAAACAW6JWAAAAAIDKFK0AAAAAAAAAAEAPRK0AAAAAQF/2LkiXjmlVtAIAAAAAAAAAAJ0QtQIAAAAAFKNoBQAAAAAAAAAAuGcYx7H2GgAA4DjDMBS5jh+kAQDqWtqOXu0akSpaAQAAAAAAAAAAJpjUCgAAAAD0QtEKAAAAAAAAAABQkagVAAAAAOiCohUAAAAAAAAAAKCuYRzH2msAAIDjDMNQ5Dp+kAYAqG5+R7p3QapoBQAAAAAAAAAAmOOx9gIAAAAAAHZxTDuqaAUAAAAAAAAAAJhJ1AoAAAAApHJYNbo0Zz0pWgEAAAAAAAAAgL4N4zjWXgMAABxnGIYi1/GDNABAC+5lpQe0owa0AgAAAAAAAAAALPVQewEAAAAAAIWtmKG66/UVrQAAAAAAAAAAACeTWgEA6I1JrQAAyUz0pXukpCtyWUUrAAAAAAAAAADAhagVAIC+iFoBAPKZDk1LNaVyVgAAAAAAAAAAgI0eai8AAAAAAGBHK2LU2ysoWgEAAAAAAAAAALYzqRUAgL6Y1AoAkNLM6HRpaLouiJWzAgAAAAAAAAAAfEvUCgBAX0StAACJLWpQ76WnWya7ylkBAAAAAAAAAAAmiFqB/2PvDo4iObYFDMMEJmACsoAFMRZITsgDLeQB4MEs5IGckCyYYIEFwgR84C36RT8e0NXV1ZWV55z8vtDi6sbQZGVm00Mo/jgAMBZRKwBAbeckqeeQswIAAAAAAAAAABwlagUAYCyiVgCA8jbuWuWsAAAAAAAAAAAAM4laAQAYi6gVAGAQrdNWLSsAAAAAAAAAAMCpRK0AAIxF1AoAMJTV01YtKwAAAAAAAAAAwGKiVgAAxiJqBQAY0zl1q5AVAAAAAAAAAABgFaJWAADGImoFAGDvc+mqXwUAAAAAAAAAAGhH1AoAwFhErQAAAAAAAAAAAAAA0MW33gsAAAAAAAAAAAAAAAAAAKA+USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACaE7UCAAAAAAAAAAAAAAAAANCcqBUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmhO1AgAAAAAAAAAAAAAAAADQnKgVAAAAAAAAAAAAAAAAAIDmRK0AAAAAAAAAAAAAAAAAADQnagUAAAAAAAAAAAAAAAAAoDlRKwAAAAAAAAAAAAAAAAAAzYlaAQAAAAAAAAAAAAAAAABoTtQKAAAAAAAAAAAAAAAAAEBzolYAAAAAAAAAAAAAAAAAAJoTtQIAAAAAAAAAAAAAAAAA0JyoFQAAAAAAAAAAAAAAAACA5kStAAAAAAAAAAAAAAAAAAA0J2oFAAAAAAAAAAAAAAAAAKA5USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACaE7UCAAAAAAAAAAAAAAAAANCcqBUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmrvqvQBI7+fPn6u8zvfv31d5HQAAAKjE790AkIvPbgBIZK0P7guf3QCwCb90A0AuPrsBAA4xqRUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHOiVgAAAAAAAAAAAAAAAAAAmhO1AgAAAAAAAAAAAAAAAADQnKgVAAAAAAAAAAAAAAAAAIDmRK0AAAAAAAAAAAAAAAAAADQnagUAAAAAAAAAAAAAAAAAoDlRKwAAAAAAAAAAAAAAAAAAzYlaAQAAAAAAAAAAAAAAAABoTtQKAAAAAAAAAAAAAAAAAEBzolYAAAAAAAAAAAAAAAAAAJoTtQIAAAAAAAAAAAAAAAAA0JyoFQAAAAAAAAAAAAAAAACA5kStAAAAAAAAAAAAAAAAAAA0J2oFAAAAAAAAAAAAAAAAAKA5USsAAAAAAAAAAAAAAAAAAM2JWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACau3x7e+u9BgAA2M7l5eUqr+Mv0gAAAAAAAAAAAAAAcBKTWgEAAAAAAAAAAAAAAAAAaE7UCgAAAAAAAAAAAAAAAABAc6JWAAAAAAAAAAAAAAAAAACaE7UCAAAAAAAAAAAAAAAAANCcqBUAAAAAAAAAAAAAAAAAgOZErQAAAAAAAAAAAAAAAAAANCdqBQAAAAAAAAAAAAAAAACgOVErAAAAAAAAAAAAAAAAAADNiVoBAAAAAAAAAAAAAAAAAGhO1AoAAAAAAAAAAAAAAAAAQHNXvRcAAAAAAAAAR7ze3uz+x/XzS9+V8JnTAQAAyO7u/mH3P54eH3qug08cDQAAAPVcvr299V4DAABs5/LycpXX8RdpAAAA2MY+mNxTTobigAAAAFLbN5N74sk4nA4AAAAlfeu9AAAAAAAAAPja52CS+JwaAABAFp+bSYJzZAAAABRgUisAAGMxqRUAAABSmAgjDQKN5tBhOSkAAICwJtpIs0BDOXRSjgkAAIC8TGoFAAAAAAAgFkVrLocOxchWAACAmBStiRw6ESNbAQAAyMukVgAAxmJSKwAAAARn7GdSDg4AACAFkz8zcmoAAABUImoFAGAsolYAAAAIy4DW7JwgAABAZAa0pub4AAAAKONb7wUAAAAAAACAHrKCiZOaOF8AAAA2IInMbuKYJg4XAAAAAhK1AgAAAAAA0JmitQxdKwAAQECK1hp0rQAAANQgagUAAAAAAKAnRWsxulYAAIBQFK2V6FoBAAAoQNQKAAAAAABAN4rWknStAAAAQSha69G1AgAAkJ2oFQAAAAAAgD4UrYXpWgEAALpTtFalawUAACC1y7e3t95rAACA7VxeXq7yOv4iDQAAAGdStI7AKQMAAPQSuWj9vLbuS8oo8hEDAADABJNaAQAAAAAA2JrWcRDmtQIAAHSRLnc0X3QB81oBAABIyqRWAADGYlIrAAAAdDdU0bog3RxqE+o9LAAAQHfxi9YvVxhkbenEP24AAAD4QNQKAMBYRK0AAADQV/m+cfUBpOW3pcYDAgAABBE/cYy/wnRsKQAAALlc9V4AAAAAAAAAo1g9+Iyj3aPtX7lq/Pl6e1P10QAAADY2ETem8H79asxV3N0/2EkAAACiMakVAICxmNQKAAAAvUxnn0mzxi6Zbsm9SvpQAAAAcUwXrXHKxvPL2zjPEkeW0wcAAIALk1oBAAAAAADoLmPQ2HHq7O5bp9u06+eXwqN6AQAAIivWNGYcSNv6CJ4eHzJuCwAAAGP61nsBAAAAAAAA1DdRM6aLM19vbyLEmUGWcZKJs073LAAAAKFMBI3FilYOmThovSsAAAChmNQKAAAAAABAW2V6xVMf5NRed8FGJZ3a+qXX25saDwIAALAxySJH3d0/yJsBAAAI4vLt7a33GgAAYDuXl5ervI6/SAMAAMBM06FmoohxZnG6yhMty4CzbGaZKwEAABDBdNEarWMctr/d7CBy3QcAAADG9K33AgAAAAAAACirTL54tDK9fn7Z/bPKt1v2Ulkm4k4/WpanAAAAiEDByAfThz5sVAwAAEAoolYAAAAAAAA46PX25mia26jOLdy1AgAAwDjUxQAAAPCeqBUAAAAAAIAmCoxp7ZWzvv8Wp35Jiq7VsFYAAIDzGdPKlwxrBQAAIDhRKwAAAAAAAOsrULRO2+wRFqSzKaJQXSsAAMA5FK1ZdDkLXSsAAACRiVoBAAAAAADgC4e6yg0GtJ5PFAoAAADdqYsBAADgM1ErAAAAAAAAKyswpnWiaN14JYu/b/yu1bBWAACAZZKOaR1tQGjfgzCsFQAAgLBErQAAAAAAAKypQIsYrWhd/N2zn0X29QMAALQgR0whbFq85yIBAADQi6gVAAAAAACA7aQY03rI6+2NzHJdqe8DAABAQPFbSjbjMgAAABCTqBUAAAAAAIDVTDefKQrGo9lqx7S15LDW6YeKv34AAIAtTU/XFDEGEecgpldiWCsAAABdiFoBAAAAAADgZGJLAAAA4LM4RSsAAADEdPn29tZ7DQAAsJ3Ly8tVXsdfpAEAAOCzAmNaL06sVbd/qAUxbYqdr3F5Clul4naOAABwpuxjWkeYCxrzFLLfnBGs8u5wlAAAQBaiVgAAxiJqBQAAgEaONm9ZerZT4z1d6yrK3J8CNp5C7GQBAGCmo81b8J5N0dpR9stTzJbvBScLAADEdNV7AQAAAAAAANSXpVvbOOdj7/r5xeZ31HHz33/rLD8oAAAgoOzpWqL1HyoSIz/C0+PDCFFxWB03/8O3jnxLAQCAoYhaAQAAAAAAONfIOeLr7Y0SbwP2eXUB37YCVwAAOKRwkZirsstYtM5xd/+Q/RECCvi2fb8kJw4AAHQkagUAAAAAAAAYRcCW9Uv7dapbAQCAIAI2igSU5Z7s16luBQAAtnf59vbWew0AALCdy8vLVV7HX6QBAABg72gjl6hJW9b7bfyACxaZ5Qgq3aVosrSsE5w+AADDOtrIpWjSvnyKFCvfmTiFLE9R4yKFlaVlneACAAAAmzGpFQAAAAAAAKCmAi3rntmtAABALwWKVhop0LLu7Z7FlQYAADZgUisAAGMxqRUAAADWVWy0pkmt3RW7UR1Vylm/5CYAADCIGtM1Dz1FisVf5F//Xo3rFESlnPVLLgMAANCOSa0AAAAAAAAAdZTPWXd2jyltBQCAvLIkc2WKVlZRvmXdM7gVAABo51vvBQAAAAAAAJBVvXZuQSCnqdtYvVu3otfbm9H2Z8BHBgBgKOPkc2GNVrS6chPu7h8G3J8xnxoAAGhN1AoAAAAAAEArgk9O5c4sM3jbOfjjAwAwsqppZRD1Wj4XZhlhpx0AAADWJWoFAAAAAACA/3NSVKnApDs9556tAACAROLXlRMJX/zFsyIx5560FQAAWIuoFQAAAAAAgCWOxmN5g8+ZK+/ygCM0e0c3doRNmEPD+SXbAgBAGUfjMWllO4WL1qPrVy3uaTi/ZE8AAIDzXfVeAAAAAAAAAIRz/fwy3cUlSnYTLZX5dJvTXm9v3HwAAGCZwkUrM+k2p+32x9sBAABYTNQK5/r58+cqr/P9+/dVXgcAAAAq8Xs3AIQ1J6hb/FEe5LN7V8R9eFKZXBAjJ4ty1pl2GzXsPYE51vql+yLMZzcAVDKnqVv2ab79B3eZPnCchO/u/mGch/2szI1tTdoKR/mP3QAAh4haAQAAAAAAWN9/f/3dewnrUMR1cXRS7pjsyQLSVgAAqvrx26+9l1DToaCxUrn39Pig2/ySbVlg8AQaAABY5lvvBQAAAAAAAACzLGgatXxlKFrPYfcAACCUsAncCEUrhyhaF7u7l0kDAACnEbUCAAAAAABwGnkYEQx1D4d62EbsIQAAicjDurDt7w21G5rMVdhDAABgPlErAAAAAAAA1GRMawGvtzdqzLXYTAAA4JCJHs+Y1tqkmCuymQAAwExXvRcAAAAAAABANf/99XfvJRQ0Wox3/fwy2iN/ZgdaeL290XsDAJDdj99+7b2EE8SPQgcsWp8ezSa9uBBhNrDb0qpvHAAAYC0mtQIAAAAAAHAClV0WI2R7tW9j7afry94CABCZyi6OwcO82lfx7l7W25C9BQAApolaAQAAAAAAIDoN3lBeb2+ceGs2GQAA2DlU3w1etNYmudyATQYAACaIWgEAAAAAAKCaEca0VqW03JLdBgCAwSlaByS23IytBgAADhG1AgAAAAAAMNecAOy/v/7eYCVDObW7K1O0znmQYlFiscdJwZ4DABDKnAbsx2+/tl/IEAYv7uaEu/W2qN4TBWfDAQCAL4laAQAAAAAAIC7F3TicdS92HgAABjTR2hnTWpXAsou7+wc7DwAAfCBqBQAAAAAAgKAWtHZlxrSORlfZl/0HAAB2FK1V6Sr7sv8AAMB7olYAAAAAAAAoQtGalKIyAqcAAADjONTXKVqrUlRG4BQAAIA9USsAAAAAAACzzCm+/vvr7w1WMohTE7uSReuch8reImZffyXOAgCAvuYUXz9++7X9QopTtO7NeeQCIWKBRyjDWQAAADuiVgAAAAAAAIjl9fZG0ToIFWU0TgQAAGrT1I3GiUfjRAAAgAtRKwAAAAAAAISyIGdVtCaln4zJuQAAwIAGHNM6Av1kTM4FAAAQtQIAAAAAAEAUBrSOQzkZmdMBAICSDqV0itaSlJOROR0AABicqBUAAAAAAIDjJF5Nvd7e7P456asUrXvp7me6BQ/IGQEAsDGJV2t2eLGMW5dxzQAAAOMQtQIAAAAAAEA3C1rWi4uL6+cXRWteasksnBQAAIzAmNZ6FK0pOCYAABiZqBUAAAAAAIB1/PfX372XkMB+KKucdabRnpdQdK0AAITy47dfey8hq0P5nKK13g5IJRNxWAAAMKyr3gsAAAAAAACAIpr2b9rOGkSSAAAAGxPOjcNZp3N3/1CvrAYAAI4yqRUAAAAAAABW0C5WHHA6a1WK1oycGgAAVCWlgwikyAAAMCBRKwAAAAAAAJyradHa6JXZmDYyL2cHAAB56eXG4awBAACyELUCAAAAAABwhKCro9fbm90/vRcSXfAtCr48jnKCAAA0JcZrZGJjjWk9SfwrGn+FTHB8AAAwGlErAAAAAAAAJKBuBQAAAPhMElmAQwQAgKFc9V4ApPf9+/feSwAAAICy/N4NALmM/Nl9/fyyWW4b2wFPAAAgAElEQVS6+0bXzy/bfDvOJ0Wu4fX2xvuOYkb+4AaApHx8n8SYVsjl7v7Be5NifHADABwiagUAAAAAAIAVnFO7LYgepa1ZKFor0bUCAABEY8InAABAOt96LwAAAAAAAIAKhF7nuH5+2f9z0he+3t6M0Ey6XQAAAAYYnkToOF/qq+Wgi3GgAAAwCFErAAAAAAAABCJtrcS51ONMAQAgu9QNJ5SnawUAgBGIWgEAAAAAACCcZWlro8WwjBOpyskCAEBworhBOGgAAICkRK0AAAAAAAAQlJGtAAAAcBKh4yAcdGEOFwAAyhO1AgAAAAAAQFyndq0XxkjG4BRqc74AAJDU0+ND7yUAx+laAQCgNlErAAAAAAAAhHb9/LJgZGujxQA73mUAABCQEG4QDhoAACA1USsAAAAAAABThFtB6FqPivPIcVYCAADEJ88jBReVjblyAABQmKgVAAAAAAAAapJWdmHbx+GsAQAglKMJ3NPjkT9AClpHAACA7EStAAAAAAAAkMOpw1ovRHcAAABAIYrWoThuAACoStQKAAAAAAAAaehag7Pbo3HiAAAQhPgNAAAAshC1AgAAAAAAAAAAAAChSZcH5NABAKAkUSsAAAAAAABkYlhrWPZ5TM4dAABSeHp86L0EAAAA4OJC1AoAAAAAAAAj0N0BAABQlVmOUJg3OAAA1CNqBQAAAAAAgGQWDGulNdnwyJw+AABAa8pGAACAMkStAAAAAAAAMATdHQAAAPVoHaE8b3MAAChG1AoAAAAAAAAAZxGNAwBAZE+PD72XwFk0jQAAAJWIWgEAAAAAACCf6+eXBV+lu2vExgIAAAAAAADMIWoFAAAAAAAAAAAAIB8DPEfglLlwDQAAoBZRKwAAAAAAAAzETNHV2VJ23AQAAAAAAAA4StQKAAAAAAAAAAAAQDImN8JQvOUBAKAMUSsAAAAAAACkdP380nsJAAAAAA3pGAEAAOoRtQIAAAAAAAAVdKl8X29vtv+mhOU+AABAQE+PD72XUIFtBAAAYC2iVgAAAAAAAKYYB1qP7g4AACAOreAyBnjCgLzxAQCghqveCwAAAAAAAIBAPgefsl4AAACA7SkYAQAASjKpFQAAAAAAAC4uLi5eb2++HGF66P8HF4PP3AoAAAAAAACYIGoFAAAAAACA4x2atBUAAAAA+jK/FwAAChC1AgAAAAAAMLr5taquFQAAALpTtY3AKQMAAFQlagUAAAAAAGBoOtX4Yp5RzFURgbsBAAAkoh0FAABgY6JWAAAAAAAAVpA04lqw7KRPCgAAQGrKQwAAAKAGUSsAAAAAAAAAAAAAAAmI/AEAIDtRKwAAAAAAAJzGsFYAAADo5aSe7enxhD9MHKpFAACAwkStAAAAAAAAHHH9/NJ7Cayp5IFu/FDCZqa5IQAAnER4SXCuKAAAACsStQIAAAAAAAAAAAAAAAAA0JyoFQAAAAAAgEFlH6WYff0AAAAAsMDd/UPvJQAAAMuJWgEAAAAAABjU9fNL7yUAAAAA8P/oFQEAAGq76r0AAAAAAACA1XwYXClZpJHUVyvd4g2kBQCAOD6UZk+PD1//OWhG7rgu+wkAAMD2RK0AAAAAAEBi07WbxnVjr7c3Nhlgx49EAKCG6eBN47qxu/sHmwwAAABk9633AgAAAAAAAJZ4vb05dX7jgi+JpuMjSLOiyX6Z17Xx/bT5AACM4O7+4dQRjgu+JJqOj6BWJSyXEwAAgHWZ1AoAAAAAACRzZk62+/JcieaHR97/a66nKCP1tqdePAAAsI0zq87dl+eq4D488v5fcz0FAAAAQAqiVgAAAAAAII0VpyNmSVunHznLUwAAAJDCikNKs6St04+c5SkABnR3/+DnMwAAJPWt9wIAAAAAAABmWbFobfqaK5q5vOBPEdypSXCQhHjZoQdZPAAAENOKRWvT11zRzOUFfwoAAACAXExqBQAAAAAAEpiT8H0I9uYXoTFLv4Cp6vXzy9FVhd3P82V/rqTrX/DeBwAAFpjTbX4YiDe/CI05SS9gqvr0+HB0VWH3k4wWvPE3EPC9CQAAwLpErQAAAAAAQHTTVduhnm1Ogbl//WhRXMCitbDpqxLtbly4HgAAwNqmE7JDSducAnP/+tE6TNVcUg4OAAAACvjWewEAAAAAAABTpmvD6eBwfo6YvRLMvv6wAhaty5R5EAAAYHUTleDT45EYdX6qmr1FzL5+AAAAgDhErQAAAAAAQFy55meuRaG6vUPXKeBZLFhS4TcLBBfwZwgAwAfTRet269iWQhUAAACgI1ErAAAAAAAQ1KEW6OiA1g9/+Mxvx3sD5pGhLsZoReuc593+AUNdCQAAOMehtvPogNYPf/jMb8d7hVtiopnzlnQhAQAAaEHUCgAAAAAARDRRtG68khRCbUvS5G9iD4M8UZBlAAAANUwUrZuuI4lQ2yIPBgAAAFITtQIAAAAAAOH0KlojRIMR1jCs6a4149GEqp0BAIA4ehWtEWrMCGsAAAAAGJmoFQAAAAAAiMWM1uBqH8T00/XqWhcktdfPL7VPameEZwQAgNWZ0RqcgyAIVxEAAIBGRK0AAAAAAADwf452rRunrQu+XY3UM+NoXAAAAEjByGIAAAA6ErUCAAAAAACBdB/TmrGjC1gwZtzG945u6S5t3eAxhy1aAQCARrqPac2Y0gWcV5lxGwEAAAB2rnovAAAAAAAA4H91L1q7y96CVrK7dUdPZP8HVr+lyy7DOG8WAABgge5Fa3daUAAAAIDuTGoFAAAAAABCE+kFNM6hzH/StWa3Ln6d6+eXcc5lZ7TnBQCARsYpWhNxKHTnEgIAANCOSa0AAAAAAEAIhpQW83p7U6M5nDmyde/zn5yzD2fe/xpb/Z4fCAAAsDpDSou5u3+QHbKMnwYAAAD0JWqFc/38+XOV1/n+/fsqrwMAAACV+L0bgPNTvfJpXK+a8fr55ejeLv4oD/jZfWra+l7TS1gvZ51p2AcHWNFav3RfhPzsBmCm86vI8nVcr3D06fHh6N4u+zRP/cE9Z1s+/PlWSynNvgGswn/sBgA4RNQKAAAAAAD0Vz49ncMmxHdO2tpiJQAAADOVT0/nsAkAAAAAEXzrvQAAAAAAAICvyfay++WP33svoYnr55eOl7Pvd99GhGwYAABGYBhjdn/+82/vJXQw/9664V9SdwMAANCdSa0AAAAAAEBnArakrp9fRj6792XpBvtQPmQ9id0AAICTaNiSenp8cHZsTwwMAABAa6JWAAAAAAAgolWitfLJpbQviEaB65jnW/5tCwAAQazSrZVPLtV9Mc3JfZ3dl8q/ZwEAAEhB1AoAAAAAAPQULWAbMyNc7Oiw1l/++P2/v/7ebD0RfHmF5txzd2+m7hs1+IxiAADSidawSQ1PcrTe/POff3/89utWywlkd5G+3Bx37Bx2DwAAgA2IWgEAAAAAgHC6R2vb08jVNuCVBi689wGAwAbs1qLFvaxiwJsMAAAABXzrvQAAAAAAAGBcTUtOmeg2jiZbv/zx+zYroYCjb1uJIAAAnKRpySkT3cbRbvPPf/7dZCGkd/Q9KxIGAABgG6JWAAAAAAAglo7RWq5eLtdqAQAACKJjt5Yrmcu1WgAAAIAsRK0AAAAAAEAfJqmWIa9lFca0AgDAukxSLUNey/kSjWmNsxIAAAAaEbUCAAAAAAAF5Spmc612gV/++L33EgAAAFhTrmI212oX+POff3svAQAAAGAuUSsAAAAAABBIx0mMhkCew+7RmjsGAACr6DgC0fTFc9g9mnLByMi9BQCAvEStAAAAAABAB+Vnk7aWLvAzrJVpfiYAAMC6ys8mbS1dK2VYKxP8QAAAACAUUSsAAAAAAFCNOq6LdJ0tibhdAAAQikCuix+//dp7CdSULuEGAAAgO1ErAAAAAABAz2RunATXsFYOSfcuENkyh3sCAPBex2punATXsFa+NM5bAAAAgCxErQAAAAAAQBSr9D/p6rhK/vvr795LoCBlIAAArGWVslQg15FhrazOmFYAAAC2J2oFAAAAAABGly6ZS7fgPcNa+UyIDgAA5aWr5tIteM+wVj5IWqHnfQ8CAAAwh6gVAAAAAAAIIW+oyXuGtbIuPxkAAGAtIrEaDGtlRX4skJfbCwAAqYlaAQAAAACADhqFaulGPqZb8BzTXathrbw3/RZQtAIAwGKNap90Ux/TLXiO6a7VsFb2pu+/JhAAAIBernovAAAAAAAAGFSQXC3IMobyyx+/G+jKRfKo+/r5JfX6ac2HCwAQQZBiLcgyhvLnP/8a6ErJohsAAIAaTGoFAAAAAADIJEUopVnlfCmuOgAAUE+KClezyplS3HMAAACqErUCAAAAAABFmJoYynTX+ssfv2+2EmKafsMqWgEAICCDH0OZ7lr//OffzVZCQNPv1hRFa4pFAgAAsIyoFQAAAAAAGFffcE6Fy7BcfgAAGETfLE2Fy5jcfMrTPAMAQHaiVgAAAAAAAJowrJVlsoxpzbJOtuduAACwDcNaWUANCAAAQHeiVgAAAAAAoIIFgx8zRkfp1qxr5bPpd2u6Sw4AAINYMPsxYzuXbs26Vj6YfqvmuuG5VgsAAMB8V70XAOl9//699xIAAACgLL93A0AuX352v57+JQDABnwKA0AuBz+7J8tVn/hAMWpnEvEpDABwiEmtAAAAAAAAHSwYLZvU9ODNcfaBnWJjWtMtGAAAxrFgtGxS033XOPvARa0xrQAAABQmagUAAAAAANJbEEZK0baka2WnWNEKX3KTAYCSFoSR8rkt6Vq5ULQCAACQh6gVAAAAAAAgh9ShlK4VRSsAABBc6upP1zq4qkVr3pXTiCsBAAA1iFoBAAAAAADYgmpxZIWL1tSLBwAAKtF6Datq0QoAAEBVolYAAAAAACC3BUM+u0doBpN+Zk+G1f39CCtynwGAkhYM+ewe0RlM+pk9GVP3NyMAAAB8JmoFAAAAAABgI9O5l661KicLAACwjemCUddaUvlj1eWy5zIAAEAZolYAAAAAAIAEykz/07WOZvpMa1zsGk/B+dwEAIDUyrRSutahTB9omVsNAABAMaJWAAAAAAAgsQUNpOioO13rOEYoWgEAoLYFDaSOrjtd6yDGKVorPQsAAAAXolYAAAAAAICNiTYvdK1jULQCAABdiDYvdK0DGKdohR23GgAAKhG1AgAAAAAA0IGutbbRitZ6T8Sp3AEAAKLRtRamaAUAACA1USsAAAAAAJDVgu4xaXSUdNlH6VqrGq1oBQCAqhZ0j0lruqTLPkrXWtKYRWvV52ImFwAAAIoRtQIAAAAAANCNrrWeYYvWwo/GUU4fAICwdK3FjFm0AgAAUIyoFQAAAAAAYDsqzc90rZUMW7QCAABBqDQ/07WWMXjRWv4BOcTRAwBAPaJWAAAAAAAAOtO11qBoHeEZ+cy5AwAQn661gMGLVgAAACq5fHt7670GAADYzuXl5Sqv4y/SAAAA3S0IHSN0R0mXvZmJ/RlqHzJydjsa7AENdcMBgKEsCB0jZHVJl72Zif0Zah/ScXB7GuzRjHbDAQBgECa1AgAAAAAAEMVEG6YVjEzRujfa8+LEAQDIZSIP0wqGpWgFAACgGFErAAAAAADARmSZc+ha01G0AgAAQcgy59C15qJo/WDMpx6W4wYAgKpErQAAAAAAwBDEdYnoWhNRtH427IMPyFkDALwnPUpE15qFohUAAICSrnovAAAAAAAA4GTjlI3DFlO7Bx/noIsZ9t4CAEAZ45SNw5aBuwcf56ArGfbS7j09Pri6I3DVAQCgMJNaAQAAAAAACEobmZFTu7AJY3DKAAAUoBlLx5Ht2AcAAIDURK0AAAAAAABbMHR0mevnl/flmIosmg+n44D2bAUAAGzM5MZlnh4f3veBWsFQPhyN02EcbjsAANR21XsBAAAAAAAAzanLsnOCkTkdBuTaAwB8oD7KzgmG5WgOeXp8kLJX5doDAEB5JrUCAAAAAAAEJZqC1LyFq3KyAABl6KYAAAAAtidqBQAAAAAAknm9vem9BOB/2Lub47iNNADDAoshMARmwINL0VnOQRkoGJUPjEAMgTnMHrimZQ4GBBr99e/z1B5211VwoxuDGR7e+gAAgGEZfgh0QZc+JMcKAAAzELUCAAAAAACEE+LCnIz0HI8zBQBokxAX5iSABAAA6JGoFQAAAAAAACCKBnIkThMAAADiqJQBAGASolYAAAAAAIAWSadgGD7OAADQIOkUjMFneRiOEgAA5iFqBQAAAAAABicnA+A83yYAALfIkIC6vIUG4BABAGAqolYAAAAAAIBYr0+PtZcAVKaH7J0TBABo2R9/fqu9BKAySSQAAEBHRK0AAAAAAAAA4VSR/XJ2AAAAEEeTDAAAsxG1AgAAAAAANEdABUPy0QYAgEYIqGA8PtedcnAAADAhUSsAAAAAAAAArJMiAwAA9EIe2R1HBgAAcxK1AgAAAAAABHp9eqy9BKAhCsm+OC8AgPb98ee32ksAGiKS7IjDAgCAaYlaAQAAAAAAAMrRSfbCSQEAAPRIKgkAANA4USsAAAAAAECUtDGtMioYno95+5wRAEAX0sa0Ct5geD7m7XNGAAAwM1ErAAAAAAAAQGmayZY5HQAAAIijaAUAgMmJWgEAAAAAAEKkjWkF5qGcbJNzAQDoRdqYVmASsslmORoAAEDUCgAAAAAAAFCHfrI1TgQAAGAY4skGORQAAOCLqBUAAAAAAOhOF8VR8pjWLu4OyMinvh3OAgDgTRfFUfKY1i7uDsjFR74pjgMAAHgjagUAAAAAAMgsuWgF5qSlbIFTAADoSHLRCkxISNkIBwEAALwTtQIAAAAAAOSkaAUSKCrrsv8AAB1RtAJHySmrcwQAAMDvRK0AAAAAAMDgVKZAF3SVtdh5AICTVKZA+/7+65uushY7DwAAfCBqBQAAAAAA+tNsgHQyoG32voAyvATKs+cAAKuaDZBOBrTN3hdQhpdAefYcAAC4JmoFAAAAAADIw0hY4DyNZUl2GwCgL0bCAudpLIsxHRcAALhF1AoAAAAAAHTpUIlUIDdVtAK5KC3LsM8AANsOlUgFclNFK5CL0rIAmwwAAGwQtQIAAAAAAJylaAXyenh+kVzGsb0AAN1RtAJ5SS5D2V4AAGDbcrlcaq8BAADKWZYly3X8kAYAAGjEoZo0ImHKmLMqrIBrmvnsvGwBAA45VJNGVEwZc1aRFXBNM5+dly0AAPApk1oBAAAAAICO1W2TxGZANAVmXvYTAOCoum2S2AyIpsDM6O+/vtlPAABgD1ErAAAAAAAwi4wN6uvTo6IVKOPh+UWKeZ5tBAAoIGOD+sef3xStQBk6zCxsIwAAsJ+oFQAAAAAA6NuhSClLiSpnBcoTZJ5h9wAAzjjUKWUpUeWsQGFGjJ5k9wAAgEOWy+VSew0AAFDOsixZruOHNAAAQGuOhqZpgdOef8vD80tC9Sq4AnbS1R/i7QoAkMvR0DQtcNrzb/n7r5QhroIrYA9R/VHergAAQAJRKwAAcxG1AgAADCyua9155fcLilqBULrWnbxaAQDyiutad175/YKiViCUtHUP71UAACCZqBUAgLmIWgEAAMaWHHpdh0/JiWzaGpRXwFHS1g1eqgAAQZJDr+v2KTmRTVuD+Ao4RNe6zUsVAAA4Q9QKAMBcRK0AAAAzKBx6fUinRK1ASdLWD7xOAQAKKNx6fUinRK1AMdLWa16nAADAeaJWAADmImoFAACYRLHK6/yI19WLAOyna33ndQoAUEyx0Ov8iNfViwDsJ219410KAADkImoFAGAuolYAAICphIZeq+mUMa1ALZOnrV6kAABVhIZeq/WUMa1ALTOnrd6iAABAXve1FwDd+/nzZ5brfP36Nct1AAAAYCT+7gbgpPfGKWPrpZva4LsbKnp7O02YtnotQ7JcX9xffHcDTOw9c8rYekmnbvFHN9T19naaLW31ToYzfHcDANwiagUAAAAAAMZ3vm4VTQFdiIj5m+XNDADQjvN1q24K6MI8aavXMgAAEEfUCgAAAAAATGS1gFpNv4q1UqIsIMLAg1u9NgEAWrYaQa3WX8VyKV0WkF3EnOp2eG0CAADRRK0AAAAAAMDscvVRQ8ZjQNcGS1vlrAAAncrVRw0ZjwFdG2lwq5YVAAAoRtQKAAAAAAAAMLL3FrTTulXLCgAAQMu6HtyqZQUAAMoTtQIAAAAAAFSj1AJK6qtu9YYEAOA8sRZQUkd1q9cjAABQkagVAAAAAAAggy4KMYA3v/eiTb2+hKwAANzSfiEG8O73ZLSp15eWFQAAaIGoFQAAAAAAAGBe1QNXISsAAAADqxu4qlgBAIAGiVoBAAAAAADq0HEBrbl+L2XPXL36AAAoRsoFtOb6vZQ3c/XeAwAAuiBqBQAAAAAAOKvKbEOAAjSoAAC0oPxsQ4AyZKgAAMCE7movAAAAAAAAAAAAAAAAAACA8YlaAQAAAAAATkkb02r4IQAAAOyRNqbV8EMAAACANolaAQAAAAAAAAAAAAAAAAAId197AQAAAAAAALtcD0Ttd9hpvysHAABgVNcDUfsddtrvygEAAACGJ2oFAAAAAACadt2yfvhHdQPRjeUBAABA+65b1g//qG4gurE8AAAAAHp0V3sBAAAAAAAAN+1JRl+fHvsqS41pBQAAoBF7ktE//vzWV1lqTCsAAABAy0StAAAAAABAo9pPVRNWqGgFAACgEe2nqgkrVLQCAAAANE7UCgAAAAAAtOhoL9p+AQsAAADtONqLtl/AAgAAANAFUSsAAAAAANCcLgpVY1oBAADoVBeFqjGtAAAAAEMStQIAAAAAAG1JLlpLprBdZLcAAABwLbloLZnCdpHdAgAAAJBA1AoAAAAAAFCCMa0AAAAQx5hWAAAAgC6IWgEAAAAAgIZ0MQE1YZGKVgAAAFrQxQTUhEUqWgEAAAB6IWoFAAAAAACIpWgFAACAOIpWAAAAgI6IWgEAAAAAAA7oYpYsAAAAdKqLWbIAAAAAJFsul0vtNQAAQDnLsmS5jh/SAAAAEU72ogUGoias0JhWAAAAGnGyFy0wEDVhhca0AgAAAPTFpFYAAAAAAIBdFK0AAAAQR9EKAAAAMANRKwAAAAAAQAhFKwAAAMRRtAIAAAD0SNQKAAAAAACMILogPTqmVdEKAADASKIL0qNjWhWtAAAAAJ0StQIAAAAAAHxC0QoAAABxFK0AAAAA8xC1AgAAAAAA3QuNSBWtAAAATC40IlW0AgAAAExF1AoAAAAAAPRN0QoAAABxFK0AAAAAZCRqBQAAAAAAOqZoBQAAgDiKVgAAAADyWi6XS+01AABAOcuyZLmOH9IAAABB9nek0QWpohUAAIDx7O9IowtSRSsAAADAnO5rLwAAAAAAAOCAMu2oohUAAIA5lWlHFa0AAAAA0xK1AgAAAAAAHShWjR7NWb8oWgEAAOhfsWr0aM76RdEKAAAAMJblcrnUXgMAAJSzLEuW6/ghDQAAEOdWVlqgHTWgFQAAgOHdykoLtKMGtAIAAABwV3sBAAAAAAAAuyTMUA29vqIVAACAkSTMUA29vqIVAAAAYEgmtQIAMBeTWgEAALqw0ZdGpKQJuayiFQAAgH5t9KURKWlCLqtoBQAAABiVqBUAgLmIWgEAAHqxHZrmakrlrAAAAMxpOzTN1ZTKWQEAAAD44K72AgAAAAAAAA5LiFGvr6BoBQAAgFUJMer1FRStAAAAAFwzqRUAgLmY1AoAANCRndHp0dA0LYiVswIAADCYndHp0dA0LYiVswIAAABMQtQKAMBcRK0AAADdOdSg3kpPz0x2lbMCAAAwsEMN6q309MxkVzkrAAAAwFRErQAAzEXUCgAA0KMzSeoZclYAAABmcCZJPUPOCgAAADAhUSsAAHMRtQIAAHSqcNcqZwUAAGAqhbtWOSsAAADAtEStAADMRdQKAADQtei0VcsKAADAzKLTVi0rAAAAAKJWAADmImoFAAAYQPa0VcsKAAAA77KnrVpWAAAAAN6JWgEAmIuoFQAAYCRn6lYhKwAAAGw7U7cKWQEAAABYJWoFAGAuolYAAIDhXZeu+lUAAADI5bp01a8CAAAAsJ+oFQCAuYhaAQAAAAAAAAAAAACgirvaCwAAAAAAAAAAAAAAAAAAYHyiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACCcqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAAAAAAAAwolaAQAAAAAAAAAAAAAAAAAIJ2oFAAAAAAAAAAAAAAAAACDcfe0FQPd+/vyZ5Tpfv37Nch0AAAAYib+7AaAvvrsBoCO5vri/+O4GgCL80Q0AffHdDQBwi0mtAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAMdyVxgAACAASURBVAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQLjlcrnUXgMAAJSzLEuW6/ghDQAAAAAAAAAAAAAAh5jUCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADh7msvAAAAAAAAAACAobw+Pb79l4fnl7or4QNHAwAAAABAXcvlcqm9BgAAKGdZlizX8UMaAAAAAACuvTeT78ST7XA6AAAAAABUd1d7AQAAAAAAAAAAjOC6maRxjgwAAAAAgMJMagUAYC4mtQIAAAAAQHYbbaRZoE25dVKOCQAAAACAMkxqBQAAAAAAAAAgnaK1I7dOxMhWAAAAAADKMKkVAIC5mNQKAAAAAAAZmfzZI6cGAAAAAEAtolYAAOYiagUAAAAAgCwMaO2a4wMAAAAAoIq72gsAAAAAAAAAAKAzksjebRzTxuECAAAAAMBJolYAAAAAAAAAAA5QtI5B1woAAAAAQHmiVgAAAAAAAAAA9lK0jkTXCgAAAABAYaJWAAAAAAAAAAB2UbSOR9cKAAAAAEBJolYAAAAAAAAAAD6naB2VrhUAAAAAgGKWy+VSew0AAFDOsixZruOHNAAAAAAAU1G0Jvt961reK0cMAAAAAEABolYAAOYiagUAAAAAgKPkjmlW963lHXPQAAAAAABEu6u9AAAAAAAAAAAA2iV0THNr3zb2s7qNA2152QAAAAAAdETUCgAAAAAAAADAOkVrmn4TUF0rAAAAAAChRK0AAAAAAAAAAKwQMaYZeN8GvjUAAAAAAMoQtQIAAAAAAAAA8NF2vmhM68C2D1fXCgAAAADAGaJWAAAAAAAAAAAOULRuGKP5dMQAAAAAAAQRtQIAAAAAAAAA8B8bZabcccMYReubjYMe6TYBAAAAAChM1AoAAAAAAAAAwL8ki2mm2repbhYAAAAAgIxErQAAAAAAAAAA/N92rGhM61S2j1vXCgAAAABAAlErAAAAAAAAAABfvihaTxi18NS1AgAAAACQl6gVAAAAAAAAAADSaTsBAAAAAGAnUSsAAAAAAAAAAMa0Jhq+aDWsFQAAAACAjEStAAAAAAAAAACzU7SyQdcKAAAAAEAuolYAAAAAAAAAAEih5wQAAAAAgENErQAAAAAAAAAAUzOmNc1URathrQAAAAAAZCFqBQAAAAAAAACYlxwxjX37wIYAAAAAALCHqBUAAAAAAAAAgHXGtPLOwwAAAAAAwHmiVgAAAAAAAACASW1P1xQx3jLtVNLtR2LabQEAAAAAYD9RKwAAAAAAAAAA7CXdBAAAAACAZKJWAAAAAAAAAIAZGdOa4NamzbNdhrUCAAAAAHDGfe0FAAAAAAAAAABQmvgwo3mK1j1enx5tSHVZPuDOEQAAAACIIGoFAAAAAAAAAOA/xGyrVkPBCffq4flFFN2OuLPwwAMAAAAAEUStAAAAAAAAAABzUSQmsGn7GdYareLT+Pu/2ikDAAAAAAlErQAAAAAAAAAAsOVWQyjqo5gGs2qBKwAAAACQQNQKAAAAAAAAADCRT9M4cdpOM2/Uw/PL9oNkWGsuDbasq97X6dwBAAAAgG2iVgAAAAAAAAAAuGm1KlTuEaqXlvWauhUAAAAA2HZXewEAAAAAAAAAABRiTOtR/baF0T59VGxdgtenx7f/1F5IBsPcCAAAAACQl0mtAAAAAAAAAACw4laSJ/0lu1H7T4NbAQAAAIAPTGoFAAAAAAAAAJjCqNVcYdq8/Txye0wy0XSS2wQAAAAAPmVSK5z18+fPLNf5+vVrlusAAADASPzdDQB98d0NAL379f3Hr+Nf6KN+d68GeIrW3z08v8gUz5hw995u2ecI0vijGwD64rsbAOAWUSsAAAAAAAAAAPzHhLUhJU3+gElbAQAAAGBmd7UXAAAAAAAAAABAuE8jul/ff5RZSb80eNc+3ZPJ681rr0+P9uSNrQAAAACAOZnUCgAAAAAAAAAA/1oN7RStnCTgXGVqKwAAAADMxqRWAAAAAAAAAIDBqen2U7Rm5/EzkvRT9gcAAAAA5iFqBQAAAAAAAACY3a/vP2ovoQnKugSK320eqp2kvwAAAAAwifvaCwAAGN+yLL//z8vlUmslAAAAAAAAHCXaJI1EM8Hr06NPHAAAAACMzaRWAIBYH4rW1f8HAAAAAAAgjrJup9WN0tdlMeFDOOEt52JkKwAAAACMTdQKABDoVr+qawUAAAAAAGiKopVcNJlZ2EMAAAAAGJWoFQAgxLIsylUAAAAAAKALv77/qL2EyuRzJ6l/33mWMpIHAwAAAMCQRK0AAPnJWQEAAAAAgEZIwpIJNfOa4VGc4R7Ls6sAAAAAMJj72gsAABiKnBUAAAAAAKAvq8mcopVDhJehXp8efSQBAAAAYBgmtQIAZKNoBQAAAAAA6IuilfMUrQXYZAAAAAAYhqgVACCDZVkUrQAAAAAAQGv2ZGC/vv8osJI2yeQy2lMCD7nhQ95Um16fHu02AAAAAAxA1AoAcIqcFQAAAAAAYCTGtLKfxrI8ew4AAAAAvRO1AgAkkrMCAAAAAAD0azWNU7Syn7qyFjsPAAAAAF0TtQIAHLP8o/ZCAAAAAAAASCSK4ySPUF32HwAAAAD6JWoFANhFywoAAAAAAPRlT/T16/uPAitpza2dMab1pD0bOEaLOMZd9M4pAAAAAECnRK0AAOuW/6q9HAAAAAAAAAIpWtlJS9kOZwEAAAAAPRK1AgB8+XKVsKpYAQAAAAAAhrRawSla2UlF2RonAgAAAADdEbUCAOO7DlYlrAAAAAAAABPSv3GG56dNzgUAAAAA+iJqBQAAAAAAAAAYjcrr2q09Maa1sE4fzk6XPQmnAwAAAAAdEbUCAKS7XC6Xy6X2KgAAAAAAAEikaGUPzWT7nBEAAAAA9ELUCgBw2OUftRcCAAAAAACQ7tf3H7WXUM5q8KZozW7ILVVL9sJJAQAAAEAXFjEGADC8ZVmyXOfWD6e06/sZVkv08wAAAAAAAC3YE3cN2R+uurUbeXdgf1A39s4P9uzpJPvS0aMFAAAAANMyqRUA4BPmsgIAAAAAAPSrTNEKtECEDAAAAADtE7UCAKy4/Kb2WgAAAAAAAMhM0coeCskeOTUAAAAAaJyoFQCY2uWG2usCAAAAAABIp+l6t7oVitbqunhEu1gkq5wdAAAAALTsvvYCAADCiVQBAAAAAAAmJGwjmYcHAAAAACCISa0AAAAAAAAAAIzmVpRoTCufUrQOwCECAAAAQLNErQAAAAAAAAAATEHRCvPQtQIAAABAm0StAAAAAAAAAADTGTvvXI3Zxr7ldvS+z0rIkThNAAAAAGiQqBUAAAAAAAAAgHHI2Ejm4QEAAAAAiCZqBQAAAAAAAABgELeixN7HhwJphMoAAAAA0BpRKwAAAAAAAAAAI1O0sof6cVROFgAAAACaImoFAAAAAAAAAGAEq+maopU9dI8AAAAAAGWIWgEAAAAAAAAA6J4oEbjF+wEAAAAA2iFqBQAAAAAAAAAYx5zt1q27Nqa1WU09qE0tBgAAAABgbKJWAAAAAAAAAAAGpGgF3kmXAQAAAKARolYAAAAAAAAAADq22qopWtlJ6wgAAAAAUJKoFQAAAAAAAACAXikSgZ28LgAAAACgBaJWAAAAAAAAAAC6dCtRM6aVnVSOs3HiAAAAAFCdqBUAAAAAAAAAgHEoWgEAAAAAoFmiVgAAAAAAAAAA+rM6cVHRyn6Gds7JuQMAAABAXaJWAAAAAAAAAAA6I0sDAAAAAIAeiVoBAAAAAAAAAOjJraLVmFb200UDAAAAAFQhagUAAAAAAAAAoHuKVmAnSTMAAAAAVCRqBQAAAAAAAACgG6s1mqKVQzSNAAAAAAC1iFoBAAAAAAAAAOiDFhHIwssEAAAAAGoRtQIAAAAAAAAA0IFbEZoxrQAAAAAA0AtRKwAAAAAAAAAAvVK0cpQRnbzxJAAAAABAFaJWAAAAAAAAAABat5qfKVoBAAAAAKAvolYAAAAAAAAAAJpmoOJ4agXJniUAAAAAgLruay8AAAAAAAAAAIBsHp5f5sn2Or3TM8s2nBYyen169JkCAAAAgMJMagUAAAAAAAAAAAAAAAAAIJyoFQAAAAAAAAAAGF+no30BAAAAAEYiagUAAAAAAAAAAGBGUmcAAAAAKEzUCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAACQR7NzL5tdGAAAAADAVEStAAAAAAAAAADTEfgBAAAAAADl3ddeAAAAAAAAAAAAbHl4fqm9hE8cioTbvx2YyuvTo08lAAAAABRjUisAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAQzFykMaVf0QPjdIFAAAAACCOqBUAAAAAAAAAAAAAAAAAgHCiVgAAAAAAAAAAAOZlli8AAAAAFCNqBQAAAAAAAAAAAAAAAAAgnKgVAAAAAAAAAADIwLhLAAAAAAC23ddeAAAAAAAAAAAwqQ/928PzS62VzOn16dGeMwOpLQAAAABAO0StAAAAAAAAAEAh22mZxjWjh+cXIR9t8tEGAAAAAJjZXe0FwP/Yu7ujyJEsAKMlAhMwgbaApzKmPWhz8KCNqScsaEzAh5oHJpgefoSUypu/58S87CyIzJJKqtrYLy4AAAAAAAAA43t5uN/bWCb8SmsG2ALAJNyuAQAAAKAMk1oBAAAAAAAAgEAHM6HXX+9rtOO7Lb/9x752AQAAAAAAkJ2oFQAAAAAAAAAIkXHqXS9p6/qWe9kFAAAAAABAEFErlHC5XLIc53w+ZzlOAbaczJZblmvLpyl3PeGWOzLhWc7icrl0tOUJz7Kb9hG23DJbTjbhlk/97HrCLZ9c2wfYcsts+YgJd23LLbPlZLbcMjftI2y5ZY1vOWPR+vcx/zz+Pn6cult+ebjf3rUeOsuPv3/8+plxMWW4aR9Rd8tb3gJv19sYW4Z3Jryw3bSPsOWW2XIyW26Zm/YRttyyCbcMANA7USsAAAAAAAAAkNmutm37r5xOpx+/fmbpWrOLiHgBAAAAAAAGc1N7AQAAAAAAAADAUNbzzrun59d/Pv77jcf/dvpoeYpWAAAAAACALUStAAAAAAAAAEA2K3nnpy3rux/Y+Fca7Fp3EcFCMd5uAAAAAABNEbUCAAAAAAAAAHmsF60lV1JSy8ncn8fftZfALLa8EQa+DwAAAAAAsJGoFQAAAAAAAADI4Kuk7dsBre9+eONP9j6stR0tR7m98BoCAAAAAMBGolYAAAAAAAAA4KiVorXwSrrgZZmcCBYAAAAAgGmJWgEAAAAAAACAQ2oVrS0Ma22/Tvzz+Lv2EgaXdg20f+Vkp+WmfRO+MQEAAACgvNvaCwAAAAAAAAAAOmZGK3M6Hr+9HWGAN4sUEAAAAACAjUStcNTlcqm9BAAAAOB0Wv2Sfj6fS64EADgd+9/PPbsBoLCXh/sjA12HeXbXKjNfHu5/bP5ho3cBppXr/6g2zIMbABrn2Q0A8JWb2gsAAAAAAAAAAHpVfUzrj18/y/yhjAYYywkAAAAAAJBG1AoAAAAAAAAApKhetFZXa7DnXmZ7Ut08twUAAAAAANaJWgEAAAAAAACAbKRrnepx5i2N6KXuBgAAAACgBaJWAAAAAAAAAGA3GVtfxMZU5PIDAAAAAOCNqBUAAAAAAAAAyON4ujZ8K6vuAwAAAAAAZnZbewEAAAAAAAAAQGeGT0+3GO9F+PHr55/H37VX0ZMsiXLvF1Lv6wcAAAAAoDBRKwAAAAAAAACQgRmkjbt7etYfrqtyDb/+0cvlUv5Pl+HOAAAAAADA325qLwAAAAAAAAAA6IkwEnjlbsBgNNgAAAAAUICoFQAAAAAAAAA4KksINHwgVz2X+nYBP379LLMSJlH9mgcAAAAAoDWiVgAAAAAAAABgq9a60z+Pv2svAQAAAAAAgK1ErQAAAAAAAADAIRMOY2wt7t3OsFZy+fZdMOGdAQAAAACAb4laAQAAAAAAAIBNQkvOfjNRAAAAAAAANhK1AgAAAAAAAADpKg5j/PP4u9afTtDO1Mp2VkK/OhrT2s5KAAAAAAA4iVoBAAAAAAAAgC1MUp3Hj18/ay8BAAAAAAAY03K9XmuvAfp2uVyyHOd8Pmc5DgDlLcuS8Fs+htWSdr4+cgYBoAzfuwGgL57dAGP7KmrNMgUxrZitNYCxr9V+ZX0Xu6bgenZPaP366etqhzetXbrwji/dANAXz24AgK+Y1AoAAAAAAAAAJKrY/0iPQhnWygqNKAAAAAAAyUStAAAAAAAAAMA3NGwHNZjg7prFCts1eLUDAAAAANAOUSsAAAAAAAAAUJNitk2GtfIpb1hGpccGAAAAgDJErQAAAAAAAABAZyqmRyMVfYa1kp0sEAAAAACAdaJWAAAAAAAAACBFlnptpEZ0PIa18k6nb1ipLQAAAABAO0StAAAAAAAAAEBPuuvTWl6wYa1k1PKlDgAAAABAI0StAAAAAAAAAMBu6rVhrHethrXyZn1Mq3sCAAAAAABbiFoBAAAAAAAAgG8E5WrrjVyDultwFrpWTrNe/MxDlQ0AAAAAxSzX67X2GgAA+rYsS8Jv+RhWS9r5+sgZBAAAAAA4LiGTq9sdpXV9XbRShnCyrvcrRJTLuvavYQAAAAAYhkmtAAAAAAAAAABRegml1tcpCJxc70XrqZNFAgAAAADMQNQKAAAAAAAAAFSgk4QueKsCAAAAAJCRqBUAAAAAAAAA6EPdWYvDp32GtZLABFQG4DIGAAAAgJJErQAAAAAAAAAAnE66Vj5YP+lSQAAAAAAA9hK1AgAAAAAAAAClJeSRPeZzPa4ZRuX9CAAAAADQAlErAAAAAAAAAAD/MqyVN8a0AgAAAACQnagVAAAAAAAAAOAbU8WculZOilam4WIGAAAAgMJErQAAAAAAAABAUQlVpOioMF3r5EYtWvtdOQAAAADAMEStAAAAAAAAAAD59Z7P9b5+ko1atAIAAAAA0AJRKwAAAAAAAAAA+xjWOidFK4NxSQMAAABAeaJWAAAAAAAAAKCchBiyenQ0bcC5/spP+7KMbfjTWv1+AgAAAAAwOVErAAAAAAAAAACf07VOZf2EykEBAAAAADhO1AoAAAAAAAAAkNlI+Z+udRKKVmbjqgYAAACAKkStAAAAAAAAAEAhCQGk6KgFutbhTVW0DrYdAAAAAIC+iFoBAAAAAAAAAL6k2Hylax3YVEUrvHJhAwAAAEAtolYAAAAAAAAAAL6nax3SnEXrqPsCAAAAAGifqBUAAAAAAAAAKCEheuw0POt02VvoWgczZ9EKAAAAAEBFolYAAAAAAAAAALbStQ5j8qJ1+A2ywtkHAAAAgIpErQAAAAAAAAAAn5NofkrXOoDJi1YAAAAAAGoRtQIAAAAAAAAAsM/d0/NK96hrbdzKCVo/s4OZZ6f8zXkHAAAAgLpErQAAAAAAAABAuITKsdPuqNNlp9G19mi9aC25EgAAAAAAJiRqBQAAAAAAAAAgka61L4rWd+bc9cyccQAAAACoTtQKAAAAAAAAAPAJTeZGutZeKFoBAAAAAKhO1AoAAAAAAAAANEdi15e7p2enrFPO3eTbn4pzDQAAAAAtELUCAAAAAAAAALHmGdc5eTE1+fZ75JQxD1c7AAAAADRC1AoAAAAAAAAAQB7vxn6qyJry7tQ4O2+8FAAAAAAAxdzWXgAAAAAAAAAAQHPmmS4bQSLYLKeGObnyAQAAAKAdJrUCAAAAAAAAAG1RHwGFue0AAAAAAJQhagUAAAAAAAAAyEAUB13zFh6VMwsAAAAATRG1AgAAAAAAAACBXh7uay8BgEkpWgEAAACgNaJWAAAAAAAAAID/EeLCnASQAAAAAADRRK0AAAAAAAAAAACnk651LM4mAAAAADRI1AoAAAAAAAAAcJR0CqApbssAAAAA0CZRKwAAAAAAAADQEBkSUJe7EAAAAABAHFErAAAAAAAAAMB/Xh7uay8BqEzX2jtnEAAAAACaJWoFAAAAAAAAAAD4H1Vkv5w7AAAAAGiZqBUAAAAAAAAA4BABFUAj3JABAAAAoHGiVgAAAAAAAAAAgPfkkd1xygAAAACgfaJWAAAAAAAAAIB/vTzc114C0BCRJAAAAABAXqJWAAAAAAAAAACAz+lae+FMAQAAAEAXRK0AAAAAAAAAAKdT6phWGRUMz9u8fc4RAAAAAPRC1AoAcMiyLIV/EQAAAAAAAChMM9kyZwcAAAAAOiJqBQBIdzBM1bUCAAAAAEA70sa0AvNQTrbJeQEAAACAvohaAQASZUlSda0AAAAAAADQC/1ka5wRAAAAAOiOqBUAIEXGGFXXCgAAAADA2LoojpLHtHaxOyAj7/p2OBcAAAAA0CNRKwDAVstfejkyAAAAAADwreSiFZiTlrIFzgIAAAAAdOq29gIAAEroKBbNstTr9Xr8IAAAAAAAMANFK5Dg7unZ3aMiRSsAAAAA9MukVgAAAAAAAACgIToxoAu6ylq88gAAAADQNVErAAAAAAAAABCr2QDpYEDb7L6AMtwEyvOaAwAAAEDvRK0AAAAAAAAAwIyMhAWO01iW5NUGAAAAgAGIWgEAAAAAAACAcLtKpAK5qaIVyEVpWcDd07PXGQAAAADGIGoFAAAAAAAAAOaiaAXyklyG8toCAAAAwEiW6/Vaew0AAOGWZam9hKJ8xluR62LwIgMAAAAAJNhVk0ZUTBlzVpEV8JFmPjs3WwAAAAAYjEmtAAD/c21Y7dcGAAAAAACOqtsmic2AaArMvLyeAAAAADCe29oLAAAoYYwidIxdAAAAAADARi8P97lyJjkrUMzrjctt5yA5KwAAAACMyqRWAAAAAAAAAKCcXZ1SlipMWgaUp8k8wqsHAAAAAANbzPuCgy6XS5bjnM/nLMcBANYty5LlOD5IA0AZvncDQF88uwHYbm9omhY4bfkrd0/PCdXrAMFVrgf3ybMbVunqdxng7gpxfOkGgL54dgMAfMWkVgAAAAAAAACgtL3Z0q4q7OXh/vWfb9egngKiuc9s57UCAAAAgBnc1l4AAAAAAAAAADCjvSNS//7hj+FT8uhXQxSBaK83HHebFXJWAAAAAJiHqBUAAAAAAAAAqCM59DrShkmngCr2lvyTcE8GAAAAgNnc1F4AAAAAAAAAADC1kkVTlr8lwQLS3D09u4G88WoAAAAAwJxMagUAAAAAAAAAKkse2br3T7xjaiJQXoE7XuO0rAAAAAAwM1ErAAAAAAAAANCEt8wpY+slnQLaNGfa6p4MAAAAAIhaAQAAAAAAAIC2HK9bdVNAF+ZJW92WAQAAAIBXolYAAAAAAAAAoFGfRlCf1l/FcildFpBdxJzqdrhtAgAAAAB/E7UCAAAAAAAAAD3J1UcNGY8BXRtpcKuWFQAAAAD4lKgVAAAAAAAAAACgFV0PbtWyAgAAAADrRK0AAAAAAAAAAJuItYCSOqpb3R4BAAAAgI1ErQAAAAAAAADAdNovxADe/J2MNnX70rICAAAAAHuJWgEAAAAAAAAAAPpQN3BVsQIAAAAAB4laAQAAAAAAAAC+J+UCWvPxvpQ3c3XfAwAAAACyE7UCAAAAAAAAAHMpP9sQoAwZKgAAAADQuJvaCwAAAAAAAAAAAAAAAAAAYHyiVgAAAAAAAABgImljWg0/BAAAAAAAOE7UCgAAAAAAAAAAAAAAAABAuNvaCwAAAAAAAAAABvRxIGq/w077XTkAAAAAAEBTRK0AAAAAAAAAQDYfW9Z3/1XdQHRleQAAAAAAAES7qb0AAAAAAAAAAGAQW5LRl4f7vspSY1oBAAAAAAByEbUCAAAAAAAAABm0n6omrFDRCgAAAAAAkJGoFQAAAAAAAAA4am8v2n4BCwAAAAAAQHaiVgAAAAAAAADgkC4KVWNaAQAAAAAAqluu12vtNQAAQDnLsmQ5jg/SAAAAAACvjhStxarRtEWKWgEAAAAAAPIyqRUAAAAAAAAA4D1FKwAAAAAAQHaiVgAAAAAAAAAg0ZExrcUkLFLRCgAAAAAAEEHUCgAAAAAAAADwH0UrAAAAAABAEFErAAAAAAAAADCsLmbJAgAAAAAATELUCgAAAAAAAACkONiLFhiImrBCY1oBAAAAAADiiFoBAAAAAAAAgAEpWgEAAAAAAFojagUAAAAAAAAAULQCAAAAAACEE7UCAAAAAAAAAKVFF6R7x7QqWgEAAAAAAAoQtQIAAAAAAAAAQ1G0AgAAAAAAtEnUCgAAAAAAAAAUFRqRWP2IVAAAIABJREFUKloBAAAAAACaJWoFAAAAAAAAAMpRtAIAAAAAAExL1AoAAAAAAAAAFKJoBQAAAAAAmNlyvV5rrwEAAMpZliXLcXyQBgAAAAA47elIowtSRSsAAAAAAED7bmsvAAAAAAAAAAAYVpl2VNEKAAAAAADQBVErAAAAAAAAAJBZsWp0b856UrQCAAAAAADUs1yv19prAACAcpZlyXIcH6QBAAAAAF59lZUWaEcNaAUAAAAAAOjLTe0FAAAAAAAAAAADSpihGnp8RSsAAAAAAEB1JrUCADAXk1oBAAAAALJb6UsjUtKEXFbRCgAAAAAA0AJRKwAAcxG1AgAAAABEWA9NczWlclYAAAAAAICu3dReAAAAAAAAAAAwuIQY9eMRFK0AAAAAAAC9M6kVAIC5mNQKAAAAABBkY3S6NzRNC2LlrAAAAAAAAA0StQIAMBdRKwAAAABAqF0N6lfp6ZHJrnJWAAAAAACAZolaAQCYi6gVAAAAACDakST1CDkrAAAAAABA40StAADMRdQKAAAAAFBA4a5VzgoAAAAAANAFUSsAAHMRtQIAAAAAFBOdtmpZAQAAAAAA+iJqBQBgLqJWAAAAAIDCsqetWlYAAAAAAIBOiVoBAJiLqBUAAAAAoJYjdauQFQAAAAAAYACiVgAA5iJqBQAAAABoysfSVb8KAAAAAAAwKlErAABzEbUCAAAAAAAAAAAAAEAVN7UXAAAAAAAAAAAAAAAAAADA+EStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABDutvYCoHuXyyXLcc7nc5bjAAAAwEh87waAvnh2A0BHcj24T57dAFCEL90A0BfPbgCAr5jUCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIQTtQIAAAAAAAAAAAAAAAAAEE7UCgAAAAAAAAAAAAAAAABAOFErAAAAAAAAAAAAAAAAAADhRK0AAAAAAAAAAAAAAAAAAIRbrtdr7TUAAEA5y7JkOY4P0gAAAAAAAAAAAAAAsItJrQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFErQAAAAAAAAAAAAAAAAAAhBO1AgAAAAAAAAAAAAAAAAAQTtQKAAAAAAAAAAAAAAAAAEA4USsAAAAAAAAAAAAAAAAAAOFuay8Aune5XLIc53w+ZzkOAAAAjMT3bgDoi2c3AHQk14P75NkNAEX40g0AffHsBgD4ikmtAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAAAAAAAAAAABBO1AoAAAAAAAAAAAAAAAAAQDhRKwAAAAAAAAAAAAAAAAAA4UStAAAAAAAAAAAAAAAAAACEE7UCAAAAAAAA8A97d2zDQAgEQNBIbor+gy8LV+DAEvsvrJkCTmQHwQoAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAIDcWGs9fQYAALjPGGPLHBdpAAAAAAAAAAAAAAD4iZ9aAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAA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AAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiNtdbTZwAAgPuMMbbMcZEGAAAAAAAAAAAAAICf+KkVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAA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AAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyIlaAQAAAAAAAAAAAAAAAADIiVoBAAAAAAAAAAAAAAAAAMiJWgEAAAAAAAAAAAAAAAAAyC3btp19BwAAOM6yLLuc44c0AAAAAAAAAAAAAAD8iTe1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJB7nn0BmN4YY5dz1nXd5RwAAAD4Jp67AWAudjcATGSvxf2wuwHgEB66AWAudjcAwCve1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABATtQKAAAAAAAAAAAAAAAAAEBO1AoAAAAAAAAAAAAAAAAAQE7UCgAAAAAAAAAAAAAAAABAbtm27ew7AADAcZZl2eUcP6QBAAAAAAAAAAAAAOBPvKkVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAJ98IBgAAH+JJREFUAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgJyoFQAAAAAAAAAAAAAAAACAnKgVAAAAAAAAAAAAAAAAAICcqBUAAAAAAAAAAAAAAAAAgNzz7AvA9MYYu5yzrusu5wAAAMA38dwNAHOxuwFgInst7ofdDQCH8NANAHOxuwEAXvGmVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByolYAAAAAAAAAAAAAAAAAAHKiVgAAAAAAAAAAAAAAAAAAcqJWAAAAAAAAAAAAAAAAAAByy7ZtZ98BAACOsyzLLuf4IQ0AAAAAAAAAAAAAAH/iTa0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5J5nXwCmN8bY5Zx1XXc5BwAAAL6J524AmIvdDQAT2WtxP+xuADiEh24AmIvdDQDwije1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJB7nn0B4L8xxo+fWdf1gJvs4jfj/IaRr8zIn7jh1Ea+shuOvIsxxkQj3/Cv7Ev7E0a+MiO/7YYjP+aZeseRJ+J/+21GvjIjf+KGUxv5ym64nf2V33bDkR+3nNrIV2bktxn5ynxpf8LIV2bktxn5ynxpf8LIV2bktxn5ynxpf8LIV3bDkQEAZudNrQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADkRK0AAAAAAAAAAAAAAAAAAORErQAAAAAAAAAAAAAAAAAA5EStAAAAAAAAAAAAAAAAAADknmdfAKa3ruuPnxljHHATAOA3tm2zmgHgW/3mIR0AOIzVDAAXZ1kDwFzsbgCYi90NAPCKN7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAAAAAAAAAAAAAAAkBO1AgAAAAAAAAAAAAAAAACQE7UCAAAAAAAAAAAAAAAAAJATtQIAAAD/2LsDEgBgAIZh3L/oXUU5nETBDJQBAAAAAAAAAAAAQO5se70BAAAAAAAAAAAAAAAAAIDPeWoFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAAAgJ2oFAAAAAAAAAAAAAAAAACAnagUAAAAAAAAAAAAAAAAAICdqBQAAAAAAAAAAAAAAAG77diwAAAAAMMjfehT7yiMA2EmtAAAAAAAAAAAAAAAAAADspFYAAAAAAAAAAAAAAAAAAHZSKwAAAAAAAAAAAAAAAAAAO6kVAAAAAAAAAAAAAAAAAICd1AoAAAAAAAAAAAAAAAAAwE5qBQAAAAAAAAAAAAAAAABgJ7UCAAAAAAAAAAAAAAAAALCTWgEAAAAAAAAAAAAAAAAA2EmtAAAAAAAAAAAAAAAAAADspFYAAAAAAAAAAAAAAAAAAHZSKwAAAAAAAAAAAAAAAAAAO6kVAAAAAAAAAAAAAAAAAICd1AoAAAAAAAAAAAAAAAAAwE5qBQAAAAAAAAAAAAAAAABgJ7UCAAAAAAAAAAAAAAAAALCTWgEAAAAAAAAAAAAAAAAA2EmtAAAAAAAAAAAAAAAAAADspFYAAAAAAAAAAAAAAAAAAHZSKwAAAAAAAAAAAAAAAAAAO6kVAAAAAAAAAAAAAAAAAICd1AoAAAAAAAAAAAAAAAAAwE5qBQAAAAAAAAAAAAAAAABgJ7UCAAAAAAAAAAAAAAAAALCTWgEAAAAAAAAAAAAAAAAA2EmtAAAAAAAAAAAAAAAAAADsAmIeM7La1XzAAAAAAElFTkSuQmCC" } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" + }, + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "1842c5bf-4113-406b-b2c7-bc2535e9dd6c", + "showInput": false + }, + "source": [ + "### Pareto Optimality\n", + "\n", + "In a multi-objective optimization problem, there typically is no single best solution. Rather, the *goal* is to identify the set of Pareto optimal solutions such that any improvement in one objective means deteriorating another. Provided with the Pareto set, decision-makers can select an objective trade-off according to their preferences. In the plot below, the red dots are the Pareto optimal solutions (assuming both objectives are to be minimized).\n", + "![pareto front](attachment:pareto_front%20%281%29.png)" + ] + }, + { + "attachments": { + "hv_figure%20%281%29.png": { + "image/png": "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AAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg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rFQA4BXv6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgG47juPuOwAAAAAAAAAAAAAAAADAb+U9PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAKBD41sAABGaSURBVAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAAAAAAAAAA0On0AAAAAAAAAAAAAAAAAKDT6QEAAAAAAAAAAAAAAABAp9MDAAAAAAAAAAAAAAAAgE6nBwAAAAAAAAAAAAAAAACdTg8AAAAAAAAAAAAAAAAAOp0eAAAAAAAAAAAAAAAAAHQ6PQAAAAAAAAAAAAAAAADodHoAAAAAAAAA/9q7g9sKYSiKgkRKU/S/oCzSgjlfMU48U4DFXbzlEQAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA6HR6AAAAAAAAAAAAAAAAANDp9AAAAAAAAAAAAAAAAACg0+kBAAAAAAAAAAAAAAAAQKfTAwAAAAAAAAAAAAAAAIBOpwcAAAAAAAAAAAAAAAAAnU4PAAAAAAAAAAAAAAAAADqdHgAAAAAAAAAAAAAAAAB0Oj0AAAAAAAAAAAAAAAAA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" } + }, + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "cefa89be-ef41-40d9-9458-d6faed3c6c91", + "showInput": false + }, + "source": [ + "### Evaluating the Quality of a Pareto Front (Hypervolume)\n", + "\n", + "Given a reference point $ r \\in \\mathbb R^M$, which we represent as a list of M `ObjectiveThreshold`s, one for each coordinate, the hypervolume (HV) of a Pareto set $\\mathcal P = \\{ f(x_i)\\}_{i=1}^{|\\mathcal P|}$ is the volume of the space dominated (superior in every one of our M objectives) by $\\mathcal P$ and bounded from above by a point $ r$. The reference point should be set to be slightly worse (10% is reasonable) than the worst value of each objective that a decision maker would tolerate. In the figure below, the grey area is the hypervolume in this 2-objective problem.\n", + "![hv_figure](attachment:hv_figure%20%281%29.png)" + ] + }, + { + "attachments": { + "objective_thresholds_comparison.png": { + "image/png": "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Hgw1OCBqOHupVwQIECBAgACByRUQ2J/csbfkBAgQIECAAAECJySQO02zXb16Nc6fP19lQsqIOqHB8LYECBAgQIAAAQIECBAgQIAAAQIERkBAYH8EBkkXCRAgQIAAAQIExk9ARtT4jaklIkCAAAECBAgQIECAAAECBAgQIHBUAk6MdFSy5kuAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBA5BQGD/EBDNggABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIHJWAwP5RyZovAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBA4BAGB/UNANAsCBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIHBUAgL7RyVrvgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBA4BAEBPYPAdEsCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAUQkI7B+VrPkSIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIFDEBDYPwREsyBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAkclILB/VLLmS4AAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEDkGgeQjzMAsCBAgQIECAAAECBAgMtUCntxedXie2u9vlei/6/X7USo9rtXpMNdrlMhXteivq5b5GgAABAgQIECBAgAABAgQIECBAYNgEBPaHbUT0hwABAgQIECBAgACBQxfIgP7q7lrc33oQT3aexF4J7mcQv1lvxtnZM3Fm6nQstReiXYL8GgECBAgQIECAAAECBAgQIECAAIFhExDYH7YR0R8CBAgQIEDgyAT60Y9erxe7ve7TbN1aLVr1RgnsNY7sPc2YAIGTFeiW7/tubzcebj+KO5v3YqOzWbL2d6LX71UZ+1WG/mZEp9sp2fu1WIz5aDVa5bnM59cIECBAgAABAgQIECBAgAABAgQIDIeAwP5wjINeECBAgAABAscgkKW3t0vw7uFWZut2o1EC+svTc7HQmqkCesfQBW9BgMAxC3T6e7G+uxEPth/G3RLYzwN8+vv70O/Go53V2CnB/tnmTCnH36yy+DPIrxEgQIAAAQIECBAgQIAAAQIECBAYFgGB/WEZCf0gQIAAAQIEjkxgc28n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IECAAAECBAgQIECAAAECBAgQIECAwCQJCOxP0mhbVgIERkig5OLXmpHZ+1PlEqUwf5bcf1p0X+n9ERpIXSVAgAABAgQIECBAgAABAgQIECBAgAABAgQIvLWAwP5bE5oBAQIEjlJAMP8odc2bAAECBAgQIECAAAECBAgQIECAAAECBAgQIDAKAk7OPAqjpI8ECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgMLECAvsTO/QWnAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgRGQUBgfxRGSR8JECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYGIFBPYndugtOAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAiMgoDA/iiMkj4SIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAwMQKCOxP7NBbcAIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAYBQGB/VEYJX0kQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAgYkVENif2KG34AQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAwCgIC+6MwSvpIgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAhMrILA/sUNvwQkQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIEBgFAQE9kdhlPSRAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBCZWQGB/YofeghMgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIDAKAgI7I/CKOkjAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECEysgMD+xA69BSdAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAgACBURAQ2B+FUdJHAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIEJhYAYH9iR16C06AAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECoyDQHIVOHkcf+/1+9Hq9ePLkSXz55Zfx6NGjWF9fj+np6VhYWIhr167FqVOnYmpqKmq12nF0yXsQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAIEQ2N/3Idjd3Y27d+/Gr3/96/jqq69idXU1ZmZm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gACBIRYQ2B/iwdE1AgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECAgsO8zQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIEhlhAYH+IB0fXCBAgQIAAAQIECBAgQIAAAQIECBAgQIAAAQIECBAgQICAwL7PAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECBAgQGGIBgf0hHhxdI0CAAAECBAgQIECAAAECBAgQIECAAAECBAgQIECAAAECAvs+AwQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQIECBAYIgFBPaHeHB0jQABAgQIECBAgAABAgQIECBAgAABAgQIECBAgAABAgQINBEQIECAAAECBCZFoNftRWd3LzaebEav2496ox4z89MxPdOOWq32HcPjra14tLkZq5tbsbm7G/1+P9rNZsy0W3F+YTFOz81GvUy//zXfvdgNAgQIECBAgAABAgQIECBAgAABAgQIECBwyAIC+4cManYECBAgQIDA8AlkYL7X68fudifWVzfi9o37sdfpRrME6lcunYrGykI0SuC+Vq9VQfz76+vxyZ07cf3e/bj3ZL167fz0VJxdmI+/uno15srrplqtaOw7GGD4llqPCBAgQIAAAQIECBAgQIAAAQIECBAgQGBcBAT2x2UkLQcBAgQIECDwUoHVB0/i7s2H8fnHN+KbL+7G43K/W7L3G41GLJ9diPNXTseP/837MX1mLu5ub8Snd+/Gp7fvxJOdndje7US/zHlzd6dk8G/GbmevCvb//OqVOLe48NL39AQBAgQIECBAgAABAgQIECBAgAABAgQIEDgsAYH9w5I0HwIECBAgQGDoBDJTv/wX9289io//vz/G7359PW58fjt2NneqLPx6rZTiX5iOc5dOR7NVSu1fW4qvehtx/cGD+OL+/arUfim4Xy3XZjWvfmyVQP/Gzm5cPrUcS7Mz0S4HByjJP3RDr0MECBAgQIAAAQIECBAgQIAAAQIECBAYKwGB/bEaTgtDgAABAgQI7BfI8vud3b24cf1O/OYffh9rj9ajW0rw1+v1cnk6ZWenEw/urMa//OqTaN5ciMdX2rHW3Y0M+u9vg+D91u5uPNxYjztra3Fmfi7Ozs9HU0n+/VRuEyBAgAABAgQIECBAgAABAgQIECBAgMAhCwjsHzKo2REg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" + } + }, + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "1819970e-9b48-4b57-b280-35bf2c4919d2", + "showInput": false + }, + "source": [ + "### Set Objective Thresholds to focus candidate generation in a region of interest\n", + "\n", + "The below plots show three different sets of points generated by the qNEHVI [1] algorithm with different objective thresholds (aka reference points). Note that here we use absolute thresholds, but thresholds can also be relative to a status_quo arm.\n", + "\n", + "The first plot shows the points without the `ObjectiveThreshold`s visible (they're set far below the origin of the graph).\n", + "\n", + "The second shows the points generated with (-18, -6) as thresholds. The regions violating the thresholds are greyed out. Only the white region in the upper right exceeds both threshold, points in this region dominate the intersection of these thresholds (this intersection is the reference point). Only points in this region contribute to the hypervolume objective. A few exploration points are not in the valid region, but almost all the rest of the points are.\n", + "\n", + "The third shows points generated with a very strict pair of thresholds, (-18, -2). Only the white region in the upper right exceeds both thresholds. Many points do not lie in the dominating region, but there are still more focused there than in the second examples.\n", + "![objective_thresholds_comparison.png](attachment:objective_thresholds_comparison.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "f2f39a8f-279f-49a1-b645-d51caed24d9c" + }, + "source": [ + "### Further Information\n", + "A deeper explanation of our the qNEHVI [1] and qNParEGO [2] algorithms this notebook explores can be found at \n", + "\n", + "[1] [S. Daulton, M. Balandat, and E. Bakshy. Parallel Bayesian Optimization of Multiple Noisy Objectives with Expected Hypervolume Improvement. Advances in Neural Information Processing Systems 34, 2021.](https://arxiv.org/abs/2105.08195)\n", + "\n", + "[2] [S. Daulton, M. Balandat, and E. Bakshy. Differentiable Expected Hypervolume Improvement for Parallel Multi-Objective Bayesian Optimization. Advances in Neural Information Processing Systems 33, 2020.](https://arxiv.org/abs/2006.05078)\n", + "\n", + "In addition, the underlying BoTorch implementation has a researcher-oriented tutorial at https://botorch.org/tutorials/multi_objective_bo." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "0ac396dd-8040-4f87-8abe-472127734aef" + }, + "source": [ + "## Setup" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191302514, + "executionStopTime": 1628191302546, + "hidden_ranges": [], + "originalKey": "500597fc-a996-48f4-a8fe-defd429162b8", + "requestMsgId": "07dd11c9-cd20-4bfa-b2d9-9a7bf70b2e44" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import pandas as pd\n", + "from ax.core.data import Data\n", + "from ax.core.experiment import Experiment\n", + "from ax.core.metric import Metric\n", + "from ax.core.objective import MultiObjective, Objective\n", + "from ax.core.optimization_config import (\n", + " MultiObjectiveOptimizationConfig,\n", + " ObjectiveThreshold,\n", + ")\n", + "\n", + "from ax.core.parameter import ParameterType, RangeParameter\n", + "from ax.core.search_space import SearchSpace\n", + "from ax.metrics.noisy_function import NoisyFunctionMetric\n", + "\n", + "# Factory methods for creating multi-objective optimization modesl.\n", + "from ax.modelbridge.factory import get_MOO_EHVI, get_MOO_PAREGO\n", + "\n", + "# Analysis utilities, including a method to evaluate hypervolumes\n", + "from ax.modelbridge.modelbridge_utils import observed_hypervolume\n", + "from ax.modelbridge.registry import Models\n", + "from ax.runners.synthetic import SyntheticRunner\n", + "from ax.service.utils.report_utils import exp_to_df" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "0b43c263-41da-4aa8-99f3-4a2a7fc49e4b" + }, + "source": [ + "## Define experiment configurations" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "963a036d-a250-4e3c-9570-afe6f2192f9a" + }, + "source": [ + "### Search Space" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191313915, + "executionStopTime": 1628191313944, + "hidden_ranges": [], + "originalKey": "90637eb4-730f-4f3d-8712-875bf88d6c2d", + "requestMsgId": "fbb9db8e-5414-4add-ad10-0bd00583ebf5" + }, + "outputs": [], + "source": [ + "x1 = RangeParameter(name=\"x1\", lower=0, upper=1, parameter_type=ParameterType.FLOAT)\n", + "x2 = RangeParameter(name=\"x2\", lower=0, upper=1, parameter_type=ParameterType.FLOAT)\n", + "\n", + "search_space = SearchSpace(parameters=[x1, x2])" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "ac3cf1fe-d39d-48bb-a31d-e3ee0d70418b", + "showInput": false + }, + "source": [ + "### MultiObjectiveOptimizationConfig\n", + "\n", + "To optimize multiple objective we must create a `MultiObjective` containing the metrics we'll optimize and `MultiObjectiveOptimizationConfig` (which contains `ObjectiveThreshold`s) instead of our more typical `Objective` and `OptimizationConfig`\n", + "\n", + "We define `NoisyFunctionMetric`s to wrap our synthetic Branin-Currin problem's outputs. Add noise to see how robust our different optimization algorithms are." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191319191, + "executionStopTime": 1628191319220, + "hidden_ranges": [], + "originalKey": "9fdb11b6-7845-4f06-90fd-527fee088d76", + "requestMsgId": "febe0d60-fe60-4d55-ba6f-724c8ce7601d" + }, + "outputs": [], + "source": [ + "class MetricA(NoisyFunctionMetric):\n", + " def f(self, x: np.ndarray) -> float:\n", + " return float(branin_currin(torch.tensor(x))[0])\n", + "\n", + "\n", + "class MetricB(NoisyFunctionMetric):\n", + " def f(self, x: np.ndarray) -> float:\n", + " return float(branin_currin(torch.tensor(x))[1])\n", + "\n", + "\n", + "metric_a = MetricA(\"a\", [\"x1\", \"x2\"], noise_sd=0.0, lower_is_better=False)\n", + "metric_b = MetricB(\"b\", [\"x1\", \"x2\"], noise_sd=0.0, lower_is_better=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191321755, + "executionStopTime": 1628191321791, + "hidden_ranges": [], + "originalKey": "27065b03-7234-49c1-b3ae-f6442ec4e3d6", + "requestMsgId": "d4010fca-5cbd-4a41-a779-cfa97ec15cc3" + }, + "outputs": [], + "source": [ + "mo = MultiObjective(\n", + " objectives=[Objective(metric=metric_a), Objective(metric=metric_b)],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1628191323464, + "executionStopTime": 1628191323491, + "originalKey": "c58b70de-06b5-4e03-8958-c3c55d4c295a", + "requestMsgId": "27e7efe5-d29e-4211-944e-41e6de065299" + }, + "outputs": [], + "source": [ + "objective_thresholds = [\n", + " ObjectiveThreshold(metric=metric, bound=val, relative=False)\n", + " for metric, val in zip(mo.metrics, branin_currin.ref_point)\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191325491, + "executionStopTime": 1628191325519, + "hidden_ranges": [], + "originalKey": "4b1ce9ba-e2e5-4a8a-9c15-5d01a2940a55", + "requestMsgId": "314ea591-0d2e-4fb5-b091-2aa2ea27f0eb" + }, + "outputs": [], + "source": [ + "optimization_config = MultiObjectiveOptimizationConfig(\n", + " objective=mo,\n", + " objective_thresholds=objective_thresholds,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "3b7b797c-2478-48d6-84ea-c62a886db31f", + "showInput": false + }, + "source": [ + "## Define experiment creation utilities\n", + "\n", + "These construct our experiment, then initialize with Sobol points before we fit a Gaussian Process model to those initial points." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1628191328765, + "executionStopTime": 1628191328792, + "originalKey": "a52ace6c-8144-446b-97d5-2f27879ca187", + "requestMsgId": "6a222fb5-231e-4476-86a6-c29ca5113332" + }, + "outputs": [], + "source": [ + "# Reasonable defaults for number of quasi-random initialization points and for subsequent model-generated trials.\n", + "N_INIT = 6\n", + "N_BATCH = 25" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191330913, + "executionStopTime": 1628191330991, + "hidden_ranges": [], + "originalKey": "9fd6ec68-4c53-4276-a98a-61431cdc05d5", + "requestMsgId": "8f659995-6b8f-4544-8392-03daaf8220b8" + }, + "outputs": [], + "source": [ + "def build_experiment():\n", + " experiment = Experiment(\n", + " name=\"pareto_experiment\",\n", + " search_space=search_space,\n", + " optimization_config=optimization_config,\n", + " runner=SyntheticRunner(),\n", + " )\n", + " return experiment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191334273, + "executionStopTime": 1628191334299, + "hidden_ranges": [], + "originalKey": "a8eef6a6-1d53-494a-907f-10ca35492a8c", + "requestMsgId": "b207dbd4-0a53-4efd-bbb9-9dee8835d60b" + }, + "outputs": [], + "source": [ + "## Initialize with Sobol samples\n", + "def initialize_experiment(experiment):\n", + " sobol = Models.SOBOL(search_space=experiment.search_space, seed=1234)\n", + " for _ in range(N_INIT):\n", + " experiment.new_trial(sobol.gen(1)).run()\n", + " return experiment.fetch_data()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "0c918735-9fda-4c36-90b5-163443e66c72", + "showInput": false + }, + "source": [ + "# Sobol\n", + "We use quasirandom points as a fast baseline for evaluating the quality of our multi-objective optimization algorithms." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191356513, + "executionStopTime": 1628191356896, + "hidden_ranges": [], + "originalKey": "5ee13832-804a-413f-a6bc-1f8f96a817d8", + "requestMsgId": "5b40f1e6-45b9-40e4-8569-9d459e98ca57" + }, + "outputs": [], + "source": [ + "sobol_experiment = build_experiment()\n", + "sobol_data = initialize_experiment(sobol_experiment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191362562, + "executionStopTime": 1628191408255, + "hidden_ranges": [], + "originalKey": "0c6a6d44-29db-43dd-982d-dc664d00b009", + "requestMsgId": "8aca7b5b-aab8-4a39-9a49-d7b1e0c714c5" + }, + "outputs": [], + "source": [ + "sobol_model = Models.SOBOL(\n", + " experiment=sobol_experiment,\n", + " data=sobol_data,\n", + ")\n", + "sobol_hv_list = []\n", + "for i in range(N_BATCH):\n", + " generator_run = sobol_model.gen(1)\n", + " trial = sobol_experiment.new_trial(generator_run=generator_run)\n", + " trial.run()\n", + " exp_df = exp_to_df(sobol_experiment)\n", + " outcomes = np.array(exp_df[[\"a\", \"b\"]], dtype=np.double)\n", + " # Fit a GP-based model in order to calculate hypervolume.\n", + " # We will not use this model to generate new points.\n", + " dummy_model = Models.BOTORCH_MODULAR(\n", + " experiment=sobol_experiment,\n", + " data=sobol_experiment.fetch_data(),\n", + " )\n", + " try:\n", + " hv = observed_hypervolume(modelbridge=dummy_model)\n", + " except:\n", + " hv = 0\n", + " print(\"Failed to compute hv\")\n", + " sobol_hv_list.append(hv)\n", + " print(f\"Iteration: {i}, HV: {hv}\")\n", + "\n", + "sobol_outcomes = np.array(exp_to_df(sobol_experiment)[[\"a\", \"b\"]], dtype=np.double)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "767a7e9b-8902-424e-bfc4-f7afdba47302" + }, + "source": [ + "## qNEHVI\n", + "Noisy Expected Hypervolume Improvement. This is our current recommended algorithm for multi-objective optimization." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191422463, + "executionStopTime": 1628191422803, + "hidden_ranges": [], + "originalKey": "8fc6bfb4-3012-4ce2-99ed-288378098c50", + "requestMsgId": "0fd945a2-ac45-4a74-82cc-7173e15ced85" + }, + "outputs": [], + "source": [ + "ehvi_experiment = build_experiment()\n", + "ehvi_data = initialize_experiment(ehvi_experiment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191425090, + "executionStopTime": 1628191500240, + "hidden_ranges": [], + "originalKey": "27dd9425-b77e-4027-8412-30dd40c5abf1", + "requestMsgId": "65430b82-de1e-4946-9d8d-4a75762354c1" + }, + "outputs": [], + "source": [ + "ehvi_hv_list = []\n", + "ehvi_model = None\n", + "for i in range(N_BATCH):\n", + " ehvi_model = Models.BOTORCH_MODULAR(\n", + " experiment=ehvi_experiment,\n", + " data=ehvi_data,\n", + " )\n", + " generator_run = ehvi_model.gen(1)\n", + " trial = ehvi_experiment.new_trial(generator_run=generator_run)\n", + " trial.run()\n", + " ehvi_data = Data.from_multiple_data([ehvi_data, trial.fetch_data()])\n", + "\n", + " exp_df = exp_to_df(ehvi_experiment)\n", + " outcomes = np.array(exp_df[[\"a\", \"b\"]], dtype=np.double)\n", + " try:\n", + " hv = observed_hypervolume(modelbridge=ehvi_model)\n", + " except:\n", + " hv = 0\n", + " print(\"Failed to compute hv\")\n", + " ehvi_hv_list.append(hv)\n", + " print(f\"Iteration: {i}, HV: {hv}\")\n", + "\n", + "ehvi_outcomes = np.array(exp_to_df(ehvi_experiment)[[\"a\", \"b\"]], dtype=np.double)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "e93178b6-5ba4-4c01-b8a2-e05971b7326f", + "showInput": false + }, + "source": [ + "## Plot qNEHVI Pareto Frontier based on model posterior \n", + "\n", + "The plotted points are samples from the fitted model's posterior, not observed samples." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1628191505148, + "executionStopTime": 1628191521900, + "hidden_ranges": [], + "originalKey": "71e013c5-638f-4ba4-bb9a-3e4a7d3eb9fa", + "requestMsgId": "681433c5-fc21-4699-9fe1-8e444c671153" + }, + "outputs": [], + "source": [ + "frontier = compute_posterior_pareto_frontier(\n", + " experiment=ehvi_experiment,\n", + " data=ehvi_experiment.fetch_data(),\n", + " primary_objective=metric_b,\n", + " secondary_objective=metric_a,\n", + " absolute_metrics=[\"a\", \"b\"],\n", + " num_points=20,\n", + ")\n", + "\n", + "render(plot_pareto_frontier(frontier, CI_level=0.90))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "77b2dbce-f1e4-443a-8f81-2e1cbe207301" + }, + "source": [ + "## qNParEGO\n", + "This is a good alternative algorithm for multi-objective optimization when qNEHVI runs too slowly." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "2f796182-558b-47aa-8072-4dbf40123133" + }, + "outputs": [], + "source": [ + "parego_experiment = build_experiment()\n", + "parego_data = initialize_experiment(parego_experiment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "72999188-90f5-43e0-b1d9-d468e7d51191" + }, + "outputs": [], + "source": [ + "parego_hv_list = []\n", + "parego_model = None\n", + "for i in range(N_BATCH):\n", + " parego_model = get_MOO_PAREGO(\n", + " experiment=parego_experiment,\n", + " data=parego_data,\n", + " )\n", + " generator_run = parego_model.gen(1)\n", + " trial = parego_experiment.new_trial(generator_run=generator_run)\n", + " trial.run()\n", + " parego_data = Data.from_multiple_data([parego_data, trial.fetch_data()])\n", + "\n", + " exp_df = exp_to_df(parego_experiment)\n", + " outcomes = np.array(exp_df[[\"a\", \"b\"]], dtype=np.double)\n", + " try:\n", + " hv = observed_hypervolume(modelbridge=parego_model)\n", + " except:\n", + " hv = 0\n", + " print(\"Failed to compute hv\")\n", + " parego_hv_list.append(hv)\n", + " print(f\"Iteration: {i}, HV: {hv}\")\n", + "\n", + "parego_outcomes = np.array(exp_to_df(parego_experiment)[[\"a\", \"b\"]], dtype=np.double)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "67ded85f-7c58-4c31-8df5-b0d8d07e4299", + "showInput": false + }, + "source": [ + "## Plot qNParEGO Pareto Frontier based on model posterior \n", + "\n", + "The plotted points are samples from the fitted model's posterior, not observed samples." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "3b1f39fd-ef75-4ea4-865b-f7b54b90da07" + }, + "outputs": [], + "source": [ + "frontier = compute_posterior_pareto_frontier(\n", + " experiment=parego_experiment,\n", + " data=parego_experiment.fetch_data(),\n", + " primary_objective=metric_b,\n", + " secondary_objective=metric_a,\n", + " absolute_metrics=[\"a\", \"b\"],\n", + " num_points=20,\n", + ")\n", + "\n", + "render(plot_pareto_frontier(frontier, CI_level=0.90))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "collapsed": true, + "hidden_ranges": [], + "originalKey": "a67f7345-1777-4372-8704-bb80c4c4e783" + }, + "source": [ + "## Plot empirical data" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "collapsed": true, + "hidden_ranges": [], + "originalKey": "de878adc-0eb2-4599-8c1b-e0adbc0c0765", + "showInput": false + }, + "source": [ + "#### Plot observed hypervolume, with color representing the iteration that a point was generated on.\n", + "\n", + "To examine optimization process from another perspective, we plot the collected observations under each algorithm where the color corresponds to the BO iteration at which the point was collected. The plot on the right for $q$NEHVI shows that the $q$NEHVI quickly identifies the Pareto frontier and most of its evaluations are very close to the Pareto frontier. $q$NParEGO also identifies has many observations close to the Pareto frontier, but relies on optimizing random scalarizations, which is a less principled way of optimizing the Pareto front compared to $q$NEHVI, which explicitly attempts focuses on improving the Pareto front. Sobol generates random points and has few points close to the Pareto front." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "c6296697-ef07-422d-b965-35e4e5104a12" + }, + "outputs": [], + "source": [ + "import matplotlib\n", + "import numpy as np\n", + "from matplotlib import pyplot as plt\n", + "from matplotlib.cm import ScalarMappable\n", + "\n", + "%matplotlib inline\n", + "\n", + "\n", + "fig, axes = plt.subplots(1, 3, figsize=(20, 6))\n", + "algos = [\"Sobol\", \"qNParEGO\", \"qNEHVI\"]\n", + "outcomes_list = [sobol_outcomes, parego_outcomes, ehvi_outcomes]\n", + "cm = matplotlib.colormaps[\"viridis\"]\n", + "BATCH_SIZE = 1\n", + "\n", + "n_results = N_BATCH * BATCH_SIZE + N_INIT\n", + "batch_number = torch.cat(\n", + " [\n", + " torch.zeros(N_INIT),\n", + " torch.arange(1, N_BATCH + 1).repeat(BATCH_SIZE, 1).t().reshape(-1),\n", + " ]\n", + ").numpy()\n", + "for i, train_obj in enumerate(outcomes_list):\n", + " x = i\n", + " sc = axes[x].scatter(\n", + " train_obj[:n_results, 0],\n", + " train_obj[:n_results, 1],\n", + " c=batch_number[:n_results],\n", + " alpha=0.8,\n", + " )\n", + " axes[x].set_title(algos[i])\n", + " axes[x].set_xlabel(\"Objective 1\")\n", + " axes[x].set_xlim(-150, 5)\n", + " axes[x].set_ylim(-15, 0)\n", + "axes[0].set_ylabel(\"Objective 2\")\n", + "norm = plt.Normalize(batch_number.min(), batch_number.max())\n", + "sm = ScalarMappable(norm=norm, cmap=cm)\n", + "sm.set_array([])\n", + "fig.subplots_adjust(right=0.9)\n", + "cbar_ax = fig.add_axes([0.93, 0.15, 0.01, 0.7])\n", + "cbar = fig.colorbar(sm, cax=cbar_ax)\n", + "cbar.ax.set_title(\"Iteration\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "ca12287f-c7b8-4ef8-8eb9-57760eda5fed", + "showInput": true + }, + "source": [ + "# Hypervolume statistics\n", + "The hypervolume of the space dominated by points that dominate the reference point." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "ec8b764b-c27d-4722-9e3d-d81cebb3624a" + }, + "source": [ + "#### Plot the results\n", + "The plot below shows a common metric of multi-objective optimization performance when the true Pareto frontier is known: the log difference between the hypervolume of the true Pareto front and the hypervolume of the approximate Pareto front identified by each algorithm. The log hypervolume difference is plotted at each step of the optimization for each of the algorithms.\n", + "\n", + "The plot show that $q$NEHVI vastly outperforms $q$NParEGO which outperforms the Sobol baseline." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "d50b98bc-5ab1-4826-a5b2-474a13f4bae0" + }, + "outputs": [], + "source": [ + "iters = np.arange(1, N_BATCH + 1)\n", + "log_hv_difference_sobol = np.log10(branin_currin.max_hv - np.asarray(sobol_hv_list))[\n", + " : N_BATCH + 1\n", + "]\n", + "log_hv_difference_parego = np.log10(branin_currin.max_hv - np.asarray(parego_hv_list))[\n", + " : N_BATCH + 1\n", + "]\n", + "log_hv_difference_ehvi = np.log10(branin_currin.max_hv - np.asarray(ehvi_hv_list))[\n", + " : N_BATCH + 1\n", + "]\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(8, 6))\n", + "ax.plot(iters, log_hv_difference_sobol, label=\"Sobol\", linewidth=1.5)\n", + "ax.plot(iters, log_hv_difference_parego, label=\"qNParEGO\", linewidth=1.5)\n", + "ax.plot(iters, log_hv_difference_ehvi, label=\"qNEHVI\", linewidth=1.5)\n", + "ax.set(\n", + " xlabel=\"number of observations (beyond initial points)\",\n", + " ylabel=\"Log Hypervolume Difference\",\n", + ")\n", + "ax.legend(loc=\"lower right\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "nbformat": 4, - "nbformat_minor": 2 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/raytune_pytorch_cnn.ipynb b/tutorials/raytune_pytorch_cnn.ipynb index 64b3b6c39dd..9bb47c04a19 100644 --- a/tutorials/raytune_pytorch_cnn.ipynb +++ b/tutorials/raytune_pytorch_cnn.ipynb @@ -1,327 +1,320 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "originalKey": "6dba2bea-d97e-4545-9803-4242850e1807" - }, - "source": [ - "# Ax Service API with RayTune on PyTorch CNN\n", - "\n", - "Ax integrates easily with different scheduling frameworks and distributed training frameworks. In this example, Ax-driven optimization is executed in a distributed fashion using [RayTune](https://ray.readthedocs.io/en/latest/tune.html). \n", - "\n", - "RayTune is a scalable framework for hyperparameter tuning that provides many state-of-the-art hyperparameter tuning algorithms and seamlessly scales from laptop to distributed cluster with fault tolerance. RayTune leverages [Ray](https://ray.readthedocs.io/)'s Actor API to provide asynchronous parallel and distributed execution.\n", - "\n", - "Ray 'Actors' are a simple and clean abstraction for replicating your Python classes across multiple workers and nodes. Each hyperparameter evaluation is asynchronously executed on a separate Ray actor and reports intermediate training progress back to RayTune. Upon reporting, RayTune then uses this information to performs actions such as early termination, re-prioritization, or checkpointing." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "fe7a9417-4bde-46d2-9de3-af1bc73bde45" - }, - "outputs": [], - "source": [ - "import logging\n", - "\n", - "from ray import tune\n", - "from ray.tune import report\n", - "from ray.tune.search.ax import AxSearch\n", - "\n", - "logger = logging.getLogger(tune.__name__)\n", - "logger.setLevel(\n", - " level=logging.CRITICAL\n", - ") # Reduce the number of Ray warnings that are not relevant here." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "19956234-25ae-4e72-9d72-dbcd1b90e530" - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "import torch\n", - "from ax.plot.contour import plot_contour\n", - "from ax.plot.trace import optimization_trace_single_method\n", - "from ax.service.ax_client import AxClient\n", - "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", - "from ax.utils.tutorials.cnn_utils import CNN, evaluate, load_mnist, train\n", - "\n", - "init_notebook_plotting()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "originalKey": "a26e18f8-caa7-411d-809a-61a9229cd6c6" - }, - "source": [ - "## 1. Initialize client\n", - "We specify `enforce_sequential_optimization` as False, because Ray runs many trials in parallel. With the sequential optimization enforcement, `AxClient` would expect the first few trials to be completed with data before generating more trials.\n", - "\n", - "When high parallelism is not required, it is best to enforce sequential optimization, as it allows for achieving optimal results in fewer (but sequential) trials. In cases where parallelism is important, such as with distributed training using Ray, we choose to forego minimizing resource utilization and run more trials in parallel." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "a91e1cb2-999a-4b88-a2d2-85d0acaa8854" - }, - "outputs": [], - "source": [ - "ax = AxClient(enforce_sequential_optimization=False)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "originalKey": "1766919c-fb6f-4271-a8e1-6f972eee78f3" - }, - "source": [ - "## 2. Set up experiment\n", - "Here we set up the search space and specify the objective; refer to the Ax API tutorials for more detail." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "37e367d4-d09d-425b-98f7-c8849d9be4b7" - }, - "outputs": [], - "source": [ - "MINIMIZE = False # Whether we should be minimizing or maximizing the objective" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "777c8d33-2cd1-4425-b45f-2a44922dce7d" - }, - "outputs": [], - "source": [ - "ax.create_experiment(\n", - " name=\"mnist_experiment\",\n", - " parameters=[\n", - " {\"name\": \"lr\", \"type\": \"range\", \"bounds\": [1e-6, 0.4], \"log_scale\": True},\n", - " {\"name\": \"momentum\", \"type\": \"range\", \"bounds\": [0.0, 1.0]},\n", - " ],\n", - " objective_name=\"mean_accuracy\",\n", - " minimize=MINIMIZE,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "589e4d80-02ae-461d-babc-0f96718f623e" - }, - "outputs": [], - "source": [ - "ax.experiment.optimization_config.objective.minimize" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "773a2c32-4ff3-4e92-8996-325504ce953e" - }, - "outputs": [], - "source": [ - "load_mnist(\n", - " data_path=\"~/.data\"\n", - ") # Pre-load the dataset before the initial evaluations are executed." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "originalKey": "5fec848a-3538-489c-bcdd-a74051f48140" - }, - "source": [ - "## 3. Define how to evaluate trials\n", - "Since we use the Ax Service API here, we evaluate the parameterizations that Ax suggests, using RayTune. The evaluation function follows its usual pattern, taking in a parameterization and outputting an objective value. For detail on evaluation functions, see [Trial Evaluation](https://ax.dev/docs/runner.html). " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "75fce84d-35bd-45b5-b55e-f52baf26db03" - }, - "outputs": [], - "source": [ - "def train_evaluate(parameterization):\n", - " device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", - " train_loader, valid_loader, test_loader = load_mnist(data_path=\"~/.data\")\n", - " net = train(\n", - " net=CNN(),\n", - " train_loader=train_loader,\n", - " parameters=parameterization,\n", - " dtype=torch.float,\n", - " device=device,\n", - " )\n", - " report(\n", - " mean_accuracy=evaluate(\n", - " net=net,\n", - " data_loader=valid_loader,\n", - " dtype=torch.float,\n", - " device=device,\n", - " )\n", - " )" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "originalKey": "dda3574c-5967-43ea-8d23-7a151dc59ec9" - }, - "source": [ - "## 4. Run optimization\n", - "Execute the Ax optimization and trial evaluation in RayTune using [AxSearch algorithm](https://ray.readthedocs.io/en/latest/tune-searchalg.html#ax-search):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "1d768bb2-d46b-4c4c-879e-3242af7555f4" - }, - "outputs": [], - "source": [ - "# Set up AxSearcher in RayTune\n", - "algo = AxSearch(ax_client=ax)\n", - "# Wrap AxSearcher in a concurrently limiter, to ensure that Bayesian optimization receives the\n", - "# data for completed trials before creating more trials\n", - "algo = tune.search.ConcurrencyLimiter(algo, max_concurrent=3)\n", - "tune.run(\n", - " train_evaluate,\n", - " num_samples=30,\n", - " search_alg=algo,\n", - " verbose=0, # Set this level to 1 to see status updates and to 2 to also see trial results.\n", - " # To use GPU, specify: resources_per_trial={\"gpu\": 1}.\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "originalKey": "cb00f812-e9e5-4208-a680-adf6619d74c4" - }, - "source": [ - "## 5. Retrieve the optimization results" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "2ec54675-d0ad-4eac-aaf3-66b593037cce" - }, - "outputs": [], - "source": [ - "best_parameters, values = ax.get_best_parameters()\n", - "best_parameters" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "50c764a6-a630-4935-9c07-ea84045e0ecc" - }, - "outputs": [], - "source": [ - "means, covariances = values\n", - "means" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "originalKey": "12a87817-4409-4f07-a912-8d60eff71d68" - }, - "source": [ - "## 6. Plot the response surface and optimization trace" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "3742f35b-6b28-49ae-a606-a138459f4964", - "scrolled": false - }, - "outputs": [], - "source": [ - "render(\n", - " plot_contour(\n", - " model=ax.generation_strategy.model,\n", - " param_x=\"lr\",\n", - " param_y=\"momentum\",\n", - " metric_name=\"mean_accuracy\",\n", - " )\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "6dfd23ca-1c93-4846-8e85-4560f9e40304" - }, - "outputs": [], - "source": [ - "# `plot_single_method` expects a 2-d array of means, because it expects to average means from multiple\n", - "# optimization runs, so we wrap out best objectives array in another array.\n", - "best_objectives = np.array(\n", - " [[trial.objective_mean * 100 for trial in ax.experiment.trials.values()]]\n", - ")\n", - "best_objective_plot = optimization_trace_single_method(\n", - " y=np.maximum.accumulate(best_objectives, axis=1),\n", - " title=\"Model performance vs. # of iterations\",\n", - " ylabel=\"Accuracy\",\n", - ")\n", - "render(best_objective_plot)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "originalKey": "6dba2bea-d97e-4545-9803-4242850e1807" + }, + "source": [ + "# Ax Service API with RayTune on PyTorch CNN\n", + "\n", + "Ax integrates easily with different scheduling frameworks and distributed training frameworks. In this example, Ax-driven optimization is executed in a distributed fashion using [RayTune](https://ray.readthedocs.io/en/latest/tune.html). \n", + "\n", + "RayTune is a scalable framework for hyperparameter tuning that provides many state-of-the-art hyperparameter tuning algorithms and seamlessly scales from laptop to distributed cluster with fault tolerance. RayTune leverages [Ray](https://ray.readthedocs.io/)'s Actor API to provide asynchronous parallel and distributed execution.\n", + "\n", + "Ray 'Actors' are a simple and clean abstraction for replicating your Python classes across multiple workers and nodes. Each hyperparameter evaluation is asynchronously executed on a separate Ray actor and reports intermediate training progress back to RayTune. Upon reporting, RayTune then uses this information to performs actions such as early termination, re-prioritization, or checkpointing." + ] }, - "nbformat": 4, - "nbformat_minor": 2 + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "fe7a9417-4bde-46d2-9de3-af1bc73bde45" + }, + "outputs": [], + "source": [ + "import logging\n", + "\n", + "from ray import tune\n", + "from ray.tune import report\n", + "from ray.tune.search.ax import AxSearch\n", + "\n", + "logger = logging.getLogger(tune.__name__)\n", + "logger.setLevel(\n", + " level=logging.CRITICAL\n", + ") # Reduce the number of Ray warnings that are not relevant here." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "19956234-25ae-4e72-9d72-dbcd1b90e530" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "import torch\n", + "from ax.plot.contour import plot_contour\n", + "from ax.plot.trace import optimization_trace_single_method\n", + "from ax.service.ax_client import AxClient\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "from ax.utils.tutorials.cnn_utils import CNN, evaluate, load_mnist, train\n", + "\n", + "init_notebook_plotting()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "a26e18f8-caa7-411d-809a-61a9229cd6c6" + }, + "source": [ + "## 1. Initialize client\n", + "We specify `enforce_sequential_optimization` as False, because Ray runs many trials in parallel. With the sequential optimization enforcement, `AxClient` would expect the first few trials to be completed with data before generating more trials.\n", + "\n", + "When high parallelism is not required, it is best to enforce sequential optimization, as it allows for achieving optimal results in fewer (but sequential) trials. In cases where parallelism is important, such as with distributed training using Ray, we choose to forego minimizing resource utilization and run more trials in parallel." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "a91e1cb2-999a-4b88-a2d2-85d0acaa8854" + }, + "outputs": [], + "source": [ + "ax = AxClient(enforce_sequential_optimization=False)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "1766919c-fb6f-4271-a8e1-6f972eee78f3" + }, + "source": [ + "## 2. Set up experiment\n", + "Here we set up the search space and specify the objective; refer to the Ax API tutorials for more detail." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "37e367d4-d09d-425b-98f7-c8849d9be4b7" + }, + "outputs": [], + "source": [ + "MINIMIZE = False # Whether we should be minimizing or maximizing the objective" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "777c8d33-2cd1-4425-b45f-2a44922dce7d" + }, + "outputs": [], + "source": [ + "ax.create_experiment(\n", + " name=\"mnist_experiment\",\n", + " parameters=[\n", + " {\"name\": \"lr\", \"type\": \"range\", \"bounds\": [1e-6, 0.4], \"log_scale\": True},\n", + " {\"name\": \"momentum\", \"type\": \"range\", \"bounds\": [0.0, 1.0]},\n", + " ],\n", + " objective_name=\"mean_accuracy\",\n", + " minimize=MINIMIZE,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "589e4d80-02ae-461d-babc-0f96718f623e" + }, + "outputs": [], + "source": [ + "ax.experiment.optimization_config.objective.minimize" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "773a2c32-4ff3-4e92-8996-325504ce953e" + }, + "outputs": [], + "source": [ + "load_mnist(\n", + " data_path=\"~/.data\"\n", + ") # Pre-load the dataset before the initial evaluations are executed." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "5fec848a-3538-489c-bcdd-a74051f48140" + }, + "source": [ + "## 3. Define how to evaluate trials\n", + "Since we use the Ax Service API here, we evaluate the parameterizations that Ax suggests, using RayTune. The evaluation function follows its usual pattern, taking in a parameterization and outputting an objective value. For detail on evaluation functions, see [Trial Evaluation](https://ax.dev/docs/runner.html). " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "75fce84d-35bd-45b5-b55e-f52baf26db03" + }, + "outputs": [], + "source": [ + "def train_evaluate(parameterization):\n", + " device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n", + " train_loader, valid_loader, test_loader = load_mnist(data_path=\"~/.data\")\n", + " net = train(\n", + " net=CNN(),\n", + " train_loader=train_loader,\n", + " parameters=parameterization,\n", + " dtype=torch.float,\n", + " device=device,\n", + " )\n", + " report(\n", + " mean_accuracy=evaluate(\n", + " net=net,\n", + " data_loader=valid_loader,\n", + " dtype=torch.float,\n", + " device=device,\n", + " )\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "dda3574c-5967-43ea-8d23-7a151dc59ec9" + }, + "source": [ + "## 4. Run optimization\n", + "Execute the Ax optimization and trial evaluation in RayTune using [AxSearch algorithm](https://ray.readthedocs.io/en/latest/tune-searchalg.html#ax-search):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "1d768bb2-d46b-4c4c-879e-3242af7555f4" + }, + "outputs": [], + "source": [ + "# Set up AxSearcher in RayTune\n", + "algo = AxSearch(ax_client=ax)\n", + "# Wrap AxSearcher in a concurrently limiter, to ensure that Bayesian optimization receives the\n", + "# data for completed trials before creating more trials\n", + "algo = tune.search.ConcurrencyLimiter(algo, max_concurrent=3)\n", + "tune.run(\n", + " train_evaluate,\n", + " num_samples=30,\n", + " search_alg=algo,\n", + " verbose=0, # Set this level to 1 to see status updates and to 2 to also see trial results.\n", + " # To use GPU, specify: resources_per_trial={\"gpu\": 1}.\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "cb00f812-e9e5-4208-a680-adf6619d74c4" + }, + "source": [ + "## 5. Retrieve the optimization results" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "2ec54675-d0ad-4eac-aaf3-66b593037cce" + }, + "outputs": [], + "source": [ + "best_parameters, values = ax.get_best_parameters()\n", + "best_parameters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "50c764a6-a630-4935-9c07-ea84045e0ecc" + }, + "outputs": [], + "source": [ + "means, covariances = values\n", + "means" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "12a87817-4409-4f07-a912-8d60eff71d68" + }, + "source": [ + "## 6. Plot the response surface and optimization trace" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "3742f35b-6b28-49ae-a606-a138459f4964", + "scrolled": false + }, + "outputs": [], + "source": [ + "render(\n", + " plot_contour(\n", + " model=ax.generation_strategy.model,\n", + " param_x=\"lr\",\n", + " param_y=\"momentum\",\n", + " metric_name=\"mean_accuracy\",\n", + " )\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "6dfd23ca-1c93-4846-8e85-4560f9e40304" + }, + "outputs": [], + "source": [ + "# `plot_single_method` expects a 2-d array of means, because it expects to average means from multiple\n", + "# optimization runs, so we wrap out best objectives array in another array.\n", + "best_objectives = np.array(\n", + " [[trial.objective_mean * 100 for trial in ax.experiment.trials.values()]]\n", + ")\n", + "best_objective_plot = optimization_trace_single_method(\n", + " y=np.maximum.accumulate(best_objectives, axis=1),\n", + " title=\"Model performance vs. # of iterations\",\n", + " ylabel=\"Accuracy\",\n", + ")\n", + "render(best_objective_plot)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/saasbo.ipynb b/tutorials/saasbo.ipynb index fc70eb562a7..875415cde0e 100644 --- a/tutorials/saasbo.ipynb +++ b/tutorials/saasbo.ipynb @@ -1,391 +1,372 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "originalKey": "1f779465-f9cc-4b17-9b5a-5960cf602273" - }, - "source": [ - "# High-Dimensional Bayesian Optimization with SAASBO\n", - "\n", - "This tutorial shows how to use the Sparse Axis-Aligned Subspace Bayesian Optimization (SAASBO) method for high-dimensional Bayesian optimization [1]. SAASBO places strong priors on the inverse lengthscales to avoid overfitting in high-dimensional spaces. Specifically, SAASBO uses a hierarchical sparsity prior consisting of a global shrinkage parameter $\\tau \\sim \\mathcal{HC}(\\beta)$ and inverse lengthscales $\\rho_d \\sim \\mathcal{HC}(\\tau)$ for $d=1, ..., D$, where $\\mathcal{HC}$ is the half-Cauchy distribution. While half-Cauchy priors favor values near zero they also have heavy tails, which allows the inverse lengthscales of the most important parameters to escape zero. To do inference in the SAAS model we use Hamiltonian Monte Carlo (HMC) as we found that to outperform MAP inference.\n", - "\n", - "We find that SAASBO performs well on problems with hundreds of dimensions. As we rely on HMC and in particular the No-U-Turn-Sampler (NUTS) for inference, the overhead of SAASBO scales cubically with the number of datapoints. Depending on the problem, using more than $100$ evaluations may not be feasible as SAASBO is designed for problems with a limited evaluation budget.\n", - "\n", - "[1] D. Eriksson, M. Jankowiak. High-Dimensional Bayesian Optimization with Sparse Axis-Aligned Subspaces. Proceedings of the Thirty-Seventh Conference on Uncertainty in Artificial Intelligence, 2021." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "36a4c036-4075-4b15-87b2-a399c318f7b6" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "from ax import Data, Experiment, ParameterType, RangeParameter, SearchSpace\n", - "from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy\n", - "from ax.modelbridge.registry import Models\n", - "from ax.runners.synthetic import SyntheticRunner" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "SMOKE_TEST = os.environ.get(\"SMOKE_TEST\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "08bf2c1e-5909-4bde-8829-0fb0d0a29a25" - }, - "outputs": [], - "source": [ - "import torch\n", - "\n", - "\n", - "torch.manual_seed(12345) # To always get the same Sobol points\n", - "tkwargs = {\n", - " \"dtype\": torch.double,\n", - " \"device\": torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n", - "}" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "2f9bd4f6-87d6-42d9-b575-f92cf94de7b0" - }, - "source": [ - "## Setup search space and metric\n", - "In this simple experiment we use the Branin function embedded in a 50-dimensional space. Additional resources:\n", - "- To set up a custom metric for your problem, refer to the dedicated section of the Developer API tutorial: https://ax.dev/tutorials/gpei_hartmann_developer.html#8.-Defining-custom-metrics.\n", - "- To avoid needing to setup up custom metrics by Ax Service API: https://ax.dev/tutorials/gpei_hartmann_service.html." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "7697c80d-ab0c-4884-b4c7-c75d24a07e1a" - }, - "outputs": [], - "source": [ - "from ax.core.metric import Metric\n", - "from ax.core.objective import Objective\n", - "from ax.core.optimization_config import OptimizationConfig\n", - "from ax.metrics.branin import BraninMetric\n", - "\n", - "\n", - "search_space = SearchSpace(\n", - " parameters=[\n", - " RangeParameter(\n", - " name=f\"x{i}\", parameter_type=ParameterType.FLOAT, lower=-5.0, upper=10.0\n", - " )\n", - " for i in range(25)\n", - " ]\n", - " + [\n", - " RangeParameter(\n", - " name=f\"x{i + 25}\",\n", - " parameter_type=ParameterType.FLOAT,\n", - " lower=0.0,\n", - " upper=15.0,\n", - " )\n", - " for i in range(25)\n", - " ]\n", - ")\n", - "\n", - "optimization_config = OptimizationConfig(\n", - " objective=Objective(\n", - " metric=BraninMetric(\n", - " name=\"objective\",\n", - " param_names=[\"x19\", \"x44\"],\n", - " noise_sd=0.0, # Set noise_sd=None if you want to learn the noise, otherwise it defaults to 1e-6\n", - " ),\n", - " minimize=True,\n", - " )\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "379571df-a141-48f7-84de-f75bc6e8e760" - }, - "source": [ - "## Run benchmark" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "N_INIT = 10\n", - "BATCH_SIZE = 3\n", - "\n", - "if SMOKE_TEST:\n", - " N_BATCHES = 1\n", - "else:\n", - " N_BATCHES = 10\n", - "\n", - "print(f\"Doing {N_INIT + N_BATCHES * BATCH_SIZE} evaluations\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Experiment\n", - "experiment = Experiment(\n", - " name=\"saasbo_experiment\",\n", - " search_space=search_space,\n", - " optimization_config=optimization_config,\n", - " runner=SyntheticRunner(),\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Initial Sobol points\n", - "sobol = Models.SOBOL(search_space=experiment.search_space)\n", - "for _ in range(N_INIT):\n", - " experiment.new_trial(sobol.gen(1)).run()" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "bdfeea50-c4e6-4ff1-91ae-c8f6c3160d7c" - }, - "outputs": [], - "source": [ - "%%time\n", - "# Run SAASBO\n", - "data = experiment.fetch_data()\n", - "for i in range(N_BATCHES):\n", - " model = Models.FULLYBAYESIAN(\n", - " experiment=experiment,\n", - " data=data,\n", - " num_samples=256, # Increasing this may result in better model fits\n", - " warmup_steps=512, # Increasing this may result in better model fits\n", - " gp_kernel=\"rbf\", # \"rbf\" is the default in the paper, but we also support \"matern\"\n", - " torch_device=tkwargs[\"device\"],\n", - " torch_dtype=tkwargs[\"dtype\"],\n", - " verbose=False, # Set to True to print stats from MCMC\n", - " disable_progbar=True, # Set to False to print a progress bar from MCMC\n", - " )\n", - " generator_run = model.gen(BATCH_SIZE)\n", - " trial = experiment.new_batch_trial(generator_run=generator_run)\n", - " trial.run()\n", - " data = Data.from_multiple_data([data, trial.fetch_data()])\n", - "\n", - " new_value = trial.fetch_data().df[\"mean\"].min()\n", - " print(\n", - " f\"Iteration: {i}, Best in iteration {new_value:.3f}, Best so far: {data.df['mean'].min():.3f}\"\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Plot results\n", - "SAASBO is able to find a solution close to the global optimal value of 0.398" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "5a9b9706-2653-4320-96f3-4bc9fe88bceb" - }, - "outputs": [], - "source": [ - "import matplotlib\n", - "import matplotlib.pyplot as plt\n", - "import numpy as np\n", - "\n", - "%matplotlib inline\n", - "matplotlib.rcParams.update({\"font.size\": 16})\n", - "\n", - "\n", - "fig, ax = plt.subplots(figsize=(8, 6))\n", - "res_saasbo = data.df[\"mean\"]\n", - "ax.plot(np.minimum.accumulate(res_saasbo), color=\"b\", label=\"SAASBO\")\n", - "ax.plot([0, len(res_saasbo)], [0.398, 0.398], \"--\", c=\"g\", lw=3, label=\"Optimal value\")\n", - "ax.grid(True)\n", - "ax.set_title(\"Branin, D=50\", fontsize=20)\n", - "ax.set_xlabel(\"Number of evaluations\", fontsize=20)\n", - "ax.set_xlim([0, len(res_saasbo)])\n", - "ax.set_ylabel(\"Best value found\", fontsize=20)\n", - "ax.set_ylim([0, 8])\n", - "ax.legend(fontsize=18)\n", - "plt.show()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## SAAS model fit" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We fit a SAAS model with the same settings as above" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "model = Models.FULLYBAYESIAN(\n", - " experiment=experiment,\n", - " data=data,\n", - " use_saas=True,\n", - " num_samples=256,\n", - " warmup_steps=512,\n", - " gp_kernel=\"rbf\",\n", - " torch_dtype=tkwargs[\"dtype\"],\n", - " torch_device=tkwargs[\"device\"],\n", - " disable_progbar=False,\n", - " verbose=False,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Cross-validation plot \n", - "We have tools for cross-validation in Ax, but plotly doesn't render on Github so we make a simple plot using Matplotlib here. To use the built-in cross-validation functionality, you can do something like this:\n", - "\n", - "```\n", - "from ax.modelbridge.cross_validation import cross_validate, compute_diagnostics\n", - "from ax.plot.diagnostic import interact_cross_validation\n", - "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", - "\n", - "\n", - "cv = cross_validate(model)\n", - "diagnostics = compute_diagnostics(cv)\n", - "init_notebook_plotting()\n", - "plotconfig = interact_cross_validation(cv)\n", - "render(plotconfig)\n", - "```" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from ax.modelbridge.cross_validation import cross_validate\n", - "\n", - "\n", - "# Cross-validate model\n", - "cv = cross_validate(model)\n", - "y_true = np.stack([cv_.observed.data.means for cv_ in cv]).ravel()\n", - "y_saas_mean = np.stack([cv_.predicted.means for cv_ in cv]).ravel()\n", - "y_saas_std = np.stack(\n", - " [np.sqrt(np.diag(cv_.predicted.covariance)) for cv_ in cv]\n", - ").ravel()\n", - "\n", - "# Cross-validation plot\n", - "fig, ax = plt.subplots(1, 1, figsize=(6, 6))\n", - "min_val, max_val = -5, 120\n", - "ax.plot([min_val, max_val], [min_val, max_val], \"b--\", lw=2)\n", - "markers, caps, bars = ax.errorbar(\n", - " y_true,\n", - " y_saas_mean,\n", - " yerr=1.96 * y_saas_std,\n", - " fmt=\".\",\n", - " capsize=4,\n", - " elinewidth=2.0,\n", - " ms=14,\n", - " c=\"k\",\n", - " ecolor=\"gray\",\n", - ")\n", - "[bar.set_alpha(0.8) for bar in bars]\n", - "[cap.set_alpha(0.8) for cap in caps]\n", - "ax.set_xlim([min_val, max_val])\n", - "ax.set_ylim([min_val, max_val])\n", - "ax.set_xlabel(\"True value\", fontsize=20)\n", - "ax.set_ylabel(\"Predicted value\", fontsize=20)\n", - "ax.grid(True)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Lengthscales\n", - "As SAASBO places strong priors on the inverse lengthscales, we only expect parameters 19 and 44 to be identified as important by the model since the other parameters have no effect. We can confirm that this is the case below as the lengthscales of parameters 19 and 44 are close to 1 with all other lengthscales being larger than 1000. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "median_lengthscales = (\n", - " model.model.model.models[0]\n", - " .covar_module.base_kernel.lengthscale.squeeze()\n", - " .median(axis=0)\n", - " .values\n", - ")\n", - "for i in median_lengthscales.argsort()[:10]:\n", - " print(f\"Parameter {i:2}) Median lengthscale = {median_lengthscales[i]:.2e}\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.8" - } + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "originalKey": "1f779465-f9cc-4b17-9b5a-5960cf602273" + }, + "source": [ + "# High-Dimensional Bayesian Optimization with SAASBO\n", + "\n", + "This tutorial shows how to use the Sparse Axis-Aligned Subspace Bayesian Optimization (SAASBO) method for high-dimensional Bayesian optimization [1]. SAASBO places strong priors on the inverse lengthscales to avoid overfitting in high-dimensional spaces. Specifically, SAASBO uses a hierarchical sparsity prior consisting of a global shrinkage parameter $\\tau \\sim \\mathcal{HC}(\\beta)$ and inverse lengthscales $\\rho_d \\sim \\mathcal{HC}(\\tau)$ for $d=1, ..., D$, where $\\mathcal{HC}$ is the half-Cauchy distribution. While half-Cauchy priors favor values near zero they also have heavy tails, which allows the inverse lengthscales of the most important parameters to escape zero. To do inference in the SAAS model we use Hamiltonian Monte Carlo (HMC) as we found that to outperform MAP inference.\n", + "\n", + "We find that SAASBO performs well on problems with hundreds of dimensions. As we rely on HMC and in particular the No-U-Turn-Sampler (NUTS) for inference, the overhead of SAASBO scales cubically with the number of datapoints. Depending on the problem, using more than $100$ evaluations may not be feasible as SAASBO is designed for problems with a limited evaluation budget.\n", + "\n", + "[1] D. Eriksson, M. Jankowiak. High-Dimensional Bayesian Optimization with Sparse Axis-Aligned Subspaces. Proceedings of the Thirty-Seventh Conference on Uncertainty in Artificial Intelligence, 2021." + ] }, - "nbformat": 4, - "nbformat_minor": 2 + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "36a4c036-4075-4b15-87b2-a399c318f7b6" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "import numpy as np\n", + "import torch\n", + "\n", + "from ax import Data, Experiment, ParameterType, RangeParameter, SearchSpace\n", + "from ax.core.metric import Metric\n", + "from ax.core.objective import Objective\n", + "from ax.core.optimization_config import OptimizationConfig\n", + "from ax.metrics.branin import BraninMetric\n", + "from ax.modelbridge.cross_validation import cross_validate\n", + "from ax.modelbridge.registry import Models\n", + "from ax.models.torch.botorch_modular.surrogate import Surrogate\n", + "from ax.runners.synthetic import SyntheticRunner\n", + "from botorch.models.fully_bayesian import SaasFullyBayesianSingleTaskGP" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "SMOKE_TEST = os.environ.get(\"SMOKE_TEST\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "08bf2c1e-5909-4bde-8829-0fb0d0a29a25" + }, + "outputs": [], + "source": [ + "torch.manual_seed(12345) # To always get the same Sobol points\n", + "tkwargs = {\n", + " \"dtype\": torch.double,\n", + " \"device\": torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "2f9bd4f6-87d6-42d9-b575-f92cf94de7b0" + }, + "source": [ + "## Setup search space and metric\n", + "In this simple experiment we use the Branin function embedded in a 30-dimensional space. Additional resources:\n", + "- To set up a custom metric for your problem, refer to the dedicated section of the Developer API tutorial: https://ax.dev/tutorials/gpei_hartmann_developer.html#8.-Defining-custom-metrics.\n", + "- To avoid needing to setup up custom metrics by Ax Service API: https://ax.dev/tutorials/gpei_hartmann_service.html." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "7697c80d-ab0c-4884-b4c7-c75d24a07e1a" + }, + "outputs": [], + "source": [ + "search_space = SearchSpace(\n", + " parameters=[\n", + " RangeParameter(\n", + " name=f\"x{i}\", parameter_type=ParameterType.FLOAT, lower=-5.0, upper=10.0\n", + " )\n", + " for i in range(25)\n", + " ]\n", + " + [\n", + " RangeParameter(\n", + " name=f\"x{i + 25}\",\n", + " parameter_type=ParameterType.FLOAT,\n", + " lower=0.0,\n", + " upper=15.0,\n", + " )\n", + " for i in range(25)\n", + " ]\n", + ")\n", + "\n", + "optimization_config = OptimizationConfig(\n", + " objective=Objective(\n", + " metric=BraninMetric(\n", + " name=\"objective\",\n", + " param_names=[\"x19\", \"x34\"],\n", + " # Set noise_sd=None if you want to learn the noise, set to 0.0 for no noise\n", + " noise_sd=1e-4, \n", + " ),\n", + " minimize=True,\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "379571df-a141-48f7-84de-f75bc6e8e760" + }, + "source": [ + "## Run benchmark" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "N_INIT = 10\n", + "BATCH_SIZE = 3\n", + "N_BATCHES = 1 if SMOKE_TEST else 10\n", + "\n", + "print(f\"Doing {N_INIT + N_BATCHES * BATCH_SIZE} evaluations\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Experiment\n", + "experiment = Experiment(\n", + " name=\"saasbo_experiment\",\n", + " search_space=search_space,\n", + " optimization_config=optimization_config,\n", + " runner=SyntheticRunner(),\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Initial Sobol points\n", + "sobol = Models.SOBOL(search_space=experiment.search_space)\n", + "for _ in range(N_INIT):\n", + " experiment.new_trial(sobol.gen(1)).run()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "bdfeea50-c4e6-4ff1-91ae-c8f6c3160d7c" + }, + "outputs": [], + "source": [ + "%%time\n", + "# Run SAASBO\n", + "data = experiment.fetch_data()\n", + "for i in range(N_BATCHES):\n", + " model = Models.SAASBO(experiment=experiment, data=data)\n", + " generator_run = model.gen(BATCH_SIZE)\n", + " trial = experiment.new_batch_trial(generator_run=generator_run)\n", + " trial.run()\n", + " data = Data.from_multiple_data([data, trial.fetch_data()])\n", + "\n", + " new_value = trial.fetch_data().df[\"mean\"].min()\n", + " print(\n", + " f\"Iteration: {i}, Best in iteration {new_value:.3f}, Best so far: {data.df['mean'].min():.3f}\"\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Plot results\n", + "SAASBO is able to find a solution close to the global optimal value of 0.398" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "5a9b9706-2653-4320-96f3-4bc9fe88bceb" + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "matplotlib.rcParams.update({\"font.size\": 16})\n", + "\n", + "\n", + "fig, ax = plt.subplots(figsize=(8, 6))\n", + "res_saasbo = data.df[\"mean\"]\n", + "ax.plot(np.minimum.accumulate(res_saasbo), color=\"b\", label=\"SAASBO\")\n", + "ax.plot([0, len(res_saasbo)], [0.398, 0.398], \"--\", c=\"g\", lw=3, label=\"Optimal value\")\n", + "ax.grid(True)\n", + "ax.set_title(\"Branin, D=50\", fontsize=20)\n", + "ax.set_xlabel(\"Number of evaluations\", fontsize=20)\n", + "ax.set_xlim([0, len(res_saasbo)])\n", + "ax.set_ylabel(\"Best value found\", fontsize=20)\n", + "ax.set_ylim([0, 8])\n", + "ax.legend(fontsize=18)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## SAAS model fit" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also instantiate a SAAS model via `Models.BOTORCH_MODULAR` by specifying a `SaasFullyBayesianSingleTaskGP` as the `botorch_model_class`. This also gives us the option to change several Pyro-specific parameters such as `num_samples` and `warmup_steps`." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "model = Models.BOTORCH_MODULAR(\n", + " experiment=experiment,\n", + " data=data,\n", + " surrogate=Surrogate(\n", + " botorch_model_class=SaasFullyBayesianSingleTaskGP,\n", + " mll_options={\n", + " \"num_samples\": 256, # Increasing this may result in better model fits\n", + " \"warmup_steps\": 512, # Increasing this may result in better model fits\n", + " },\n", + " )\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Cross-validation plot \n", + "We have tools for cross-validation in Ax, but plotly doesn't render on Github so we make a simple plot using Matplotlib here. To use the built-in cross-validation functionality, you can do something like this:\n", + "\n", + "```\n", + "from ax.modelbridge.cross_validation import cross_validate, compute_diagnostics\n", + "from ax.plot.diagnostic import interact_cross_validation\n", + "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", + "\n", + "\n", + "cv = cross_validate(model)\n", + "diagnostics = compute_diagnostics(cv)\n", + "init_notebook_plotting()\n", + "plotconfig = interact_cross_validation(cv)\n", + "render(plotconfig)\n", + "```" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Cross-validate model\n", + "cv = cross_validate(model)\n", + "y_true = np.stack([cv_.observed.data.means for cv_ in cv]).ravel()\n", + "y_saas_mean = np.stack([cv_.predicted.means for cv_ in cv]).ravel()\n", + "y_saas_std = np.stack(\n", + " [np.sqrt(np.diag(cv_.predicted.covariance)) for cv_ in cv]\n", + ").ravel()\n", + "\n", + "# Cross-validation plot\n", + "fig, ax = plt.subplots(1, 1, figsize=(6, 6))\n", + "min_val, max_val = -5, 120\n", + "ax.plot([min_val, max_val], [min_val, max_val], \"b--\", lw=2)\n", + "markers, caps, bars = ax.errorbar(\n", + " y_true,\n", + " y_saas_mean,\n", + " yerr=1.96 * y_saas_std,\n", + " fmt=\".\",\n", + " capsize=4,\n", + " elinewidth=2.0,\n", + " ms=14,\n", + " c=\"k\",\n", + " ecolor=\"gray\",\n", + ")\n", + "[bar.set_alpha(0.8) for bar in bars]\n", + "[cap.set_alpha(0.8) for cap in caps]\n", + "ax.set_xlim([min_val, max_val])\n", + "ax.set_ylim([min_val, max_val])\n", + "ax.set_xlabel(\"True value\", fontsize=20)\n", + "ax.set_ylabel(\"Predicted value\", fontsize=20)\n", + "ax.grid(True)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Lengthscales\n", + "As SAASBO places strong priors on the inverse lengthscales, we only expect parameters 19 and 44 to be identified as important by the model since the other parameters have no effect. We can confirm that this is the case below as the lengthscales of parameters 19 and 44 are close to 1 with all other lengthscales being larger than 1000. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "median_lengthscales = (\n", + " model.model.surrogate.model\n", + " .covar_module.base_kernel.lengthscale.squeeze()\n", + " .median(axis=0)\n", + " .values\n", + ")\n", + "for i in median_lengthscales.argsort()[:10]:\n", + " print(f\"Parameter {i:2}) Median lengthscale = {median_lengthscales[i]:.2e}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/saasbo_nehvi.ipynb b/tutorials/saasbo_nehvi.ipynb index 7400d8236d8..d49edb5f7b3 100644 --- a/tutorials/saasbo_nehvi.ipynb +++ b/tutorials/saasbo_nehvi.ipynb @@ -1,727 +1,694 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "f2c99ee2-a85b-4cad-a5ff-1e2976bbc306", - "showInput": false - }, - "source": [ - "# Fully Bayesian Multi-Objective Optimization using qNEHVI + SAASBO\n", - "\n", - "### This Tutorial\n", - "\n", - "This tutorial will show how to use qNEHVI with fully bayesian inference for multi-objective \n", - "optimization.\n", - "\n", - "Multi-objective optimization (MOO) covers the case where we care about multiple\n", - "outcomes in our experiment but we do not know before hand a specific weighting of those\n", - "objectives (covered by `ScalarizedObjective`) or a specific constraint on one objective \n", - "(covered by `OutcomeConstraint`s) that will produce the best result.\n", - "\n", - "The solution in this case is to find a whole Pareto frontier, a surface in outcome-space\n", - "containing points that can't be improved on in every outcome. This shows us the\n", - "tradeoffs between objectives that we can choose to make." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "0aaae64b-d420-45d5-9597-52c09429d562", - "showInput": true - }, - "source": [ - "### Problem Statement\n", - "\n", - "Optimize a list of M objective functions $ \\bigl(f^{(1)}( x),..., f^{(M)}( x) \\bigr)$ over a bounded search space $\\mathcal X \\subset \\mathbb R^d$.\n", - "\n", - "We assume $f^{(i)}$ are expensive-to-evaluate black-box functions with no known analytical expression, and no observed gradients. For instance, a machine learning model where we're interested in maximizing accuracy and minimizing inference time, with $\\mathcal X$ the set of possible configuration spaces" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "470d5165-7f9d-4fbc-99fd-39d1015c7be0", - "showInput": false - }, - "source": [ - "### Fully Bayesian Inference\n", - "\n", - "Previous work, has shown that using a fully Bayesian treatment of GP model hyperparameters $\\boldsymbol \\theta$ can lead to improved closed loop Bayesian optimization performance [1]. Snoek et al [1] propose to use an integrated acquisition function $\\alpha_{MCMC}$ where the base acquisition function $\\alpha(\\mathbf{x} | \\boldsymbol \\theta, \\mathcal D)$ is integrated over the the posterior distribution over the hyperparameters $p({\\boldsymbol{\\theta}} | \\mathcal{D})$, where $ \\mathcal{D} = \\{{\\mathbf{x}}_i, y_i\\}_{i=1}^n$:\n", - "\n", - "$\\alpha_{MCMC}(\\mathbf{x}, \\mathcal D) = \\int \\alpha(\\mathbf{x} | \\boldsymbol \\theta, \\mathcal D) p(\\boldsymbol \\theta | \\mathcal D) d\\boldsymbol \\theta$\n", - "\n", - "\n", - "Since $p({\\boldsymbol{\\theta}} | \\mathcal{D})$ typically cannot be expressed in closed-form, Markov Chain Monte-Carlo (MCMC) methods are used to draw samples from $p({\\boldsymbol{\\theta}} | \\mathcal{D})$. In this tutorial we use the NUTS sampler from the pyro package for automatic, robust fully Bayesian inference.\n", - "\n", - "[1] J. Snoek, H. Larochelle, R. P. Adams, Practical Bayesian Optimization of Machine Learning Algorithms. Advances in Neural Information Processing Systems 26, 2012." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### SAAS Priors (SAASBO)\n", - "\n", - "Recently Eriksson et al [2] propose using sparse axis-aligned subspace priors for Bayesian optimization over high-dimensional search spaces. Specifically, the authors propose using a hierarchical sparsity prior consisting of a global shrinkage parameter with a Half-Cauchy prior $\\tau \\sim \\mathcal{HC}(\\beta)$, and ARD lengthscales $\\rho_d \\sim \\mathcal{HC}(\\tau)$ for $d=1, ..., D$. See [2] for details. \n", - "\n", - "[2] D. Eriksson, M. Jankowiak. High-Dimensional Bayesian Optimization with Sparse Axis-Aligned Subspaces. Proceedings of the Thirty-Seventh Conference on Uncertainty in Artificial Intelligence, 2021." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "213ff269-6109-408a-89b3-e92393e3c31f", - "showInput": false - }, - "source": [ - "### qNEHVI \n", - "\n", - "In this tutorial, we use qNEHVI [3] as our acquisition function for multi-objective optimization. We integrate qNEHVI over the posterior distribution of the GP hyperparameters as proposed in [4].\n", - "\n", - "[3] S. Daulton, M. Balandat, E. Bakshy. Parallel Bayesian Optimization of Multiple Noisy Objectives with Expected Hypervolume Improvement. Arxiv, 2021.\n", - "\n", - "[4] D. Eriksson, P. Chuang, S. Daulton, P. Xia, A. Shrivastava, A. Babu, S. Zhao, A. Aly, G. Venkatesh, M. Balandat. Latency-Aware Neural Architecture Search with Multi-Objective Bayesian Optimization. ICML AutoML Workshop, 2021." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "47e79bce-564d-40a6-84a6-0003ebdda93d" - }, - "source": [ - "### Further Information\n", - "\n", - "For a deeper explanation of multi-objective optimization, please refer to the dedicated multi-objective optimization tutorial: https://ax.dev/tutorials/multiobjective_optimization.html." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "dabdd6f6-34b3-4103-b599-bc909fe9faab" - }, - "source": [ - "## Setup\n", - "\n", - "In this tutorial, we use Ax Developer API. Additional resources:\n", - "- To learn more about the developer API, refer to the dedicated tutorial: https://ax.dev/tutorials/gpei_hartmann_developer.html. \n", - "- To set up a `GenerationStrategy` with multi-objective SAASBO (and use it in Ax Service API), follow the generation strategy tutorial: https://ax.dev/tutorials/generation_strategy.html and use `Models.FULLYBAYESIANMOO` for the Bayesian optimization generation step.\n", - "- To learn about multi-objective optimization in Ax Service API: https://ax.dev/tutorials/multiobjective_optimization.html#Using-the-Service-API." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "03b8cd70-54f4-4d4d-8445-60439ba00e27" - }, - "outputs": [], - "source": [ - "import os\n", - "\n", - "import pandas as pd\n", - "from ax import *\n", - "\n", - "import torch\n", - "import numpy as np\n", - "\n", - "from ax.metrics.noisy_function import GenericNoisyFunctionMetric\n", - "from ax.service.utils.report_utils import exp_to_df\n", - "from ax.runners.synthetic import SyntheticRunner\n", - "\n", - "# Plotting imports and initialization\n", - "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", - "from ax.plot.contour import plot_contour\n", - "from ax.plot.pareto_utils import compute_posterior_pareto_frontier\n", - "from ax.plot.pareto_frontier import plot_pareto_frontier\n", - "\n", - "init_notebook_plotting()\n", - "\n", - "# Model registry for creating multi-objective optimization models.\n", - "from ax.modelbridge.registry import Models\n", - "\n", - "# Analysis utilities, including a method to evaluate hypervolumes\n", - "from ax.modelbridge.modelbridge_utils import observed_hypervolume" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "SMOKE_TEST = os.environ.get(\"SMOKE_TEST\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "122d77fa-21b8-4b01-9522-eae5990aba86" - }, - "source": [ - "### Load our sample 2-objective problem" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "744782ab-028f-4bbf-ba0a-eec8520c2fcf" - }, - "outputs": [], - "source": [ - "from botorch.test_functions.multi_objective import DTLZ2\n", - "\n", - "d = 10\n", - "tkwargs = {\n", - " \"dtype\": torch.double,\n", - " \"device\": torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n", - "}\n", - "problem = DTLZ2(num_objectives=2, dim=d, negate=True).to(**tkwargs)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "02a84443-ed1c-4e63-b2f8-9f1a77d530ec" - }, - "source": [ - "## Define experiment configurations" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "5dd66dc9-86a3-44a0-8109-418de66edfdb" - }, - "source": [ - "### Search Space" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "6060bdaf-be41-4d1d-9407-463a1e0c17f3" - }, - "outputs": [], - "source": [ - "search_space = SearchSpace(\n", - " parameters=[\n", - " RangeParameter(\n", - " name=f\"x{i}\", lower=0, upper=1, parameter_type=ParameterType.FLOAT\n", - " )\n", - " for i in range(d)\n", - " ],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "4d5ffaaa-6aca-4502-9aac-047806c4a550", - "showInput": false - }, - "source": [ - "### MultiObjectiveOptimizationConfig\n", - "\n", - "To optimize multiple objective we must create a `MultiObjective` containing the metrics we'll optimize and `MultiObjectiveOptimizationConfig` (which contains `ObjectiveThreshold`s) instead of our more typical `Objective` and `OptimizationConfig`. Additional resources:\n", - "- To set up a custom metric for your problem, refer to the dedicated section of the Developer API tutorial: https://ax.dev/tutorials/gpei_hartmann_developer.html#8.-Defining-custom-metrics.\n", - "- To avoid needing to setup up custom metrics by using multi-objective optimization in Ax Service API: https://ax.dev/tutorials/multiobjective_optimization.html#Using-the-Service-API.\n", - "\n", - "We define `GenericNoisyFunctionMetric`s to wrap our synthetic Branin-Currin problem's outputs." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "param_names = [f\"x{i}\" for i in range(d)]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "fbf29141-2d4b-4dc9-aca7-e13e93369c36" - }, - "outputs": [], - "source": [ - "def f1(x) -> float:\n", - " x_sorted = [x[p_name] for p_name in param_names]\n", - " return float(problem(torch.tensor(x_sorted, **tkwargs).clamp(0.0, 1.0))[0])\n", - "\n", - "\n", - "def f2(x) -> float:\n", - " x_sorted = [x[p_name] for p_name in param_names]\n", - " return float(problem(torch.tensor(x_sorted, **tkwargs).clamp(0.0, 1.0))[1])\n", - "\n", - "\n", - "metric_a = GenericNoisyFunctionMetric(\"a\", f=f1, noise_sd=0.0, lower_is_better=False)\n", - "metric_b = GenericNoisyFunctionMetric(\"b\", f=f2, noise_sd=0.0, lower_is_better=False)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "a248dc3d-d053-439c-a4ff-c226105a0bfb" - }, - "outputs": [], - "source": [ - "mo = MultiObjective(\n", - " objectives=[Objective(metric=metric_a), Objective(metric=metric_b)],\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "cefa9d16-a23a-4222-82fb-e33ce89ddb58" - }, - "outputs": [], - "source": [ - "objective_thresholds = [\n", - " ObjectiveThreshold(metric=metric, bound=val, relative=False)\n", - " for metric, val in zip(mo.metrics, problem.ref_point)\n", - "]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "2512e114-8693-4ea1-8938-db0899a4f929" - }, - "outputs": [], - "source": [ - "optimization_config = MultiObjectiveOptimizationConfig(\n", - " objective=mo,\n", - " objective_thresholds=objective_thresholds,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "b689c7a9-28f8-47ae-a5da-c3a93674e72d", - "showInput": false - }, - "source": [ - "## Define experiment creation utilities\n", - "\n", - "These construct our experiment, then initialize with Sobol points before we fit a Gaussian Process model to those initial points." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "originalKey": "fb09ef7d-e744-472b-9290-ec24eb40d3fe" - }, - "outputs": [], - "source": [ - "N_INIT = 2 * (d + 1)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "b9b934cb-3afe-4a39-812b-c4d3bca194b6" - }, - "outputs": [], - "source": [ - "def build_experiment():\n", - " experiment = Experiment(\n", - " name=\"pareto_experiment\",\n", - " search_space=search_space,\n", - " optimization_config=optimization_config,\n", - " runner=SyntheticRunner(),\n", - " )\n", - " return experiment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "cf05b5ca-ee87-45be-a028-51952fb4a2ee" - }, - "outputs": [], - "source": [ - "## Initialize with Sobol samples\n", - "\n", - "\n", - "def initialize_experiment(experiment):\n", - " sobol = Models.SOBOL(search_space=experiment.search_space)\n", - "\n", - " experiment.new_batch_trial(sobol.gen(N_INIT)).run()\n", - "\n", - " return experiment.fetch_data()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "96a350f9-5fa1-45a9-aac2-42d942e939f6" - }, - "source": [ - "## qNEHVI + SAASBO\n", - "Noisy expected hypervolume improvement + fully Bayesian inference with SAAS priors." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "02a0d667-9e8e-43b9-b2ef-09ff2b2d85ba" - }, - "outputs": [], - "source": [ - "experiment = build_experiment()\n", - "data = initialize_experiment(experiment)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "BATCH_SIZE = 4\n", - "\n", - "if SMOKE_TEST:\n", - " N_BATCH = 1\n", - " num_samples = 128\n", - " warmup_steps = 256\n", - "else:\n", - " N_BATCH = 10\n", - " BATCH_SIZE = 4\n", - " num_samples = 256\n", - " warmup_steps = 512" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from ax.core.metric import Metric\n", - "from botorch.utils.multi_objective.box_decompositions.dominated import (\n", - " DominatedPartitioning,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "8ec2a5a3-bb79-435d-834c-55510ec52b15" - }, - "outputs": [], - "source": [ - "hv_list = []\n", - "model = None\n", - "for i in range(N_BATCH):\n", - " model = Models.FULLYBAYESIANMOO(\n", - " experiment=experiment,\n", - " data=data,\n", - " # use fewer num_samples and warmup_steps to speed up this tutorial\n", - " num_samples=num_samples,\n", - " warmup_steps=warmup_steps,\n", - " torch_device=tkwargs[\"device\"],\n", - " verbose=False, # Set to True to print stats from MCMC\n", - " disable_progbar=True, # Set to False to print a progress bar from MCMC\n", - " )\n", - " generator_run = model.gen(BATCH_SIZE)\n", - " trial = experiment.new_batch_trial(generator_run=generator_run)\n", - " trial.run()\n", - " data = Data.from_multiple_data([data, trial.fetch_data()])\n", - "\n", - " exp_df = exp_to_df(experiment)\n", - " outcomes = torch.tensor(exp_df[[\"a\", \"b\"]].values, **tkwargs)\n", - " partitioning = DominatedPartitioning(ref_point=problem.ref_point, Y=outcomes)\n", - " try:\n", - " hv = partitioning.compute_hypervolume().item()\n", - " except:\n", - " hv = 0\n", - " print(\"Failed to compute hv\")\n", - " hv_list.append(hv)\n", - " print(f\"Iteration: {i}, HV: {hv}\")\n", - "\n", - "df = exp_to_df(experiment).sort_values(by=[\"trial_index\"])\n", - "outcomes = df[[\"a\", \"b\"]].values" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "bafe189b-88cb-4a9e-aeff-2d2945d497da" - }, - "source": [ - "## Plot empirical data" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "5cc39663-a778-4600-bf39-57e63a7c2f39", - "showInput": false - }, - "source": [ - "#### Plot observed hypervolume, with color representing the iteration that a point was generated on." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "94ba246d-6adb-42bc-8f24-c10266b165d8" - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from matplotlib import pyplot as plt\n", - "\n", - "%matplotlib inline\n", - "\n", - "from matplotlib.cm import ScalarMappable\n", - "\n", - "fig, axes = plt.subplots(1, 1, figsize=(8, 6))\n", - "algos = [\"qNEHVI\"]\n", - "train_obj = outcomes\n", - "cm = plt.cm.get_cmap(\"viridis\")\n", - "\n", - "n_results = N_BATCH * BATCH_SIZE + N_INIT\n", - "\n", - "batch_number = df.trial_index.values\n", - "sc = axes.scatter(train_obj[:, 0], train_obj[:, 1], c=batch_number, alpha=0.8)\n", - "axes.set_title(algos[0])\n", - "axes.set_xlabel(\"Objective 1\")\n", - "axes.set_ylabel(\"Objective 2\")\n", - "norm = plt.Normalize(batch_number.min(), batch_number.max())\n", - "sm = ScalarMappable(norm=norm, cmap=cm)\n", - "sm.set_array([])\n", - "fig.subplots_adjust(right=0.9)\n", - "cbar_ax = fig.add_axes([0.93, 0.15, 0.01, 0.7])\n", - "cbar = fig.colorbar(sm, cax=cbar_ax)\n", - "cbar.ax.set_title(\"Iteration\")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "87e98991-aa2d-497b-925c-ee4cc82cf2f9" - }, - "source": [ - "# Hypervolume statistics\n", - "The hypervolume of the space dominated by points that dominate the reference point." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "2401a7cb-e825-489a-994f-c252050310f3" - }, - "source": [ - "#### Plot the results\n", - "The plot below shows a common metric of multi-objective optimization performance when the true Pareto frontier is known: the log difference between the hypervolume of the true Pareto front and the hypervolume of the approximate Pareto front identified by qNEHVI." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "05bf3b39-9cce-4a58-bc22-ed6a59a8c531" - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from matplotlib import pyplot as plt\n", - "\n", - "%matplotlib inline\n", - "\n", - "iters = np.arange(1, N_BATCH + 1)\n", - "log_hv_difference = np.log10(problem.max_hv - np.asarray(hv_list))[: N_BATCH + 1]\n", - "\n", - "fig, ax = plt.subplots(1, 1, figsize=(8, 6))\n", - "ax.plot(iters, log_hv_difference, label=\"qNEHVI+SAASBO\", linewidth=1.5)\n", - "ax.set(xlabel=\"Batch Iterations\", ylabel=\"Log Hypervolume Difference\")\n", - "ax.legend(loc=\"lower right\")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Inspect Model fits\n", - "\n", - "Here, we examine the GP model fits using the fully bayesian inference with SAAS priors. We plot the leave-one-out cross-validation below. Note: model hyperparameters are not re-sampled on each fold to reduce the runtime." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from ax.modelbridge.cross_validation import cross_validate\n", - "from ax.plot.diagnostic import tile_cross_validation" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "cv = cross_validate(model)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "render(tile_cross_validation(cv))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "from ax.modelbridge.cross_validation import compute_diagnostics" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# compute out-of-sample log likelihood\n", - "compute_diagnostics(cv)[\"Log likelihood\"]" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Finally, we examine the GP model fits using MAP estimation for comparison. The fully bayesian model has a higher log-likelihood than the MAP model. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "map_model = Models.GPEI(experiment=experiment, data=data)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "map_cv = cross_validate(map_model)\n", - "render(tile_cross_validation(map_cv))" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# compute out-of-sample log likelihood\n", - "compute_diagnostics(map_cv)[\"Log likelihood\"]" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.10.8" - } - }, - "nbformat": 4, - "nbformat_minor": 2 + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "f2c99ee2-a85b-4cad-a5ff-1e2976bbc306", + "showInput": false + }, + "source": [ + "# Fully Bayesian Multi-Objective Optimization using qNEHVI + SAASBO\n", + "\n", + "### This Tutorial\n", + "\n", + "This tutorial will show how to use qNEHVI with fully bayesian inference for multi-objective \n", + "optimization.\n", + "\n", + "Multi-objective optimization (MOO) covers the case where we care about multiple\n", + "outcomes in our experiment but we do not know before hand a specific weighting of those\n", + "objectives (covered by `ScalarizedObjective`) or a specific constraint on one objective \n", + "(covered by `OutcomeConstraint`s) that will produce the best result.\n", + "\n", + "The solution in this case is to find a whole Pareto frontier, a surface in outcome-space\n", + "containing points that can't be improved on in every outcome. This shows us the\n", + "tradeoffs between objectives that we can choose to make." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "0aaae64b-d420-45d5-9597-52c09429d562", + "showInput": true + }, + "source": [ + "### Problem Statement\n", + "\n", + "Optimize a list of M objective functions $ \\bigl(f^{(1)}( x),..., f^{(M)}( x) \\bigr)$ over a bounded search space $\\mathcal X \\subset \\mathbb R^d$.\n", + "\n", + "We assume $f^{(i)}$ are expensive-to-evaluate black-box functions with no known analytical expression, and no observed gradients. For instance, a machine learning model where we're interested in maximizing accuracy and minimizing inference time, with $\\mathcal X$ the set of possible configuration spaces" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "470d5165-7f9d-4fbc-99fd-39d1015c7be0", + "showInput": false + }, + "source": [ + "### Fully Bayesian Inference\n", + "\n", + "Previous work, has shown that using a fully Bayesian treatment of GP model hyperparameters $\\boldsymbol \\theta$ can lead to improved closed loop Bayesian optimization performance [1]. Snoek et al [1] propose to use an integrated acquisition function $\\alpha_{MCMC}$ where the base acquisition function $\\alpha(\\mathbf{x} | \\boldsymbol \\theta, \\mathcal D)$ is integrated over the the posterior distribution over the hyperparameters $p({\\boldsymbol{\\theta}} | \\mathcal{D})$, where $ \\mathcal{D} = \\{{\\mathbf{x}}_i, y_i\\}_{i=1}^n$:\n", + "\n", + "$\\alpha_{MCMC}(\\mathbf{x}, \\mathcal D) = \\int \\alpha(\\mathbf{x} | \\boldsymbol \\theta, \\mathcal D) p(\\boldsymbol \\theta | \\mathcal D) d\\boldsymbol \\theta$\n", + "\n", + "\n", + "Since $p({\\boldsymbol{\\theta}} | \\mathcal{D})$ typically cannot be expressed in closed-form, Markov Chain Monte-Carlo (MCMC) methods are used to draw samples from $p({\\boldsymbol{\\theta}} | \\mathcal{D})$. In this tutorial we use the NUTS sampler from the pyro package for automatic, robust fully Bayesian inference.\n", + "\n", + "[1] J. Snoek, H. Larochelle, R. P. Adams, Practical Bayesian Optimization of Machine Learning Algorithms. Advances in Neural Information Processing Systems 26, 2012." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### SAAS Priors (SAASBO)\n", + "\n", + "Recently Eriksson et al [2] propose using sparse axis-aligned subspace priors for Bayesian optimization over high-dimensional search spaces. Specifically, the authors propose using a hierarchical sparsity prior consisting of a global shrinkage parameter with a Half-Cauchy prior $\\tau \\sim \\mathcal{HC}(\\beta)$, and ARD lengthscales $\\rho_d \\sim \\mathcal{HC}(\\tau)$ for $d=1, ..., D$. See [2] for details. \n", + "\n", + "[2] D. Eriksson, M. Jankowiak. High-Dimensional Bayesian Optimization with Sparse Axis-Aligned Subspaces. Proceedings of the Thirty-Seventh Conference on Uncertainty in Artificial Intelligence, 2021." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "213ff269-6109-408a-89b3-e92393e3c31f", + "showInput": false + }, + "source": [ + "### qNEHVI \n", + "\n", + "In this tutorial, we use qNEHVI [3] as our acquisition function for multi-objective optimization. We integrate qNEHVI over the posterior distribution of the GP hyperparameters as proposed in [4].\n", + "\n", + "[3] S. Daulton, M. Balandat, E. Bakshy. Parallel Bayesian Optimization of Multiple Noisy Objectives with Expected Hypervolume Improvement. Arxiv, 2021.\n", + "\n", + "[4] D. Eriksson, P. Chuang, S. Daulton, P. Xia, A. Shrivastava, A. Babu, S. Zhao, A. Aly, G. Venkatesh, M. Balandat. Latency-Aware Neural Architecture Search with Multi-Objective Bayesian Optimization. ICML AutoML Workshop, 2021." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "47e79bce-564d-40a6-84a6-0003ebdda93d" + }, + "source": [ + "### Further Information\n", + "\n", + "For a deeper explanation of multi-objective optimization, please refer to the dedicated multi-objective optimization tutorial: https://ax.dev/tutorials/multiobjective_optimization.html." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "dabdd6f6-34b3-4103-b599-bc909fe9faab" + }, + "source": [ + "## Setup\n", + "\n", + "In this tutorial, we use Ax Developer API. Additional resources:\n", + "- To learn more about the developer API, refer to the dedicated tutorial: https://ax.dev/tutorials/gpei_hartmann_developer.html. \n", + "- To set up a `GenerationStrategy` with multi-objective SAASBO (and use it in Ax Service API), follow the generation strategy tutorial: https://ax.dev/tutorials/generation_strategy.html and use `Models.SAASBO` for the Bayesian optimization generation step.\n", + "- To learn about multi-objective optimization in Ax Service API: https://ax.dev/tutorials/multiobjective_optimization.html#Using-the-Service-API." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "03b8cd70-54f4-4d4d-8445-60439ba00e27" + }, + "outputs": [], + "source": [ + "import os\n", + "\n", + "import matplotlib\n", + "\n", + "import numpy as np\n", + "\n", + "import pandas as pd\n", + "import torch\n", + "from ax.core.data import Data\n", + "from ax.core.experiment import Experiment\n", + "from ax.core.metric import Metric\n", + "from ax.core.objective import MultiObjective, Objective\n", + "from ax.core.optimization_config import (\n", + " MultiObjectiveOptimizationConfig,\n", + " ObjectiveThreshold,\n", + ")\n", + "from ax.core.parameter import ParameterType, RangeParameter\n", + "from ax.core.search_space import SearchSpace\n", + "from ax.metrics.noisy_function import GenericNoisyFunctionMetric\n", + "from ax.modelbridge.cross_validation import compute_diagnostics, cross_validate\n", + "\n", + "# Analysis utilities, including a method to evaluate hypervolumes\n", + "from ax.modelbridge.modelbridge_utils import observed_hypervolume\n", + "\n", + "# Model registry for creating multi-objective optimization models.\n", + "from ax.modelbridge.registry import Models\n", + "from ax.models.torch.botorch_modular.surrogate import Surrogate\n", + "from ax.plot.contour import plot_contour\n", + "from ax.plot.diagnostic import tile_cross_validation\n", + "from ax.plot.pareto_frontier import plot_pareto_frontier\n", + "from ax.plot.pareto_utils import compute_posterior_pareto_frontier\n", + "from ax.runners.synthetic import SyntheticRunner\n", + "from ax.service.utils.report_utils import exp_to_df\n", + "\n", + "# Plotting imports and initialization\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "from botorch.models.fully_bayesian import SaasFullyBayesianSingleTaskGP\n", + "from botorch.test_functions.multi_objective import DTLZ2\n", + "from botorch.utils.multi_objective.box_decompositions.dominated import (\n", + " DominatedPartitioning,\n", + ")\n", + "from matplotlib import pyplot as plt\n", + "from matplotlib.cm import ScalarMappable" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "init_notebook_plotting()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "SMOKE_TEST = os.environ.get(\"SMOKE_TEST\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "122d77fa-21b8-4b01-9522-eae5990aba86" + }, + "source": [ + "### Load our sample 2-objective problem" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "744782ab-028f-4bbf-ba0a-eec8520c2fcf" + }, + "outputs": [], + "source": [ + "d = 10\n", + "tkwargs = {\n", + " \"dtype\": torch.double,\n", + " \"device\": torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n", + "}\n", + "problem = DTLZ2(num_objectives=2, dim=d, negate=True).to(**tkwargs)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "02a84443-ed1c-4e63-b2f8-9f1a77d530ec" + }, + "source": [ + "## Define experiment configurations" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "5dd66dc9-86a3-44a0-8109-418de66edfdb" + }, + "source": [ + "### Search Space" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "6060bdaf-be41-4d1d-9407-463a1e0c17f3" + }, + "outputs": [], + "source": [ + "search_space = SearchSpace(\n", + " parameters=[\n", + " RangeParameter(\n", + " name=f\"x{i}\", lower=0, upper=1, parameter_type=ParameterType.FLOAT\n", + " )\n", + " for i in range(d)\n", + " ],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "4d5ffaaa-6aca-4502-9aac-047806c4a550", + "showInput": false + }, + "source": [ + "### MultiObjectiveOptimizationConfig\n", + "\n", + "To optimize multiple objective we must create a `MultiObjective` containing the metrics we'll optimize and `MultiObjectiveOptimizationConfig` (which contains `ObjectiveThreshold`s) instead of our more typical `Objective` and `OptimizationConfig`. Additional resources:\n", + "- To set up a custom metric for your problem, refer to the dedicated section of the Developer API tutorial: https://ax.dev/tutorials/gpei_hartmann_developer.html#8.-Defining-custom-metrics.\n", + "- To avoid needing to setup up custom metrics by using multi-objective optimization in Ax Service API: https://ax.dev/tutorials/multiobjective_optimization.html#Using-the-Service-API.\n", + "\n", + "We define `GenericNoisyFunctionMetric`s to wrap our synthetic Branin-Currin problem's outputs." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "param_names = [f\"x{i}\" for i in range(d)]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "fbf29141-2d4b-4dc9-aca7-e13e93369c36" + }, + "outputs": [], + "source": [ + "def f1(x) -> float:\n", + " x_sorted = [x[p_name] for p_name in param_names]\n", + " return float(problem(torch.tensor(x_sorted, **tkwargs).clamp(0.0, 1.0))[0])\n", + "\n", + "\n", + "def f2(x) -> float:\n", + " x_sorted = [x[p_name] for p_name in param_names]\n", + " return float(problem(torch.tensor(x_sorted, **tkwargs).clamp(0.0, 1.0))[1])\n", + "\n", + "\n", + "metric_a = GenericNoisyFunctionMetric(\"a\", f=f1, noise_sd=0.0, lower_is_better=False)\n", + "metric_b = GenericNoisyFunctionMetric(\"b\", f=f2, noise_sd=0.0, lower_is_better=False)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "a248dc3d-d053-439c-a4ff-c226105a0bfb" + }, + "outputs": [], + "source": [ + "mo = MultiObjective(\n", + " objectives=[Objective(metric=metric_a), Objective(metric=metric_b)],\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "cefa9d16-a23a-4222-82fb-e33ce89ddb58" + }, + "outputs": [], + "source": [ + "objective_thresholds = [\n", + " ObjectiveThreshold(metric=metric, bound=val, relative=False)\n", + " for metric, val in zip(mo.metrics, problem.ref_point)\n", + "]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "2512e114-8693-4ea1-8938-db0899a4f929" + }, + "outputs": [], + "source": [ + "optimization_config = MultiObjectiveOptimizationConfig(\n", + " objective=mo,\n", + " objective_thresholds=objective_thresholds,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "b689c7a9-28f8-47ae-a5da-c3a93674e72d", + "showInput": false + }, + "source": [ + "## Define experiment creation utilities\n", + "\n", + "These construct our experiment, then initialize with Sobol points before we fit a Gaussian Process model to those initial points." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "originalKey": "fb09ef7d-e744-472b-9290-ec24eb40d3fe" + }, + "outputs": [], + "source": [ + "N_INIT = 2 * (d + 1)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "b9b934cb-3afe-4a39-812b-c4d3bca194b6" + }, + "outputs": [], + "source": [ + "def build_experiment():\n", + " experiment = Experiment(\n", + " name=\"pareto_experiment\",\n", + " search_space=search_space,\n", + " optimization_config=optimization_config,\n", + " runner=SyntheticRunner(),\n", + " )\n", + " return experiment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "cf05b5ca-ee87-45be-a028-51952fb4a2ee" + }, + "outputs": [], + "source": [ + "def initialize_experiment(experiment):\n", + " sobol = Models.SOBOL(search_space=experiment.search_space)\n", + " experiment.new_batch_trial(sobol.gen(N_INIT)).run()\n", + " return experiment.fetch_data()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "96a350f9-5fa1-45a9-aac2-42d942e939f6" + }, + "source": [ + "## qNEHVI + SAASBO\n", + "Noisy expected hypervolume improvement + fully Bayesian inference with SAAS priors." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "02a0d667-9e8e-43b9-b2ef-09ff2b2d85ba" + }, + "outputs": [], + "source": [ + "experiment = build_experiment()\n", + "data = initialize_experiment(experiment)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "BATCH_SIZE = 4\n", + "\n", + "if SMOKE_TEST:\n", + " N_BATCH = 1\n", + " num_samples = 128\n", + " warmup_steps = 256\n", + "else:\n", + " N_BATCH = 10\n", + " BATCH_SIZE = 4\n", + " num_samples = 256\n", + " warmup_steps = 512" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "8ec2a5a3-bb79-435d-834c-55510ec52b15" + }, + "outputs": [], + "source": [ + "hv_list = []\n", + "model = None\n", + "for i in range(N_BATCH):\n", + " model = Models.BOTORCH_MODULAR(\n", + " experiment=experiment,\n", + " data=data,\n", + " surrogate=Surrogate(\n", + " botorch_model_class=SaasFullyBayesianSingleTaskGP,\n", + " mll_options={\n", + " \"num_samples\": num_samples, # Increasing this may result in better model fits\n", + " \"warmup_steps\": warmup_steps, # Increasing this may result in better model fits\n", + " },\n", + " )\n", + " )\n", + " generator_run = model.gen(BATCH_SIZE)\n", + " trial = experiment.new_batch_trial(generator_run=generator_run)\n", + " trial.run()\n", + " data = Data.from_multiple_data([data, trial.fetch_data()])\n", + "\n", + " exp_df = exp_to_df(experiment)\n", + " outcomes = torch.tensor(exp_df[[\"a\", \"b\"]].values, **tkwargs)\n", + " partitioning = DominatedPartitioning(ref_point=problem.ref_point, Y=outcomes)\n", + " try:\n", + " hv = partitioning.compute_hypervolume().item()\n", + " except:\n", + " hv = 0\n", + " print(\"Failed to compute hv\")\n", + " hv_list.append(hv)\n", + " print(f\"Iteration: {i}, HV: {hv}\")\n", + "\n", + "df = exp_to_df(experiment).sort_values(by=[\"trial_index\"])\n", + "outcomes = df[[\"a\", \"b\"]].values" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "bafe189b-88cb-4a9e-aeff-2d2945d497da" + }, + "source": [ + "## Plot empirical data" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "5cc39663-a778-4600-bf39-57e63a7c2f39", + "showInput": false + }, + "source": [ + "#### Plot observed hypervolume, with color representing the iteration that a point was generated on." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "94ba246d-6adb-42bc-8f24-c10266b165d8" + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "matplotlib.rcParams.update({\"font.size\": 16})\n", + "\n", + "\n", + "fig, axes = plt.subplots(1, 1, figsize=(8, 6))\n", + "algos = [\"qNEHVI\"]\n", + "train_obj = outcomes\n", + "cm = matplotlib.colormaps[\"viridis\"]\n", + "\n", + "n_results = N_INIT + N_BATCH * BATCH_SIZE\n", + "\n", + "batch_number = df.trial_index.values\n", + "sc = axes.scatter(train_obj[:, 0], train_obj[:, 1], c=batch_number, alpha=0.8)\n", + "axes.set_title(algos[0])\n", + "axes.set_xlabel(\"Objective 1\")\n", + "axes.set_ylabel(\"Objective 2\")\n", + "norm = plt.Normalize(batch_number.min(), batch_number.max())\n", + "sm = ScalarMappable(norm=norm, cmap=cm)\n", + "sm.set_array([])\n", + "fig.subplots_adjust(right=0.9)\n", + "cbar_ax = fig.add_axes([0.93, 0.15, 0.01, 0.7])\n", + "cbar = fig.colorbar(sm, cax=cbar_ax)\n", + "cbar.ax.set_title(\"Iteration\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "87e98991-aa2d-497b-925c-ee4cc82cf2f9" + }, + "source": [ + "# Hypervolume statistics\n", + "The hypervolume of the space dominated by points that dominate the reference point." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "2401a7cb-e825-489a-994f-c252050310f3" + }, + "source": [ + "#### Plot the results\n", + "The plot below shows a common metric of multi-objective optimization performance when the true Pareto frontier is known: the log difference between the hypervolume of the true Pareto front and the hypervolume of the approximate Pareto front identified by qNEHVI." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "05bf3b39-9cce-4a58-bc22-ed6a59a8c531" + }, + "outputs": [], + "source": [ + "iters = np.arange(1, N_BATCH + 1)\n", + "log_hv_difference = np.log10(problem.max_hv - np.asarray(hv_list))[: N_BATCH + 1]\n", + "\n", + "fig, ax = plt.subplots(1, 1, figsize=(8, 6))\n", + "ax.plot(iters, log_hv_difference, label=\"qNEHVI+SAASBO\", linewidth=1.5)\n", + "ax.set(xlabel=\"Batch Iterations\", ylabel=\"Log Hypervolume Difference\")\n", + "ax.legend(loc=\"lower right\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Inspect Model fits\n", + "\n", + "Here, we examine the GP model fits using the fully bayesian inference with SAAS priors. We plot the leave-one-out cross-validation below. Note: model hyperparameters are not re-sampled on each fold to reduce the runtime." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "saas_model = Models.SAASBO(experiment=experiment, data=data)\n", + "cv = cross_validate(model)\n", + "render(tile_cross_validation(cv))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# compute out-of-sample log likelihood\n", + "compute_diagnostics(cv)[\"Log likelihood\"]" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we examine the GP model fits using MAP estimation for comparison. The fully bayesian model has a higher log-likelihood than the MAP model. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "map_model = Models.BOTORCH_MODULAR(experiment=experiment, data=data)\n", + "map_cv = cross_validate(map_model)\n", + "render(tile_cross_validation(map_cv))" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# compute out-of-sample log likelihood\n", + "compute_diagnostics(map_cv)[\"Log likelihood\"]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/scheduler.ipynb b/tutorials/scheduler.ipynb index 3d40f3b4781..6ca9dc5cae1 100644 --- a/tutorials/scheduler.ipynb +++ b/tutorials/scheduler.ipynb @@ -1,905 +1,918 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "originalKey": "977ca50b-324e-4994-97cd-c6c17e723435" - }, - "source": [ - "# Configurable closed-loop optimization with Ax `Scheduler`\n", - "\n", - "*We recommend reading through the [\"Developer API\" tutorial](https://ax.dev/tutorials/gpei_hartmann_developer.html) before getting started with the `Scheduler`, as using it in this tutorial will require an Ax `Experiment` and an understanding of the experiment's subcomponents like the search space and the runner.*\n", - "\n", - "### Contents:\n", - "1. **Scheduler and external systems for trial evalution** –– overview of how scheduler works with an external system to run a closed-loop optimization.\n", - "2. **Set up a mock external system** –– creating a dummy external system client, which will be used to illustrate a scheduler setup in this tutorial.\n", - "3. **Set up an experiment according to the mock external system** –– set up a runner that deploys trials to the dummy external system from part 2 and a metric that fetches trial results from that system, then leverage those runner and metric and set up an experiment.\n", - "4. **Set up a scheduler**, given an experiment.\n", - " 1. Create a scheduler subclass to poll trial status.\n", - " 2. Set up a generation strategy using an auto-selection utility.\n", - "5. **Running the optimization** via `Scheduler.run_n_trials`.\n", - "6. **Leveraging SQL storage and experiment resumption** –– resuming an experiment in one line of code.\n", - "7. **Configuring the scheduler** –– overview of the many options scheduler provides to configure the closed-loop down to granular detail.\n", - "8. **Advanced functionality**:\n", - " 1. Reporting results to an external system during the optimization.\n", - " 2. Using `Scheduler.run_trials_and_yield_results` to run the optimization via a generator method." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "99721805-f4f5-48e4-940c-bc2d0c73c61a" - }, - "source": [ - "## 1. `Scheduler` and external systems for trial evaluation\n", - "\n", - "`Scheduler` is a closed-loop manager class in Ax that continuously deploys trial runs to an arbitrary external system in an asynchronous fashion, polls their status from that system, and leverages known trial results to generate more trials.\n", - "\n", - "Key features of the `Scheduler`:\n", - "- Maintains user-set concurrency limits for trials run in parallel, keep track of tolerated level of failed trial runs, and 'oversee' the optimization in other ways,\n", - "- Leverages an Ax `Experiment` for optimization setup (an optimization config with metrics, a search space, a runner for trial evaluations),\n", - "- Uses an Ax `GenerationStrategy` for flexible specification of an optimization algorithm used to generate new trials to run,\n", - "- Supports SQL storage and allows for easy resumption of stored experiments." - ] - }, - { - "attachments": { - "image-2.png": { - "image/png": "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rrvuOt/z5dYvcusNCd9Yh7Qtvtx1112+51jtZSJoIW0G3ZpE2vn1r3+ttmzZYvOw+jhnzpyEn9mHH35oFbUfCVrYKHgCAaMJ6L5wMRoOnYMABCAAAQhAAAIFRkD33JD2WVjBARzAARzAARzAARww3QHTLxEIWhC0MN1R+ldABGQR/Ec/+lHCBXBrITydRwkILFiwIJDoq6++mrRtuUXIfffdp7761a8mLPu1r31NnTx5Mq6tXActpAOJdlawOMoOID/96U9j/INug2KVbdGiRdy4rBeefvrphFykjptuukn927/9m7r55puTlrXalEe/oIW0W6dOnYT1SDvi1fe//33fW3E427CeZypoceDAgaRtSnhI+nf//fcn9ep3v/udhdr1SNDChYNvIGAsAd0XLsaCoWMQgAAEIAABCECgAAnonhvSPgsrOIADOIADOIADOIADpjtlP+HyAAAgAElEQVRg+mUCQQuCFqY7Sv8KjEBxcXFsQdxa8M7U47XXXqumTJmSkObly5fVD3/4w4SL9mH6I7flWLVqlW9bOoIW0pH69etXeVwydtmVQnbJCDr279+fdFeRMAz9ygQFLWQ3Egkr+J2T7muZCloIp+7duye9LUqYfv7yl79U4qjfQdDCjwqvQcA8ArovXMwjQo8gAAEIQAACEIBA4RLQPTekfRZWcAAHcAAHcAAHcAAHTHfA9KsFghYELUx3lP4VIIFTp04pue1GottQhFmYtspIyGLYsGGhSF65ckW1bNky7bYlZNG/f//AtnQFLaRDI0eOVJ/97GfTDiTIbTDkdh/JjjNnzqj/+q//SqsduRXLo48+6ntuUNBC+tO+fXvfcywH/B7Fi969e/uel8mghfRPbnNz6623+rbl1zfva7LbyIULFwLRE7QIRMMbEDCKgO4LF6Ng0BkIQAACEIAABCBQ4AR0zw1pn4UVHMABHMABHMABHMAB0x0w/ZKBoAVBC9MdpX8FTGDnzp2qWrVq6rrrrktrgfpzn/uckttcyO0bUj0WLlyobrvttpTaffzxx5X0OdGhM2gh/ZIdJ372s5+lNK677rpLjRo1SsmtXcIesuvFa6+9piTM4A0NBH3/xBNPqKNHj6onn3zS95xEQQvp19ChQ0PfjkRCD0uWLInx8OtPpoMW0j+5lczvf/9737H59UFeEwfffvttdenSpYToCVokxMOb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sWXLlqr5JmW0UL203Modd9zhK79bF/texotJkyaZvr6+quWrxqvW43kzJuStPrW2J+en0yfCFa550UDWH0woHwQgAAEIQAACECgSgbyMMakHz0toAA2gATSABtAAGkADaWkg688HGC0wWjR9Yjetm410k+vIg0aLDRs2xNbJ8OHDPWPBjTfe6F3nfn/rrbd631drt507d3rpyZgwYcIE79pajRZbt271ro3KN0mjhfIYGBgw06dPj2W4uOqqq8yiRYuqljGq7PV8nzdjQt7qU0+bck1yfSEsYZk3DWT9wYTyQQACEIAABCAAgSIRyNtYk/rw/IQG0AAaQANoAA2gATSQtAay/nyA0QKjRVMndZO+wUgvnU47aLTQEhdxWbtGhZEjR3rX3XXXXZ5hYtiwYd731dJdu3atd52MFvPnz/eubQejhVu/np4es3DhQvPkk08a13hiI1tor6VXVq9e7dXRvT6N93kzJuStPmm0OWmm02/CFa7toIGsP5hQPghAAAIQgAAEIFAkAu0wfqSMPOegATSABtAAGkADaAANtFIDWX8+wGiB0aJpE7qtvBHJu7Y/BEGjxZQpU2LppL+/32eKeOKJJ7zr9N41FMgkEadd5s6d67vOja7RbkaLYH337Nljxo0bZxTJwmVzzz33xGITTK+ez3kzJuStPvW0KdfU1t/BC15F0kDWH0woHwQgAAEIQAACECgSgSKNQ6krz11oAA2gATSABtAAGkAD9Wgg688HGC0wWjRtQreeG4hrWtPxBo0WWupjaGioqlYWL17sMwxMmzbNu2bGjBm+Y0uXLvWOVWrnMWPG+K7bv3+/d11WjRYynGgJEPvat2+fV+awuuq4GwnkyiuvLC05EnZu0t/lzZiQt/ok3d6k15o+Fe5wz4oGsv5gQvkgAAEIQAACEIBAkQhkZYxIOXheQQNoAA2gATSABtAAGsiqBrL+fIDRAqNFxQngrN5YlCvdTj9otFC0hTjLWdx9990+U8S6des8fSkShRu14aabbjIyJFRqS13vXnPjjTeaY8eOeddk1WgxODjoi1IxduxYr8xR9X388cd9de3r66t6TVRatXyfN2NC3upTS1tybrr9InzhmwcNZP3BhPJBAAIQgAAEIACBIhHIw/iSOvCchAbQABpAA2gADaABNJCmBrL+fIDRAqNFUyZz07zJSDv5TjzMaCGT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xh0KF2owuIH48Jt2KR5c8D9FLmixdPmSBtyw7x+3aEISbnm2/cs/bl5c8/D/a+nNvMVPJfNYXuKJj/xHS16+PPvy08WYWacWO1zx5Wg5W43bsPjtzXs0+tRWQMYODPkYJw855JDiwAMPbBqDMQz/8pe/bOzn2JFHHhksDeMnhuvf//73xV577dWSf8899yxOOumkgslPjPyxgCGaOuwzf/6fgBiMtaeddlqxww47NMvFMFol+KDFwmtOawEmFk44Kau4hdf+W2s+r5xegRYvv/xycfnllxcjRowodt9992a/OR877rhjQ6Obbropy+hMx+66665i1KhRxW9+85sWHXfeeefGOb3wwgsbEEtKBFzm2rnBbS4BYOPcc88t9t9//5Y2HnTQQcUFF1xQvPDC6wAQBmzO40477dSSlj4dddRRjTbG6j/11FObdTOOCNdff31xwgknFL/4xS9ayqMt9BU3vqlQBbQAaJg4cWKwPsblKaec0gCA/PpYLsM0O+CAA1ra6V5XpIldG2g4ZsyYxnn66U9/2lIGY+OSSy4p7Frx68/5/oc//KHZRv/aPfjgg5vHOJ8WgESsX5wDC7fddlujnQaUHH744Y1DgAuWnviee+6xLG0xMBXj0R/3Vuauu+5anHXWWQ3QpS3zn3fkgBbAIFdffXXb2LV6qP+iiy5qACOxerR/8CiQem7r5TGBFgItBFpUu+5dI7hAi3LtQsY2gRZp3dwxJtAirRVHbYwJtCjXylIItDAl8mOBFvlakdKuS4EWAi2qjRyllgJSQApIASkgBaSAFJACNSnQywn1UFk1NVvF9kiB5SuXF2NmnRYFElyoge1Tbz24JW0IdACyOPjGHVvS+eX43//9f0c2e1QFtMDrhhvwxvHj/944u27S3vtc2sDslm/bGITNwJiKf/azn1mWZoxXgsMOOywrP4ZbDKmhwBvlbt14DcBw6xuXSdMtaLFk9rRizohvNaGJp373lWLl8vSb8itXrCjmHLdJS56lj85sfn/ioPWKXoAWeALYb7/9WrRwdXG3991336ieaIy3CIz0bp7YNueWtYZjAYjG8mJ0x1hOHtsXioEJAAWAZX7+858n05IfI0wo7LPPPs28gB1nn31283uoXtvHpFXM60MuaLFgwYLiuOOOK60P4OLmm29uaT6wh7WlLF6yZElLXr5g1PXhh1A56AOo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" - } - }, - "cell_type": "markdown", - "metadata": { - "originalKey": "f85ac1dc-8678-4b68-a31b-33623c95fd89" - }, - "source": [ - "This scheme summarizes how the scheduler interacts with any external system used to run trial evaluations:\n", - "\n", - "![image-2.png](attachment:image-2.png)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "72643e42-f7e8-4aec-a371-efa5d1991899" - }, - "source": [ - "## 2. Set up a mock external execution system " - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "d8e139e3-c453-43f3-8211-0a85453bab54" - }, - "source": [ - "An example of an 'external system' running trial evaluations could be a remote server executing scheduled jobs, a subprocess conducting ML training runs, an engine running physics simulations, etc. For the sake of example here, let us assume a dummy external system with the following client:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646325042150, - "executionStopTime": 1646325042183, - "hidden_ranges": [], - "originalKey": "1dd579d5-2afa-4cad-b6c0-a54343863579", - "requestMsgId": "1dd579d5-2afa-4cad-b6c0-a54343863579" - }, - "outputs": [], - "source": [ - "from random import randint\n", - "from time import time\n", - "from typing import Any, Dict, NamedTuple, Union\n", - "\n", - "from ax.core.base_trial import TrialStatus\n", - "from ax.utils.measurement.synthetic_functions import branin\n", - "\n", - "\n", - "class MockJob(NamedTuple):\n", - " \"\"\"Dummy class to represent a job scheduled on `MockJobQueue`.\"\"\"\n", - "\n", - " id: int\n", - " parameters: Dict[str, Union[str, float, int, bool]]\n", - "\n", - "\n", - "class MockJobQueueClient:\n", - " \"\"\"Dummy class to represent a job queue where the Ax `Scheduler` will\n", - " deploy trial evaluation runs during optimization.\n", - " \"\"\"\n", - "\n", - " jobs: Dict[str, MockJob] = {}\n", - "\n", - " def schedule_job_with_parameters(\n", - " self, parameters: Dict[str, Union[str, float, int, bool]]\n", - " ) -> int:\n", - " \"\"\"Schedules an evaluation job with given parameters and returns job ID.\"\"\"\n", - " # Code to actually schedule the job and produce an ID would go here;\n", - " # using timestamp in microseconds as dummy ID for this example.\n", - " job_id = int(time() * 1e6)\n", - " self.jobs[job_id] = MockJob(job_id, parameters)\n", - " return job_id\n", - "\n", - " def get_job_status(self, job_id: int) -> TrialStatus:\n", - " \"\"\" \"Get status of the job by a given ID. For simplicity of the example,\n", - " return an Ax `TrialStatus`.\n", - " \"\"\"\n", - " job = self.jobs[job_id]\n", - " # Instead of randomizing trial status, code to check actual job status\n", - " # would go here.\n", - " if randint(0, 3) > 0:\n", - " return TrialStatus.COMPLETED\n", - " return TrialStatus.RUNNING\n", - "\n", - " def get_outcome_value_for_completed_job(self, job_id: int) -> Dict[str, float]:\n", - " \"\"\"Get evaluation results for a given completed job.\"\"\"\n", - " job = self.jobs[job_id]\n", - " # In a real external system, this would retrieve real relevant outcomes and\n", - " # not a synthetic function value.\n", - " return {\"branin\": branin(job.parameters.get(\"x1\"), job.parameters.get(\"x2\"))}\n", - "\n", - "\n", - "MOCK_JOB_QUEUE_CLIENT = MockJobQueueClient()\n", - "\n", - "\n", - "def get_mock_job_queue_client() -> MockJobQueueClient:\n", - " \"\"\"Obtain the singleton job queue instance.\"\"\"\n", - " return MOCK_JOB_QUEUE_CLIENT" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "d3127829-507d-46ff-bd4f-81ea1bd21066", - "showInput": false - }, - "source": [ - "## 3. Set up an experiment according to the mock external system\n", - "\n", - "As mentioned above, using a `Scheduler` requires a fully set up experiment with metrics and a runner. Refer to the \"Building Blocks of Ax\" tutorial to learn more about those components, as here we assume familiarity with them. \n", - "\n", - "The following runner and metric set up intractions between the `Scheduler` and the mock external system we assume:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646325042214, - "executionStopTime": 1646325042307, - "hidden_ranges": [], - "originalKey": "62b96030-89c2-45a6-9250-0f1b529bbd38", - "requestMsgId": "62b96030-89c2-45a6-9250-0f1b529bbd38" - }, - "outputs": [], - "source": [ - "from collections import defaultdict\n", - "from typing import Iterable, Set\n", - "\n", - "from ax.core.base_trial import BaseTrial\n", - "from ax.core.runner import Runner\n", - "from ax.core.trial import Trial\n", - "\n", - "\n", - "class MockJobRunner(Runner): # Deploys trials to external system.\n", - " def run(self, trial: BaseTrial) -> Dict[str, Any]:\n", - " \"\"\"Deploys a trial based on custom runner subclass implementation.\n", - "\n", - " Args:\n", - " trial: The trial to deploy.\n", - "\n", - " Returns:\n", - " Dict of run metadata from the deployment process.\n", - " \"\"\"\n", - " if not isinstance(trial, Trial):\n", - " raise ValueError(\"This runner only handles `Trial`.\")\n", - "\n", - " mock_job_queue = get_mock_job_queue_client()\n", - " job_id = mock_job_queue.schedule_job_with_parameters(\n", - " parameters=trial.arm.parameters\n", - " )\n", - " # This run metadata will be attached to trial as `trial.run_metadata`\n", - " # by the base `Scheduler`.\n", - " return {\"job_id\": job_id}\n", - "\n", - " def poll_trial_status(\n", - " self, trials: Iterable[BaseTrial]\n", - " ) -> Dict[TrialStatus, Set[int]]:\n", - " \"\"\"Checks the status of any non-terminal trials and returns their\n", - " indices as a mapping from TrialStatus to a list of indices. Required\n", - " for runners used with Ax ``Scheduler``.\n", - "\n", - " NOTE: Does not need to handle waiting between polling calls while trials\n", - " are running; this function should just perform a single poll.\n", - "\n", - " Args:\n", - " trials: Trials to poll.\n", - "\n", - " Returns:\n", - " A dictionary mapping TrialStatus to a list of trial indices that have\n", - " the respective status at the time of the polling. This does not need to\n", - " include trials that at the time of polling already have a terminal\n", - " (ABANDONED, FAILED, COMPLETED) status (but it may).\n", - " \"\"\"\n", - " status_dict = defaultdict(set)\n", - " for trial in trials:\n", - " mock_job_queue = get_mock_job_queue_client()\n", - " status = mock_job_queue.get_job_status(\n", - " job_id=trial.run_metadata.get(\"job_id\")\n", - " )\n", - " status_dict[status].add(trial.index)\n", - "\n", - " return status_dict" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646325042364, - "executionStopTime": 1646325042596, - "originalKey": "66cfd1c1-541a-4206-964c-25dbfafecd2a", - "requestMsgId": "66cfd1c1-541a-4206-964c-25dbfafecd2a" - }, - "outputs": [], - "source": [ - "import pandas as pd\n", - "\n", - "from ax.core.metric import Metric, MetricFetchResult, MetricFetchE\n", - "from ax.core.base_trial import BaseTrial\n", - "from ax.core.data import Data\n", - "from ax.utils.common.result import Ok, Err\n", - "\n", - "\n", - "class BraninForMockJobMetric(Metric): # Pulls data for trial from external system.\n", - " def fetch_trial_data(self, trial: BaseTrial) -> MetricFetchResult:\n", - " \"\"\"Obtains data via fetching it from ` for a given trial.\"\"\"\n", - " if not isinstance(trial, Trial):\n", - " raise ValueError(\"This metric only handles `Trial`.\")\n", - "\n", - " try:\n", - " mock_job_queue = get_mock_job_queue_client()\n", - "\n", - " # Here we leverage the \"job_id\" metadata created by `MockJobRunner.run`.\n", - " branin_data = mock_job_queue.get_outcome_value_for_completed_job(\n", - " job_id=trial.run_metadata.get(\"job_id\")\n", - " )\n", - " df_dict = {\n", - " \"trial_index\": trial.index,\n", - " \"metric_name\": \"branin\",\n", - " \"arm_name\": trial.arm.name,\n", - " \"mean\": branin_data.get(\"branin\"),\n", - " # Can be set to 0.0 if function is known to be noiseless\n", - " # or to an actual value when SEM is known. Setting SEM to\n", - " # `None` results in Ax assuming unknown noise and inferring\n", - " # noise level from data.\n", - " \"sem\": None,\n", - " }\n", - " return Ok(value=Data(df=pd.DataFrame.from_records([df_dict])))\n", - " except Exception as e:\n", - " return Err(\n", - " MetricFetchE(message=f\"Failed to fetch {self.name}\", exception=e)\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "98c546ac-4e5d-4cee-9ea0-68b4d061c65f", - "showInput": false - }, - "source": [ - "Now we can set up the experiment using the runner and metric we defined. This experiment will have a single-objective optimization config, minimizing the Branin function, and the search space that corresponds to that function." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646325042616, - "executionStopTime": 1646325042623, - "originalKey": "d2d49a52-1b22-469b-8e09-0e68f59000d5", - "requestMsgId": "d2d49a52-1b22-469b-8e09-0e68f59000d5" - }, - "outputs": [], - "source": [ - "from ax import *\n", - "\n", - "\n", - "def make_branin_experiment_with_runner_and_metric() -> Experiment:\n", - " parameters = [\n", - " RangeParameter(\n", - " name=\"x1\",\n", - " parameter_type=ParameterType.FLOAT,\n", - " lower=-5,\n", - " upper=10,\n", - " ),\n", - " RangeParameter(\n", - " name=\"x2\",\n", - " parameter_type=ParameterType.FLOAT,\n", - " lower=0,\n", - " upper=15,\n", - " ),\n", - " ]\n", - "\n", - " objective = Objective(metric=BraninForMockJobMetric(name=\"branin\"), minimize=True)\n", - "\n", - " return Experiment(\n", - " name=\"branin_test_experiment\",\n", - " search_space=SearchSpace(parameters=parameters),\n", - " optimization_config=OptimizationConfig(objective=objective),\n", - " runner=MockJobRunner(),\n", - " is_test=True, # Marking this experiment as a test experiment.\n", - " )\n", - "\n", - "\n", - "experiment = make_branin_experiment_with_runner_and_metric()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "d28afea7-6c3f-4813-af4e-253692718015", - "showInput": false - }, - "source": [ - "## 4. Setting up a `Scheduler`" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "db14819c-a219-483d-ba06-60d30294ad94", - "showInput": false - }, - "source": [ - "### 4A. Auto-selecting a generation strategy\n", - "\n", - "A `Scheduler` requires an Ax `GenerationStrategy` specifying the algorithm to use for the optimization. Here we use the `choose_generation_strategy` utility that auto-picks a generation strategy based on the search space properties. To construct a custom generation strategy instead, refer to the [\"Generation Strategy\" tutorial](https://ax.dev/tutorials/generation_strategy.html).\n", - "\n", - "Importantly, a generation strategy in Ax limits allowed parallelism levels for each generation step it contains. If you would like the `Scheduler` to ensure parallelism limitations, set `max_examples` on each generation step in your generation strategy." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646325042632, - "executionStopTime": 1646325042699, - "originalKey": "d699d3e9-85d3-40f3-822f-ece6a6cc58e3", - "requestMsgId": "d699d3e9-85d3-40f3-822f-ece6a6cc58e3", - "scrolled": true - }, - "outputs": [], - "source": [ - "from ax.modelbridge.dispatch_utils import choose_generation_strategy\n", - "\n", - "generation_strategy = choose_generation_strategy(\n", - " search_space=experiment.search_space,\n", - " max_parallelism_cap=3,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "452f36d1-c7d8-477a-87d9-1b9767ace072", - "showInput": false - }, - "source": [ - "Now we have all the components needed to start the scheduler:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646325042718, - "executionStopTime": 1646325042829, - "hidden_ranges": [], - "originalKey": "139e2f4d-ee86-425b-bece-697ed21c2316", - "requestMsgId": "139e2f4d-ee86-425b-bece-697ed21c2316" - }, - "outputs": [], - "source": [ - "from ax.service.scheduler import Scheduler, SchedulerOptions\n", - "\n", - "\n", - "scheduler = Scheduler(\n", - " experiment=experiment,\n", - " generation_strategy=generation_strategy,\n", - " options=SchedulerOptions(),\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### 4B. Optional: Defining a plotting function" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from ax.plot.trace import optimization_trace_single_method\n", - "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", - "\n", - "init_notebook_plotting()\n", - "\n", - "\n", - "def get_plot():\n", - " best_objectives = np.array(\n", - " [[trial.objective_mean for trial in scheduler.experiment.trials.values()]]\n", - " )\n", - " best_objective_plot = optimization_trace_single_method(\n", - " y=np.minimum.accumulate(best_objectives, axis=1),\n", - " title=\"Model performance vs. # of iterations\",\n", - " ylabel=\"Y\",\n", - " )\n", - " return best_objective_plot" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "f8a2cc5b-f289-497b-80b5-6807d85137b5", - "showInput": false - }, - "source": [ - "## 5. Running the optimization\n", - "\n", - "Once the `Scheduler` instance is set up, user can execute `run_n_trials` as many times as needed, and each execution will add up to the specified `max_trials` trials to the experiment. The number of trials actually run might be less than `max_trials` if the optimization was concluded (e.g. there are no more points in the search space)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "scheduler.run_n_trials(max_trials=3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_objective_plot = get_plot()\n", - "render(best_objective_plot)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "e3740875-5b3c-456d-a674-c2c78dab0e0d", - "showInput": false - }, - "source": [ - "We can examine `experiment` to see that it now has three trials:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646325045492, - "executionStopTime": 1646325045752, - "originalKey": "0ff23f6f-3011-4962-a691-9187f3e8b222", - "requestMsgId": "0ff23f6f-3011-4962-a691-9187f3e8b222" - }, - "outputs": [], - "source": [ - "from ax.service.utils.report_utils import exp_to_df\n", - "\n", - "exp_to_df(experiment)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "c2888bcc-0c82-4f24-bcb6-105c7e9c4e77", - "showInput": false - }, - "source": [ - "Now we can run `run_n_trials` again to add three more trials to the experiment (this time, without plotting)." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646325045788, - "executionStopTime": 1646325048325, - "originalKey": "e76eb807-0a6c-45bc-a00f-e753ae8ef6db", - "requestMsgId": "e76eb807-0a6c-45bc-a00f-e753ae8ef6db", - "scrolled": true - }, - "outputs": [], - "source": [ - "scheduler.run_n_trials(max_trials=3)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_objective_plot = get_plot()\n", - "render(best_objective_plot)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "bee52b5d-a5fe-4554-b294-da9b83e8ff02", - "showInput": false - }, - "source": [ - "Examiniming the experiment, we now see 6 trials, one of which is produced by Bayesian optimization (GPEI):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646325048364, - "executionStopTime": 1646325048529, - "originalKey": "39204bbb-757b-4dfb-a685-5d540e621ec9", - "requestMsgId": "39204bbb-757b-4dfb-a685-5d540e621ec9" - }, - "outputs": [], - "source": [ - "exp_to_df(experiment)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "bf89e55c-08cf-480c-914a-2f0c682f74fd", - "showInput": false - }, - "source": [ - "For each call to `run_n_trials`, one can specify a timeout; if `run_n_trials` has been running for too long without finishing its `max_trials`, the operation will exit gracefully:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646325048565, - "executionStopTime": 1646325049269, - "originalKey": "5b07d1f4-af03-4652-8ed2-bb772b077305", - "requestMsgId": "5b07d1f4-af03-4652-8ed2-bb772b077305" - }, - "outputs": [], - "source": [ - "scheduler.run_n_trials(max_trials=3, timeout_hours=0.00001)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "best_objective_plot = get_plot()\n", - "render(best_objective_plot)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "6363db46-3b18-4a8b-8c0f-3e290806592b", - "showInput": false - }, - "source": [ - "## 6. Leveraging SQL storage and experiment resumption\n", - "\n", - "When a scheduler is SQL-enabled, it will automatically save all updates it makes to the experiment in the course of the optimization. The experiment can then be resumed in the event of a crash or after a pause. The scheduler should be stateless and therefore, the scheduler itself is not saved in the database.\n", - "\n", - "To store state of optimization to an SQL backend, first follow [setup instructions](https://ax.dev/docs/storage.html#sql) on Ax website. Having set up the SQL backend, pass `DBSettings` to the `Scheduler` on instantiation (note that SQLAlchemy dependency will have to be installed – for installation, refer to [optional dependencies](https://ax.dev/docs/installation.html#optional-dependencies) on Ax website):" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646325049292, - "executionStopTime": 1646325049522, - "hidden_ranges": [], - "originalKey": "c89a6d00-b660-4370-93a6-b46edfc58e07", - "requestMsgId": "c89a6d00-b660-4370-93a6-b46edfc58e07" - }, - "outputs": [], - "source": [ - "from ax.storage.registry_bundle import RegistryBundle\n", - "from ax.storage.sqa_store.db import (\n", - " create_all_tables,\n", - " get_engine,\n", - " init_engine_and_session_factory,\n", - ")\n", - "from ax.storage.sqa_store.decoder import Decoder\n", - "from ax.storage.sqa_store.encoder import Encoder\n", - "from ax.storage.sqa_store.sqa_config import SQAConfig\n", - "from ax.storage.sqa_store.structs import DBSettings\n", - "\n", - "bundle = RegistryBundle(\n", - " metric_clss={BraninForMockJobMetric: None}, runner_clss={MockJobRunner: None}\n", - ")\n", - "\n", - "# URL is of the form \"dialect+driver://username:password@host:port/database\".\n", - "# Instead of URL, can provide a `creator function`; can specify custom encoders/decoders if necessary.\n", - "db_settings = DBSettings(\n", - " url=\"sqlite:///foo.db\",\n", - " encoder=bundle.encoder,\n", - " decoder=bundle.decoder,\n", - ")\n", - "\n", - "# The following lines are only necessary because it is the first time we are using this database\n", - "# in practice, you will not need to run these lines every time you initialize your scheduler\n", - "init_engine_and_session_factory(url=db_settings.url)\n", - "engine = get_engine()\n", - "create_all_tables(engine)\n", - "\n", - "stored_experiment = make_branin_experiment_with_runner_and_metric()\n", - "generation_strategy = choose_generation_strategy(search_space=experiment.search_space)\n", - "\n", - "scheduler_with_storage = Scheduler(\n", - " experiment=stored_experiment,\n", - " generation_strategy=generation_strategy,\n", - " options=SchedulerOptions(),\n", - " db_settings=db_settings,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "6939cf6e-5f6b-4a61-a807-f2fea1c7f5ea", - "showInput": false - }, - "source": [ - "To resume a stored experiment:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646325049666, - "executionStopTime": 1646325049932, - "hidden_ranges": [], - "originalKey": "351e7fca-4332-41ec-ad7d-6a143e0000ef", - "requestMsgId": "351e7fca-4332-41ec-ad7d-6a143e0000ef" - }, - "outputs": [], - "source": [ - "reloaded_experiment_scheduler = Scheduler.from_stored_experiment(\n", - " experiment_name=\"branin_test_experiment\",\n", - " options=SchedulerOptions(),\n", - " # `DBSettings` are also required here so scheduler has access to the\n", - " # database, from which it needs to load the experiment.\n", - " db_settings=db_settings,\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "e4064b5c-3dc0-4be5-bd34-63804ab19047", - "showInput": false - }, - "source": [ - "With the newly reloaded experiment, the `Scheduler` can continue the optimization:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646325049943, - "executionStopTime": 1646325050416, - "originalKey": "6dddf6e6-1fd3-4e23-a88b-7b964db9b20d", - "requestMsgId": "6dddf6e6-1fd3-4e23-a88b-7b964db9b20d" - }, - "outputs": [], - "source": [ - "reloaded_experiment_scheduler.run_n_trials(max_trials=3)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "e3f24c9e-3da1-4ee0-ab1c-741f624a6014", - "showInput": false - }, - "source": [ - "## 7. Configuring the scheduler with `SchedulerOptions`, like early stopping\n", - "\n", - "`Scheduler` exposes many options to configure the exact settings of the closed-loop optimization to perform. A few notable ones are:\n", - "- `trial_type` –– currently only `Trial` and not `BatchTrial` is supported, but support for `BatchTrial`-s will follow,\n", - "- `tolerated_trial_failure_rate` and `min_failed_trials_for_failure_rate_check` –– together these two settings control how the scheduler monitors the failure rate among trial runs it deploys. Once `min_failed_trials_for_failure_rate_check` is deployed, the scheduler will start checking whether the ratio of failed to total trials is greater than `tolerated_trial_failure_rate`, and if it is, scheduler will exit the optimization with a `FailureRateExceededError`,\n", - "- `ttl_seconds_for_trials` –– sometimes a failure in a trial run means that it will be difficult to query its status (e.g. due to a crash). If this setting is specified, the Ax `Experiment` will automatically mark trials that have been running for too long (more than their 'time-to-live' (TTL) seconds) as failed,\n", - "- `run_trials_in_batches` –– if `True`, the scheduler will attempt to run trials not by calling `Scheduler.run_trial` in a loop, but by calling `Scheduler.run_trials` on all ready-to-deploy trials at once. This could allow for saving compute in cases where the deployment operation has large overhead and deploying many trials at once saves compute. Note that using this option successfully will require your scheduler subclass to implement `MySchedulerSubclass.run_trials` and `MySchedulerSubclass.poll_available_capacity`.\n", - "- `early_stopping_strategy` -- determines whether a trial should be stopped given the current state of the experiment, so that less promising trials can be terminated quickly. For more on this, see the Trial-Level Early Stopping tutorial: https://ax.dev/tutorials/early_stopping/early_stopping.html\n", - "- `global_stopping_strategy` -- determines whether the full optimization should be stopped or not, so that the run terminates when little progress is being made. A `global_stopping_strategy` instance can be passed to `SchedulerOptions` just as it is passed to `AxClient`, as illustrated in the tutorial on Global Stopping Strategy with AxClient: https://ax.dev/tutorials/gss.html\n", - "\n", - "The rest of the options are described in the docstring below:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646325050451, - "executionStopTime": 1646325050569, - "originalKey": "b9645271-88cd-43f1-9e07-83afe722696d", - "requestMsgId": "b9645271-88cd-43f1-9e07-83afe722696d" - }, - "outputs": [], - "source": [ - "print(SchedulerOptions.__doc__)" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "eef1a121-1eee-4302-b586-85958f177b04", - "showInput": false - }, - "source": [ - "## 8. Advanced functionality\n", - "\n", - "### 8a. Reporting results to an external system\n", - "\n", - "The `Scheduler` can report the optimization result to an external system each time there are new completed trials if the user-implemented subclass implements `MySchedulerSubclass.report_results` to do so. For example, the folliwing method:\n", - "\n", - "```\n", - "class MySchedulerSubclass(Scheduler):\n", - " ...\n", - " \n", - " def report_results(self, force_refit: bool = False):\n", - " write_to_external_database(len(self.experiment.trials))\n", - " return (True, {}) # Returns optimization success status and optional dict of outputs.\n", - "```\n", - "could be used to record number of trials in experiment so far in an external database.\n", - "\n", - "Since `report_results` is an instance method, it has access to `self.experiment` and `self.generation_strategy`, which contain all the information about the state of the optimization thus far." - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "12b60db0-52d8-4337-ad1c-77fdc3c2452b", - "showInput": false - }, - "source": [ - "### 8b. Using `run_trials_and_yield_results` generator method\n", - "\n", - "In some systems it's beneficial to have greater control over `Scheduler.run_n_trials` instead of just starting it and needing to wait for it to run all the way to completion before having access to its output. For this purpose, the `Scheduler` implements a generator method `run_trials_and_yield_results`, which yields the output of `Scheduler.report_results` each time there are new completed trials and can be used like so:" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1646325050601, - "executionStopTime": 1646325050672, - "hidden_ranges": [], - "originalKey": "77bf9ea5-5ec2-4d65-a723-3c0dfeea144b", - "requestMsgId": "77bf9ea5-5ec2-4d65-a723-3c0dfeea144b" - }, - "outputs": [], - "source": [ - "class ResultReportingScheduler(Scheduler):\n", - " def report_results(self, force_refit: bool = False):\n", - " return True, {\n", - " \"trials so far\": len(self.experiment.trials),\n", - " \"currently producing trials from generation step\": self.generation_strategy._curr.model_name,\n", - " \"running trials\": [t.index for t in self.running_trials],\n", - " }" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1646325050680, - "executionStopTime": 1646325057409, - "originalKey": "c037044e-79d8-4c36-92e9-d9f360a9f5fe", - "requestMsgId": "c037044e-79d8-4c36-92e9-d9f360a9f5fe" - }, - "outputs": [], - "source": [ - "experiment = make_branin_experiment_with_runner_and_metric()\n", - "scheduler = ResultReportingScheduler(\n", - " experiment=experiment,\n", - " generation_strategy=choose_generation_strategy(\n", - " search_space=experiment.search_space,\n", - " max_parallelism_cap=3,\n", - " ),\n", - " options=SchedulerOptions(),\n", - ")\n", - "\n", - "for reported_result in scheduler.run_trials_and_yield_results(max_trials=6):\n", - " print(\"Reported result: \", reported_result)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "# Clean up to enable running the tutorial repeatedly with\n", - "# the same results. You wouldn't do this if you wanted to\n", - "# keep adding data to the same experiment.\n", - "from ax.storage.sqa_store.delete import delete_experiment\n", - "\n", - "delete_experiment(\"branin_test_experiment\")" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "originalKey": "977ca50b-324e-4994-97cd-c6c17e723435" + }, + "source": [ + "# Configurable closed-loop optimization with Ax `Scheduler`\n", + "\n", + "*We recommend reading through the [\"Developer API\" tutorial](https://ax.dev/tutorials/gpei_hartmann_developer.html) before getting started with the `Scheduler`, as using it in this tutorial will require an Ax `Experiment` and an understanding of the experiment's subcomponents like the search space and the runner.*\n", + "\n", + "### Contents:\n", + "1. **Scheduler and external systems for trial evalution** –– overview of how scheduler works with an external system to run a closed-loop optimization.\n", + "2. **Set up a mock external system** –– creating a dummy external system client, which will be used to illustrate a scheduler setup in this tutorial.\n", + "3. **Set up an experiment according to the mock external system** –– set up a runner that deploys trials to the dummy external system from part 2 and a metric that fetches trial results from that system, then leverage those runner and metric and set up an experiment.\n", + "4. **Set up a scheduler**, given an experiment.\n", + " 1. Create a scheduler subclass to poll trial status.\n", + " 2. Set up a generation strategy using an auto-selection utility.\n", + "5. **Running the optimization** via `Scheduler.run_n_trials`.\n", + "6. **Leveraging SQL storage and experiment resumption** –– resuming an experiment in one line of code.\n", + "7. **Configuring the scheduler** –– overview of the many options scheduler provides to configure the closed-loop down to granular detail.\n", + "8. **Advanced functionality**:\n", + " 1. Reporting results to an external system during the optimization.\n", + " 2. Using `Scheduler.run_trials_and_yield_results` to run the optimization via a generator method." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "99721805-f4f5-48e4-940c-bc2d0c73c61a" + }, + "source": [ + "## 1. `Scheduler` and external systems for trial evaluation\n", + "\n", + "`Scheduler` is a closed-loop manager class in Ax that continuously deploys trial runs to an arbitrary external system in an asynchronous fashion, polls their status from that system, and leverages known trial results to generate more trials.\n", + "\n", + "Key features of the `Scheduler`:\n", + "- Maintains user-set concurrency limits for trials run in parallel, keep track of tolerated level of failed trial runs, and 'oversee' the optimization in other ways,\n", + "- Leverages an Ax `Experiment` for optimization setup (an optimization config with metrics, a search space, a runner for trial evaluations),\n", + "- Uses an Ax `GenerationStrategy` for flexible specification of an optimization algorithm used to generate new trials to run,\n", + "- Supports SQL storage and allows for easy resumption of stored experiments." + ] + }, + { + "attachments": { + "image-2.png": { + "image/png": "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rrvuOt/z5dYvcusNCd9Yh7Qtvtx1112+51jtZSJoIW0G3ZpE2vn1r3+ttmzZYvOw+jhnzpyEn9mHH35oFbUfCVrYKHgCAaMJ6L5wMRoOnYMABCAAAQhAAAIFRkD33JD2WVjBARzAARzAARzAARww3QHTLxEIWhC0MN1R+ldABGQR/Ec/+lHCBXBrITydRwkILFiwIJDoq6++mrRtuUXIfffdp7761a8mLPu1r31NnTx5Mq6tXActpAOJdlawOMoOID/96U9j/INug2KVbdGiRdy4rBeefvrphFykjptuukn927/9m7r55puTlrXalEe/oIW0W6dOnYT1SDvi1fe//33fW3E427CeZypoceDAgaRtSnhI+nf//fcn9ep3v/udhdr1SNDChYNvIGAsAd0XLsaCoWMQgAAEIAABCECgAAnonhvSPgsrOIADOIADOIADOIADpjtlP+HyAAAgAElEQVRg+mUCQQuCFqY7Sv8KjEBxcXFsQdxa8M7U47XXXqumTJmSkObly5fVD3/4w4SL9mH6I7flWLVqlW9bOoIW0pH69etXeVwydtmVQnbJCDr279+fdFeRMAz9ygQFLWQ3Egkr+J2T7muZCloIp+7duye9LUqYfv7yl79U4qjfQdDCjwqvQcA8ArovXMwjQo8gAAEIQAACEIBA4RLQPTekfRZWcAAHcAAHcAAHcAAHTHfA9KsFghYELUx3lP4VIIFTp04pue1GottQhFmYtspIyGLYsGGhSF65ckW1bNky7bYlZNG/f//AtnQFLaRDI0eOVJ/97GfTDiTIbTDkdh/JjjNnzqj/+q//SqsduRXLo48+6ntuUNBC+tO+fXvfcywH/B7Fi969e/uel8mghfRPbnNz6623+rbl1zfva7LbyIULFwLRE7QIRMMbEDCKgO4LF6Ng0BkIQAACEIAABCBQ4AR0zw1pn4UVHMABHMABHMABHMAB0x0w/ZKBoAVBC9MdpX8FTGDnzp2qWrVq6rrrrktrgfpzn/uckttcyO0bUj0WLlyobrvttpTaffzxx5X0OdGhM2gh/ZIdJ372s5+lNK677rpLjRo1SsmtXcIesuvFa6+9piTM4A0NBH3/xBNPqKNHj6onn3zS95xEQQvp19ChQ0PfjkRCD0uWLInx8OtPpoMW0j+5lczvf/9737H59UFeEwfffvttdenSpYToCVokxMOb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sWXLlqr5JmW0UL203Modd9zhK79bF/texotJkyaZvr6+quWrxqvW43kzJuStPrW2J+en0yfCFa550UDWH0woHwQgAAEIQAACECgSgbyMMakHz0toAA2gATSABtAAGkADaWkg688HGC0wWjR9Yjetm410k+vIg0aLDRs2xNbJ8OHDPWPBjTfe6F3nfn/rrbd631drt507d3rpyZgwYcIE79pajRZbt271ro3KN0mjhfIYGBgw06dPj2W4uOqqq8yiRYuqljGq7PV8nzdjQt7qU0+bck1yfSEsYZk3DWT9wYTyQQACEIAABCAAgSIRyNtYk/rw/IQG0AAaQANoAA2gATSQtAay/nyA0QKjRVMndZO+wUgvnU47aLTQEhdxWbtGhZEjR3rX3XXXXZ5hYtiwYd731dJdu3atd52MFvPnz/eubQejhVu/np4es3DhQvPkk08a13hiI1tor6VXVq9e7dXRvT6N93kzJuStPmm0OWmm02/CFa7toIGsP5hQPghAAAIQgAAEIFAkAu0wfqSMPOegATSABtAAGkADaAANtFIDWX8+wGiB0aJpE7qtvBHJu7Y/BEGjxZQpU2LppL+/32eKeOKJJ7zr9N41FMgkEadd5s6d67vOja7RbkaLYH337Nljxo0bZxTJwmVzzz33xGITTK+ez3kzJuStPvW0KdfU1t/BC15F0kDWH0woHwQgAAEIQAACECgSgSKNQ6krz11oAA2gATSABtAAGkAD9Wgg688HGC0wWjRtQreeG4hrWtPxBo0WWupjaGioqlYWL17sMwxMmzbNu2bGjBm+Y0uXLvWOVWrnMWPG+K7bv3+/d11WjRYynGgJEPvat2+fV+awuuq4GwnkyiuvLC05EnZu0t/lzZiQt/ok3d6k15o+Fe5wz4oGsv5gQvkgAAEIQAACEIBAkQhkZYxIOXheQQNoAA2gATSABtAAGsiqBrL+fIDRAqNFxQngrN5YlCvdTj9otFC0hTjLWdx9990+U8S6des8fSkShRu14aabbjIyJFRqS13vXnPjjTeaY8eOeddk1WgxODjoi1IxduxYr8xR9X388cd9de3r66t6TVRatXyfN2NC3upTS1tybrr9InzhmwcNZP3BhPJBAAIQgAAEIACBIhHIw/iSOvCchAbQABpAA2gADaABNJCmBrL+fIDRAqNFUyZz07zJSDv5TjzMaCGT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xh0KF2owuIH48Jt2KR5c8D9FLmixdPmSBtyw7x+3aEISbnm2/cs/bl5c8/D/a+nNvMVPJfNYXuKJj/xHS16+PPvy08WYWacWO1zx5Wg5W43bsPjtzXs0+tRWQMYODPkYJw855JDiwAMPbBqDMQz/8pe/bOzn2JFHHhksDeMnhuvf//73xV577dWSf8899yxOOumkgslPjPyxgCGaOuwzf/6fgBiMtaeddlqxww47NMvFMFol+KDFwmtOawEmFk44Kau4hdf+W2s+r5xegRYvv/xycfnllxcjRowodt9992a/OR877rhjQ6Obbropy+hMx+66665i1KhRxW9+85sWHXfeeefGOb3wwgsbEEtKBFzm2rnBbS4BYOPcc88t9t9//5Y2HnTQQcUFF1xQvPDC6wAQBmzO40477dSSlj4dddRRjTbG6j/11FObdTOOCNdff31xwgknFL/4xS9ayqMt9BU3vqlQBbQAaJg4cWKwPsblKaec0gCA/PpYLsM0O+CAA1ra6V5XpIldG2g4ZsyYxnn66U9/2lIGY+OSSy4p7Frx68/5/oc//KHZRv/aPfjgg5vHOJ8WgESsX5wDC7fddlujnQaUHH744Y1DgAuWnviee+6xLG0xMBXj0R/3Vuauu+5anHXWWQ3QpS3zn3fkgBbAIFdffXXb2LV6qP+iiy5qACOxerR/8CiQem7r5TGBFgItBFpUu+5dI7hAi3LtQsY2gRZp3dwxJtAirRVHbYwJtCjXylIItDAl8mOBFvlakdKuS4EWAi2qjRyllgJSQApIASkgBaSAFJACNSnQywn1UFk1NVvF9kiB5SuXF2NmnRYFElyoge1Tbz24JW0IdACyOPjGHVvS+eX43//9f0c2e1QFtMDrhhvwxvHj/944u27S3vtc2sDslm/bGITNwJiKf/azn1mWZoxXgsMOOywrP4ZbDKmhwBvlbt14DcBw6xuXSdMtaLFk9rRizohvNaGJp373lWLl8vSb8itXrCjmHLdJS56lj85sfn/ioPWKXoAWeALYb7/9WrRwdXG3991336ieaIy3CIz0bp7YNueWtYZjAYjG8mJ0x1hOHtsXioEJAAWAZX7+858n05IfI0wo7LPPPs28gB1nn31283uoXtvHpFXM60MuaLFgwYLiuOOOK60P4OLmm29uaT6wh7WlLF6yZElLXr5g1PXhh1A56AOo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" } - ], - "metadata": { - "custom": { - "cells": [], - "metadata": { - "fileHeader": "", - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } - }, - "nbformat": 4, - "nbformat_minor": 2 - }, - "indentAmount": 2, + }, + "cell_type": "markdown", + "metadata": { + "originalKey": "f85ac1dc-8678-4b68-a31b-33623c95fd89" + }, + "source": [ + "This scheme summarizes how the scheduler interacts with any external system used to run trial evaluations:\n", + "\n", + "![image-2.png](attachment:image-2.png)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "72643e42-f7e8-4aec-a371-efa5d1991899" + }, + "source": [ + "## 2. Set up a mock external execution system " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "d8e139e3-c453-43f3-8211-0a85453bab54" + }, + "source": [ + "An example of an 'external system' running trial evaluations could be a remote server executing scheduled jobs, a subprocess conducting ML training runs, an engine running physics simulations, etc. For the sake of example here, let us assume a dummy external system with the following client:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646325042150, + "executionStopTime": 1646325042183, + "hidden_ranges": [], + "originalKey": "1dd579d5-2afa-4cad-b6c0-a54343863579", + "requestMsgId": "1dd579d5-2afa-4cad-b6c0-a54343863579" + }, + "outputs": [], + "source": [ + "from random import randint\n", + "from time import time\n", + "from typing import Any, Dict, NamedTuple, Union\n", + "\n", + "from ax.core.base_trial import TrialStatus\n", + "from ax.utils.measurement.synthetic_functions import branin\n", + "\n", + "\n", + "class MockJob(NamedTuple):\n", + " \"\"\"Dummy class to represent a job scheduled on `MockJobQueue`.\"\"\"\n", + "\n", + " id: int\n", + " parameters: Dict[str, Union[str, float, int, bool]]\n", + "\n", + "\n", + "class MockJobQueueClient:\n", + " \"\"\"Dummy class to represent a job queue where the Ax `Scheduler` will\n", + " deploy trial evaluation runs during optimization.\n", + " \"\"\"\n", + "\n", + " jobs: Dict[str, MockJob] = {}\n", + "\n", + " def schedule_job_with_parameters(\n", + " self, parameters: Dict[str, Union[str, float, int, bool]]\n", + " ) -> int:\n", + " \"\"\"Schedules an evaluation job with given parameters and returns job ID.\"\"\"\n", + " # Code to actually schedule the job and produce an ID would go here;\n", + " # using timestamp in microseconds as dummy ID for this example.\n", + " job_id = int(time() * 1e6)\n", + " self.jobs[job_id] = MockJob(job_id, parameters)\n", + " return job_id\n", + "\n", + " def get_job_status(self, job_id: int) -> TrialStatus:\n", + " \"\"\" \"Get status of the job by a given ID. For simplicity of the example,\n", + " return an Ax `TrialStatus`.\n", + " \"\"\"\n", + " job = self.jobs[job_id]\n", + " # Instead of randomizing trial status, code to check actual job status\n", + " # would go here.\n", + " if randint(0, 3) > 0:\n", + " return TrialStatus.COMPLETED\n", + " return TrialStatus.RUNNING\n", + "\n", + " def get_outcome_value_for_completed_job(self, job_id: int) -> Dict[str, float]:\n", + " \"\"\"Get evaluation results for a given completed job.\"\"\"\n", + " job = self.jobs[job_id]\n", + " # In a real external system, this would retrieve real relevant outcomes and\n", + " # not a synthetic function value.\n", + " return {\"branin\": branin(job.parameters.get(\"x1\"), job.parameters.get(\"x2\"))}\n", + "\n", + "\n", + "MOCK_JOB_QUEUE_CLIENT = MockJobQueueClient()\n", + "\n", + "\n", + "def get_mock_job_queue_client() -> MockJobQueueClient:\n", + " \"\"\"Obtain the singleton job queue instance.\"\"\"\n", + " return MOCK_JOB_QUEUE_CLIENT" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "d3127829-507d-46ff-bd4f-81ea1bd21066", + "showInput": false + }, + "source": [ + "## 3. Set up an experiment according to the mock external system\n", + "\n", + "As mentioned above, using a `Scheduler` requires a fully set up experiment with metrics and a runner. Refer to the \"Building Blocks of Ax\" tutorial to learn more about those components, as here we assume familiarity with them. \n", + "\n", + "The following runner and metric set up intractions between the `Scheduler` and the mock external system we assume:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646325042214, + "executionStopTime": 1646325042307, + "hidden_ranges": [], + "originalKey": "62b96030-89c2-45a6-9250-0f1b529bbd38", + "requestMsgId": "62b96030-89c2-45a6-9250-0f1b529bbd38" + }, + "outputs": [], + "source": [ + "from collections import defaultdict\n", + "from typing import Iterable, Set\n", + "\n", + "from ax.core.base_trial import BaseTrial\n", + "from ax.core.runner import Runner\n", + "from ax.core.trial import Trial\n", + "\n", + "\n", + "class MockJobRunner(Runner): # Deploys trials to external system.\n", + " def run(self, trial: BaseTrial) -> Dict[str, Any]:\n", + " \"\"\"Deploys a trial based on custom runner subclass implementation.\n", + "\n", + " Args:\n", + " trial: The trial to deploy.\n", + "\n", + " Returns:\n", + " Dict of run metadata from the deployment process.\n", + " \"\"\"\n", + " if not isinstance(trial, Trial):\n", + " raise ValueError(\"This runner only handles `Trial`.\")\n", + "\n", + " mock_job_queue = get_mock_job_queue_client()\n", + " job_id = mock_job_queue.schedule_job_with_parameters(\n", + " parameters=trial.arm.parameters\n", + " )\n", + " # This run metadata will be attached to trial as `trial.run_metadata`\n", + " # by the base `Scheduler`.\n", + " return {\"job_id\": job_id}\n", + "\n", + " def poll_trial_status(\n", + " self, trials: Iterable[BaseTrial]\n", + " ) -> Dict[TrialStatus, Set[int]]:\n", + " \"\"\"Checks the status of any non-terminal trials and returns their\n", + " indices as a mapping from TrialStatus to a list of indices. Required\n", + " for runners used with Ax ``Scheduler``.\n", + "\n", + " NOTE: Does not need to handle waiting between polling calls while trials\n", + " are running; this function should just perform a single poll.\n", + "\n", + " Args:\n", + " trials: Trials to poll.\n", + "\n", + " Returns:\n", + " A dictionary mapping TrialStatus to a list of trial indices that have\n", + " the respective status at the time of the polling. This does not need to\n", + " include trials that at the time of polling already have a terminal\n", + " (ABANDONED, FAILED, COMPLETED) status (but it may).\n", + " \"\"\"\n", + " status_dict = defaultdict(set)\n", + " for trial in trials:\n", + " mock_job_queue = get_mock_job_queue_client()\n", + " status = mock_job_queue.get_job_status(\n", + " job_id=trial.run_metadata.get(\"job_id\")\n", + " )\n", + " status_dict[status].add(trial.index)\n", + "\n", + " return status_dict" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646325042364, + "executionStopTime": 1646325042596, + "originalKey": "66cfd1c1-541a-4206-964c-25dbfafecd2a", + "requestMsgId": "66cfd1c1-541a-4206-964c-25dbfafecd2a" + }, + "outputs": [], + "source": [ + "import pandas as pd\n", + "\n", + "from ax.core.metric import Metric, MetricFetchResult, MetricFetchE\n", + "from ax.core.base_trial import BaseTrial\n", + "from ax.core.data import Data\n", + "from ax.utils.common.result import Ok, Err\n", + "\n", + "\n", + "class BraninForMockJobMetric(Metric): # Pulls data for trial from external system.\n", + " def fetch_trial_data(self, trial: BaseTrial) -> MetricFetchResult:\n", + " \"\"\"Obtains data via fetching it from ` for a given trial.\"\"\"\n", + " if not isinstance(trial, Trial):\n", + " raise ValueError(\"This metric only handles `Trial`.\")\n", + "\n", + " try:\n", + " mock_job_queue = get_mock_job_queue_client()\n", + "\n", + " # Here we leverage the \"job_id\" metadata created by `MockJobRunner.run`.\n", + " branin_data = mock_job_queue.get_outcome_value_for_completed_job(\n", + " job_id=trial.run_metadata.get(\"job_id\")\n", + " )\n", + " df_dict = {\n", + " \"trial_index\": trial.index,\n", + " \"metric_name\": \"branin\",\n", + " \"arm_name\": trial.arm.name,\n", + " \"mean\": branin_data.get(\"branin\"),\n", + " # Can be set to 0.0 if function is known to be noiseless\n", + " # or to an actual value when SEM is known. Setting SEM to\n", + " # `None` results in Ax assuming unknown noise and inferring\n", + " # noise level from data.\n", + " \"sem\": None,\n", + " }\n", + " return Ok(value=Data(df=pd.DataFrame.from_records([df_dict])))\n", + " except Exception as e:\n", + " return Err(\n", + " MetricFetchE(message=f\"Failed to fetch {self.name}\", exception=e)\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "98c546ac-4e5d-4cee-9ea0-68b4d061c65f", + "showInput": false + }, + "source": [ + "Now we can set up the experiment using the runner and metric we defined. This experiment will have a single-objective optimization config, minimizing the Branin function, and the search space that corresponds to that function." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646325042616, + "executionStopTime": 1646325042623, + "originalKey": "d2d49a52-1b22-469b-8e09-0e68f59000d5", + "requestMsgId": "d2d49a52-1b22-469b-8e09-0e68f59000d5" + }, + "outputs": [], + "source": [ + "from ax import *\n", + "\n", + "\n", + "def make_branin_experiment_with_runner_and_metric() -> Experiment:\n", + " parameters = [\n", + " RangeParameter(\n", + " name=\"x1\",\n", + " parameter_type=ParameterType.FLOAT,\n", + " lower=-5,\n", + " upper=10,\n", + " ),\n", + " RangeParameter(\n", + " name=\"x2\",\n", + " parameter_type=ParameterType.FLOAT,\n", + " lower=0,\n", + " upper=15,\n", + " ),\n", + " ]\n", + "\n", + " objective = Objective(metric=BraninForMockJobMetric(name=\"branin\"), minimize=True)\n", + "\n", + " return Experiment(\n", + " name=\"branin_test_experiment\",\n", + " search_space=SearchSpace(parameters=parameters),\n", + " optimization_config=OptimizationConfig(objective=objective),\n", + " runner=MockJobRunner(),\n", + " is_test=True, # Marking this experiment as a test experiment.\n", + " )\n", + "\n", + "\n", + "experiment = make_branin_experiment_with_runner_and_metric()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "d28afea7-6c3f-4813-af4e-253692718015", + "showInput": false + }, + "source": [ + "## 4. Setting up a `Scheduler`" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "db14819c-a219-483d-ba06-60d30294ad94", + "showInput": false + }, + "source": [ + "### 4A. Auto-selecting a generation strategy\n", + "\n", + "A `Scheduler` requires an Ax `GenerationStrategy` specifying the algorithm to use for the optimization. Here we use the `choose_generation_strategy` utility that auto-picks a generation strategy based on the search space properties. To construct a custom generation strategy instead, refer to the [\"Generation Strategy\" tutorial](https://ax.dev/tutorials/generation_strategy.html).\n", + "\n", + "Importantly, a generation strategy in Ax limits allowed parallelism levels for each generation step it contains. If you would like the `Scheduler` to ensure parallelism limitations, set `max_examples` on each generation step in your generation strategy." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646325042632, + "executionStopTime": 1646325042699, + "originalKey": "d699d3e9-85d3-40f3-822f-ece6a6cc58e3", + "requestMsgId": "d699d3e9-85d3-40f3-822f-ece6a6cc58e3", + "scrolled": true + }, + "outputs": [], + "source": [ + "from ax.modelbridge.dispatch_utils import choose_generation_strategy\n", + "\n", + "generation_strategy = choose_generation_strategy(\n", + " search_space=experiment.search_space,\n", + " max_parallelism_cap=3,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "452f36d1-c7d8-477a-87d9-1b9767ace072", + "showInput": false + }, + "source": [ + "Now we have all the components needed to start the scheduler:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646325042718, + "executionStopTime": 1646325042829, + "hidden_ranges": [], + "originalKey": "139e2f4d-ee86-425b-bece-697ed21c2316", + "requestMsgId": "139e2f4d-ee86-425b-bece-697ed21c2316" + }, + "outputs": [], + "source": [ + "from ax.service.scheduler import Scheduler, SchedulerOptions\n", + "\n", + "\n", + "scheduler = Scheduler(\n", + " experiment=experiment,\n", + " generation_strategy=generation_strategy,\n", + " options=SchedulerOptions(),\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 4B. Optional: Defining a plotting function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "from ax.plot.trace import optimization_trace_single_method\n", + "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", + "\n", + "init_notebook_plotting()\n", + "\n", + "\n", + "def get_plot():\n", + " best_objectives = np.array(\n", + " [[trial.objective_mean for trial in scheduler.experiment.trials.values()]]\n", + " )\n", + " best_objective_plot = optimization_trace_single_method(\n", + " y=np.minimum.accumulate(best_objectives, axis=1),\n", + " title=\"Model performance vs. # of iterations\",\n", + " ylabel=\"Y\",\n", + " )\n", + " return best_objective_plot" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "f8a2cc5b-f289-497b-80b5-6807d85137b5", + "showInput": false + }, + "source": [ + "## 5. Running the optimization\n", + "\n", + "Once the `Scheduler` instance is set up, user can execute `run_n_trials` as many times as needed, and each execution will add up to the specified `max_trials` trials to the experiment. The number of trials actually run might be less than `max_trials` if the optimization was concluded (e.g. there are no more points in the search space)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "scheduler.run_n_trials(max_trials=3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_objective_plot = get_plot()\n", + "render(best_objective_plot)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "e3740875-5b3c-456d-a674-c2c78dab0e0d", + "showInput": false + }, + "source": [ + "We can examine `experiment` to see that it now has three trials:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646325045492, + "executionStopTime": 1646325045752, + "originalKey": "0ff23f6f-3011-4962-a691-9187f3e8b222", + "requestMsgId": "0ff23f6f-3011-4962-a691-9187f3e8b222" + }, + "outputs": [], + "source": [ + "from ax.service.utils.report_utils import exp_to_df\n", + "\n", + "exp_to_df(experiment)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "c2888bcc-0c82-4f24-bcb6-105c7e9c4e77", + "showInput": false + }, + "source": [ + "Now we can run `run_n_trials` again to add three more trials to the experiment (this time, without plotting)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646325045788, + "executionStopTime": 1646325048325, + "originalKey": "e76eb807-0a6c-45bc-a00f-e753ae8ef6db", + "requestMsgId": "e76eb807-0a6c-45bc-a00f-e753ae8ef6db", + "scrolled": true + }, + "outputs": [], + "source": [ + "scheduler.run_n_trials(max_trials=3)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_objective_plot = get_plot()\n", + "render(best_objective_plot)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "bee52b5d-a5fe-4554-b294-da9b83e8ff02", + "showInput": false + }, + "source": [ + "Examiniming the experiment, we now see 6 trials, one of which is produced by Bayesian optimization (GPEI):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646325048364, + "executionStopTime": 1646325048529, + "originalKey": "39204bbb-757b-4dfb-a685-5d540e621ec9", + "requestMsgId": "39204bbb-757b-4dfb-a685-5d540e621ec9" + }, + "outputs": [], + "source": [ + "exp_to_df(experiment)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "bf89e55c-08cf-480c-914a-2f0c682f74fd", + "showInput": false + }, + "source": [ + "For each call to `run_n_trials`, one can specify a timeout; if `run_n_trials` has been running for too long without finishing its `max_trials`, the operation will exit gracefully:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646325048565, + "executionStopTime": 1646325049269, + "originalKey": "5b07d1f4-af03-4652-8ed2-bb772b077305", + "requestMsgId": "5b07d1f4-af03-4652-8ed2-bb772b077305" + }, + "outputs": [], + "source": [ + "scheduler.run_n_trials(max_trials=3, timeout_hours=0.00001)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_objective_plot = get_plot()\n", + "render(best_objective_plot)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "6363db46-3b18-4a8b-8c0f-3e290806592b", + "showInput": false + }, + "source": [ + "## 6. Leveraging SQL storage and experiment resumption\n", + "\n", + "When a scheduler is SQL-enabled, it will automatically save all updates it makes to the experiment in the course of the optimization. The experiment can then be resumed in the event of a crash or after a pause. The scheduler should be stateless and therefore, the scheduler itself is not saved in the database.\n", + "\n", + "To store state of optimization to an SQL backend, first follow [setup instructions](https://ax.dev/docs/storage.html#sql) on Ax website. Having set up the SQL backend, pass `DBSettings` to the `Scheduler` on instantiation (note that SQLAlchemy dependency will have to be installed – for installation, refer to [optional dependencies](https://ax.dev/docs/installation.html#optional-dependencies) on Ax website):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646325049292, + "executionStopTime": 1646325049522, + "hidden_ranges": [], + "originalKey": "c89a6d00-b660-4370-93a6-b46edfc58e07", + "requestMsgId": "c89a6d00-b660-4370-93a6-b46edfc58e07" + }, + "outputs": [], + "source": [ + "from ax.storage.registry_bundle import RegistryBundle\n", + "from ax.storage.sqa_store.db import (\n", + " create_all_tables,\n", + " get_engine,\n", + " init_engine_and_session_factory,\n", + ")\n", + "from ax.storage.sqa_store.decoder import Decoder\n", + "from ax.storage.sqa_store.encoder import Encoder\n", + "from ax.storage.sqa_store.sqa_config import SQAConfig\n", + "from ax.storage.sqa_store.structs import DBSettings\n", + "\n", + "bundle = RegistryBundle(\n", + " metric_clss={BraninForMockJobMetric: None}, runner_clss={MockJobRunner: None}\n", + ")\n", + "\n", + "# URL is of the form \"dialect+driver://username:password@host:port/database\".\n", + "# Instead of URL, can provide a `creator function`; can specify custom encoders/decoders if necessary.\n", + "db_settings = DBSettings(\n", + " url=\"sqlite:///foo.db\",\n", + " encoder=bundle.encoder,\n", + " decoder=bundle.decoder,\n", + ")\n", + "\n", + "# The following lines are only necessary because it is the first time we are using this database\n", + "# in practice, you will not need to run these lines every time you initialize your scheduler\n", + "init_engine_and_session_factory(url=db_settings.url)\n", + "engine = get_engine()\n", + "create_all_tables(engine)\n", + "\n", + "stored_experiment = make_branin_experiment_with_runner_and_metric()\n", + "generation_strategy = choose_generation_strategy(search_space=experiment.search_space)\n", + "\n", + "scheduler_with_storage = Scheduler(\n", + " experiment=stored_experiment,\n", + " generation_strategy=generation_strategy,\n", + " options=SchedulerOptions(),\n", + " db_settings=db_settings,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "6939cf6e-5f6b-4a61-a807-f2fea1c7f5ea", + "showInput": false + }, + "source": [ + "To resume a stored experiment:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646325049666, + "executionStopTime": 1646325049932, + "hidden_ranges": [], + "originalKey": "351e7fca-4332-41ec-ad7d-6a143e0000ef", + "requestMsgId": "351e7fca-4332-41ec-ad7d-6a143e0000ef" + }, + "outputs": [], + "source": [ + "reloaded_experiment_scheduler = Scheduler.from_stored_experiment(\n", + " experiment_name=\"branin_test_experiment\",\n", + " options=SchedulerOptions(),\n", + " # `DBSettings` are also required here so scheduler has access to the\n", + " # database, from which it needs to load the experiment.\n", + " db_settings=db_settings,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "e4064b5c-3dc0-4be5-bd34-63804ab19047", + "showInput": false + }, + "source": [ + "With the newly reloaded experiment, the `Scheduler` can continue the optimization:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646325049943, + "executionStopTime": 1646325050416, + "originalKey": "6dddf6e6-1fd3-4e23-a88b-7b964db9b20d", + "requestMsgId": "6dddf6e6-1fd3-4e23-a88b-7b964db9b20d" + }, + "outputs": [], + "source": [ + "reloaded_experiment_scheduler.run_n_trials(max_trials=3)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "e3f24c9e-3da1-4ee0-ab1c-741f624a6014", + "showInput": false + }, + "source": [ + "## 7. Configuring the scheduler with `SchedulerOptions`, like early stopping\n", + "\n", + "`Scheduler` exposes many options to configure the exact settings of the closed-loop optimization to perform. A few notable ones are:\n", + "- `trial_type` –– currently only `Trial` and not `BatchTrial` is supported, but support for `BatchTrial`-s will follow,\n", + "- `tolerated_trial_failure_rate` and `min_failed_trials_for_failure_rate_check` –– together these two settings control how the scheduler monitors the failure rate among trial runs it deploys. Once `min_failed_trials_for_failure_rate_check` is deployed, the scheduler will start checking whether the ratio of failed to total trials is greater than `tolerated_trial_failure_rate`, and if it is, scheduler will exit the optimization with a `FailureRateExceededError`,\n", + "- `ttl_seconds_for_trials` –– sometimes a failure in a trial run means that it will be difficult to query its status (e.g. due to a crash). If this setting is specified, the Ax `Experiment` will automatically mark trials that have been running for too long (more than their 'time-to-live' (TTL) seconds) as failed,\n", + "- `run_trials_in_batches` –– if `True`, the scheduler will attempt to run trials not by calling `Scheduler.run_trial` in a loop, but by calling `Scheduler.run_trials` on all ready-to-deploy trials at once. This could allow for saving compute in cases where the deployment operation has large overhead and deploying many trials at once saves compute. Note that using this option successfully will require your scheduler subclass to implement `MySchedulerSubclass.run_trials` and `MySchedulerSubclass.poll_available_capacity`.\n", + "- `early_stopping_strategy` -- determines whether a trial should be stopped given the current state of the experiment, so that less promising trials can be terminated quickly. For more on this, see the Trial-Level Early Stopping tutorial: https://ax.dev/tutorials/early_stopping/early_stopping.html\n", + "- `global_stopping_strategy` -- determines whether the full optimization should be stopped or not, so that the run terminates when little progress is being made. A `global_stopping_strategy` instance can be passed to `SchedulerOptions` just as it is passed to `AxClient`, as illustrated in the tutorial on Global Stopping Strategy with AxClient: https://ax.dev/tutorials/gss.html\n", + "\n", + "The rest of the options are described in the docstring below:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646325050451, + "executionStopTime": 1646325050569, + "originalKey": "b9645271-88cd-43f1-9e07-83afe722696d", + "requestMsgId": "b9645271-88cd-43f1-9e07-83afe722696d" + }, + "outputs": [], + "source": [ + "print(SchedulerOptions.__doc__)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "eef1a121-1eee-4302-b586-85958f177b04", + "showInput": false + }, + "source": [ + "## 8. Advanced functionality\n", + "\n", + "### 8a. Reporting results to an external system\n", + "\n", + "The `Scheduler` can report the optimization result to an external system each time there are new completed trials if the user-implemented subclass implements `MySchedulerSubclass.report_results` to do so. For example, the folliwing method:\n", + "\n", + "```\n", + "class MySchedulerSubclass(Scheduler):\n", + " ...\n", + " \n", + " def report_results(self, force_refit: bool = False):\n", + " write_to_external_database(len(self.experiment.trials))\n", + " return (True, {}) # Returns optimization success status and optional dict of outputs.\n", + "```\n", + "could be used to record number of trials in experiment so far in an external database.\n", + "\n", + "Since `report_results` is an instance method, it has access to `self.experiment` and `self.generation_strategy`, which contain all the information about the state of the optimization thus far." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "12b60db0-52d8-4337-ad1c-77fdc3c2452b", + "showInput": false + }, + "source": [ + "### 8b. Using `run_trials_and_yield_results` generator method\n", + "\n", + "In some systems it's beneficial to have greater control over `Scheduler.run_n_trials` instead of just starting it and needing to wait for it to run all the way to completion before having access to its output. For this purpose, the `Scheduler` implements a generator method `run_trials_and_yield_results`, which yields the output of `Scheduler.report_results` each time there are new completed trials and can be used like so:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1646325050601, + "executionStopTime": 1646325050672, + "hidden_ranges": [], + "originalKey": "77bf9ea5-5ec2-4d65-a723-3c0dfeea144b", + "requestMsgId": "77bf9ea5-5ec2-4d65-a723-3c0dfeea144b" + }, + "outputs": [], + "source": [ + "class ResultReportingScheduler(Scheduler):\n", + " def report_results(self, force_refit: bool = False):\n", + " return True, {\n", + " \"trials so far\": len(self.experiment.trials),\n", + " \"currently producing trials from generation step\": self.generation_strategy._curr.model_name,\n", + " \"running trials\": [t.index for t in self.running_trials],\n", + " }" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1646325050680, + "executionStopTime": 1646325057409, + "originalKey": "c037044e-79d8-4c36-92e9-d9f360a9f5fe", + "requestMsgId": "c037044e-79d8-4c36-92e9-d9f360a9f5fe" + }, + "outputs": [], + "source": [ + "experiment = make_branin_experiment_with_runner_and_metric()\n", + "scheduler = ResultReportingScheduler(\n", + " experiment=experiment,\n", + " generation_strategy=choose_generation_strategy(\n", + " search_space=experiment.search_space,\n", + " max_parallelism_cap=3,\n", + " ),\n", + " options=SchedulerOptions(),\n", + ")\n", + "\n", + "for reported_result in scheduler.run_trials_and_yield_results(max_trials=6):\n", + " print(\"Reported result: \", reported_result)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Clean up to enable running the tutorial repeatedly with\n", + "# the same results. You wouldn't do this if you wanted to\n", + "# keep adding data to the same experiment.\n", + "from ax.storage.sqa_store.delete import delete_experiment\n", + "\n", + "delete_experiment(\"branin_test_experiment\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "custom": { + "cells": [], + "metadata": { + "fileHeader": "", "kernelspec": { - "name": "python3", - "display_name": "python3" + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.15" } + }, + "nbformat": 4, + "nbformat_minor": 2 + }, + "indentAmount": 2, + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "nbformat": 4, - "nbformat_minor": 2 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/sebo.ipynb b/tutorials/sebo.ipynb index 87ab7347de2..6c527f9e3a8 100644 --- a/tutorials/sebo.ipynb +++ b/tutorials/sebo.ipynb @@ -1,1652 +1,627 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "collapsed": true, - "customInput": null, - "jupyter": { - "outputs_hidden": true - }, - "originalKey": "d3a0136e-94fa-477c-a839-20e5b7f1cdd2", - "showInput": false - }, - "source": [ - "# Sparsity Exploration Bayesian Optimization (SEBO) Ax API \n", - "\n", - "This tutorial introduces the Sparsity Exploration Bayesian Optimization (SEBO) method and demonstrates how to utilize it using the Ax API. SEBO is designed to enhance Bayesian Optimization (BO) by taking the interpretability and simplicity of configurations into consideration. In essence, SEBO incorporates sparsity, modeled as the $L_0$ norm, as an additional objective in BO. By employing multi-objective optimization techniques such as Expected Hyper-Volume Improvement, SEBO enables the joint optimization of objectives while simultaneously incorporating feature-level sparsity. This allows users to efficiently explore different trade-offs between objectives and sparsity.\n", - "\n", - "\n", - "For a more detailed understanding of the SEBO algorithm, please refer to the following publication:\n", - "\n", - "[1] [S. Liu, Q. Feng, D. Eriksson, B. Letham and E. Bakshy. Sparse Bayesian Optimization. International Conference on Artificial Intelligence and Statistics, 2023.](https://proceedings.mlr.press/v206/liu23b/liu23b.pdf)\n", - "\n", - "By following this tutorial, you will learn how to leverage the SEBO method through the Ax API, empowering you to effectively balance objectives and sparsity in your optimization tasks. Let's get started!" - ] + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "customInput": null, + "jupyter": { + "outputs_hidden": true }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false, - "customOutput": null, - "executionStartTime": 1689117385062, - "executionStopTime": 1689117389874, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "cea96143-019a-41c1-a388-545f48992db9", - "requestMsgId": "c2c22a5d-aee0-4a1e-98d9-b360aa1851ff", - "showInput": true - }, - "outputs": [], - "source": [ - "import os\n", - "import warnings\n", - "import math\n", - "\n", - "import numpy as np\n", - "import matplotlib\n", - "import matplotlib.pyplot as plt\n", - "import torch\n", - "from ax import Data, Experiment, ParameterType, RangeParameter, SearchSpace\n", - "from ax.core.objective import Objective\n", - "from ax.core.optimization_config import OptimizationConfig\n", - "from ax.metrics.noisy_function import NoisyFunctionMetric\n", - "from ax.modelbridge.generation_strategy import GenerationStrategy, GenerationStep\n", - "from ax.modelbridge.registry import Models\n", - "from ax.models.torch.botorch_modular.sebo import SEBOAcquisition\n", - "from ax.models.torch.botorch_modular.surrogate import Surrogate\n", - "from ax.runners.synthetic import SyntheticRunner\n", - "from ax.service.ax_client import AxClient, ObjectiveProperties\n", - "from ax.utils.common.typeutils import checked_cast\n", - "from botorch.acquisition.multi_objective import qNoisyExpectedHypervolumeImprovement\n", - "from botorch.models import SingleTaskGP, FixedNoiseGP, SaasFullyBayesianSingleTaskGP\n", - "%matplotlib inline\n", - "matplotlib.rcParams.update({\"font.size\": 16})\n", - "\n", - "warnings.filterwarnings('ignore')\n", - "SMOKE_TEST = os.environ.get(\"SMOKE_TEST\")\n", - "\n", - "torch.manual_seed(12345) # To always get the same Sobol points\n", - "tkwargs = {\n", - " \"dtype\": torch.double,\n", - " \"device\": torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n", - "}" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "7f07af01-ad58-4cfb-beca-f624310d278d", - "showInput": false - }, - "source": [ - "# Demo of using Developer API" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "c8a27a2f-1120-4894-9302-48bfde402268", - "showInput": false - }, - "source": [ - "## Problem Setup \n", - "\n", - "In this simple experiment we use the Branin function embedded in a 10-dimensional space. Additional resources:\n", - "- To set up a custom metric for your problem, refer to the dedicated section of the Developer API tutorial: https://ax.dev/tutorials/gpei_hartmann_developer.html#8.-Defining-custom-metrics.\n", - "- To avoid needing to setup up custom metrics by Ax Service API: https://ax.dev/tutorials/gpei_hartmann_service.html." - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1689117390036, - "executionStopTime": 1689117390038, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "e91fc838-9f47-44f1-99ac-4477df208566", - "requestMsgId": "1591e6b0-fa9b-4b9f-be72-683dccbe923a", - "showInput": true - }, - "outputs": [], - "source": [ - "aug_dim = 8 \n", - "\n", - "# evaluation function \n", - "def branin_augment(x_vec, augment_dim):\n", - " assert len(x_vec) == augment_dim\n", - " x1, x2 = (\n", - " 15 * x_vec[0] - 5,\n", - " 15 * x_vec[1],\n", - " ) # Only dimensions 0 and augment_dim-1 affect the value of the function\n", - " t1 = x2 - 5.1 / (4 * math.pi**2) * x1**2 + 5 / math.pi * x1 - 6\n", - " t2 = 10 * (1 - 1 / (8 * math.pi)) * np.cos(x1)\n", - " return t1**2 + t2 + 10" - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1689117390518, - "executionStopTime": 1689117390540, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "850830c6-509f-4087-bce8-da0be4fd48ef", - "requestMsgId": "56726053-205d-4d7e-b1b5-1a76324188ee", - "showInput": true - }, - "outputs": [], - "source": [ - "class AugBraninMetric(NoisyFunctionMetric):\n", - " def f(self, x: np.ndarray) -> float:\n", - " return checked_cast(float, branin_augment(x_vec=x, augment_dim=aug_dim))\n", - "\n", - "\n", - "# Create search space in Ax \n", - "search_space = SearchSpace(\n", - " parameters=[\n", - " RangeParameter(\n", - " name=f\"x{i}\",\n", - " parameter_type=ParameterType.FLOAT, \n", - " lower=0.0, upper=1.0\n", - " )\n", - " for i in range(aug_dim)\n", - " ]\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1689117391899, - "executionStopTime": 1689117391915, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "d039b709-67c6-475a-96ce-290f869e0f88", - "requestMsgId": "3e23ed64-7d10-430b-b790-91a0c7cf72fe", - "showInput": true - }, - "outputs": [], - "source": [ - "# Create optimization goals \n", - "optimization_config = OptimizationConfig(\n", - " objective=Objective(\n", - " metric=AugBraninMetric(\n", - " name=\"objective\",\n", - " param_names=[f\"x{i}\" for i in range(aug_dim)],\n", - " noise_sd=None, # Set noise_sd=None if you want to learn the noise, otherwise it defaults to 1e-6\n", - " ),\n", - " minimize=True,\n", - " )\n", - ")\n", - "\n", - "# Experiment\n", - "experiment = Experiment(\n", - " name=\"sebo_experiment\",\n", - " search_space=search_space,\n", - " optimization_config=optimization_config,\n", - " runner=SyntheticRunner(),\n", - ")\n", - "\n", - "# target sparse point to regularize towards to. Here we set target sparse value being zero for all the parameters. \n", - "target_point = torch.tensor([0 for _ in range(aug_dim)], **tkwargs)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "e57edb00-eafc-4d07-bdb9-e8cf073b4caa", - "showInput": false - }, - "source": [ - "## Run optimization loop" - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1689117395051, - "executionStopTime": 1689117395069, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "c4848148-bff5-44a7-9ad5-41e78ccb413c", - "requestMsgId": "8aa87d22-bf89-471f-be9f-7c31f7b8bd62", - "showInput": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Doing 30 evaluations\n" - ] - } - ], - "source": [ - "N_INIT = 10\n", - "\n", - "if SMOKE_TEST:\n", - " N_BATCHES = 1\n", - " BATCH_SIZE = 1\n", - " SURROGATE_CLASS = None # Auto-pick SingleTaskGP / FixedNoiseGP\n", - "else:\n", - " N_BATCHES = 4\n", - " BATCH_SIZE = 5\n", - " SURROGATE_CLASS = SaasFullyBayesianSingleTaskGP\n", - "\n", - "print(f\"Doing {N_INIT + N_BATCHES * BATCH_SIZE} evaluations\")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1689117396326, - "executionStopTime": 1689117396376, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "b260d85f-2797-44e3-840a-86587534b589", - "requestMsgId": "2cc516e3-b16e-40ca-805f-dcd792c92fa6", - "showInput": true - }, - "outputs": [], - "source": [ - "# Initial Sobol points\n", - "sobol = Models.SOBOL(search_space=experiment.search_space)\n", - "for _ in range(N_INIT):\n", - " experiment.new_trial(sobol.gen(1)).run()" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1689117396900, - "executionStopTime": 1689124188959, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "7c198035-add2-4717-be27-4fb67c4d1782", - "requestMsgId": "d844fa20-0adf-4ba3-ace5-7253ba678db2", - "showInput": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 0, Best so far: 2.494\n", - "Iteration: 1, Best so far: 2.494\n", - "Iteration: 2, Best so far: 1.964\n", - "Iteration: 3, Best so far: 0.412\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 4, Best so far: 2.494\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 5, Best so far: 2.494\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 6, Best so far: 2.494\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 7, Best so far: 2.494\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 8, Best so far: 2.494\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 9, Best so far: 2.494\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 10, Best so far: 2.494\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 11, Best so far: 1.990\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 12, Best so far: 1.990\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 13, Best so far: 1.990\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 14, Best so far: 1.990\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 15, Best so far: 1.990\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 16, Best so far: 0.662\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 17, Best so far: 0.662\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 18, Best so far: 0.453\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 19, Best so far: 0.453\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 20, Best so far: 0.453\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 21, Best so far: 0.424\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 22, Best so far: 0.424\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 23, Best so far: 0.424\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 24, Best so far: 0.424\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 25, Best so far: 0.424\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 26, Best so far: 0.424\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 27, Best so far: 0.424\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 28, Best so far: 0.424\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 29, Best so far: 0.424\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 30, Best so far: 0.416\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 31, Best so far: 0.416\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 32, Best so far: 0.408\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 33, Best so far: 0.408\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 34, Best so far: 0.408\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 35, Best so far: 0.408\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 36, Best so far: 0.408\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 37, Best so far: 0.408\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 38, Best so far: 0.408\n" - ] - }, - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Iteration: 39, Best so far: 0.408\n" - ] - } - ], - "source": [ - "data = experiment.fetch_data()\n", - "\n", - "for i in range(N_BATCHES):\n", - "\n", - " model = Models.BOTORCH_MODULAR(\n", - " experiment=experiment, \n", - " data=data,\n", - " surrogate=Surrogate(botorch_model_class=SURROGATE_CLASS), # can use SAASGP (i.e. SaasFullyBayesianSingleTaskGP) for high-dim cases\n", - " search_space=experiment.search_space,\n", - " botorch_acqf_class=qNoisyExpectedHypervolumeImprovement,\n", - " acquisition_class=SEBOAcquisition,\n", - " acquisition_options={\n", - " \"penalty\": \"L0_norm\", # it can be L0_norm or L1_norm. \n", - " \"target_point\": target_point, \n", - " \"sparsity_threshold\": aug_dim,\n", - " },\n", - " torch_device=tkwargs['device'],\n", - " )\n", - "\n", - " generator_run = model.gen(BATCH_SIZE)\n", - " trial = experiment.new_batch_trial(generator_run=generator_run)\n", - " trial.run()\n", - "\n", - " new_data = trial.fetch_data(metrics=list(experiment.metrics.values()))\n", - " data = Data.from_multiple_data([data, new_data])\n", - " print(f\"Iteration: {i}, Best so far: {data.df['mean'].min():.3f}\")" - ] + "originalKey": "d3a0136e-94fa-477c-a839-20e5b7f1cdd2", + "showInput": false + }, + "source": [ + "# Sparsity Exploration Bayesian Optimization (SEBO) Ax API \n", + "\n", + "This tutorial introduces the Sparsity Exploration Bayesian Optimization (SEBO) method and demonstrates how to utilize it using the Ax API. SEBO is designed to enhance Bayesian Optimization (BO) by taking the interpretability and simplicity of configurations into consideration. In essence, SEBO incorporates sparsity, modeled as the $L_0$ norm, as an additional objective in BO. By employing multi-objective optimization techniques such as Expected Hyper-Volume Improvement, SEBO enables the joint optimization of objectives while simultaneously incorporating feature-level sparsity. This allows users to efficiently explore different trade-offs between objectives and sparsity.\n", + "\n", + "\n", + "For a more detailed understanding of the SEBO algorithm, please refer to the following publication:\n", + "\n", + "[1] [S. Liu, Q. Feng, D. Eriksson, B. Letham and E. Bakshy. Sparse Bayesian Optimization. International Conference on Artificial Intelligence and Statistics, 2023.](https://proceedings.mlr.press/v206/liu23b/liu23b.pdf)\n", + "\n", + "By following this tutorial, you will learn how to leverage the SEBO method through the Ax API, empowering you to effectively balance objectives and sparsity in your optimization tasks. Let's get started!" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customOutput": null, + "executionStartTime": 1689117385062, + "executionStopTime": 1689117389874, + "jupyter": { + "outputs_hidden": false }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "7998635d-6750-4825-b93d-c7b61f74c3c5", - "showInput": false - }, - "source": [ - "## Plot sparisty vs objective \n", - "\n", - "Visualize the objective and sparsity trade-offs using SEBO. Each point represent designs along the Pareto frontier found by SEBO. The x-axis corresponds to the number of active parameters used, i.e.\n", - "non-sparse parameters, and the y-axis corresponds the best identified objective values. Based on this, decision-makers balance both simplicity/interpretability of generated policies and optimization performance when deciding which configuration to use." - ] + "originalKey": "cea96143-019a-41c1-a388-545f48992db9", + "requestMsgId": "c2c22a5d-aee0-4a1e-98d9-b360aa1851ff", + "showInput": true + }, + "outputs": [], + "source": [ + "import math\n", + "import os\n", + "import warnings\n", + "\n", + "import matplotlib\n", + "import matplotlib.pyplot as plt\n", + "\n", + "import numpy as np\n", + "import torch\n", + "from ax import Data, Experiment, ParameterType, RangeParameter, SearchSpace\n", + "from ax.core.objective import Objective\n", + "from ax.core.optimization_config import OptimizationConfig\n", + "from ax.metrics.noisy_function import NoisyFunctionMetric\n", + "from ax.modelbridge.generation_strategy import GenerationStep, GenerationStrategy\n", + "from ax.modelbridge.registry import Models\n", + "from ax.models.torch.botorch_modular.sebo import SEBOAcquisition\n", + "from ax.models.torch.botorch_modular.surrogate import Surrogate\n", + "from ax.runners.synthetic import SyntheticRunner\n", + "from ax.service.ax_client import AxClient, ObjectiveProperties\n", + "from ax.utils.common.typeutils import checked_cast\n", + "from botorch.acquisition.multi_objective import qNoisyExpectedHypervolumeImprovement\n", + "from botorch.models import FixedNoiseGP, SaasFullyBayesianSingleTaskGP, SingleTaskGP" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "matplotlib.rcParams.update({\"font.size\": 16})\n", + "\n", + "warnings.filterwarnings('ignore')\n", + "SMOKE_TEST = os.environ.get(\"SMOKE_TEST\")\n", + "\n", + "torch.manual_seed(12345) # To always get the same Sobol points\n", + "tkwargs = {\n", + " \"dtype\": torch.double,\n", + " \"device\": torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n", + "}" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "7f07af01-ad58-4cfb-beca-f624310d278d", + "showInput": false + }, + "source": [ + "# Demo of using Developer API" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "c8a27a2f-1120-4894-9302-48bfde402268", + "showInput": false + }, + "source": [ + "## Problem Setup \n", + "\n", + "In this simple experiment we use the Branin function embedded in a 10-dimensional space. Additional resources:\n", + "- To set up a custom metric for your problem, refer to the dedicated section of the Developer API tutorial: https://ax.dev/tutorials/gpei_hartmann_developer.html#8.-Defining-custom-metrics.\n", + "- To avoid needing to setup up custom metrics by Ax Service API: https://ax.dev/tutorials/gpei_hartmann_service.html." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "executionStartTime": 1689117390036, + "executionStopTime": 1689117390038, + "jupyter": { + "outputs_hidden": false }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1689124189044, - "executionStopTime": 1689124189182, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "416ccd12-51a1-4bfe-9e10-436cd88ec6be", - "requestMsgId": "5143ae57-1d0d-4f9d-bc9d-9d151f3e9af0", - "showInput": true - }, - "outputs": [], - "source": [ - "def nnz_exact(x, sparse_point):\n", - " return len(x) - (np.array(x) == np.array(sparse_point)).sum()\n", - "\n", - " \n", - "df = data.df\n", - "df['L0_norm'] = df['arm_name'].apply(lambda d: nnz_exact(list(experiment.arms_by_name[d].parameters.values()), [0 for _ in range(aug_dim)]) )" - ] + "originalKey": "e91fc838-9f47-44f1-99ac-4477df208566", + "requestMsgId": "1591e6b0-fa9b-4b9f-be72-683dccbe923a", + "showInput": true + }, + "outputs": [], + "source": [ + "aug_dim = 8 \n", + "\n", + "# evaluation function \n", + "def branin_augment(x_vec, augment_dim):\n", + " assert len(x_vec) == augment_dim\n", + " x1, x2 = (\n", + " 15 * x_vec[0] - 5,\n", + " 15 * x_vec[1],\n", + " ) # Only dimensions 0 and augment_dim-1 affect the value of the function\n", + " t1 = x2 - 5.1 / (4 * math.pi**2) * x1**2 + 5 / math.pi * x1 - 6\n", + " t2 = 10 * (1 - 1 / (8 * math.pi)) * np.cos(x1)\n", + " return t1**2 + t2 + 10" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1689117390518, + "executionStopTime": 1689117390540, + "jupyter": { + "outputs_hidden": false }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1689124189219, - "executionStopTime": 1689124189321, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "97b96822-7d7f-4a5d-8458-01ff890d2fde", - "requestMsgId": "34abdf8d-6f0c-48a1-8700-8e2c3075a085", - "showInput": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{1: 5.188541393850756,\n", - " 2: 0.41219620231106724,\n", - " 3: 0.41219620231106724,\n", - " 4: 0.41219620231106724,\n", - " 5: 0.41219620231106724,\n", - " 6: 0.41219620231106724,\n", - " 7: 0.41219620231106724,\n", - " 8: 0.41219620231106724}" - ] - }, - "execution_count": 9, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "result_by_sparsity = {l: df[df.L0_norm <= l]['mean'].min() for l in range(1, aug_dim+1)}\n", - "result_by_sparsity" - ] + "originalKey": "850830c6-509f-4087-bce8-da0be4fd48ef", + "requestMsgId": "56726053-205d-4d7e-b1b5-1a76324188ee", + "showInput": true + }, + "outputs": [], + "source": [ + "class AugBraninMetric(NoisyFunctionMetric):\n", + " def f(self, x: np.ndarray) -> float:\n", + " return checked_cast(float, branin_augment(x_vec=x, augment_dim=aug_dim))\n", + "\n", + "\n", + "# Create search space in Ax \n", + "search_space = SearchSpace(\n", + " parameters=[\n", + " RangeParameter(\n", + " name=f\"x{i}\",\n", + " parameter_type=ParameterType.FLOAT, \n", + " lower=0.0, upper=1.0\n", + " )\n", + " for i in range(aug_dim)\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "executionStartTime": 1689117391899, + "executionStopTime": 1689117391915, + "jupyter": { + "outputs_hidden": false }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1689134836494, - "executionStopTime": 1689134837813, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "7193e2b0-e192-439a-b0d0-08a2029f64ca", - "requestMsgId": "f095d820-55e0-4201-8e3a-77f17b2155f1", - "showInput": true - }, - "outputs": [ - { - "data": { - "image/png": "iVBORw0KGgoAAAANSUhEUgAAArkAAAI/CAYAAABzt8FxAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8pXeV/AAAACXBIWXMAAA9hAAAPYQGoP6dpAABzSUlEQVR4nO3dd3gU1f7H8c+kkJAQQgmdSJEOISQC6gUVC6ioKKKioBSx61WsP/WqwLVdGxZUsNBUUBQpIqiAUqUIhGoUUYiAlNBbIKSc3x97d28wPbPZ2V3er+fZJ5udcr57dgifTM7MsYwxRgAAAEAQCXG6AAAAAMDbCLkAAAAIOoRcAAAABB1CLgAAAIIOIRcAAABBh5ALAACAoEPIBQAAQNAh5AIAACDoEHIBAAAQdAi5AOCH0tLSZFmWLMvSuHHjnC4HAAIOIReA35k/f74n4BX0qFSpkpo1a6ZbbrlFP/zwg9PlQlLDhg0L/azq1aunxMRE9evXTyNGjNBff/3ldLkeubm5mjRpkq655hrFx8crMjJSUVFRatSokXr37q1vvvnG6RIBlJFljDFOFwEAec2fP18XXnhhidfv16+fxowZo9DQ0HKsyrfS0tLUqFEjSdLYsWM1YMAAZwsqRsOGDfXnn3+WaN3Q0FD16NFDw4cPV8OGDcu3sCIcOHBAV199tRYtWlTker169dKECRMUERHho8oAeEOY0wUAQFHuvvtu3XPPPZ7vjTHav3+/li5dqtdff13p6en66KOPFB8fr+eee87BSr2rYcOGCsRzEHXr1tV3333n+T4rK0sHDhzQn3/+qSVLluiLL77QoUOHNHXqVH3//ff65JNPdNVVVzlS64033ugJuI0aNdKjjz6qhIQEZWVladWqVXrppZe0d+9effnll4qLi9OoUaMcqRNA2XAmF4DfyXsmd8iQIRo6dGiB66Wmpuqss87SiRMnFBMTo71796pChQo+rBRu7jO5DRo0UFpaWqHrHT16VEOGDNHw4cMlSRUrVtTChQvVvn17H1XqsnLlSnXo0EGS1LhxY61Zs0YxMTGnrLN161YlJibq4MGDCgkJ0c6dO1WzZk2f1gmg7BiTCyBgtWrVSldccYUk6ciRI/r1118drgjFqVSpkl577TX95z//kSQdP35ct912m8/rWLJkief54MGD8wVcSTrjjDM0cOBASa6xu8uXL/dZfQDsI+QCCGjucauSlJmZmW/5uHHjPBdBpaWlKTMzU2+88YbOOeccxcXFybKsU84Unzx5UjNmzNB9992nDh06qGrVqgoPD1f16tV19tlna+jQodq7d2+RNbkvwnKPo924caNuv/12NWzYUBEREapVq5Z69uypZcuWFbqP4u6uMHToUM9ySTpx4oReeeUVJScnKyYmRjExMerYsaPefvttZWdnF1mvEx577DGdffbZkqS1a9dq1qxZPm3/5MmTnueNGzcudL0zzzyzwG0A+D/G5AIIaHkvdjrjjDOKXHfv3r3q2bOn1qxZU+g6d9xxh8aPH5/v9f379+unn37STz/9pLffflvTp09Xp06diq1v6tSpuvnmm5WRkeF5LT09XdOmTdOMGTM0YcIE9e7du9j9FGX37t267LLL8r2vFStWaMWKFZo9e7amTZumkBD/Oa9hWZYeeOAB9enTR5I0bdo0de/e3WftN2/e3PN88+bNha73xx9/FLgNAP/nPz/xAKCUfv31V3399deSpHPOOUe1atUqcv1BgwZp7dq16tevn2bOnKlVq1Zp6tSpnjOKkpSdna3GjRvr4Ycf1qRJk7R06VKtWLFCkydP1l133aUKFSpo37596tmzp9LT04tsb/369erTp49q1aqlt99+W8uWLdPSpUs1dOhQRUZGKicnR3fccYf27Nljqx+uvfZapaam6v7779ecOXO0atUqTZw4US1btpQkzZgxQx988IGtNsrDJZdc4nle3B0OvO3SSy/1/BXgzTff1LFjx/Kts337ds9Z9M6dO6tNmza+LBGAXQYA/My8efOMJCPJ3H333Wb9+vWex7p168zChQvNSy+9ZGrXrm0kmdjYWLN06dIC9zV27FjPviSZDz/8sMi2f//9d5Obm1vo8nXr1plKlSoZSeapp54qcJ0GDRp42jvrrLPMoUOH8q3zySefeNYZPnx4vuVbtmzxLB87dmy+5UOGDPEsDw8PN/Pmzcu3zr59+0ytWrWMJNO2bdvC37QXuN9zgwYNSrVd/fr1jSQTFhaWb1ne48DOY8uWLQW2vXTpUhMXF2ckmTPPPNOMGjXKLF682MybN8+8+uqrpmbNmkaSady4sfntt9/K0CsAnETIBeB3ShpuQkJCzF133WU2btxY6L7yhtyLLrrIK/UNHjzYSDJt2rQpcHnekLt27doC18nN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pD755BNlZ2crOTlZ119/vdq3b68NGzboySefVFJSknbs2GGrjdMJIRcAAAQTWyF306ZNuvfeeyVJF110kVJTU5Wenl7o+hUqVFCvXr1kjNHs2bPtNK3XXntNe/fu1c8//6xvv/1WEydO1Pfff69t27apc+fO+v333/Xwww/bauN0QsgFAADBxFbIff3115Wdna3WrVtr1qxZatGiRbHbnHfeeZKk1TbT1Nlnn61q1arle7169ep64YUXJMl2kD6duMfhrl0r5eQ4WwsAAIBdtkLuDz/8IMuyNHjwYFWoUKFE2zRp0kSStG3bNjtNFykszHU9HRe3lVyzZlJUlHTsmPT7705XAwAAYI+tkLt9+3ZJUmJiYom3iY6OliRlZGTYabpQR44c0dChQyVJPXr0KJc2glFoqNS2res5QxYAAECgs3ULMcuyJJUusO7bt0+SFBsba6dpj9mzZ2vixInKzc3V7t27tXTpUh05ckSXXXaZXnrppSK3zczMVGaeG8MePnxYkpSVlaWsrCyv1FcUdxu+aKskEhNDtGxZqFauzFGvXrlOl1Msf+u/QEQf2kP/2Ucf2kP/2Ucf2uNE/5W0LVsht169etq0aZM2b97sGWtbnMWLF0uSGjdubKdpj9TUVI0fP/6U1/r06aPhw4cXG6RffPFFDRs2LN/rs2fPVlRUlFfqK4k5c+b4rK2ihIY2kNROc+fu03nnLXW6nBLzl/4LZPShPfSfffShPfSfffShPb7sv5KeXLVMYff7KoG77rpL77//vrp06aIffvjB83pISIgsy9L69evVqlUrz+uHDh1Sy5YttXv3bj322GN68cUXy9p0PllZWdq6daumT5+u5557TpZlaerUqTr//PML3aagM7nx8fHau3evKleu7LXaiqp5zpw56tq1q8LDw8u9veKsWmXp3HPDFBdn9Ndf2frviXq/5W/9F4joQ3voP/voQ3voP/voQ3uc6L/Dhw8rLi5Ohw4dKjKv2TqTe+edd+qDDz7QggULNG7cOA0YMKDQdfft26frrrtOu3btUnh4uO666y47TecTHh6uM888Uw899JA6deqkc889VzfffLM2btyoihUrFrhNREREgRenhYeH+/RA93V7hWnXzjU2d+9eS+np4apf3+mKSsZf+i+Q0Yf20H/20Yf20H/20Yf2+LL/StqOrQvPkpKS9MADD8gYo0GDBql37976/PPPPcuXLFmiiRMn6t5771WTJk20cOFCWZalp59+Wg0aNLDTdJHOPvtstWrVStu2bdPKlSvLrZ1gExkpuU+8c/EZAAAIZLbO5EquSRkyMzM1cuRITZ48WZMnT/ZckHbnnXd61nOPihg8eLCeeuopu80Wy30Xh6Imp0B+SUnS+vVSSop01VVOVwMAAFA2tqf1tSxL77zzjr777jt16dJFlmXJGHPKQ5LOPfdczZw5U8OHD7dddHH27t2rtWvXSpKaNWtW7u0FE2Y+AwAAwcD2mVy3rl27qmvXrjpy5IhWr16t9PR05eTkqHr16mrXrp3i4uK81ZRSU1O1evVq9erVS5GRkacs++2333TnnXcqMzNT55xzjhISErzW7umAkAsAAIKB10KuW0xMTJF3NPCG9PR03XzzzbrzzjuVlJSk+vXr6+TJk9q6datSUlKUm5urli1batKkSeVaRzBq1871detWad8+qXp1R8sBAAAoE6+HXF9o3bq1nn/+eS1atEi//vqrVq9eraysLFWrVk0XX3yxrr32Wg0cOJBpfcsgNlZq3FjavFlas0a6+GKnKwIAACi9gAy5NWrU0JNPPul0GUErOdkVclevJuQCAIDAZCvk3nrrrWXe1rIsjR492k7zKCdJSdLkyYzLBQAAgctWyB03bpzndmGlYYwh5PoxLj4DAACBzlbIPeOMM4oNuceOHdO+ffs8wTYuLk5RUVF2mkU5c4fcjRuljAyJjwsAAAQaWyE3LS2tROsdOHBAn376qZ555hlVqVJFX331lZo3b26naZSj2rVdj127pHXrpHPOcboiAACA0rE9GURJVK1aVffcc49+/PFHpaen6/LLL9eBAwd80TTKiCELAAAgkPkk5Lo1b95c999/v9LS0vTaa6/5smmUEiEXAAAEMp+GXEm65JJLJElTpkzxddMoBUIuAAAIZD4PuZUqVZIkbd261ddNoxTcIXfdOikry9laAAAASsvnIXf1f08NhoeH+7pplEKjRlLlytLJk9IvvzhdDQAAQOn4NORu2bJFQ4cOlWVZateunS+bRimFhEjuj4ghCwAAINDYuoXYRx99VOw6ubm5OnDggFauXKnp06crIyNDlmXprrvustM0fCApSVq40BVy+/d3uhoAAICSsxVyBwwYUKoZz4wxkqT7779fvXv3ttM0fICLzwAA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7LPPVqtWrbRt2zatXLnS6XL8ztSpUxUWFqZ3331XXbp0OeXx7bffSpJGjx6tLl266MYbb3S42sDUsmVLz/Pt27c7WIn/aty4cYHPC1pn586dPqkpGLiHKgwYMICL9ooxc+ZM7dmzR40bNy7wDhR5X3f6Fy0uPENAeuyxxzR8+HDFxsZq9uzZat++vdMlBYXo6GhJUnp6usOV+Kfs7GwtWLCg0OVpaWlKS0tTgwYNfFhV8HCPN5VOPWOJ/0lOTvbMsLd3794Cr17fu3evJNdV8Cheamqqli9fLsuyNHDgQKfL8Xtbt26VpCLH3Lqv7di/f79PaioMv64g4Dz++ON65ZVXFBsbqzlz5qhDhw5OlxQU9u7d65lvnGEf+R08eFDGNYFOvod7itBnn31WxhilpaU5W2yA+uyzzyS5/vNs3ry5w9X4J/eU5lLBZ8mysrI8v4h17NjRp7UFqtGjR0uSLrzwwkLPjuN/6tWrJ0n69ddfdejQoXzLs7KylJKSIklq1KiRT2v7O0IuAspTTz2ll156SVWqVCHgllJqaqomTJigEydO5Fv222+/6frrr1dmZqbOOeccJSQkOFAhgt2aNWv01VdfKTs7+5TXc3NzNXr0aD355JOSpPvvv99z303kN2TIEEnSiy++qGXLlnlez87O1sMPP6zNmzcrJiaGs5IlkJWVpU8++UQS98Ytqcsvv1zR0dE6fvy4br/9dh09etSz7OTJk3rwwQe1detWhYeH67rrrnOwUoYr+FRKSoruuecez/d//PGHJOm9997T119/7Xl96tSpTGhQgK+++krPP/+8JKlJkyZ65513ClwvLi5Or776qi9LCwjp6em6+eabdeeddyopKUn169fXyZMntXXrVqWkpCg3N1ctW7bUpEmTnC4VQSotLU09e/ZU1apVlZycrFq1aungwYPasGGD50+gN910kyfEoWAXX3yxnn32WT399NM677zz1LFjR9WuXVspKSlKS0tTxYoV9emnn6pWrVpOl+r3vv76a6Wnp6tKlSq69tprnS4nINSoUUOjRo3SwIED9cUXX2j+/Pnq0KGDwsPDtXLlSv31118KCQnRW2+95fyZcedu7HD6mTdvnufWL0U9tmzZ4nSpfmns2LEl6r8GDRo4XapfSk9PN88//7y57LLLTMOGDU10dLSpUKGCqV27tunatasZOXKkOXHihNNlBiRuIVYymzdvNoMHDzadO3c29erVM5GRkSYiIsKcccYZ5rrrrjMzZ850usSA8t1335nLL7/cVKtWzYSHh5v4+HgzYMAA88svvzhdWsC48sorjSRzzz33OF1KwFmzZo0ZMGCAady4sYmIiDAVKlQwDRo0MH379jXLly93ujxjjDGWMXmmSgEAAACCAGNyAQAAEHQIuQAAAAg6hFwAAAAEHUIuAAAAgg4hFwAAAEGHkAsAAICgQ8gFAABA0CHkAgAAIOgQcgEAABB0CLlAALMsS5ZlaejQoU6X4rdycnL05ptvqmPHjqpcubKnz6655hqnSysX8+fP97zH+fPnO10OADiGkIuAlPc/csuy1Lt372K3GTBggGd9nD5uuukmDR48WCtWrNCRI0ecLgcA4COEXASFL774QuvXr3e6DPiZJUuW6IsvvpAkXXHFFZozZ47WrVun9evX66233nK4upJLS0vz/II2btw4p8sB8uGvSvBHYU4XAHiDMUZDhgzRlClTnC4FfmTu3LmSpNDQUE2cOFGVK1d2uKLy16VLFxljnC4DABzHmVwEvLi4OEnS1KlTtXr1aoergT/566+/JEm1atU6LQIuAOB/CLkIePfff78iIiIkSc8884zD1cCfZGZmSpLCw8MdrgQA4GuEXAS8+Ph43XHHHZKkr7/+Wj/99FOZ9tOwYUNZlqUBAwYUuZ77AraGDRvmW1bQ2MkpU6aoW7duqlmzpqKjo5WYmKgRI0YoKyvLs50xRhMnTlSXLl1Us2ZNRUVFKTk5WaNGjSrVn57nzp2rHj16qE6dOoqMjFTjxo113333ec5oFiclJUV33XWXmjdvrkqVKik6OlrNmzfX3Xffrd9++63Q7caNG+d532lpacrMzNQbb7yhc845R3FxcbbG6q1fv1533HGHmjZtqqioKMXExKh169Z68MEHlZaWVuA27lrGjx8vSfrzzz9PuVCxLBcfbtiwQc8995wuvfRS1a9fXxEREapUqZKaNm2q/v37a9myZSXe148//qjbbrtNzZs3V+XKlVWhQgXVr19fV155pd555x0dPHjwlPfSqFEjz/cDBw7M917y9m1hd1f4888/FRISIsuy9K9//avYGj/99FPPfmbNmlXgOr///rsefPBBJSQkKDY2VhUrVlTjxo01YMAArVy5ssT9UZCCjqlXX31VycnJio2NVeXKlXX22Wfr3XffVU5OTqH7yc3N1Q8//KBHHnlEnTp1UlxcnMLDw1WlShW1a9dOjzzyiLZu3VpkLV26dJFlWerSpYskadOmTbrvvvs8x6S7RredO3fq3Xff1XXXXaemTZsqOjpaERERqlevnq6++mpNmjRJubm5hbb398/QGKPRo0erc+fOql69uipXrqyOHTvq448/PmW7kydPatSoUTrnnHNUrVo1xcTEqFOnTvr888+L73BJu3bt0r/+9S+1b99e1apVU0REhOLj43XDDTd4hv78nfvnptuwYcPyHZ+F/Uwt6/Hz9/7Jzc3VmDFjdOGFF6pWrVoKCQnJ1+aqVas0aNAgNWvWTNHR0YqMjFR8fLzOOuss3Xvvvfrqq68Y5hOMDBCA5s2bZyQZSWbs2LFmx44dpmLFikaS6datW4Hb9O/f37NNQRo0aGAkmf79+xfZtns/DRo0yLdsy5Ytp9R19913e77/++Paa6812dnZ5sSJE+a6664rdL3bb7+90Frc6wwZMsQMHTq00H3ExsaahQsXFrqfnJwc8+CDDxrLsgrdR1hYmHnvvfcK3H7s2LGe9VasWGHatWuXb/shQ4YU2a8FeeGFF0xISEihNUVERJjx48cX2i9FPUoj7/FW1OPxxx8vcj8ZGRnmpptuKnY/efuqJO3mXT9vrfPmzTul/c6dOxtJplGjRsW+5yuuuMJIMjVq1DBZWVn5lr/yyismPDy80JosyzJPP/10se0UJu8xlZKSYs4666xC2zr//PPNkSNHCtzPkCFDiu2/qKgoM2XKlEJrueCCC4wkc8EFF5hp06aZ6OjofPvYsmWLMcaY7OzsIo9Z96Nr166F1pz3M5w9e7a56qqrCt3P/fffb4wxZv/+/eb8888vdL3nn3++yP7+5JNPCnxfeR+DBg3Kdyy4f24W9SjoZ6qd4ydv/3zzzTfmkksuKbLN4cOHl+gzKezzQOAi5CIg/T3kGmPMQw895Hlt0aJF+bbxdcg9++yzjSTTvXt3M2XKFLNq1Sozbdo0z+uSzAcffGD++c9/GkmmT58+5uuvvzarVq0yn332mWnRosUpP8gL4l7evn17I8k0b97cjB492qxYscLMnTvX3HnnnZ4f7pUrVzZbt24tcD/33HPPKYFhzJgxZv78+eann34yH3zwgWndurVn+fTp0/NtnzeQtG3b1liWZfr162dmzpxpVq1aZaZOnWpmzZpVZL/+3TvvvOPZZ40aNcyrr75qli5dahYvXmyGDh3q+Q/Zsiwzc+bMU7Zdv369Wb9+vbn66quNJFO3bl3Pa+5HacyZM8dER0ebG264wYwaNcrMnz/fpKSkmG+//da89tprp/xHP2bMmAL3kZOTY7p27epZr2nTpub11183ixYtMqtWrTJff/21efLJJ02TJk1OCa3r16833333nWe75557Lt972b17t2f9okLuyJEjPct+/PHHQt/v3r17PQHk3nvvzbf85ZdfPuXzHjlypJk7d65ZuXKlmTBhgjn33HM9y998881S9bVb3mOqQ4cORpLp3bu3mTVrllm5cqWZOHGi53VJ5pprrilwP//6179MnTp1zD333GM+/vhj8+OPP3r+LT722GOmUqVKRpKJjIw0qampBe7DHXIbNWpkKlWqZGrUqGH+85//mB9//NEsW7bMjBgxwuzZs8cYY0xWVpYJCQkxF110kXnllVfMt99+a1atWmXmz59vxowZc0rf9OvXr8D28n6G7p8Xffv29fx7+vTTT03z5s0968yZM8f06NHDhIWFmbvvvtvMnj3brFq1yowePdrUrVvXSDKhoaFmw4YNBbY3adIkzy+4jRs3NsOHD/fU/eWXX5ru3bt72nrwwQdP2Xbjxo1m/fr1nuV33313vuNz+/btp2xj9/jJ2z9t27Y1kkyPHj08P2dnzZplPvvsM2OMMWvXrvX8DGzUqJF57bXXzPfff29Wr15tFi5caD744APTp08fEx0dTcgNQoRcBKSCQu7u3bs9wefCCy/Mt42vQ64kM3jw4HzrHDt2zNNW9erVjWVZ5o033si33s6dO01MTIznB3hB8raVnJxc4A/pjz76yLPO9ddfn2/57NmzPcs//PDDAts5fvy4ueiiizzv++9nc/IGkqL2U1Lp6ekmKirKE1ALCucpKSmez7tevXrm5MmT+dYp6rMqjT179pgDBw4UujwzM9MTYBs0aGCys7PzrfPmm296+qdnz57mxIkTBe4rJycnXyj4+18IilJUyC0uvLrlDcNLliw5ZdnPP//s2ceQIUNMbm5uge/h5ptvNpJMpUqVzP79+4usuSB/P6ZeeOGFfOtkZWWZSy+91LPO33/ZMcbVdwUdG27btm0z9erVM5LMzTffXOA67pDrPh7//PPPQveXm5tr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tv/66689QaSo9UsTADZt2pRvXyX9j/7999/3TL1c1KNChQrFTnNbkLzHVEpKiueXy4IenTp1MocPHy5wP2PGjCnyGOrdu7eZO3eu10LuwYMHTbt27Qptr1q1ambBggVF7tPXIdcYY7766itTrVq1Yj/PkJCQfLNJGuP6N+L+heLvj4JmkbRz/JQ25JbkPT377LNF7geBieEKCHq33367Zzxkca6//notWbJEPXv29NweKj4+Xv3799eKFSuKnRXMSUOHDtW3336rK664QrVq1VKFChXUsGFD3XPPPfr55589wzEKYlmWnnnmGf3222967LHH1L59e1WrVk2hoaGKiYlRq1at1LdvX40fP147d+5UxYoVffKennzySa1evVq33367zjzzTFWsWFHR0dFq2bKlHnjgAf3666/q169fudfRrl07rVmzRnfddZcaNGig8PBwVatWTR07dtSrr76qn376qUT3v42KitIXX3yhH374QbfccosaNWqkihUreo6zq666Su+9954efvjhfNteccUV+v7773X11Verbt26RU6SUVJNmjQ5ZaKQqlWresZMFuf222/X5s2bNWzYMHXq1ElxcXEKCwtTdHS0mjVrpl69emnUqFH666+/1KRJE1t1Vq1aVUuWLNGLL76odu3aKSYmRpUqVVKHDh00YsQILViwwHPh6N8NHDhQixYt0jXXXKMaNWooPDxcderU0WWXXaZJkybps88+8+pt72JjY/Xjjz/q2WefVUJCgiIjI1WpUiW1bNlSjzzyiNauXavzzz/fa+15y1VXXaUtW7bo1Vdf1UUXXaRatWopPDxcFStWVKNGjXTllVdq+PDhSktL04UXXphv+3bt2mnp0qW66aabdMYZZxQ5e5rku+Pn008/1fvvv68+ffqoXbt2ql27tsLCwlSpUiW1bt1ad999t1avXu0ZtoXgYhnj5zd0BACcdsaNG6eBAwdKkrZs2eKZ2Q4ASoozuQAAAAg6hFwAAAAEHUIuAAAAgg4hFwAAAEGHkAsAAICgw90VAAAAEHQ4kwsAAICgQ8gFAABA0CHkAgAAIOgQcgEAABB0CLkAAAAIOoRcAAAABB1CLgAAAIIOIRcAAABB5/8BFcEZZAGOBqUAAAAASUVORK5CYII=", - "text/plain": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "fig, ax = plt.subplots(figsize=(8, 6))\n", - "ax.plot(list(result_by_sparsity.keys()), list(result_by_sparsity.values()), '.b-', label=\"sebo\", markersize=10)\n", - "ax.grid(True)\n", - "ax.set_title(f\"Branin, D={aug_dim}\", fontsize=20)\n", - "ax.set_xlabel(\"Number of active parameters\", fontsize=20)\n", - "ax.set_ylabel(\"Best value found\", fontsize=20)\n", - "# ax.legend(fontsize=18)\n", - "plt.show()" - ] + "originalKey": "d039b709-67c6-475a-96ce-290f869e0f88", + "requestMsgId": "3e23ed64-7d10-430b-b790-91a0c7cf72fe", + "showInput": true + }, + "outputs": [], + "source": [ + "# Create optimization goals \n", + "optimization_config = OptimizationConfig(\n", + " objective=Objective(\n", + " metric=AugBraninMetric(\n", + " name=\"objective\",\n", + " param_names=[f\"x{i}\" for i in range(aug_dim)],\n", + " noise_sd=None, # Set noise_sd=None if you want to learn the noise, otherwise it defaults to 1e-6\n", + " ),\n", + " minimize=True,\n", + " )\n", + ")\n", + "\n", + "# Experiment\n", + "experiment = Experiment(\n", + " name=\"sebo_experiment\",\n", + " search_space=search_space,\n", + " optimization_config=optimization_config,\n", + " runner=SyntheticRunner(),\n", + ")\n", + "\n", + "# target sparse point to regularize towards to. Here we set target sparse value being zero for all the parameters. \n", + "target_point = torch.tensor([0 for _ in range(aug_dim)], **tkwargs)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "e57edb00-eafc-4d07-bdb9-e8cf073b4caa", + "showInput": false + }, + "source": [ + "## Run optimization loop" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1689117395051, + "executionStopTime": 1689117395069, + "jupyter": { + "outputs_hidden": false }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "1ba68dc9-d60b-4b39-8e58-ea9bdc06b44c", - "showInput": false - }, - "source": [ - "# Demo of Using GenerationStrategy and Service API \n", - "\n", - "Please check [Service API tutorial](https://ax.dev/tutorials/gpei_hartmann_service.html) for more detailed information. " - ] + "originalKey": "c4848148-bff5-44a7-9ad5-41e78ccb413c", + "requestMsgId": "8aa87d22-bf89-471f-be9f-7c31f7b8bd62", + "showInput": true + }, + "outputs": [], + "source": [ + "N_INIT = 10\n", + "\n", + "if SMOKE_TEST:\n", + " N_BATCHES = 1\n", + " BATCH_SIZE = 1\n", + " SURROGATE_CLASS = None # Auto-pick SingleTaskGP / FixedNoiseGP\n", + "else:\n", + " N_BATCHES = 4\n", + " BATCH_SIZE = 5\n", + " SURROGATE_CLASS = SaasFullyBayesianSingleTaskGP\n", + "\n", + "print(f\"Doing {N_INIT + N_BATCHES * BATCH_SIZE} evaluations\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1689117396326, + "executionStopTime": 1689117396376, + "jupyter": { + "outputs_hidden": false }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "45e5586c-55eb-4908-aa73-bca4ee883b56", - "showInput": false - }, - "source": [ - "## Create `GenerationStrategy`" - ] + "originalKey": "b260d85f-2797-44e3-840a-86587534b589", + "requestMsgId": "2cc516e3-b16e-40ca-805f-dcd792c92fa6", + "showInput": true + }, + "outputs": [], + "source": [ + "# Initial Sobol points\n", + "sobol = Models.SOBOL(search_space=experiment.search_space)\n", + "for _ in range(N_INIT):\n", + " experiment.new_trial(sobol.gen(1)).run()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1689117396900, + "executionStopTime": 1689124188959, + "jupyter": { + "outputs_hidden": false }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1689124192972, - "executionStopTime": 1689124192975, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "7c0bfe37-8f1f-4999-8833-42ffb2569c04", - "requestMsgId": "bbd9058a-709e-4262-abe1-720d37e8786f", - "showInput": true - }, - "outputs": [], - "source": [ - "gs = GenerationStrategy(\n", - " name=\"SEBO_L0\",\n", - " steps=[\n", - " GenerationStep( # Initialization step\n", - " model=Models.SOBOL, \n", - " num_trials=N_INIT,\n", - " ),\n", - " GenerationStep( # BayesOpt step\n", - " model=Models.BOTORCH_MODULAR,\n", - " # No limit on how many generator runs will be produced\n", - " num_trials=-1,\n", - " model_kwargs={ # Kwargs to pass to `BoTorchModel.__init__`\n", - " \"surrogate\": Surrogate(botorch_model_class=SURROGATE_CLASS),\n", - " \"acquisition_class\": SEBOAcquisition,\n", - " \"botorch_acqf_class\": qNoisyExpectedHypervolumeImprovement,\n", - " \"acquisition_options\": {\n", - " \"penalty\": \"L0_norm\", # it can be L0_norm or L1_norm.\n", - " \"target_point\": target_point, \n", - " \"sparsity_threshold\": aug_dim,\n", - " },\n", - " },\n", - " )\n", - " ]\n", - ")" - ] + "originalKey": "7c198035-add2-4717-be27-4fb67c4d1782", + "requestMsgId": "d844fa20-0adf-4ba3-ace5-7253ba678db2", + "showInput": true + }, + "outputs": [], + "source": [ + "data = experiment.fetch_data()\n", + "\n", + "for i in range(N_BATCHES):\n", + "\n", + " model = Models.BOTORCH_MODULAR(\n", + " experiment=experiment, \n", + " data=data,\n", + " surrogate=Surrogate(botorch_model_class=SURROGATE_CLASS), # can use SAASGP (i.e. SaasFullyBayesianSingleTaskGP) for high-dim cases\n", + " search_space=experiment.search_space,\n", + " botorch_acqf_class=qNoisyExpectedHypervolumeImprovement,\n", + " acquisition_class=SEBOAcquisition,\n", + " acquisition_options={\n", + " \"penalty\": \"L0_norm\", # it can be L0_norm or L1_norm. \n", + " \"target_point\": target_point, \n", + " \"sparsity_threshold\": aug_dim,\n", + " },\n", + " torch_device=tkwargs['device'],\n", + " )\n", + "\n", + " generator_run = model.gen(BATCH_SIZE)\n", + " trial = experiment.new_batch_trial(generator_run=generator_run)\n", + " trial.run()\n", + "\n", + " new_data = trial.fetch_data(metrics=list(experiment.metrics.values()))\n", + " data = Data.from_multiple_data([data, new_data])\n", + " print(f\"Iteration: {i}, Best so far: {data.df['mean'].min():.3f}\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "7998635d-6750-4825-b93d-c7b61f74c3c5", + "showInput": false + }, + "source": [ + "## Plot sparisty vs objective \n", + "\n", + "Visualize the objective and sparsity trade-offs using SEBO. Each point represent designs along the Pareto frontier found by SEBO. The x-axis corresponds to the number of active parameters used, i.e.\n", + "non-sparse parameters, and the y-axis corresponds the best identified objective values. Based on this, decision-makers balance both simplicity/interpretability of generated policies and optimization performance when deciding which configuration to use." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1689124189044, + "executionStopTime": 1689124189182, + "jupyter": { + "outputs_hidden": false }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "e4911bc6-32cb-42a5-908f-57f3f04e58e5", - "showInput": false - }, - "source": [ - "## Initialize client and set up experiment" - ] + "originalKey": "416ccd12-51a1-4bfe-9e10-436cd88ec6be", + "requestMsgId": "5143ae57-1d0d-4f9d-bc9d-9d151f3e9af0", + "showInput": true + }, + "outputs": [], + "source": [ + "def nnz_exact(x, sparse_point):\n", + " return len(x) - (np.array(x) == np.array(sparse_point)).sum()\n", + "\n", + " \n", + "df = data.df\n", + "df['L0_norm'] = df['arm_name'].apply(lambda d: nnz_exact(list(experiment.arms_by_name[d].parameters.values()), [0 for _ in range(aug_dim)]) )" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1689124189219, + "executionStopTime": 1689124189321, + "jupyter": { + "outputs_hidden": false }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1689124192979, - "executionStopTime": 1689124192984, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "47938102-0613-4b37-acb2-9f1f5f3fe6b1", - "requestMsgId": "38b4b17c-6aae-43b8-aa58-2df045f522fe", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 09-07 16:58:10] ax.service.ax_client: Starting optimization with verbose logging. To disable logging, set the `verbose_logging` argument to `False`. Note that float values in the logs are rounded to 6 decimal points.\n", - "[INFO 09-07 16:58:10] ax.service.utils.instantiation: Created search space: SearchSpace(parameters=[RangeParameter(name='x0', parameter_type=FLOAT, range=[0.0, 1.0]), RangeParameter(name='x1', parameter_type=FLOAT, range=[0.0, 1.0]), RangeParameter(name='x2', parameter_type=FLOAT, range=[0.0, 1.0]), RangeParameter(name='x3', parameter_type=FLOAT, range=[0.0, 1.0]), RangeParameter(name='x4', parameter_type=FLOAT, range=[0.0, 1.0]), RangeParameter(name='x5', parameter_type=FLOAT, range=[0.0, 1.0]), RangeParameter(name='x6', parameter_type=FLOAT, range=[0.0, 1.0]), RangeParameter(name='x7', parameter_type=FLOAT, range=[0.0, 1.0])], parameter_constraints=[]).\n" - ] - } - ], - "source": [ - "ax_client = AxClient(generation_strategy=gs)\n", - "\n", - "experiment_parameters = [\n", - " {\n", - " \"name\": f\"x{i}\",\n", - " \"type\": \"range\",\n", - " \"bounds\": [0, 1],\n", - " \"value_type\": \"float\",\n", - " \"log_scale\": False,\n", - " }\n", - " for i in range(aug_dim)\n", - "]\n", - "\n", - "objective_metrics = {\n", - " \"objective\": ObjectiveProperties(minimize=False, threshold=-10),\n", - "}\n", - "\n", - "ax_client.create_experiment(\n", - " name=\"branin_augment_sebo_experiment\",\n", - " parameters=experiment_parameters,\n", - " objectives=objective_metrics,\n", - ")" - ] + "originalKey": "97b96822-7d7f-4a5d-8458-01ff890d2fde", + "requestMsgId": "34abdf8d-6f0c-48a1-8700-8e2c3075a085", + "showInput": true + }, + "outputs": [], + "source": [ + "result_by_sparsity = {l: df[df.L0_norm <= l]['mean'].min() for l in range(1, aug_dim+1)}\n", + "result_by_sparsity" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1689134836494, + "executionStopTime": 1689134837813, + "jupyter": { + "outputs_hidden": false }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "6a7942e4-9727-43d9-8d8d-c327d38c2373", - "showInput": false - }, - "source": [ - "## Define evaluation function " - ] + "originalKey": "7193e2b0-e192-439a-b0d0-08a2029f64ca", + "requestMsgId": "f095d820-55e0-4201-8e3a-77f17b2155f1", + "showInput": true + }, + "outputs": [], + "source": [ + "fig, ax = plt.subplots(figsize=(8, 6))\n", + "ax.plot(list(result_by_sparsity.keys()), list(result_by_sparsity.values()), '.b-', label=\"sebo\", markersize=10)\n", + "ax.grid(True)\n", + "ax.set_title(f\"Branin, D={aug_dim}\", fontsize=20)\n", + "ax.set_xlabel(\"Number of active parameters\", fontsize=20)\n", + "ax.set_ylabel(\"Best value found\", fontsize=20)\n", + "# ax.legend(fontsize=18)\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "1ba68dc9-d60b-4b39-8e58-ea9bdc06b44c", + "showInput": false + }, + "source": [ + "# Demo of Using GenerationStrategy and Service API \n", + "\n", + "Please check [Service API tutorial](https://ax.dev/tutorials/gpei_hartmann_service.html) for more detailed information. " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "45e5586c-55eb-4908-aa73-bca4ee883b56", + "showInput": false + }, + "source": [ + "## Create `GenerationStrategy`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "executionStartTime": 1689124192972, + "executionStopTime": 1689124192975, + "jupyter": { + "outputs_hidden": false }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1689124192990, - "executionStopTime": 1689124192992, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "4e2994ff-36ac-4d48-a789-3d0398e1e856", - "requestMsgId": "8f74a775-a8ce-462d-993c-5c9291c748b9", - "showInput": true - }, - "outputs": [], - "source": [ - "def evaluation(parameters):\n", - " # put parameters into 1-D array\n", - " x = [parameters.get(param[\"name\"]) for param in experiment_parameters]\n", - " res = branin_augment(x_vec=x, augment_dim=aug_dim)\n", - " eval_res = {\n", - " # flip the sign to maximize\n", - " \"objective\": (res * -1, 0.0),\n", - " }\n", - " return eval_res" - ] + "originalKey": "7c0bfe37-8f1f-4999-8833-42ffb2569c04", + "requestMsgId": "bbd9058a-709e-4262-abe1-720d37e8786f", + "showInput": true + }, + "outputs": [], + "source": [ + "gs = GenerationStrategy(\n", + " name=\"SEBO_L0\",\n", + " steps=[\n", + " GenerationStep( # Initialization step\n", + " model=Models.SOBOL, \n", + " num_trials=N_INIT,\n", + " ),\n", + " GenerationStep( # BayesOpt step\n", + " model=Models.BOTORCH_MODULAR,\n", + " # No limit on how many generator runs will be produced\n", + " num_trials=-1,\n", + " model_kwargs={ # Kwargs to pass to `BoTorchModel.__init__`\n", + " \"surrogate\": Surrogate(botorch_model_class=SURROGATE_CLASS),\n", + " \"acquisition_class\": SEBOAcquisition,\n", + " \"botorch_acqf_class\": qNoisyExpectedHypervolumeImprovement,\n", + " \"acquisition_options\": {\n", + " \"penalty\": \"L0_norm\", # it can be L0_norm or L1_norm.\n", + " \"target_point\": target_point, \n", + " \"sparsity_threshold\": aug_dim,\n", + " },\n", + " },\n", + " )\n", + " ]\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "e4911bc6-32cb-42a5-908f-57f3f04e58e5", + "showInput": false + }, + "source": [ + "## Initialize client and set up experiment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "executionStartTime": 1689124192979, + "executionStopTime": 1689124192984, + "jupyter": { + "outputs_hidden": false }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "4597531b-7ac8-4dd0-94c4-836672e0f4c4", - "showInput": false - }, - "source": [ - "## Run optimization loop\n", - "\n", - "Running only 1 BO trial for demonstration. " - ] + "originalKey": "47938102-0613-4b37-acb2-9f1f5f3fe6b1", + "requestMsgId": "38b4b17c-6aae-43b8-aa58-2df045f522fe", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client = AxClient(generation_strategy=gs)\n", + "\n", + "experiment_parameters = [\n", + " {\n", + " \"name\": f\"x{i}\",\n", + " \"type\": \"range\",\n", + " \"bounds\": [0, 1],\n", + " \"value_type\": \"float\",\n", + " \"log_scale\": False,\n", + " }\n", + " for i in range(aug_dim)\n", + "]\n", + "\n", + "objective_metrics = {\n", + " \"objective\": ObjectiveProperties(minimize=False, threshold=-10),\n", + "}\n", + "\n", + "ax_client.create_experiment(\n", + " name=\"branin_augment_sebo_experiment\",\n", + " parameters=experiment_parameters,\n", + " objectives=objective_metrics,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "6a7942e4-9727-43d9-8d8d-c327d38c2373", + "showInput": false + }, + "source": [ + "## Define evaluation function " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "executionStartTime": 1689124192990, + "executionStopTime": 1689124192992, + "jupyter": { + "outputs_hidden": false }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1689124193044, - "executionStopTime": 1689130398208, - "jupyter": { - "outputs_hidden": false - }, - "originalKey": "bc7accb2-48a2-4c88-a932-7c79ec81075a", - "requestMsgId": "f054e5b1-12eb-459b-a508-6944baf82dfb", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 09-07 16:58:10] ax.service.ax_client: Generated new trial 0 with parameters {'x0': 0.855412, 'x1': 0.843304, 'x2': 0.539811, 'x3': 0.677753, 'x4': 0.984633, 'x5': 0.410373, 'x6': 0.815671, 'x7': 0.403255}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Completed trial 0 with data: {'objective': (-135.451198, 0.0)}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Generated new trial 1 with parameters {'x0': 0.189944, 'x1': 0.800578, 'x2': 0.071822, 'x3': 0.895905, 'x4': 0.077662, 'x5': 0.256718, 'x6': 0.829401, 'x7': 0.777747}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Completed trial 1 with data: {'objective': (-8.689241, 0.0)}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Generated new trial 2 with parameters {'x0': 0.998764, 'x1': 0.749793, 'x2': 0.951167, 'x3': 0.483164, 'x4': 0.216034, 'x5': 0.013638, 'x6': 0.14137, 'x7': 0.746281}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Completed trial 2 with data: {'objective': (-70.113099, 0.0)}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Generated new trial 3 with parameters {'x0': 0.594559, 'x1': 0.150197, 'x2': 0.539827, 'x3': 0.616142, 'x4': 0.846122, 'x5': 0.211888, 'x6': 0.299617, 'x7': 0.825836}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Completed trial 3 with data: {'objective': (-3.407976, 0.0)}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Generated new trial 4 with parameters {'x0': 0.165938, 'x1': 0.332497, 'x2': 0.836972, 'x3': 0.73132, 'x4': 0.580262, 'x5': 0.407918, 'x6': 0.761584, 'x7': 0.733809}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Completed trial 4 with data: {'objective': (-36.155637, 0.0)}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Generated new trial 5 with parameters {'x0': 0.171989, 'x1': 0.180371, 'x2': 0.112051, 'x3': 0.919738, 'x4': 0.712023, 'x5': 0.913378, 'x6': 0.729944, 'x7': 0.11163}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Completed trial 5 with data: {'objective': (-65.245844, 0.0)}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Generated new trial 6 with parameters {'x0': 0.868458, 'x1': 0.39993, 'x2': 0.372801, 'x3': 0.253683, 'x4': 0.156089, 'x5': 0.996918, 'x6': 0.035147, 'x7': 0.379257}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Completed trial 6 with data: {'objective': (-28.156639, 0.0)}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Generated new trial 7 with parameters {'x0': 0.506108, 'x1': 0.958914, 'x2': 0.918143, 'x3': 0.385513, 'x4': 0.511529, 'x5': 0.818457, 'x6': 0.291341, 'x7': 0.301845}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Completed trial 7 with data: {'objective': (-137.320621, 0.0)}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Generated new trial 8 with parameters {'x0': 0.658366, 'x1': 0.812094, 'x2': 0.267501, 'x3': 0.064048, 'x4': 0.440092, 'x5': 0.223525, 'x6': 0.660195, 'x7': 0.05373}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Completed trial 8 with data: {'objective': (-129.720931, 0.0)}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Generated new trial 9 with parameters {'x0': 0.521977, 'x1': 0.30404, 'x2': 0.867921, 'x3': 0.812355, 'x4': 0.102222, 'x5': 0.981173, 'x6': 0.358049, 'x7': 0.947661}.\n", - "[INFO 09-07 16:58:10] ax.service.ax_client: Completed trial 9 with data: {'objective': (-4.981193, 0.0)}.\n", - "[INFO 09-07 16:58:28] ax.service.ax_client: Generated new trial 10 with parameters {'x0': 0.0, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 1.0}.\n", - "[INFO 09-07 16:58:28] ax.service.ax_client: Completed trial 10 with data: {'objective': (-308.129096, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Generated new trial 2 with parameters {'x0': 0.310899, 'x1': 0.906665, 'x2': 0.859498, 'x3': 0.861769, 'x4': 0.565173, 'x5': 0.849893, 'x6': 0.743119, 'x7': 0.485293}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Completed trial 2 with data: {'objective': (-68.762484, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Generated new trial 3 with parameters {'x0': 0.222246, 'x1': 0.682503, 'x2': 0.697094, 'x3': 0.262685, 'x4': 0.660106, 'x5': 0.783381, 'x6': 0.537969, 'x7': 0.607574}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Completed trial 3 with data: {'objective': (-10.589478, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Generated new trial 4 with parameters {'x0': 0.391554, 'x1': 0.769673, 'x2': 0.363151, 'x3': 0.522279, 'x4': 0.8752, 'x5': 0.921642, 'x6': 0.892081, 'x7': 0.614701}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Completed trial 4 with data: {'objective': (-62.905011, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Generated new trial 5 with parameters {'x0': 0.319981, 'x1': 0.578814, 'x2': 0.58387, 'x3': 0.310305, 'x4': 0.198673, 'x5': 0.78394, 'x6': 0.423361, 'x7': 0.853005}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Completed trial 5 with data: {'objective': (-24.971551, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Generated new trial 6 with parameters {'x0': 0.889574, 'x1': 0.540804, 'x2': 0.668386, 'x3': 0.511087, 'x4': 0.587279, 'x5': 0.966997, 'x6': 0.699696, 'x7': 0.919272}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Completed trial 6 with data: {'objective': (-46.419155, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Generated new trial 7 with parameters {'x0': 0.816103, 'x1': 0.454254, 'x2': 0.498263, 'x3': 0.609042, 'x4': 0.080031, 'x5': 0.321146, 'x6': 0.505942, 'x7': 0.386978}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Completed trial 7 with data: {'objective': (-46.485345, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Generated new trial 8 with parameters {'x0': 0.687349, 'x1': 0.282216, 'x2': 0.751967, 'x3': 0.566662, 'x4': 0.79098, 'x5': 0.641958, 'x6': 0.724017, 'x7': 0.590121}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Completed trial 8 with data: {'objective': (-24.65791, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Generated new trial 9 with parameters {'x0': 0.130133, 'x1': 0.712254, 'x2': 0.760572, 'x3': 0.411107, 'x4': 0.542096, 'x5': 0.526756, 'x6': 0.787764, 'x7': 0.674992}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:09:53] ax.service.ax_client: Completed trial 9 with data: {'objective': (-2.309687, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:11:36] ax.service.ax_client: Generated new trial 10 with parameters {'x0': 0.0, 'x1': 0.0, 'x2': 1.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.892852}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:11:36] ax.service.ax_client: Completed trial 10 with data: {'objective': (-308.129096, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:13:39] ax.service.ax_client: Generated new trial 11 with parameters {'x0': 0.0, 'x1': 0.640271, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.946358, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:13:39] ax.service.ax_client: Completed trial 11 with data: {'objective': (-70.230069, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:15:44] ax.service.ax_client: Generated new trial 12 with parameters {'x0': 0.0, 'x1': 0.519038, 'x2': 1.0, 'x3': 0.0, 'x4': 1.0, 'x5': 0.0, 'x6': 0.870499, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:15:44] ax.service.ax_client: Completed trial 12 with data: {'objective': (-101.117533, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:17:37] ax.service.ax_client: Generated new trial 13 with parameters {'x0': 0.0, 'x1': 0.0, 'x2': 0.0, 'x3': 1.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.727362, 'x7': 1.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:17:37] ax.service.ax_client: Completed trial 13 with data: {'objective': (-308.129096, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:19:31] ax.service.ax_client: Generated new trial 14 with parameters {'x0': 0.0, 'x1': 0.784581, 'x2': 1.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.700215, 'x6': 0.0, 'x7': 0.724654}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:19:31] ax.service.ax_client: Completed trial 14 with data: {'objective': (-42.085428, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:21:33] ax.service.ax_client: Generated new trial 15 with parameters {'x0': 0.0, 'x1': 0.710437, 'x2': 0.953762, 'x3': 0.0, 'x4': 0.0, 'x5': 0.662267, 'x6': 1.0, 'x7': 0.840749}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:21:33] ax.service.ax_client: Completed trial 15 with data: {'objective': (-55.375218, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:23:43] ax.service.ax_client: Generated new trial 16 with parameters {'x0': 0.0, 'x1': 0.712456, 'x2': 0.0, 'x3': 0.0, 'x4': 1.0, 'x5': 0.628146, 'x6': 0.0, 'x7': 0.846157}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:23:43] ax.service.ax_client: Completed trial 16 with data: {'objective': (-54.980534, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:26:09] ax.service.ax_client: Generated new trial 17 with parameters {'x0': 1.0, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:26:09] ax.service.ax_client: Completed trial 17 with data: {'objective': (-10.960889, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:28:06] ax.service.ax_client: Generated new trial 18 with parameters {'x0': 1.0, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 1.0, 'x6': 0.0, 'x7': 1.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:28:06] ax.service.ax_client: Completed trial 18 with data: {'objective': (-10.960889, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:29:44] ax.service.ax_client: Generated new trial 19 with parameters {'x0': 0.770094, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:29:44] ax.service.ax_client: Completed trial 19 with data: {'objective': (-20.508312, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:31:30] ax.service.ax_client: Generated new trial 20 with parameters {'x0': 0.137802, 'x1': 0.779453, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:31:30] ax.service.ax_client: Completed trial 20 with data: {'objective': (-0.613746, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:33:09] ax.service.ax_client: Generated new trial 21 with parameters {'x0': 0.536321, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:33:09] ax.service.ax_client: Completed trial 21 with data: {'objective': (-5.973257, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:34:47] ax.service.ax_client: Generated new trial 22 with parameters {'x0': 0.503722, 'x1': 0.219186, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:34:47] ax.service.ax_client: Completed trial 22 with data: {'objective': (-2.260464, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:36:41] ax.service.ax_client: Generated new trial 23 with parameters {'x0': 1.0, 'x1': 0.281918, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:36:41] ax.service.ax_client: Completed trial 23 with data: {'objective': (-3.445743, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:38:29] ax.service.ax_client: Generated new trial 24 with parameters {'x0': 0.549118, 'x1': 0.133697, 'x2': 0.0, 'x3': 1.0, 'x4': 0.0, 'x5': 1.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:38:29] ax.service.ax_client: Completed trial 24 with data: {'objective': (-0.479951, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:40:18] ax.service.ax_client: Generated new trial 25 with parameters {'x0': 0.080214, 'x1': 1.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:40:19] ax.service.ax_client: Completed trial 25 with data: {'objective': (-3.585129, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:42:08] ax.service.ax_client: Generated new trial 26 with parameters {'x0': 1.0, 'x1': 1.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:42:08] ax.service.ax_client: Completed trial 26 with data: {'objective': (-145.872191, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:44:13] ax.service.ax_client: Generated new trial 27 with parameters {'x0': 0.542029, 'x1': 0.136864, 'x2': 0.0, 'x3': 0.0, 'x4': 1.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:44:14] ax.service.ax_client: Completed trial 27 with data: {'objective': (-0.451738, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:46:25] ax.service.ax_client: Generated new trial 28 with parameters {'x0': 0.117749, 'x1': 0.847684, 'x2': 0.0, 'x3': 0.0, 'x4': 1.0, 'x5': 1.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:46:25] ax.service.ax_client: Completed trial 28 with data: {'objective': (-0.486016, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:48:39] ax.service.ax_client: Generated new trial 29 with parameters {'x0': 0.122207, 'x1': 0.831379, 'x2': 1.0, 'x3': 1.0, 'x4': 1.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:48:39] ax.service.ax_client: Completed trial 29 with data: {'objective': (-0.41913, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:51:07] ax.service.ax_client: Generated new trial 30 with parameters {'x0': 0.608958, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:51:07] ax.service.ax_client: Completed trial 30 with data: {'objective': (-7.404426, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:53:20] ax.service.ax_client: Generated new trial 31 with parameters {'x0': 0.532365, 'x1': 0.141486, 'x2': 0.0, 'x3': 1.0, 'x4': 0.0, 'x5': 0.0, 'x6': 1.0, 'x7': 1.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:53:20] ax.service.ax_client: Completed trial 31 with data: {'objective': (-0.591731, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:55:48] ax.service.ax_client: Generated new trial 32 with parameters {'x0': 0.950988, 'x1': 0.171879, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:55:48] ax.service.ax_client: Completed trial 32 with data: {'objective': (-0.575591, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:58:07] ax.service.ax_client: Generated new trial 33 with parameters {'x0': 0.973297, 'x1': 0.183923, 'x2': 1.0, 'x3': 0.0, 'x4': 1.0, 'x5': 1.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 18:58:07] ax.service.ax_client: Completed trial 33 with data: {'objective': (-0.561572, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:00:53] ax.service.ax_client: Generated new trial 34 with parameters {'x0': 0.972473, 'x1': 0.184526, 'x2': 0.0, 'x3': 1.0, 'x4': 0.0, 'x5': 0.0, 'x6': 1.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:00:53] ax.service.ax_client: Completed trial 34 with data: {'objective': (-0.547382, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:03:58] ax.service.ax_client: Generated new trial 35 with parameters {'x0': 0.543579, 'x1': 0.145004, 'x2': 1.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:03:58] ax.service.ax_client: Completed trial 35 with data: {'objective': (-0.406784, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:08:04] ax.service.ax_client: Generated new trial 36 with parameters {'x0': 0.56372, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:08:04] ax.service.ax_client: Completed trial 36 with data: {'objective': (-5.040681, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:10:39] ax.service.ax_client: Generated new trial 37 with parameters {'x0': 0.128424, 'x1': 0.814467, 'x2': 1.0, 'x3': 0.0, 'x4': 0.0, 'x5': 1.0, 'x6': 0.0, 'x7': 1.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:10:39] ax.service.ax_client: Completed trial 37 with data: {'objective': (-0.431012, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:13:21] ax.service.ax_client: Generated new trial 38 with parameters {'x0': 0.967249, 'x1': 0.189143, 'x2': 0.0, 'x3': 1.0, 'x4': 1.0, 'x5': 0.0, 'x6': 0.0, 'x7': 1.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:13:21] ax.service.ax_client: Completed trial 38 with data: {'objective': (-0.516046, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:17:03] ax.service.ax_client: Generated new trial 39 with parameters {'x0': 0.563272, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:17:03] ax.service.ax_client: Completed trial 39 with data: {'objective': (-5.040172, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:20:43] ax.service.ax_client: Generated new trial 40 with parameters {'x0': 0.111004, 'x1': 0.841851, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:20:43] ax.service.ax_client: Completed trial 40 with data: {'objective': (-0.590424, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:24:20] ax.service.ax_client: Generated new trial 41 with parameters {'x0': 0.563578, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:24:20] ax.service.ax_client: Completed trial 41 with data: {'objective': (-5.040465, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:27:24] ax.service.ax_client: Generated new trial 42 with parameters {'x0': 1.0, 'x1': 0.173494, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:27:24] ax.service.ax_client: Completed trial 42 with data: {'objective': (-2.103578, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:30:34] ax.service.ax_client: Generated new trial 43 with parameters {'x0': 0.563448, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:30:34] ax.service.ax_client: Completed trial 43 with data: {'objective': (-5.040312, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:34:21] ax.service.ax_client: Generated new trial 44 with parameters {'x0': 0.563267, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:34:21] ax.service.ax_client: Completed trial 44 with data: {'objective': (-5.04017, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:38:27] ax.service.ax_client: Generated new trial 45 with parameters {'x0': 0.563496, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:38:27] ax.service.ax_client: Completed trial 45 with data: {'objective': (-5.040364, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:41:52] ax.service.ax_client: Generated new trial 46 with parameters {'x0': 0.563076, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:41:52] ax.service.ax_client: Completed trial 46 with data: {'objective': (-5.040109, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:45:10] ax.service.ax_client: Generated new trial 47 with parameters {'x0': 0.563165, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:45:10] ax.service.ax_client: Completed trial 47 with data: {'objective': (-5.040126, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:48:48] ax.service.ax_client: Generated new trial 48 with parameters {'x0': 0.562984, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:48:48] ax.service.ax_client: Completed trial 48 with data: {'objective': (-5.040112, 0.0)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:53:17] ax.service.ax_client: Generated new trial 49 with parameters {'x0': 0.563213, 'x1': 0.0, 'x2': 0.0, 'x3': 0.0, 'x4': 0.0, 'x5': 0.0, 'x6': 0.0, 'x7': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-11 19:53:17] ax.service.ax_client: Completed trial 49 with data: {'objective': (-5.040143, 0.0)}.\n" - ] - } - ], - "source": [ - "for _ in range(N_INIT + 1): \n", - " parameters, trial_index = ax_client.get_next_trial()\n", - " res = evaluation(parameters)\n", - " ax_client.complete_trial(trial_index=trial_index, raw_data=res)" - ] - } - ], - "metadata": { - "fileHeader": "", - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" + "originalKey": "4e2994ff-36ac-4d48-a789-3d0398e1e856", + "requestMsgId": "8f74a775-a8ce-462d-993c-5c9291c748b9", + "showInput": true + }, + "outputs": [], + "source": [ + "def evaluation(parameters):\n", + " # put parameters into 1-D array\n", + " x = [parameters.get(param[\"name\"]) for param in experiment_parameters]\n", + " res = branin_augment(x_vec=x, augment_dim=aug_dim)\n", + " eval_res = {\n", + " # flip the sign to maximize\n", + " \"objective\": (res * -1, 0.0),\n", + " }\n", + " return eval_res" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "4597531b-7ac8-4dd0-94c4-836672e0f4c4", + "showInput": false + }, + "source": [ + "## Run optimization loop\n", + "\n", + "Running only 1 BO trial for demonstration. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "executionStartTime": 1689124193044, + "executionStopTime": 1689130398208, + "jupyter": { + "outputs_hidden": false }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.17" - } + "originalKey": "bc7accb2-48a2-4c88-a932-7c79ec81075a", + "requestMsgId": "f054e5b1-12eb-459b-a508-6944baf82dfb", + "showInput": true + }, + "outputs": [], + "source": [ + "for _ in range(N_INIT + 1): \n", + " parameters, trial_index = ax_client.get_next_trial()\n", + " res = evaluation(parameters)\n", + " ax_client.complete_trial(trial_index=trial_index, raw_data=res)" + ] + } + ], + "metadata": { + "fileHeader": "", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" }, - "nbformat": 4, - "nbformat_minor": 4 + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 4 } diff --git a/tutorials/tune_cnn.ipynb b/tutorials/tune_cnn.ipynb new file mode 100644 index 00000000000..2bb744e3689 --- /dev/null +++ b/tutorials/tune_cnn.ipynb @@ -0,0 +1,286 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Tune a CNN on MNIST\n", + "\n", + "This tutorial walks through using Ax to tune two hyperparameters (learning rate and momentum) for a PyTorch CNN on the MNIST dataset trained using SGD with momentum.\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import numpy as np\n", + "import torch\n", + "\n", + "from ax.plot.contour import plot_contour\n", + "from ax.plot.trace import optimization_trace_single_method\n", + "from ax.service.managed_loop import optimize\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "from ax.utils.tutorials.cnn_utils import CNN, evaluate, load_mnist, train\n", + "\n", + "init_notebook_plotting()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "torch.manual_seed(12345)\n", + "dtype = torch.float\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 1. Load MNIST data\n", + "First, we need to load the MNIST data and partition it into training, validation, and test sets.\n", + "\n", + "Note: this will download the dataset if necessary." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "scrolled": true + }, + "outputs": [], + "source": [ + "BATCH_SIZE = 512\n", + "train_loader, valid_loader, test_loader = load_mnist(batch_size=BATCH_SIZE)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2. Define function to optimize\n", + "In this tutorial, we want to optimize classification accuracy on the validation set as a function of the learning rate and momentum. The function takes in a parameterization (set of parameter values), computes the classification accuracy, and returns a dictionary of metric name ('accuracy') to a tuple with the mean and standard error." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def train_evaluate(parameterization):\n", + " net = CNN()\n", + " net = train(\n", + " net=net,\n", + " train_loader=train_loader,\n", + " parameters=parameterization,\n", + " dtype=dtype,\n", + " device=device,\n", + " )\n", + " return evaluate(\n", + " net=net,\n", + " data_loader=valid_loader,\n", + " dtype=dtype,\n", + " device=device,\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 3. Run the optimization loop\n", + "Here, we set the bounds on the learning rate and momentum and set the parameter space for the learning rate to be on a log scale. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_parameters, values, experiment, model = optimize(\n", + " parameters=[\n", + " {\"name\": \"lr\", \"type\": \"range\", \"bounds\": [1e-6, 0.4], \"log_scale\": True},\n", + " {\"name\": \"momentum\", \"type\": \"range\", \"bounds\": [0.0, 1.0]},\n", + " ],\n", + " evaluation_function=train_evaluate,\n", + " objective_name=\"accuracy\",\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can introspect the optimal parameters and their outcomes:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "best_parameters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "means, covariances = values\n", + "means, covariances" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 4. Plot response surface\n", + "\n", + "Contour plot showing classification accuracy as a function of the two hyperparameters.\n", + "\n", + "The black squares show points that we have actually run, notice how they are clustered in the optimal region." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "render(\n", + " plot_contour(model=model, param_x=\"lr\", param_y=\"momentum\", metric_name=\"accuracy\")\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 5. Plot best objective as function of the iteration\n", + "\n", + "Show the model accuracy improving as we identify better hyperparameters." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# `plot_single_method` expects a 2-d array of means, because it expects to average means from multiple\n", + "# optimization runs, so we wrap out best objectives array in another array.\n", + "best_objectives = np.array(\n", + " [[trial.objective_mean * 100 for trial in experiment.trials.values()]]\n", + ")\n", + "best_objective_plot = optimization_trace_single_method(\n", + " y=np.maximum.accumulate(best_objectives, axis=1),\n", + " title=\"Model performance vs. # of iterations\",\n", + " ylabel=\"Classification Accuracy, %\",\n", + ")\n", + "render(best_objective_plot)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 6. Train CNN with best hyperparameters and evaluate on test set\n", + "Note that the resulting accuracy on the test set might not be exactly the same as the maximum accuracy achieved on the evaluation set throughout optimization. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "data = experiment.fetch_data()\n", + "df = data.df\n", + "best_arm_name = df.arm_name[df[\"mean\"] == df[\"mean\"].max()].values[0]\n", + "best_arm = experiment.arms_by_name[best_arm_name]\n", + "best_arm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "combined_train_valid_set = torch.utils.data.ConcatDataset(\n", + " [\n", + " train_loader.dataset.dataset,\n", + " valid_loader.dataset.dataset,\n", + " ]\n", + ")\n", + "combined_train_valid_loader = torch.utils.data.DataLoader(\n", + " combined_train_valid_set,\n", + " batch_size=BATCH_SIZE,\n", + " shuffle=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "net = train(\n", + " net=CNN(),\n", + " train_loader=combined_train_valid_loader,\n", + " parameters=best_arm.parameters,\n", + " dtype=dtype,\n", + " device=device,\n", + ")\n", + "test_accuracy = evaluate(\n", + " net=net,\n", + " data_loader=test_loader,\n", + " dtype=dtype,\n", + " device=device,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "print(f\"Classification Accuracy (test set): {round(test_accuracy*100, 2)}%\")" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/tutorials/tune_cnn_service.ipynb b/tutorials/tune_cnn_service.ipynb index 485dcf2efdf..f2bcc0d90da 100644 --- a/tutorials/tune_cnn_service.ipynb +++ b/tutorials/tune_cnn_service.ipynb @@ -1,10395 +1,906 @@ { - "cells": [ - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "collapsed": true, - "customInput": null, - "originalKey": "ac61b043-8ebf-43b9-9fa5-ed9a42a184ce", - "showInput": false - }, - "source": [ - "# Tune a CNN on MNIST\n", - "\n", - "This tutorial walks through using Ax to tune two hyperparameters (learning rate and momentum) for a PyTorch CNN on the MNIST dataset trained using SGD with momentum." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415246079, - "executionStopTime": 1690415266324, - "originalKey": "c2b37f0f-3644-4367-912f-f775082f6676", - "requestMsgId": "0b481630-f0f4-436a-a205-a25aa163a364", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "I0726 164727.141 _utils_internal.py:199] NCCL_DEBUG env var is set to None\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "I0726 164727.158 _utils_internal.py:217] NCCL_DEBUG is forced to WARN from None\n" - ] - }, - { - "data": { - "text/html": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:47:45] ax.utils.notebook.plotting: Injecting Plotly library into cell. Do not overwrite or delete cell.\n" - ] - }, - { - "data": { - "text/html": [ - " \n", - " " - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import torch\n", - "\n", - "from ax.service.ax_client import AxClient, ObjectiveProperties\n", - "from ax.service.utils.report_utils import exp_to_df\n", - "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", - "from ax.utils.tutorials.cnn_utils import evaluate, load_mnist, train\n", - "\n", - "import torch.nn as nn\n", - "import torch.nn.functional as F\n", - "from torch._tensor import Tensor\n", - "from torch.utils.data import DataLoader\n", - "\n", - "init_notebook_plotting()" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415266521, - "executionStopTime": 1690415266529, - "originalKey": "4d0a27c4-a6ce-4b7d-97eb-1c229aabb375", - "requestMsgId": "fd975d25-a185-4b09-a50f-7b2bcd89f93f", - "showInput": true - }, - "outputs": [], - "source": [ - "torch.manual_seed(42)\n", - "dtype = torch.float\n", - "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "10384e51-444c-4265-b56d-ad078d05d2a1", - "showInput": false - }, - "source": [ - "## 1. Load MNIST data\n", - "First, we need to load the MNIST data and partition it into training, validation, and test sets.\n", - "\n", - "Note: this will download the dataset if necessary." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415266733, - "executionStopTime": 1690415266902, - "originalKey": "6f0949e2-1064-44b8-99c0-f6ce23df7c63", - "requestMsgId": "8ce7dd21-9afb-4379-ad11-4112b4d27f8a", - "showInput": true - }, - "outputs": [], - "source": [ - "BATCH_SIZE = 512\n", - "train_loader, valid_loader, test_loader = load_mnist(batch_size=BATCH_SIZE)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "be39e4d6-f4b1-418b-b8e1-8461db582e0c", - "showInput": false - }, - "source": [ - "## 2. Initialize Client\n", - "Create a client object to interface with Ax APIs. By default this runs locally without storage.\n", - "\n", - " " - ] - }, - { - "cell_type": "code", - "execution_count": 4, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415267018, - "executionStopTime": 1690415267023, - "originalKey": "14f154fc-8109-4115-b94a-016daf85bc6f", - "requestMsgId": "7e1cd1ff-dc6e-423c-89b1-05762a7bcce2", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:47:47] ax.service.ax_client: Starting optimization with verbose logging. To disable logging, set the `verbose_logging` argument to `False`. Note that float values in the logs are rounded to 6 decimal points.\n" - ] - } - ], - "source": [ - "ax_client = AxClient()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "f30a11d8-e7e8-4815-93a4-99b4aa531a17", - "showInput": false - }, - "source": [ - "## 3. Set up experiment\n", - "An experiment consists of a **search space** (parameters and parameter constraints) and **optimization configuration** (objective name, minimization setting, and outcome constraints)." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1690415267155, - "executionStopTime": 1690415267171, - "originalKey": "c6b4fe1b-692a-499e-88c9-50dbefdcfc15", - "requestMsgId": "86409a5b-e66a-424e-8ac7-c0623a9c9ccf", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:47:47] ax.service.utils.instantiation: Inferred value type of ParameterType.FLOAT for parameter momentum. If that is not the expected value type, you can explicity specify 'value_type' ('int', 'float', 'bool' or 'str') in parameter dict.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:47:47] ax.service.utils.instantiation: Created search space: SearchSpace(parameters=[RangeParameter(name='lr', parameter_type=FLOAT, range=[1e-06, 0.4], log_scale=True), RangeParameter(name='momentum', parameter_type=FLOAT, range=[0.0, 1.0])], parameter_constraints=[]).\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:47:47] ax.modelbridge.dispatch_utils: Using Models.GPEI since there are more ordered parameters than there are categories for the unordered categorical parameters.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:47:47] ax.modelbridge.dispatch_utils: Calculating the number of remaining initialization trials based on num_initialization_trials=None max_initialization_trials=None num_tunable_parameters=2 num_trials=None use_batch_trials=False\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:47:47] ax.modelbridge.dispatch_utils: calculated num_initialization_trials=5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:47:47] ax.modelbridge.dispatch_utils: num_completed_initialization_trials=0 num_remaining_initialization_trials=5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:47:47] ax.modelbridge.dispatch_utils: Using Bayesian Optimization generation strategy: GenerationStrategy(name='Sobol+GPEI', steps=[Sobol for 5 trials, GPEI for subsequent trials]). Iterations after 5 will take longer to generate due to model-fitting.\n" - ] - } - ], - "source": [ - "# Create an experiment with required arguments: name, parameters, and objective_name.\n", - "ax_client.create_experiment(\n", - " name=\"tune_cnn_on_mnist\", # The name of the experiment.\n", - " parameters=[\n", - " {\n", - " \"name\": \"lr\", # The name of the parameter.\n", - " \"type\": \"range\", # The type of the parameter (\"range\", \"choice\" or \"fixed\").\n", - " \"bounds\": [1e-6, 0.4], # The bounds for range parameters. \n", - " # \"values\" The possible values for choice parameters .\n", - " # \"value\" The fixed value for fixed parameters.\n", - " \"value_type\": \"float\", # Optional, the value type (\"int\", \"float\", \"bool\" or \"str\"). Defaults to inference from type of \"bounds\".\n", - " \"log_scale\": True, # Optional, whether to use a log scale for range parameters. Defaults to False.\n", - " # \"is_ordered\" Optional, a flag for choice parameters.\n", - " },\n", - " {\n", - " \"name\": \"momentum\", \n", - " \"type\": \"range\", \n", - " \"bounds\": [0.0, 1.0], \n", - " },\n", - " ],\n", - " objectives={\"accuracy\": ObjectiveProperties(minimize=False)}, # The objective name and minimization setting.\n", - " # parameter_constraints: Optional, a list of strings of form \"p1 >= p2\" or \"p1 + p2 <= some_bound\".\n", - " # outcome_constraints: Optional, a list of strings of form \"constrained_metric <= some_bound\".\n", - ")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "af441a83-50fd-4385-a380-d8ebc570c0e5", - "showInput": false - }, - "source": [ - "## 4. Define how to evaluate trials\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "c7630dfd-548b-408a-badf-b6abf79275e2", - "showInput": false - }, - "source": [ - "First we define a simple CNN class to classify the MNIST images" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415267282, - "executionStopTime": 1690415267286, - "originalKey": "e41fea0a-ae71-4e6f-8c0a-6eb6ae143fb0", - "requestMsgId": "60f14ec9-eb1b-4e88-95c5-15c91f999c90", - "showInput": true - }, - "outputs": [], - "source": [ - "class CNN(nn.Module):\n", - " \n", - " def __init__(self) -> None:\n", - " super().__init__()\n", - " self.conv1 = nn.Conv2d(1, 20, kernel_size=5, stride=1)\n", - " self.fc1 = nn.Linear(8 * 8 * 20, 64)\n", - " self.fc2 = nn.Linear(64, 10)\n", - "\n", - " def forward(self, x: Tensor) -> Tensor:\n", - " x = F.relu(self.conv1(x))\n", - " x = F.max_pool2d(x, 3, 3)\n", - " x = x.view(-1, 8 * 8 * 20)\n", - " x = F.relu(self.fc1(x))\n", - " x = self.fc2(x)\n", - " return F.log_softmax(x, dim=-1)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "8ef6bcb9-c492-4874-b8c7-a07f7e6291ad", - "showInput": false - }, - "source": [ - "In this tutorial, we want to optimize classification accuracy on the validation set as a function of the learning rate and momentum. The `train_evaluate` function takes in a parameterization (set of parameter values), computes the classification accuracy, and returns that metric. " - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415267388, - "executionStopTime": 1690415267395, - "originalKey": "a7e4bcc4-7494-429b-bb93-7ad84d0985af", - "requestMsgId": "5d486dbf-60cb-453d-8f24-8605f974b0a7", - "showInput": true - }, - "outputs": [], - "source": [ - "def train_evaluate(parameterization):\n", - " \"\"\"\n", - " Train the model and then compute an evaluation metric.\n", - "\n", - " In this tutorial, the CNN utils package is doing a lot of work\n", - " under the hood:\n", - " - `train` initializes the network, defines the loss function\n", - " and optimizer, performs the training loop, and returns the\n", - " trained model.\n", - " - `evaluate` computes the accuracy of the model on the\n", - " evaluation dataset and returns the metric.\n", - "\n", - " For your use case, you can define training and evaluation functions\n", - " of your choosing.\n", - "\n", - " \"\"\"\n", - " net = CNN()\n", - " net = train(\n", - " net=net,\n", - " train_loader=train_loader,\n", - " parameters=parameterization,\n", - " dtype=dtype,\n", - " device=device,\n", - " )\n", - "\n", - " return evaluate(\n", - " net=net, \n", - " data_loader=valid_loader, \n", - " dtype=dtype, \n", - " device=device,\n", - " )\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "9ab127a8-021f-4ec8-9f4e-f4256a2e322a", - "showInput": false - }, - "source": [ - "## 5. Run optimization loop\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "411a2fb4-e8a3-4414-bc17-09f0b5ba3e74", - "showInput": false - }, - "source": [ - "First we use `attach_trial` to attach a custom trial with manually-chosen parameters. This step is optional, but we include it here to demonstrate adding manual trials and to serve as a baseline model with decent performance. " - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1690415267533, - "executionStopTime": 1690415287786, - "originalKey": "1388ef55-5642-46ab-b297-c76a73a48aca", - "requestMsgId": "b32a4981-ad59-46e1-b701-fa5a5f118d8b", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:47:47] ax.core.experiment: Attached custom parameterizations [{'lr': 2.6e-05, 'momentum': 0.58}] as trial 0.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:48:07] ax.service.ax_client: Completed trial 0 with data: {'accuracy': (0.841833, None)}.\n" - ] - } - ], - "source": [ - "# Attach the trial\n", - "ax_client.attach_trial(\n", - " parameters={\"lr\": 0.000026, \"momentum\": 0.58}\n", - ")\n", - "\n", - "# Get the parameters and run the trial \n", - "baseline_parameters = ax_client.get_trial_parameters(trial_index=0)\n", - "ax_client.complete_trial(trial_index=0, raw_data=train_evaluate(baseline_parameters))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "f0f886a1-c5c8-44bb-b2fd-9fa3f140357a", - "showInput": false - }, - "source": [ - "Now we start the optimization loop.\n", - "\n", - "At each step, the user queries the client for a new trial then submits the evaluation of that trial back to the client.\n", - "\n", - "Note that Ax auto-selects an appropriate optimization algorithm based on the search space. For more advanced use cases that require a specific optimization algorithm, pass a `generation_strategy` argument into the `AxClient` constructor. Note that when Bayesian Optimization is used, generating new trials may take a few minutes." - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415287908, - "executionStopTime": 1690415945107, - "originalKey": "bff5d714-1ab3-43d3-b9b3-8c3a53c81dcb", - "requestMsgId": "a203534f-85dd-4dfa-9fa6-6aa46a0200a3", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:48:07] ax.service.ax_client: Generated new trial 1 with parameters {'lr': 0.009955, 'momentum': 0.633423}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:48:31] ax.service.ax_client: Completed trial 1 with data: {'accuracy': (0.100333, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:48:31] ax.service.ax_client: Generated new trial 2 with parameters {'lr': 5e-06, 'momentum': 0.022851}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:48:55] ax.service.ax_client: Completed trial 2 with data: {'accuracy': (0.318667, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:48:55] ax.service.ax_client: Generated new trial 3 with parameters {'lr': 7e-06, 'momentum': 0.176948}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:49:20] ax.service.ax_client: Completed trial 3 with data: {'accuracy': (0.4585, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:49:20] ax.service.ax_client: Generated new trial 4 with parameters {'lr': 8.2e-05, 'momentum': 0.90883}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:49:47] ax.service.ax_client: Completed trial 4 with data: {'accuracy': (0.925667, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:49:47] ax.service.ax_client: Generated new trial 5 with parameters {'lr': 0.000302, 'momentum': 0.341904}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:50:13] ax.service.ax_client: Completed trial 5 with data: {'accuracy': (0.929, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:50:15] ax.service.ax_client: Generated new trial 6 with parameters {'lr': 0.000137, 'momentum': 0.590888}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:50:38] ax.service.ax_client: Completed trial 6 with data: {'accuracy': (0.916167, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:50:40] ax.service.ax_client: Generated new trial 7 with parameters {'lr': 1e-05, 'momentum': 1.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:51:04] ax.service.ax_client: Completed trial 7 with data: {'accuracy': (0.856, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:51:05] ax.service.ax_client: Generated new trial 8 with parameters {'lr': 0.000251, 'momentum': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:51:29] ax.service.ax_client: Completed trial 8 with data: {'accuracy': (0.811833, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:51:32] ax.service.ax_client: Generated new trial 9 with parameters {'lr': 3.8e-05, 'momentum': 1.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:51:55] ax.service.ax_client: Completed trial 9 with data: {'accuracy': (0.701833, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:51:57] ax.service.ax_client: Generated new trial 10 with parameters {'lr': 1e-06, 'momentum': 1.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:52:18] ax.service.ax_client: Completed trial 10 with data: {'accuracy': (0.582667, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:52:20] ax.service.ax_client: Generated new trial 11 with parameters {'lr': 0.000108, 'momentum': 0.342496}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:52:38] ax.service.ax_client: Completed trial 11 with data: {'accuracy': (0.9005, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:52:41] ax.service.ax_client: Generated new trial 12 with parameters {'lr': 0.000263, 'momentum': 0.806666}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:53:06] ax.service.ax_client: Completed trial 12 with data: {'accuracy': (0.9525, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:53:10] ax.service.ax_client: Generated new trial 13 with parameters {'lr': 0.000263, 'momentum': 1.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:53:32] ax.service.ax_client: Completed trial 13 with data: {'accuracy': (0.102667, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:53:35] ax.service.ax_client: Generated new trial 14 with parameters {'lr': 3.5e-05, 'momentum': 0.803927}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:53:56] ax.service.ax_client: Completed trial 14 with data: {'accuracy': (0.893167, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:53:59] ax.service.ax_client: Generated new trial 15 with parameters {'lr': 0.003381, 'momentum': 0.0}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:54:20] ax.service.ax_client: Completed trial 15 with data: {'accuracy': (0.1095, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:54:24] ax.service.ax_client: Generated new trial 16 with parameters {'lr': 5e-06, 'momentum': 0.732307}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:54:45] ax.service.ax_client: Completed trial 16 with data: {'accuracy': (0.664, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:54:51] ax.service.ax_client: Generated new trial 17 with parameters {'lr': 7.2e-05, 'momentum': 0.661369}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:55:21] ax.service.ax_client: Completed trial 17 with data: {'accuracy': (0.908667, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:55:28] ax.service.ax_client: Generated new trial 18 with parameters {'lr': 0.000275, 'momentum': 0.544159}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:55:52] ax.service.ax_client: Completed trial 18 with data: {'accuracy': (0.7855, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:55:58] ax.service.ax_client: Generated new trial 19 with parameters {'lr': 0.0001, 'momentum': 0.150271}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:56:20] ax.service.ax_client: Completed trial 19 with data: {'accuracy': (0.749, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:56:24] ax.service.ax_client: Generated new trial 20 with parameters {'lr': 7.9e-05, 'momentum': 0.514732}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:56:46] ax.service.ax_client: Completed trial 20 with data: {'accuracy': (0.8875, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:56:49] ax.service.ax_client: Generated new trial 21 with parameters {'lr': 8.8e-05, 'momentum': 0.729174}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:57:11] ax.service.ax_client: Completed trial 21 with data: {'accuracy': (0.920667, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:57:19] ax.service.ax_client: Generated new trial 22 with parameters {'lr': 8.8e-05, 'momentum': 0.842395}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:57:44] ax.service.ax_client: Completed trial 22 with data: {'accuracy': (0.926667, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:57:47] ax.service.ax_client: Generated new trial 23 with parameters {'lr': 2e-05, 'momentum': 0.901269}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:58:11] ax.service.ax_client: Completed trial 23 with data: {'accuracy': (0.885667, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:58:16] ax.service.ax_client: Generated new trial 24 with parameters {'lr': 0.000196, 'momentum': 0.74567}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:58:36] ax.service.ax_client: Completed trial 24 with data: {'accuracy': (0.937333, None)}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:58:39] ax.service.ax_client: Generated new trial 25 with parameters {'lr': 0.000459, 'momentum': 0.244435}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:59:04] ax.service.ax_client: Completed trial 25 with data: {'accuracy': (0.924667, None)}.\n" - ] - } - ], - "source": [ - "for i in range(25):\n", - " parameters, trial_index = ax_client.get_next_trial()\n", - " # Local evaluation here can be replaced with deployment to external system.\n", - " ax_client.complete_trial(trial_index=trial_index, raw_data=train_evaluate(parameters))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "ccd16059-db9f-475b-b527-75afb320e0f4", - "showInput": false - }, - "source": [ - "### How many trials can run in parallel?\n", - "By default, Ax restricts number of trials that can run in parallel for some optimization stages, in order to improve the optimization performance and reduce the number of trials that the optimization will require. To check the maximum parallelism for each optimization stage:" - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415945269, - "executionStopTime": 1690415945336, - "originalKey": "7182d2f9-912c-464c-b5ad-f65ce6f00017", - "requestMsgId": "4cb4ff79-e45b-4c7d-86a1-7f8007eb2c81", - "showInput": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[(5, 5), (-1, 3)]" - ] - }, - "execution_count": 10, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ax_client.get_max_parallelism()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "e2f429e6-2ec8-4af2-906b-52a36a53d329", - "showInput": false - }, - "source": [ - "The output of this function is a list of tuples of form (number of trials, max parallelism), so the example above means \"the max parallelism is 5 for the first 5 trials and 3 for all subsequent trials.\" This is because the first 5 trials are produced quasi-randomly and can all be evaluated at once, and subsequent trials are produced via Bayesian optimization, which converges on optimal point in fewer trials when parallelism is limited. MaxParallelismReachedException indicates that the parallelism limit has been reached –– refer to the 'Service API Exceptions Meaning and Handling' section at the end of the tutorial for handling.\n", - "\n" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "86c7aef9-993a-411e-add5-05839b00d3cf", - "showInput": false - }, - "source": [ - "### How to view all existing trials during optimization?" - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1690415945532, - "executionStopTime": 1690415946199, - "originalKey": "3fbad5dc-863a-494e-b04f-d7dc1e47936c", - "requestMsgId": "905ea8b6-add0-473e-8516-5be6ad7d7658", - "showInput": true - }, - "outputs": [ - { - "data": { - "application/vnd.dataresource+json": { - "data": [ - { - "accuracy": 0.8418333333, - "arm_name": "0_0", - "generation_method": "Manual", - "index": 0, - "lr": 0.000026, - "momentum": 0.58, - "trial_index": 0, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.1003333333, - "arm_name": "1_0", - "generation_method": "Sobol", - "index": 1, - "lr": 0.009955092, - "momentum": 0.6334228516, - "trial_index": 1, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.3186666667, - "arm_name": "2_0", - "generation_method": "Sobol", - "index": 2, - "lr": 0.0000051834, - "momentum": 0.0228514969, - "trial_index": 2, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.4585, - "arm_name": "3_0", - "generation_method": "Sobol", - "index": 3, - "lr": 0.000006635, - "momentum": 0.1769482559, - "trial_index": 3, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.9256666667, - "arm_name": "4_0", - "generation_method": "Sobol", - "index": 4, - "lr": 0.0000815482, - "momentum": 0.9088304993, - "trial_index": 4, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.929, - "arm_name": "5_0", - "generation_method": "Sobol", - "index": 5, - "lr": 0.0003020767, - "momentum": 0.3419039119, - "trial_index": 5, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.9161666667, - "arm_name": "6_0", - "generation_method": "GPEI", - "index": 6, - "lr": 0.000136907, - "momentum": 0.5908877683, - "trial_index": 6, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.856, - "arm_name": "7_0", - "generation_method": "GPEI", - "index": 7, - "lr": 0.0000104947, - "momentum": 1, - "trial_index": 7, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.8118333333, - "arm_name": "8_0", - "generation_method": "GPEI", - "index": 8, - "lr": 0.0002509028, - "momentum": 0, - "trial_index": 8, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.7018333333, - "arm_name": "9_0", - "generation_method": "GPEI", - "index": 9, - "lr": 0.0000379926, - "momentum": 1, - "trial_index": 9, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.5826666667, - "arm_name": "10_0", - "generation_method": "GPEI", - "index": 10, - "lr": 0.000001, - "momentum": 1, - "trial_index": 10, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.9005, - "arm_name": "11_0", - "generation_method": "GPEI", - "index": 11, - "lr": 0.0001078525, - "momentum": 0.3424964736, - "trial_index": 11, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.9525, - "arm_name": "12_0", - "generation_method": "GPEI", - "index": 12, - "lr": 0.0002630771, - "momentum": 0.8066655528, - "trial_index": 12, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.1026666667, - "arm_name": "13_0", - "generation_method": "GPEI", - "index": 13, - "lr": 0.000262939, - "momentum": 1, - "trial_index": 13, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.8931666667, - "arm_name": "14_0", - "generation_method": "GPEI", - "index": 14, - "lr": 0.0000346961, - "momentum": 0.803927181, - "trial_index": 14, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.1095, - "arm_name": "15_0", - "generation_method": "GPEI", - "index": 15, - "lr": 0.003381413, - "momentum": 0, - "trial_index": 15, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.664, - "arm_name": "16_0", - "generation_method": "GPEI", - "index": 16, - "lr": 0.0000053473, - "momentum": 0.7323071004, - "trial_index": 16, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.9086666667, - "arm_name": "17_0", - "generation_method": "GPEI", - "index": 17, - "lr": 0.0000723455, - "momentum": 0.6613688366, - "trial_index": 17, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.7855, - "arm_name": "18_0", - "generation_method": "GPEI", - "index": 18, - "lr": 0.0002750256, - "momentum": 0.5441589247, - "trial_index": 18, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.749, - "arm_name": "19_0", - "generation_method": "GPEI", - "index": 19, - "lr": 0.0001001594, - "momentum": 0.1502713708, - "trial_index": 19, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.8875, - "arm_name": "20_0", - "generation_method": "GPEI", - "index": 20, - "lr": 0.0000788211, - "momentum": 0.5147323108, - "trial_index": 20, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.9206666667, - "arm_name": "21_0", - "generation_method": "GPEI", - "index": 21, - "lr": 0.0000884713, - "momentum": 0.7291741459, - "trial_index": 21, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.9266666667, - "arm_name": "22_0", - "generation_method": "GPEI", - "index": 22, - "lr": 0.0000881885, - "momentum": 0.8423945488, - "trial_index": 22, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.8856666667, - "arm_name": "23_0", - "generation_method": "GPEI", - "index": 23, - "lr": 0.000020353, - "momentum": 0.9012690188, - "trial_index": 23, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.9373333333, - "arm_name": "24_0", - "generation_method": "GPEI", - "index": 24, - "lr": 0.0001964937, - "momentum": 0.7456700316, - "trial_index": 24, - "trial_status": "COMPLETED" - }, - { - "accuracy": 0.9246666667, - "arm_name": "25_0", - "generation_method": "GPEI", - "index": 25, - "lr": 0.0004594098, - "momentum": 0.2444348002, - "trial_index": 25, - "trial_status": "COMPLETED" - } - ], - "schema": { - "fields": [ - { - "name": "index", - "type": "integer" - }, - { - "name": "trial_index", - "type": "integer" - }, - { - "name": "arm_name", - "type": "string" - }, - { - "name": "trial_status", - "type": "string" - }, - { - "name": "generation_method", - "type": "string" - }, - { - "name": "accuracy", - "type": "number" - }, - { - "name": "lr", - "type": "number" - }, - { - "name": "momentum", - "type": "number" - } - ], - "pandas_version": "0.20.0", - "primaryKey": [ - "index" - ] - } - }, - "text/html": [ - "
\n", - "\n", - "\n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - " \n", - "
trial_indexarm_nametrial_statusgeneration_methodaccuracylrmomentum
000_0COMPLETEDManual0.8418330.0000260.580000
111_0COMPLETEDSobol0.1003330.0099550.633423
222_0COMPLETEDSobol0.3186670.0000050.022851
333_0COMPLETEDSobol0.4585000.0000070.176948
444_0COMPLETEDSobol0.9256670.0000820.908830
555_0COMPLETEDSobol0.9290000.0003020.341904
666_0COMPLETEDGPEI0.9161670.0001370.590888
777_0COMPLETEDGPEI0.8560000.0000101.000000
888_0COMPLETEDGPEI0.8118330.0002510.000000
999_0COMPLETEDGPEI0.7018330.0000381.000000
101010_0COMPLETEDGPEI0.5826670.0000011.000000
111111_0COMPLETEDGPEI0.9005000.0001080.342496
121212_0COMPLETEDGPEI0.9525000.0002630.806666
131313_0COMPLETEDGPEI0.1026670.0002631.000000
141414_0COMPLETEDGPEI0.8931670.0000350.803927
151515_0COMPLETEDGPEI0.1095000.0033810.000000
161616_0COMPLETEDGPEI0.6640000.0000050.732307
171717_0COMPLETEDGPEI0.9086670.0000720.661369
181818_0COMPLETEDGPEI0.7855000.0002750.544159
191919_0COMPLETEDGPEI0.7490000.0001000.150271
202020_0COMPLETEDGPEI0.8875000.0000790.514732
212121_0COMPLETEDGPEI0.9206670.0000880.729174
222222_0COMPLETEDGPEI0.9266670.0000880.842395
232323_0COMPLETEDGPEI0.8856670.0000200.901269
242424_0COMPLETEDGPEI0.9373330.0001960.745670
252525_0COMPLETEDGPEI0.9246670.0004590.244435
\n", - "
" - ], - "text/plain": [ - " trial_index arm_name trial_status ... accuracy lr momentum\n", - "0 0 0_0 COMPLETED ... 0.841833 0.000026 0.580000\n", - "1 1 1_0 COMPLETED ... 0.100333 0.009955 0.633423\n", - "2 2 2_0 COMPLETED ... 0.318667 0.000005 0.022851\n", - "3 3 3_0 COMPLETED ... 0.458500 0.000007 0.176948\n", - "4 4 4_0 COMPLETED ... 0.925667 0.000082 0.908830\n", - "5 5 5_0 COMPLETED ... 0.929000 0.000302 0.341904\n", - "6 6 6_0 COMPLETED ... 0.916167 0.000137 0.590888\n", - "7 7 7_0 COMPLETED ... 0.856000 0.000010 1.000000\n", - "8 8 8_0 COMPLETED ... 0.811833 0.000251 0.000000\n", - "9 9 9_0 COMPLETED ... 0.701833 0.000038 1.000000\n", - "10 10 10_0 COMPLETED ... 0.582667 0.000001 1.000000\n", - "11 11 11_0 COMPLETED ... 0.900500 0.000108 0.342496\n", - "12 12 12_0 COMPLETED ... 0.952500 0.000263 0.806666\n", - "13 13 13_0 COMPLETED ... 0.102667 0.000263 1.000000\n", - "14 14 14_0 COMPLETED ... 0.893167 0.000035 0.803927\n", - "15 15 15_0 COMPLETED ... 0.109500 0.003381 0.000000\n", - "16 16 16_0 COMPLETED ... 0.664000 0.000005 0.732307\n", - "17 17 17_0 COMPLETED ... 0.908667 0.000072 0.661369\n", - "18 18 18_0 COMPLETED ... 0.785500 0.000275 0.544159\n", - "19 19 19_0 COMPLETED ... 0.749000 0.000100 0.150271\n", - "20 20 20_0 COMPLETED ... 0.887500 0.000079 0.514732\n", - "21 21 21_0 COMPLETED ... 0.920667 0.000088 0.729174\n", - "22 22 22_0 COMPLETED ... 0.926667 0.000088 0.842395\n", - "23 23 23_0 COMPLETED ... 0.885667 0.000020 0.901269\n", - "24 24 24_0 COMPLETED ... 0.937333 0.000196 0.745670\n", - "25 25 25_0 COMPLETED ... 0.924667 0.000459 0.244435\n", - "\n", - "[26 rows x 7 columns]" - ] - }, - "execution_count": 11, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ax_client.get_trials_data_frame()" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "9f1ebc55-e6f2-498f-9185-569227c2f3d5", - "showInput": false - }, - "source": [ - "## 6. Retrieve best parameters\n", - "\n", - "Once it's complete, we can access the best parameters found, as well as the corresponding metric values. Note that these parameters may not necessarily be the set that yielded the highest _observed_ accuracy because Ax uses the highest model _predicted_ accuracy to choose the best parameters (see [here](https://ax.dev/api/service.html#module-ax.service.utils.best_point_mixin) for more details). Due to randomness in the data or the algorithm itself, using observed accuracy may result in choosing an outlier for the best set of parameters. Using the model predicted best will use the model to regularize the observations and reduce the likelihood of picking some outlier in the data." - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415946312, - "executionStopTime": 1690415949198, - "originalKey": "8fdf0023-2bf5-4cdd-93ea-a8a708dc6845", - "requestMsgId": "c0b8c25d-c6ae-476e-be23-f1b963df296b", - "showInput": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'lr': 8.818852013491222e-05, 'momentum': 0.8423945487504687}" - ] - }, - "execution_count": 12, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "best_parameters, values = ax_client.get_best_parameters()\n", - "best_parameters" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415949308, - "executionStopTime": 1690415949313, - "originalKey": "f3eb18fc-be99-494a-aeac-e9b05a3bc182", - "requestMsgId": "ac214ea0-ea8c-46f2-a988-b42893ef6d6d", - "showInput": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'accuracy': 0.9524827955603861}" - ] - }, - "execution_count": 13, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "mean, covariance = values\n", - "mean" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "6be3b006-d090-4c73-a64a-12901d1af817", - "showInput": false - }, - "source": [ - "## 7. Plot the response surface and optimization trace\n", - "\n", - "Contour plot showing classification accuracy as a function of the two hyperparameters.\n", - "\n", - "The black squares show points that we have actually run; notice how they are clustered in the optimal region." - ] - }, - { - "cell_type": "code", - "execution_count": 14, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415949431, - "executionStopTime": 1690415953540, - "originalKey": "1beca759-2fa5-48d1-bfed-c9b13a054733", - "requestMsgId": "fa48963e-b43c-4079-81a4-079d347fe9ba", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 16:59:09] ax.service.ax_client: Retrieving contour plot with parameter 'lr' on X-axis and 'momentum' on Y-axis, for metric 'accuracy'. Remaining parameters are affixed to the middle of their range.\n" - ] - }, - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "autocolorscale": false, - "autocontour": true, - "colorbar": { - "tickfont": { - "size": 8 - }, - "ticksuffix": "", - "x": 0.45, - "y": 0.5 - }, - "colorscale": [ - [ - 0, - "rgb(247,252,253)" - ], - [ - 0.125, - "rgb(229,245,249)" - ], - [ - 0.25, - "rgb(204,236,230)" - ], - [ - 0.375, - "rgb(153,216,201)" - ], - [ - 0.5, - "rgb(102,194,164)" - ], - [ - 0.625, - "rgb(65,174,118)" - ], - [ - 0.75, - "rgb(35,139,69)" - ], - [ - 0.875, - "rgb(0,109,44)" - ], - [ - 1, - "rgb(0,68,27)" - ] - ], - "contours": { - "coloring": "heatmap", - "end": 0.9500000000000001, - "size": 0.05, - "start": 0.15000000000000002 - }, - "hoverinfo": "x+y+z", - "ncontours": 25, - "type": "contour", - "x": [ - 0.000001, - 0.0000013011511650442548, - 0.000001692994354296022, - 0.0000022028415765056147, - 0.000002866229883678204, - 0.000003729398352432554, - 0.000004852511011181743, - 0.0000063138503555892, - 0.000008215273746089953, - 0.000010689313005882424, - 0.00001390841207112662, - 0.00001809694657026198, - 0.00002354686311364001, - 0.00003063802837345029, - 0.00003986470631277378, - 0.000051870009063012666, - 0.00006749072272319499, - 0.00008781563250096393, - 0.00011426141253772724, - 0.00014867137004306603, - 0.00019344392634026088, - 0.0002516997901283655, - 0.0003274994751669172, - 0.0004261263236648159, - 0.0005544547624925005, - 0.0007214294601814526, - 0.000938688782612345, - 0.0012213760031100258, - 0.0015891948094037057, - 0.002067782677737912, - 0.0026904978401970136, - 0.0035007443993213955, - 0.004554997653699184, - 0.005926740503884541, - 0.007711585311544345, - 0.010033938212454078, - 0.013055670395116691, - 0.01698740074503987, - 0.02210317627048227, - 0.028759573555516536, - 0.03742055263793628, - 0.04868979566145066, - 0.06335278435066323, - 0.0824315491666629, - 0.10725590623460621, - 0.13955614735503497, - 0.18158364372009145, - 0.23626776957937787, - 0.3074200836506151, - 0.4 - ], - "xaxis": "x", - "y": [ - 0, - 0.02040816326530612, - 0.04081632653061224, - 0.061224489795918366, - 0.08163265306122448, - 0.1020408163265306, - 0.12244897959183673, - 0.14285714285714285, - 0.16326530612244897, - 0.18367346938775508, - 0.2040816326530612, - 0.22448979591836732, - 0.24489795918367346, - 0.26530612244897955, - 0.2857142857142857, - 0.3061224489795918, - 0.32653061224489793, - 0.3469387755102041, - 0.36734693877551017, - 0.3877551020408163, - 0.4081632653061224, - 0.42857142857142855, - 0.44897959183673464, - 0.4693877551020408, - 0.4897959183673469, - 0.5102040816326531, - 0.5306122448979591, - 0.5510204081632653, - 0.5714285714285714, - 0.5918367346938775, - 0.6122448979591836, - 0.6326530612244897, - 0.6530612244897959, - 0.673469387755102, - 0.6938775510204082, - 0.7142857142857142, - 0.7346938775510203, - 0.7551020408163265, - 0.7755102040816326, - 0.7959183673469387, - 0.8163265306122448, - 0.836734693877551, - 0.8571428571428571, - 0.8775510204081632, - 0.8979591836734693, - 0.9183673469387754, - 0.9387755102040816, - 0.9591836734693877, - 0.9795918367346939, - 1 - ], - "yaxis": "y", - "z": [ - [ - 0.24369127982952066, - 0.24577270065341378, - 0.2509193619493888, - 0.25969807166550274, - 0.2726696429077491, - 0.29033877469862435, - 0.3130773066914314, - 0.34101637237149346, - 0.3739527526780525, - 0.4113705075132705, - 0.4525303079230904, - 0.49653473827987415, - 0.5423583428258651, - 0.5888509812843081, - 0.6347236235568046, - 0.6785261707797461, - 0.7186289149301053, - 0.753222934660105, - 0.7803590822062022, - 0.7980481963368832, - 0.8044450565039939, - 0.7981362391536043, - 0.7785410800169217, - 0.7462028109700972, - 0.7026004359388291, - 0.6498414893063039, - 0.5904304611993655, - 0.527090091602497, - 0.462610157930568, - 0.39970198573317683, - 0.3408381810446152, - 0.28805636754922737, - 0.24271483768662727, - 0.20536867306820417, - 0.17595468653039636, - 0.1540156494005126, - 0.13886309382052786, - 0.1296918466059931, - 0.12565873622382773, - 0.1259349518909728, - 0.1297392387622005, - 0.13635734276121902, - 0.14515175842816974, - 0.15556479238994914, - 0.16711716207432492, - 0.1794037478806878, - 0.1920876632728653, - 0.20489346696673816, - 0.2176000879729315, - 0.23003384712272246 - ], - [ - 0.2472564076120175, - 0.24946348795120799, - 0.2546804319642459, - 0.26346109510527305, - 0.2763552121496431, - 0.2938608448680869, - 0.31635071486153854, - 0.34396233334248066, - 0.37648731622134063, - 0.41340512236572935, - 0.4539874034771424, - 0.4973636935673118, - 0.542549676097164, - 0.5884480761388818, - 0.633831009715898, - 0.6773125733093442, - 0.7173225793588637, - 0.7520971738690367, - 0.7797086039050762, - 0.7981612010099977, - 0.8055796238392963, - 0.8005079671321168, - 0.7823032628416404, - 0.75139752943568, - 0.7091617444812846, - 0.6576232086930337, - 0.5992331964300001, - 0.5366838824660835, - 0.47275142641344003, - 0.41014433543680434, - 0.3513372111948164, - 0.29837019500008305, - 0.25261922460415054, - 0.21469222591074266, - 0.1845812014318018, - 0.16187522164224655, - 0.14592336107569226, - 0.1359500725295677, - 0.1311348453040614, - 0.1306655339375825, - 0.13377249347423892, - 0.1397489037195877, - 0.1479613167402034, - 0.1578534303582615, - 0.1689453043325143, - 0.18082963941175045, - 0.1931662889466711, - 0.20567583441716797, - 0.2181328038336614, - 0.23035892517925627 - ], - [ - 0.25313399124915165, - 0.25568020108251027, - 0.2611707493250181, - 0.27013300548724944, - 0.2830870632476756, - 0.30049965768613685, - 0.3227129343661896, - 0.34984090612689367, - 0.3816758533026381, - 0.4177176772035671, - 0.45727028769795297, - 0.499506995968216, - 0.5434984857618539, - 0.5882132664741173, - 0.6324991072346402, - 0.6750530544369918, - 0.7143894149069264, - 0.7488209842196253, - 0.7764785422326886, - 0.7954020478903556, - 0.8037340595055308, - 0.8000229063590636, - 0.7835770920975547, - 0.7546833928384314, - 0.7145401107129205, - 0.6650324889493219, - 0.608507509501968, - 0.5475834769781412, - 0.48498286242621347, - 0.42337037857810295, - 0.3651786716572748, - 0.3124107539491124, - 0.2664475543854292, - 0.22797158455795963, - 0.1970713660834934, - 0.17342109330892708, - 0.15643828773869073, - 0.14540046407428775, - 0.13952706164827022, - 0.13803502620128005, - 0.1401749744801477, - 0.14525328511500846, - 0.15264415483545335, - 0.1617946419580073, - 0.1722249380657086, - 0.1835255135515791, - 0.19535233161598864, - 0.2074209854440553, - 0.21950035888360164, - 0.2314062219580656 - ], - [ - 0.26125515886448847, - 0.26435380556855, - 0.2703240908762267, - 0.2796544338748407, - 0.2928179803018957, - 0.31022726268781803, - 0.3321670847536228, - 0.35870851920784425, - 0.3896460007002175, - 0.424517929404215, - 0.4626803363048952, - 0.503366509499194, - 0.5457146898685519, - 0.5887697818076955, - 0.6314666088598312, - 0.6726007001373029, - 0.7107934353369317, - 0.7444645045314912, - 0.7718381073957757, - 0.7910242124100528, - 0.8002110966439582, - 0.7979611225475662, - 0.78352660233908, - 0.7570425616718535, - 0.7195099595746394, - 0.6726316651292682, - 0.6186084035729009, - 0.5599452151643208, - 0.49927344607989815, - 0.4391779180314628, - 0.382018058206213, - 0.3297434442618331, - 0.2837376281999576, - 0.24475906904684747, - 0.21300980621072907, - 0.18827572286851824, - 0.17006857252811403, - 0.15774025614718667, - 0.1505666018726317, - 0.1478057801402396, - 0.148737289402728, - 0.15268656634041533, - 0.1590391949414418, - 0.16724774669292342, - 0.17683352787954387, - 0.1873849212247254, - 0.19855355746194825, - 0.2100492092761369, - 0.22163404145930998, - 0.23311665783565627 - ], - [ - 0.27144801647391004, - 0.27529325075538674, - 0.2819307337135328, - 0.2917991652653384, - 0.3053105052779877, - 0.32280641421084777, - 0.34450015402031464, - 0.3704138871885246, - 0.40034172549345104, - 0.4338659298611305, - 0.4704079992136183, - 0.5092749552912097, - 0.549683418564164, - 0.5907627770724867, - 0.6315424016125089, - 0.6709265865161339, - 0.7076605974874333, - 0.7402957379045806, - 0.767177111463922, - 0.7865043379221558, - 0.7965154836456625, - 0.7957760523486742, - 0.7834723598737505, - 0.7595930201115761, - 0.7249440735059276, - 0.6810320900409597, - 0.6298864485240366, - 0.5738696822457324, - 0.5154927043846498, - 0.45723471066996885, - 0.401365178593388, - 0.34977583780798815, - 0.30385142746791793, - 0.26441986089800834, - 0.23179615628079997, - 0.20588829087818483, - 0.1863180673171585, - 0.17252778277217917, - 0.16386345473861552, - 0.15963541490622857, - 0.1591602338012772, - 0.16178824272080172, - 0.16692034486427398, - 0.17401707142457234, - 0.1826021644370448, - 0.192262410274048, - 0.2026450051621259, - 0.21345339093468474, - 0.22444223694531795, - 0.2354120458506741 - ], - [ - 0.28345344647192233, - 0.28820600471762925, - 0.29566455486402854, - 0.30621052153506967, - 0.32018622200549324, - 0.337855121352911, - 0.3593557671770455, - 0.38466131061228687, - 0.41356318504829037, - 0.4456870458010505, - 0.4805258880435458, - 0.5174692639154057, - 0.5558195790189803, - 0.5947953387679837, - 0.6335229442875181, - 0.671017910238789, - 0.7061554614337066, - 0.7376315155667019, - 0.7639277165235578, - 0.7833375323602242, - 0.7941373105458294, - 0.7948804858554154, - 0.7846837818115528, - 0.7634029745871647, - 0.7316665628664366, - 0.690791352378118, - 0.6426289424283906, - 0.5893848467056033, - 0.5334327587073532, - 0.4771325979774249, - 0.42265749002316116, - 0.3718409514259761, - 0.32606600008089465, - 0.2862198594927975, - 0.2527205418203864, - 0.22559560844412108, - 0.20458163729241552, - 0.1892197718071098, - 0.1789354504857994, - 0.17309956982775876, - 0.17107270239544636, - 0.1722354139836897, - 0.17600780726244047, - 0.18186101782516373, - 0.1893228741535633, - 0.197979447455217, - 0.20747380511275637, - 0.2175029486579967, - 0.22781365600086623, - 0.23819774648394132 - ], - [ - 0.29694900595590795, - 0.30272837064991853, - 0.31112114340765457, - 0.32244822503063897, - 0.33698057906328743, - 0.3549047448325978, - 0.3762886842133374, - 0.40105970177266875, - 0.4290054777830103, - 0.45979335670802496, - 0.49298923436820974, - 0.5280684775470231, - 0.5644220236019846, - 0.6013580446685817, - 0.638097264170407, - 0.6737600922462207, - 0.7073432223536512, - 0.737681479436827, - 0.7633929589118136, - 0.7828573378243949, - 0.7943736994929991, - 0.7964761387138488, - 0.7882184905052708, - 0.7693440083327485, - 0.7403290851290328, - 0.7023204272178056, - 0.6570010752952953, - 0.606420087006982, - 0.5528104496294896, - 0.4984099183874897, - 0.4452953159042388, - 0.3952425895070754, - 0.3496284179265451, - 0.3093871088040087, - 0.2750248403300674, - 0.2466778901253705, - 0.2241931403661277, - 0.20721131993058373, - 0.195241002274273, - 0.18771849467515633, - 0.18405320699897265, - 0.18366018430877795, - 0.1859821615657159, - 0.1905034783749594, - 0.19675789389975917, - 0.20433197108657175, - 0.2128653442202516, - 0.22204887722037925, - 0.23162146904770853, - 0.24136606346074674 - ], - [ - 0.3115761925184533, - 0.31845884436455946, - 0.32785753503292114, - 0.34003358175472526, - 0.3551905811972561, - 0.3734457515870417, - 0.39480584698954885, - 0.41915862109075236, - 0.44628857162995444, - 0.475903225983546, - 0.5076396238373351, - 0.54105684716874, - 0.5756321814373955, - 0.6107601207419031, - 0.6457489469467295, - 0.6798110110793737, - 0.7120429616660783, - 0.7413898743593501, - 0.7665823893509618, - 0.7860713247202991, - 0.7981744073424377, - 0.8014148339948443, - 0.7947993449700494, - 0.7779827850523725, - 0.7513186778772638, - 0.7158110759978992, - 0.6729951212076976, - 0.624776554347524, - 0.5732555223421676, - 0.5205530297919603, - 0.4686536324016903, - 0.4192764389065783, - 0.3737858427186645, - 0.3331498263957145, - 0.2979455443541984, - 0.2684023169914685, - 0.24446644205501233, - 0.22587258033704982, - 0.21221085933442096, - 0.2029839646782683, - 0.19765239463476303, - 0.1956683509155207, - 0.19649979996818567, - 0.1996465514565391, - 0.204650130821861, - 0.21109899164465984, - 0.21863033832642365, - 0.22692956601788183, - 0.23572809511543902, - 0.24480018777219043 - ], - [ - 0.3269668547831286, - 0.3349893415237621, - 0.3454279915167919, - 0.35848864514355916, - 0.37431518567541866, - 0.39296683263191606, - 0.4144023034463538, - 0.4384802207546627, - 0.4649849886269125, - 0.49366239025238284, - 0.5242144996211016, - 0.5562765125509834, - 0.5894053959855782, - 0.6230751905536966, - 0.6566719639163655, - 0.6894834004185277, - 0.7206782018531338, - 0.7492683129375209, - 0.7740430860833686, - 0.7935057245757863, - 0.8060121318620582, - 0.8100936112606132, - 0.8047290208548347, - 0.7895099838093953, - 0.7646982508452326, - 0.7311875985209644, - 0.6903939327431665, - 0.6441020746340019, - 0.594295503926783, - 0.5429895388631935, - 0.4920828219739159, - 0.4432381639027754, - 0.39780087108407575, - 0.35675869526319154, - 0.3207417076633723, - 0.29005425568386717, - 0.26472731313028486, - 0.24457930261716965, - 0.22927604153646075, - 0.21838403712836219, - 0.21141451512322662, - 0.20785774246832878, - 0.2072084317245375, - 0.20898355664299595, - 0.2127340349871748, - 0.21805164421214696, - 0.22457235200230208, - 0.23197703592373964, - 0.23999036897614634, - 0.24837847514678896 - ], - [ - 0.342765690053633, - 0.3519309971241914, - 0.36341289412995087, - 0.3773678279176122, - 0.39388934022250005, - 0.41299117403511737, - 0.43459852845638136, - 0.4585550725960286, - 0.4846532765112976, - 0.512672112727728, - 0.5423661349053621, - 0.5734346133643479, - 0.6055039229855517, - 0.6381175366711789, - 0.6707264358011555, - 0.7026742163017573, - 0.7331713963708174, - 0.761252657287534, - 0.7857164636532398, - 0.8050988715508147, - 0.8178078638425215, - 0.8224013025612134, - 0.8178500933836677, - 0.8037088008648775, - 0.7801805127137585, - 0.7480850308812622, - 0.708753311725071, - 0.6638777485154396, - 0.615346425557284, - 0.5650831212010486, - 0.5149078385626389, - 0.46642722214950905, - 0.42096021144553475, - 0.3795004997088694, - 0.3427131809946505, - 0.3109589960670921, - 0.2843370799580432, - 0.26273680448783354, - 0.24589087883113503, - 0.2334243449296638, - 0.22489654672773207, - 0.21983504348354, - 0.21776165977076944, - 0.21821152366742003, - 0.22074621185976306, - 0.22496215118640417, - 0.2304953329474827, - 0.237023250487023, - 0.244264812957678, - 0.25197883970548507 - ], - [ - 0.3586469900499233, - 0.36893262456432463, - 0.38143882748928254, - 0.39627983676477907, - 0.4135087532229443, - 0.4331061047516265, - 0.4549772624319143, - 0.47896469521064533, - 0.5048779201812575, - 0.5325218725419375, - 0.5616881744602666, - 0.5921254258553292, - 0.6235159183718157, - 0.6554590461593122, - 0.687454968148283, - 0.718882599802974, - 0.7489670716726883, - 0.776735007062765, - 0.8009706885846293, - 0.8202251955257878, - 0.8329490385142182, - 0.8377331363705798, - 0.8335571287445418, - 0.8199647885812371, - 0.7971355853294352, - 0.7658547748413267, - 0.7274061525845101, - 0.6834211818571585, - 0.6357157166285268, - 0.5861367241650924, - 0.5364324111728118, - 0.48815267457323064, - 0.44258259664373645, - 0.4007085704658423, - 0.36321379872983356, - 0.3304974359053131, - 0.3027101036736135, - 0.27979830529765104, - 0.26155128200121935, - 0.24764557459639386, - 0.23768439133479602, - 0.23123043753482253, - 0.22783197440446223, - 0.22704255741854174, - 0.2284352527422211, - 0.23161225189921764, - 0.2362107910155895, - 0.24190619633658772, - 0.24841276371370907, - 0.2554830604473206 - ], - [ - 0.3743249447999999, - 0.38569113293732626, - 0.39918885365097995, - 0.41489778637598235, - 0.4328402857305209, - 0.45297481167158066, - 0.47519821591991096, - 0.4993604749384224, - 0.5252897832162381, - 0.5528115200158534, - 0.5817418575524622, - 0.6118629273839533, - 0.6428968588895655, - 0.674482904662699, - 0.706153704581471, - 0.7373057658426253, - 0.7671614697710364, - 0.794726697840231, - 0.8187643703839527, - 0.8378269377527747, - 0.8503888414383736, - 0.8550664733631912, - 0.8508561212162031, - 0.8373137192231774, - 0.8146302704669522, - 0.7835971986721932, - 0.7454896418794774, - 0.7019091371259789, - 0.6546210077009236, - 0.6054082533758166, - 0.5559524025372622, - 0.5077449962467669, - 0.4620298045994981, - 0.4197737612066368, - 0.3816629490463865, - 0.34811860033900854, - 0.3193272347675458, - 0.29527899813964253, - 0.275808964117542, - 0.26063736329349263, - 0.24940605809098138, - 0.24170980783036, - 0.23712181774015773, - 0.23521370901290484, - 0.23557042530849648, - 0.2378007718838896, - 0.24154433293088706, - 0.24647548354780008, - 0.25230514232940665, - 0.2587808228670791 - ], - [ - 0.3895578950160741, - 0.4019545488480336, - 0.4164037712516239, - 0.4329581277235224, - 0.4516178390483756, - 0.47232806956430484, - 0.49498416804682027, - 0.5194460192604327, - 0.5455572728821048, - 0.5731576518540553, - 0.6020776559390607, - 0.6321181392020135, - 0.6630243177021767, - 0.6944586364364352, - 0.7259710008255102, - 0.7569634741315268, - 0.7866494139353682, - 0.8140149488553025, - 0.8378045017740151, - 0.8565651443381412, - 0.8687783621642062, - 0.873071628562949, - 0.8684568872979103, - 0.8545194660718916, - 0.8314947934828317, - 0.8002195665401096, - 0.7619955780248615, - 0.7184207198934837, - 0.6712264852806001, - 0.6221405828636054, - 0.5727802230544417, - 0.5245758262066689, - 0.47872277887881676, - 0.43615801564154283, - 0.39755760251712324, - 0.36335094526436285, - 0.3337469005371656, - 0.30876712026504055, - 0.2882824578195335, - 0.27204909695630153, - 0.2597420375125568, - 0.25098450275870643, - 0.24537260477678507, - 0.24249517183541935, - 0.2419490141104278, - 0.24335011702045262, - 0.246341347708866, - 0.2505972784259225, - 0.2558267009433306, - 0.26177335022590525 - ], - [ - 0.4041477876612697, - 0.4175194862986158, - 0.43287704707837343, - 0.45025247451935174, - 0.46963055783441726, - 0.49094871007469265, - 0.5141032922726875, - 0.538962004318945, - 0.5653779843275702, - 0.5931976120599347, - 0.6222556002923589, - 0.6523578104320261, - 0.683256629556377, - 0.7146221425184269, - 0.7460090650814739, - 0.7768185644182503, - 0.8062569944353359, - 0.8333007323339423, - 0.8566871216676701, - 0.8749609135134023, - 0.8866021620333524, - 0.8902362222162559, - 0.8848846532664949, - 0.870173930043859, - 0.8464129840845562, - 0.8145176318022846, - 0.7758432812735974, - 0.7320009184659052, - 0.6846966236076826, - 0.6356056803053163, - 0.5862801517959829, - 0.5380856771493794, - 0.4921631128012547, - 0.44941106278868, - 0.4104855854656383, - 0.3758133872300625, - 0.34561479144198815, - 0.3199328881753596, - 0.2986656177629029, - 0.28159809666113705, - 0.26843316484527624, - 0.2588188110235345, - 0.2523717314547369, - 0.24869675549729825, - 0.2474022164970055, - 0.2481115728224379, - 0.2504717134630499, - 0.2541584400374141, - 0.2588796241158648, - 0.26437651304837745 - ], - [ - 0.4179365252636415, - 0.4322254377052836, - 0.44844678255152837, - 0.4666172039458148, - 0.4867105181768874, - 0.5086588212028471, - 0.5323585443490267, - 0.5576803368176446, - 0.5844790823503602, - 0.6125986316399057, - 0.6418670734578762, - 0.6720820625834232, - 0.7029884075947521, - 0.7342499212829873, - 0.7654161389815746, - 0.7958844199512204, - 0.8248605171079025, - 0.8513262444635871, - 0.8740309152660498, - 0.891532100031562, - 0.9023141688285762, - 0.9049966220674124, - 0.8986051848714499, - 0.8828156302066009, - 0.8580345422959857, - 0.8252803373672918, - 0.7859741952610786, - 0.7417428616709059, - 0.6942651078568284, - 0.6451604955181396, - 0.5959123873767822, - 0.5478178166651319, - 0.5019585941661331, - 0.4591894387348883, - 0.4201397559587738, - 0.38522608707609934, - 0.35467242025140494, - 0.32853569117649634, - 0.30673401795493527, - 0.28907555104199, - 0.2752862457980413, - 0.265035328227646, - 0.25795766931059927, - 0.2536726711068225, - 0.25179957858927243, - 0.25196936060577596, - 0.25383345742056906, - 0.25706978229226124, - 0.2613864038345416, - 0.26652333762806824 - ], - [ - 0.4308008519566052, - 0.4459480054541597, - 0.46298738108992865, - 0.48192400651472217, - 0.5027231462944621, - 0.5253116254938397, - 0.5495827851746437, - 0.5754038059016214, - 0.6026225319418894, - 0.6310700925870766, - 0.6605564416836417, - 0.6908579823796902, - 0.7216980879376159, - 0.7527216245089168, - 0.7834642364493796, - 0.8133175790192283, - 0.8414938179982645, - 0.8669966467390929, - 0.8886114250077274, - 0.9049355979786509, - 0.9144824419910753, - 0.9158816306272921, - 0.9081667320648414, - 0.89106989798394, - 0.8651117002353691, - 0.8314177743516702, - 0.7914657368520314, - 0.746884557602043, - 0.6993140051235699, - 0.6503097873355177, - 0.6012815906397923, - 0.5534548629791967, - 0.5078501626706933, - 0.465275939321098, - 0.4263318418660347, - 0.3914202814394029, - 0.3607642497806216, - 0.33442950878577393, - 0.3123493630944549, - 0.294350378440045, - 0.2801776332241157, - 0.26951837462354683, - 0.26202326321956043, - 0.2573246992883902, - 0.2550520028098499, - 0.25484345022218274, - 0.256355345681332, - 0.25926842285002916, - 0.26329194068137507, - 0.2681658623259965 - ], - [ - 0.442647045728334, - 0.4585925071974053, - 0.47640237592761076, - 0.4960725512711597, - 0.5175606608559746, - 0.5407868166859157, - 0.5656369892490271, - 0.5919678829575132, - 0.6196112146268293, - 0.6483748727591545, - 0.6780389422634507, - 0.7083457253579604, - 0.7389838914082051, - 0.7695672848240086, - 0.7996090457937101, - 0.82849232889366, - 0.8554406148517115, - 0.8794934031198025, - 0.8994964256654958, - 0.9141216590684682, - 0.9219544052202775, - 0.9216802876105403, - 0.9123690646265943, - 0.8938192234596873, - 0.8666637733779601, - 0.8321092520811973, - 0.791656889262466, - 0.7469111114323217, - 0.6994545075347086, - 0.6507683634928659, - 0.602183776461739, - 0.5548532855036712, - 0.5097366441129155, - 0.46759685622941494, - 0.4290041030809641, - 0.3943459689162299, - 0.3638426887807773, - 0.3375662064072702, - 0.31546180360700954, - 0.2973710471910822, - 0.28305485030514843, - 0.27221557868300383, - 0.26451733744328865, - 0.25960382272560145, - 0.25711338101836134, - 0.2566911571826379, - 0.25799840871127033, - 0.2607192083741432, - 0.26456484943403497, - 0.2692763131621248 - ], - [ - 0.45340622047630774, - 0.470088693934556, - 0.4886189123495765, - 0.508985254469862, - 0.5311377612257053, - 0.5549877667893303, - 0.5804094063827394, - 0.6072421594060433, - 0.6352930001350465, - 0.6643365096539056, - 0.6941116015238766, - 0.7243141485556076, - 0.7545853822894746, - 0.7844962554603663, - 0.813528195868744, - 0.841051272344955, - 0.8663020804344496, - 0.8883656475687829, - 0.9061680868892018, - 0.9184914065510147, - 0.9240476990217181, - 0.9216498260512705, - 0.9104754242164361, - 0.8904120296107098, - 0.8621623970865608, - 0.8269551691719328, - 0.7862677794558396, - 0.7416468094872218, - 0.6945966706495224, - 0.6465129950436674, - 0.5986441662645843, - 0.5520702834221474, - 0.5076931869015324, - 0.46623405081678326, - 0.42823674888413565, - 0.3940760587892215, - 0.3639700775671618, - 0.33799620769657274, - 0.31610991503600677, - 0.29816528385274244, - 0.2839362874859214, - 0.2731376997313682, - 0.2654446954317271, - 0.26051040116931173, - 0.2579809142373378, - 0.2575075655268826, - 0.2587564255910675, - 0.26141522404165407, - 0.2651979657040319, - 0.26984758762208505 - ], - [ - 0.46303064988318615, - 0.48038683968174595, - 0.4995838664031592, - 0.5206037395207538, - 0.5433887146380936, - 0.5678394121032826, - 0.5938142740812273, - 0.6211298379235077, - 0.6495609810098518, - 0.6788401968757981, - 0.7086551420469891, - 0.7386440295374839, - 0.7683887404351488, - 0.7974056878512644, - 0.8251346219927298, - 0.8509259752566858, - 0.8740282234215078, - 0.8935781043540981, - 0.9085985530324736, - 0.918015862973194, - 0.9207276631279079, - 0.9157525001208122, - 0.90246580220594, - 0.8808753740456821, - 0.8516902176154081, - 0.816092580552063, - 0.7754839129755612, - 0.7313164979468846, - 0.6849937430870611, - 0.6378138099565476, - 0.5909387019910594, - 0.5453777810152803, - 0.5019796089892972, - 0.4614291560084062, - 0.42424921047449754, - 0.39080569283754973, - 0.36131683216377697, - 0.33586604948003806, - 0.3144180861499868, - 0.2968375725316389, - 0.28290897287697214, - 0.2723567400083788, - 0.2648645830367947, - 0.2600929585527599, - 0.257694178391261, - 0.25732482169445137, - 0.25865539799527937, - 0.2613774058962319, - 0.26520806247878875, - 0.26989304852483226 - ], - [ - 0.4714912669887506, - 0.4894552162249727, - 0.509261422654582, - 0.530886603190579, - 0.5542652920921569, - 0.5792861894136928, - 0.6057894386652128, - 0.6335646320442215, - 0.6623492111026417, - 0.6918269330592671, - 0.7216262021910484, - 0.7513182310394987, - 0.7804150859860027, - 0.8083676577600638, - 0.8345635852891717, - 0.8583253409794731, - 0.8789092299948144, - 0.8955070877791431, - 0.9072546186775068, - 0.9132566822970252, - 0.912650904449165, - 0.9047302015764849, - 0.8891239315888543, - 0.8659772179364837, - 0.8359825429229688, - 0.8002237518679235, - 0.7599757246969401, - 0.7165583229125522, - 0.671249508060906, - 0.625237346594264, - 0.5795937752088606, - 0.535259679884978, - 0.493035905154536, - 0.45357795803051376, - 0.41739391250895047, - 0.38484582637269854, - 0.35615516338026054, - 0.3314124781858394, - 0.31059114637771196, - 0.2935643901618753, - 0.2801244301120749, - 0.2700023958819088, - 0.2628876778658667, - 0.2584456441112394, - 0.2563329900150778, - 0.2562103428359651, - 0.25775204692981124, - 0.26065328008884153, - 0.2646347934948045, - 0.2694456395726306 - ], - [ - 0.47877635292181075, - 0.497278884334532, - 0.5176319637807154, - 0.5398082977470574, - 0.5637353866886755, - 0.5892899551252198, - 0.616292967679998, - 0.6445053270447688, - 0.6736243737418404, - 0.7032814070181961, - 0.7330405804473851, - 0.7623996049981774, - 0.7907926379411657, - 0.8175955602878893, - 0.842133670351789, - 0.8636918145979514, - 0.8815273220520328, - 0.8948870346260938, - 0.9030314320480455, - 0.9052714539435749, - 0.9010260425527932, - 0.8899066286148622, - 0.871822560052269, - 0.8470677124542866, - 0.8163203208391738, - 0.7805421873768683, - 0.7408447145094003, - 0.6983822499144741, - 0.6542847380158597, - 0.6096184181852571, - 0.5653620619014303, - 0.5223908151776061, - 0.4814637908917864, - 0.4432141663254554, - 0.40814200810392104, - 0.376610729209356, - 0.34884817970165466, - 0.324953004807885, - 0.30490622357748415, - 0.2885872140569252, - 0.27579268274282526, - 0.2662569141118275, - 0.25967166779447787, - 0.25570442299601126, - 0.2540141186651865, - 0.25426397821474367, - 0.2561313642295318, - 0.2593148558635402, - 0.2635388864036985, - 0.2685563425564259 - ], - [ - 0.4848913600713099, - 0.5038597285821111, - 0.5246922172391058, - 0.5473591532793759, - 0.571782495850235, - 0.5978283044062478, - 0.6252994698728613, - 0.6539290630896307, - 0.6833748112567114, - 0.7132154180375156, - 0.7429496292746931, - 0.7719990032250887, - 0.7997151892947671, - 0.8253922051446645, - 0.8482839294693189, - 0.8676269701722703, - 0.8826692966913494, - 0.8927057652209791, - 0.8971223637086879, - 0.8954480941096641, - 0.8874056059924916, - 0.8729486717505721, - 0.8522815469679295, - 0.8258577183307181, - 0.7943499677250859, - 0.7585924808335848, - 0.7195143687551643, - 0.6780838148045836, - 0.6352678444504786, - 0.5920036372759572, - 0.5491761501538516, - 0.5075986844885562, - 0.46799501007988625, - 0.43098310009715657, - 0.397061482713445, - 0.36659973090274817, - 0.33983464107866407, - 0.3168731410845602, - 0.2977020164104413, - 0.2822034503843256, - 0.2701745208951763, - 0.2613484402718536, - 0.2554154830953103, - 0.25204204479119824, - 0.25088688441789603, - 0.25161415669537207, - 0.2539032494225942, - 0.25745570204902285, - 0.2619996151283397, - 0.26729200509195017 - ], - [ - 0.48985977267502556, - 0.5092176688219361, - 0.5304566759408347, - 0.5535467154121247, - 0.5784064901277746, - 0.6048940550783657, - 0.6327973217660421, - 0.6618250591608579, - 0.6915992235910376, - 0.7216497671411969, - 0.7514133538789565, - 0.7802375035192738, - 0.8073914459764203, - 0.8320844902566034, - 0.8534924044316444, - 0.8707924855133965, - 0.8832082710063607, - 0.8900650459460209, - 0.8908575156620048, - 0.8853231446643922, - 0.8734913473383142, - 0.8556709430825498, - 0.8323747560005632, - 0.8042269129254908, - 0.7719027013970864, - 0.7361107201642327, - 0.6975942232197988, - 0.6571303336722338, - 0.615520494574499, - 0.5735736100696629, - 0.5320847107568989, - 0.4918112800246067, - 0.4534488013081986, - 0.4176070415858846, - 0.38478891670048776, - 0.3553741632292143, - 0.32961006542809335, - 0.30761082772006965, - 0.2893658441453578, - 0.2747555312536651, - 0.2635721907332348, - 0.2555429580950238, - 0.2503522415536681, - 0.24766182797335817, - 0.24712767003552527, - 0.24841304925049207, - 0.25119826393201383, - 0.2551872429019494, - 0.2601115903192732, - 0.26573257933198113 - ], - [ - 0.49372485678175654, - 0.5133929530243255, - 0.534960310800972, - 0.5583986103604303, - 0.5836261744757085, - 0.610496812373042, - 0.638788257337817, - 0.6681909140929612, - 0.69829799062214, - 0.7285985131287, - 0.7584751298054462, - 0.787208797658709, - 0.813992138745083, - 0.837952448027659, - 0.8581848651641396, - 0.8737971565562382, - 0.8839687716952201, - 0.8880259035004543, - 0.885534579523432, - 0.8764062513399922, - 0.8609611474249105, - 0.8398693849040013, - 0.8139680410814759, - 0.7840620080875161, - 0.7508329356655643, - 0.7148691097211765, - 0.6767373425357931, - 0.6370351710978651, - 0.5964098416457181, - 0.5555524589319649, - 0.5151776581686102, - 0.47599583159813336, - 0.4386821054653222, - 0.4038449170386692, - 0.3719968698778976, - 0.3435309329647839, - 0.3187052165381116, - 0.29763877307963577, - 0.2803189536440118, - 0.2666184799127091, - 0.2563186774520065, - 0.24913490731401028, - 0.24474094859334716, - 0.2427902842528823, - 0.24293337077122434, - 0.24483077692517924, - 0.24816254284245576, - 0.25263432204743597, - 0.2579809222819329, - 0.2639678284280238 - ], - [ - 0.49655207264603485, - 0.5164493508034659, - 0.5382624980945645, - 0.5619670426458763, - 0.5874840338689375, - 0.6146674270708073, - 0.6432907218742172, - 0.6730336757653089, - 0.7034703270222386, - 0.7340600615936791, - 0.764144003412178, - 0.7929493852952658, - 0.819604262355254, - 0.8431635204187821, - 0.8626457957784454, - 0.8770829478231269, - 0.8855884661472144, - 0.887450022876313, - 0.8822482953578482, - 0.870008906805169, - 0.85130591700737, - 0.8271679958551514, - 0.7987721693248575, - 0.7671103820122225, - 0.7328694663315239, - 0.6965278973592728, - 0.6584997081790417, - 0.619230300715839, - 0.5792372156664579, - 0.5391131917040504, - 0.49950724125336066, - 0.46109390815208995, - 0.4245366887337722, - 0.39044944535863796, - 0.35935920833297413, - 0.3316744038200219, - 0.3076631535035978, - 0.2874454952055698, - 0.27100057850639314, - 0.2581862197429221, - 0.24876571098623923, - 0.24243652649421554, - 0.2388569653207564, - 0.23766859383669658, - 0.23851380703413771, - 0.24104870832790581, - 0.2449519250835871, - 0.24993010707105945, - 0.25572083495223613, - 0.2620935803495664 - ], - [ - 0.49843181244832435, - 0.5184779221906779, - 0.5404518914459414, - 0.564334774678857, - 0.5900532251441513, - 0.617465756277811, - 0.6463479362884299, - 0.6763774162213663, - 0.7071201190017611, - 0.7380194289882432, - 0.7683908550597912, - 0.7974252874376798, - 0.8242039773917563, - 0.847726284854809, - 0.8669474394054059, - 0.8808256707591618, - 0.8883901471629234, - 0.8888455445951771, - 0.8817184244351965, - 0.8670696406052127, - 0.8456647238848405, - 0.8188663152472923, - 0.7881973717147006, - 0.7548345850258565, - 0.7194679418698114, - 0.6824906460669772, - 0.644204678502218, - 0.6049443724964234, - 0.5651317111911758, - 0.5252868859167567, - 0.48601183423151795, - 0.447958296144061, - 0.41178736234574576, - 0.37812489907733515, - 0.3475166797262572, - 0.3203882260726444, - 0.2970159530945203, - 0.2775157642929385, - 0.26185113070443233, - 0.24985678623881774, - 0.24127052563141815, - 0.2357659020962355, - 0.23298122835506918, - 0.23254294451075297, - 0.23408314844197542, - 0.237251925888733, - 0.24172540233214668, - 0.24721044599488157, - 0.25344684456823613, - 0.26020763890176585 - ], - [ - 0.4994819960834872, - 0.5196008488606043, - 0.5416516993771952, - 0.565622056227901, - 0.5914463487670196, - 0.6189914284808848, - 0.648040712923874, - 0.6782779610876918, - 0.7092720811147992, - 0.740464807635933, - 0.7711636688464718, - 0.8005435104003652, - 0.8276605680236209, - 0.8514812116838294, - 0.8709192481959633, - 0.8848738195312995, - 0.8922841642905915, - 0.8922333758457364, - 0.8841272664805565, - 0.8679774983879767, - 0.8446514301066103, - 0.8157781195751236, - 0.7831970254309673, - 0.7482542848202915, - 0.7116575402104247, - 0.6737640840274975, - 0.6348192382467234, - 0.5950951708924466, - 0.5549575246828393, - 0.514883425919171, - 0.47544869965340236, - 0.43729650375879975, - 0.40109493854351896, - 0.3674881492058978, - 0.337044641594585, - 0.3102084059669468, - 0.28726190711438043, - 0.26831085818620926, - 0.253294648784832, - 0.2420163941235388, - 0.23418126785803794, - 0.2294336427766691, - 0.22738820514165592, - 0.2276537884762505, - 0.22985045977621754, - 0.23362100789676932, - 0.23863805114748549, - 0.24460784289135407, - 0.2512716630231957, - 0.25840549873634416 - ], - [ - 0.49984993107374515, - 0.5199746193867933, - 0.5420245324570523, - 0.5659935279304849, - 0.5918248813029692, - 0.6193963741984813, - 0.6485037492834127, - 0.6788436593577213, - 0.709997637420432, - 0.7414188988557915, - 0.7724241327090346, - 0.8021931847546, - 0.8297808922897013, - 0.8541455812147244, - 0.8741866343477975, - 0.8887683905065484, - 0.8967520528670812, - 0.8970889983379033, - 0.8890221386917181, - 0.8724313810484111, - 0.8481809779182008, - 0.8180518411839888, - 0.7840859126762597, - 0.7477733844828903, - 0.7098958503880485, - 0.6708415773425978, - 0.6308591523826425, - 0.5902098925282715, - 0.5492450856619733, - 0.5084311500940887, - 0.46834101014875057, - 0.42962460460029783, - 0.3929664810746616, - 0.35903472927044905, - 0.32842407135617246, - 0.3015982628977773, - 0.2788434494558094, - 0.26024857069848556, - 0.24572024175945673, - 0.23502205154671052, - 0.22782082759612277, - 0.2237280988058168, - 0.22233264680954623, - 0.22322418508209496, - 0.22600959954660704, - 0.23032338263419205, - 0.23583370419080185, - 0.24224529211632173, - 0.24930004085009932, - 0.2567760518188409 - ], - [ - 0.49971275047412134, - 0.5197917023890326, - 0.5417757276232957, - 0.5656637159347592, - 0.5914075111436405, - 0.6188968930613004, - 0.6479426122577091, - 0.6782588260200215, - 0.7094467217177146, - 0.7409812004599842, - 0.7722024403909883, - 0.8023145111633019, - 0.8303945123411163, - 0.8554179798805932, - 0.8762963744485486, - 0.8918857455639925, - 0.9009955478978342, - 0.9024697246395883, - 0.8953889285837848, - 0.8794424217592403, - 0.8553839342887064, - 0.825002813378657, - 0.7903674499663306, - 0.7530606817671813, - 0.7139941999171548, - 0.6736525107431632, - 0.6323487747696119, - 0.5903884759291858, - 0.5481551087258963, - 0.5061410110540678, - 0.4649425630270143, - 0.4252334001113063, - 0.38772384492117884, - 0.3531103101429398, - 0.32201588408788767, - 0.29492501706602625, - 0.2721253057401019, - 0.253682276236671, - 0.23946181608176076, - 0.22918220906262143, - 0.22246889077908394, - 0.21889921263840928, - 0.21803542393586606, - 0.2194476191694884, - 0.22272889248787442, - 0.2275046617030586, - 0.23343772923555217, - 0.24023029184475453, - 0.2476238214525479, - 0.2553975113438361 - ], - [ - 0.49927571700513607, - 0.5192797698432163, - 0.5411539159747303, - 0.5648994830846517, - 0.5904751850563261, - 0.6177822811541949, - 0.6466473465977893, - 0.6768043205370975, - 0.7078780991116477, - 0.7393718066563588, - 0.770659238565952, - 0.8009837483394082, - 0.829465913399231, - 0.855124502350757, - 0.8769049745388755, - 0.8936768353561437, - 0.9042296065100426, - 0.907341637929681, - 0.9019724510990914, - 0.8876272433272142, - 0.864862280707538, - 0.8353001333871244, - 0.8008716165819618, - 0.7631598895849439, - 0.7231989082822462, - 0.681616856639985, - 0.6388531946960933, - 0.5953179114510685, - 0.5514792146280945, - 0.5078970073997862, - 0.46522094071116477, - 0.42416685838826035, - 0.38547974959079556, - 0.349886390226096, - 0.31803724568730596, - 0.29043664565611205, - 0.26737142323919516, - 0.24887763119639938, - 0.23477504784940173, - 0.22473504142081147, - 0.21834239397759392, - 0.21514155128429435, - 0.2146691567318897, - 0.2164760250694111, - 0.22014124760738052, - 0.22528053388963798, - 0.2315504011027012, - 0.23864943268222005, - 0.24631752491893744, - 0.25433380693208146 - ], - [ - 0.49876774868961615, - 0.5186975850882913, - 0.540447633118817, - 0.5640178056305343, - 0.5893706194995189, - 0.6164168618788208, - 0.6449981802378861, - 0.6748686576740371, - 0.7056784620553922, - 0.7369623138345129, - 0.7681339610858957, - 0.798486766908165, - 0.8272011737337704, - 0.8533599818192587, - 0.8759614095633149, - 0.8939095229821583, - 0.9060068556417391, - 0.9110116828925493, - 0.9078186107619868, - 0.8958110320294539, - 0.8753047628756083, - 0.8475688372661468, - 0.8142498579225693, - 0.7768298419780475, - 0.7364149543986964, - 0.6937905902377846, - 0.6495711718833767, - 0.6043292649586863, - 0.5586717345659911, - 0.5132697036373484, - 0.46885730950454035, - 0.42621144927553967, - 0.38611954806069165, - 0.34933762413225183, - 0.3165371342797599, - 0.28823641869244804, - 0.26471819420234977, - 0.24598498152231107, - 0.2318109370347764, - 0.22182489966479024, - 0.21557558867238724, - 0.21257792426396438, - 0.21234496824178106, - 0.21440915725154985, - 0.21833565190761484, - 0.22372995587434963, - 0.23024143983226786, - 0.23756400378242615, - 0.24543480142256635, - 0.25363171209743474 - ], - [ - 0.4984336968211713, - 0.5183268641269971, - 0.5399769998498668, - 0.5633775393991773, - 0.5884904362222698, - 0.6152328287078598, - 0.6434595698288936, - 0.6729440457869214, - 0.7033616793469758, - 0.7342800852734379, - 0.7651566889727753, - 0.7953420173443385, - 0.8240868719332056, - 0.8505507331662068, - 0.8738026441018857, - 0.8928072530838671, - 0.9064166196073925, - 0.9134170692446311, - 0.9126906037600799, - 0.9035264056889906, - 0.885962055490747, - 0.8608205647043353, - 0.8293566786411638, - 0.7928574751633481, - 0.7524386948249722, - 0.7090301504892077, - 0.6634485082048373, - 0.6164742683889566, - 0.5688996556147915, - 0.5215460906834268, - 0.47526009477629266, - 0.4308957855139352, - 0.3892882998870829, - 0.35121863055528174, - 0.3173672336929487, - 0.2882512455553679, - 0.26414065517221486, - 0.24500667665452913, - 0.23058777859657242, - 0.22047990035162224, - 0.21420268708510226, - 0.2112460996352422, - 0.21110232714019628, - 0.2132867904616621, - 0.21735113809455242, - 0.2228904472309735, - 0.22954630770447138, - 0.23700705215080187, - 0.2450060757086424, - 0.2533189424126615 - ], - [ - 0.4985231976254466, - 0.5184597541201459, - 0.5400799059576786, - 0.5633643754732841, - 0.5882688597675794, - 0.6147124944735295, - 0.6425606771294132, - 0.671604695910569, - 0.7015444634181803, - 0.7319806572854032, - 0.7624164339368437, - 0.7922637377535856, - 0.8208496316864172, - 0.8474189103850284, - 0.8711278541355937, - 0.8910282513886781, - 0.9060574733614764, - 0.9150700116525974, - 0.9169600974154715, - 0.910906694790648, - 0.8966396286772327, - 0.8745174920499392, - 0.8453581392766493, - 0.8101909639058166, - 0.7700889565448934, - 0.726105163596562, - 0.6792686561571406, - 0.6305958609208084, - 0.5810962905176519, - 0.5317688397076109, - 0.4835910173541887, - 0.43750333733899044, - 0.3943888841056202, - 0.35504574896441005, - 0.32014807767815867, - 0.2901900118287114, - 0.2654126500092858, - 0.24576634176610784, - 0.23096965227260635, - 0.22059727344448443, - 0.2141478832537016, - 0.21109193427932205, - 0.21090424140135078, - 0.2130852899774225, - 0.21717428136781325, - 0.2227562179619793, - 0.2294647722621338, - 0.2369822516344624, - 0.2450376356696527, - 0.2534034056637061 - ], - [ - 0.4992763265873297, - 0.519382045863565, - 0.5410926767404968, - 0.5643688567717524, - 0.5891528418825758, - 0.6153599438623838, - 0.6428625477309436, - 0.6714681894088546, - 0.7009003011106377, - 0.7307924339997158, - 0.7606949509126721, - 0.7900840565092242, - 0.8183666700717673, - 0.8448787508021431, - 0.868875461241655, - 0.889514600879414, - 0.9058426046640033, - 0.9168023917487065, - 0.9212999794336294, - 0.9183767782780351, - 0.9074396017550628, - 0.8883968540544867, - 0.8616342462805282, - 0.827905273288098, - 0.7882168474904887, - 0.7437333190407149, - 0.6956989420085937, - 0.6453777296406156, - 0.5940096581093761, - 0.5427808416649514, - 0.4928039075858509, - 0.4451038414671887, - 0.4006040055335647, - 0.3601066779604152, - 0.32426234921190894, - 0.2935237372051438, - 0.26809312121487505, - 0.247903565061528, - 0.23266575169877535, - 0.22194484220652666, - 0.21522767069647464, - 0.21197186812587565, - 0.21163961001886444, - 0.21371968196457947, - 0.21774094451579717, - 0.2232795934070374, - 0.22996203978696883, - 0.23746478340124755, - 0.24551230028188442, - 0.25387369568513113 - ], - [ - 0.5009068065606694, - 0.5213528604069197, - 0.5433258971170114, - 0.5667580691155838, - 0.5915693292525102, - 0.6176632490733411, - 0.6449139657697391, - 0.6731431136762409, - 0.7020967533084769, - 0.7314416734937885, - 0.7607777967341183, - 0.7896484571435528, - 0.8175425288727677, - 0.84388907167842, - 0.8680453316022526, - 0.8892795040527763, - 0.9067509514240638, - 0.9194912839705862, - 0.9264060610614318, - 0.9263753713635764, - 0.9184835691083566, - 0.9022234240181786, - 0.8775851460606459, - 0.8450693482973219, - 0.8056306141422137, - 0.7605525330906617, - 0.7112971316937025, - 0.6593734766931933, - 0.6062450340662314, - 0.5532746512075084, - 0.5016969536775866, - 0.4526063119098424, - 0.4069498012713058, - 0.36551650790996565, - 0.32891693307893355, - 0.2975513671642652, - 0.27157869001329393, - 0.25091224753689634, - 0.23525880646739028, - 0.22418255968620548, - 0.21716740767843268, - 0.21366577814260368, - 0.21313324348357732, - 0.21505148002836538, - 0.21894239146098815, - 0.2243757840453623, - 0.2309724687387702, - 0.23840421855514338, - 0.24639164927746293, - 0.2547008097374872 - ], - [ - 0.5035841275412978, - 0.5245823421747826, - 0.5470370079111602, - 0.5708425669545023, - 0.5958861699836726, - 0.6220490903148932, - 0.6491988030534945, - 0.6771671577373424, - 0.705722170640849, - 0.7345662857020845, - 0.7633536398413984, - 0.7916979840588353, - 0.8191700218734485, - 0.8452881187335489, - 0.8695042870417902, - 0.8911854540622892, - 0.9095870483491458, - 0.9238111850117836, - 0.932747234645538, - 0.9351018682180532, - 0.9296582217958557, - 0.9155462713650753, - 0.8924187216411481, - 0.860581315802887, - 0.820986690463876, - 0.7750658398674911, - 0.7245007951760364, - 0.6710284967675066, - 0.6163083816713391, - 0.5618491874477733, - 0.5089774408976113, - 0.4588294391403888, - 0.4123519703112974, - 0.37030119887346125, - 0.3332337604485678, - 0.30149069425468394, - 0.27518431886797157, - 0.25420463419726474, - 0.23825380735328094, - 0.22689937698753992, - 0.21962935231550673, - 0.21589843697069522, - 0.2151623816239987, - 0.21690145379209735, - 0.22063518634017854, - 0.2259305737495627, - 0.23240554627518784, - 0.23972916475090378, - 0.24761963414489357, - 0.25584095197930984 - ], - [ - 0.5074165171155064, - 0.5292097787552098, - 0.5524025656903233, - 0.5768416770639098, - 0.6023695481952767, - 0.6288321541812963, - 0.6560777279413983, - 0.6839398284105752, - 0.7122082703407198, - 0.7406278042685239, - 0.7689139239167065, - 0.7967537575201138, - 0.8237960286188394, - 0.8496368476262313, - 0.873803907707663, - 0.895737203369217, - 0.9147572981196148, - 0.9300025715617137, - 0.9403259409097802, - 0.9442785150024089, - 0.9403877689657726, - 0.9274850074702354, - 0.9049619485824325, - 0.8730221198036248, - 0.8326961070064208, - 0.7855999105207574, - 0.7336292035668832, - 0.6787136067022426, - 0.6226609455032972, - 0.5670771300840144, - 0.5133366793276841, - 0.46258117330254767, - 0.41572850137851897, - 0.37348162236972915, - 0.3363314036256261, - 0.30455459043781885, - 0.2782144985196206, - 0.25717474417031366, - 0.24113099879143984, - 0.22965582098537274, - 0.2222462503887651, - 0.21836580949306228, - 0.21747722860399343, - 0.21906565733543115, - 0.22265370856927724, - 0.2278100966419443, - 0.23415352923910115, - 0.2413532392059764, - 0.24912724711121248, - 0.2572391820460406 - ], - [ - 0.5124370271515548, - 0.5352852186389006, - 0.5594943408671714, - 0.5848526950312727, - 0.6111444898228584, - 0.6381651749331222, - 0.6657280704997105, - 0.6936553667062877, - 0.7217584159669146, - 0.7498335686495924, - 0.7776661161244703, - 0.805019069074374, - 0.8316111242228293, - 0.8570949781649446, - 0.8810404388220318, - 0.9029191250850881, - 0.9220765909149904, - 0.9376551368537107, - 0.9484636434834065, - 0.9529505159106451, - 0.9494521666112494, - 0.9365669183771705, - 0.9135321656045278, - 0.8805746356381772, - 0.8388936393603649, - 0.7903169171315928, - 0.7369265143363447, - 0.6807885283148434, - 0.6237943534531087, - 0.5675856247279164, - 0.5135325086801982, - 0.4627406500094582, - 0.41606912750239705, - 0.3741484331793309, - 0.3373936127517282, - 0.3060134114513784, - 0.2800207787380078, - 0.25925132953728897, - 0.24339297706727892, - 0.23202418403390968, - 0.224654587223173, - 0.22076203012638596, - 0.21982258340301808, - 0.22133265235508426, - 0.22482381028200815, - 0.22987164009420047, - 0.23609997592048826, - 0.2431817995677129, - 0.2508378269574286, - 0.25883359459226774 - ], - [ - 0.5185948145013557, - 0.5427575082060876, - 0.5682635657111419, - 0.5948306929836026, - 0.6221692877322367, - 0.6500064656595164, - 0.6781031090699281, - 0.7062577462272122, - 0.7342999900083177, - 0.7620835327768085, - 0.7894726528957864, - 0.8163102969990569, - 0.8423751461654667, - 0.8673462907612575, - 0.8907856862068434, - 0.9121348091665041, - 0.9307127434677165, - 0.9456517407560706, - 0.9557508785694925, - 0.9594232725161806, - 0.9549080064940725, - 0.9406742845275003, - 0.9159334179430407, - 0.8810671255751179, - 0.8375160476754062, - 0.787311778086413, - 0.7326658262983485, - 0.6757054964284789, - 0.6183300391353896, - 0.562149789078211, - 0.5084761438602532, - 0.45833795319092147, - 0.41250753737962714, - 0.37152633117326744, - 0.3357259489511559, - 0.30524523665160097, - 0.28004707217388325, - 0.2599393499865743, - 0.24460246022133342, - 0.2336220770788605, - 0.22652354275536002, - 0.22280378883635743, - 0.2219580117826362, - 0.22349998509291447, - 0.22697615830931572, - 0.23197438327114495, - 0.23812835268410892, - 0.2451188209496234, - 0.2526725416789956, - 0.26055968269780916 - ], - [ - 0.5257529478632792, - 0.5514704650606912, - 0.5785356582366817, - 0.6065824218059586, - 0.6352298625085866, - 0.6641167721284541, - 0.6929325683676515, - 0.721438137148102, - 0.7494736631093093, - 0.7769512121985745, - 0.8038233461839601, - 0.8300217217393526, - 0.8553795015544369, - 0.8795694797195149, - 0.902083507346997, - 0.9222527641128007, - 0.9393057193477018, - 0.9523596457535658, - 0.9602595750663603, - 0.9614737140696197, - 0.9542922541748085, - 0.9372467837683078, - 0.9096711276734522, - 0.8721985576229092, - 0.8265183494585675, - 0.7748047546371907, - 0.7193143107864728, - 0.6621490433271013, - 0.6051375705942678, - 0.5497933518108411, - 0.49731813776071276, - 0.44862758623601656, - 0.4043839213618333, - 0.3650270586836036, - 0.3308008085532698, - 0.3017746324445535, - 0.2778637316737105, - 0.2588506642126062, - 0.24441032410559416, - 0.23413790508396537, - 0.22757771102153668, - 0.2242501462951606, - 0.2236747828163469, - 0.22538842775207046, - 0.22895805968654814, - 0.23398912384344195, - 0.24012997753583432, - 0.24707334835326294, - 0.2545556080637666, - 0.2623545465655053 - ], - [ - 0.5336931007148574, - 0.5611672755132637, - 0.5900148131143571, - 0.61977213914509, - 0.6499484427583829, - 0.6800723197976778, - 0.7097395322446157, - 0.7386537793020211, - 0.7666515066655004, - 0.7936988012263559, - 0.8198452689978379, - 0.8451275590904795, - 0.8694414145812008, - 0.8924330448665598, - 0.9134639623002856, - 0.9316696614984152, - 0.9461072566928926, - 0.9558531009731859, - 0.9598559259503806, - 0.9567572982068628, - 0.9451062155292471, - 0.9237677238848292, - 0.8924124585418262, - 0.8519426835439315, - 0.8042011915387931, - 0.7513976095633901, - 0.6957320569961911, - 0.6391909442655563, - 0.5834564121375687, - 0.5298852392553912, - 0.47952559642111287, - 0.4331504816440209, - 0.39129485941878267, - 0.3542896602742494, - 0.3222902413847578, - 0.29529992205539995, - 0.27319083874941774, - 0.25572460518903833, - 0.24257434196422145, - 0.2333481681129892, - 0.2276129919547074, - 0.22491689629838385, - 0.2248085971777467, - 0.22685305093556596, - 0.2306429418390532, - 0.2358062904936724, - 0.24201072261132361, - 0.24896505765718097, - 0.2564188757404027, - 0.2641606526960556 - ], - [ - 0.5421267684552115, - 0.5715021921712693, - 0.6022963754102512, - 0.6339351491500487, - 0.6657989574488913, - 0.6972826926775166, - 0.7278619793232204, - 0.7571562072823711, - 0.7849743627629469, - 0.8113233935568002, - 0.836354672811409, - 0.8602325866443823, - 0.8829426748279026, - 0.9041127245074714, - 0.922946557525619, - 0.9383213144319189, - 0.9490298017540433, - 0.9540290052392326, - 0.9524043946135144, - 0.9431342153214985, - 0.9252947977032315, - 0.8983662318227554, - 0.8625474258959747, - 0.8189840538477524, - 0.7695366770728203, - 0.7163169537894764, - 0.6613545834576062, - 0.6064275143145699, - 0.5529994088722081, - 0.5022176839859835, - 0.45494117218227814, - 0.41177853755999383, - 0.3731269334490536, - 0.33920594741107546, - 0.3100855002976063, - 0.28570858850400777, - 0.26591083786189457, - 0.2504389205462221, - 0.23896920872784533, - 0.23112700660124041, - 0.22650578180802972, - 0.2246853265122155, - 0.22524777143657437, - 0.22779069892813564, - 0.23193703817372946, - 0.23734181483662953, - 0.24369609440474904, - 0.2507285971786377, - 0.2582055005771166, - 0.26592891676755476 - ], - [ - 0.5507123740022812, - 0.5820585780837979, - 0.6148854577513716, - 0.6484967423230983, - 0.6821264074177686, - 0.7150117095129891, - 0.7464782098150367, - 0.7760264260792196, - 0.8034030856334093, - 0.8286297485092404, - 0.8519532940299508, - 0.8736877436172663, - 0.8939523506465077, - 0.9123997122586547, - 0.928102954356699, - 0.93967503375544, - 0.9455799006737085, - 0.9445390095237294, - 0.9357434424714721, - 0.9187356165531373, - 0.8934023846980371, - 0.8600325549192949, - 0.8194200694670943, - 0.7729336113751566, - 0.7223538486524538, - 0.6695651740676544, - 0.6163105517359098, - 0.5640683029111777, - 0.5140176641493907, - 0.4670524086751193, - 0.4238150525223611, - 0.38473611230073196, - 0.3500706758935095, - 0.3199292191014517, - 0.2943023263210317, - 0.2730804715182243, - 0.2560706411673912, - 0.24301152600328058, - 0.23358847008222883, - 0.2274486092808835, - 0.22421594276106993, - 0.22350566323215548, - 0.22493698023873498, - 0.22814383091121804, - 0.2327831543441755, - 0.2385406928389665, - 0.24513450692294142, - 0.25231652910160235, - 0.25987254132327775, - 0.2676209634513888 - ], - [ - 0.5590775830424395, - 0.5923727858090173, - 0.6272215149251121, - 0.662796614617138, - 0.6981708078018415, - 0.7324019470454751, - 0.7646352439199513, - 0.7942131353569778, - 0.8207754267842468, - 0.8443172674270631, - 0.865157179225763, - 0.883767089220822, - 0.9004477964649634, - 0.9149459422512216, - 0.9262819225968767, - 0.9328738008451233, - 0.9328702417923702, - 0.9246929763325623, - 0.9076304996091418, - 0.8819500590506888, - 0.8485130281186667, - 0.8084799911887042, - 0.7632245229788619, - 0.7143043198626445, - 0.6633598681665926, - 0.6119559157957055, - 0.561454915686065, - 0.5129603829874646, - 0.46731487590681037, - 0.4251263451475882, - 0.38680416785945443, - 0.35259480851785346, - 0.3226127000483029, - 0.29686512197786685, - 0.27527155399755404, - 0.2576788181676362, - 0.2438735863183309, - 0.2335936719089, - 0.22653908121769062, - 0.22238323142663285, - 0.22078422597307767, - 0.22139573830812687, - 0.2238769383661361, - 0.22790096646886593, - 0.2331616387903488, - 0.23937827689648572, - 0.24629873504680322, - 0.2537008263589484, - 0.2613924191506739, - 0.269210497308604 - ], - [ - 0.5668459262505378, - 0.6019635388582072, - 0.6387093451829826, - 0.6761202014232083, - 0.7130979355556408, - 0.7485050994932705, - 0.7812809040514936, - 0.810571271850977, - 0.8358592115440188, - 0.8570608815144097, - 0.8745252930041028, - 0.8888668377718358, - 0.9005959455841249, - 0.9096315927001205, - 0.9150612871267253, - 0.9152464191584848, - 0.9081512375814358, - 0.8919852132630346, - 0.8661798078441569, - 0.8317278610731471, - 0.7904109125258667, - 0.7441966418274115, - 0.6949763157980314, - 0.6444525523304172, - 0.5940855784874104, - 0.5450684253198984, - 0.4983282554312751, - 0.45454959379873605, - 0.41420942839616337, - 0.37761477949699396, - 0.3449370526217945, - 0.3162407142386715, - 0.29150580771924267, - 0.27064489899597166, - 0.25351558543269476, - 0.23992992115829626, - 0.22966208862200654, - 0.2224554210562052, - 0.2180295108174798, - 0.21608771181314557, - 0.21632496009288515, - 0.21843557343913578, - 0.22212058047083505, - 0.22709415613551187, - 0.2330888565678999, - 0.23985949834033837, - 0.24718567219672144, - 0.2548729944767371, - 0.2627532721530147, - 0.2706837924178237 - ], - [ - 0.5736660667991185, - 0.6103658824682747, - 0.6487566869794028, - 0.6877385490628892, - 0.7260400675572576, - 0.76232254686186, - 0.795304256089326, - 0.8239043904440287, - 0.8474012978052698, - 0.8655742033291178, - 0.8787514229300148, - 0.8876582418436091, - 0.89301110414812, - 0.8949775888831675, - 0.8928595269490712, - 0.8851335368794384, - 0.8697959809304655, - 0.845109467393444, - 0.8107444665375352, - 0.7682090621367061, - 0.7199729003084169, - 0.6686604674879407, - 0.6165909861646732, - 0.5655596315126115, - 0.516814689705891, - 0.471155859670841, - 0.4290607696581301, - 0.39078818422223716, - 0.3564493875364104, - 0.3260552113012307, - 0.2995468903021955, - 0.27681630610006347, - 0.25771909070070137, - 0.242082883958201, - 0.22971243420693488, - 0.22039289281619456, - 0.21389239123745085, - 0.20996471159385388, - 0.20835254821967997, - 0.2087915353868074, - 0.21101493523316928, - 0.21475868414357224, - 0.21976640632837785, - 0.22579401244154373, - 0.23261358041897595, - 0.24001632956602204, - 0.2478146157943968, - 0.25584297474247075, - 0.2639583104589758, - 0.2720393692711556 - ], - [ - 0.5792405779679437, - 0.6171671188602876, - 0.6568169003265341, - 0.6969570573531471, - 0.7361496703481604, - 0.7728620832290745, - 0.805593105267104, - 0.8330220317210397, - 0.8541868736918289, - 0.8686747264180985, - 0.8767394024179742, - 0.87918522188486, - 0.8769375941566557, - 0.8704768894363879, - 0.8594505800553865, - 0.842628871714546, - 0.8182709036794414, - 0.7849656525138692, - 0.74270194930897, - 0.6932506904853525, - 0.6394883199762189, - 0.5845040485219419, - 0.5309311716359255, - 0.48058882853111656, - 0.434479626055996, - 0.39300979886108756, - 0.35622865095609385, - 0.3239973165414192, - 0.29608821573997274, - 0.27223877118162104, - 0.25217859506999424, - 0.23564194858793108, - 0.2223721454895462, - 0.2121216615242797, - 0.20465017237615557, - 0.19972192562127844, - 0.19710337339504658, - 0.19656165266436465, - 0.19786421326667303, - 0.20077964039847518, - 0.20507951060980067, - 0.21054097834378527, - 0.21694972424875303, - 0.22410290207755834, - 0.23181178014791315, - 0.23990386221869775, - 0.24822436859941188, - 0.2566370445933166, - 0.26502433058104113, - 0.2732869732495791 - ], - [ - 0.583348955756052, - 0.6220394133326421, - 0.6624319957076696, - 0.7031702112008436, - 0.7426665238173427, - 0.7792158024320864, - 0.8111181908777517, - 0.8368252811882907, - 0.8551261496901283, - 0.8653788909273394, - 0.8677197700345403, - 0.8630153835646072, - 0.8524118589014085, - 0.8367413272180226, - 0.8160904055474252, - 0.7896756115757795, - 0.7561923779426877, - 0.7146755969964136, - 0.6654355047791283, - 0.6103932738096876, - 0.5526093353276824, - 0.4954369635391128, - 0.4416921501846574, - 0.3931314552700502, - 0.35047671679255793, - 0.3137626894929506, - 0.28266157772188655, - 0.25669116465539754, - 0.235330653704383, - 0.21807872396178252, - 0.20447843569196722, - 0.19412415110600367, - 0.1866592501626041, - 0.18176959589905362, - 0.17917553813122877, - 0.17862403980838182, - 0.17988182188993196, - 0.1827299956605548, - 0.18696035509890485, - 0.19237328005003407, - 0.19877703736905983, - 0.20598816183422664, - 0.2138325522950123, - 0.22214692574065698, - 0.23078032019495986, - 0.2395954100404124, - 0.24846947819334264, - 0.2572949654921242, - 0.2659795805109605, - 0.2744459992100977 - ], - [ - 0.5858571120761918, - 0.6247603282167074, - 0.665267037829579, - 0.7059146435790692, - 0.7449933303891719, - 0.7806586756041543, - 0.8110497289047072, - 0.8344302997620303, - 0.8493740579171691, - 0.855017059577934, - 0.8513621231201665, - 0.8393321013597161, - 0.8202804449923663, - 0.7953813497663998, - 0.7651975619684591, - 0.7294785053924042, - 0.6874320631421673, - 0.6385624038903637, - 0.5834848677764737, - 0.5242204623391086, - 0.4638667411603215, - 0.4058588908590167, - 0.3530638491158229, - 0.3070904762909366, - 0.2683691363376923, - 0.2366179345992142, - 0.2112056016062963, - 0.1913738889685227, - 0.176361962429749, - 0.16546854170132386, - 0.15807694608907996, - 0.15365938501214627, - 0.1517705251712782, - 0.15203625348416494, - 0.15414102713467726, - 0.15781569903159665, - 0.16282681936479637, - 0.16896787794213786, - 0.17605261309639364, - 0.18391028935164766, - 0.1923826992501806, - 0.2013225582723871, - 0.2105929270728213, - 0.2200673039892277, - 0.22963007225236076, - 0.23917704805448214, - 0.24861594536394588, - 0.2578666409705801, - 0.2668611817844437, - 0.2755435222949496 - ], - [ - 0.5867033777472501, - 0.625209645719849, - 0.6651246039517825, - 0.7049093337048952, - 0.7427672874453035, - 0.7767550376166177, - 0.8048985068881093, - 0.8253333694683255, - 0.8364915959613844, - 0.8373622289214246, - 0.8278470312569092, - 0.8088983080988219, - 0.7820128341834204, - 0.7486419822467617, - 0.7097792702527697, - 0.6657077149183397, - 0.6161726527384099, - 0.561152738661681, - 0.5015532496784662, - 0.43946049983916835, - 0.37790204811088757, - 0.320218198049813, - 0.2691790306364124, - 0.22620462609941183, - 0.19149204731402858, - 0.16453008250466128, - 0.14446560522645258, - 0.1303317817297136, - 0.12117953372169155, - 0.11614504704806461, - 0.11447742814555639, - 0.11554307348041815, - 0.11881751941138452, - 0.1238714561355212, - 0.13035488782583138, - 0.1379817079241461, - 0.14651589818175048, - 0.1557599084705883, - 0.1655453717255171, - 0.17572605812761655, - 0.18617282047218686, - 0.19677019907814197, - 0.2074143225366173, - 0.21801174787866928, - 0.22847891939006248, - 0.23874197862794921, - 0.24873671931340363, - 0.258408541495338, - 0.26771231384291644, - 0.27661209772628664 - ] - ], - "zauto": true, - "zmax": 0.9614737140696197, - "zmin": -0.9614737140696197 - }, - { - "autocolorscale": false, - "autocontour": true, - "colorbar": { - "tickfont": { - "size": 8 - }, - "ticksuffix": "", - "x": 1, - "y": 0.5 - }, - "colorscale": [ - [ - 0, - "rgb(255,247,251)" - ], - [ - 0.14285714285714285, - "rgb(236,231,242)" - ], - [ - 0.2857142857142857, - "rgb(208,209,230)" - ], - [ - 0.42857142857142855, - "rgb(166,189,219)" - ], - [ - 0.5714285714285714, - "rgb(116,169,207)" - ], - [ - 0.7142857142857143, - "rgb(54,144,192)" - ], - [ - 0.8571428571428571, - "rgb(5,112,176)" - ], - [ - 1, - "rgb(3,78,123)" - ] - ], - "contours": { - "coloring": "heatmap", - "end": 0.36, - "size": 0.02, - "start": 0.04 - }, - "hoverinfo": "x+y+z", - "ncontours": 25, - "type": "contour", - "x": [ - 0.000001, - 0.0000013011511650442548, - 0.000001692994354296022, - 0.0000022028415765056147, - 0.000002866229883678204, - 0.000003729398352432554, - 0.000004852511011181743, - 0.0000063138503555892, - 0.000008215273746089953, - 0.000010689313005882424, - 0.00001390841207112662, - 0.00001809694657026198, - 0.00002354686311364001, - 0.00003063802837345029, - 0.00003986470631277378, - 0.000051870009063012666, - 0.00006749072272319499, - 0.00008781563250096393, - 0.00011426141253772724, - 0.00014867137004306603, - 0.00019344392634026088, - 0.0002516997901283655, - 0.0003274994751669172, - 0.0004261263236648159, - 0.0005544547624925005, - 0.0007214294601814526, - 0.000938688782612345, - 0.0012213760031100258, - 0.0015891948094037057, - 0.002067782677737912, - 0.0026904978401970136, - 0.0035007443993213955, - 0.004554997653699184, - 0.005926740503884541, - 0.007711585311544345, - 0.010033938212454078, - 0.013055670395116691, - 0.01698740074503987, - 0.02210317627048227, - 0.028759573555516536, - 0.03742055263793628, - 0.04868979566145066, - 0.06335278435066323, - 0.0824315491666629, - 0.10725590623460621, - 0.13955614735503497, - 0.18158364372009145, - 0.23626776957937787, - 0.3074200836506151, - 0.4 - ], - "xaxis": "x2", - "y": [ - 0, - 0.02040816326530612, - 0.04081632653061224, - 0.061224489795918366, - 0.08163265306122448, - 0.1020408163265306, - 0.12244897959183673, - 0.14285714285714285, - 0.16326530612244897, - 0.18367346938775508, - 0.2040816326530612, - 0.22448979591836732, - 0.24489795918367346, - 0.26530612244897955, - 0.2857142857142857, - 0.3061224489795918, - 0.32653061224489793, - 0.3469387755102041, - 0.36734693877551017, - 0.3877551020408163, - 0.4081632653061224, - 0.42857142857142855, - 0.44897959183673464, - 0.4693877551020408, - 0.4897959183673469, - 0.5102040816326531, - 0.5306122448979591, - 0.5510204081632653, - 0.5714285714285714, - 0.5918367346938775, - 0.6122448979591836, - 0.6326530612244897, - 0.6530612244897959, - 0.673469387755102, - 0.6938775510204082, - 0.7142857142857142, - 0.7346938775510203, - 0.7551020408163265, - 0.7755102040816326, - 0.7959183673469387, - 0.8163265306122448, - 0.836734693877551, - 0.8571428571428571, - 0.8775510204081632, - 0.8979591836734693, - 0.9183673469387754, - 0.9387755102040816, - 0.9591836734693877, - 0.9795918367346939, - 1 - ], - "yaxis": "y2", - "z": [ - [ - 0.2001133038856527, - 0.17416394245967562, - 0.14644019111253395, - 0.1176238540581183, - 0.08908828876915947, - 0.06393684334085625, - 0.049484452623172206, - 0.05393058971308522, - 0.07102223555854598, - 0.0905591866550935, - 0.10790743329508995, - 0.12121549370542793, - 0.1296876177416584, - 0.13302942184880678, - 0.13124998083180825, - 0.12457875795467797, - 0.11343541650431214, - 0.09844977472126716, - 0.0805745670513256, - 0.06144153378989267, - 0.044462961025245565, - 0.03688907376361572, - 0.043633371996256956, - 0.05703979293020748, - 0.06963198116964926, - 0.0781364699620421, - 0.08113942079466387, - 0.07814021925383031, - 0.06937402950109446, - 0.05611427511588869, - 0.04216222239996453, - 0.03783114341542702, - 0.052062800186595336, - 0.07699830489026141, - 0.1053843476897278, - 0.13430499559130288, - 0.16241345800297574, - 0.18897866965943255, - 0.21359001093243163, - 0.23603717549572312, - 0.2562460204570589, - 0.27423721118399963, - 0.29009667175155407, - 0.30395347553416135, - 0.31596306500535887, - 0.3262945604082694, - 0.335121303909266, - 0.3426139889106562, - 0.34893585104843045, - 0.3542394890316931 - ], - [ - 0.19796819692103973, - 0.17162390764658833, - 0.1433657141171408, - 0.11375038529940809, - 0.0838764432413604, - 0.05631587506515734, - 0.038709662505940025, - 0.04357387515304235, - 0.06275565693224358, - 0.08340305105327918, - 0.10110303828387525, - 0.11432637263751899, - 0.12246475860212537, - 0.12535177142881704, - 0.12311092803721188, - 0.11609363777883125, - 0.10485779265292659, - 0.09019646011077383, - 0.07328552509440509, - 0.056164043633242455, - 0.04301676692704593, - 0.0406363320888315, - 0.049898935390409856, - 0.06335159766111517, - 0.07541886925724985, - 0.0834663819447346, - 0.08628067534491075, - 0.08348502527953011, - 0.07547971027385493, - 0.06381189748147599, - 0.05240864477486726, - 0.0493347286205012, - 0.06097215356372808, - 0.08311803954106961, - 0.10968878995832121, - 0.137437825646175, - 0.16474721097555875, - 0.19074007541612273, - 0.21492677658544151, - 0.2370513747025302, - 0.2570115347091563, - 0.27480940816744975, - 0.2905181053444016, - 0.30425743246140313, - 0.3161758849342988, - 0.32643722437413697, - 0.3352105677249662, - 0.34266322261721843, - 0.348955681510956, - 0.3542383059884873 - ], - [ - 0.19762224604033804, - 0.17140970953810755, - 0.14336120828616164, - 0.11405424400370104, - 0.08459849530206556, - 0.0574951205421653, - 0.03976715810977419, - 0.04300279363621703, - 0.060653485987025385, - 0.08017095688638708, - 0.09688628101269998, - 0.10916849596791531, - 0.11638585118699947, - 0.11839958834543915, - 0.11541245565282057, - 0.10791570634535239, - 0.09668277761200418, - 0.08282892137799353, - 0.0680330700585632, - 0.05510404608148976, - 0.048523984790203416, - 0.05178370574538535, - 0.062401647093222594, - 0.07512677480426523, - 0.08627997957741894, - 0.09383978482443549, - 0.09682684801047406, - 0.0950492975873561, - 0.08913967212521313, - 0.08086359568934029, - 0.07367351061328496, - 0.07262516819583832, - 0.08138289590443336, - 0.09888253720106936, - 0.12156094855547643, - 0.14644091059881345, - 0.17165106108271633, - 0.19608000038206538, - 0.21907870177530533, - 0.24028682098509813, - 0.2595322184131543, - 0.2767687507472389, - 0.2920349296177987, - 0.3054249906370746, - 0.317068030941384, - 0.32711278413768685, - 0.335716534068205, - 0.34303715790800277, - 0.349227568974889, - 0.35443200540529246 - ], - [ - 0.19856396871682713, - 0.17278514419172675, - 0.14534908347757616, - 0.11691641841725799, - 0.08872438232221108, - 0.06337302088386014, - 0.04691770314114783, - 0.0477164571933562, - 0.06185295343096382, - 0.07896585972723534, - 0.0939562397952156, - 0.10482619918339144, - 0.110777100205578, - 0.11162354851234668, - 0.1076166201175339, - 0.09939871953078029, - 0.08802875677253508, - 0.07509977620769723, - 0.06302057084231164, - 0.05529831361040575, - 0.05536689295961795, - 0.06317198980315378, - 0.07516280085498467, - 0.08773189367815656, - 0.09847430455013453, - 0.10597576610559427, - 0.10956774114570701, - 0.1092584020947573, - 0.10580193014023187, - 0.1008621046761501, - 0.09711179445713733, - 0.09777117434006417, - 0.10511927857574865, - 0.11912564987443194, - 0.13797094645727798, - 0.15949792437779048, - 0.18198575490066896, - 0.20425167334412267, - 0.2255377699128825, - 0.24538737449046427, - 0.2635522913723609, - 0.27992790527949424, - 0.2945077306205273, - 0.30735102625053806, - 0.3185593734327888, - 0.328259617623766, - 0.33659147176819926, - 0.34369861143503866, - 0.34972241940610416, - 0.35479774931773045 - ], - [ - 0.20026039547899746, - 0.1749778049408444, - 0.14818803553529605, - 0.12060248029556649, - 0.09350937588280794, - 0.06942494072713726, - 0.053439954595278547, - 0.05195206973299527, - 0.06285284207916818, - 0.07762572231367705, - 0.09093736718871677, - 0.10042687682774198, - 0.10509867795006361, - 0.10469096337849167, - 0.09947923213405582, - 0.09025167900995162, - 0.07840130745959711, - 0.06616566552243434, - 0.056945545470486005, - 0.054684552236841266, - 0.060717346122205924, - 0.07230680138687637, - 0.08586352110234602, - 0.09887103472416411, - 0.10977718894222395, - 0.11768542499670322, - 0.12223488066574452, - 0.12360224184065151, - 0.12256136289577725, - 0.12053826556306628, - 0.11953284725867208, - 0.12170119254685967, - 0.12856678976076968, - 0.14037857698642217, - 0.15622588657130207, - 0.17469324218272841, - 0.19441746213900618, - 0.21432184610053778, - 0.23364203057332214, - 0.2518761764977932, - 0.26872311798300264, - 0.2840285927543882, - 0.29774296164552544, - 0.30988907425917434, - 0.320538158489575, - 0.32979187087340334, - 0.33776905708394633, - 0.34459612198736894, - 0.3504001710754469, - 0.35530427709190554 - ], - [ - 0.20229517762846058, - 0.17740154596492383, - 0.15104412017344124, - 0.12391514590076116, - 0.09723697729406784, - 0.07329990901541773, - 0.05653062621217265, - 0.052777601842256786, - 0.061362656400242396, - 0.07462699882989364, - 0.08688741688393835, - 0.09545264999400215, - 0.09915457982022259, - 0.09765658630080502, - 0.09123632726584995, - 0.08079023980516795, - 0.06803964342838856, - 0.056041383155842235, - 0.04962129847223052, - 0.05282929937072489, - 0.06406116962937942, - 0.07881102839423511, - 0.09392049018236513, - 0.1076708798513078, - 0.11911232997960604, - 0.12775484753726532, - 0.13349216286024637, - 0.13661891678972873, - 0.13786823924090172, - 0.1384095840358303, - 0.13972851372817632, - 0.1433189783513469, - 0.1502403732722911, - 0.16078581980475135, - 0.17449874681376026, - 0.19048020429772874, - 0.20773107110886138, - 0.22536630708610533, - 0.24269640475868295, - 0.2592310794055516, - 0.27465110831666345, - 0.2887725563195831, - 0.30151330101565144, - 0.3128649125622745, - 0.32287019155469193, - 0.3316057384312337, - 0.33916871267687715, - 0.34566697606062874, - 0.35121192250823485, - 0.35591341432866824 - ], - [ - 0.20445591469039232, - 0.17978642964304006, - 0.1535792879171491, - 0.12644579844345277, - 0.0994552413336017, - 0.07459738049630253, - 0.05585709416349865, - 0.04950669472448434, - 0.056628874521983126, - 0.06948978347699455, - 0.08160535163020839, - 0.08993988490654649, - 0.09320700087654987, - 0.09102737862928234, - 0.08367240547837348, - 0.07208756101315235, - 0.05823143997516191, - 0.04606773523273791, - 0.04239473413576182, - 0.050746041293832575, - 0.0660577175329625, - 0.08312342565528816, - 0.09945460881570715, - 0.11393420391992533, - 0.1260380398722115, - 0.13557162975045137, - 0.14261004104988392, - 0.14750922722461784, - 0.1509237671885454, - 0.15378243996659605, - 0.15717887806419728, - 0.16216188150257954, - 0.169478538439747, - 0.17939247454000917, - 0.19167768006346073, - 0.2057698862293655, - 0.2209675413621002, - 0.23658971029451797, - 0.2520624829204758, - 0.2669482291193967, - 0.2809417872847788, - 0.293851923434385, - 0.3055785928450992, - 0.3160910672756458, - 0.32540894305105256, - 0.33358654878124205, - 0.3407006083821851, - 0.3468407609567386, - 0.3521024739515718, - 0.356581902897761 - ], - [ - 0.20675272934503708, - 0.182196930356142, - 0.15595765640553294, - 0.12853530556143689, - 0.10080579352939385, - 0.07440772350146183, - 0.0528561254590295, - 0.043255733017549786, - 0.049476594160236434, - 0.06296745833916338, - 0.07577877895836205, - 0.08454323676078812, - 0.08795367474062817, - 0.08565708960429375, - 0.07795370206823014, - 0.06582880668953536, - 0.05139153477567984, - 0.03936402556877846, - 0.03828457427768291, - 0.05023386830450928, - 0.06773901599050794, - 0.08589700930025754, - 0.10280504671585082, - 0.11773021642395604, - 0.1304158358663443, - 0.1408527935501288, - 0.14921646072258812, - 0.15586452674175205, - 0.16134158941082555, - 0.1663526196615083, - 0.1716815593516499, - 0.17805664880071728, - 0.18600036637339346, - 0.19572629255398857, - 0.2071285624880112, - 0.2198580893232409, - 0.2334382206285983, - 0.24737065846297365, - 0.26120685667305565, - 0.2745835976927503, - 0.2872324181905111, - 0.2989737513545347, - 0.30970391930517993, - 0.3193799792887897, - 0.3280050992710676, - 0.3356156877728447, - 0.34227068800327504, - 0.3480430256568275, - 0.35301300410562225, - 0.35726336698474975 - ], - [ - 0.2093721068620396, - 0.1849529118864985, - 0.1587118180714258, - 0.13105516794390537, - 0.10269932172921968, - 0.07497844483328135, - 0.050851229095737256, - 0.03769796037657279, - 0.04288318542167949, - 0.05725558020595716, - 0.07098253688877058, - 0.08042217099846789, - 0.08432192170722858, - 0.08241573177650405, - 0.07509982324242713, - 0.06348540518908664, - 0.049897014775915224, - 0.03938868992000538, - 0.040011167012586134, - 0.05247432247400943, - 0.06977163832732841, - 0.0875797295521321, - 0.1042345178785268, - 0.1191576048963086, - 0.13221621300286868, - 0.1434824863773308, - 0.1531499050990008, - 0.16151646823524302, - 0.16898454298275564, - 0.17604403252428966, - 0.1832220123289171, - 0.19100230216570663, - 0.19973843494506033, - 0.20959272303977358, - 0.22052429157468278, - 0.23232548126350772, - 0.24468597911506598, - 0.25725943017723474, - 0.2697155982222388, - 0.28177254467465424, - 0.2932110375412915, - 0.3038763831291622, - 0.3136728145582803, - 0.3225543249170863, - 0.33051447042775106, - 0.3375765940402251, - 0.34378519039617306, - 0.3491986833028168, - 0.3538836311245215, - 0.35791024352769657 - ], - [ - 0.21258469560331109, - 0.18848336006127822, - 0.16251136585453663, - 0.13504414158498745, - 0.10675691544384504, - 0.07890722899006525, - 0.05421060522677589, - 0.03932868562082846, - 0.04226138938243213, - 0.055713404125051, - 0.06927540397102246, - 0.07884719670965301, - 0.08307310828126463, - 0.08171736993336164, - 0.07528006694397843, - 0.065042445845576, - 0.053508039863728096, - 0.04531689235493644, - 0.04627745898443252, - 0.05678571972767103, - 0.07196909999663544, - 0.08816599140698075, - 0.1037693304629168, - 0.11822330620792931, - 0.13142140212336345, - 0.14343107819179204, - 0.1543861015673988, - 0.16446308360082798, - 0.17388816773057944, - 0.1829379859785451, - 0.19191782512058994, - 0.20111798749678478, - 0.21076259549255122, - 0.2209697745604022, - 0.23173696780953884, - 0.24295372378900132, - 0.25443374597962826, - 0.2659536134919154, - 0.2772875627629577, - 0.28823268851380973, - 0.29862351863894243, - 0.30833765047349626, - 0.31729509507913, - 0.3254538533547901, - 0.3328036800190847, - 0.3393593618226836, - 0.3451543110141693, - 0.3502348946367145, - 0.3546556697670632, - 0.35847554300204026 - ], - [ - 0.21663616467582889, - 0.193157457188227, - 0.1678976254182978, - 0.14127862456994958, - 0.11406633334793387, - 0.08766927726895511, - 0.06485916356447724, - 0.05094256304644845, - 0.05098044985440315, - 0.060755684712673313, - 0.07210313702882917, - 0.08055789914092766, - 0.08439332791002485, - 0.08323830194040592, - 0.07759868529314472, - 0.06881860045477017, - 0.05932228861937345, - 0.05287358921342111, - 0.053342012715356796, - 0.06117406531709226, - 0.07339721645146317, - 0.08721153251552725, - 0.10119191320959786, - 0.11482780012968467, - 0.12800942933797982, - 0.1407387620317428, - 0.1530181572912976, - 0.16484238417525204, - 0.1762285823240358, - 0.1872407336121591, - 0.19799024636052862, - 0.2086134616496617, - 0.21923740189324845, - 0.22994766674756595, - 0.2407689864681579, - 0.251662379410122, - 0.26253647355771326, - 0.2732668734882558, - 0.28371707730539864, - 0.29375628162161316, - 0.3032718722078347, - 0.3121763827858737, - 0.32040984226063746, - 0.3279388345038434, - 0.334753543418037, - 0.3408638003079392, - 0.3462948514358612, - 0.3510833003335232, - 0.35527347847402546, - 0.3589143585518502 - ], - [ - 0.2216548200272641, - 0.19914857363354344, - 0.175081464297691, - 0.14996549047495253, - 0.12469696031253659, - 0.1008132772495873, - 0.08088584406758342, - 0.06855424731927974, - 0.06625954499161865, - 0.0715895379354632, - 0.07926963595773766, - 0.0853285523240759, - 0.08779905658084328, - 0.08610387900832352, - 0.08064673119362901, - 0.07269285741701326, - 0.06440867442389495, - 0.05874652569001857, - 0.05836616954986758, - 0.06368319550850068, - 0.07289760436409909, - 0.0840716414123136, - 0.09616745086615279, - 0.1088425027063043, - 0.12200713841482563, - 0.135551807852787, - 0.14927633180023106, - 0.16293582662134823, - 0.1763131152621106, - 0.1892672335686414, - 0.2017455766183482, - 0.21376740457359902, - 0.22539262516868933, - 0.23668886222783164, - 0.2477059103609461, - 0.25846183104875886, - 0.26894056708451164, - 0.2790980579900858, - 0.28887278727931825, - 0.2981971312370417, - 0.3070070807913075, - 0.3152491964336403, - 0.32288463898089825, - 0.32989069075659233, - 0.3362604092537511, - 0.342001061927809, - 0.3471318878836871, - 0.351681595383712, - 0.3556858743674162, - 0.35918509745584704 - ], - [ - 0.2276029279723977, - 0.2063759416475088, - 0.18388452050840323, - 0.1607182475288534, - 0.13783709696451193, - 0.11671838308125251, - 0.09942835478862425, - 0.08821747925300505, - 0.08412140588727741, - 0.08557910878677778, - 0.08928095967661735, - 0.09218591146316674, - 0.09244144555032092, - 0.08936005813938352, - 0.08321918703169892, - 0.07514414276469768, - 0.06703713603714885, - 0.06129671928245553, - 0.05987769787325511, - 0.06304667388763124, - 0.0695722199638587, - 0.07820630328786671, - 0.08844146055830411, - 0.10025010290905809, - 0.11359621011904805, - 0.12819853822816607, - 0.14357322517862733, - 0.159185827543827, - 0.17457785937964132, - 0.18942759672587903, - 0.2035568246674611, - 0.2169062277046162, - 0.22949789472262622, - 0.24139718682271097, - 0.2526811795407508, - 0.26341701275173324, - 0.27365050873671914, - 0.2834033867315778, - 0.2926763884637062, - 0.30145552628489297, - 0.3097191738382542, - 0.31744448141235776, - 0.3246123330462053, - 0.3312106208373914, - 0.3372359596646769, - 0.3426941357051847, - 0.34759963059683074, - 0.3519745418949185, - 0.3558471674478729, - 0.35925045970678504 - ], - [ - 0.2342801784165835, - 0.21453203375822585, - 0.1938231440744867, - 0.1727706924134108, - 0.15229638164261053, - 0.1336633711330869, - 0.11837436357389146, - 0.10774575019180078, - 0.10213706694195404, - 0.100426050412927, - 0.10044342104690096, - 0.09998376451363372, - 0.09750642396231911, - 0.09234471127845212, - 0.08469022575416996, - 0.07554181818504568, - 0.06662303776438326, - 0.06005300993711875, - 0.05742995626948344, - 0.05880112665776767, - 0.06306433964756178, - 0.0694426161681423, - 0.07805449239359695, - 0.08932423135478061, - 0.10325801111217561, - 0.11928823171872396, - 0.13655395127709327, - 0.15420735074180872, - 0.17157586856915308, - 0.1882047731899895, - 0.20383858625835763, - 0.2183788969053092, - 0.23183709199187344, - 0.24429068135084708, - 0.2558473316851575, - 0.2666183125076477, - 0.27670144798880253, - 0.286172493637344, - 0.2950831123721719, - 0.30346333837114264, - 0.31132653046280956, - 0.3186751938673828, - 0.3255065342486355, - 0.3318170767501391, - 0.3376060627162201, - 0.3428776039001017, - 0.3476417355705828, - 0.3519145883564615, - 0.3557179192879588, - 0.3590782275143291 - ], - [ - 0.24136705555447607, - 0.22316522532757352, - 0.20426027834942403, - 0.185242208127302, - 0.16691963562056494, - 0.15028765684708345, - 0.136375979283875, - 0.1259245104525588, - 0.11897125350394, - 0.1146519453672956, - 0.11145768388924195, - 0.10778786622620612, - 0.1024293177527785, - 0.09480504402243836, - 0.08506185236217369, - 0.0740984704706537, - 0.06354368202315265, - 0.05547691728920437, - 0.051458479077780166, - 0.051321548961340654, - 0.05374299228581422, - 0.058208733729758017, - 0.06558160139606042, - 0.07685595088888321, - 0.09194697020835457, - 0.10980306292268734, - 0.12911671543620484, - 0.14876612402037923, - 0.16793845328052504, - 0.18611385074527215, - 0.20301058349939444, - 0.2185257142746271, - 0.23268093765233816, - 0.24557611494908635, - 0.2573513137528044, - 0.2681576449562478, - 0.27813676927946374, - 0.28740843311053504, - 0.29606488090998134, - 0.30417061235307735, - 0.3117657936531287, - 0.318871707080436, - 0.32549688075729766, - 0.3316428999141091, - 0.3373092775798725, - 0.3424970945358127, - 0.34721137136579233, - 0.3514623014941967, - 0.3552655626354594, - 0.3586419530833078 - ], - [ - 0.24848500994140618, - 0.2317741036141048, - 0.2145453020800257, - 0.1973226884349447, - 0.18077034899849825, - 0.16563154257884538, - 0.15258684604839115, - 0.1420323871532249, - 0.13385739852637457, - 0.12737013851047846, - 0.1214650165431908, - 0.11495390206570369, - 0.10689315353521056, - 0.0968067479874957, - 0.08481384840843419, - 0.07171471178630531, - 0.05905673387039812, - 0.049009957189043975, - 0.04341520180496087, - 0.042026247447921494, - 0.04299746570817423, - 0.04588814844858398, - 0.05250520254561783, - 0.06446718932440983, - 0.08125119752173957, - 0.10111068484285622, - 0.12234645087502286, - 0.14369163410153166, - 0.16429590406883227, - 0.1836388356496523, - 0.20144984732414242, - 0.21764229341747307, - 0.23225879910371533, - 0.2454253962837324, - 0.2573134227635324, - 0.26810900170899543, - 0.27799018560067634, - 0.2871116797660521, - 0.2955966313020717, - 0.3035344661746296, - 0.31098335126370935, - 0.3179756652988413, - 0.3245249180156857, - 0.33063281784975446, - 0.33629556553758905, - 0.34150884744453736, - 0.3462713446889803, - 0.3505868238912183, - 0.3544650263106771, - 0.3579216387115367 - ], - [ - 0.25525258937224027, - 0.23988257591010395, - 0.22410399882217638, - 0.20835689926889625, - 0.19316199235968137, - 0.1790563081015577, - 0.16648004508393538, - 0.15563060824315117, - 0.14633912320044123, - 0.13804587781952393, - 0.12991424033403015, - 0.12104472070120248, - 0.11070557067701679, - 0.0985191135317619, - 0.08459597411901724, - 0.06964773517663751, - 0.055113001325672394, - 0.043208725371315905, - 0.03618557318523362, - 0.033928085123564454, - 0.033904641538455814, - 0.03558836307056497, - 0.04188692954712209, - 0.05491606363400601, - 0.0733288635091111, - 0.09474516934124783, - 0.11729510169080448, - 0.13970810568821235, - 0.1611600286312225, - 0.18115404948580927, - 0.19943836077857083, - 0.21594392345331784, - 0.23073316848020312, - 0.24395582103848656, - 0.25581070584357013, - 0.26651368524017105, - 0.27627237834413426, - 0.28526824617189034, - 0.29364615639637737, - 0.3015108509029983, - 0.30892906030597084, - 0.3159355503880075, - 0.32254125965160174, - 0.3287418845553824, - 0.33452568370274727, - 0.33987976368276024, - 0.344794558334569, - 0.34926655090751035, - 0.3532994962335736, - 0.35690449335358454 - ], - [ - 0.26132615703363343, - 0.24708541897183742, - 0.23247935628589625, - 0.2178618670666895, - 0.20362849954026868, - 0.19016041112532442, - 0.1777407430573577, - 0.16645952018249904, - 0.15614237499553998, - 0.14634448190600047, - 0.13642993710727763, - 0.1257184242372654, - 0.11365598754136602, - 0.09997285284591098, - 0.08481774429466914, - 0.06888621678428843, - 0.05357478880083354, - 0.04109627698751279, - 0.03380852691570523, - 0.031525656714888786, - 0.0312750368705878, - 0.03239950881407759, - 0.038291832087094614, - 0.05140253160988541, - 0.07010522516645343, - 0.09181598947149763, - 0.1146147368377609, - 0.13721993499546703, - 0.15880011362659616, - 0.17885170325391875, - 0.1971197986797003, - 0.21353870157107668, - 0.22818182121009076, - 0.2412169877874694, - 0.2528662653507285, - 0.2633708672534656, - 0.2729624552399431, - 0.2818421156401804, - 0.29016773885607156, - 0.2980495750401451, - 0.3055527172344579, - 0.3127045054531546, - 0.31950455826003255, - 0.3259353336459637, - 0.33197164892059644, - 0.337588238586073, - 0.34276502089290106, - 0.3474901781771755, - 0.35176141056588145, - 0.3555858244739658 - ], - [ - 0.2664229722703368, - 0.2530677769195554, - 0.23933925901610956, - 0.22551244570701356, - 0.21188148610955443, - 0.19871599270574575, - 0.18620234478201897, - 0.17438202151754575, - 0.1631085376431587, - 0.15204675134788423, - 0.14072772050325116, - 0.1286532327425209, - 0.11542952438931732, - 0.10090916449298899, - 0.0853324163412888, - 0.06947650430934368, - 0.05481892260860445, - 0.043552229763221526, - 0.03758514221321554, - 0.03614673285549122, - 0.0364292711571375, - 0.03779764737005191, - 0.04299303162368515, - 0.05456417891687934, - 0.07175968526296912, - 0.09230669606409632, - 0.11423422287506556, - 0.13615919677297, - 0.1571691137578371, - 0.17670549264518276, - 0.194481337736789, - 0.210418176795595, - 0.224592483898562, - 0.23718699166249307, - 0.24844578760991542, - 0.2586340692431251, - 0.2680044851246099, - 0.27677216047584174, - 0.28509980024628073, - 0.2930929115010115, - 0.3008036737133131, - 0.3082408491834552, - 0.315382703700607, - 0.3221902080595834, - 0.32861856224928176, - 0.3346259921715366, - 0.3401795529957843, - 0.3452582087690745, - 0.34985373682643994, - 0.35397008488019865 - ], - [ - 0.2703296513577709, - 0.25760691486892984, - 0.24446671422832322, - 0.2311164152894854, - 0.21777158096700877, - 0.20462512991750845, - 0.19180861174746655, - 0.1793531327327087, - 0.16716222555805146, - 0.1550106412637336, - 0.14257948202254034, - 0.12953036470202564, - 0.11561369041463188, - 0.10080276482054945, - 0.08544717669452266, - 0.07043844089134269, - 0.0573348733572166, - 0.048135107614135184, - 0.04398317364310935, - 0.043597618628649505, - 0.044632097956062454, - 0.04658017043348221, - 0.0513868547633909, - 0.06127556705941898, - 0.07634637897727546, - 0.0949885453957517, - 0.11535970943885443, - 0.1360077352393823, - 0.15592797175356224, - 0.17449188207299943, - 0.19137087734309202, - 0.20647064510708707, - 0.21987260473343462, - 0.23177915416623365, - 0.24246182611448133, - 0.2522137247756572, - 0.2613091374620379, - 0.2699736003759468, - 0.27836672638636095, - 0.2865780641078702, - 0.29463395010867494, - 0.30251164945260556, - 0.3101565809895824, - 0.3174990292346022, - 0.32446797697596286, - 0.3310010057439419, - 0.3370502397614333, - 0.342584927947007, - 0.3475915130901485, - 0.35207204326330266 - ], - [ - 0.27290060095721275, - 0.26056390355964854, - 0.2477428663019788, - 0.23458891797546969, - 0.22125788852215306, - 0.20789104058299768, - 0.19459253831906112, - 0.18140690505101745, - 0.16830200659924607, - 0.15516476646180702, - 0.14181794659805635, - 0.12806678990978188, - 0.1137835827263721, - 0.0990349130523459, - 0.08424792654968809, - 0.0703866553719782, - 0.059011341829242614, - 0.05181806652479854, - 0.04928986566226904, - 0.04989088269653774, - 0.051659811959723696, - 0.05421562475343617, - 0.05901137693725483, - 0.06787652037844369, - 0.08126591903635624, - 0.098115646810528, - 0.11683371628258647, - 0.13599900646885152, - 0.15456703216172998, - 0.17186713765838355, - 0.18754798183799967, - 0.201515822272514, - 0.21387328469343853, - 0.22485855717028708, - 0.2347852406155144, - 0.24398535404371668, - 0.25276013160214417, - 0.2613439242803084, - 0.2698850088148558, - 0.2784437917688756, - 0.28700521148239644, - 0.2954996983012777, - 0.3038266471206073, - 0.3118756592056934, - 0.31954286452822417, - 0.3267415433736382, - 0.3334075602767925, - 0.3395007531462068, - 0.34500355573890606, - 0.3499179870590413 - ], - [ - 0.27405056617391366, - 0.2618705322438399, - 0.24912811623197317, - 0.2359294303654626, - 0.22238461353683733, - 0.20859933837004357, - 0.19466600298510947, - 0.18065501504757633, - 0.16660628118377774, - 0.15252185917579664, - 0.1383643644906397, - 0.12407295818878296, - 0.10961709795257993, - 0.09511036846360374, - 0.08099154543103503, - 0.0682275396658173, - 0.058341141606583574, - 0.05279122710506812, - 0.0516185147161988, - 0.05311732179548891, - 0.055540231346647255, - 0.05862791321736129, - 0.0636289273707518, - 0.07210871945317768, - 0.08456860237486198, - 0.10019624841546261, - 0.11758590546025617, - 0.13538821451945818, - 0.15257345012270154, - 0.16847475638402715, - 0.18275519292672873, - 0.19535356152725045, - 0.2064231892396668, - 0.21626587484337434, - 0.22526220095133426, - 0.233802338797707, - 0.2422249556569889, - 0.25077316464126254, - 0.25957393518086175, - 0.26864161733082037, - 0.27790005779718485, - 0.28721423383522043, - 0.2964225042470205, - 0.30536336672100484, - 0.3138940632752045, - 0.3219010692295119, - 0.329303977293793, - 0.33605474726740897, - 0.34213414560677485, - 0.34754680109916675 - ], - [ - 0.27374436744538583, - 0.26151455688250924, - 0.24864349850344306, - 0.23520129688877736, - 0.22126215544563174, - 0.20690466370223976, - 0.19221507642322694, - 0.1772919493341045, - 0.1622478454979489, - 0.1472023457613613, - 0.1322637705361486, - 0.11750891131793949, - 0.10299071687221441, - 0.08882169682075144, - 0.07536984177571834, - 0.06352629628013208, - 0.05478336327729115, - 0.050512554254345414, - 0.05047351444950747, - 0.05274550916382769, - 0.0556580788575161, - 0.059120116523639396, - 0.06441979685020002, - 0.07300994855932158, - 0.0852726597334707, - 0.10037188882324898, - 0.11693909985548413, - 0.13367169534247836, - 0.14958283116518387, - 0.16405023097461477, - 0.1767916428977206, - 0.1878166388140073, - 0.1973668616749217, - 0.20584526263433586, - 0.2137347589438963, - 0.22151208530762287, - 0.22956931525353447, - 0.23815860879067718, - 0.24737137385783797, - 0.2571523467928443, - 0.26733825387255594, - 0.27770576149801646, - 0.28801551196472214, - 0.2980448914741934, - 0.3076078555149192, - 0.31656365113310037, - 0.3248175895942884, - 0.3323169473766706, - 0.33904440865990676, - 0.34501070198813366 - ], - [ - 0.27198597654353024, - 0.25952501141393447, - 0.24635290903049084, - 0.2325126370628652, - 0.2180495224888369, - 0.2030180779542655, - 0.18749575566827528, - 0.17160145137495458, - 0.1555116413353451, - 0.13946174806154257, - 0.12371893024615212, - 0.10852350532166218, - 0.09402930039437433, - 0.0803220740866821, - 0.06761292944817689, - 0.05661007052481645, - 0.04875803403243422, - 0.045479237887426346, - 0.04634751858530694, - 0.049150426651659536, - 0.05224312148985404, - 0.05582123692825003, - 0.06144630274077625, - 0.07056392812707948, - 0.083279116561241, - 0.09849334219758692, - 0.11473393652924671, - 0.13070611472430957, - 0.14547754265865853, - 0.15849872514922256, - 0.16957431391223723, - 0.17881934475423528, - 0.18660296818799155, - 0.19347380679168527, - 0.20006343345011932, - 0.20697466164298362, - 0.21467516023024716, - 0.223424620854408, - 0.23325587717098695, - 0.24400916796684122, - 0.25539877187392906, - 0.26708526622282797, - 0.2787342094759846, - 0.29005394244748833, - 0.30081396981615, - 0.3108491535532806, - 0.32005523771941946, - 0.3283800178127308, - 0.3358130178911121, - 0.3423753565367862 - ], - [ - 0.26880856221049176, - 0.2559587689971482, - 0.24234642012028978, - 0.22799744846820388, - 0.21293522191518585, - 0.19719075509115816, - 0.18082437133171572, - 0.16395794376722625, - 0.14681036726884059, - 0.12971956858931544, - 0.11312454078359735, - 0.09748040116784293, - 0.08311312939431365, - 0.07011358719623126, - 0.05846873951309851, - 0.04854541389818557, - 0.04159572485797597, - 0.039100388079385845, - 0.04051783459480461, - 0.04337989229669904, - 0.04615378208277245, - 0.04950538618752681, - 0.0554951218285629, - 0.06555576975760409, - 0.0792685673125108, - 0.09507448290083703, - 0.11132675055791873, - 0.12673145884378684, - 0.14042182190394392, - 0.15193542426746753, - 0.16118004182513718, - 0.1683984280185903, - 0.17412132837740416, - 0.17909230418314948, - 0.1841516199227134, - 0.1900838660873302, - 0.1974630816846563, - 0.206549505503238, - 0.21727761512778457, - 0.2293294598351913, - 0.2422487452793602, - 0.25554780899868, - 0.2687817570861724, - 0.2815869734381949, - 0.2936928122904754, - 0.3049171695920524, - 0.3151542282783481, - 0.3243596080613162, - 0.3325357790897856, - 0.3397190876249647 - ], - [ - 0.26426699645725094, - 0.25088965896396, - 0.23672544520002672, - 0.22179669926496864, - 0.20611496663276, - 0.18969030914754836, - 0.17255654229744102, - 0.15481464853236868, - 0.13669000977485368, - 0.11858773503701445, - 0.10111252824433546, - 0.08499662695610835, - 0.07087863730873452, - 0.05899019570971906, - 0.04908280801066853, - 0.04097150714490607, - 0.03535840653091628, - 0.03347391802539399, - 0.03477550743929202, - 0.03693546777465026, - 0.038779814958022366, - 0.041617954441739394, - 0.04815624904756333, - 0.05958053015922237, - 0.07461258838222579, - 0.09117231967303259, - 0.10749106396076018, - 0.12231055441366578, - 0.13483688729726834, - 0.1446886121257451, - 0.15186874476943402, - 0.15674870329212778, - 0.16004248903855237, - 0.1627409984521474, - 0.16597409567867297, - 0.17079229520441033, - 0.17792179465846442, - 0.18760390768868418, - 0.19960298827786774, - 0.21335862167184336, - 0.22818032258625395, - 0.24339960521354947, - 0.25845351169610226, - 0.27291314764728186, - 0.28648008340403014, - 0.2989682571189841, - 0.3102816482065014, - 0.3203927205945933, - 0.3293236528777338, - 0.33713089101294175 - ], - [ - 0.2584343745898458, - 0.24440195419330132, - 0.22959164394003592, - 0.214041024551859, - 0.19776690008683498, - 0.1807684353647302, - 0.1630496431794345, - 0.14466798664452366, - 0.1258102716904994, - 0.10688685052011711, - 0.08861703395201277, - 0.07203839050107218, - 0.058291601225645674, - 0.0480247325190298, - 0.04079620242389518, - 0.03554735195089367, - 0.03191925682980864, - 0.03040651067587961, - 0.030714985003254824, - 0.0314211280906762, - 0.03202764889421264, - 0.03450819115615451, - 0.042016502636844776, - 0.05496697387176285, - 0.07112494511521027, - 0.08812241321511759, - 0.1042083020611109, - 0.11818837443107104, - 0.12932117094557488, - 0.13726938673779784, - 0.14209223062956525, - 0.1442603719114098, - 0.14466982569541345, - 0.14461032640052263, - 0.14561646863216463, - 0.14914515576860718, - 0.1561516935127225, - 0.16681074072354107, - 0.1805818876435515, - 0.19653030557126364, - 0.21365508646268735, - 0.23108550217192608, - 0.24815091022358812, - 0.26437909302279533, - 0.2794662178195464, - 0.2932407338905995, - 0.30563016428925527, - 0.31663343060007965, - 0.32629884390454594, - 0.3347070708683393 - ], - [ - 0.25140409061832225, - 0.23659058240010292, - 0.22104280068266138, - 0.20483902190501938, - 0.18802862836932957, - 0.17062324870665396, - 0.15260858835184077, - 0.13398947666945363, - 0.11487613618337932, - 0.0956114154956081, - 0.07692865666634854, - 0.06010204368430817, - 0.04690147164046366, - 0.03873241845589123, - 0.03490404123385391, - 0.03296533065609772, - 0.03129343616666927, - 0.02980283302515753, - 0.028752679426684146, - 0.02805535437259033, - 0.028162984301250086, - 0.031336892545104834, - 0.04013538399145951, - 0.05398751085090963, - 0.07038344609396828, - 0.08705602475444604, - 0.10234340630649046, - 0.11508185565642509, - 0.12452383454104936, - 0.13031126844043844, - 0.13249100585287285, - 0.13156608603547534, - 0.12857178063469643, - 0.1251293648558724, - 0.12334327699716333, - 0.12533567393857484, - 0.1324407164895542, - 0.144649225030673, - 0.16085304536936484, - 0.17954636671299457, - 0.19935106883743822, - 0.21920926287910145, - 0.23838486945846502, - 0.25640356391841107, - 0.2729875597660137, - 0.28800125650990943, - 0.30140937361261494, - 0.31324551756764485, - 0.32358878810326985, - 0.33254646285066547 - ], - [ - 0.24329859111464724, - 0.2275705298258361, - 0.21117989966659856, - 0.19427740918897682, - 0.17698446014964042, - 0.1593665304614064, - 0.14142511168942662, - 0.12312878880174444, - 0.10450073499390372, - 0.08576995660298424, - 0.06758731511768921, - 0.0513052663897243, - 0.03916455000193898, - 0.033240759814141096, - 0.032290769005781046, - 0.03255474780462626, - 0.03187040001975754, - 0.030155019124407653, - 0.02826476661244041, - 0.027326835809388408, - 0.028622075844385537, - 0.03369652420673964, - 0.04351393949280063, - 0.05720503700335465, - 0.07280210362548888, - 0.08836056395650813, - 0.10230551302358712, - 0.11345394727583741, - 0.12099384633080205, - 0.12448127198090873, - 0.1238709533883309, - 0.11959599612578944, - 0.11271773835052196, - 0.10514299505365218, - 0.09974541986155587, - 0.09982200739271274, - 0.10742553458142655, - 0.12205467254946725, - 0.141508273279738, - 0.16346954138731654, - 0.18619545469226845, - 0.20853143181959335, - 0.2297585000896097, - 0.24945622132053474, - 0.2674063960838496, - 0.28352796016991866, - 0.29783232884368765, - 0.3103920221958115, - 0.32131820339033584, - 0.33074444793458063 - ], - [ - 0.23428475820063743, - 0.21749709060078373, - 0.2001295759589724, - 0.18244047446422226, - 0.16467428493958508, - 0.14701256232455345, - 0.12953427876671333, - 0.1122181747735513, - 0.09502126851214343, - 0.07805122364773645, - 0.06182750783894032, - 0.04760143534750172, - 0.03748012375385863, - 0.033102976701876334, - 0.032808517079010405, - 0.033119146869833076, - 0.03225846952705357, - 0.0303709179417988, - 0.028700251922527967, - 0.02899494546386135, - 0.032517593038327505, - 0.03956006062636099, - 0.04997720580461337, - 0.06304255639672247, - 0.07740986494708725, - 0.09151302437808333, - 0.10389931348436846, - 0.11337420065611654, - 0.11904966583061531, - 0.12036696992372087, - 0.11713256451875116, - 0.10960187367500744, - 0.09867029711614778, - 0.08628451798259208, - 0.07613504575226648, - 0.07365871673203565, - 0.08251169246755098, - 0.10081949901545678, - 0.12431412640376165, - 0.14978432720849, - 0.17534305141947565, - 0.19992082603167927, - 0.2229175782952307, - 0.24401599569365393, - 0.2630786648934878, - 0.28008635640775825, - 0.2950978815792411, - 0.3082224234961119, - 0.3195998083257743, - 0.3293862376712388 - ], - [ - 0.2245936450040788, - 0.20659635952863975, - 0.18808438635424524, - 0.16945545834428666, - 0.15113579693207724, - 0.13350724474243197, - 0.11681982047158337, - 0.10113522228098629, - 0.08636744350065266, - 0.07246187309030518, - 0.05967708050008414, - 0.048822536325831084, - 0.041092649683951654, - 0.03698452534359205, - 0.0352037169110021, - 0.03379316127632781, - 0.03192302740225842, - 0.030126667185637772, - 0.029720943237792705, - 0.032068368857716134, - 0.037629280746438475, - 0.046016509369536475, - 0.05677246055801854, - 0.06930198316828198, - 0.08261710866388004, - 0.09544510187309929, - 0.10647668053348763, - 0.1145462410595707, - 0.11872366771942061, - 0.11835844614398001, - 0.1131146306726464, - 0.10303323810671546, - 0.08868840858062027, - 0.07163430258013893, - 0.05576066083749042, - 0.04976047274146422, - 0.06111548771082884, - 0.08426808455342827, - 0.11183716660053901, - 0.1402964635711587, - 0.16803602526903014, - 0.19423576896917724, - 0.21846304870730465, - 0.24050984497361375, - 0.26031184973681404, - 0.27790048033770387, - 0.293370847229975, - 0.30685892019187916, - 0.31852476696434245, - 0.3285401716218973 - ], - [ - 0.21453884003862161, - 0.1952011338148432, - 0.17535924069816472, - 0.15556744761456495, - 0.13648931818065138, - 0.1188120747189148, - 0.10309286175629795, - 0.08957739292014555, - 0.07811465367569628, - 0.06829692949884555, - 0.059780951817640295, - 0.05252660702048861, - 0.04667129843766612, - 0.04207072485749318, - 0.038104686917715805, - 0.03427001538055783, - 0.030962736867527374, - 0.029421274000985015, - 0.030703690602634306, - 0.03500871689250417, - 0.04195809379644902, - 0.05109709340126783, - 0.062053391662316326, - 0.07431023870109887, - 0.0870195762418603, - 0.09906619361217438, - 0.10925494249755555, - 0.11647577741563998, - 0.11980593023763736, - 0.1185659160611488, - 0.11235728952921306, - 0.10111204127977476, - 0.08520698852525527, - 0.06582186657552316, - 0.04636888185397128, - 0.03749071784440867, - 0.0511151387295805, - 0.07733684175592641, - 0.10691787253292236, - 0.13667610140220787, - 0.16530282539431002, - 0.19213850730744436, - 0.21683752209821688, - 0.2392424707347402, - 0.25932063083121065, - 0.2771243466956528, - 0.29276328728194345, - 0.3063839491390528, - 0.3181542425964815, - 0.3282519286769806 - ], - [ - 0.20452329640075245, - 0.1837805843710649, - 0.16245450481017773, - 0.14124140077933992, - 0.12107183880126868, - 0.1030533293662214, - 0.08825228205107306, - 0.077260113708412, - 0.0697575078642064, - 0.064582851926187, - 0.06038825272265347, - 0.05623621590137605, - 0.051678462067515966, - 0.046516438143520404, - 0.04070824867947759, - 0.03469495319975346, - 0.029914774136332468, - 0.028452395753986986, - 0.030999676435571014, - 0.03653724318784656, - 0.044188224409552425, - 0.05367433737932086, - 0.0648048595561434, - 0.07709795880724803, - 0.08971558860193782, - 0.10158887577638802, - 0.11158943717631718, - 0.11866975632041797, - 0.12195747186686315, - 0.12081691704634802, - 0.11490022604016184, - 0.1042190190722959, - 0.08930106596552134, - 0.07162789135261145, - 0.055003651737257464, - 0.04832864316392653, - 0.05968526314347174, - 0.08316248008857854, - 0.111018084278029, - 0.1396902919525231, - 0.16758730137399871, - 0.19390519586867155, - 0.21822218213590913, - 0.24033749646165306, - 0.26019186803074357, - 0.2778203568581187, - 0.29332080152220663, - 0.3068312719230678, - 0.31851348547270913, - 0.32854054001022426 - ], - [ - 0.19502035346936247, - 0.17294262327298437, - 0.15010166409615874, - 0.1272751676632789, - 0.10562484105906755, - 0.08675724085652592, - 0.0725386943541673, - 0.06422027834442852, - 0.061103506502833055, - 0.060654004102056874, - 0.06030424095463317, - 0.058570696881390404, - 0.05495127759222267, - 0.04949819219642175, - 0.04261634360615995, - 0.03525909703447157, - 0.029381000257552088, - 0.02753717639107955, - 0.03030443888977968, - 0.036047501645532956, - 0.04372513792535127, - 0.05327409427065394, - 0.06463932456796968, - 0.07729679052898626, - 0.09032668113037444, - 0.10263163836812736, - 0.11311084332366035, - 0.12077622066447725, - 0.12483233745936996, - 0.12473932196167624, - 0.12027943769618457, - 0.11165926580441612, - 0.09971016678687575, - 0.08631325022450043, - 0.07515985104360866, - 0.07192534599440698, - 0.08059045327192323, - 0.09913094429655893, - 0.12296395999203152, - 0.1487439809726062, - 0.17455678414091316, - 0.19933616296851528, - 0.22249096010635613, - 0.24371239683520793, - 0.2628701250431421, - 0.27995057763241665, - 0.2950170928628252, - 0.3081824938787044, - 0.3195895531485449, - 0.32939686834564913 - ], - [ - 0.18651458911325852, - 0.16337914238839815, - 0.13924301510785814, - 0.11486917990259583, - 0.0915178137434764, - 0.07122687380742786, - 0.056969341586544854, - 0.05126362653004218, - 0.05267248445800139, - 0.05650050055368799, - 0.0591328848857734, - 0.059069948557063726, - 0.056108673791213905, - 0.050665266822390934, - 0.04348873434546496, - 0.035751383062799694, - 0.02939260081658479, - 0.02682582221085813, - 0.028742787553480253, - 0.03364686732199749, - 0.040675052213334006, - 0.050034323953461586, - 0.06172134878823267, - 0.07505038732573587, - 0.08893611338274914, - 0.10220330193538878, - 0.1137511418530449, - 0.12264166749346916, - 0.1281625888134698, - 0.12988559219426293, - 0.12773636947148773, - 0.12209876964517226, - 0.11398298658598656, - 0.10526874514319443, - 0.09887494970113173, - 0.0982483115161267, - 0.10557422986195185, - 0.12028484118767482, - 0.1399954118684353, - 0.16225359615617846, - 0.1852552564195965, - 0.20782648349252375, - 0.22924621119953797, - 0.24909790299320586, - 0.2671688545539062, - 0.28338349279658337, - 0.29775819577065543, - 0.3103697916611122, - 0.3213331119569278, - 0.330784820364086 - ], - [ - 0.17939844220384563, - 0.15572858615622867, - 0.1308740051342765, - 0.1055140836383314, - 0.08084696138692492, - 0.05906434340812499, - 0.044199792441866316, - 0.04071178575795999, - 0.0459929179648148, - 0.052796956604542374, - 0.057115743029968365, - 0.05783411395299468, - 0.05516332559886, - 0.04988422191054811, - 0.04300569297749157, - 0.035723241132937636, - 0.029618066880776634, - 0.026508453402911854, - 0.027028762535448152, - 0.030217429895109647, - 0.03586252038518581, - 0.04470033735572548, - 0.056725106625851014, - 0.07093882534903938, - 0.08600759782891519, - 0.10063869891295389, - 0.11370598263833805, - 0.12430455605209989, - 0.13179327008291722, - 0.1358397714270538, - 0.13647707414579646, - 0.13417998737336043, - 0.12996026212730866, - 0.12544020654191745, - 0.12276791029654481, - 0.12414287779054797, - 0.13094856433563434, - 0.1431364873974978, - 0.1594951982565628, - 0.17841936173083894, - 0.19846720506233198, - 0.21854919773524065, - 0.23791694140703132, - 0.25609359649911556, - 0.27280332316664807, - 0.2879142467968389, - 0.3013953118355452, - 0.3132842594793499, - 0.3236639772875643, - 0.33264508699026 - ], - [ - 0.17384533059710375, - 0.1503684901004604, - 0.12571092710498324, - 0.10049739702791258, - 0.07586170779029745, - 0.05397230371481783, - 0.03918870125965511, - 0.036758890330193396, - 0.04326599098660777, - 0.05057522635165399, - 0.05485718484783072, - 0.05529631229019726, - 0.05239549588139852, - 0.047238886590698644, - 0.04104832462401028, - 0.03493699347624136, - 0.029948976975850843, - 0.027028180844085866, - 0.02633124178586614, - 0.027322407219707214, - 0.030798361386638416, - 0.038562413340186695, - 0.050737126673004763, - 0.06587347342245393, - 0.08228703219062403, - 0.09851242303956452, - 0.11336500763336498, - 0.12595004177560884, - 0.1356757745134625, - 0.14227526223017933, - 0.1458376981832919, - 0.14684648531182698, - 0.1462090810533802, - 0.14523733242846337, - 0.14550338164098456, - 0.14850616651759946, - 0.1552202406021751, - 0.1657956776221492, - 0.1796326471282274, - 0.19573034347777424, - 0.213036078962293, - 0.23064649933543524, - 0.24787371065920932, - 0.2642382054459822, - 0.27943459373302093, - 0.2932927857492492, - 0.3057431876709208, - 0.3167881292680052, - 0.326479366215495, - 0.3349007904462329 - ], - [ - 0.1697089875518952, - 0.14722210612580774, - 0.12380668757736892, - 0.10011318765209763, - 0.07732048960828088, - 0.05757480403328859, - 0.044530778018336305, - 0.04146225479817454, - 0.04552299833864048, - 0.05052946766603943, - 0.05300571183877185, - 0.05209116198520768, - 0.04836209914914543, - 0.043133164137593556, - 0.03783903479542315, - 0.03343536545177647, - 0.030267692356264503, - 0.028312573851091243, - 0.027120835208039033, - 0.026281046243004542, - 0.027230155816688483, - 0.03318838996355807, - 0.04506534979599442, - 0.06096489561934747, - 0.0786959216863314, - 0.09654062149545774, - 0.11322373848122812, - 0.12784228697592026, - 0.13983296010859234, - 0.14896322675770812, - 0.15533452406917386, - 0.15938666698946785, - 0.1618860004814825, - 0.16386873977798458, - 0.16650594407809696, - 0.17088024951113537, - 0.17773067458113032, - 0.1872855385709076, - 0.19927519273484692, - 0.213097344403479, - 0.22802385063490166, - 0.24335854286444927, - 0.2585210587817217, - 0.27307319176174, - 0.28671271761710393, - 0.2992531935123444, - 0.3106001477414441, - 0.32072855375154835, - 0.3296634566157178, - 0.33746416485758923 - ], - [ - 0.16650361832067903, - 0.14570194024561106, - 0.12440519506655195, - 0.1032866371671203, - 0.08349454459827116, - 0.0668370418911057, - 0.05560745116985792, - 0.051041076488262366, - 0.05122137966569738, - 0.05240838597181725, - 0.05192950111851835, - 0.048917001239583445, - 0.043918769064179096, - 0.03841352598042036, - 0.034043303829075694, - 0.03147434990605046, - 0.030197395112557587, - 0.02943367170594435, - 0.02846404591442725, - 0.026875477570650126, - 0.026015154409226734, - 0.02993107696753694, - 0.041063075827321716, - 0.05741937628152261, - 0.07622116592389754, - 0.0954632528828967, - 0.11377609770718174, - 0.13024165095207987, - 0.14430727353716258, - 0.15574723387549227, - 0.1646425678113941, - 0.1713622619147405, - 0.17652985190297216, - 0.18095799044586822, - 0.1855376506667774, - 0.1910867301160367, - 0.19819381431402572, - 0.20711496906592752, - 0.217765948506861, - 0.22980294110322003, - 0.24274393861546917, - 0.2560802852588835, - 0.26935234849145956, - 0.2821875699000543, - 0.2943108711087359, - 0.3055388443482669, - 0.315766339552803, - 0.32495075181807326, - 0.33309683824012204, - 0.34024335334856176 - ], - [ - 0.16348205578601738, - 0.14484031028926275, - 0.12618703073316748, - 0.10810719679373716, - 0.0914997189235455, - 0.0775484336368632, - 0.06736945428992856, - 0.06120542914267322, - 0.05782718695652454, - 0.0551535452854498, - 0.05150508035957035, - 0.0462863954857103, - 0.04006275557445877, - 0.03434996572674084, - 0.03079816197113267, - 0.029584736594739886, - 0.02949815783864311, - 0.029570377329632018, - 0.02922231958115006, - 0.028024832592890687, - 0.026911985929129655, - 0.029747420383443912, - 0.04005815805368685, - 0.056395143404456276, - 0.07573080072399703, - 0.09587359949874524, - 0.11538195665452762, - 0.13331354377830265, - 0.1491030129202368, - 0.16250287212325767, - 0.17354748442019843, - 0.1825203859146896, - 0.18991158761363755, - 0.19635447719950444, - 0.20253764996327675, - 0.20909857871076165, - 0.2165208373129947, - 0.22506475990207767, - 0.2347530071513095, - 0.24540998728445032, - 0.2567331888769856, - 0.2683686511320005, - 0.27997112736317953, - 0.29124203727680964, - 0.30194726385699694, - 0.31192050494487905, - 0.32105797852372303, - 0.329308915655148, - 0.3366647319587249, - 0.34314854324438465 - ], - [ - 0.15977558210927875, - 0.14352645563306907, - 0.12770260929537378, - 0.11266674943098143, - 0.09891753618301875, - 0.0870092557448968, - 0.07731688582376793, - 0.06971770644971842, - 0.0634740005749741, - 0.05754947210554825, - 0.051165406522642454, - 0.044214202743096065, - 0.03739467607534484, - 0.03203217473320501, - 0.029197988259124633, - 0.028408816597273807, - 0.02839488892156756, - 0.02869762308890533, - 0.029187952577630266, - 0.0293659553671165, - 0.029652690178470463, - 0.03301731486525187, - 0.04279275446641564, - 0.05850484788511027, - 0.07762134590879666, - 0.0979912899021333, - 0.11812948559231604, - 0.1370483569697496, - 0.15413835852855903, - 0.16910004302721468, - 0.18189850186113854, - 0.1927227591265968, - 0.20193965731686714, - 0.21003595201318925, - 0.21754733669567144, - 0.22498020357085247, - 0.23273928834336047, - 0.24107751665914076, - 0.2500796898464476, - 0.25968050106756035, - 0.26970625465944825, - 0.27992477263109217, - 0.2900903241419759, - 0.2999764863729277, - 0.30939559399319994, - 0.3182068961857325, - 0.3263167559124129, - 0.3336740614638823, - 0.34026329515471043, - 0.3460969100906997 - ], - [ - 0.15453653583745447, - 0.14072378107428266, - 0.12770273539152957, - 0.11551658674960462, - 0.10422199417680975, - 0.09386712022672485, - 0.08441123094762663, - 0.07564080575401208, - 0.06718928317792847, - 0.05872363074031775, - 0.050226732144482644, - 0.04220234488797187, - 0.03560614520874531, - 0.03131035145073733, - 0.029216784559628586, - 0.028178832677470095, - 0.02744909996985805, - 0.027567624831645432, - 0.02907018622649892, - 0.03126337456654637, - 0.03389273332490431, - 0.03877410715113019, - 0.048413414783229816, - 0.06317440865522748, - 0.08148300734816737, - 0.10149818861206249, - 0.12175872547837858, - 0.14122706237295124, - 0.15922655331555952, - 0.17538301120490285, - 0.18957691095452994, - 0.20189906980332917, - 0.21260367825348753, - 0.22205526933801245, - 0.23066969528051534, - 0.23885338255096278, - 0.24694889403493503, - 0.25519608840986013, - 0.26371548255611293, - 0.27251454696023086, - 0.281511494872002, - 0.29056766192083233, - 0.2995198291056713, - 0.3082066518832023, - 0.3164867668194586, - 0.3242487674042921, - 0.3314146461440917, - 0.33793870712931046, - 0.3438037757137355, - 0.34901611827393914 - ], - [ - 0.14704417339935105, - 0.13560153933399288, - 0.12527851591076572, - 0.11573742466185183, - 0.10660509345475758, - 0.09755075185044758, - 0.08831488637256577, - 0.0787120066940222, - 0.06866751495545345, - 0.05834101910973294, - 0.0483251146866343, - 0.039765039615662266, - 0.033961027174239065, - 0.03114559514899092, - 0.02988794858560447, - 0.028572975517843914, - 0.0271157394291854, - 0.027102615180811047, - 0.029675574665464215, - 0.033864382639873826, - 0.03872349396148512, - 0.04512513134444141, - 0.05488736451442523, - 0.06881769055741775, - 0.08618820126897007, - 0.10560330173914445, - 0.1257143468957275, - 0.14546091391110258, - 0.16409999193927918, - 0.1811772254089514, - 0.19648594811725342, - 0.21002330910285133, - 0.2219440220925254, - 0.2325112863241735, - 0.2420458110426132, - 0.25087604690403675, - 0.2592946012008446, - 0.26752627861697637, - 0.2757115946838405, - 0.28390634984014634, - 0.2920943018886463, - 0.30020764725998184, - 0.30814963874385376, - 0.31581490098048104, - 0.32310494498202935, - 0.32993818274895953, - 0.3362549632933099, - 0.34201874299419327, - 0.3472146259758361, - 0.35184636702376 - ], - [ - 0.13676768406626091, - 0.1275891565035479, - 0.11987795886310845, - 0.11286095823076858, - 0.1057508920903189, - 0.0979336526062989, - 0.0890541135378083, - 0.07902450883771048, - 0.06802476197639955, - 0.056570822818328474, - 0.04569273859104715, - 0.037071844902074956, - 0.03233402671289141, - 0.031007711013866974, - 0.03055862616058608, - 0.02921198606400383, - 0.027456252017144477, - 0.027613309815076804, - 0.031104446033900925, - 0.03667548737973278, - 0.042971437282453305, - 0.050358122103560034, - 0.06026770573242559, - 0.07368029975676917, - 0.09037663496656406, - 0.1093277713730159, - 0.1293209776941354, - 0.14930055323640745, - 0.16847493338834404, - 0.18632223586377236, - 0.20256082430196234, - 0.2171086794665636, - 0.23003898165769057, - 0.24153436773096634, - 0.2518415729702303, - 0.26122882967469874, - 0.2699491754688661, - 0.2782129140333549, - 0.28617148212767807, - 0.2939130906984792, - 0.3014684008043356, - 0.308822959106743, - 0.31593262016299867, - 0.32273867912530363, - 0.32918051710893503, - 0.3352047390073125, - 0.3407707258711671, - 0.3458531064287182, - 0.3504419047183051, - 0.35454114179619445 - ], - [ - 0.12340346281483695, - 0.11639371993735446, - 0.11128691435909038, - 0.10679017572691844, - 0.10169339511400442, - 0.0951652485624765, - 0.08684714982479366, - 0.07681923151259971, - 0.06553598421547913, - 0.053821324455828885, - 0.04299668419836983, - 0.03499682324991966, - 0.031430171297503064, - 0.03117626956010637, - 0.03124850652517045, - 0.030074873457442863, - 0.02850737153904862, - 0.029060472173809568, - 0.0330179014050423, - 0.03899118599010856, - 0.04564419529848665, - 0.05326987489929349, - 0.06318755199504994, - 0.07641905663008758, - 0.09292567061062432, - 0.11183518341139068, - 0.13200301110496393, - 0.1523772347871306, - 0.17213796234325224, - 0.19072027088756457, - 0.20779170742351924, - 0.22321438754460052, - 0.2370026827128979, - 0.24928055412913408, - 0.26024058945763634, - 0.27010657654108466, - 0.27910163683202116, - 0.2874238606688713, - 0.29523074885060774, - 0.30263263391447087, - 0.3096939702976376, - 0.31644037231745786, - 0.3228688358781136, - 0.3289587434255502, - 0.3346818424546507, - 0.34001013916644074, - 0.3449213346036711, - 0.3494019272868411, - 0.3534483891166632, - 0.35706692647752275 - ], - [ - 0.10691669709888835, - 0.1020268801867077, - 0.09963944192364388, - 0.09778182070302169, - 0.09477466510611457, - 0.08961944686625636, - 0.08203748719754052, - 0.07236029282798116, - 0.06139243758329503, - 0.050309636086483096, - 0.0406383451918731, - 0.0341346455733964, - 0.0317038848007347, - 0.031837880162171366, - 0.032035529241413306, - 0.03125072495252763, - 0.030398547040277987, - 0.031451895008431895, - 0.035148461349158264, - 0.04032040246041328, - 0.04611133572108472, - 0.05314215458090091, - 0.06287616220049642, - 0.07629394198224151, - 0.09322200333527046, - 0.11268017704028858, - 0.13347339040605471, - 0.15453225741398519, - 0.17502822776121976, - 0.1943844087870294, - 0.21224882462808387, - 0.22845618265756512, - 0.24298731842744736, - 0.25592965114213423, - 0.2674402416451014, - 0.27771270560363653, - 0.28694924383253667, - 0.295338942334825, - 0.303043079401972, - 0.31018747850772294, - 0.316861142966009, - 0.3231197397923503, - 0.32899214896309564, - 0.33448831488711944, - 0.3396069559038669, - 0.34434216088951897, - 0.34868838500384935, - 0.35264375046836555, - 0.35621182191200357, - 0.35940216330233865 - ], - [ - 0.08764184529385366, - 0.08490558888510147, - 0.08552568419525325, - 0.08654053947649515, - 0.08572481545147674, - 0.0819737638884266, - 0.07517225922338938, - 0.06598544270845966, - 0.05566861299213858, - 0.045848316900264786, - 0.0381789854253808, - 0.033744330569943096, - 0.032294747628525064, - 0.032336095126011634, - 0.03248206401727458, - 0.03241129613383081, - 0.03277253116264375, - 0.03438767992576028, - 0.03720046576452113, - 0.04046468805771125, - 0.04417163843180743, - 0.04975785528533897, - 0.059183955854507315, - 0.07327041108360614, - 0.09132023198233767, - 0.11196582363680807, - 0.13385818949353787, - 0.15590347763014886, - 0.17729210946207455, - 0.19747002067089006, - 0.2160983228119329, - 0.23301254126449275, - 0.24818388335964597, - 0.2616832196938834, - 0.2736482739220442, - 0.28425464458077127, - 0.2936913882658064, - 0.3021418401967056, - 0.30977008358115227, - 0.31671303506067355, - 0.3230775966531034, - 0.3289418748538846, - 0.3343592003542391, - 0.3393636455990566, - 0.3439759057230897, - 0.3482087043788626, - 0.35207121977614336, - 0.3555723258033464, - 0.3587226679776788, - 0.3615357339713351 - ], - [ - 0.06660684532932624, - 0.06619596258799744, - 0.07033816692136606, - 0.07450934362317832, - 0.07591227867001873, - 0.07346555940468259, - 0.06730202258499646, - 0.058465918901318456, - 0.04874004095851491, - 0.040333663163297194, - 0.03497913152972888, - 0.032693100888191634, - 0.03204183516204669, - 0.031865004584037966, - 0.032086722389618336, - 0.0331341818084724, - 0.03505786926218535, - 0.0373051196571928, - 0.03902530781109029, - 0.039739053342984665, - 0.040344287724244005, - 0.04368637367447505, - 0.052851154258306596, - 0.06824344786401033, - 0.08809343438342805, - 0.11043166724396583, - 0.1337442111034011, - 0.1569490402163515, - 0.1792931425781657, - 0.20027677505453673, - 0.21959990727854184, - 0.23712018856133335, - 0.252816999463272, - 0.2667594776230497, - 0.27907796400741386, - 0.28993899546980767, - 0.29952423009152573, - 0.30801370608268774, - 0.315573668945568, - 0.3223489090273118, - 0.3284592067140139, - 0.3339991723499309, - 0.3390405665557705, - 0.34363613159913137, - 0.3478240493467706, - 0.3516323254159625, - 0.35508262738053975, - 0.3581933270505956, - 0.3609816791313142, - 0.36346519621086926 - ], - [ - 0.04678549494147903, - 0.04900147696103832, - 0.05715939531639249, - 0.06443962346304284, - 0.06776781996982818, - 0.06631994839817118, - 0.06052708725651908, - 0.0517704390006238, - 0.04233140755738842, - 0.03509614342135012, - 0.03188038361797192, - 0.03143376771036405, - 0.03137652941812961, - 0.031062028577528083, - 0.031650412835869744, - 0.03412810503154821, - 0.03768222768107242, - 0.04056512816103816, - 0.04135212964809516, - 0.03959286132734073, - 0.03671489293867649, - 0.03723853942155139, - 0.04627876041718197, - 0.06344294571193844, - 0.08534684370594531, - 0.10943409877053639, - 0.1341220278085604, - 0.1583910907179108, - 0.18156671007938407, - 0.2032146595185074, - 0.2230819572069093, - 0.24105597809900456, - 0.25713172177864413, - 0.27138363679009203, - 0.2839408593394527, - 0.29496567762850856, - 0.3046353804666377, - 0.3131277123617678, - 0.3206100594414085, - 0.327232295894534, - 0.333122985967105, - 0.338388419450394, - 0.34311380795541235, - 0.3473659130517456, - 0.35119641702873766, - 0.35464546137032266, - 0.3577449335023392, - 0.3605212448730796, - 0.36299748679956606, - 0.3651949600690449 - ], - [ - 0.03720443016773959, - 0.04125277737563081, - 0.05182834915889033, - 0.06066974012471239, - 0.06487590863696194, - 0.06388142693127923, - 0.05830930769311515, - 0.04973890702713545, - 0.04074294595720733, - 0.03454345114569311, - 0.03273669869370263, - 0.03322690441328607, - 0.03343198109057114, - 0.03319768826140429, - 0.03434529318623026, - 0.037955733285258565, - 0.042557756213315, - 0.04581322665858765, - 0.046060911458548355, - 0.04284199723178838, - 0.037714576037038115, - 0.035983845204301236, - 0.044477566198249184, - 0.06253152493533973, - 0.08559086161124253, - 0.11068966121674388, - 0.1361813884883639, - 0.16106947755581436, - 0.1847198164360804, - 0.20673644965569382, - 0.22689622185377045, - 0.24510646419927432, - 0.26137303629820546, - 0.2757740043523263, - 0.28843719206067325, - 0.2995210109944939, - 0.30919844143436354, - 0.3176441811282566, - 0.3250249610347286, - 0.331492917934596, - 0.3371817645929651, - 0.34220535224190524, - 0.3466581127115423, - 0.3506168202312712, - 0.35414313061916564, - 0.3572864278555826, - 0.3600866147981459, - 0.3625766033663056, - 0.3647843705903973, - 0.3667345378043333 - ] - ] - }, - { - "hoverinfo": "text", - "legendgroup": "In-sample", - "marker": { - "color": "black", - "opacity": 0.5, - "symbol": 1 - }, - "mode": "markers", - "name": "In-sample", - "text": [ - "Arm 0_0
accuracy: 0.841833 (SEM: None)
lr: 2.6e-05
momentum: 0.58", - "Arm 1_0
accuracy: 0.100333 (SEM: None)
lr: 0.00995509
momentum: 0.633423", - "Arm 2_0
accuracy: 0.318667 (SEM: None)
lr: 5.18336e-06
momentum: 0.0228515", - "Arm 3_0
accuracy: 0.4585 (SEM: None)
lr: 6.63497e-06
momentum: 0.176948", - "Arm 4_0
accuracy: 0.925667 (SEM: None)
lr: 8.15482e-05
momentum: 0.90883", - "Arm 5_0
accuracy: 0.929 (SEM: None)
lr: 0.000302077
momentum: 0.341904", - "Arm 6_0
accuracy: 0.916167 (SEM: None)
lr: 0.000136907
momentum: 0.590888", - "Arm 7_0
accuracy: 0.856 (SEM: None)
lr: 1.04947e-05
momentum: 1", - "Arm 8_0
accuracy: 0.811833 (SEM: None)
lr: 0.000250903
momentum: 0", - "Arm 9_0
accuracy: 0.701833 (SEM: None)
lr: 3.79926e-05
momentum: 1", - "Arm 10_0
accuracy: 0.582667 (SEM: None)
lr: 1e-06
momentum: 1", - "Arm 11_0
accuracy: 0.9005 (SEM: None)
lr: 0.000107853
momentum: 0.342496", - "Arm 12_0
accuracy: 0.9525 (SEM: None)
lr: 0.000263077
momentum: 0.806666", - "Arm 13_0
accuracy: 0.102667 (SEM: None)
lr: 0.000262939
momentum: 1", - "Arm 14_0
accuracy: 0.893167 (SEM: None)
lr: 3.46961e-05
momentum: 0.803927", - "Arm 15_0
accuracy: 0.1095 (SEM: None)
lr: 0.00338141
momentum: 0", - "Arm 16_0
accuracy: 0.664 (SEM: None)
lr: 5.34735e-06
momentum: 0.732307", - "Arm 17_0
accuracy: 0.908667 (SEM: None)
lr: 7.23455e-05
momentum: 0.661369", - "Arm 18_0
accuracy: 0.7855 (SEM: None)
lr: 0.000275026
momentum: 0.544159", - "Arm 19_0
accuracy: 0.749 (SEM: None)
lr: 0.000100159
momentum: 0.150271", - "Arm 20_0
accuracy: 0.8875 (SEM: None)
lr: 7.88211e-05
momentum: 0.514732", - "Arm 21_0
accuracy: 0.920667 (SEM: None)
lr: 8.84713e-05
momentum: 0.729174", - "Arm 22_0
accuracy: 0.926667 (SEM: None)
lr: 8.81885e-05
momentum: 0.842395", - "Arm 23_0
accuracy: 0.885667 (SEM: None)
lr: 2.0353e-05
momentum: 0.901269", - "Arm 24_0
accuracy: 0.937333 (SEM: None)
lr: 0.000196494
momentum: 0.74567" - ], - "type": "scatter", - "x": [ - 0.000026, - 0.00995509203921593, - 0.000005183362665905935, - 0.0000066349677287433636, - 0.00008154817047148868, - 0.000302076728574865, - 0.00013690698780687764, - 0.000010494693620662046, - 0.00025090279551266193, - 0.0000379926320035043, - 0.000001, - 0.00010785253475913031, - 0.00026307708134987824, - 0.00026293897124466493, - 0.000034696078460918794, - 0.0033814129933022992, - 0.0000053473468096297685, - 0.0000723455397734805, - 0.000275025640387813, - 0.00010015942815146543, - 0.0000788211158805623, - 0.00008847130407284787, - 0.00008818852013491222, - 0.00002035299338887936, - 0.00019649367633314696 - ], - "xaxis": "x", - "y": [ - 0.58, - 0.6334228515625, - 0.022851496934890747, - 0.1769482558593154, - 0.9088304992765188, - 0.34190391190350056, - 0.5908877683296225, - 1, - 0, - 1, - 1, - 0.3424964735537235, - 0.8066655528249581, - 1, - 0.8039271809668664, - 0, - 0.7323071003540906, - 0.661368836571542, - 0.5441589247445531, - 0.1502713707752469, - 0.5147323108238715, - 0.7291741459223482, - 0.8423945487504687, - 0.9012690187844943, - 0.7456700316404694 - ], - "yaxis": "y" - }, - { - "hoverinfo": "text", - "legendgroup": "In-sample", - "marker": { - "color": "black", - "opacity": 0.5, - "symbol": 1 - }, - "mode": "markers", - "name": "In-sample", - "showlegend": false, - "text": [ - "Arm 0_0
accuracy: 0.841833 (SEM: None)
lr: 2.6e-05
momentum: 0.58", - "Arm 1_0
accuracy: 0.100333 (SEM: None)
lr: 0.00995509
momentum: 0.633423", - "Arm 2_0
accuracy: 0.318667 (SEM: None)
lr: 5.18336e-06
momentum: 0.0228515", - "Arm 3_0
accuracy: 0.4585 (SEM: None)
lr: 6.63497e-06
momentum: 0.176948", - "Arm 4_0
accuracy: 0.925667 (SEM: None)
lr: 8.15482e-05
momentum: 0.90883", - "Arm 5_0
accuracy: 0.929 (SEM: None)
lr: 0.000302077
momentum: 0.341904", - "Arm 6_0
accuracy: 0.916167 (SEM: None)
lr: 0.000136907
momentum: 0.590888", - "Arm 7_0
accuracy: 0.856 (SEM: None)
lr: 1.04947e-05
momentum: 1", - "Arm 8_0
accuracy: 0.811833 (SEM: None)
lr: 0.000250903
momentum: 0", - "Arm 9_0
accuracy: 0.701833 (SEM: None)
lr: 3.79926e-05
momentum: 1", - "Arm 10_0
accuracy: 0.582667 (SEM: None)
lr: 1e-06
momentum: 1", - "Arm 11_0
accuracy: 0.9005 (SEM: None)
lr: 0.000107853
momentum: 0.342496", - "Arm 12_0
accuracy: 0.9525 (SEM: None)
lr: 0.000263077
momentum: 0.806666", - "Arm 13_0
accuracy: 0.102667 (SEM: None)
lr: 0.000262939
momentum: 1", - "Arm 14_0
accuracy: 0.893167 (SEM: None)
lr: 3.46961e-05
momentum: 0.803927", - "Arm 15_0
accuracy: 0.1095 (SEM: None)
lr: 0.00338141
momentum: 0", - "Arm 16_0
accuracy: 0.664 (SEM: None)
lr: 5.34735e-06
momentum: 0.732307", - "Arm 17_0
accuracy: 0.908667 (SEM: None)
lr: 7.23455e-05
momentum: 0.661369", - "Arm 18_0
accuracy: 0.7855 (SEM: None)
lr: 0.000275026
momentum: 0.544159", - "Arm 19_0
accuracy: 0.749 (SEM: None)
lr: 0.000100159
momentum: 0.150271", - "Arm 20_0
accuracy: 0.8875 (SEM: None)
lr: 7.88211e-05
momentum: 0.514732", - "Arm 21_0
accuracy: 0.920667 (SEM: None)
lr: 8.84713e-05
momentum: 0.729174", - "Arm 22_0
accuracy: 0.926667 (SEM: None)
lr: 8.81885e-05
momentum: 0.842395", - "Arm 23_0
accuracy: 0.885667 (SEM: None)
lr: 2.0353e-05
momentum: 0.901269", - "Arm 24_0
accuracy: 0.937333 (SEM: None)
lr: 0.000196494
momentum: 0.74567" - ], - "type": "scatter", - "x": [ - 0.000026, - 0.00995509203921593, - 0.000005183362665905935, - 0.0000066349677287433636, - 0.00008154817047148868, - 0.000302076728574865, - 0.00013690698780687764, - 0.000010494693620662046, - 0.00025090279551266193, - 0.0000379926320035043, - 0.000001, - 0.00010785253475913031, - 0.00026307708134987824, - 0.00026293897124466493, - 0.000034696078460918794, - 0.0033814129933022992, - 0.0000053473468096297685, - 0.0000723455397734805, - 0.000275025640387813, - 0.00010015942815146543, - 0.0000788211158805623, - 0.00008847130407284787, - 0.00008818852013491222, - 0.00002035299338887936, - 0.00019649367633314696 - ], - "xaxis": "x2", - "y": [ - 0.58, - 0.6334228515625, - 0.022851496934890747, - 0.1769482558593154, - 0.9088304992765188, - 0.34190391190350056, - 0.5908877683296225, - 1, - 0, - 1, - 1, - 0.3424964735537235, - 0.8066655528249581, - 1, - 0.8039271809668664, - 0, - 0.7323071003540906, - 0.661368836571542, - 0.5441589247445531, - 0.1502713707752469, - 0.5147323108238715, - 0.7291741459223482, - 0.8423945487504687, - 0.9012690187844943, - 0.7456700316404694 - ], - "yaxis": "y2" - } - ], - "layout": { - "annotations": [ - { - "font": { - "size": 14 - }, - "showarrow": false, - "text": "Mean", - "x": 0.25, - "xanchor": "center", - "xref": "paper", - "y": 1, - "yanchor": "bottom", - "yref": "paper" - }, - { - "font": { - "size": 14 - }, - "showarrow": false, - "text": "Standard Error", - "x": 0.8, - "xanchor": "center", - "xref": "paper", - "y": 1, - "yanchor": "bottom", - "yref": "paper" - } - ], - "autosize": false, - "height": 450, - "hovermode": "closest", - "legend": { - "orientation": "h", - "x": 0, - "y": -0.25 - }, - "margin": { - "b": 100, - "l": 35, - "pad": 0, - "r": 35, - "t": 35 - }, - "template": { - "data": { - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ] - }, - "layout": { - "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1 - }, - "autotypenumbers": "strict", - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ] - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "#E5ECF6", - "showlakes": true, - "showland": true, - "subunitcolor": "white" - }, - "hoverlabel": { - "align": "left" - }, - "hovermode": "closest", - "mapbox": { - "style": "light" - }, - "paper_bgcolor": "white", - "plot_bgcolor": "#E5ECF6", - "polar": { - "angularaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "radialaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "scene": { - "xaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "yaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "zaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - } - }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" - } - }, - "ternary": { - "aaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "baxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "caxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - }, - "yaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - } - } - }, - "title": { - "text": "accuracy" - }, - "width": 950, - "xaxis": { - "anchor": "y", - "autorange": false, - "domain": [ - 0.05, - 0.45 - ], - "exponentformat": "e", - "range": [ - -6, - -0.3979400086720376 - ], - "tickfont": { - "size": 11 - }, - "tickmode": "auto", - "title": { - "text": "lr" - }, - "type": "log" - }, - "xaxis2": { - "anchor": "y2", - "autorange": false, - "domain": [ - 0.6, - 1 - ], - "exponentformat": "e", - "range": [ - -6, - -0.3979400086720376 - ], - "tickfont": { - "size": 11 - }, - "tickmode": "auto", - "title": { - "text": "lr" - }, - "type": "log" - }, - "yaxis": { - "anchor": "x", - "autorange": false, - "domain": [ - 0, - 1 - ], - "exponentformat": "e", - "range": [ - 0, - 1 - ], - "tickfont": { - "size": 11 - }, - "tickmode": "auto", - "title": { - "text": "momentum" - }, - "type": "linear" - }, - "yaxis2": { - "anchor": "x2", - "autorange": false, - "domain": [ - 0, - 1 - ], - "exponentformat": "e", - "range": [ - 0, - 1 - ], - "tickfont": { - "size": 11 - }, - "tickmode": "auto", - "type": "linear" - } - } - }, - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "render(ax_client.get_contour_plot(param_x=\"lr\", param_y=\"momentum\", metric_name=\"accuracy\"))" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "5c91d83a-9a90-4ea0-8df9-9d242d998cb3", - "showInput": false - }, - "source": [ - "Here we plot the optimization trace, showing the progression of finding the point with the optimal objective:\n", - "\n" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415953760, - "executionStopTime": 1690415954260, - "originalKey": "3a767bdf-7ef3-48e7-b853-6fae5e9e02ff", - "requestMsgId": "043de459-6a28-4796-b237-808385c9e54c", - "showInput": true - }, - "outputs": [ - { - "data": { - "application/vnd.plotly.v1+json": { - "config": { - "linkText": "Export to plot.ly", - "plotlyServerURL": "https://plot.ly", - "showLink": false - }, - "data": [ - { - "hoverinfo": "none", - "legendgroup": "", - "line": { - "width": 0 - }, - "mode": "lines", - "showlegend": false, - "type": "scatter", - "x": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26 - ], - "y": [ - 0.8418333333333333, - 0.8418333333333333, - 0.8418333333333333, - 0.8418333333333333, - 0.9256666666666666, - 0.929, - 0.929, - 0.929, - 0.929, - 0.929, - 0.929, - 0.929, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525 - ] - }, - { - "fill": "tonexty", - "fillcolor": "rgba(128,177,211,0.3)", - "legendgroup": "objective value", - "line": { - "color": "rgba(128,177,211,1)" - }, - "mode": "lines", - "name": "objective value", - "text": [ - "
Parameterization:
lr: 2.6e-05
momentum: 0.58", - "
Parameterization:
lr: 0.00995509203921593
momentum: 0.6334228515625", - "
Parameterization:
lr: 5.183362665905935e-06
momentum: 0.022851496934890747", - "
Parameterization:
lr: 6.6349677287433636e-06
momentum: 0.1769482558593154", - "
Parameterization:
lr: 8.154817047148868e-05
momentum: 0.9088304992765188", - "
Parameterization:
lr: 0.000302076728574865
momentum: 0.34190391190350056", - "
Parameterization:
lr: 0.00013690698780687764
momentum: 0.5908877683296225", - "
Parameterization:
lr: 1.0494693620662046e-05
momentum: 1.0", - "
Parameterization:
lr: 0.00025090279551266193
momentum: 0.0", - "
Parameterization:
lr: 3.79926320035043e-05
momentum: 1.0", - "
Parameterization:
lr: 1e-06
momentum: 1.0", - "
Parameterization:
lr: 0.00010785253475913031
momentum: 0.3424964735537235", - "
Parameterization:
lr: 0.00026307708134987824
momentum: 0.8066655528249581", - "
Parameterization:
lr: 0.00026293897124466493
momentum: 1.0", - "
Parameterization:
lr: 3.4696078460918794e-05
momentum: 0.8039271809668664", - "
Parameterization:
lr: 0.0033814129933022992
momentum: 0.0", - "
Parameterization:
lr: 5.3473468096297685e-06
momentum: 0.7323071003540906", - "
Parameterization:
lr: 7.23455397734805e-05
momentum: 0.661368836571542", - "
Parameterization:
lr: 0.000275025640387813
momentum: 0.5441589247445531", - "
Parameterization:
lr: 0.00010015942815146543
momentum: 0.1502713707752469", - "
Parameterization:
lr: 7.88211158805623e-05
momentum: 0.5147323108238715", - "
Parameterization:
lr: 8.847130407284787e-05
momentum: 0.7291741459223482", - "
Parameterization:
lr: 8.818852013491222e-05
momentum: 0.8423945487504687", - "
Parameterization:
lr: 2.035299338887936e-05
momentum: 0.9012690187844943", - "
Parameterization:
lr: 0.00019649367633314696
momentum: 0.7456700316404694", - "
Parameterization:
lr: 0.00045940982298918616
momentum: 0.24443480023623135" - ], - "type": "scatter", - "x": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26 - ], - "y": [ - 0.8418333333333333, - 0.8418333333333333, - 0.8418333333333333, - 0.8418333333333333, - 0.9256666666666666, - 0.929, - 0.929, - 0.929, - 0.929, - 0.929, - 0.929, - 0.929, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525 - ] - }, - { - "fill": "tonexty", - "fillcolor": "rgba(128,177,211,0.3)", - "hoverinfo": "none", - "legendgroup": "", - "line": { - "width": 0 - }, - "mode": "lines", - "showlegend": false, - "type": "scatter", - "x": [ - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 16, - 17, - 18, - 19, - 20, - 21, - 22, - 23, - 24, - 25, - 26 - ], - "y": [ - 0.8418333333333333, - 0.8418333333333333, - 0.8418333333333333, - 0.8418333333333333, - 0.9256666666666666, - 0.929, - 0.929, - 0.929, - 0.929, - 0.929, - 0.929, - 0.929, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525, - 0.9525 - ] - }, - { - "line": { - "color": "rgba(141,211,199,1)", - "dash": "dash" - }, - "mode": "lines", - "name": "model change", - "type": "scatter", - "x": [ - 5, - 5 - ], - "y": [ - 0.8418333333333333, - 0.9525 - ] - } - ], - "layout": { - "showlegend": true, - "template": { - "data": { - "bar": [ - { - "error_x": { - "color": "#2a3f5f" - }, - "error_y": { - "color": "#2a3f5f" - }, - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "bar" - } - ], - "barpolar": [ - { - "marker": { - "line": { - "color": "#E5ECF6", - "width": 0.5 - }, - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "barpolar" - } - ], - "carpet": [ - { - "aaxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "baxis": { - "endlinecolor": "#2a3f5f", - "gridcolor": "white", - "linecolor": "white", - "minorgridcolor": "white", - "startlinecolor": "#2a3f5f" - }, - "type": "carpet" - } - ], - "choropleth": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "choropleth" - } - ], - "contour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "contour" - } - ], - "contourcarpet": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "contourcarpet" - } - ], - "heatmap": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmap" - } - ], - "heatmapgl": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "heatmapgl" - } - ], - "histogram": [ - { - "marker": { - "pattern": { - "fillmode": "overlay", - "size": 10, - "solidity": 0.2 - } - }, - "type": "histogram" - } - ], - "histogram2d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2d" - } - ], - "histogram2dcontour": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "histogram2dcontour" - } - ], - "mesh3d": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "type": "mesh3d" - } - ], - "parcoords": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "parcoords" - } - ], - "pie": [ - { - "automargin": true, - "type": "pie" - } - ], - "scatter": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter" - } - ], - "scatter3d": [ - { - "line": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatter3d" - } - ], - "scattercarpet": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattercarpet" - } - ], - "scattergeo": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergeo" - } - ], - "scattergl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattergl" - } - ], - "scattermapbox": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scattermapbox" - } - ], - "scatterpolar": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolar" - } - ], - "scatterpolargl": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterpolargl" - } - ], - "scatterternary": [ - { - "marker": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "type": "scatterternary" - } - ], - "surface": [ - { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - }, - "colorscale": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "type": "surface" - } - ], - "table": [ - { - "cells": { - "fill": { - "color": "#EBF0F8" - }, - "line": { - "color": "white" - } - }, - "header": { - "fill": { - "color": "#C8D4E3" - }, - "line": { - "color": "white" - } - }, - "type": "table" - } - ] - }, - "layout": { - "annotationdefaults": { - "arrowcolor": "#2a3f5f", - "arrowhead": 0, - "arrowwidth": 1 - }, - "autotypenumbers": "strict", - "coloraxis": { - "colorbar": { - "outlinewidth": 0, - "ticks": "" - } - }, - "colorscale": { - "diverging": [ - [ - 0, - "#8e0152" - ], - [ - 0.1, - "#c51b7d" - ], - [ - 0.2, - "#de77ae" - ], - [ - 0.3, - "#f1b6da" - ], - [ - 0.4, - "#fde0ef" - ], - [ - 0.5, - "#f7f7f7" - ], - [ - 0.6, - "#e6f5d0" - ], - [ - 0.7, - "#b8e186" - ], - [ - 0.8, - "#7fbc41" - ], - [ - 0.9, - "#4d9221" - ], - [ - 1, - "#276419" - ] - ], - "sequential": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ], - "sequentialminus": [ - [ - 0, - "#0d0887" - ], - [ - 0.1111111111111111, - "#46039f" - ], - [ - 0.2222222222222222, - "#7201a8" - ], - [ - 0.3333333333333333, - "#9c179e" - ], - [ - 0.4444444444444444, - "#bd3786" - ], - [ - 0.5555555555555556, - "#d8576b" - ], - [ - 0.6666666666666666, - "#ed7953" - ], - [ - 0.7777777777777778, - "#fb9f3a" - ], - [ - 0.8888888888888888, - "#fdca26" - ], - [ - 1, - "#f0f921" - ] - ] - }, - "colorway": [ - "#636efa", - "#EF553B", - "#00cc96", - "#ab63fa", - "#FFA15A", - "#19d3f3", - "#FF6692", - "#B6E880", - "#FF97FF", - "#FECB52" - ], - "font": { - "color": "#2a3f5f" - }, - "geo": { - "bgcolor": "white", - "lakecolor": "white", - "landcolor": "#E5ECF6", - "showlakes": true, - "showland": true, - "subunitcolor": "white" - }, - "hoverlabel": { - "align": "left" - }, - "hovermode": "closest", - "mapbox": { - "style": "light" - }, - "paper_bgcolor": "white", - "plot_bgcolor": "#E5ECF6", - "polar": { - "angularaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "radialaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "scene": { - "xaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "yaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - }, - "zaxis": { - "backgroundcolor": "#E5ECF6", - "gridcolor": "white", - "gridwidth": 2, - "linecolor": "white", - "showbackground": true, - "ticks": "", - "zerolinecolor": "white" - } - }, - "shapedefaults": { - "line": { - "color": "#2a3f5f" - } - }, - "ternary": { - "aaxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "baxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - }, - "bgcolor": "#E5ECF6", - "caxis": { - "gridcolor": "white", - "linecolor": "white", - "ticks": "" - } - }, - "title": { - "x": 0.05 - }, - "xaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - }, - "yaxis": { - "automargin": true, - "gridcolor": "white", - "linecolor": "white", - "ticks": "", - "title": { - "standoff": 15 - }, - "zerolinecolor": "white", - "zerolinewidth": 2 - } - } - }, - "title": { - "text": "Model performance vs. # of iterations" - }, - "xaxis": { - "autorange": true, - "range": [ - 1, - 26 - ], - "title": { - "text": "Iteration" - }, - "type": "linear" - }, - "yaxis": { - "autorange": true, - "range": [ - 0.8356851851851852, - 0.9586481481481481 - ], - "title": { - "text": "Accuracy" - }, - "type": "linear" - } - } - }, - "text/html": [ - "
" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "render(\n", - " ax_client.get_optimization_trace()\n", - ") " - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "collapsed": false, - "customInput": null, - "executionStartTime": 1689617061294, - "executionStopTime": 1689617061325, - "originalKey": "09aaec9d-c178-42e2-b549-663cd17f8c3d", - "requestMsgId": "09aaec9d-c178-42e2-b549-663cd17f8c3d", - "showInput": false - }, - "source": [ - "## 8. Train CNN with best hyperparameters and evaluate on test set\n", - "Note that the resulting accuracy on the test set generally won't be the same as the maximum accuracy achieved on the evaluation set throughout optimization. " - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415954397, - "executionStopTime": 1690415954452, - "originalKey": "27f92d16-93c4-43bb-a37f-e7a1aeecd856", - "requestMsgId": "07eba5ce-bebe-4588-8dbb-07553efeb2b0", - "showInput": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "{'lr': 0.00026307708134987824, 'momentum': 0.8066655528249581}" - ] - }, - "execution_count": 16, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "df = ax_client.get_trials_data_frame()\n", - "best_arm_idx = df.trial_index[df[\"accuracy\"] == df[\"accuracy\"].max()].values[0]\n", - "best_arm = ax_client.get_trial_parameters(best_arm_idx)\n", - "best_arm" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415954677, - "executionStopTime": 1690415954681, - "originalKey": "d0c7c645-c230-4654-a3b5-a01c61a09393", - "requestMsgId": "0a962cef-65a1-4f95-9410-37a9a8e5c5ac", - "showInput": true - }, - "outputs": [], - "source": [ - "combined_train_valid_set = torch.utils.data.ConcatDataset(\n", - " [\n", - " train_loader.dataset.dataset,\n", - " valid_loader.dataset.dataset,\n", - " ]\n", - ")\n", - "combined_train_valid_loader = torch.utils.data.DataLoader(\n", - " combined_train_valid_set,\n", - " batch_size=BATCH_SIZE,\n", - " shuffle=True,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690415954791, - "executionStopTime": 1690416061340, - "originalKey": "5695c78b-4c6e-4d35-ab08-6c60781bd8f1", - "requestMsgId": "e22fa0c7-88cc-4d8a-bb7d-4f96fbae9a42", - "showInput": true - }, - "outputs": [], - "source": [ - "net = train(\n", - " net=CNN(),\n", - " train_loader=combined_train_valid_loader,\n", - " parameters=best_arm,\n", - " dtype=dtype,\n", - " device=device,\n", - ")\n", - "test_accuracy = evaluate(\n", - " net=net,\n", - " data_loader=test_loader,\n", - " dtype=dtype,\n", - " device=device,\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690416061460, - "executionStopTime": 1690416061467, - "originalKey": "7522e229-9641-4383-a892-12c3f0a8011c", - "requestMsgId": "5552d77d-9c9d-4712-9256-2cb3da836f2c", - "showInput": true - }, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "Classification Accuracy (test set): 98.22%\n" - ] - } - ], - "source": [ - "print(f\"Classification Accuracy (test set): {round(test_accuracy*100, 2)}%\")" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "c8232211-4837-4677-b86c-bce730635fff", - "showInput": false - }, - "source": [ - "## 9. Save / reload optimization to JSON / SQL\n", - "We can serialize the state of optimization to JSON and save it to a `.json` file or save it to the SQL backend. For the former:" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690416061571, - "executionStopTime": 1690416061657, - "originalKey": "6afddb45-c980-4b14-b5e9-927747ea98ea", - "requestMsgId": "bab02be8-706c-4422-b97b-c222b5084bba", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:01] ax.service.ax_client: Saved JSON-serialized state of optimization to `ax_client_snapshot.json`.\n" - ] - } - ], - "source": [ - "ax_client.save_to_json_file() # For custom filepath, pass `filepath` argument." - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690416061758, - "executionStopTime": 1690416062132, - "originalKey": "31e6f7b4-cf6b-4967-95ff-f76d03657fb2", - "requestMsgId": "f2d10848-f995-420d-88e7-9036894d7b1b", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:02] ax.service.ax_client: Starting optimization with verbose logging. To disable logging, set the `verbose_logging` argument to `False`. Note that float values in the logs are rounded to 6 decimal points.\n" - ] - } - ], - "source": [ - "restored_ax_client = (\n", - " AxClient.load_from_json_file()\n", - ") # For custom filepath, pass `filepath` argument." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "122510f5-5b9e-4b1c-9f5e-8c8ea2e08848", - "showInput": false - }, - "source": [ - "To store state of optimization to an SQL backend, first follow [setup instructions](https://ax.dev/docs/storage.html#sql) on Ax website." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "bd80e639-aa0f-4dc1-8542-0caf0d674fda", - "showInput": false - }, - "source": [ - "Having set up the SQL backend, pass `DBSettings` to `AxClient` on instantiation (note that `SQLAlchemy` dependency will have to be installed – for installation, refer to [optional dependencies](https://ax.dev/docs/installation.html#optional-dependencies) on Ax website):" - ] - }, - { - "cell_type": "code", - "execution_count": 22, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690416062222, - "executionStopTime": 1690416062314, - "originalKey": "80eb6a2e-6564-405e-b5d4-d448e32dbf60", - "requestMsgId": "65f2307f-b800-4415-b9e7-11734a2a6889", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:02] ax.service.ax_client: Starting optimization with verbose logging. To disable logging, set the `verbose_logging` argument to `False`. Note that float values in the logs are rounded to 6 decimal points.\n" - ] - } - ], - "source": [ - "from ax.storage.sqa_store.structs import DBSettings\n", - "\n", - "# URL is of the form \"dialect+driver://username:password@host:port/database\".\n", - "db_settings = DBSettings(url=\"sqlite:///foo.db\")\n", - "# Instead of URL, can provide a `creator function`; can specify custom encoders/decoders if necessary.\n", - "new_ax = AxClient(db_settings=db_settings)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "adafd3aa-b84e-4e86-9694-a29f94c6d5f3", - "showInput": false - }, - "source": [ - "When valid `DBSettings` are passed into `AxClient`, a unique experiment name is a required argument (`name`) to `ax_client.create_experiment`. The **state of the optimization is auto-saved** any time it changes (i.e. a new trial is added or completed, etc). \n", - "\n", - "To reload an optimization state later, instantiate `AxClient` with the same `DBSettings` and use `ax_client.load_experiment_from_database(experiment_name=\"my_experiment\")`." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "2f4a875b-1e18-4352-955d-576d6b01c5ed", - "showInput": false - }, - "source": [ - "# Special Cases" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "0d49e448-4768-401d-ac1d-810aee633c9a", - "showInput": false - }, - "source": [ - "**Evaluation failure**: should any optimization iterations fail during evaluation, `log_trial_failure` will ensure that the same trial is not proposed again." - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690416062420, - "executionStopTime": 1690416064316, - "originalKey": "faa83f1d-31da-481a-96e4-ccbc12f30b91", - "requestMsgId": "80a40c3a-76ed-4e1d-aa77-3652fadbe69f", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.service.ax_client: Generated new trial 26 with parameters {'lr': 1e-06, 'momentum': 0.454893}.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.service.ax_client: Registered failure of trial 26.\n" - ] - } - ], - "source": [ - "_, trial_index = ax_client.get_next_trial()\n", - "ax_client.log_trial_failure(trial_index=trial_index)" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "c826a96e-9431-49bd-87d7-62b517537a15", - "showInput": false - }, - "source": [ - "**Need to run many trials in parallel**: for optimal results and optimization efficiency, we strongly recommend sequential optimization (generating a few trials, then waiting for them to be completed with evaluation data). However, if your use case needs to dispatch many trials in parallel before they are updated with data and you are running into the *\"All trials for current model have been generated, but not enough data has been observed to fit next model\"* error, instantiate `AxClient` as `AxClient(enforce_sequential_optimization=False)`." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "683378e0-893b-49a1-b090-084dc394da1a", - "showInput": false - }, - "source": [ - "# Service API Exceptions Meaning and Handling\n", - "[**`DataRequiredError`**](https://ax.dev/api/exceptions.html#ax.exceptions.core.DataRequiredError): Ax generation strategy needs to be updated with more data to proceed to the next optimization model. When the optimization moves from initialization stage to the Bayesian optimization stage, the underlying BayesOpt model needs sufficient data to train. For optimal results and optimization efficiency (finding the optimal point in the least number of trials), we recommend sequential optimization (generating a few trials, then waiting for them to be completed with evaluation data). Therefore, the correct way to handle this exception is to wait until more trial evaluations complete and log their data via `ax_client.complete_trial(...)`. \n", - "\n", - "However, if there is strong need to generate more trials before more data is available, instantiate `AxClient` as `AxClient(enforce_sequential_optimization=False)`. With this setting, as many trials will be generated from the initialization stage as requested, and the optimization will move to the BayesOpt stage whenever enough trials are completed." - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "metadata": { - "customInput": null, - "originalKey": "4602d41d-43aa-46d2-9ca6-392c414d0b5f", - "showInput": false - }, - "source": [ - "[**`MaxParallelismReachedException`**](https://ax.dev/api/modelbridge.html#ax.modelbridge.generation_strategy.MaxParallelismReachedException): generation strategy restricts the number of trials that can be run simultaneously (to encourage sequential optimization), and the parallelism limit has been reached. The correct way to handle this exception is the same as `DataRequiredError` – to wait until more trial evluations complete and log their data via `ax_client.complete_trial(...)`.\n", - " \n", - "In some cases higher parallelism is important, so `enforce_sequential_optimization=False` kwarg to AxClient allows the user to suppress limiting of parallelism. It's also possible to override the default parallelism setting for all stages of the optimization by passing `choose_generation_strategy_kwargs` to `ax_client.create_experiment`:" - ] - }, - { - "cell_type": "code", - "execution_count": 25, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690416064534, - "executionStopTime": 1690416064564, - "originalKey": "d62e6cfd-5127-450e-80b7-d0edcaf97d6c", - "requestMsgId": "cb9a17f9-5734-41c6-9018-c0635c61d8b3", - "showInput": true - }, - "outputs": [ - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.service.ax_client: Starting optimization with verbose logging. To disable logging, set the `verbose_logging` argument to `False`. Note that float values in the logs are rounded to 6 decimal points.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.service.utils.instantiation: Inferred value type of ParameterType.FLOAT for parameter x. If that is not the expected value type, you can explicity specify 'value_type' ('int', 'float', 'bool' or 'str') in parameter dict.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.service.utils.instantiation: Inferred value type of ParameterType.FLOAT for parameter y. If that is not the expected value type, you can explicity specify 'value_type' ('int', 'float', 'bool' or 'str') in parameter dict.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.service.utils.instantiation: Created search space: SearchSpace(parameters=[RangeParameter(name='x', parameter_type=FLOAT, range=[-5.0, 10.0]), RangeParameter(name='y', parameter_type=FLOAT, range=[0.0, 15.0])], parameter_constraints=[]).\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.modelbridge.dispatch_utils: Using Models.GPEI since there are more ordered parameters than there are categories for the unordered categorical parameters.\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.modelbridge.dispatch_utils: Calculating the number of remaining initialization trials based on num_initialization_trials=None max_initialization_trials=None num_tunable_parameters=2 num_trials=None use_batch_trials=False\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.modelbridge.dispatch_utils: calculated num_initialization_trials=5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.modelbridge.dispatch_utils: num_completed_initialization_trials=0 num_remaining_initialization_trials=5\n" - ] - }, - { - "name": "stderr", - "output_type": "stream", - "text": [ - "[INFO 07-26 17:01:04] ax.modelbridge.dispatch_utils: Using Bayesian Optimization generation strategy: GenerationStrategy(name='Sobol+GPEI', steps=[Sobol for 5 trials, GPEI for subsequent trials]). Iterations after 5 will take longer to generate due to model-fitting.\n" - ] - } - ], - "source": [ - "ax_client = AxClient()\n", - "ax_client.create_experiment(\n", - " parameters=[\n", - " {\"name\": \"x\", \"type\": \"range\", \"bounds\": [-5.0, 10.0]},\n", - " {\"name\": \"y\", \"type\": \"range\", \"bounds\": [0.0, 15.0]},\n", - " ],\n", - " # Sets max parallelism to 10 for all steps of the generation strategy.\n", - " choose_generation_strategy_kwargs={\"max_parallelism_override\": 10},\n", - ")" - ] - }, - { - "cell_type": "code", - "execution_count": 26, - "metadata": { - "collapsed": false, - "customInput": null, - "customOutput": null, - "executionStartTime": 1690416064679, - "executionStopTime": 1690416064702, - "originalKey": "bc15d2cf-8ddc-4d66-83b6-7469cd15aa4d", - "requestMsgId": "996c4bd3-b296-4cf9-8f95-cbf488639c2f", - "showInput": true - }, - "outputs": [ - { - "data": { - "text/plain": [ - "[(5, 10), (-1, 10)]" - ] - }, - "execution_count": 26, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "ax_client.get_max_parallelism() # Max parallelism is now 10 for all stages of the optimization." - ] - } - ], - "metadata": { - "fileHeader": "", - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3" - } + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "collapsed": true, + "customInput": null, + "originalKey": "ac61b043-8ebf-43b9-9fa5-ed9a42a184ce", + "showInput": false + }, + "source": [ + "# Tune a CNN on MNIST\n", + "\n", + "This tutorial walks through using Ax to tune two hyperparameters (learning rate and momentum) for a PyTorch CNN on the MNIST dataset trained using SGD with momentum." + ] }, - "nbformat": 4, - "nbformat_minor": 2 + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415246079, + "executionStopTime": 1690415266324, + "originalKey": "c2b37f0f-3644-4367-912f-f775082f6676", + "requestMsgId": "0b481630-f0f4-436a-a205-a25aa163a364", + "showInput": true + }, + "outputs": [], + "source": [ + "import torch\n", + "\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F\n", + "\n", + "from ax.service.ax_client import AxClient, ObjectiveProperties\n", + "from ax.service.utils.report_utils import exp_to_df\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "from ax.utils.tutorials.cnn_utils import evaluate, load_mnist, train\n", + "from torch._tensor import Tensor\n", + "from torch.utils.data import DataLoader\n", + "\n", + "init_notebook_plotting()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415266521, + "executionStopTime": 1690415266529, + "originalKey": "4d0a27c4-a6ce-4b7d-97eb-1c229aabb375", + "requestMsgId": "fd975d25-a185-4b09-a50f-7b2bcd89f93f", + "showInput": true + }, + "outputs": [], + "source": [ + "torch.manual_seed(42)\n", + "dtype = torch.float\n", + "device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "10384e51-444c-4265-b56d-ad078d05d2a1", + "showInput": false + }, + "source": [ + "## 1. Load MNIST data\n", + "First, we need to load the MNIST data and partition it into training, validation, and test sets.\n", + "\n", + "Note: this will download the dataset if necessary." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415266733, + "executionStopTime": 1690415266902, + "originalKey": "6f0949e2-1064-44b8-99c0-f6ce23df7c63", + "requestMsgId": "8ce7dd21-9afb-4379-ad11-4112b4d27f8a", + "showInput": true + }, + "outputs": [], + "source": [ + "BATCH_SIZE = 512\n", + "train_loader, valid_loader, test_loader = load_mnist(batch_size=BATCH_SIZE)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "be39e4d6-f4b1-418b-b8e1-8461db582e0c", + "showInput": false + }, + "source": [ + "## 2. Initialize Client\n", + "Create a client object to interface with Ax APIs. By default this runs locally without storage.\n", + "\n", + " " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415267018, + "executionStopTime": 1690415267023, + "originalKey": "14f154fc-8109-4115-b94a-016daf85bc6f", + "requestMsgId": "7e1cd1ff-dc6e-423c-89b1-05762a7bcce2", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client = AxClient()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "f30a11d8-e7e8-4815-93a4-99b4aa531a17", + "showInput": false + }, + "source": [ + "## 3. Set up experiment\n", + "An experiment consists of a **search space** (parameters and parameter constraints) and **optimization configuration** (objective name, minimization setting, and outcome constraints)." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "executionStartTime": 1690415267155, + "executionStopTime": 1690415267171, + "originalKey": "c6b4fe1b-692a-499e-88c9-50dbefdcfc15", + "requestMsgId": "86409a5b-e66a-424e-8ac7-c0623a9c9ccf", + "showInput": true + }, + "outputs": [], + "source": [ + "# Create an experiment with required arguments: name, parameters, and objective_name.\n", + "ax_client.create_experiment(\n", + " name=\"tune_cnn_on_mnist\", # The name of the experiment.\n", + " parameters=[\n", + " {\n", + " \"name\": \"lr\", # The name of the parameter.\n", + " \"type\": \"range\", # The type of the parameter (\"range\", \"choice\" or \"fixed\").\n", + " \"bounds\": [1e-6, 0.4], # The bounds for range parameters. \n", + " # \"values\" The possible values for choice parameters .\n", + " # \"value\" The fixed value for fixed parameters.\n", + " \"value_type\": \"float\", # Optional, the value type (\"int\", \"float\", \"bool\" or \"str\"). Defaults to inference from type of \"bounds\".\n", + " \"log_scale\": True, # Optional, whether to use a log scale for range parameters. Defaults to False.\n", + " # \"is_ordered\" Optional, a flag for choice parameters.\n", + " },\n", + " {\n", + " \"name\": \"momentum\", \n", + " \"type\": \"range\", \n", + " \"bounds\": [0.0, 1.0], \n", + " },\n", + " ],\n", + " objectives={\"accuracy\": ObjectiveProperties(minimize=False)}, # The objective name and minimization setting.\n", + " # parameter_constraints: Optional, a list of strings of form \"p1 >= p2\" or \"p1 + p2 <= some_bound\".\n", + " # outcome_constraints: Optional, a list of strings of form \"constrained_metric <= some_bound\".\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "af441a83-50fd-4385-a380-d8ebc570c0e5", + "showInput": false + }, + "source": [ + "## 4. Define how to evaluate trials\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "c7630dfd-548b-408a-badf-b6abf79275e2", + "showInput": false + }, + "source": [ + "First we define a simple CNN class to classify the MNIST images" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415267282, + "executionStopTime": 1690415267286, + "originalKey": "e41fea0a-ae71-4e6f-8c0a-6eb6ae143fb0", + "requestMsgId": "60f14ec9-eb1b-4e88-95c5-15c91f999c90", + "showInput": true + }, + "outputs": [], + "source": [ + "class CNN(nn.Module):\n", + " \n", + " def __init__(self) -> None:\n", + " super().__init__()\n", + " self.conv1 = nn.Conv2d(1, 20, kernel_size=5, stride=1)\n", + " self.fc1 = nn.Linear(8 * 8 * 20, 64)\n", + " self.fc2 = nn.Linear(64, 10)\n", + "\n", + " def forward(self, x: Tensor) -> Tensor:\n", + " x = F.relu(self.conv1(x))\n", + " x = F.max_pool2d(x, 3, 3)\n", + " x = x.view(-1, 8 * 8 * 20)\n", + " x = F.relu(self.fc1(x))\n", + " x = self.fc2(x)\n", + " return F.log_softmax(x, dim=-1)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "8ef6bcb9-c492-4874-b8c7-a07f7e6291ad", + "showInput": false + }, + "source": [ + "In this tutorial, we want to optimize classification accuracy on the validation set as a function of the learning rate and momentum. The `train_evaluate` function takes in a parameterization (set of parameter values), computes the classification accuracy, and returns that metric. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415267388, + "executionStopTime": 1690415267395, + "originalKey": "a7e4bcc4-7494-429b-bb93-7ad84d0985af", + "requestMsgId": "5d486dbf-60cb-453d-8f24-8605f974b0a7", + "showInput": true + }, + "outputs": [], + "source": [ + "def train_evaluate(parameterization):\n", + " \"\"\"\n", + " Train the model and then compute an evaluation metric.\n", + "\n", + " In this tutorial, the CNN utils package is doing a lot of work\n", + " under the hood:\n", + " - `train` initializes the network, defines the loss function\n", + " and optimizer, performs the training loop, and returns the\n", + " trained model.\n", + " - `evaluate` computes the accuracy of the model on the\n", + " evaluation dataset and returns the metric.\n", + "\n", + " For your use case, you can define training and evaluation functions\n", + " of your choosing.\n", + "\n", + " \"\"\"\n", + " net = CNN()\n", + " net = train(\n", + " net=net,\n", + " train_loader=train_loader,\n", + " parameters=parameterization,\n", + " dtype=dtype,\n", + " device=device,\n", + " )\n", + "\n", + " return evaluate(\n", + " net=net, \n", + " data_loader=valid_loader, \n", + " dtype=dtype, \n", + " device=device,\n", + " )\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "9ab127a8-021f-4ec8-9f4e-f4256a2e322a", + "showInput": false + }, + "source": [ + "## 5. Run optimization loop\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "411a2fb4-e8a3-4414-bc17-09f0b5ba3e74", + "showInput": false + }, + "source": [ + "First we use `attach_trial` to attach a custom trial with manually-chosen parameters. This step is optional, but we include it here to demonstrate adding manual trials and to serve as a baseline model with decent performance. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "executionStartTime": 1690415267533, + "executionStopTime": 1690415287786, + "originalKey": "1388ef55-5642-46ab-b297-c76a73a48aca", + "requestMsgId": "b32a4981-ad59-46e1-b701-fa5a5f118d8b", + "showInput": true + }, + "outputs": [], + "source": [ + "# Attach the trial\n", + "ax_client.attach_trial(\n", + " parameters={\"lr\": 0.000026, \"momentum\": 0.58}\n", + ")\n", + "\n", + "# Get the parameters and run the trial \n", + "baseline_parameters = ax_client.get_trial_parameters(trial_index=0)\n", + "ax_client.complete_trial(trial_index=0, raw_data=train_evaluate(baseline_parameters))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "f0f886a1-c5c8-44bb-b2fd-9fa3f140357a", + "showInput": false + }, + "source": [ + "Now we start the optimization loop.\n", + "\n", + "At each step, the user queries the client for a new trial then submits the evaluation of that trial back to the client.\n", + "\n", + "Note that Ax auto-selects an appropriate optimization algorithm based on the search space. For more advanced use cases that require a specific optimization algorithm, pass a `generation_strategy` argument into the `AxClient` constructor. Note that when Bayesian Optimization is used, generating new trials may take a few minutes." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415287908, + "executionStopTime": 1690415945107, + "originalKey": "bff5d714-1ab3-43d3-b9b3-8c3a53c81dcb", + "requestMsgId": "a203534f-85dd-4dfa-9fa6-6aa46a0200a3", + "showInput": true + }, + "outputs": [], + "source": [ + "for i in range(25):\n", + " parameters, trial_index = ax_client.get_next_trial()\n", + " # Local evaluation here can be replaced with deployment to external system.\n", + " ax_client.complete_trial(trial_index=trial_index, raw_data=train_evaluate(parameters))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "ccd16059-db9f-475b-b527-75afb320e0f4", + "showInput": false + }, + "source": [ + "### How many trials can run in parallel?\n", + "By default, Ax restricts number of trials that can run in parallel for some optimization stages, in order to improve the optimization performance and reduce the number of trials that the optimization will require. To check the maximum parallelism for each optimization stage:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415945269, + "executionStopTime": 1690415945336, + "originalKey": "7182d2f9-912c-464c-b5ad-f65ce6f00017", + "requestMsgId": "4cb4ff79-e45b-4c7d-86a1-7f8007eb2c81", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client.get_max_parallelism()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "e2f429e6-2ec8-4af2-906b-52a36a53d329", + "showInput": false + }, + "source": [ + "The output of this function is a list of tuples of form (number of trials, max parallelism), so the example above means \"the max parallelism is 5 for the first 5 trials and 3 for all subsequent trials.\" This is because the first 5 trials are produced quasi-randomly and can all be evaluated at once, and subsequent trials are produced via Bayesian optimization, which converges on optimal point in fewer trials when parallelism is limited. MaxParallelismReachedException indicates that the parallelism limit has been reached –– refer to the 'Service API Exceptions Meaning and Handling' section at the end of the tutorial for handling.\n", + "\n" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "86c7aef9-993a-411e-add5-05839b00d3cf", + "showInput": false + }, + "source": [ + "### How to view all existing trials during optimization?" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "executionStartTime": 1690415945532, + "executionStopTime": 1690415946199, + "originalKey": "3fbad5dc-863a-494e-b04f-d7dc1e47936c", + "requestMsgId": "905ea8b6-add0-473e-8516-5be6ad7d7658", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client.get_trials_data_frame()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "9f1ebc55-e6f2-498f-9185-569227c2f3d5", + "showInput": false + }, + "source": [ + "## 6. Retrieve best parameters\n", + "\n", + "Once it's complete, we can access the best parameters found, as well as the corresponding metric values. Note that these parameters may not necessarily be the set that yielded the highest _observed_ accuracy because Ax uses the highest model _predicted_ accuracy to choose the best parameters (see [here](https://ax.dev/api/service.html#module-ax.service.utils.best_point_mixin) for more details). Due to randomness in the data or the algorithm itself, using observed accuracy may result in choosing an outlier for the best set of parameters. Using the model predicted best will use the model to regularize the observations and reduce the likelihood of picking some outlier in the data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415946312, + "executionStopTime": 1690415949198, + "originalKey": "8fdf0023-2bf5-4cdd-93ea-a8a708dc6845", + "requestMsgId": "c0b8c25d-c6ae-476e-be23-f1b963df296b", + "showInput": true + }, + "outputs": [], + "source": [ + "best_parameters, values = ax_client.get_best_parameters()\n", + "best_parameters" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415949308, + "executionStopTime": 1690415949313, + "originalKey": "f3eb18fc-be99-494a-aeac-e9b05a3bc182", + "requestMsgId": "ac214ea0-ea8c-46f2-a988-b42893ef6d6d", + "showInput": true + }, + "outputs": [], + "source": [ + "mean, covariance = values\n", + "mean" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "6be3b006-d090-4c73-a64a-12901d1af817", + "showInput": false + }, + "source": [ + "## 7. Plot the response surface and optimization trace\n", + "\n", + "Contour plot showing classification accuracy as a function of the two hyperparameters.\n", + "\n", + "The black squares show points that we have actually run; notice how they are clustered in the optimal region." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415949431, + "executionStopTime": 1690415953540, + "originalKey": "1beca759-2fa5-48d1-bfed-c9b13a054733", + "requestMsgId": "fa48963e-b43c-4079-81a4-079d347fe9ba", + "showInput": true + }, + "outputs": [], + "source": [ + "render(ax_client.get_contour_plot(param_x=\"lr\", param_y=\"momentum\", metric_name=\"accuracy\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "5c91d83a-9a90-4ea0-8df9-9d242d998cb3", + "showInput": false + }, + "source": [ + "Here we plot the optimization trace, showing the progression of finding the point with the optimal objective:\n", + "\n" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415953760, + "executionStopTime": 1690415954260, + "originalKey": "3a767bdf-7ef3-48e7-b853-6fae5e9e02ff", + "requestMsgId": "043de459-6a28-4796-b237-808385c9e54c", + "showInput": true + }, + "outputs": [], + "source": [ + "render(\n", + " ax_client.get_optimization_trace()\n", + ") " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "executionStartTime": 1689617061294, + "executionStopTime": 1689617061325, + "originalKey": "09aaec9d-c178-42e2-b549-663cd17f8c3d", + "requestMsgId": "09aaec9d-c178-42e2-b549-663cd17f8c3d", + "showInput": false + }, + "source": [ + "## 8. Train CNN with best hyperparameters and evaluate on test set\n", + "Note that the resulting accuracy on the test set generally won't be the same as the maximum accuracy achieved on the evaluation set throughout optimization. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415954397, + "executionStopTime": 1690415954452, + "originalKey": "27f92d16-93c4-43bb-a37f-e7a1aeecd856", + "requestMsgId": "07eba5ce-bebe-4588-8dbb-07553efeb2b0", + "showInput": true + }, + "outputs": [], + "source": [ + "df = ax_client.get_trials_data_frame()\n", + "best_arm_idx = df.trial_index[df[\"accuracy\"] == df[\"accuracy\"].max()].values[0]\n", + "best_arm = ax_client.get_trial_parameters(best_arm_idx)\n", + "best_arm" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415954677, + "executionStopTime": 1690415954681, + "originalKey": "d0c7c645-c230-4654-a3b5-a01c61a09393", + "requestMsgId": "0a962cef-65a1-4f95-9410-37a9a8e5c5ac", + "showInput": true + }, + "outputs": [], + "source": [ + "combined_train_valid_set = torch.utils.data.ConcatDataset(\n", + " [\n", + " train_loader.dataset.dataset,\n", + " valid_loader.dataset.dataset,\n", + " ]\n", + ")\n", + "combined_train_valid_loader = torch.utils.data.DataLoader(\n", + " combined_train_valid_set,\n", + " batch_size=BATCH_SIZE,\n", + " shuffle=True,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690415954791, + "executionStopTime": 1690416061340, + "originalKey": "5695c78b-4c6e-4d35-ab08-6c60781bd8f1", + "requestMsgId": "e22fa0c7-88cc-4d8a-bb7d-4f96fbae9a42", + "showInput": true + }, + "outputs": [], + "source": [ + "net = train(\n", + " net=CNN(),\n", + " train_loader=combined_train_valid_loader,\n", + " parameters=best_arm,\n", + " dtype=dtype,\n", + " device=device,\n", + ")\n", + "test_accuracy = evaluate(\n", + " net=net,\n", + " data_loader=test_loader,\n", + " dtype=dtype,\n", + " device=device,\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690416061460, + "executionStopTime": 1690416061467, + "originalKey": "7522e229-9641-4383-a892-12c3f0a8011c", + "requestMsgId": "5552d77d-9c9d-4712-9256-2cb3da836f2c", + "showInput": true + }, + "outputs": [], + "source": [ + "print(f\"Classification Accuracy (test set): {round(test_accuracy*100, 2)}%\")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "c8232211-4837-4677-b86c-bce730635fff", + "showInput": false + }, + "source": [ + "## 9. Save / reload optimization to JSON / SQL\n", + "We can serialize the state of optimization to JSON and save it to a `.json` file or save it to the SQL backend. For the former:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690416061571, + "executionStopTime": 1690416061657, + "originalKey": "6afddb45-c980-4b14-b5e9-927747ea98ea", + "requestMsgId": "bab02be8-706c-4422-b97b-c222b5084bba", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client.save_to_json_file() # For custom filepath, pass `filepath` argument." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690416061758, + "executionStopTime": 1690416062132, + "originalKey": "31e6f7b4-cf6b-4967-95ff-f76d03657fb2", + "requestMsgId": "f2d10848-f995-420d-88e7-9036894d7b1b", + "showInput": true + }, + "outputs": [], + "source": [ + "restored_ax_client = (\n", + " AxClient.load_from_json_file()\n", + ") # For custom filepath, pass `filepath` argument." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "122510f5-5b9e-4b1c-9f5e-8c8ea2e08848", + "showInput": false + }, + "source": [ + "To store state of optimization to an SQL backend, first follow [setup instructions](https://ax.dev/docs/storage.html#sql) on Ax website." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "bd80e639-aa0f-4dc1-8542-0caf0d674fda", + "showInput": false + }, + "source": [ + "Having set up the SQL backend, pass `DBSettings` to `AxClient` on instantiation (note that `SQLAlchemy` dependency will have to be installed – for installation, refer to [optional dependencies](https://ax.dev/docs/installation.html#optional-dependencies) on Ax website):" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690416062222, + "executionStopTime": 1690416062314, + "originalKey": "80eb6a2e-6564-405e-b5d4-d448e32dbf60", + "requestMsgId": "65f2307f-b800-4415-b9e7-11734a2a6889", + "showInput": true + }, + "outputs": [], + "source": [ + "from ax.storage.sqa_store.structs import DBSettings\n", + "\n", + "# URL is of the form \"dialect+driver://username:password@host:port/database\".\n", + "db_settings = DBSettings(url=\"sqlite:///foo.db\")\n", + "# Instead of URL, can provide a `creator function`; can specify custom encoders/decoders if necessary.\n", + "new_ax = AxClient(db_settings=db_settings)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "adafd3aa-b84e-4e86-9694-a29f94c6d5f3", + "showInput": false + }, + "source": [ + "When valid `DBSettings` are passed into `AxClient`, a unique experiment name is a required argument (`name`) to `ax_client.create_experiment`. The **state of the optimization is auto-saved** any time it changes (i.e. a new trial is added or completed, etc). \n", + "\n", + "To reload an optimization state later, instantiate `AxClient` with the same `DBSettings` and use `ax_client.load_experiment_from_database(experiment_name=\"my_experiment\")`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "2f4a875b-1e18-4352-955d-576d6b01c5ed", + "showInput": false + }, + "source": [ + "# Special Cases" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "0d49e448-4768-401d-ac1d-810aee633c9a", + "showInput": false + }, + "source": [ + "**Evaluation failure**: should any optimization iterations fail during evaluation, `log_trial_failure` will ensure that the same trial is not proposed again." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690416062420, + "executionStopTime": 1690416064316, + "originalKey": "faa83f1d-31da-481a-96e4-ccbc12f30b91", + "requestMsgId": "80a40c3a-76ed-4e1d-aa77-3652fadbe69f", + "showInput": true + }, + "outputs": [], + "source": [ + "_, trial_index = ax_client.get_next_trial()\n", + "ax_client.log_trial_failure(trial_index=trial_index)" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "c826a96e-9431-49bd-87d7-62b517537a15", + "showInput": false + }, + "source": [ + "**Need to run many trials in parallel**: for optimal results and optimization efficiency, we strongly recommend sequential optimization (generating a few trials, then waiting for them to be completed with evaluation data). However, if your use case needs to dispatch many trials in parallel before they are updated with data and you are running into the *\"All trials for current model have been generated, but not enough data has been observed to fit next model\"* error, instantiate `AxClient` as `AxClient(enforce_sequential_optimization=False)`." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "683378e0-893b-49a1-b090-084dc394da1a", + "showInput": false + }, + "source": [ + "# Service API Exceptions Meaning and Handling\n", + "[**`DataRequiredError`**](https://ax.dev/api/exceptions.html#ax.exceptions.core.DataRequiredError): Ax generation strategy needs to be updated with more data to proceed to the next optimization model. When the optimization moves from initialization stage to the Bayesian optimization stage, the underlying BayesOpt model needs sufficient data to train. For optimal results and optimization efficiency (finding the optimal point in the least number of trials), we recommend sequential optimization (generating a few trials, then waiting for them to be completed with evaluation data). Therefore, the correct way to handle this exception is to wait until more trial evaluations complete and log their data via `ax_client.complete_trial(...)`. \n", + "\n", + "However, if there is strong need to generate more trials before more data is available, instantiate `AxClient` as `AxClient(enforce_sequential_optimization=False)`. With this setting, as many trials will be generated from the initialization stage as requested, and the optimization will move to the BayesOpt stage whenever enough trials are completed." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "customInput": null, + "originalKey": "4602d41d-43aa-46d2-9ca6-392c414d0b5f", + "showInput": false + }, + "source": [ + "[**`MaxParallelismReachedException`**](https://ax.dev/api/modelbridge.html#ax.modelbridge.generation_strategy.MaxParallelismReachedException): generation strategy restricts the number of trials that can be run simultaneously (to encourage sequential optimization), and the parallelism limit has been reached. The correct way to handle this exception is the same as `DataRequiredError` – to wait until more trial evluations complete and log their data via `ax_client.complete_trial(...)`.\n", + " \n", + "In some cases higher parallelism is important, so `enforce_sequential_optimization=False` kwarg to AxClient allows the user to suppress limiting of parallelism. It's also possible to override the default parallelism setting for all stages of the optimization by passing `choose_generation_strategy_kwargs` to `ax_client.create_experiment`:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690416064534, + "executionStopTime": 1690416064564, + "originalKey": "d62e6cfd-5127-450e-80b7-d0edcaf97d6c", + "requestMsgId": "cb9a17f9-5734-41c6-9018-c0635c61d8b3", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client = AxClient()\n", + "ax_client.create_experiment(\n", + " parameters=[\n", + " {\"name\": \"x\", \"type\": \"range\", \"bounds\": [-5.0, 10.0]},\n", + " {\"name\": \"y\", \"type\": \"range\", \"bounds\": [0.0, 15.0]},\n", + " ],\n", + " # Sets max parallelism to 10 for all steps of the generation strategy.\n", + " choose_generation_strategy_kwargs={\"max_parallelism_override\": 10},\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "customInput": null, + "customOutput": null, + "executionStartTime": 1690416064679, + "executionStopTime": 1690416064702, + "originalKey": "bc15d2cf-8ddc-4d66-83b6-7469cd15aa4d", + "requestMsgId": "996c4bd3-b296-4cf9-8f95-cbf488639c2f", + "showInput": true + }, + "outputs": [], + "source": [ + "ax_client.get_max_parallelism() # Max parallelism is now 10 for all stages of the optimization." + ] + } + ], + "metadata": { + "fileHeader": "", + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 } diff --git a/tutorials/visualizations.ipynb b/tutorials/visualizations.ipynb index 179bb6e8182..d01a19e8eea 100644 --- a/tutorials/visualizations.ipynb +++ b/tutorials/visualizations.ipynb @@ -1,348 +1,344 @@ { - "cells": [ - { - "cell_type": "markdown", - "metadata": { - "originalKey": "e23719d9-8a24-4208-8439-34e7b8270c79" - }, - "source": [ - "# Visualizations\n", - "\n", - "This tutorial illustrates the core visualization utilities available in Ax." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1627652821316, - "executionStopTime": 1627652822868, - "hidden_ranges": [], - "originalKey": "101b0e96-5b3d-48c5-bf3c-677b4ddf90c7", - "requestMsgId": "c0dd9aaf-896d-4ea9-912f-1e58d301d114" - }, - "outputs": [], - "source": [ - "import numpy as np\n", - "from ax.service.ax_client import AxClient, ObjectiveProperties\n", - "\n", - "from ax.modelbridge.cross_validation import cross_validate\n", - "from ax.plot.contour import interact_contour\n", - "from ax.plot.diagnostic import interact_cross_validation\n", - "from ax.plot.scatter import (\n", - " interact_fitted,\n", - " plot_objective_vs_constraints,\n", - " tile_fitted,\n", - ")\n", - "from ax.plot.slice import plot_slice\n", - "from ax.utils.measurement.synthetic_functions import hartmann6\n", - "from ax.utils.notebook.plotting import render, init_notebook_plotting\n", - "\n", - "init_notebook_plotting()" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "8449378f-890e-4e76-8d73-ce2aa4120a69", - "showInput": true - }, - "source": [ - "## 1. Create experiment and run optimization\n", - "\n", - "The vizualizations require an experiment object and a model fit on the evaluated data. The routine below is a copy of the Service API tutorial, so the explanation here is omitted. Retrieving the experiment and model objects for each API paradigm is shown in the respective tutorials" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "f7544e06-6c6a-4841-b659-3be6a198a948" - }, - "source": [ - "#### 1a. Define search space and evaluation function" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1627652824829, - "executionStopTime": 1627652824877, - "hidden_ranges": [], - "originalKey": "28f6cb76-828f-445d-bdda-ba057c87dcd0", - "requestMsgId": "7495e7e2-1025-4292-b3aa-e953739cef3e" - }, - "outputs": [], - "source": [ - "noise_sd = 0.1\n", - "param_names = [f\"x{i+1}\" for i in range(6)] # x1, x2, ..., x6\n", - "\n", - "\n", - "def noisy_hartmann_evaluation_function(parameterization):\n", - " x = np.array([parameterization.get(p_name) for p_name in param_names])\n", - " noise1, noise2 = np.random.normal(0, noise_sd, 2)\n", - "\n", - " return {\n", - " \"hartmann6\": (hartmann6(x) + noise1, noise_sd),\n", - " \"l2norm\": (np.sqrt((x**2).sum()) + noise2, noise_sd),\n", - " }" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "17a51543-298e-47d4-bcd9-33459fe1169e" - }, - "source": [ - "#### 1b. Create Experiment" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1627654956712, - "executionStopTime": 1627654956823, - "hidden_ranges": [], - "originalKey": "6fca889c-a4ff-42ef-a669-6eb8803de89c", - "requestMsgId": "905eff52-e649-4bd5-abf0-ff69c1549852" - }, - "outputs": [], - "source": [ - "ax_client = AxClient()\n", - "ax_client.create_experiment(\n", - " name=\"test_visualizations\",\n", - " parameters=[\n", - " {\n", - " \"name\": p_name,\n", - " \"type\": \"range\",\n", - " \"bounds\": [0.0, 1.0],\n", - " }\n", - " for p_name in param_names\n", - " ],\n", - " objectives={\"hartmann6\": ObjectiveProperties(minimize=True)},\n", - " outcome_constraints=[\"l2norm <= 1.25\"],\n", - ")" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "code_folding": [], - "hidden_ranges": [], - "originalKey": "ab892f7c-4830-4c1d-b476-ec1078ec3faf", - "showInput": false - }, - "source": [ - "#### 1c. Run the optimization and fit a GP on all data" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1627654642967, - "executionStopTime": 1627654862819, - "hidden_ranges": [], - "originalKey": "7269a5ba-45c8-4acf-ac83-a5ea8a52d6c1", - "requestMsgId": "c7a4dea8-fd6d-4e1a-84de-ad973ede0cd7" - }, - "outputs": [], - "source": [ - "for i in range(20):\n", - " parameters, trial_index = ax_client.get_next_trial()\n", - " # Local evaluation here can be replaced with deployment to external system.\n", - " ax_client.complete_trial(\n", - " trial_index=trial_index, raw_data=noisy_hartmann_evaluation_function(parameters)\n", - " )" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "72f4d3e7-fa04-43d0-8451-ded292e705df" - }, - "source": [ - "## 2. Contour plots\n", - "\n", - "The plot below shows the response surface for `hartmann6` metric as a function of the `x1`, `x2` parameters.\n", - "\n", - "The other parameters are fixed in the middle of their respective ranges, which in this example is 0.5 for all of them." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1627654870209, - "executionStopTime": 1627654871972, - "hidden_ranges": [], - "originalKey": "843df85c-965d-4a83-9fe1-696225d81c0f", - "requestMsgId": "4a643541-867c-46b6-868d-64337920c2a3" - }, - "outputs": [], - "source": [ - "# this could alternately be done with `ax.plot.contour.plot_contour`\n", - "render(ax_client.get_contour_plot(param_x=\"x1\", param_y=\"x2\", metric_name=\"hartmann6\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "1de0991a-d99b-4d07-acec-4a2eb4a20a73" - }, - "source": [ - "#### 2a. Interactive contour plot\n", - "\n", - "The plot below allows toggling between different pairs of parameters to view the contours." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "code_folding": [], - "executionStartTime": 1627652959076, - "executionStopTime": 1627652982911, - "hidden_ranges": [], - "originalKey": "4af9f166-0163-4ff5-9ecb-f534a69efe3d", - "requestMsgId": "2de6919e-92e1-4425-8d90-b117e9f41855" - }, - "outputs": [], - "source": [ - "model = ax_client.generation_strategy.model\n", - "render(interact_contour(model=model, metric_name=\"hartmann6\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "1ff470bb-5daf-4179-b814-01cc80dafe3e" - }, - "source": [ - "## 3. Tradeoff plots\n", - "This plot illustrates the tradeoffs achievable for 2 different metrics. The plot takes the x-axis metric as input (usually the objective) and allows toggling among all other metrics for the y-axis.\n", - "\n", - "This is useful to get a sense of the pareto frontier (i.e. what is the best objective value achievable for different bounds on the constraint)" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1627652996903, - "executionStopTime": 1627652997294, - "originalKey": "57023556-0293-44ef-91d6-81b911ff41d3", - "requestMsgId": "10b72ecc-a019-42a1-8358-18f14927ef75" - }, - "outputs": [], - "source": [ - "render(plot_objective_vs_constraints(model, \"hartmann6\", rel=False))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "f2d4fae3-2140-45d0-8142-49b91548ca59" - }, - "source": [ - "## 4. Cross-validation plots\n", - "\n", - "CV plots are useful to check how well the model predictions calibrate against the actual measurements. If all points are close to the dashed line, then the model is a good predictor of the real data." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1627397871181, - "executionStopTime": 1627397871526, - "originalKey": "f770f8a9-466c-4fd2-b268-3a0d166482f3", - "requestMsgId": "d6242810-a316-4e2b-b9dd-dd4c56b725b7" - }, - "outputs": [], - "source": [ - "cv_results = cross_validate(model)\n", - "render(interact_cross_validation(cv_results))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "40f8ee99-fee8-4fd9-9cff-a7aa230dd5ae" - }, - "source": [ - "## 5. Slice plots\n", - "\n", - "Slice plots show the metric outcome as a function of one parameter while fixing the others. They serve a similar function as contour plots." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1627397880415, - "executionStopTime": 1627397880572, - "originalKey": "aed7c789-a024-48c6-86f7-502e571e298f", - "requestMsgId": "a7238d82-f6bb-441d-badc-673dedaa101e" - }, - "outputs": [], - "source": [ - "render(plot_slice(model, \"x2\", \"hartmann6\"))" - ] - }, - { - "cell_type": "markdown", - "metadata": { - "originalKey": "4975848f-31d4-4ed0-976c-39e3b7474fb7" - }, - "source": [ - "## 6. Tile plots\n", - "\n", - "Tile plots are useful for viewing the effect of each arm." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": { - "executionStartTime": 1627397890236, - "executionStopTime": 1627397890496, - "originalKey": "2ed10008-8adf-4ce2-8334-04a4f2a3e895", - "requestMsgId": "33b593e6-2ec8-4bc4-b6e3-6586ddfb15c5" - }, - "outputs": [], - "source": [ - "render(interact_fitted(model, rel=False))" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "python3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.15" - } + "cells": [ + { + "cell_type": "markdown", + "metadata": { + "originalKey": "e23719d9-8a24-4208-8439-34e7b8270c79" + }, + "source": [ + "# Visualizations\n", + "\n", + "This tutorial illustrates the core visualization utilities available in Ax." + ] }, - "nbformat": 4, - "nbformat_minor": 2 + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1627652821316, + "executionStopTime": 1627652822868, + "hidden_ranges": [], + "originalKey": "101b0e96-5b3d-48c5-bf3c-677b4ddf90c7", + "requestMsgId": "c0dd9aaf-896d-4ea9-912f-1e58d301d114" + }, + "outputs": [], + "source": [ + "import numpy as np\n", + "\n", + "from ax.modelbridge.cross_validation import cross_validate\n", + "from ax.plot.contour import interact_contour\n", + "from ax.plot.diagnostic import interact_cross_validation\n", + "from ax.plot.scatter import interact_fitted, plot_objective_vs_constraints, tile_fitted\n", + "from ax.plot.slice import plot_slice\n", + "from ax.service.ax_client import AxClient, ObjectiveProperties\n", + "from ax.utils.measurement.synthetic_functions import hartmann6\n", + "from ax.utils.notebook.plotting import init_notebook_plotting, render\n", + "\n", + "init_notebook_plotting()" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "8449378f-890e-4e76-8d73-ce2aa4120a69", + "showInput": true + }, + "source": [ + "## 1. Create experiment and run optimization\n", + "\n", + "The vizualizations require an experiment object and a model fit on the evaluated data. The routine below is a copy of the Service API tutorial, so the explanation here is omitted. Retrieving the experiment and model objects for each API paradigm is shown in the respective tutorials" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "f7544e06-6c6a-4841-b659-3be6a198a948" + }, + "source": [ + "#### 1a. Define search space and evaluation function" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1627652824829, + "executionStopTime": 1627652824877, + "hidden_ranges": [], + "originalKey": "28f6cb76-828f-445d-bdda-ba057c87dcd0", + "requestMsgId": "7495e7e2-1025-4292-b3aa-e953739cef3e" + }, + "outputs": [], + "source": [ + "noise_sd = 0.1\n", + "param_names = [f\"x{i+1}\" for i in range(6)] # x1, x2, ..., x6\n", + "\n", + "\n", + "def noisy_hartmann_evaluation_function(parameterization):\n", + " x = np.array([parameterization.get(p_name) for p_name in param_names])\n", + " noise1, noise2 = np.random.normal(0, noise_sd, 2)\n", + "\n", + " return {\n", + " \"hartmann6\": (hartmann6(x) + noise1, noise_sd),\n", + " \"l2norm\": (np.sqrt((x**2).sum()) + noise2, noise_sd),\n", + " }" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "17a51543-298e-47d4-bcd9-33459fe1169e" + }, + "source": [ + "#### 1b. Create Experiment" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1627654956712, + "executionStopTime": 1627654956823, + "hidden_ranges": [], + "originalKey": "6fca889c-a4ff-42ef-a669-6eb8803de89c", + "requestMsgId": "905eff52-e649-4bd5-abf0-ff69c1549852" + }, + "outputs": [], + "source": [ + "ax_client = AxClient()\n", + "ax_client.create_experiment(\n", + " name=\"test_visualizations\",\n", + " parameters=[\n", + " {\n", + " \"name\": p_name,\n", + " \"type\": \"range\",\n", + " \"bounds\": [0.0, 1.0],\n", + " }\n", + " for p_name in param_names\n", + " ],\n", + " objectives={\"hartmann6\": ObjectiveProperties(minimize=True)},\n", + " outcome_constraints=[\"l2norm <= 1.25\"],\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "code_folding": [], + "hidden_ranges": [], + "originalKey": "ab892f7c-4830-4c1d-b476-ec1078ec3faf", + "showInput": false + }, + "source": [ + "#### 1c. Run the optimization and fit a GP on all data" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1627654642967, + "executionStopTime": 1627654862819, + "hidden_ranges": [], + "originalKey": "7269a5ba-45c8-4acf-ac83-a5ea8a52d6c1", + "requestMsgId": "c7a4dea8-fd6d-4e1a-84de-ad973ede0cd7" + }, + "outputs": [], + "source": [ + "for i in range(20):\n", + " parameters, trial_index = ax_client.get_next_trial()\n", + " # Local evaluation here can be replaced with deployment to external system.\n", + " ax_client.complete_trial(\n", + " trial_index=trial_index, raw_data=noisy_hartmann_evaluation_function(parameters)\n", + " )" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "72f4d3e7-fa04-43d0-8451-ded292e705df" + }, + "source": [ + "## 2. Contour plots\n", + "\n", + "The plot below shows the response surface for `hartmann6` metric as a function of the `x1`, `x2` parameters.\n", + "\n", + "The other parameters are fixed in the middle of their respective ranges, which in this example is 0.5 for all of them." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1627654870209, + "executionStopTime": 1627654871972, + "hidden_ranges": [], + "originalKey": "843df85c-965d-4a83-9fe1-696225d81c0f", + "requestMsgId": "4a643541-867c-46b6-868d-64337920c2a3" + }, + "outputs": [], + "source": [ + "# this could alternately be done with `ax.plot.contour.plot_contour`\n", + "render(ax_client.get_contour_plot(param_x=\"x1\", param_y=\"x2\", metric_name=\"hartmann6\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "1de0991a-d99b-4d07-acec-4a2eb4a20a73" + }, + "source": [ + "#### 2a. Interactive contour plot\n", + "\n", + "The plot below allows toggling between different pairs of parameters to view the contours." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "code_folding": [], + "executionStartTime": 1627652959076, + "executionStopTime": 1627652982911, + "hidden_ranges": [], + "originalKey": "4af9f166-0163-4ff5-9ecb-f534a69efe3d", + "requestMsgId": "2de6919e-92e1-4425-8d90-b117e9f41855" + }, + "outputs": [], + "source": [ + "model = ax_client.generation_strategy.model\n", + "render(interact_contour(model=model, metric_name=\"hartmann6\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "1ff470bb-5daf-4179-b814-01cc80dafe3e" + }, + "source": [ + "## 3. Tradeoff plots\n", + "This plot illustrates the tradeoffs achievable for 2 different metrics. The plot takes the x-axis metric as input (usually the objective) and allows toggling among all other metrics for the y-axis.\n", + "\n", + "This is useful to get a sense of the pareto frontier (i.e. what is the best objective value achievable for different bounds on the constraint)" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1627652996903, + "executionStopTime": 1627652997294, + "originalKey": "57023556-0293-44ef-91d6-81b911ff41d3", + "requestMsgId": "10b72ecc-a019-42a1-8358-18f14927ef75" + }, + "outputs": [], + "source": [ + "render(plot_objective_vs_constraints(model, \"hartmann6\", rel=False))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "f2d4fae3-2140-45d0-8142-49b91548ca59" + }, + "source": [ + "## 4. Cross-validation plots\n", + "\n", + "CV plots are useful to check how well the model predictions calibrate against the actual measurements. If all points are close to the dashed line, then the model is a good predictor of the real data." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1627397871181, + "executionStopTime": 1627397871526, + "originalKey": "f770f8a9-466c-4fd2-b268-3a0d166482f3", + "requestMsgId": "d6242810-a316-4e2b-b9dd-dd4c56b725b7" + }, + "outputs": [], + "source": [ + "cv_results = cross_validate(model)\n", + "render(interact_cross_validation(cv_results))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "40f8ee99-fee8-4fd9-9cff-a7aa230dd5ae" + }, + "source": [ + "## 5. Slice plots\n", + "\n", + "Slice plots show the metric outcome as a function of one parameter while fixing the others. They serve a similar function as contour plots." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1627397880415, + "executionStopTime": 1627397880572, + "originalKey": "aed7c789-a024-48c6-86f7-502e571e298f", + "requestMsgId": "a7238d82-f6bb-441d-badc-673dedaa101e" + }, + "outputs": [], + "source": [ + "render(plot_slice(model, \"x2\", \"hartmann6\"))" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "originalKey": "4975848f-31d4-4ed0-976c-39e3b7474fb7" + }, + "source": [ + "## 6. Tile plots\n", + "\n", + "Tile plots are useful for viewing the effect of each arm." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "executionStartTime": 1627397890236, + "executionStopTime": 1627397890496, + "originalKey": "2ed10008-8adf-4ce2-8334-04a4f2a3e895", + "requestMsgId": "33b593e6-2ec8-4bc4-b6e3-6586ddfb15c5" + }, + "outputs": [], + "source": [ + "render(interact_fitted(model, rel=False))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.5" + } + }, + "nbformat": 4, + "nbformat_minor": 2 }