{ "cells": [ { "cell_type": "markdown", "id": "1c73a1a4", "metadata": { "collapsed": true, "customInput": null, "originalKey": "ac61b043-8ebf-43b9-9fa5-ed9a42a184ce", "papermill": { "duration": 0.007156, "end_time": "2024-11-13T05:17:46.751142", "exception": false, "start_time": "2024-11-13T05:17:46.743986", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "b1640970", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:17:46.764265Z", "iopub.status.busy": "2024-11-13T05:17:46.763795Z", "iopub.status.idle": "2024-11-13T05:17:50.902442Z", "shell.execute_reply": "2024-11-13T05:17:50.901436Z" }, "executionStartTime": 1690415246079, "executionStopTime": 1690415266324, "originalKey": "c2b37f0f-3644-4367-912f-f775082f6676", "papermill": { "duration": 4.163242, "end_time": "2024-11-13T05:17:50.920244", "exception": false, "start_time": "2024-11-13T05:17:46.757002", "status": "completed" }, "requestMsgId": "0b481630-f0f4-436a-a205-a25aa163a364", "showInput": true, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[ERROR 11-13 05:17:49] ax.storage.sqa_store.encoder: ATTENTION: The Ax team is considering deprecating SQLAlchemy storage. If you are currently using SQLAlchemy storage, please reach out to us via GitHub Issues here: https://github.com/facebook/Ax/issues/2975\n" ] }, { "data": { "text/html": [ "" ] }, "metadata": {}, "output_type": "display_data" }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:17:50] ax.utils.notebook.plotting: Injecting Plotly library into cell. Do not overwrite or delete cell.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:17:50] ax.utils.notebook.plotting: Please see\n", " (https://ax.dev/tutorials/visualizations.html#Fix-for-plots-that-are-not-rendering)\n", " if visualizations are not rendering.\n" ] }, { "data": { "text/html": [ " \n", " " ] }, "metadata": {}, "output_type": "display_data" } ], "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": 2, "id": "ec1444ea", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:17:51.013222Z", "iopub.status.busy": "2024-11-13T05:17:51.012695Z", "iopub.status.idle": "2024-11-13T05:17:51.017708Z", "shell.execute_reply": "2024-11-13T05:17:51.017110Z" }, "executionStartTime": 1690415266521, "executionStopTime": 1690415266529, "originalKey": "4d0a27c4-a6ce-4b7d-97eb-1c229aabb375", "papermill": { "duration": 0.056153, "end_time": "2024-11-13T05:17:51.018968", "exception": false, "start_time": "2024-11-13T05:17:50.962815", "status": "completed" }, "requestMsgId": "fd975d25-a185-4b09-a50f-7b2bcd89f93f", "showInput": true, "tags": [] }, "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", "id": "02ac2113", "metadata": { "customInput": null, "originalKey": "10384e51-444c-4265-b56d-ad078d05d2a1", "papermill": { "duration": 0.042698, "end_time": "2024-11-13T05:17:51.104202", "exception": false, "start_time": "2024-11-13T05:17:51.061504", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "b2bd2ca5", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:17:51.191345Z", "iopub.status.busy": "2024-11-13T05:17:51.191078Z", "iopub.status.idle": "2024-11-13T05:17:52.796958Z", "shell.execute_reply": "2024-11-13T05:17:52.796159Z" }, "executionStartTime": 1690415266733, "executionStopTime": 1690415266902, "originalKey": "6f0949e2-1064-44b8-99c0-f6ce23df7c63", "papermill": { "duration": 1.651154, "end_time": "2024-11-13T05:17:52.798371", "exception": false, "start_time": "2024-11-13T05:17:51.147217", "status": "completed" }, "requestMsgId": "8ce7dd21-9afb-4379-ad11-4112b4d27f8a", "showInput": true, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Downloading http://yann.lecun.com/exdb/mnist/train-images-idx3-ubyte.gz\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Failed to download (trying next):\n", "HTTP Error 403: Forbidden\n", "\n", "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz\n", "Downloading https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz to ./data/MNIST/raw/train-images-idx3-ubyte.gz\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\r", " 0%| | 0.00/9.91M [00:00= p2\" or \"p1 + p2 <= some_bound\".\n", " # outcome_constraints: Optional, a list of strings of form \"constrained_metric <= some_bound\".\n", ")" ] }, { "cell_type": "markdown", "id": "ce69e1ee", "metadata": { "customInput": null, "originalKey": "af441a83-50fd-4385-a380-d8ebc570c0e5", "papermill": { "duration": 0.044283, "end_time": "2024-11-13T05:17:53.267053", "exception": false, "start_time": "2024-11-13T05:17:53.222770", "status": "completed" }, "showInput": false, "tags": [] }, "source": [ "## 4. Define how to evaluate trials\n" ] }, { "cell_type": "markdown", "id": "175d4ac2", "metadata": { "customInput": null, "originalKey": "c7630dfd-548b-408a-badf-b6abf79275e2", "papermill": { "duration": 0.044418, "end_time": "2024-11-13T05:17:53.356344", "exception": false, "start_time": "2024-11-13T05:17:53.311926", "status": "completed" }, "showInput": false, "tags": [] }, "source": [ "First we define a simple CNN class to classify the MNIST images" ] }, { "cell_type": "code", "execution_count": 6, "id": "d2e23d9c", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:17:53.447468Z", "iopub.status.busy": "2024-11-13T05:17:53.446982Z", "iopub.status.idle": "2024-11-13T05:17:53.451902Z", "shell.execute_reply": "2024-11-13T05:17:53.451272Z" }, "executionStartTime": 1690415267282, "executionStopTime": 1690415267286, "originalKey": "e41fea0a-ae71-4e6f-8c0a-6eb6ae143fb0", "papermill": { "duration": 0.052035, "end_time": "2024-11-13T05:17:53.453125", "exception": false, "start_time": "2024-11-13T05:17:53.401090", "status": "completed" }, "requestMsgId": "60f14ec9-eb1b-4e88-95c5-15c91f999c90", "showInput": true, "tags": [] }, "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", "id": "2d778324", "metadata": { "customInput": null, "originalKey": "8ef6bcb9-c492-4874-b8c7-a07f7e6291ad", "papermill": { "duration": 0.044237, "end_time": "2024-11-13T05:17:53.541622", "exception": false, "start_time": "2024-11-13T05:17:53.497385", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "fa263a5f", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:17:53.632144Z", "iopub.status.busy": "2024-11-13T05:17:53.631697Z", "iopub.status.idle": "2024-11-13T05:17:53.635792Z", "shell.execute_reply": "2024-11-13T05:17:53.635162Z" }, "executionStartTime": 1690415267388, "executionStopTime": 1690415267395, "originalKey": "a7e4bcc4-7494-429b-bb93-7ad84d0985af", "papermill": { "duration": 0.050751, "end_time": "2024-11-13T05:17:53.637071", "exception": false, "start_time": "2024-11-13T05:17:53.586320", "status": "completed" }, "requestMsgId": "5d486dbf-60cb-453d-8f24-8605f974b0a7", "showInput": true, "tags": [] }, "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", "id": "b0128420", "metadata": { "customInput": null, "originalKey": "9ab127a8-021f-4ec8-9f4e-f4256a2e322a", "papermill": { "duration": 0.044237, "end_time": "2024-11-13T05:17:53.725502", "exception": false, "start_time": "2024-11-13T05:17:53.681265", "status": "completed" }, "showInput": false, "tags": [] }, "source": [ "## 5. Run optimization loop\n" ] }, { "cell_type": "markdown", "id": "82306df7", "metadata": { "customInput": null, "originalKey": "411a2fb4-e8a3-4414-bc17-09f0b5ba3e74", "papermill": { "duration": 0.044429, "end_time": "2024-11-13T05:17:53.814544", "exception": false, "start_time": "2024-11-13T05:17:53.770115", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "c6fd188e", "metadata": { "customInput": null, "execution": { "iopub.execute_input": "2024-11-13T05:17:53.905019Z", "iopub.status.busy": "2024-11-13T05:17:53.904569Z", "iopub.status.idle": "2024-11-13T05:18:00.683307Z", "shell.execute_reply": "2024-11-13T05:18:00.682681Z" }, "executionStartTime": 1690415267533, "executionStopTime": 1690415287786, "originalKey": "1388ef55-5642-46ab-b297-c76a73a48aca", "papermill": { "duration": 6.825676, "end_time": "2024-11-13T05:18:00.684592", "exception": false, "start_time": "2024-11-13T05:17:53.858916", "status": "completed" }, "requestMsgId": "b32a4981-ad59-46e1-b701-fa5a5f118d8b", "showInput": true, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:17:53] ax.core.experiment: Attached custom parameterizations [{'lr': 2.6e-05, 'momentum': 0.58}] as trial 0.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:00] 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))" ] }, { "cell_type": "markdown", "id": "9832b88c", "metadata": { "customInput": null, "originalKey": "f0f886a1-c5c8-44bb-b2fd-9fa3f140357a", "papermill": { "duration": 0.045109, "end_time": "2024-11-13T05:18:00.776327", "exception": false, "start_time": "2024-11-13T05:18:00.731218", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "3c76af01", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:18:00.868226Z", "iopub.status.busy": "2024-11-13T05:18:00.867699Z", "iopub.status.idle": "2024-11-13T05:21:06.540486Z", "shell.execute_reply": "2024-11-13T05:21:06.539927Z" }, "executionStartTime": 1690415287908, "executionStopTime": 1690415945107, "originalKey": "bff5d714-1ab3-43d3-b9b3-8c3a53c81dcb", "papermill": { "duration": 185.720532, "end_time": "2024-11-13T05:21:06.541761", "exception": false, "start_time": "2024-11-13T05:18:00.821229", "status": "completed" }, "requestMsgId": "a203534f-85dd-4dfa-9fa6-6aa46a0200a3", "showInput": true, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/tmp/tmp.jh7tLjWjTJ/Ax-main/ax/modelbridge/cross_validation.py:464: UserWarning:\n", "\n", "Encountered exception in computing model fit quality: RandomModelBridge does not support prediction.\n", "\n", "[INFO 11-13 05:18:00] ax.service.ax_client: Generated new trial 1 with parameters {'lr': 0.009955, 'momentum': 0.633423} using model Sobol.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:07] ax.service.ax_client: Completed trial 1 with data: {'accuracy': (0.100333, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/tmp.jh7tLjWjTJ/Ax-main/ax/modelbridge/cross_validation.py:464: UserWarning:\n", "\n", "Encountered exception in computing model fit quality: RandomModelBridge does not support prediction.\n", "\n", "[INFO 11-13 05:18:07] ax.service.ax_client: Generated new trial 2 with parameters {'lr': 9e-05, 'momentum': 0.335441} using model Sobol.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:14] ax.service.ax_client: Completed trial 2 with data: {'accuracy': (0.884333, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/tmp.jh7tLjWjTJ/Ax-main/ax/modelbridge/cross_validation.py:464: UserWarning:\n", "\n", "Encountered exception in computing model fit quality: RandomModelBridge does not support prediction.\n", "\n", "[INFO 11-13 05:18:14] ax.service.ax_client: Generated new trial 3 with parameters {'lr': 2e-06, 'momentum': 0.902833} using model Sobol.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:20] ax.service.ax_client: Completed trial 3 with data: {'accuracy': (0.678667, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/tmp.jh7tLjWjTJ/Ax-main/ax/modelbridge/cross_validation.py:464: UserWarning:\n", "\n", "Encountered exception in computing model fit quality: RandomModelBridge does not support prediction.\n", "\n", "[INFO 11-13 05:18:20] ax.service.ax_client: Generated new trial 4 with parameters {'lr': 0.10174, 'momentum': 0.065787} using model Sobol.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:27] ax.service.ax_client: Completed trial 4 with data: {'accuracy': (0.100333, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/tmp/tmp.jh7tLjWjTJ/Ax-main/ax/modelbridge/cross_validation.py:464: UserWarning:\n", "\n", "Encountered exception in computing model fit quality: RandomModelBridge does not support prediction.\n", "\n", "[INFO 11-13 05:18:27] ax.service.ax_client: Generated new trial 5 with parameters {'lr': 0.017004, 'momentum': 0.802601} using model Sobol.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:34] ax.service.ax_client: Completed trial 5 with data: {'accuracy': (0.088167, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:34] ax.service.ax_client: Generated new trial 6 with parameters {'lr': 3.5e-05, 'momentum': 0.0} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:41] ax.service.ax_client: Completed trial 6 with data: {'accuracy': (0.774, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:42] ax.service.ax_client: Generated new trial 7 with parameters {'lr': 8.3e-05, 'momentum': 1.0} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:48] ax.service.ax_client: Completed trial 7 with data: {'accuracy': (0.8945, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:49] ax.service.ax_client: Generated new trial 8 with parameters {'lr': 4.5e-05, 'momentum': 1.0} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:56] ax.service.ax_client: Completed trial 8 with data: {'accuracy': (0.815, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:18:56] ax.service.ax_client: Generated new trial 9 with parameters {'lr': 0.000173, 'momentum': 1.0} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:03] ax.service.ax_client: Completed trial 9 with data: {'accuracy': (0.725833, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:04] ax.service.ax_client: Generated new trial 10 with parameters {'lr': 2.5e-05, 'momentum': 1.0} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:10] ax.service.ax_client: Completed trial 10 with data: {'accuracy': (0.836667, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:11] ax.service.ax_client: Generated new trial 11 with parameters {'lr': 5e-05, 'momentum': 0.623798} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:18] ax.service.ax_client: Completed trial 11 with data: {'accuracy': (0.893, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:18] ax.service.ax_client: Generated new trial 12 with parameters {'lr': 0.000147, 'momentum': 0.0} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:25] ax.service.ax_client: Completed trial 12 with data: {'accuracy': (0.901, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:26] ax.service.ax_client: Generated new trial 13 with parameters {'lr': 0.000285, 'momentum': 0.0} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:32] ax.service.ax_client: Completed trial 13 with data: {'accuracy': (0.830333, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:33] ax.service.ax_client: Generated new trial 14 with parameters {'lr': 0.000107, 'momentum': 0.0} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:40] ax.service.ax_client: Completed trial 14 with data: {'accuracy': (0.7695, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:41] ax.service.ax_client: Generated new trial 15 with parameters {'lr': 9.6e-05, 'momentum': 0.503227} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:47] ax.service.ax_client: Completed trial 15 with data: {'accuracy': (0.912, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:48] ax.service.ax_client: Generated new trial 16 with parameters {'lr': 0.000143, 'momentum': 0.416516} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:55] ax.service.ax_client: Completed trial 16 with data: {'accuracy': (0.913167, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:19:56] ax.service.ax_client: Generated new trial 17 with parameters {'lr': 7.2e-05, 'momentum': 0.488424} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:02] ax.service.ax_client: Completed trial 17 with data: {'accuracy': (0.874667, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:03] ax.service.ax_client: Generated new trial 18 with parameters {'lr': 1e-06, 'momentum': 0.0} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:09] ax.service.ax_client: Completed trial 18 with data: {'accuracy': (0.135833, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:11] ax.service.ax_client: Generated new trial 19 with parameters {'lr': 0.000114, 'momentum': 0.374579} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:17] ax.service.ax_client: Completed trial 19 with data: {'accuracy': (0.909333, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:19] ax.service.ax_client: Generated new trial 20 with parameters {'lr': 7.6e-05, 'momentum': 0.593892} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:25] ax.service.ax_client: Completed trial 20 with data: {'accuracy': (0.872167, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:27] ax.service.ax_client: Generated new trial 21 with parameters {'lr': 0.000209, 'momentum': 0.334471} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:33] ax.service.ax_client: Completed trial 21 with data: {'accuracy': (0.907833, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:35] ax.modelbridge.base: Untransformed parameter 0.40000000000000013 greater than upper bound 0.4, clamping\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:35] ax.service.ax_client: Generated new trial 22 with parameters {'lr': 0.4, 'momentum': 1.0} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:41] ax.service.ax_client: Completed trial 22 with data: {'accuracy': (0.100333, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:43] ax.service.ax_client: Generated new trial 23 with parameters {'lr': 0.000144, 'momentum': 0.280262} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:50] ax.service.ax_client: Completed trial 23 with data: {'accuracy': (0.908, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:51] ax.service.ax_client: Generated new trial 24 with parameters {'lr': 9.4e-05, 'momentum': 0.422758} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:58] ax.service.ax_client: Completed trial 24 with data: {'accuracy': (0.8725, None)}.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:20:59] ax.service.ax_client: Generated new trial 25 with parameters {'lr': 0.00012, 'momentum': 0.510548} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:06] ax.service.ax_client: Completed trial 25 with data: {'accuracy': (0.909833, 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))" ] }, { "cell_type": "markdown", "id": "d7c1b3f6", "metadata": { "customInput": null, "originalKey": "ccd16059-db9f-475b-b527-75afb320e0f4", "papermill": { "duration": 0.046815, "end_time": "2024-11-13T05:21:06.636532", "exception": false, "start_time": "2024-11-13T05:21:06.589717", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "07216be9", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:06.731801Z", "iopub.status.busy": "2024-11-13T05:21:06.731303Z", "iopub.status.idle": "2024-11-13T05:21:06.737991Z", "shell.execute_reply": "2024-11-13T05:21:06.737346Z" }, "executionStartTime": 1690415945269, "executionStopTime": 1690415945336, "originalKey": "7182d2f9-912c-464c-b5ad-f65ce6f00017", "papermill": { "duration": 0.055975, "end_time": "2024-11-13T05:21:06.739316", "exception": false, "start_time": "2024-11-13T05:21:06.683341", "status": "completed" }, "requestMsgId": "4cb4ff79-e45b-4c7d-86a1-7f8007eb2c81", "showInput": true, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[(5, 5), (-1, 3)]" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ax_client.get_max_parallelism()" ] }, { "cell_type": "markdown", "id": "65a5eaf9", "metadata": { "customInput": null, "originalKey": "e2f429e6-2ec8-4af2-906b-52a36a53d329", "papermill": { "duration": 0.04745, "end_time": "2024-11-13T05:21:06.833677", "exception": false, "start_time": "2024-11-13T05:21:06.786227", "status": "completed" }, "showInput": false, "tags": [] }, "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", "id": "bc4132d4", "metadata": { "customInput": null, "originalKey": "86c7aef9-993a-411e-add5-05839b00d3cf", "papermill": { "duration": 0.047058, "end_time": "2024-11-13T05:21:06.928201", "exception": false, "start_time": "2024-11-13T05:21:06.881143", "status": "completed" }, "showInput": false, "tags": [] }, "source": [ "### How to view all existing trials during optimization?" ] }, { "cell_type": "code", "execution_count": 11, "id": "c840c7fd", "metadata": { "customInput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:07.024277Z", "iopub.status.busy": "2024-11-13T05:21:07.023790Z", "iopub.status.idle": "2024-11-13T05:21:07.052515Z", "shell.execute_reply": "2024-11-13T05:21:07.051850Z" }, "executionStartTime": 1690415945532, "executionStopTime": 1690415946199, "originalKey": "3fbad5dc-863a-494e-b04f-d7dc1e47936c", "papermill": { "duration": 0.078388, "end_time": "2024-11-13T05:21:07.053923", "exception": false, "start_time": "2024-11-13T05:21:06.975535", "status": "completed" }, "requestMsgId": "905ea8b6-add0-473e-8516-5be6ad7d7658", "showInput": true, "tags": [] }, "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \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.8843330.0000900.335441
333_0COMPLETEDSobol0.6786670.0000020.902833
444_0COMPLETEDSobol0.1003330.1017400.065787
555_0COMPLETEDSobol0.0881670.0170040.802601
666_0COMPLETEDBoTorch0.7740000.0000350.000000
777_0COMPLETEDBoTorch0.8945000.0000831.000000
888_0COMPLETEDBoTorch0.8150000.0000451.000000
999_0COMPLETEDBoTorch0.7258330.0001731.000000
101010_0COMPLETEDBoTorch0.8366670.0000251.000000
111111_0COMPLETEDBoTorch0.8930000.0000500.623798
121212_0COMPLETEDBoTorch0.9010000.0001470.000000
131313_0COMPLETEDBoTorch0.8303330.0002850.000000
141414_0COMPLETEDBoTorch0.7695000.0001070.000000
151515_0COMPLETEDBoTorch0.9120000.0000960.503227
161616_0COMPLETEDBoTorch0.9131670.0001430.416516
171717_0COMPLETEDBoTorch0.8746670.0000720.488424
181818_0COMPLETEDBoTorch0.1358330.0000010.000000
191919_0COMPLETEDBoTorch0.9093330.0001140.374579
202020_0COMPLETEDBoTorch0.8721670.0000760.593892
212121_0COMPLETEDBoTorch0.9078330.0002090.334471
222222_0COMPLETEDBoTorch0.1003330.4000001.000000
232323_0COMPLETEDBoTorch0.9080000.0001440.280262
242424_0COMPLETEDBoTorch0.8725000.0000940.422758
252525_0COMPLETEDBoTorch0.9098330.0001200.510548
\n", "
" ], "text/plain": [ " trial_index arm_name trial_status generation_method accuracy lr \\\n", "0 0 0_0 COMPLETED Manual 0.841833 0.000026 \n", "1 1 1_0 COMPLETED Sobol 0.100333 0.009955 \n", "2 2 2_0 COMPLETED Sobol 0.884333 0.000090 \n", "3 3 3_0 COMPLETED Sobol 0.678667 0.000002 \n", "4 4 4_0 COMPLETED Sobol 0.100333 0.101740 \n", "5 5 5_0 COMPLETED Sobol 0.088167 0.017004 \n", "6 6 6_0 COMPLETED BoTorch 0.774000 0.000035 \n", "7 7 7_0 COMPLETED BoTorch 0.894500 0.000083 \n", "8 8 8_0 COMPLETED BoTorch 0.815000 0.000045 \n", "9 9 9_0 COMPLETED BoTorch 0.725833 0.000173 \n", "10 10 10_0 COMPLETED BoTorch 0.836667 0.000025 \n", "11 11 11_0 COMPLETED BoTorch 0.893000 0.000050 \n", "12 12 12_0 COMPLETED BoTorch 0.901000 0.000147 \n", "13 13 13_0 COMPLETED BoTorch 0.830333 0.000285 \n", "14 14 14_0 COMPLETED BoTorch 0.769500 0.000107 \n", "15 15 15_0 COMPLETED BoTorch 0.912000 0.000096 \n", "16 16 16_0 COMPLETED BoTorch 0.913167 0.000143 \n", "17 17 17_0 COMPLETED BoTorch 0.874667 0.000072 \n", "18 18 18_0 COMPLETED BoTorch 0.135833 0.000001 \n", "19 19 19_0 COMPLETED BoTorch 0.909333 0.000114 \n", "20 20 20_0 COMPLETED BoTorch 0.872167 0.000076 \n", "21 21 21_0 COMPLETED BoTorch 0.907833 0.000209 \n", "22 22 22_0 COMPLETED BoTorch 0.100333 0.400000 \n", "23 23 23_0 COMPLETED BoTorch 0.908000 0.000144 \n", "24 24 24_0 COMPLETED BoTorch 0.872500 0.000094 \n", "25 25 25_0 COMPLETED BoTorch 0.909833 0.000120 \n", "\n", " momentum \n", "0 0.580000 \n", "1 0.633423 \n", "2 0.335441 \n", "3 0.902833 \n", "4 0.065787 \n", "5 0.802601 \n", "6 0.000000 \n", "7 1.000000 \n", "8 1.000000 \n", "9 1.000000 \n", "10 1.000000 \n", "11 0.623798 \n", "12 0.000000 \n", "13 0.000000 \n", "14 0.000000 \n", "15 0.503227 \n", "16 0.416516 \n", "17 0.488424 \n", "18 0.000000 \n", "19 0.374579 \n", "20 0.593892 \n", "21 0.334471 \n", "22 1.000000 \n", "23 0.280262 \n", "24 0.422758 \n", "25 0.510548 " ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "ax_client.get_trials_data_frame()" ] }, { "cell_type": "markdown", "id": "5ec16aaa", "metadata": { "customInput": null, "originalKey": "9f1ebc55-e6f2-498f-9185-569227c2f3d5", "papermill": { "duration": 0.047505, "end_time": "2024-11-13T05:21:07.148926", "exception": false, "start_time": "2024-11-13T05:21:07.101421", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "cbad85b5", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:07.244893Z", "iopub.status.busy": "2024-11-13T05:21:07.244393Z", "iopub.status.idle": "2024-11-13T05:21:07.554289Z", "shell.execute_reply": "2024-11-13T05:21:07.553609Z" }, "executionStartTime": 1690415946312, "executionStopTime": 1690415949198, "originalKey": "8fdf0023-2bf5-4cdd-93ea-a8a708dc6845", "papermill": { "duration": 0.359856, "end_time": "2024-11-13T05:21:07.555863", "exception": false, "start_time": "2024-11-13T05:21:07.196007", "status": "completed" }, "requestMsgId": "c0b8c25d-c6ae-476e-be23-f1b963df296b", "showInput": true, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'lr': 9.561769566800182e-05, 'momentum': 0.5032271284595418}" ] }, "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, "id": "e66d1f3a", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:07.652553Z", "iopub.status.busy": "2024-11-13T05:21:07.651982Z", "iopub.status.idle": "2024-11-13T05:21:07.656655Z", "shell.execute_reply": "2024-11-13T05:21:07.656041Z" }, "executionStartTime": 1690415949308, "executionStopTime": 1690415949313, "originalKey": "f3eb18fc-be99-494a-aeac-e9b05a3bc182", "papermill": { "duration": 0.054324, "end_time": "2024-11-13T05:21:07.657943", "exception": false, "start_time": "2024-11-13T05:21:07.603619", "status": "completed" }, "requestMsgId": "ac214ea0-ea8c-46f2-a988-b42893ef6d6d", "showInput": true, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'accuracy': 0.8968564237649731}" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "mean, covariance = values\n", "mean" ] }, { "cell_type": "markdown", "id": "f4f3d0a9", "metadata": { "customInput": null, "originalKey": "6be3b006-d090-4c73-a64a-12901d1af817", "papermill": { "duration": 0.047407, "end_time": "2024-11-13T05:21:07.752505", "exception": false, "start_time": "2024-11-13T05:21:07.705098", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "22a548cf", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:07.849358Z", "iopub.status.busy": "2024-11-13T05:21:07.848703Z", "iopub.status.idle": "2024-11-13T05:21:08.460479Z", "shell.execute_reply": "2024-11-13T05:21:08.459705Z" }, "executionStartTime": 1690415949431, "executionStopTime": 1690415953540, "originalKey": "1beca759-2fa5-48d1-bfed-c9b13a054733", "papermill": { "duration": 0.664824, "end_time": "2024-11-13T05:21:08.464935", "exception": false, "start_time": "2024-11-13T05:21:07.800111", "status": "completed" }, "requestMsgId": "fa48963e-b43c-4079-81a4-079d347fe9ba", "showInput": true, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:07] 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.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.0, "rgb(0,68,27)" ] ], "contours": { "coloring": "heatmap" }, "hoverinfo": "x+y+z", "ncontours": 25, "type": "contour", "x": [ 1e-06, 1.3011511650442548e-06, 1.692994354296022e-06, 2.2028415765056147e-06, 2.866229883678204e-06, 3.729398352432554e-06, 4.852511011181743e-06, 6.3138503555892e-06, 8.215273746089953e-06, 1.0689313005882424e-05, 1.390841207112662e-05, 1.809694657026198e-05, 2.354686311364001e-05, 3.063802837345029e-05, 3.986470631277378e-05, 5.1870009063012666e-05, 6.749072272319499e-05, 8.781563250096393e-05, 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, 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.0 ], "yaxis": "y", "z": [ [ 0.4795967327402785, 0.4899819022547625, 0.5028523612189251, 0.5181961952431948, 0.5359363282349301, 0.5559256507499595, 0.5779440365172974, 0.6016976448269054, 0.6268208613044076, 0.6528811521992685, 0.6793869965234844, 0.7057989181351954, 0.7315434716167518, 0.7560298505615997, 0.778668596856393, 0.7988917092985919, 0.816173295182667, 0.8300497947819632, 0.8401387495058961, 0.8461550900138906, 0.847923996015901, 0.8453895244715534, 0.8386184109160636, 0.8277987073437552, 0.8132332121320434, 0.795327951971204, 0.7745762699979701, 0.7515393359200213, 0.726824102813554, 0.70105987562031, 0.6748747179453003, 0.6488729028751525, 0.6236145132969069, 0.5995981270788839, 0.5772472973434629, 0.5569012766864628, 0.5388101574641232, 0.523134329263006, 0.5099479088411135, 0.49924559340861846, 0.49095223691733675, 0.4849343577403342, 0.4810127561277089, 0.47897544750620136, 0.4785901951813742, 0.47961604224978505, 0.4818133845577209, 0.48495228076196917, 0.4888188489853337, 0.4932197409060539 ], [ 0.4823542219957906, 0.4930058188532123, 0.5061504282155651, 0.5217727306858735, 0.5397915667944164, 0.5600550955145913, 0.5823378774939036, 0.6063402829086542, 0.6316905763803049, 0.6579499513754072, 0.6846206729707378, 0.7111573429540301, 0.7369811306277528, 0.7614966256223134, 0.7841107778962257, 0.8042532096226518, 0.8213970296695774, 0.8350791693387052, 0.8449192014151901, 0.8506356133331909, 0.8520585844601587, 0.8491384664684776, 0.8419493777086561, 0.8306875847890104, 0.8156646396038658, 0.7972955467020992, 0.7760825313199109, 0.7525952401472278, 0.7274484149105229, 0.7012782173605662, 0.6747184431828827, 0.6483778382179116, 0.6228196265241197, 0.5985441859775612, 0.5759755783932794, 0.5554523765794416, 0.5372229513731748, 0.5214451087890999, 0.508189720475503, 0.4974477859739447, 0.48914021459665413, 0.4831295246763436, 0.47923262975452935, 0.4772339111774365, 0.47689785651266947, 0.4779806619460696, 0.48024034121249554, 0.48344503991198273, 0.4873794091716488, 0.491849035144311 ], [ 0.4852255745442548, 0.49614071953341754, 0.5095547126803603, 0.5254487209061374, 0.5437374296984533, 0.5642642387777268, 0.5867984184356196, 0.61103462826186, 0.6365951501748877, 0.6630351050405371, 0.6898508059097928, 0.7164912534019894, 0.7423726059113632, 0.7668952685736362, 0.7894630528707569, 0.8095036782269435, 0.8264897338570425, 0.83995910891916, 0.8495338450829281, 0.8549363777211317, 0.8560022149159354, 0.8526882563933544, 0.8450761702835917, 0.8333705113329664, 0.8178915620146116, 0.7990631865660023, 0.7773962843588478, 0.75346869065645, 0.7279025797137862, 0.7013405616495376, 0.6744217206617039, 0.6477588146982763, 0.6219177492122775, 0.5974002601180145, 0.5746305088868242, 0.5539460250986731, 0.5355931499601474, 0.5197268596703128, 0.5064145996733707, 0.4956435560482135, 0.48733064028570644, 0.48133437500310555, 0.4774678418538696, 0.4755118850645408, 0.47522784643635324, 0.47636922886593724, 0.4786918321422791, 0.48196206307493994, 0.4859632786967126, 0.4905001649004904 ], [ 0.4882072744000841, 0.49938269891657866, 0.5130608940929797, 0.5292194070882068, 0.54776870046732, 0.5685473920862955, 0.5913194909712693, 0.615774032293462, 0.641527462388491, 0.6681290395293878, 0.6950693972386198, 0.721792266906514, 0.7477091815069622, 0.7722167919304662, 0.7947162346416412, 0.8146338089847144, 0.8314420704553308, 0.8446803380505588, 0.8539735626772798, 0.8590485191284636, 0.8597463709374851, 0.8560308142672198, 0.84799122651552, 0.835840514326563, 0.819907656095931, 0.8006252443269944, 0.778512630259966, 0.7541555344926498, 0.7281831928653157, 0.7012442411308443, 0.6739825951472079, 0.6470145524629792, 0.6209082300457424, 0.5961662717724191, 0.5732125237633244, 0.5523831051305824, 0.5339220176519057, 0.5179811617469887, 0.5046243775913788, 0.49383492551662, 0.48552567069432784, 0.47955114988919006, 0.4757206737617104, 0.4738116526922602, 0.47358241897180325, 0.47478394186125544, 0.47716998097226365, 0.48050538363780515, 0.4845723901126407, 0.48917495504523123 ], [ 0.4912955509423401, 0.5027275994362783, 0.516664405942256, 0.5330797946637379, 0.5518799413765632, 0.5728986646678459, 0.5958947478058857, 0.6205516952961747, 0.6464802736541984, 0.6732240980889149, 0.7002684052424905, 0.727051999685528, 0.7529821848847877, 0.7774522977150485, 0.7998612721985382, 0.8196344781042519, 0.8362449293094064, 0.8492338507909692, 0.8582295449271679, 0.8629635168373428, 0.8632829091332694, 0.8591584571875802, 0.8506873991868181, 0.8380910473601155, 0.8217070295360127, 0.8019765218905349, 0.7794270912361733, 0.7546520258880633, 0.728287238115323, 0.7009869530157761, 0.6733994488038463, 0.6461440791555191, 0.6197906934890665, 0.5948423863707175, 0.5717222684563936, 0.550764678144141, 0.5322109669941539, 0.5162097145458957, 0.5028209791300771, 0.49202398688485527, 0.4837275130498219, 0.4777821240177923, 0.4739934263955404, 0.47213550617734185, 0.4719638284797009, 0.4732269943480701, 0.47567690228109033, 0.479077024165368, 0.48320866486984015, 0.4878752202316642 ], [ 0.4944863867141098, 0.5061710201255585, 0.5203604456000377, 0.5370246643706643, 0.5560655057946977, 0.5773119771326578, 0.6005176778600751, 0.6253606830806504, 0.6514462436963975, 0.6783125605705083, 0.7054397657968124, 0.7322620894043557, 0.7581830109646173, 0.7825930027082331, 0.8048892769771702, 0.824496771313084, 0.8408894552169384, 0.8536109389217548, 0.8622933194087515, 0.8666732215474139, 0.866604086751132, 0.8620639261145077, 0.8531579816873263, 0.8401160146086329, 0.8232842437293542, 0.8031122712502414, 0.7801356295436248, 0.7549548431413845, 0.7282121020256012, 0.7005667715775115, 0.6726710114921425, 0.6451467380707163, 0.6185650458923886, 0.5934290166838331, 0.5701606013096953, 0.5490919850148024, 0.5304615580739165, 0.5144143354993411, 0.5010064201492763, 0.4902128996862175, 0.4819384208822149, 0.4760296009234369, 0.4722884152996774, 0.47048574112141067, 0.4703743245220304, 0.47170056923362824, 0.47421469667558813, 0.47767899168523575, 0.4818740088581692, 0.48660276072386366 ], [ 0.4977755260292598, 0.5097083262054618, 0.5241439849788943, 0.5410485840656186, 0.5603195512307861, 0.5817810758280598, 0.6051816219897148, 0.6301939441019673, 0.6564179498840099, 0.6833866634044363, 0.7105754137282282, 0.737414217857086, 0.7633031460173121, 0.7876302634366936, 0.8097915487638537, 0.8292120104795451, 0.8453670750380489, 0.8578032192927657, 0.8661567778553143, 0.870169882368536, 0.8697025880684912, 0.8647404113774486, 0.8553967323695127, 0.8419097937874529, 0.824634335112467, 0.8040282140168972, 0.7806346650557826, 0.7550611041306146, 0.7279555873587165, 0.6999821593983175, 0.671796369898316, 0.6440221952311398, 0.6172314806149457, 0.5919268261253383, 0.5685285952128014, 0.5473664461692067, 0.5286754973599463, 0.5125969576740216, 0.49918280427805944, 0.4884038865601605, 0.48016068954887153, 0.47429590812670036, 0.4706079655379348, 0.46886465139144706, 0.4688161466413757, 0.4702068337865704, 0.47278544582559395, 0.4763132729438368, 0.4805703079250628, 0.48535935820426207 ], [ 0.5011584843608115, 0.5133346594456418, 0.528009781940175, 0.5451459212518447, 0.56463605304873, 0.58629954779625, 0.6098797892312986, 0.6350443270194311, 0.661387906110748, 0.6884386197820147, 0.7156673042525493, 0.7425001335841175, 0.7683341913543444, 0.7925556007949939, 0.8145596010797086, 0.8337717795599567, 0.8496695239809845, 0.8618026602013987, 0.8698122023698047, 0.8734461725987352, 0.8725715494667836, 0.8671815767839481, 0.8573978974435588, 0.8434672576072315, 0.8257528349802652, 0.8047205594311827, 0.7809210913451642, 0.7549683803770637, 0.727515925079446, 0.6992319773053236, 0.6707749754413794, 0.6427704453395745, 0.6157904821298558, 0.5903367311433148, 0.56682753843695, 0.5455896610376743, 0.5268546359546286, 0.5107596270089083, 0.497352319323586, 0.4865992290104623, 0.47839665150986194, 0.47258339208075273, 0.468954406449124, 0.46727452380439594, 0.4672915190765278, 0.46874793446729424, 0.47139120747546176, 0.47498182964933355, 0.47929942338558656, 0.48414677157389213 ], [ 0.5046305584819178, 0.517044949264418, 0.5319523924157717, 0.5493108562815037, 0.5690088188023015, 0.5908608362843668, 0.614605273516025, 0.6399045986268004, 0.6663485819332777, 0.6934606399700551, 0.7207074344077091, 0.7475116743377832, 0.7732678867111981, 0.7973607242027935, 0.819185185939808, 0.8381679497623717, 0.8537888709511977, 0.8656016066905765, 0.8732522904237342, 0.8764952141709527, 0.8752045830748045, 0.8693815822172848, 0.8591562323029209, 0.8447837936235697, 0.8266357876842356, 0.8051860207680166, 0.7809922901882391, 0.7546747095842067, 0.7268917849008054, 0.6983154929361471, 0.6696066509079772, 0.6413918165666722, 0.6142428290778967, 0.5886599026782393, 0.5650589346541229, 0.543763406804788, 0.5250009672538035, 0.5089044990638967, 0.4955172332849307, 0.48480126285293484, 0.47664867136687605, 0.47089441294465423, 0.4673300662817877, 0.4657176327331537, 0.4658026454319667, 0.46732599173593764, 0.4700340104492188, 0.4736865937176299, 0.4780631875396224, 0.48296673275953267 ], [ 0.5081868373272527, 0.5208339245325431, 0.5359661832039446, 0.5535373961884535, 0.5734315031423414, 0.5954582567532256, 0.619351070793749, 0.6447674620885054, 0.671292421897135, 0.6984449516815963, 0.7256878643999316, 0.7524407893086242, 0.7780961332318327, 0.8020375551994254, 0.8236603178851403, 0.8423927038211081, 0.8577175428552887, 0.8691928046552563, 0.8764701785312726, 0.8793106006577691, 0.8775957988716658, 0.8713351046164148, 0.8606670211776103, 0.8458553223834547, 0.8272797671204699, 0.8054218300473452, 0.7808461444157979, 0.7541786065817381, 0.7260822843134433, 0.6972323878817375, 0.6682915957709409, 0.6398869741381956, 0.6125895962428087, 0.5868977666671042, 0.5632245021267058, 0.5418896364517266, 0.523116624013833, 0.5070338352834457, 0.49367988998026235, 0.4830123733642823, 0.47491914067986324, 0.46923133919944604, 0.4657372667254237, 0.46419623465184384, 0.46435170331928804, 0.46594309485579277, 0.46871584966659724, 0.4724294625378689, 0.47686339921155824, 0.48182094254199165 ], [ 0.5118222135396036, 0.524696126042, 0.5400453453967524, 0.5578193891049383, 0.5778976232451665, 0.6000850133290997, 0.6241100965062256, 0.6496255754161622, 0.676211864979465, 0.7033838204267202, 0.7306007387817307, 0.7572795610259044, 0.7828110159631239, 0.8065782503805525, 0.8279772971884121, 0.8464385592801589, 0.8614483477557584, 0.8725694236522197, 0.8794594644931122, 0.8818864187295631, 0.8797398251467676, 0.8730373572386914, 0.8619260950197447, 0.846678313778137, 0.8276818914231459, 0.8054257509736946, 0.7804810490384598, 0.7534790726123002, 0.7250869960439572, 0.6959827633602202, 0.6668303901535193, 0.6382569226917922, 0.610832155425672, 0.5850520035784439, 0.5613261720589668, 0.5399704760874746, 0.5212038748282056, 0.5051499987819039, 0.49184270429773314, 0.481234990145406, 0.47321047257690496, 0.46759654212409846, 0.464178317356225, 0.46271256263885097, 0.4629408389890418, 0.464601296710251, 0.46743868118737436, 0.47121229427395345, 0.47570181932795985, 0.48071106641984046 ], [ 0.5155313956635834, 0.5286259195983698, 0.544183908393979, 0.5621505392132001, 0.5824005747090683, 0.6047342156410708, 0.6288752033476732, 0.6544715701187787, 0.6810993640772508, 0.7082695697674688, 0.735438307381201, 0.762020226847508, 0.7874048257704519, 0.8109752235845337, 0.8321287321384401, 0.8502983906879852, 0.864974496777647, 0.8757250783136835, 0.8822142281110266, 0.8842172679684124, 0.8816318272215146, 0.874484107113449, 0.8629298475338094, 0.8472498015200853, 0.827839835787092, 0.8051960900347707, 0.7798959205847622, 0.7525756029058747, 0.7239059538948779, 0.694567144382286, 0.6652239974075201, 0.6365030073789665, 0.6089721752010981, 0.5831245469675839, 0.5593660861056524, 0.5380082215695421, 0.51926512001895, 0.5032554496597266, 0.4900081570824783, 0.4794715817140687, 0.47152509617408805, 0.46599239014934196, 0.4626555100160756, 0.4612688208565841, 0.46157216197178824, 0.46330260865158235, 0.466204417301567, 0.47003690321868685, 0.4745801665487367, 0.47963873052294653 ], [ 0.5193089209456587, 0.5326175096926848, 0.5483757544560215, 0.5665244221808217, 0.5869336478638766, 0.6093988959849512, 0.6336391992495556, 0.6592980699593849, 0.6859474054696736, 0.7130946014014158, 0.7401929459032742, 0.766655199956307, 0.7918700805882852, 0.8152211672396189, 0.8361075603120309, 0.8539654506111118, 0.8682896246737664, 0.8786538482715375, 0.8847290502809353, 0.8862982789474715, 0.8832675243453169, 0.8756716906027373, 0.8636752492724548, 0.8475673956701848, 0.8277518433515854, 0.8047317056977902, 0.7790902045974789, 0.7514681924946989, 0.7225396569265469, 0.6929864823756829, 0.6634737652800953, 0.6346269136938772, 0.6070116195433244, 0.5811175810461701, 0.5573465930371462, 0.5360053344183936, 0.5173028869511365, 0.5013527398622599, 0.48817878967413936, 0.47772464984341645, 0.469865450823364, 0.4644212431082933, 0.46117111314415304, 0.45986717902734725, 0.4602477397474119, 0.46204899539997096, 0.46501492168305836, 0.46890505521711084, 0.4735001129672674, 0.4786055175900978 ], [ 0.52314916869716, 0.5366649537062924, 0.552614633745964, 0.5709345010266073, 0.5914900444368874, 0.6140720267534784, 0.6383948655256573, 0.6640977097505633, 0.6907485281834788, 0.7178514149993918, 0.7448571761252646, 0.7711770897824199, 0.7961995459227169, 0.81930907278694, 0.8399070687469641, 0.8574333893794113, 0.8713878089613949, 0.881350296505865, 0.8869990303797413, 0.8881251294934908, 0.884643204686802, 0.8765970269941428, 0.8641598597275433, 0.8476292931502909, 0.8274167340864519, 0.8040320156510286, 0.7780638812423524, 0.7501573402297934, 0.7209890719488742, 0.6912421562436339, 0.6615814256506016, 0.6326306660166611, 0.6049527453157664, 0.57903353726486, 0.555270244564825, 0.5339644370333494, 0.5153198247817375, 0.4994445075952205, 0.48635719811127665, 0.4759967236643643, 0.46823398020749957, 0.46288544640359, 0.45972736608102904, 0.45850976692500633, 0.4589695924618883, 0.46084237001126555, 0.4638720046241982, 0.4678184631755294, 0.4724632798948466, 0.47761296302491485 ], [ 0.527046374174587, 0.5407621766000223, 0.5568941798090535, 0.5753741423620864, 0.5960628945170479, 0.6187465380714896, 0.6431349751129994, 0.6688631541213328, 0.6954953431908968, 0.7225326277241565, 0.7494236856110253, 0.7755787217735978, 0.8003862545264984, 0.823232250098671, 0.8435209129348252, 0.8606962734818363, 0.8742635875499231, 0.8838094860386926, 0.8890198018690514, 0.8896940590585732, 0.8857557383499709, 0.8772576300597845, 0.8643818373554693, 0.8474342861856411, 0.8268339116308935, 0.8030970020471954, 0.7768174689922941, 0.748644050968635, 0.7192556342989942, 0.6893359718394709, 0.6595490928258423, 0.6305166248652145, 0.6027980986231349, 0.5768750899129372, 0.5531397903344657, 0.5318883072213134, 0.513318698657079, 0.4975334713134061, 0.48454602702092675, 0.4742903535513046, 0.46663312630227616, 0.46138732511146613, 0.4583264733655947, 0.4571986689023761, 0.45773968771076146, 0.45968458893184216, 0.4627774183687765, 0.46677878267253425, 0.47147123374462896, 0.4766625510440688 ], [ 0.5309946429293805, 0.5449029860369758, 0.5612079254360223, 0.5798366329521983, 0.6006452737581384, 0.6234153355740468, 0.6478523108439033, 0.6735871161881861, 0.7001805523705928, 0.7271309933584441, 0.7538853468704105, 0.779853156439077, 0.8044235251710312, 0.8269843458154315, 0.8469431345579543, 0.8637486025377115, 0.876911974786034, 0.886026994901648, 0.8907875460472751, 0.8910018811360576, 0.8866025883542779, 0.8776516175250595, 0.8643399474854427, 0.8469817686313335, 0.8260033680450589, 0.8019272147147203, 0.775352026359212, 0.7469298359122367, 0.717341246888993, 0.6872701598473806, 0.6573792603889423, 0.6282874828556658, 0.6005505100308229, 0.5746451507435186, 0.5509581720997626, 0.5297798720532194, 0.511302383376049, 0.4956224233015132, 0.4827479632133915, 0.47260810481194176, 0.46506532322705535, 0.45992917804381817, 0.4569705990454962, 0.4559359184743781, 0.4565599354085601, 0.4585774471588399, 0.4617328525605629, 0.46578760768809585, 0.4705254820299862, 0.4757557109315788 ], [ 0.5349879655773951, 0.549081087886467, 0.5655493188551398, 0.5843151965375024, 0.6052302207608132, 0.628071318265045, 0.6525396836845824, 0.6782623760637171, 0.7047969671634133, 0.7316394209727992, 0.758235235893498, 0.7839937075957938, 0.8083049804441185, 0.8305593605321926, 0.8501681779007944, 0.8665853247754087, 0.8793284758503971, 0.8879989293143397, 0.8922990038902875, 0.8920459936646745, 0.8871818195271836, 0.8777777184005956, 0.8640335680694411, 0.8462717401470948, 0.8249256864442915, 0.8005237723126407, 0.7736691516549515, 0.7450167110787366, 0.7152482775162445, 0.6850473720668775, 0.6550747966041994, 0.625946259378114, 0.5982130886619103, 0.5723468626379188, 0.5487285170922225, 0.5276422010665978, 0.5092738565390864, 0.4937142228682153, 0.4809657290040721, 0.4709525512033335, 0.46353299100568507, 0.45851327178984114, 0.4556618610220001, 0.4547234929770515, 0.4554321827632531, 0.45752267352379405, 0.4607399298243054, 0.464846466466462, 0.46962746949187273, 0.4748938134126691 ], [ 0.5390202329365893, 0.5532901020551264, 0.5699117401966032, 0.5888030108592274, 0.60981075457274, 0.632707396393662, 0.6571899508759772, 0.6828817991372221, 0.7093375268562961, 0.7360509930659322, 0.7624666499920513, 0.7879939597496969, 0.8120245635069653, 0.8339516647674214, 0.8531909048721448, 0.8692018509573255, 0.8815090994477472, 0.8897219350187346, 0.8935514859298784, 0.8928243873746003, 0.8874921052676399, 0.8776352781409783, 0.863462693242768, 0.8453048081948137, 0.8236020414961088, 0.7988883614146796, 0.771770980772299, 0.7429071939096071, 0.7129795544372934, 0.6826706761064137, 0.6526389383873166, 0.6234962940005773, 0.5957892151877288, 0.5699835923276085, 0.5464541306078147, 0.525478498836107, 0.507236191205755, 0.4918117891768309, 0.47920207528581177, 0.46932626829738056, 0.462038529260488, 0.4571418347592279, 0.45440232545036907, 0.4535633083224477, 0.4543582093746362, 0.45652192611737313, 0.45980020149569845, 0.46395681752819773, 0.46877857436939513, 0.47407816716028656 ], [ 0.5430852514799727, 0.5575235785898629, 0.5742885181718098, 0.5932932248277845, 0.6143798922457494, 0.6373165092861376, 0.6617960339132336, 0.6874383540629041, 0.713795316429618, 0.7403589831129351, 0.7665731248841369, 0.7918477845490871, 0.8155765537488868, 0.8371560136560103, 0.8560066085815174, 0.8715940666974518, 0.8834503687402439, 0.8911932067235653, 0.8945428801285442, 0.8933356520388358, 0.8875327321490745, 0.8772242616041948, 0.8626279346746327, 0.8440821878437121, 0.8220341977701808, 0.7970232335180251, 0.7696601829865574, 0.7406042980136482, 0.7105383602146949, 0.6801435484993154, 0.6500752838575069, 0.6209412386204187, 0.5932825337335079, 0.5675589221970037, 0.5441384878348389, 0.5232920969372092, 0.505192548086396, 0.4899180937379893, 0.47745977437673676, 0.4677318267200665, 0.4605843108627136, 0.4558170512492431, 0.45319400121686454, 0.45245721386926274, 0.4533397224752204, 0.4555767878725167, 0.45891514351637747, 0.4631200458462271, 0.46798010482731317, 0.4733100154469572 ], [ 0.5471767590495953, 0.5617750139963491, 0.5786729469092784, 0.5977789757748768, 0.6189306663888262, 0.6418916430707605, 0.6663509363011098, 0.6919251303928345, 0.7181635839054533, 0.744556872459637, 0.7705484509614439, 0.7955493562513797, 0.8189555812834985, 0.8401675603126558, 0.8586110254196365, 0.8737583431254938, 0.8851493304824364, 0.8924104956218024, 0.8952716577187191, 0.8935789806033279, 0.8873036023407835, 0.8765452537962427, 0.8615305206987197, 0.8426056993785742, 0.8202245059419598, 0.7949311999823742, 0.7673399547877997, 0.7381115260629753, 0.7079284238546656, 0.6774698662630141, 0.6473877834950071, 0.6182850483887846, 0.5906969427260953, 0.5650766411950227, 0.5417852249514041, 0.5210864453314268, 0.5031461672959157, 0.4880361525916626, 0.47574161267000464, 0.4661717852896857, 0.45917267556338615, 0.4545410555581888, 0.4520388345134394, 0.451406987428816, 0.45237835233180357, 0.4546887623227788, 0.4580861525094447, 0.4623374592001815, 0.46723329555367393, 0.47259053295416403 ], [ 0.5512884407763554, 0.5660378677158774, 0.5830583028884416, 0.602253406729147, 0.6234561426559782, 0.6464258482346062, 0.6708477610238408, 0.6963353557936565, 0.7224357571366811, 0.7486383665045396, 0.774386688682845, 0.7990931661494264, 0.822156640235689, 0.8429818678186815, 0.8610003456002812, 0.8756915458593838, 0.8866035623246786, 0.8933721149534066, 0.8957368769842456, 0.893554171179363, 0.8868052338370351, 0.8755994583959563, 0.8601722932244112, 0.8408777637170092, 0.8181758968609238, 0.7926156249148091, 0.7648140117634844, 0.7354328608642648, 0.7051539112617939, 0.6746538969302229, 0.6445807299344496, 0.6155319714397459, 0.5880365847161233, 0.5625407348879465, 0.539398129524757, 0.5188651032046995, 0.5011003597002153, 0.48616901820776065, 0.4740503831131529, 0.4646486840801191, 0.4578059236288864, 0.45331592616786737, 0.45093870353101273, 0.45041433042561363, 0.4514756478253973, 0.45385926955210293, 0.45731454205042515, 0.461610284722742, 0.466539304540179, 0.47192082275088304 ], [ 0.5554139451496498, 0.5703055787028942, 0.5874378619122732, 0.6067096836553758, 0.6279494371084866, 0.6509122569515197, 0.6752797276694568, 0.7006624127880743, 0.7266054599796398, 0.7525974101132626, 0.7780821830419097, 0.8024740359085306, 0.8251751007744552, 0.8455949197918603, 0.8631712221279897, 0.8773910422560447, 0.8878111782605853, 0.8940769435948808, 0.8959381849717044, 0.8932616268919839, 0.8860387584937162, 0.8743886940657561, 0.8585557024399515, 0.8389013956522884, 0.8158918735047564, 0.7900804160260443, 0.7620865785605948, 0.732572754637428, 0.7022194140453288, 0.6717002870882726, 0.641658746431362, 0.6126865374618428, 0.5853058352122, 0.5599553746905422, 0.5369811302483616, 0.5166317292933408, 0.49905849788804263, 0.48431977113617386, 0.472388877545897, 0.4631650374358982, 0.45648630950590835, 0.45214368001762745, 0.4498954132919532, 0.4494808632312837, 0.450633072226613, 0.45308964235159804, 0.4566015391478523, 0.4609396656509751, 0.4658992100572307, 0.47130191345230804 ], [ 0.5595469001803715, 0.5745715820452373, 0.5918049160596836, 0.6111410125975598, 0.6324037333917791, 0.6553441001220335, 0.6796401891502819, 0.7048998549645198, 0.7306665277959911, 0.756428202214067, 0.7816295770605182, 0.8056871297704291, 0.8280067198526142, 0.8480031295055238, 0.8651207781635902, 0.8788547069184819, 0.8887708322029247, 0.8945244276665405, 0.8958758171290726, 0.8927023535884058, 0.8850059178827967, 0.8729153885646339, 0.856683799329489, 0.8366801949487815, 0.8133765008509823, 0.7873300134934204, 0.7591623769658405, 0.7295361165426509, 0.699129936719686, 0.6686140494702018, 0.6386267740456748, 0.6097535451555728, 0.5825092905697473, 0.5573249063166629, 0.5345382860561341, 0.5143900717348686, 0.4970240068031908, 0.48249151143867974, 0.47075987892622906, 0.4617233269663614, 0.4552160355406065, 0.45102626689244363, 0.4489106906420154, 0.44860812069012096, 0.44985199918292895, 0.45238112259813856, 0.45594828094692047, 0.4603266582949002, 0.4653140078348854, 0.4707347565691349 ], [ 0.5636809296004994, 0.5788293255690484, 0.5961527905588844, 0.6155406566667958, 0.6368122996681458, 0.6597147240673626, 0.683922647963327, 0.7090414226009517, 0.7346130222326787, 0.7601252095269696, 0.7850238242653276, 0.8087279655859311, 0.8306476506205662, 0.8502033475300858, 0.8668466127671322, 0.8800809254454878, 0.8894817196812049, 0.8947145801578062, 0.8955505948790452, 0.8918779554206039, 0.88370905698534, 0.8711825706901928, 0.8545602260363899, 0.8342183353273349, 0.8106343937076467, 0.7843693768756943, 0.7560466121516068, 0.7263282985053363, 0.6958908823496974, 0.6654005486483904, 0.6354900575925384, 0.6067380486259777, 0.5796517549819389, 0.5546538374945905, 0.5320737746565445, 0.5121439574835792, 0.49500035407391196, 0.48068734993649953, 0.4691661534755214, 0.46032599454660467, 0.45399724577678763, 0.44996556394722786, 0.44798617942150254, 0.4477975478538295, 0.44913370893351523, 0.4517348578688126, 0.4553558116688149, 0.459772229234727, 0.46478460846017655, 0.4702202240570757 ], [ 0.5678096690425234, 0.5830722863705721, 0.6004748605234026, 0.6199019528157316, 0.6411685052477747, 0.664017606821334, 0.688120771936521, 0.7130810576515311, 0.7384392452322747, 0.7636831793829914, 0.7882602001086406, 0.8115924246433528, 0.8330944504874375, 0.8521928678770578, 0.8683468050053906, 0.8810685964185405, 0.8899435776630822, 0.8946479785802055, 0.8949639211441199, 0.8907906283263259, 0.8821511157540443, 0.8691938600869356, 0.8521892041155503, 0.8315205513880803, 0.8076707025544538, 0.7812039701340844, 0.7527449571442596, 0.7229550793967686, 0.6925080366987978, 0.6620654853884104, 0.6322541304168803, 0.603645342764848, 0.5767382266247612, 0.55194682499621, 0.5295918805323707, 0.5098972813331444, 0.4929910400781767, 0.4789103993084826, 0.4676104427740437, 0.45897543535321084, 0.4528320198579206, 0.44896337038920386, 0.4471234358348372, 0.4470504959423168, 0.4484793847664519, 0.45115189830434543, 0.45482507979743353, 0.45927725275731773, 0.4643118350004412, 0.4697591060755115 ], [ 0.5719267821421805, 0.5872939872175091, 0.6047645674932041, 0.6242183283424413, 0.6454658368620524, 0.6682463739660253, 0.6922284094091469, 0.7170129180479305, 0.7421397522296203, 0.7670971515943811, 0.7913343123001253, 0.8142767602655244, 0.8353440878093065, 0.8539694326326279, 0.8696199164187718, 0.8818171316287268, 0.8901566825105073, 0.8943257606670311, 0.8941177738502047, 0.8894431514427187, 0.8803356185864007, 0.8669534549681267, 0.8495755207274723, 0.8285921235280307, 0.8044910974553422, 0.777839744823178, 0.749263535580022, 0.719422647636345, 0.6889875509456478, 0.6586148797274135, 0.628924798054004, 0.600480947682148, 0.5737738830125474, 0.5492086610326486, 0.5270969824547491, 0.507653994590672, 0.49099958778498326, 0.4771637650759191, 0.46609545583882456, 0.4576739909628627, 0.45172236705752933, 0.448021402339697, 0.4463239240370488, 0.4463682185465717, 0.4478901097322732, 0.4506331937336787, 0.4543569355242607, 0.4588425085415158, 0.4638964208614252, 0.4693521089634042 ], [ 0.5760259765084745, 0.5914880127633279, 0.6090154357243656, 0.6284833170679197, 0.649697914524814, 0.6723948139590594, 0.6962396037975089, 0.7208313912702056, 0.7457093644944294, 0.7703624693410073, 0.7942421100208905, 0.8167776051538469, 0.8373939471905137, 0.8555312350748432, 0.8706649918500612, 0.882326454554691, 0.890121846090217, 0.8937496181477207, 0.8930146974449764, 0.8878388764964693, 0.8782666617594092, 0.864466117808406, 0.8467245128366578, 0.8254388609203526, 0.8011017501126785, 0.7742831215240821, 0.7456089028218997, 0.7157375822888731, 0.6853359230416994, 0.655055052847612, 0.6255081208440547, 0.5972505922510388, 0.5707640656243453, 0.5464442590723269, 0.524593540562744, 0.5054180934486261, 0.4890295324132546, 0.47545053651078817, 0.4646238612161633, 0.4564239425419174, 0.4506702204621832, 0.4471412878961, 0.44558901195490125, 0.44575186808875433, 0.4473668636267825, 0.4501795910708775, 0.45395212846115174, 0.45846867960100807, 0.4635390078880248, 0.46899985343974965 ], [ 0.5801010195056846, 0.5956480255188948, 0.6132210881719988, 0.6326905751329506, 0.6538585069291466, 0.6764568929028575, 0.7001486074996951, 0.7245311071455158, 0.7491431805834278, 0.7734747890426209, 0.7969798919965065, 0.8190919774635648, 0.8392418333904482, 0.856876921275429, 0.8714815586449732, 0.8825969971106853, 0.889840410066715, 0.8929217886339715, 0.8916577924764297, 0.8859817152237802, 0.875948898886305, 0.8617371590738706, 0.8436420494862418, 0.8220670826313782, 0.7975093141420965, 0.7705409696005816, 0.741788025518989, 0.7119068327376803, 0.681559977788792, 0.6513926078213235, 0.622010395573326, 0.5939601968352933, 0.5677142638651772, 0.5436586391403324, 0.5220860830619896, 0.5031936071026941, 0.4870844109510125, 0.473773777504902, 0.46319827912128575, 0.4552275041548581, 0.44967743133084115, 0.4463245624140753, 0.44491996735952194, 0.4452024925536349, 0.4469105202550386, 0.44979183199446343, 0.4536113056297279, 0.45815635049238046, 0.46324014471458297, 0.46870287303499253 ], [ 0.5841457537930373, 0.5997677815269952, 0.6173752621125949, 0.6368338963619071, 0.6579415463295284, 0.6804267687087262, 0.7039498950963037, 0.7281069498364959, 0.7524365868696595, 0.77643008919129, 0.7995443134107417, 0.821217285600214, 0.840885973834484, 0.8580055901941305, 0.8720696242418925, 0.8826296946916796, 0.8893142384141991, 0.8918450456632272, 0.8900507032860142, 0.8838761248826155, 0.8733875244649381, 0.8587724190654613, 0.8403345122298024, 0.8184835969601447, 0.7937209036553512, 0.7666205853670113, 0.7378082596969029, 0.7079376970210971, 0.6776668457220417, 0.647634409309517, 0.6184381362201703, 0.5906158552719546, 0.5646300984295985, 0.5408569126607206, 0.5195791925979864, 0.5009845856651252, 0.48516775157840564, 0.472136517437814, 0.4618212736576655, 0.45408681621920716, 0.4487457636537045, 0.4455726640292481, 0.4443179542064274, 0.4447210325044723, 0.44652184498730285, 0.44947055091815113, 0.45333500973498775, 0.4579060057949726, 0.4630002853706687, 0.4684616127589176 ], [ 0.5881541125689405, 0.6038411456867497, 0.6214718243536637, 0.6409072271430388, 0.6619411428614218, 0.6842988046113823, 0.7076381758071837, 0.7315540689846969, 0.7555852671206743, 0.7792246781229268, 0.8019323916469584, 0.8231513317328941, 0.8423250197340384, 0.8589167922802504, 0.8724296721754334, 0.8824259795501866, 0.8885457081919471, 0.8905226869535862, 0.8881976038793177, 0.8815270919283716, 0.8705882555961894, 0.8555782479601651, 0.8368087738097731, 0.8146956790935044, 0.7897440702464783, 0.7625296687639679, 0.7336773274749666, 0.7038377989261979, 0.6736639408889661, 0.6437875623008298, 0.6147980538875981, 0.5872238161857525, 0.5615173041379562, 0.5380442669056736, 0.5170774923613624, 0.4987950879242503, 0.48328306303885216, 0.4705417420816018, 0.46049534514837376, 0.4530039391340332, 0.4478768889330179, 0.44488692943673647, 0.4437840292578015, 0.44430831839528495, 0.4462014926165731, 0.44921627326080266, 0.4531236777295994, 0.4577180288680624, 0.46281978814727237, 0.46827642800961916 ], [ 0.5921201344680932, 0.6078621066765959, 0.6255047859804551, 0.6449046807770263, 0.6658515982529929, 0.6880675819924431, 0.7112084051675396, 0.7348678899782731, 0.758585211101563, 0.7818552007115426, 0.8041415108492744, 0.8248923140256871, 0.843558045826842, 0.8596105266026631, 0.8725626565254957, 0.8819877725468809, 0.8875376986354465, 0.8889585209321571, 0.8861031820454636, 0.8789401139323965, 0.8675573119590788, 0.8521614841427685, 0.8330721751798972, 0.8107110471775495, 0.7855867784838715, 0.758276298644906, 0.729403292512215, 0.6996150639395103, 0.6695589376209874, 0.6398593899825616, 0.6110970360085713, 0.5837904637150323, 0.5583817123183474, 0.5352259491174554, 0.5145856319838527, 0.4966291690017872, 0.48143382400298584, 0.46899238458065423, 0.45922292261150627, 0.45198084710855935, 0.44707238120742404, 0.44426858994585966, 0.4433191390007664, 0.44396506819028825, 0.44595000552611636, 0.4490294140222107, 0.4529776396741795, 0.4575927008897988, 0.46269891472730923, 0.468147583727205 ], [ 0.5960379780614582, 0.6118247914263703, 0.6294683165916906, 0.6488205512479709, 0.669667418886336, 0.6917279124744613, 0.7146557958901921, 0.7380441233169169, 0.7614327221830268, 0.784318643974538, 0.8061694253007741, 0.8264388275941432, 0.8445845487545431, 0.8600872365360129, 0.8724699948502977, 0.8813174733242192, 0.886293578622938, 0.8871568516065363, 0.8837726218041349, 0.8761211798305951, 0.8643013941370307, 0.8485294309284885, 0.8291325009765903, 0.8065378369132555, 0.781257380017666, 0.7538689067829567, 0.7249945342900392, 0.695277694159623, 0.6653597463981262, 0.6358574108392274, 0.6073421249133912, 0.5803222977317557, 0.5552292328094842, 0.5324072503707348, 0.5121082732848299, 0.4944908679601537, 0.4796234724702794, 0.4674913165444113, 0.45800635641122733, 0.45101942221664265, 0.44633371234052055, 0.4437187678262737, 0.4429241168741843, 0.44369188530002607, 0.4457678121741558, 0.44891027667008193, 0.4528971178976682, 0.4575302001811833, 0.4626378295832851, 0.4680752537949316 ], [ 0.5999019359109347, 0.6157234790911068, 0.633356757978507, 0.6526493263735761, 0.6733833281684588, 0.6952748492502624, 0.7179758278843107, 0.7410787730509436, 0.764124423938969, 0.7866123415820144, 0.8080142616210645, 0.8277898641991975, 0.8454044441006185, 0.8603478040370183, 0.8721535596483936, 0.8804179489590962, 0.8848171925841066, 0.8851224618562309, 0.8812115842664137, 0.8730767485966557, 0.8608276603969144, 0.8446898317839273, 0.824997953550914, 0.8021845747907413, 0.776764586417945, 0.7493162507130352, 0.7204597213445249, 0.6908341422813322, 0.6610744889117867, 0.631789315077742, 0.60354049585155, 0.5768259136404938, 0.5520658356614861, 0.5295934892441159, 0.509650075929031, 0.4923841954123696, 0.47785539525318754, 0.4660413392906157, 0.4568479111153197, 0.4501214487019893, 0.4456622475932165, 0.4432384729605923, 0.44259968081528434, 0.44348925684243445, 0.4456552259015774, 0.44885905234232776, 0.4528822264606975, 0.4575306018172502, 0.4626365996439169, 0.468059520689504 ], [ 0.6037064481326366, 0.6195526144814343, 0.6371646372033626, 0.6563857002940141, 0.6769942781752946, 0.6987036976156784, 0.7211642574045611, 0.7439681442753814, 0.7666572657223689, 0.7887339772677431, 0.8096745197905251, 0.828944810696234, 0.8460180621171968, 0.8603935425507283, 0.8716156684008882, 0.8792925211569665, 0.8831128449241991, 0.8828605952275999, 0.8784261870023657, 0.8698137264411112, 0.8571437020291581, 0.8406508441601959, 0.8206771256790552, 0.7976601500824554, 0.7721174408648102, 0.7446273855293373, 0.7158077835661135, 0.6862930847650014, 0.6567114724340732, 0.6276629404813097, 0.5996994345628148, 0.5733079818432295, 0.548897532612972, 0.5267899953706152, 0.5072156830565544, 0.4903131211871628, 0.4761329175883364, 0.4646451752760575, 0.4557497585892799, 0.4492886075579598, 0.445059241498309, 0.4428285998172999, 0.442346431136079, 0.44335755223573353, 0.4456124440671976, 0.4488758193674959, 0.4529329709236357, 0.45759387752645714, 0.4626951942304346, 0.46810037538129884 ], [ 0.6074461154249311, 0.6233068209078986, 0.6408866790382574, 0.6600245852618649, 0.6804954605351448, 0.7020100246771394, 0.724217125308292, 0.7467088496638791, 0.7690285272124923, 0.7906815871439787, 0.8111490730134202, 0.8299034462621376, 0.8464261421748356, 0.860226188592272, 0.8708590722509416, 0.8779449520559199, 0.8811852830430359, 0.880376936322042, 0.8754229820144936, 0.8663394426436124, 0.8532575173631683, 0.8364210120578502, 0.8161789720747163, 0.7929737857207504, 0.767325288816131, 0.7398116347627327, 0.7110478836881424, 0.6816633943082575, 0.6522791636050005, 0.62348624779649, 0.5958263144942384, 0.5697752269581817, 0.5457303584237955, 0.5240020929373406, 0.5048097069463358, 0.48828156210167534, 0.47445929291877437, 0.46330545975098947, 0.4547139713560254, 0.448522471404661, 0.44452583405444374, 0.44248992475642496, 0.44216484873818057, 0.4432970221286882, 0.4456395475137938, 0.44896054310487016, 0.45304924841975047, 0.4577198958781384, 0.4628134852622352, 0.46819771748429584 ], [ 0.6111157115198094, 0.6269809123991534, 0.6445178177244825, 0.6635611226985432, 0.6838823165212151, 0.705189668209104, 0.7271307644021081, 0.74929781503126, 0.7712358219307068, 0.792453560926806, 0.8124371664367774, 0.8306659384281506, 0.8466298259744505, 0.8598478920549315, 0.8698869433831053, 0.8763794287147603, 0.879039679034009, 0.8776775898728306, 0.8722089324217952, 0.8626616241312649, 0.8491774845776452, 0.8320092374483891, 0.8115127798316403, 0.7881350081898209, 0.76239774778292, 0.7348785604662307, 0.7061893880890496, 0.6769541117399203, 0.6477861617512646, 0.6192672957597588, 0.5919285737611563, 0.5662344068818274, 0.5425703521432816, 0.5212350842047606, 0.5024367147741002, 0.4862933698936618, 0.47283769289051747, 0.4620247326724301, 0.45374251624911643, 0.4478244996847538, 0.44406304725527584, 0.44222310367904066, 0.4420552936732053, 0.44330779767237144, 0.4457365003667435, 0.4491130761044782, 0.4532308480327173, 0.4579084227567349, 0.46299124773048894, 0.468351355654535 ], [ 0.6147101950187598, 0.6305699052567155, 0.6480532080190273, 0.6669906934857583, 0.6871505463262365, 0.7082387446398349, 0.7299018058629556, 0.7517322839174715, 0.7732770997263515, 0.7940486420830811, 0.8135384147465259, 0.8312328379510857, 0.8466306495654715, 0.8592612053004348, 0.8687028611701811, 0.8746005463643105, 0.8766816101532834, 0.8747690586110861, 0.8687913879641204, 0.8587883689207086, 0.8449123334299963, 0.8274247506814278, 0.806688137928592, 0.783153616565706, 0.7573446763456507, 0.7298379326396922, 0.701241837035614, 0.6721744174581914, 0.6432411718519404, 0.6150142158711476, 0.5880136919510873, 0.5626922917837313, 0.5394235383939023, 0.5184942331157115, 0.5001012145252468, 0.48435231936426437, 0.4712711976056263, 0.4608054309103838, 0.45283724838611267, 0.4471960341980224, 0.4436717819681988, 0.4420286700302122, 0.4420180040545121, 0.44338989013615415, 0.4459031501657491, 0.4493331585859398, 0.4534774514764679, 0.4581591221203703, 0.4632281604372604, 0.46856100823495805 ], [ 0.618224720577035, 0.6340690289118962, 0.6514882354958655, 0.6703089274638206, 0.6902961174956, 0.7111536561476313, 0.732527184722584, 0.7540098211896554, 0.7751506482382136, 0.7954659269142547, 0.8144527986667212, 0.831605072559901, 0.846430534218878, 0.8584690710919389, 0.8673107971598831, 0.8726132905057566, 0.8741170381540285, 0.8716582200258509, 0.8651780594409174, 0.8547281185458012, 0.8404711160330025, 0.822677080010341, 0.8017149059324468, 0.7780396508410914, 0.7521761425474618, 0.7246996981272048, 0.6962149144964166, 0.6673336025365855, 0.6386529772675233, 0.6107351870231958, 0.5840891668697492, 0.5591556431237549, 0.5362959087499839, 0.5157847490636567, 0.4978076411222576, 0.4824620967813975, 0.4697627861728245, 0.4596498807796697, 0.4519999054872321, 0.44663829499325675, 0.44335281517550834, 0.44190703316349556, 0.4420530953245504, 0.44354319086921484, 0.446139228328766, 0.44962041923380647, 0.45378863407417913, 0.4584715570402318, 0.4635238069966703, 0.4688263041435475 ], [ 0.6216546494030808, 0.6374737360535363, 0.6548185260735091, 0.6735117121119123, 0.693315272498896, 0.7139310968532486, 0.735004144408029, 0.7561283156629288, 0.776855093341148, 0.796704862596489, 0.8151806603918984, 0.8317839396189289, 0.846031776208026, 0.8574748094344632, 0.8657150989778369, 0.8704230179440232, 0.8713522875845228, 0.8683523021271263, 0.861376992202081, 0.85048962959621, 0.8358631768100739, 0.8177760203720599, 0.7966031820376412, 0.7728033596738604, 0.7469023918021108, 0.7194739491220433, 0.6911184176559022, 0.6624410396218554, 0.634030412349152, 0.6064384100935667, 0.5801624913281722, 0.5556311927807078, 0.5331934032902701, 0.5131117708887296, 0.49556034282504613, 0.4806262885924422, 0.46831532759522265, 0.4585602909285251, 0.4512321025629356, 0.44615237663442614, 0.4431067975892904, 0.4418584770735601, 0.44216055988058406, 0.44376747160743796, 0.44644435094589535, 0.4499743763057635, 0.4541638660320005, 0.4588451910161039, 0.4638776770936084, 0.4691467840007514 ], [ 0.6249955590428772, 0.6407797119982965, 0.658039954743488, 0.6765952003888575, 0.6962045354232796, 0.7165680580978714, 0.7373302403344847, 0.7580859817442751, 0.7783893985912638, 0.7977652442003718, 0.8157226979864984, 0.8317710977529239, 0.8454370355540839, 0.8562821033913514, 0.8639204732271967, 0.8680354368477892, 0.8683940231524216, 0.8648588583239679, 0.8573965388117148, 0.8460819444949914, 0.8310981217629054, 0.8127316015588729, 0.7913632705820642, 0.7674551676998554, 0.741533814455624, 0.7141708914149547, 0.6859622262598158, 0.6575061537482824, 0.6293823350446561, 0.6021320826091465, 0.576241130069141, 0.55212562238051, 0.5301218924019653, 0.5104803511687207, 0.493363567961167, 0.4788483704933492, 0.4669315720330625, 0.45753874561345614, 0.4505353269923354, 0.4457392448564325, 0.4429342516496862, 0.44188315950191415, 0.4423402670600646, 0.44406238512413526, 0.44681801989966025, 0.45039443904881854, 0.45460251400197177, 0.4592793895623436, 0.4642891679945341, 0.46952190149127904 ], [ 0.6282432524220356, 0.6439828832784938, 0.661148653477766, 0.6795558177163681, 0.6989607177756288, 0.719061832799624, 0.7395033425506137, 0.7598813601076876, 0.7797528636868467, 0.7986472107172904, 0.8160799587890593, 0.8315685574827939, 0.8446493237964247, 0.8548949839487858, 0.861931967468401, 0.8654565859307835, 0.8652492262603456, 0.8611857415323595, 0.8532453310078782, 0.8415143616452593, 0.8261857871870795, 0.8075540559214744, 0.7860056491805072, 0.7620056425510013, 0.7360809131410155, 0.7088008125215082, 0.68075627192255, 0.6525383931921334, 0.6247175996172245, 0.597824373588403, 0.5723324969298947, 0.5486455429104522, 0.5270871589122683, 0.5078954408704506, 0.49122145204100504, 0.47713169689943746, 0.4656141424775426, 0.45658719838798606, 0.4499109340125572, 0.44539973362399604, 0.44283556991450956, 0.4419811114191323, 0.4425919634854163, 0.4444274662216106, 0.44725962430676397, 0.4508799094173746, 0.4551038429274444, 0.45977342205753663, 0.46475758630393593, 0.4699510249544813 ], [ 0.6313937661216662, 0.6470794254257481, 0.664141018296485, 0.6823902680902386, 0.7015809233840112, 0.7214100188852139, 0.7415216374399819, 0.761513317412316, 0.7809451219657714, 0.7993512401230666, 0.8162538318622716, 0.8311786709241676, 0.8436719908515372, 0.8533178140033472, 0.8597549513653894, 0.8626928128516113, 0.8619251708202046, 0.8573410776295411, 0.848932251083103, 0.8367964050773795, 0.82113620797212, 0.8022537857431279, 0.780540935617106, 0.7564654617199044, 0.7305542700650333, 0.7033740498236107, 0.6755105075259612, 0.6475472004888565, 0.62004502959104, 0.5935233986671052, 0.5684439323362277, 0.5451974747042494, 0.5240948806214193, 0.505361874424929, 0.4891380053110066, 0.4754794908610792, 0.46436552686975224, 0.45570746623095243, 0.44936014263725493, 0.44513454260540436, 0.4428110138464723, 0.4421522368853528, 0.44291527376647344, 0.44486213305919714, 0.4477684422751416, 0.4514299840858999, 0.4556670181632308, 0.46032646385008136, 0.4652821499591113, 0.47043343919668645 ], [ 0.6344433778672857, 0.6500657699320782, 0.6670137154808877, 0.6850955393084537, 0.7040625523925337, 0.7236105217968536, 0.7433836284858333, 0.7629810450788806, 0.7819661369636041, 0.7998781435127451, 0.8162460395332087, 0.8306041206039747, 0.8425087110267653, 0.8515552715501841, 0.8573950970868844, 0.8597507519312617, 0.8584293984553452, 0.8533332383728056, 0.844466402811392, 0.831937793728727, 0.815959585622763, 0.7968413304247081, 0.7749798546377076, 0.750845379411237, 0.7249645143648036, 0.697900958858856, 0.6702348768375561, 0.6425419837337377, 0.6153733910362003, 0.5892371956103448, 0.564582681220832, 0.5417878278801942, 0.5211506133088681, 0.5028843552872883, 0.48711710079563747, 0.4738948344651879, 0.4631880706965289, 0.4549012241379119, 0.44888403202048877, 0.44494423507097786, 0.4428607130025259, 0.442396313289207, 0.4433097015573446, 0.44536568881201993, 0.44834364296886126, 0.4520437567477588, 0.45629110786166127, 0.46093759861098244, 0.46586199045504806, 0.4709683475180534 ], [ 0.6373886132133391, 0.6529386103734651, 0.6697636869197232, 0.6876689073086956, 0.7064033043471549, 0.7256615560781262, 0.7450881361099034, 0.7642840571429885, 0.7828161980598288, 0.800229058343571, 0.8160586280709224, 0.8298479074528686, 0.8411634682576269, 0.8496123321514559, 0.8548583590530974, 0.8566373012889542, 0.8547696932006418, 0.8491708139014266, 0.8398570820477128, 0.8269484104879243, 0.810666256137694, 0.7913273336194993, 0.7693332047818989, 0.7451561935186604, 0.7193222896703744, 0.692391881889295, 0.6649392844736396, 0.6375320882842164, 0.6107113663025736, 0.5849737003110524, 0.5607558714559443, 0.5384228833119468, 0.5182597742814312, 0.5004674420398019, 0.48516246287616105, 0.4723806597609197, 0.46208397009269264, 0.4541700001969707, 0.448483538280111, 0.4448292362241938, 0.44298466462806385, 0.4427129919637234, 0.4437746309629874, 0.4459373236534028, 0.44898428897221626, 0.45272022069066736, 0.45697508561472366, 0.4616058209242304, 0.4664961552903542, 0.47155487394574747 ], [ 0.6402262514092432, 0.6556949076843369, 0.6723881545809146, 0.6901079396112187, 0.7086011803735374, 0.7275616460458801, 0.7466342965992863, 0.7654221872072013, 0.783495915242698, 0.8004054408259907, 0.815693957551205, 0.8289133380336754, 0.8396405406394519, 0.8474942507663629, 0.8521509531195326, 0.8533595994977802, 0.8509540558111391, 0.8448625849404434, 0.835113747125606, 0.8218382711346882, 0.8052666578808078, 0.7857225104550412, 0.763611825392468, 0.7394087128637888, 0.7136382220066422, 0.6868571168784205, 0.6596335663300321, 0.6325267689789642, 0.6060675283090683, 0.5807407233719699, 0.5569704928871395, 0.5351087742083057, 0.5154276265291938, 0.4981155350932996, 0.48327765645146903, 0.4709397402453129, 0.46105526547658593, 0.4535151711680522, 0.44815945179265126, 0.44478983197144983, 0.4431827336569623, 0.4431017991761483, 0.44430932828934483, 0.44657611705254635, 0.44968933894318974, 0.4534582716381942, 0.4577178333415194, 0.46233003910428105, 0.4671836106244025, 0.4721920656645127 ], [ 0.642953330436236, 0.6583318945748409, 0.6748846241037336, 0.6924104978665345, 0.7106544844514333, 0.7293096255585961, 0.7480215601386353, 0.7663955845167915, 0.7840062130260762, 0.8004090575051659, 0.8151546909606469, 0.8278040110679897, 0.8379444843256824, 0.8452065430252881, 0.8492793352902961, 0.8499250018620059, 0.8469906777897173, 0.8404174948244107, 0.830245989177474, 0.8166174933048979, 0.7997712995781162, 0.7800376149770041, 0.7578265639374111, 0.7336137248306904, 0.7079228881648783, 0.6813068870017186, 0.6543274605993836, 0.6275351629851332, 0.6014503154910447, 0.5765459273643097, 0.5532333770514148, 0.5318514683747315, 0.5126592635514751, 0.4958328640390211, 0.4814660767231299, 0.46957468294172583, 0.46010383574322333, 0.4529379585821697, 0.4479124149695121, 0.4448261681344817, 0.44345465311665266, 0.44356213748704754, 0.4449129441294898, 0.44728104037784966, 0.4504576505453596, 0.4542567108457278, 0.45851814440937544, 0.4631090782293466, 0.4679232441351169, 0.47287889563504293 ], [ 0.6455671512076774, 0.6608470790862142, 0.6772508875101659, 0.6945747395107595, 0.7125618237934593, 0.7309046368949164, 0.7492496879680394, 0.7672047091869919, 0.7843483235542694, 0.8002419760778042, 0.8144437825941071, 0.8265238033247004, 0.8360801168664078, 0.8427549660313456, 0.8462501800536455, 0.8463410564176204, 0.8428879152435257, 0.8358446214580381, 0.8252635025004198, 0.811296265608347, 0.7941907285708288, 0.7742834079470738, 0.7519882437762476, 0.7277819635258147, 0.7021867846702087, 0.6757513108120707, 0.6490305794898977, 0.6225662633809348, 0.5968680075043588, 0.5723968048521481, 0.5495511776586572, 0.5286567512254616, 0.5099595949114415, 0.49362347569944476, 0.47973093964354774, 0.4682879211009225, 0.4592313930365861, 0.45243942537480925, 0.44774292052204545, 0.4449382501074493, 0.4438000249356788, 0.4440932874725068, 0.44558451577686475, 0.4480509597950646, 0.451287983646269, 0.45511424843841564, 0.45937472697613313, 0.4639416833784678, 0.46871386806615584, 0.4736142653899325 ], [ 0.6480652809288174, 0.6632382472829395, 0.679485025037545, 0.6965991185348378, 0.7143221083393748, 0.7323461287591588, 0.7503187486898848, 0.7678503266122818, 0.7845237789332844, 0.7999065554912355, 0.8135644658014412, 0.825076854935502, 0.8340525000614972, 0.8401454987729093, 0.8430703584322747, 0.8426154797570274, 0.8386542626776754, 0.8311531493288148, 0.8201760550881954, 0.8058848170238352, 0.7885354994518916, 0.7684706251231744, 0.7461076324984057, 0.7219240785889002, 0.6964402974668669, 0.67020037317662, 0.6437523817555542, 0.6176288935759294, 0.5923287017797946, 0.5683006572669751, 0.5459303519111052, 0.5255302096108168, 0.5073333325739404, 0.4914912229228723, 0.47807527306266584, 0.467081707551495, 0.45843947811976127, 0.45202047306496224, 0.4476513102208248, 0.4451259429587332, 0.44421832114943977, 0.4446944098017343, 0.44632296995539156, 0.4488846394483299, 0.4521790037692914, 0.45602950697770966, 0.4602862075403649, 0.46482652305964955, 0.46955422245162487, 0.4743970079964037 ], [ 0.650445555615372, 0.6655034650837501, 0.6815854060978892, 0.6984823853771366, 0.7159345493801785, 0.7336338534336574, 0.7512291137508255, 0.7683335010907694, 0.7845344028291532, 0.7994054353734532, 0.8125202401407227, 0.8234675542033695, 0.8318669224031365, 0.8373843222306465, 0.8397469158401816, 0.8387561327775097, 0.8342983268328593, 0.8263523416843527, 0.8149934594468903, 0.8003933866928223, 0.7828161432093644, 0.7626099461460611, 0.7401954109568009, 0.7160506047755564, 0.6906936724379479, 0.6646638970964798, 0.6385021461426122, 0.6127316826661591, 0.587840291016467, 0.5642645747117983, 0.5423771427306122, 0.5224772165197159, 0.5047849780768576, 0.4894397541626148, 0.4765019086050439, 0.46595810872305327, 0.45772945635869605, 0.45168183948876844, 0.44763777415215633, 0.4453889719754949, 0.4447088854981268, 0.44536454766091227, 0.44712712585498443, 0.44978074491106657, 0.4531292857851155, 0.45700102524236413, 0.4612511346855827, 0.4657621928157336, 0.4704429785058887, 0.47522589117449754 ], [ 0.6527060817735497, 0.6676410792368478, 0.6835506893726291, 0.7002235859521025, 0.7173986573293538, 0.7347678631006361, 0.7519814521275685, 0.7686555886990553, 0.7843823013759297, 0.7987415248444351, 0.8113148579962872, 0.8217005219705606, 0.8295288811825993, 0.834477799261953, 0.8362870498368038, 0.8347709964513587, 0.8298288006712145, 0.8214515129842429, 0.8097255438085003, 0.7948321942288847, 0.7770431369955707, 0.7567119641514517, 0.7342621431145254, 0.7101719324266959, 0.6849569868707306, 0.6591515165149191, 0.6332889458514144, 0.6078830418155263, 0.5834104416972127, 0.5602954167688257, 0.5388975619583869, 0.519502916712604, 0.502318810581807, 0.4874725038774838, 0.47501347430538293, 0.46491899936224235, 0.4571025143323491, 0.4514240970940947, 0.4477023504725932, 0.44572692364710736, 0.4452709354091882, 0.4461026295127303, 0.44799569845980375, 0.4507378468927219, 0.45413731782812944, 0.4580272622090169, 0.46226798300388156, 0.46674721899412636, 0.4713787421655596, 0.4760996205589473 ] ], "zauto": true, "zmax": 0.8959381849717044, "zmin": -0.8959381849717044 }, { "autocolorscale": false, "autocontour": true, "colorbar": { "tickfont": { "size": 8 }, "ticksuffix": "", "x": 1, "y": 0.5 }, "colorscale": [ [ 0.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.0, "rgb(3,78,123)" ] ], "contours": { "coloring": "heatmap" }, "hoverinfo": "x+y+z", "ncontours": 25, "type": "contour", "x": [ 1e-06, 1.3011511650442548e-06, 1.692994354296022e-06, 2.2028415765056147e-06, 2.866229883678204e-06, 3.729398352432554e-06, 4.852511011181743e-06, 6.3138503555892e-06, 8.215273746089953e-06, 1.0689313005882424e-05, 1.390841207112662e-05, 1.809694657026198e-05, 2.354686311364001e-05, 3.063802837345029e-05, 3.986470631277378e-05, 5.1870009063012666e-05, 6.749072272319499e-05, 8.781563250096393e-05, 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, 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.0 ], "yaxis": "y2", "z": [ [ 0.03184069868151395, 0.03150564943173118, 0.032990870336542716, 0.03526353752857386, 0.03749762377774804, 0.03918232132885796, 0.040057635321283425, 0.040036527437397, 0.03914962204230841, 0.037507543104338154, 0.03527237997086179, 0.03263304420962722, 0.029782449703415634, 0.026897278643048944, 0.024124252433276518, 0.021580194986253614, 0.019374740747161275, 0.017659056432862093, 0.01668030963630593, 0.016771618191245223, 0.01820226869395949, 0.02099744342554295, 0.0249477357306648, 0.02975084457334065, 0.03510604405487122, 0.040738866209092874, 0.046400315700122555, 0.05186400257512261, 0.05692591326355989, 0.06140597242243946, 0.06515001278451285, 0.06803130882066655, 0.06995139700120516, 0.07084032957790658, 0.07065680745416354, 0.06938886394008449, 0.06705600510574333, 0.06371409311951064, 0.05946504306697708, 0.05447504426891836, 0.0490081019252162, 0.04348561034446629, 0.03857756426861376, 0.03527117031162678, 0.034683957345981835, 0.03741789387395335, 0.04310912789153234, 0.05086124610781986, 0.05983128602646437, 0.06940586169714114 ], [ 0.03159603680994887, 0.031175235488850473, 0.032593115937767585, 0.03481538355050302, 0.0370091378511554, 0.03865853196857607, 0.03950108783893826, 0.0394488400020819, 0.0385322340718988, 0.03686200610627377, 0.03460039825573251, 0.031936358694541506, 0.029062585415020412, 0.026155136489569828, 0.0233595613779551, 0.02079108321678936, 0.018558337172030977, 0.016815059033131234, 0.015818946748702604, 0.015919390672369218, 0.017388866981752755, 0.02023117849351115, 0.024211642931798387, 0.02901634988538847, 0.03434397294541429, 0.03992381231490218, 0.04551176639707998, 0.05088656485139137, 0.055849444602399344, 0.06022575064636684, 0.06386687264135706, 0.0666516339992485, 0.06848687058611592, 0.06930737783367445, 0.06907571011913637, 0.06778254396497743, 0.06544854850972456, 0.062129084643251564, 0.05792384440499836, 0.05299522480367982, 0.04760245984324463, 0.04216280266934745, 0.03734623237070881, 0.03414753855620966, 0.0336898697614573, 0.03655364904826194, 0.04233913063767214, 0.050139450344238404, 0.05912417376648747, 0.0686964067166837 ], [ 0.0315492569097891, 0.03103328573733791, 0.03236277778022899, 0.034511526629811724, 0.03664483523312537, 0.03824300210174202, 0.03904070077285861, 0.03894831985138517, 0.037995442524058246, 0.03629235362441819, 0.03400100634799555, 0.031310056433180036, 0.028411773010501237, 0.02548151114141098, 0.022663723463190136, 0.020072253815441064, 0.017815037368442248, 0.01604863012079685, 0.015041260743609548, 0.015157540410956733, 0.016669900106471805, 0.019557921304571794, 0.02356249288095121, 0.028360495533496687, 0.03365158490068727, 0.03916947497437719, 0.044675159298626387, 0.04995256875315173, 0.05480829497104316, 0.059073281331752985, 0.06260473868634005, 0.06528738518199576, 0.06703376993690599, 0.06778389526878131, 0.06750466327885166, 0.06618990281246527, 0.06386196376421836, 0.06057624053313402, 0.05643077775108556, 0.05158481630575825, 0.046293444378020396, 0.040969927481562106, 0.0362822622027542, 0.03322502327109787, 0.03291185775298957, 0.03589224068941388, 0.041739971863752855, 0.04955253271651869, 0.058519573885916026, 0.06806254198367938 ], [ 0.031683218578428915, 0.031064422715766656, 0.03228677563579303, 0.03434087001810582, 0.03639515808462644, 0.0379273524974606, 0.03866900018183251, 0.03852818547868365, 0.03753298597491903, 0.03579270011083442, 0.033468571368457024, 0.03074865188184887, 0.02782458824006317, 0.02487098148696038, 0.022031311088082463, 0.019418349349339892, 0.017139767486911265, 0.015355347380165018, 0.014343841922379424, 0.014483543540268849, 0.016042947800459617, 0.018974849024562014, 0.02299726541153439, 0.02778044557022052, 0.03302645788588835, 0.03847391847871521, 0.04388902392849811, 0.049060940242887596, 0.05380169537852039, 0.057948000855546036, 0.06136315488160565, 0.06393812705505336, 0.06559161312967468, 0.06626931332149948, 0.06594300517463902, 0.06461021642462772, 0.062295534883489045, 0.05905496408466288, 0.05498552071417539, 0.05024397535939002, 0.04508194471984837, 0.03990884732047282, 0.035388412984488846, 0.03250615115744038, 0.03234998192944008, 0.03543037968580039, 0.0413064016567166, 0.04909479090176425, 0.058012064555045956, 0.06749936794913357 ], [ 0.031977256236993046, 0.031249798729937422, 0.03234919216113018, 0.03429018763185101, 0.03624896935841478, 0.03770200891532626, 0.038377582074692974, 0.038180912268481075, 0.03713799638129898, 0.03535665658103722, 0.03299703714279159, 0.030246298807634405, 0.027295292841024707, 0.024317840923913567, 0.021456615604416116, 0.018823704080512482, 0.01652708383107188, 0.014730335075345173, 0.013722734880527807, 0.013894202677691082, 0.015504807098364, 0.018478419300494573, 0.022512405062648042, 0.027273008505914072, 0.032465947400477625, 0.03783507694909216, 0.04315182434885148, 0.04821058587224633, 0.05282888912791031, 0.056849376675560774, 0.06014170224766367, 0.06260345441251622, 0.0641599287534016, 0.06476304253001226, 0.06439001085477235, 0.06304264429014364, 0.06074836203399596, 0.0575643835254264, 0.05358733859164526, 0.04897221728333568, 0.04396779936375508, 0.03897962876584206, 0.034664388292598054, 0.03198879568252576, 0.03199884696926138, 0.03516016216195331, 0.041030045593307383, 0.04875856080462191, 0.057594980455966185, 0.0670011671423958 ], [ 0.03240848171933341, 0.0315682329299122, 0.03253209025901394, 0.03434467956967432, 0.03619394058164185, 0.03755648798934478, 0.03815733573891303, 0.037898416665255036, 0.036803158689708744, 0.03497747546649601, 0.03258006149367886, 0.029796925821154306, 0.026817973335010608, 0.023816243764236068, 0.02093380436822215, 0.018282511570542816, 0.01597134419964351, 0.014168421047606829, 0.013173552701644848, 0.013385706741161586, 0.015051544861174899, 0.018064450438153485, 0.022103907533419953, 0.026834709609932058, 0.031967241253706424, 0.037250795542717284, 0.04246199168860126, 0.047400420513257886, 0.051889157345343856, 0.05577693211241267, 0.05894002343826502, 0.06128301640628915, 0.06273827935671017, 0.06326449465506431, 0.0628449126664212, 0.06148624826904452, 0.05921937857482794, 0.05610336602545129, 0.05223509076790819, 0.047768402906956754, 0.04294973749347377, 0.038180395948241616, 0.03410657676173668, 0.031665927067243506, 0.03184762559398297, 0.035069338814607394, 0.04089968509223033, 0.04853441954963764, 0.057260548146268894, 0.06656149545145353 ], [ 0.032953063386734475, 0.03199737594459553, 0.032816376049466224, 0.03448856534581321, 0.036216965605763464, 0.0374797003903029, 0.03799867866118086, 0.037672248151247666, 0.03652087555828299, 0.03464819849145094, 0.03221115482801479, 0.029394371759380367, 0.02638667862005518, 0.02336035012697244, 0.020457077452272474, 0.01778899577893794, 0.015466890440704383, 0.013664315901134497, 0.012691623156491128, 0.012953731407704915, 0.014678597174351249, 0.017728236743536074, 0.021767423501107348, 0.026461869490967415, 0.03152741564164737, 0.03671887108098537, 0.04181795558852764, 0.04662939413528706, 0.05098184400915641, 0.054730271252450065, 0.05775784810621621, 0.05997654220596823, 0.06132628680621271, 0.06177310709530286, 0.061306923385501706, 0.05994001453808012, 0.05770737208579395, 0.054670537293202724, 0.050927245739017545, 0.04663074063678689, 0.04202535330863064, 0.03750726819016077, 0.03370800995459779, 0.03152579943567426, 0.03188060532005581, 0.035141933333703246, 0.04090169984396681, 0.048411455995098794, 0.05700005058702454, 0.0661732872582406 ], [ 0.033587326662782156, 0.03251475363721837, 0.033182606348178836, 0.03470565549896221, 0.036304565576228805, 0.03746024958739413, 0.03789178835538943, 0.0374937782298245, 0.03628342859759475, 0.03436180021446108, 0.031883813256260586, 0.029032514266683646, 0.02599554937862742, 0.022944461559195235, 0.0200208149917698, 0.017337574930786043, 0.015008229816781333, 0.013212801594505892, 0.01227215685838131, 0.012593575323622467, 0.014380910212356674, 0.01746469050723482, 0.021498372730391135, 0.026150684670007453, 0.03114349016038706, 0.03623709076357627, 0.04121817373748258, 0.045896517062831724, 0.05010638007397972, 0.0537091036971339, 0.0565950189124097, 0.05868386804012949, 0.05992365962134354, 0.0602883697120992, 0.05977526211058018, 0.05840287876926776, 0.056211009495050895, 0.05326430693924823, 0.049661905250229524, 0.04555680543757465, 0.04119111869297246, 0.036954396618398465, 0.03345856109693252, 0.031552563889805436, 0.032078167074444254, 0.035359113835430375, 0.041020620797283136, 0.048377586767253185, 0.05680401151590658, 0.0658289701839771 ], [ 0.03428859497547686, 0.03309860022076558, 0.033611670667317725, 0.03497985657691123, 0.036443257291377415, 0.03748670828937804, 0.037826818749424965, 0.03735437726168803, 0.036083128849361455, 0.0341113210358915, 0.031591640602911183, 0.02870538608337269, 0.02563893357642274, 0.022563140990017994, 0.01961970754914477, 0.016923008639823326, 0.014590203146470047, 0.012808915094783085, 0.011910423172815465, 0.012300320783389732, 0.014153110152184163, 0.017268498326213178, 0.021292060376518096, 0.02589730579790206, 0.030812479524360444, 0.03580326776363784, 0.04066115876548425, 0.045200883201123206, 0.04926230630639518, 0.05271326889001982, 0.05545151803511764, 0.05740496560645017, 0.05853022238268276, 0.05880985422418573, 0.058249183090344804, 0.056873754682752735, 0.05472886641381874, 0.0518828997176063, 0.0484368378019014, 0.044543575653527775, 0.040442437091196694, 0.03651410387935974, 0.0333453685831977, 0.031727207229529625, 0.03241801850831995, 0.03570018480411581, 0.0412397324842614, 0.048419893553468055, 0.056662389826167975, 0.06552058508325402 ], [ 0.03503575766813208, 0.03372845123527717, 0.03408531419588265, 0.03529558306938328, 0.036619866636870536, 0.037547859971506184, 0.037794092118126704, 0.037245572343187316, 0.035912451054019606, 0.033889985055790356, 0.0313284551622464, 0.028407275072265852, 0.025311483964642324, 0.02221131244638683, 0.019248863916820003, 0.016540520906257003, 0.014208129467287141, 0.01244811312878, 0.011601917559562521, 0.012069002783781202, 0.013989684796262532, 0.01713427776273003, 0.021143787470240972, 0.025697909555050868, 0.030531440063382244, 0.03541527269929107, 0.04014550188196004, 0.04454169078266162, 0.04844929447534687, 0.05174275975686857, 0.05432749403777571, 0.05613997185268771, 0.05714594734704885, 0.05733724638692193, 0.056728007713569124, 0.05535156616199981, 0.05325946079918914, 0.050524392694880675, 0.04724952153502572, 0.04358748777564439, 0.03977373836118866, 0.03617711887284754, 0.03335343119826901, 0.03202865938118805, 0.03287647807285844, 0.03614356727730919, 0.04154166615556653, 0.04852495858921434, 0.05656477458431361, 0.06523990712891495 ], [ 0.03580959675345339, 0.03438551204652139, 0.034586499419918044, 0.03563806754710897, 0.03682177851064885, 0.03763289858022833, 0.037784261198731475, 0.037159182005254185, 0.0357641482848382, 0.033691299906592934, 0.031088378679623087, 0.028132805651627363, 0.025008235253567143, 0.02188433792876023, 0.01890389304319113, 0.016185894192211687, 0.013857919655497323, 0.012126406131890864, 0.01134250442158631, 0.01189476847666756, 0.013885158032256163, 0.017056721027394136, 0.021048948686352726, 0.025548761025781963, 0.030297509508170787, 0.03507106022818662, 0.03966989279300078, 0.0439182602647202, 0.04766716656946755, 0.05079774539480079, 0.053223288947708836, 0.05488922014031647, 0.05577098844110345, 0.05587038123660631, 0.05521115996839183, 0.05383528318869516, 0.05180129110289042, 0.04918675835823618, 0.04609719627173704, 0.042684508396950795, 0.03917861112477201, 0.035932887295519966, 0.03346629858752244, 0.032434904393424786, 0.03342963761442114, 0.036667664706546255, 0.041908937390370306, 0.04867917916788419, 0.05650057258558322, 0.06497856429407461 ], [ 0.03659292553441275, 0.03505284247577372, 0.035099624860347976, 0.035993573853298384, 0.03703712286118031, 0.037731584599120065, 0.03778843951486278, 0.03708742596726091, 0.03563134546553625, 0.033509137349984605, 0.03086590658522372, 0.027877000847368955, 0.02472466026911119, 0.021578070689469528, 0.018580958921961103, 0.01585553234885035, 0.013536154442402857, 0.011840452661591101, 0.011128522298387684, 0.011773010578991232, 0.013834240351901166, 0.017030715100472667, 0.021003112360461613, 0.025446264338560235, 0.030107939091886346, 0.0347686902943104, 0.03923313559168921, 0.043330049091702974, 0.04691591174255057, 0.04987859254004854, 0.05213946538150996, 0.05365327280309859, 0.05440571784254159, 0.054409281756459524, 0.05369820577657874, 0.0523239619511198, 0.050352879130145536, 0.04786791366406998, 0.044976924280237654, 0.041830221778928346, 0.038649966238659426, 0.035769931112037516, 0.03366677589210194, 0.03292396373805916, 0.03405429677169604, 0.03725155533366597, 0.04232439872721701, 0.048869047440266836, 0.05645918212380105, 0.06472815018385562 ], [ 0.03737059511797735, 0.03571540594998968, 0.03561062956238217, 0.03634952661079689, 0.03725490229790626, 0.03783435959591253, 0.037798300694493726, 0.03702301024097226, 0.035507611940997, 0.033337794851864534, 0.030655959825247513, 0.027635325482283382, 0.02445670577972372, 0.02128888569177713, 0.018276809087334638, 0.015546492380548812, 0.013240125061699949, 0.011587609124121458, 0.010956842712259022, 0.01169946273979851, 0.013831943541050383, 0.017051431678825592, 0.02100207994782882, 0.025387000460480622, 0.029960117541008448, 0.034506343848699376, 0.03883416048161608, 0.04277666312353769, 0.04619570071573062, 0.048985885528055724, 0.051076833520432706, 0.05243295509809525, 0.0530507653892687, 0.05295420140604631, 0.052188896730421666, 0.05081678960810329, 0.04891281793485564, 0.04656577505858571, 0.04388565917867573, 0.04101993076765205, 0.03818022287996137, 0.03567622720670108, 0.033937573856311944, 0.03347467567170392, 0.034728631821102786, 0.03787549365373218, 0.04277159474618265, 0.049081387572535135, 0.05643014864123739, 0.0644803289127521 ], [ 0.03812941760805052, 0.0363600283482071, 0.03610701395084473, 0.03669457404531303, 0.03746507011155978, 0.03793242397450229, 0.037806149536936826, 0.03695918941689476, 0.035387014531838686, 0.033172039444836154, 0.030453919645729546, 0.02740371200980195, 0.02420080971105526, 0.02101368916533566, 0.017988778691141554, 0.015256486699056654, 0.012967837022483329, 0.011365933102850102, 0.010824879265745149, 0.011670250972405925, 0.013873653870339144, 0.017114384617979254, 0.0210419243334768, 0.025367752095347657, 0.029851587053508277, 0.03428233314866995, 0.038472031357508964, 0.042257864618891645, 0.04550689738905714, 0.04812044443203375, 0.05003647768598114, 0.051229390508961865, 0.051707061074906184, 0.051505671046415256, 0.050683218906631876, 0.04931313435630567, 0.04747982522204975, 0.04527831957732645, 0.04282032230605818, 0.040248768319622596, 0.03776150766665078, 0.0356395774200082, 0.03426185830531222, 0.03406724856525659, 0.035432614361118116, 0.03852123423003084, 0.04323502072181233, 0.049303547569216837, 0.05640329986435501, 0.06422693048558303 ], [ 0.03885804365568088, 0.03697530332392629, 0.0365778046891019, 0.03701860143355435, 0.037658568861472536, 0.03801778403145227, 0.03780496877503421, 0.03688980896294389, 0.03526415335164297, 0.0330071359335468, 0.03025564736934642, 0.027178571161577743, 0.023953902142148993, 0.02074990990972266, 0.01771477299724198, 0.014983858618607819, 0.012717979129489288, 0.011174141582540707, 0.010730548865205409, 0.01168190157740013, 0.0139551641515302, 0.017215456335411234, 0.021119008307732758, 0.025385516553684418, 0.029780051825987516, 0.03409510699703991, 0.0381459494212658, 0.04177357674737138, 0.0448500674354679, 0.04728334102478921, 0.04901978218622908, 0.050044037291045416, 0.05037588088300029, 0.0500645508826242, 0.04918144760318603, 0.047812601656860035, 0.0460528029228331, 0.04400365225969272, 0.04177788588212807, 0.039511816669836185, 0.037385857284649736, 0.03564794778976376, 0.03462367765734172, 0.03468360569009276, 0.03614822467542154, 0.039172208278545846, 0.04370029511582717, 0.04952354718795367, 0.05636885973440016, 0.06396003585777048 ], [ 0.039546820964633814, 0.03755147131133189, 0.037013485982231115, 0.03731271073210728, 0.037827339543253465, 0.038083274821776376, 0.0377884460105272, 0.03680933088521085, 0.03513418313861726, 0.032838861923642784, 0.03005749159387478, 0.02695678994412674, 0.02371339283994389, 0.020495475385410973, 0.017453231585283155, 0.014727534463372974, 0.012489860962438686, 0.011011527912508987, 0.010672191597385196, 0.011731311303156435, 0.01407266978779629, 0.01735089746276569, 0.02122998594086355, 0.02543750817426849, 0.029743380066763626, 0.033943251500882045, 0.037855253150557384, 0.041323884686046856, 0.044225983666864595, 0.04647591215288279, 0.04802845599156585, 0.048878726032729844, 0.04905889616732486, 0.04863208812240086, 0.04768420903904337, 0.04631509773308411, 0.04463090385778643, 0.04274008030129112, 0.04075546235691386, 0.03880423120932537, 0.03704541613795212, 0.03568976233417103, 0.03500826798272375, 0.03530756030906462, 0.03685951402118023, 0.03981358916524162, 0.04415426092205079, 0.04973018618707109, 0.05631754180136911, 0.06367205148049236 ], [ 0.04018765110595348, 0.03808029083253616, 0.037405914181731226, 0.037569179252147554, 0.037964310332095415, 0.038122565077343004, 0.03775098533989674, 0.03671284624489734, 0.03499282302289803, 0.03266351231825779, 0.029856285386731112, 0.026735719647185067, 0.02347714820501424, 0.020248775754030536, 0.017203077720799362, 0.014486955957150128, 0.012283322795167589, 0.010877843594243678, 0.010648459438733963, 0.011815689110908575, 0.014222736938178106, 0.017517305718805033, 0.021371790469243212, 0.02552115235324362, 0.029739600703732282, 0.03382548709986178, 0.03759941505574135, 0.040909033431248694, 0.04363562797629741, 0.04569977004257296, 0.047064555649328155, 0.04773569783305971, 0.04775822668070469, 0.04720998109628791, 0.0461925502654701, 0.04482090175685357, 0.043213606717775015, 0.04148619461344136, 0.03975039951050586, 0.03812136641309411, 0.036732622295757356, 0.035754144389984296, 0.035402249159960736, 0.03592486615493422, 0.03755256662793023, 0.04043228116798448, 0.04458503217006061, 0.04991311873710339, 0.05624062373306727, 0.06335577365432453 ], [ 0.04077385506472385, 0.03855491393933262, 0.03774822757063941, 0.03778140738212215, 0.03806337247854765, 0.0381301497711221, 0.03768770790423705, 0.03659607790644375, 0.034836357599498956, 0.032477895895493644, 0.02964933601705481, 0.02651315648084551, 0.023243460444032076, 0.020008618975640803, 0.01696365633863637, 0.014261996711370975, 0.012098622630251715, 0.01077315308887423, 0.010658186414400094, 0.011932480640781708, 0.014402252156066234, 0.01771159060950951, 0.021541612680032622, 0.025634073483543504, 0.02976689616053605, 0.03374066273233401, 0.037378035755455695, 0.04052942252565433, 0.04308018967445811, 0.04495680897625022, 0.046130505656444984, 0.04661764244520793, 0.046476497161270204, 0.04580045057188292, 0.044708018745181245, 0.04333074849543785, 0.04180080096943019, 0.04024095976269186, 0.03876038109136246, 0.0374589016201584, 0.036440377132792016, 0.03583110506649381, 0.035793732801977445, 0.03652318504466953, 0.03821540267994848, 0.041016860267990445, 0.04498200093321362, 0.05006290042874088, 0.056130005219774286, 0.06300444341465826 ], [ 0.04130005313328202, 0.03896977271002817, 0.03803475922454607, 0.037943862761666, 0.03811934944285859, 0.03810133510025217, 0.03759444513544544, 0.03645537661210539, 0.03466163198363115, 0.03227932642249729, 0.02943440961638744, 0.026287317301737424, 0.023011011620546272, 0.01977417991849556, 0.016734664002273338, 0.014052866765474022, 0.011936305844963732, 0.010697671864434781, 0.010700253906977715, 0.012079286503305801, 0.014608362687367815, 0.017930930375160123, 0.021736873742914883, 0.02577407915125958, 0.029823592637029852, 0.03368774807166197, 0.03719083596929738, 0.04018559796258272, 0.04256106005608891, 0.044249207691567455, 0.045229115277029816, 0.04552773539098696, 0.045216897065289884, 0.0444063188785229, 0.04323275323071818, 0.04184592358184826, 0.04039288373282834, 0.03900381361363143, 0.037783533053483295, 0.03681296504349253, 0.03616219621020428, 0.03591168313242299, 0.03617236433431516, 0.03709200557799317, 0.0388378526827226, 0.04155748902899436, 0.04533581803617391, 0.05017101420974157, 0.055978251885301485, 0.06261179296016622 ], [ 0.04176206163889159, 0.039320480400170055, 0.03826095789227217, 0.038052026168659076, 0.03812796398654424, 0.038032219821819015, 0.037467727942744104, 0.03628771312038442, 0.03446604325539943, 0.03206561053257223, 0.02920971294292791, 0.026056812671763976, 0.0227788350191552, 0.019544946246001237, 0.016516074114117877, 0.013860009356573194, 0.011797063974012563, 0.010651599669731098, 0.010773464464449744, 0.012253784247791404, 0.014838415484481636, 0.018172726866854512, 0.021955196098629264, 0.0259391428157001, 0.029908149301583854, 0.03366582477706535, 0.03703764706577609, 0.03987824158358991, 0.04207982305677247, 0.0435794267720508, 0.04436359052219992, 0.04446967259672387, 0.04398324254201525, 0.043031097173068404, 0.041769587661450176, 0.040368373970668996, 0.038990871164635316, 0.037774778372928274, 0.03681853573305767, 0.03618025499675153, 0.03589234085816082, 0.035988043507597545, 0.03652931987835179, 0.03762253809622402, 0.039411423886692484, 0.04204582134250697, 0.045638358099188245, 0.05022988105329347, 0.05577862791758953, 0.06217208482734029 ], [ 0.04215680708897826, 0.03960374874000989, 0.03842331978724677, 0.03810234273815215, 0.038085806790711954, 0.0379196761092078, 0.037304774563428275, 0.036090668769753635, 0.03424753040402642, 0.03183503433409883, 0.02897387418197471, 0.025820619254360536, 0.02254627602717732, 0.01932066365488017, 0.016308060598957255, 0.013683994430127912, 0.011681590322331114, 0.01063496214018971, 0.010876435702306283, 0.012453661756503812, 0.015089901346185458, 0.018434562995022948, 0.022194375484872658, 0.02612738695935378, 0.0300191476983217, 0.03367407766639936, 0.03691840081450236, 0.03960815833131989, 0.04163824189776025, 0.04295020023042935, 0.043537539714495414, 0.043447700524174966, 0.042780039021508814, 0.04167908062740828, 0.04032216970616247, 0.03890083648598305, 0.03759652736971287, 0.03655458508699009, 0.03586474254161679, 0.03555815788180156, 0.03562593142593817, 0.036053542739977205, 0.036857275168518944, 0.03810760321147681, 0.039929171798668235, 0.0424749076490349, 0.045882677080075304, 0.050232860420062184, 0.055525120078216604, 0.061680145129995645 ], [ 0.042482257242480975, 0.03981732162956967, 0.038519332838605584, 0.03809218094560756, 0.03799030926793803, 0.03776133245009889, 0.03710347933446347, 0.03586242647379372, 0.03400456459102844, 0.03158635046315529, 0.028725924473344138, 0.025578053318050045, 0.022312954515810814, 0.01910128286652324, 0.016110923269509345, 0.013525413807667414, 0.011590441174499177, 0.01064747382059631, 0.011007522950988757, 0.012676567336716724, 0.015360408781783028, 0.018714166245982915, 0.022452356554743272, 0.026337068374171768, 0.030155282508748993, 0.033711786638094085, 0.03683311897336378, 0.03937626175634295, 0.04123824167107791, 0.04236452045128438, 0.042754970762545044, 0.042466639072883776, 0.04161254176994442, 0.04035545037285444, 0.03889509515397062, 0.03744698753991953, 0.03621251427060177, 0.035344813899057546, 0.03492230587070552, 0.034944862902844064, 0.03535904418098717, 0.03610276983105209, 0.037150359840805836, 0.03854152497607632, 0.04038558430712847, 0.042839107338456146, 0.04606296833331167, 0.05017424478424518, 0.05521245560440359, 0.06113139224463098 ], [ 0.04273736807361276, 0.03995992481941116, 0.0385474341346442, 0.038019800981611326, 0.037839722566877496, 0.03755556059414462, 0.03686240424847897, 0.03560176384037506, 0.03373614128647471, 0.03131876705308484, 0.028465281631048566, 0.025328746899376132, 0.022078730500427905, 0.01888691062288777, 0.01592501808725031, 0.013384783297442507, 0.011523911996635232, 0.010688434145203918, 0.011164775596841103, 0.012920079317619829, 0.01564759046547699, 0.019009380646589524, 0.022727213894154982, 0.026566566888049155, 0.030315354601454604, 0.03377832005289852, 0.036781903295322264, 0.03918355820338709, 0.04088188789372156, 0.04182561567883283, 0.04202027801104175, 0.041531893736113094, 0.04048681040397131, 0.03906637952497086, 0.03749405836418864, 0.03601161688694793, 0.03484256602017221, 0.03414805238303281, 0.033992310796059674, 0.0343394736775327, 0.03508879435553037, 0.03613156996030287, 0.03740410678333848, 0.03892003519930907, 0.040776482244380734, 0.04313401226720075, 0.04617452149109124, 0.05004925175257984, 0.054836116331927365, 0.06052186235216139 ], [ 0.042922045370792826, 0.04003123086846665, 0.03850698084285118, 0.0378843336372232, 0.03763310430481672, 0.037301468173477965, 0.03658077484327141, 0.03530804984345141, 0.033441775600612664, 0.031031939881333452, 0.02819173731805302, 0.025072627982175858, 0.021843674678511272, 0.01867776679989539, 0.01575069551177901, 0.013262457225065888, 0.011481937842201171, 0.010756664786854114, 0.011345928193064812, 0.013181695795461192, 0.01594914364378589, 0.019318148557255447, 0.023017139624565086, 0.026814378460242327, 0.03049826707179617, 0.03387313014086417, 0.03676492646745794, 0.03903113011771332, 0.040571361161582206, 0.04133691933214946, 0.041338216361804576, 0.04064945266103466, 0.039409751620930106, 0.037819138331206606, 0.036126017075023796, 0.03460082731798075, 0.033491691146830115, 0.03296807380499724, 0.033076916685659465, 0.03374211681971696, 0.03481340788991481, 0.03613705740850444, 0.03761540315790206, 0.03924019228016469, 0.0410989378648945, 0.04335638348228612, 0.0462136871808709, 0.049854016672014945, 0.054392351183147884, 0.059848233263661156 ], [ 0.04303711966047557, 0.04003183858583521, 0.038398234684755894, 0.037685770529905856, 0.03737031426314056, 0.03699889834473588, 0.036258481731004294, 0.03498124625869746, 0.03312150193387255, 0.030725968766467174, 0.02790544875904002, 0.02480990587611073, 0.02160804527873158, 0.01847414960916319, 0.015588250037610451, 0.013158560723860385, 0.011464025918398691, 0.010850492457063245, 0.011548423990686195, 0.013458843488380346, 0.016262804658824983, 0.019638502834657685, 0.02332043821920248, 0.027079113209798628, 0.030703024730430593, 0.03399575083359807, 0.03678242440007384, 0.038920118915043135, 0.040308928161822064, 0.040902030627311965, 0.0407138603561444, 0.03982586350684751, 0.03838914233569429, 0.036622190227414725, 0.034799366553181166, 0.033222259903138075, 0.03216640415950053, 0.03181003584030787, 0.03217950574476823, 0.0331540470830238, 0.03453228405298729, 0.03611762253862602, 0.03778244725140021, 0.039500315867503584, 0.04135121132578644, 0.043504102078262614, 0.046177849676898954, 0.049585588122291094, 0.053878189010275516, 0.05910784797984946 ], [ 0.04308433316107046, 0.039963266181564414, 0.03822235998227783, 0.037424966359716004, 0.03705202010142173, 0.03664843761201414, 0.0358960888862107, 0.034621914893013264, 0.03277587889355562, 0.030401399119680712, 0.02760693591073215, 0.02454106281776567, 0.02137227249636866, 0.01827641069430147, 0.01543788380091796, 0.013072944546319767, 0.011469225924802167, 0.01096777647752699, 0.011769466036967297, 0.013748903534248822, 0.01658635687155573, 0.019968569242739886, 0.023635528683170377, 0.027359498603532005, 0.03092873725773653, 0.034145798244824485, 0.036834690170308215, 0.038851707847171686, 0.0400969094544323, 0.04052466630282682, 0.04015254615259175, 0.03906818448924102, 0.037433623179631885, 0.03548526622362866, 0.033524112726309306, 0.031885339870638345, 0.030874984980496713, 0.030680697516610435, 0.031304835591245424, 0.032577747681737365, 0.03424605037331268, 0.036072936206034134, 0.03790471342911074, 0.039699937356288274, 0.041532704482675806, 0.043576134427353475, 0.04606540897071691, 0.04924192832915861, 0.05329145368034674, 0.05829873947651706 ], [ 0.04306633748377192, 0.03982795739012885, 0.0379814352960755, 0.0371036538313239, 0.03667971404301164, 0.03625143285504218, 0.03549484965781037, 0.03423123147527809, 0.032406000261120796, 0.030059229393232623, 0.02729708485153846, 0.02426685266188884, 0.0211369516267119, 0.018084941723144267, 0.015299686767129735, 0.013005166103848522, 0.011496140615283906, 0.01110597617223633, 0.012006089640661119, 0.014049251469604085, 0.01691765069122915, 0.02030657849886973, 0.02396095385681489, 0.027654387730113757, 0.03117462601080275, 0.03432297384216844, 0.036922069797989794, 0.038827105269244364, 0.03993764460320291, 0.04020860369045324, 0.03965979491509112, 0.03838390399363907, 0.03655265026511816, 0.034419399643547385, 0.032312025933865465, 0.030601530220394767, 0.029627758069839603, 0.02958864714098567, 0.030459189801409263, 0.032017022843802374, 0.03395661021857644, 0.03600395349668667, 0.03798292600790812, 0.039839765408046325, 0.041643930914123654, 0.043572511649925885, 0.04587577336671252, 0.048821920304973454, 0.05263078324843845, 0.05741965828420317 ], [ 0.042986700750008926, 0.03962929982267518, 0.037678478675713716, 0.036724471848416505, 0.03625574141020751, 0.03581001846798838, 0.03505673131944996, 0.03381100690700578, 0.03201351261930866, 0.02970092499550006, 0.02697715798466478, 0.023988307364267485, 0.02090284582534043, 0.017900173817611737, 0.015173635473207948, 0.012954498978606154, 0.011542975580201694, 0.011262250120255071, 0.012255249770286424, 0.014357308477722293, 0.017254634095297563, 0.02065088700270073, 0.02429539629545592, 0.02796277232975546, 0.03144003425836517, 0.03452707017772233, 0.03704495989751332, 0.038847528673402784, 0.03983345541237449, 0.03995761594095078, 0.039241217115638806, 0.03778082393440545, 0.03575639185888458, 0.03343689733949054, 0.03117674586795487, 0.029384567230599377, 0.028437371771462498, 0.028544525665512657, 0.029650515639675985, 0.03147707741430765, 0.03366718192820437, 0.03591291723477606, 0.038019041703118414, 0.039921665133410326, 0.041686500879952314, 0.04349432300260968, 0.04560936349709819, 0.048325383411526104, 0.05189565509786652, 0.056470104551816336 ], [ 0.0428499226431475, 0.03937165468705874, 0.037317486465414454, 0.03629100751654675, 0.03578334178311799, 0.03532715436389135, 0.03458444878478111, 0.033363716363699766, 0.031600640035785006, 0.029328439035299574, 0.026648811451051604, 0.023706751763433266, 0.020670899206728797, 0.017722590838315833, 0.015059611612481632, 0.01291997144275128, 0.011607624119747589, 0.011433577949801642, 0.012513917585512922, 0.014670601164903598, 0.017595391900081796, 0.021000005081681233, 0.024637699948399053, 0.028283800035611487, 0.03172444043206808, 0.034757978881437016, 0.03720380711499687, 0.03891418979768168, 0.03978660819250621, 0.03977540087389185, 0.038902398677907596, 0.03726690393713284, 0.03505555702554738, 0.03255121836828542, 0.030133794602514835, 0.02825063288496356, 0.027319040400506662, 0.027561217306443255, 0.02888853163609455, 0.03096457538960494, 0.03338232665004631, 0.03580336022915718, 0.03801623929106903, 0.03994864913267599, 0.04166311977018686, 0.04334372275277124, 0.045267628544881394, 0.04775309902576443, 0.051086419034776544, 0.05545036646053599 ], [ 0.04266145561193461, 0.039060396720614614, 0.036903485375582766, 0.03580785229691319, 0.0352667033500128, 0.03480667535489259, 0.03408150783711346, 0.032892536447059126, 0.031170215913386437, 0.02894423998652571, 0.026314119894709408, 0.023423826923432225, 0.02044226072228811, 0.017552757144797843, 0.014957440954866674, 0.012900432791654554, 0.011687780812166523, 0.0116168955812857, 0.012779181454607868, 0.014986827483945411, 0.017938192054496337, 0.021352631468740477, 0.024986896693530974, 0.02861679511091647, 0.03202747382257582, 0.03501570047557559, 0.03739910913176975, 0.039028281050460016, 0.039799276119167004, 0.03966550561736208, 0.03864877169416385, 0.03685006663893056, 0.03446114647269154, 0.0317767290448756, 0.029200440596598015, 0.02721839416869531, 0.026290685824048955, 0.0266539618094728, 0.02818477943328155, 0.030487665732269093, 0.03310795999551338, 0.035680103702040306, 0.03797891415341989, 0.03992487813319287, 0.04157759840987107, 0.043123949994607405, 0.04485307540390235, 0.047106848047923845, 0.050204340509675115, 0.0543615670939904 ], [ 0.042427729953039506, 0.03870196263147907, 0.036442597035994825, 0.035280672229472614, 0.03471103060983436, 0.03425335199454744, 0.03355225778609979, 0.03240139015784093, 0.030725721710328297, 0.02855134599003015, 0.02597560838108245, 0.023141521976720144, 0.02021831891404196, 0.017391359978762927, 0.014866952244073237, 0.01289464477622257, 0.01178107625753157, 0.01180923622616006, 0.013048349137688707, 0.015303926852613113, 0.018281537317479536, 0.02170769267288277, 0.0253422366658967, 0.028961281830209698, 0.03234893201738998, 0.03530035544514921, 0.03763141690005068, 0.039190963412322484, 0.039873502841313746, 0.03963124985764415, 0.03848547448345176, 0.036537968924415416, 0.03398412273279605, 0.03112830761719096, 0.02839534751404397, 0.026308812215868633, 0.025372883608648734, 0.025840321937579666, 0.02755258533300959, 0.03005596005857486, 0.03285134041358861, 0.035549247741996554, 0.03791267433760674, 0.03985566839427254, 0.04143487326529984, 0.04283936066364888, 0.044369311427977724, 0.04638946209040795, 0.049251656393994446, 0.05320572217749895 ], [ 0.0421561797806542, 0.03830390544905919, 0.03594211335839344, 0.03471629134423524, 0.03412262484535046, 0.03367296225168793, 0.03300195277594018, 0.03189499881697649, 0.030271331650019793, 0.028153364987116198, 0.025636290800437226, 0.02286221397147152, 0.020000747193736037, 0.01723926605803193, 0.014788054855735802, 0.012901394272932697, 0.011885225480252047, 0.012007871445266802, 0.013319049042411036, 0.015620152916174952, 0.01862422079159038, 0.02206438588240497, 0.025703221234119153, 0.029317009547540365, 0.03268879927336097, 0.035612195901787984, 0.037901337680560775, 0.039403355892938884, 0.04001116852471613, 0.039675651034784695, 0.03841720776012924, 0.03633774936495999, 0.03363500783937989, 0.030620786190648626, 0.027737946670043565, 0.02554460654594249, 0.024588489640104336, 0.02513992075132318, 0.02700688956930629, 0.02968044355952781, 0.03262102501329037, 0.035418147969063736, 0.03782433362243905, 0.039747502298049596, 0.04124103407204441, 0.04249547063929475, 0.043821101250470354, 0.04560489027656905, 0.04823164604877644, 0.05198581147003636 ], [ 0.041855265912762264, 0.03787495084327231, 0.035410579587559055, 0.03412278601234349, 0.03350897552866517, 0.033072372226465065, 0.03243681991414927, 0.031378939120935714, 0.029811961713112827, 0.027754539155930274, 0.025299713449355294, 0.02258871464273833, 0.019791558716521048, 0.017097591306658184, 0.014720833165602926, 0.012919622620006588, 0.011998183323159117, 0.012210448613201407, 0.013589329407367347, 0.015934147706299785, 0.0189653838762474, 0.02242222402666109, 0.0260696374129579, 0.02968397841312809, 0.033047264939632955, 0.035951617109273935, 0.03820953837987826, 0.03966652653543109, 0.04021395946645543, 0.039801355099526085, 0.038448095296696794, 0.036255767682554174, 0.03342343094178652, 0.030268244207471786, 0.027247502184914004, 0.02494927132196498, 0.023961815490601026, 0.024573857132253508, 0.02656389971030004, 0.029373299074469308, 0.032426781825753724, 0.03529537099098182, 0.03772189580769217, 0.039608037559678996, 0.04100335560220803, 0.04209900819485811, 0.04321443779272532, 0.0447582835881092, 0.04714872074895658, 0.050705867011011686 ], [ 0.04153449045946468, 0.037425049591671374, 0.03485787971684763, 0.033509585812542333, 0.03287885882176301, 0.0324596223343104, 0.03186413083094834, 0.030859702179282078, 0.029353320064384483, 0.02735979114548058, 0.02497000163004005, 0.022324322251291016, 0.01959316916550958, 0.016967781854045242, 0.01466565475929061, 0.012948566713658802, 0.012118301437103879, 0.012415122808774838, 0.013857754846622331, 0.016245016106198294, 0.01930457523969219, 0.022781081593762954, 0.02644159244148654, 0.030062464636895117, 0.03342474099485145, 0.03631916809930524, 0.03855674864137191, 0.03998148488005155, 0.04048334228406187, 0.04001057641067449, 0.03858155831722956, 0.03629735651084331, 0.033357663286000185, 0.030083204867809767, 0.026941901326093035, 0.024545606939952693, 0.023517264197017145, 0.024163731671621846, 0.026240534551087425, 0.02914762631831357, 0.032279446782038125, 0.03519061987250448, 0.0376145231056015, 0.0394461092582545, 0.04073032914410785, 0.04165797305328043, 0.04255662689292803, 0.0438560985138106, 0.046008534800559935, 0.04937108184845716 ], [ 0.04120439642645621, 0.0369654178982404, 0.03429531579473834, 0.0328875732326158, 0.03224243633190698, 0.03184401276888693, 0.03129227107647361, 0.03034474955697613, 0.028901954555174594, 0.026974768330498392, 0.02465190600438263, 0.02207287563230669, 0.01940846480005326, 0.016851703473699357, 0.014623288767026716, 0.012987906831892028, 0.012244482711254815, 0.012620682207793337, 0.014123499864868065, 0.01655239951421335, 0.01964180936353893, 0.02314123974215518, 0.02681954719554862, 0.03045304414896072, 0.0338218777349979, 0.03671556059670271, 0.03894376312983418, 0.04034917572816116, 0.040820543471773, 0.04030504995846878, 0.03882021264149399, 0.03646660774380182, 0.033444189525986726, 0.03007582503125299, 0.0268362934334867, 0.024353865174870846, 0.023277459846162613, 0.023930285191443003, 0.026053652018046183, 0.029017045748444194, 0.03219071475868056, 0.03511462007154126, 0.03751248024458701, 0.03927171745128478, 0.04043168774079515, 0.04118169781511817, 0.04185638380003351, 0.04290622119351371, 0.04481812178182456, 0.04798794321987807 ], [ 0.04087654405953378, 0.03650855423857516, 0.033735668431305516, 0.0322691699480206, 0.0316113430307645, 0.031236178432398544, 0.03073079881163261, 0.02984255898018634, 0.028465291037674215, 0.02660587973562991, 0.02435084407948358, 0.02183880635233305, 0.019240871918130367, 0.016751735456258805, 0.014595029643826477, 0.013037915999350193, 0.012376329815096801, 0.012826666386035987, 0.014386438728089439, 0.016856547388044367, 0.019977623072052468, 0.023503429144093566, 0.02720434703587039, 0.030856613472187353, 0.0342395766452443, 0.03714167549433696, 0.03937144246718436, 0.04077047399122462, 0.04122653484145091, 0.0406859983616882, 0.039165796180057666, 0.03676621431970806, 0.03368736782909725, 0.03025319604741389, 0.026941791513348363, 0.024389784925598706, 0.02326109958112883, 0.023891770499022427, 0.02601910047720373, 0.028995190698131723, 0.03217285772190099, 0.03507895658230887, 0.0374270449594987, 0.03909599161431967, 0.040118417331986754, 0.04068090542893124, 0.04112393786459398, 0.04191811205099823, 0.0435860590309008, 0.04656439425957935 ], [ 0.04056345417948637, 0.03606821804975107, 0.03319322060519601, 0.03166839144223805, 0.030998747635925392, 0.030648138834410556, 0.030190480556163697, 0.029362649509957487, 0.028051653993150884, 0.02626031845974035, 0.024072930630413013, 0.021627183413888265, 0.019094422443327, 0.016670863489092243, 0.014582820536188888, 0.013099605274101209, 0.012514284659814518, 0.013033476533135718, 0.014647230465602814, 0.017158384943553536, 0.020313128214347057, 0.023868868856974573, 0.02759724862038449, 0.03127440660203492, 0.034678999511990584, 0.037598566169410964, 0.03984071232390171, 0.041246180371444084, 0.04170202505051931, 0.0411541150753803, 0.039619131864051166, 0.03719738311135597, 0.03408922360596874, 0.030618872592512742, 0.027264495260465458, 0.024662939075202346, 0.02348095625669624, 0.024062313378467006, 0.026150689929457138, 0.02909511167892852, 0.03223836986210456, 0.03509585490646582, 0.03737037532174654, 0.038931121785680464, 0.03980274376532751, 0.0401677535973448, 0.040371138851588544, 0.04090296867664403, 0.04232266242199967, 0.045110027878367355 ], [ 0.04027850776288651, 0.03565935242634236, 0.0326837211552273, 0.031100844676078786, 0.030419362019937425, 0.030093302943022003, 0.0296832875691864, 0.028915572879282016, 0.027670258622797775, 0.025946060547106197, 0.02382498922473192, 0.021443743375513098, 0.01897380873202317, 0.01661276445628057, 0.014589368900556817, 0.013174858417450998, 0.012659754886127613, 0.013242475472470792, 0.01490739681093755, 0.01745957468249989, 0.0206500583284525, 0.024239299341892614, 0.027999941137887962, 0.031708006689425465, 0.03514157288223232, 0.03808745801381057, 0.04035256024573445, 0.041777017602848535, 0.04224745709319088, 0.04170956408260557, 0.04018012783312656, 0.03775982641858704, 0.03464940322207118, 0.03117271191445201, 0.027805053368145795, 0.025175817313140864, 0.02394253990062091, 0.024450605087034883, 0.026459229157339118, 0.029328639799864387, 0.03239954959188419, 0.035177902430666354, 0.03735532534424493, 0.038790245483938855, 0.039498083432898484, 0.03965585358268964, 0.03961155412814957, 0.039873900919440194, 0.04104021102917327, 0.043636315015505696 ], [ 0.04003579104419262, 0.03529793096682565, 0.03222425927169638, 0.030583636449861454, 0.02988936926497454, 0.029586403399307768, 0.029222332406657836, 0.02851285486381881, 0.027331161511565387, 0.025671829649541688, 0.023614535578759602, 0.02129489728996437, 0.018884419071568515, 0.01658187427794743, 0.014618245265931468, 0.013266547900572545, 0.01281522193357835, 0.013456073661542488, 0.015169389604592689, 0.017762568659531873, 0.020990806704513795, 0.024617007556247312, 0.02841456036359033, 0.03215935135139798, 0.03562898706013717, 0.03860974366105868, 0.04090802989385887, 0.04236362698457538, 0.04286301132510798, 0.04235199517510247, 0.0408478132295606, 0.03845183001589199, 0.035365288996745986, 0.0319110445782835, 0.028558855928030674, 0.02592388665210779, 0.024643789200090496, 0.025059237205493343, 0.026951792282838217, 0.029705775736212876, 0.03266804027096428, 0.035337713032292925, 0.037395202992341434, 0.03868727974402358, 0.03921894350253151, 0.039160247026494545, 0.03886054035979274, 0.038846106111708294, 0.03975319658532391, 0.04215686621520821 ], [ 0.0398498770983461, 0.03500070942960277, 0.031833018950827574, 0.03013515525832499, 0.02942623479333684, 0.029143330474990934, 0.028821722564791777, 0.02816686895652141, 0.027045155970131154, 0.025447016059862205, 0.02344972269460151, 0.021187704874451034, 0.01883234401645297, 0.01658342822415489, 0.014673954119456604, 0.013378622191708505, 0.01298432298847325, 0.013677795160228953, 0.01543664266569761, 0.018070647528878908, 0.021338452824149555, 0.02500484186970045, 0.028843693915524795, 0.032630730503235464, 0.0361431889490577, 0.03916697352921022, 0.04150821249396576, 0.0430065649603874, 0.043548613333035946, 0.043080572900318276, 0.04162040482691872, 0.039270386831277655, 0.03623225199469246, 0.032827130595563254, 0.029516784290157763, 0.026896571590459013, 0.025575842899242654, 0.025884826191435423, 0.02763134629562145, 0.030234178966830356, 0.0330543631843336, 0.035587545937602966, 0.03750346952438104, 0.03863668962667772, 0.03898075705758257, 0.038697320698242464, 0.03813526637417987, 0.037837023389643426, 0.03847858447410389, 0.040687719248744314 ], [ 0.03973553885406359, 0.03478486760054601, 0.031528885730177064, 0.029774690402769866, 0.029048364863293482, 0.02878083625094143, 0.028496308773172385, 0.027890625601900757, 0.026823599179526612, 0.02528153952578311, 0.023339238207441326, 0.021129806340529855, 0.018824343169153965, 0.01662346201362296, 0.0147619642353164, 0.013516152112656415, 0.01317189650655748, 0.013912315167175372, 0.0157136015518175, 0.01838794154043817, 0.02169677375400145, 0.025406214434612096, 0.029290376129928474, 0.03312477572713377, 0.036686368204781473, 0.03976084146003426, 0.0421542354196727, 0.04370629953732164, 0.04430394577127655, 0.04389401648210794, 0.04249539742968871, 0.04021137890315581, 0.03724400115522289, 0.03391180513473901, 0.03066631811512311, 0.02807883427391051, 0.026724602891845917, 0.026918847710068645, 0.028496794311473932, 0.030918823491854108, 0.03356748441927002, 0.03593889894742521, 0.03769338600064214, 0.038653188893950856, 0.03879963987022331, 0.0382846365880217, 0.037454656183496346, 0.03686643377157834, 0.03723605985602289, 0.03924763465953075 ], [ 0.039707395187239626, 0.03466753726777023, 0.03133089041961416, 0.029521863424173404, 0.0287745859378691, 0.028516087047333723, 0.028261311768756, 0.027697465397594326, 0.02667816241172297, 0.025185648499022915, 0.023292146792601283, 0.021129303949419816, 0.018867762881314264, 0.016708762100293643, 0.014888685053995925, 0.013685322460370467, 0.013383978713382583, 0.014165458587977828, 0.01600572323824248, 0.018719427948214743, 0.022070236812454923, 0.02582508863964192, 0.02975807110325796, 0.033644440379047014, 0.037260936364508127, 0.040393165415747494, 0.04284724797142898, 0.04446320638775337, 0.04512846317641071, 0.04479064757685177, 0.0434696697808218, 0.04126978727042605, 0.038392979919631254, 0.03515419982094448, 0.0319927552252759, 0.029452934275780027, 0.02807262244417047, 0.02814892050892769, 0.029543395403479607, 0.03176186085258047, 0.03421445873807695, 0.036402104308604855, 0.03797762127023187, 0.03875137552326446, 0.038692060029947316, 0.03794065504081549, 0.0368392144211856, 0.0359564574763333, 0.036048213093747575, 0.03785836373585798 ], [ 0.03977950098860663, 0.03466522894283407, 0.03125749820487063, 0.02939587239132178, 0.02862344096543376, 0.02836606016928501, 0.028131825260883515, 0.02760065525680217, 0.02662050371322091, 0.02516965475299135, 0.023317675377680588, 0.021194589175075693, 0.018970398273444784, 0.01684675564782302, 0.015061376899696962, 0.013893355122482682, 0.013627737480791558, 0.014444147895061219, 0.016319436966711835, 0.019070898981240623, 0.022463969834445884, 0.026265949453138305, 0.030250642698286898, 0.034192969897129555, 0.03786949885515652, 0.041065863389434125, 0.043588404546547735, 0.04527756453832385, 0.04602140874326304, 0.045768442617184345, 0.04453959762961414, 0.0424399099089161, 0.03967076456936804, 0.03654243812641271, 0.03348033756057842, 0.031000016360066586, 0.029600887066722842, 0.02956022064657672, 0.03076344723140539, 0.03276269557953625, 0.03500018662177984, 0.03698596052248681, 0.038367844474840346, 0.03894531406879364, 0.038674420000831974, 0.037684333672338664, 0.03631069359342879, 0.035131384250119156, 0.03494059278826249, 0.036544827980743426 ], [ 0.039964902857726296, 0.03479319139047623, 0.031325785277413934, 0.029414589366923406, 0.0286123353165934, 0.02834681025322732, 0.028122214615597024, 0.027612902614981092, 0.02666187448804267, 0.025243611596059666, 0.023424946343909202, 0.02133411756326729, 0.019140298361832973, 0.017045335476641794, 0.015287986900747714, 0.014148352836857133, 0.01391133148945199, 0.014756289153664986, 0.016662057863510268, 0.019448894888173432, 0.02288370576996472, 0.026733754885585943, 0.030772310706650926, 0.034773862116943, 0.03851482005933463, 0.041780924886160434, 0.04437884552200707, 0.046149551611172984, 0.04698183208994912, 0.04682508668377926, 0.04570116645838505, 0.04371557094922311, 0.04106842883385342, 0.038064234725973145, 0.03511315827116964, 0.03270133077067704, 0.03129022291262522, 0.031136764603381294, 0.032147086530610484, 0.03391824296435065, 0.03592730612415125, 0.03769743329874492, 0.038874332174566505, 0.039248087417860164, 0.03876256290869383, 0.037534596446274805, 0.03589156783646348, 0.03441726169554537, 0.033941525628760114, 0.03533511616076922 ], [ 0.040275192336430767, 0.03506475980706581, 0.031550582431388974, 0.029593598591385217, 0.02875661045674806, 0.028472666869013463, 0.028245457645397043, 0.027745822265723787, 0.026812685885384484, 0.025416955125657257, 0.023622673128271755, 0.02155614151140391, 0.019385520782055073, 0.017312622936678183, 0.01557691008120895, 0.014459059601762374, 0.01424368778410929, 0.015110588436238807, 0.01704164696230905, 0.019860597886084172, 0.023335699296924625, 0.027233867518707027, 0.031327592913420035, 0.03539081781664619, 0.03919978191807035, 0.042540378529060154, 0.045219676282453866, 0.047079238643035724, 0.048008607144247595, 0.047958026259270904, 0.046950077834372834, 0.04509030901604671, 0.04257685269514403, 0.03970736447069626, 0.03687580823531404, 0.03453904168580537, 0.03312225082752674, 0.032862414499758415, 0.03368307583086389, 0.0352233143595433, 0.0369962223157102, 0.03854145282256338, 0.03950562349884204, 0.03967135016522146, 0.03897122969850783, 0.037509686249013276, 0.0356042960051453, 0.03384117013213822, 0.033081579349445236, 0.03426017012382809 ], [ 0.040720095661997, 0.035490764006157596, 0.03194369382911384, 0.02994530259787345, 0.029068663924725766, 0.02875545854796697, 0.028512498920066357, 0.028009408654068875, 0.02708207453533655, 0.025698138766714035, 0.023918841899727167, 0.021868419912345782, 0.019713851576313744, 0.017656681491201948, 0.015936685899872526, 0.01483454470068704, 0.014634200247928525, 0.015516297513859365, 0.017466815389478703, 0.020313685325859514, 0.023826614689897243, 0.027771966083066913, 0.03192123351496934, 0.03604768219520541, 0.03992733686140775, 0.04334625652731692, 0.046111944915525185, 0.04806658456194316, 0.04910044942921179, 0.04916451876965347, 0.04828184510436187, 0.04655753745638286, 0.044186966031867364, 0.041459996296130806, 0.03875377963504789, 0.03649667633527449, 0.03507993017415112, 0.034721568105377826, 0.03535948563209634, 0.036671066167271955, 0.038205258621998237, 0.039520823277774945, 0.04026825467523421, 0.040224922016104364, 0.0393135084334759, 0.03762643892106714, 0.03547039077588989, 0.033430142336903355, 0.03239254668238199, 0.033353008737147735 ], [ 0.041307140273096996, 0.036079070424757866, 0.03251330574089863, 0.030478236848607863, 0.02955725174180109, 0.029203875256411223, 0.02893170274645496, 0.028411577080104326, 0.02747751558618584, 0.026094298503294613, 0.02432040975955211, 0.02227793076885189, 0.020132513812906944, 0.01808520392278282, 0.0163756527770181, 0.01528383096105578, 0.015092364369485262, 0.015982897458368683, 0.01794647667026777, 0.020816144042173444, 0.024363386348902335, 0.02835393838748627, 0.03255811916835786, 0.03674837850137116, 0.04070045616160382, 0.04420055689948634, 0.04705661916053569, 0.049111430446378695, 0.050255932194010235, 0.0504416774218363, 0.04969187589010804, 0.048110673609554726, 0.045889927609317475, 0.04331090652831624, 0.04073367423590873, 0.038559306384634874, 0.037147792082595936, 0.03669956794767814, 0.03716422831894796, 0.03825345422753982, 0.03955090061059794, 0.04063624650049292, 0.04116659655345294, 0.04091645993748867, 0.03980032741434691, 0.03789954209927655, 0.03550935767970511, 0.033209751797569874, 0.03190587961724487, 0.03264735727491616 ], [ 0.042041432241694925, 0.036834317395378485, 0.033263676353245696, 0.031196707752086928, 0.030227090130175802, 0.029823070111522288, 0.029508484243262762, 0.028957834653465332, 0.028004530200321096, 0.026610986725632023, 0.024833051683682484, 0.022790616133652776, 0.02064789397319311, 0.018605203730300463, 0.016901593738140493, 0.015815501011194007, 0.015627377378719522, 0.01651974013240537, 0.01848955872699056, 0.021376052391090514, 0.02495305600505304, 0.028985758420178604, 0.033243184838799573, 0.03749683554218972, 0.0415220750760095, 0.04510520446501786, 0.048054563231765234, 0.050213493725706486, 0.05147350100906578, 0.05178651043049216, 0.051175540365916365, 0.04974323764512003, 0.04767724624044693, 0.04524959508803385, 0.04280327127551635, 0.04071355343978086, 0.03931196714360743, 0.03878289491828452, 0.039085438282432494, 0.03996165016558461, 0.0410280962109324, 0.04188644790258607, 0.04220280657949313, 0.04175124103401492, 0.04044004594513028, 0.03834086069349548, 0.03573761809474421, 0.03320249039793954, 0.03165062474562345, 0.03217564018197144 ], [ 0.04292556591201, 0.037757873862051566, 0.034195147293719794, 0.032100807003297725, 0.031078817684356025, 0.03061456032324158, 0.030245170787862104, 0.029651124185501, 0.028666523107093913, 0.027252005056663923, 0.025460983738113806, 0.023411186407368518, 0.0212653149898511, 0.019222743709851504, 0.01752141157934314, 0.01643732363677211, 0.01624774337257597, 0.01713567776428869, 0.019104694755345913, 0.022001341241361723, 0.025602593373365932, 0.029673351994745637, 0.03398131247517065, 0.03829691125969519, 0.042395036363765626, 0.04606201168981516, 0.049106515142878, 0.05137236250253433, 0.05275148660853275, 0.05319595424289715, 0.05272822549497432, 0.051448923732826904, 0.04954085405703215, 0.047266329772222865, 0.04495150410139852, 0.042947492755728005, 0.04156009362457453, 0.040959214650587945, 0.04111171634037398, 0.0417863940822955, 0.04263057699394994, 0.04326838231853934, 0.043376892671012135, 0.04273207510006416, 0.04123818810846166, 0.03895891427870906, 0.0361675652197558, 0.03342616008508352, 0.03165109287393195, 0.03196647533131175 ], [ 0.043959669910521165, 0.03884801526341395, 0.03530445597817501, 0.03318677738176048, 0.03210930449427533, 0.03157642855946108, 0.03114110429712288, 0.030491855326911517, 0.029464765650133815, 0.02801935207163598, 0.02620687946108112, 0.024143003053870113, 0.021988878833673977, 0.01994273036969429, 0.018240869333035238, 0.01715594219213183, 0.016960926350859683, 0.017838716627993037, 0.019799917859012688, 0.022699549233449724, 0.026318709476463344, 0.03042245669289978, 0.03477722627778554, 0.03915231492246919, 0.04332203390010251, 0.04707264049194342, 0.05021306513522953, 0.05258749018741692, 0.05408811590779835, 0.05466690078888515, 0.05434537623927331, 0.05322164752483915, 0.051473142569560065, 0.049352141220423223, 0.047168383824489415, 0.04525050749102888, 0.04388116723577096, 0.0432173337670895, 0.043232266817522826, 0.043718273907780866, 0.044351171135927146, 0.04477749192441239, 0.04468687367605319, 0.043859349205215746, 0.042197346600901076, 0.039758575490816, 0.03680690301051862, 0.03389256668931818, 0.0319246781384783, 0.032042043538775884 ] ] }, { "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.884333 (SEM: None)
lr: 8.95174e-05
momentum: 0.335441", "Arm 3_0
accuracy: 0.678667 (SEM: None)
lr: 1.77012e-06
momentum: 0.902833", "Arm 4_0
accuracy: 0.100333 (SEM: None)
lr: 0.10174
momentum: 0.0657866", "Arm 5_0
accuracy: 0.0881667 (SEM: None)
lr: 0.0170037
momentum: 0.802601", "Arm 6_0
accuracy: 0.774 (SEM: None)
lr: 3.46162e-05
momentum: 0", "Arm 7_0
accuracy: 0.8945 (SEM: None)
lr: 8.27034e-05
momentum: 1", "Arm 8_0
accuracy: 0.815 (SEM: None)
lr: 4.4908e-05
momentum: 1", "Arm 9_0
accuracy: 0.725833 (SEM: None)
lr: 0.000172599
momentum: 1", "Arm 10_0
accuracy: 0.836667 (SEM: None)
lr: 2.51353e-05
momentum: 1", "Arm 11_0
accuracy: 0.893 (SEM: None)
lr: 5.03206e-05
momentum: 0.623798", "Arm 12_0
accuracy: 0.901 (SEM: None)
lr: 0.000146891
momentum: 0", "Arm 13_0
accuracy: 0.830333 (SEM: None)
lr: 0.000284969
momentum: 0", "Arm 14_0
accuracy: 0.7695 (SEM: None)
lr: 0.000106856
momentum: 0", "Arm 15_0
accuracy: 0.912 (SEM: None)
lr: 9.56177e-05
momentum: 0.503227", "Arm 16_0
accuracy: 0.913167 (SEM: None)
lr: 0.000142958
momentum: 0.416516", "Arm 17_0
accuracy: 0.874667 (SEM: None)
lr: 7.15485e-05
momentum: 0.488424", "Arm 18_0
accuracy: 0.135833 (SEM: None)
lr: 1e-06
momentum: 0", "Arm 19_0
accuracy: 0.909333 (SEM: None)
lr: 0.00011391
momentum: 0.374579", "Arm 20_0
accuracy: 0.872167 (SEM: None)
lr: 7.59359e-05
momentum: 0.593892", "Arm 21_0
accuracy: 0.907833 (SEM: None)
lr: 0.000209478
momentum: 0.334471", "Arm 22_0
accuracy: 0.100333 (SEM: None)
lr: 0.4
momentum: 1", "Arm 23_0
accuracy: 0.908 (SEM: None)
lr: 0.000143746
momentum: 0.280262", "Arm 24_0
accuracy: 0.8725 (SEM: None)
lr: 9.35406e-05
momentum: 0.422758" ], "type": "scatter", "x": [ 2.6e-05, 0.00995509203921593, 8.95174165429637e-05, 1.7701150611603212e-06, 0.10173960742426996, 0.0170037365367624, 3.4616185641529305e-05, 8.270343657944879e-05, 4.490802174695119e-05, 0.0001725987159313118, 2.5135328907545777e-05, 5.0320561042599415e-05, 0.00014689084297571294, 0.0002849687493641503, 0.00010685593765358799, 9.561769566800182e-05, 0.0001429577133666929, 7.154849467608624e-05, 1e-06, 0.0001139104663612585, 7.593590468713224e-05, 0.00020947764852863557, 0.4, 0.00014374597897290123, 9.354056485736736e-05 ], "xaxis": "x", "y": [ 0.58, 0.6334228515625, 0.33544088527560234, 0.9028334226459265, 0.06578655354678631, 0.8026014352217317, 0.0, 1.0, 1.0, 1.0, 1.0, 0.6237977568473356, 0.0, 0.0, 0.0, 0.5032271284595418, 0.4165156332079209, 0.48842369040751554, 0.0, 0.3745788491011103, 0.5938915021158222, 0.3344711141973445, 1.0, 0.2802621653666575, 0.42275806227111623 ], "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.884333 (SEM: None)
lr: 8.95174e-05
momentum: 0.335441", "Arm 3_0
accuracy: 0.678667 (SEM: None)
lr: 1.77012e-06
momentum: 0.902833", "Arm 4_0
accuracy: 0.100333 (SEM: None)
lr: 0.10174
momentum: 0.0657866", "Arm 5_0
accuracy: 0.0881667 (SEM: None)
lr: 0.0170037
momentum: 0.802601", "Arm 6_0
accuracy: 0.774 (SEM: None)
lr: 3.46162e-05
momentum: 0", "Arm 7_0
accuracy: 0.8945 (SEM: None)
lr: 8.27034e-05
momentum: 1", "Arm 8_0
accuracy: 0.815 (SEM: None)
lr: 4.4908e-05
momentum: 1", "Arm 9_0
accuracy: 0.725833 (SEM: None)
lr: 0.000172599
momentum: 1", "Arm 10_0
accuracy: 0.836667 (SEM: None)
lr: 2.51353e-05
momentum: 1", "Arm 11_0
accuracy: 0.893 (SEM: None)
lr: 5.03206e-05
momentum: 0.623798", "Arm 12_0
accuracy: 0.901 (SEM: None)
lr: 0.000146891
momentum: 0", "Arm 13_0
accuracy: 0.830333 (SEM: None)
lr: 0.000284969
momentum: 0", "Arm 14_0
accuracy: 0.7695 (SEM: None)
lr: 0.000106856
momentum: 0", "Arm 15_0
accuracy: 0.912 (SEM: None)
lr: 9.56177e-05
momentum: 0.503227", "Arm 16_0
accuracy: 0.913167 (SEM: None)
lr: 0.000142958
momentum: 0.416516", "Arm 17_0
accuracy: 0.874667 (SEM: None)
lr: 7.15485e-05
momentum: 0.488424", "Arm 18_0
accuracy: 0.135833 (SEM: None)
lr: 1e-06
momentum: 0", "Arm 19_0
accuracy: 0.909333 (SEM: None)
lr: 0.00011391
momentum: 0.374579", "Arm 20_0
accuracy: 0.872167 (SEM: None)
lr: 7.59359e-05
momentum: 0.593892", "Arm 21_0
accuracy: 0.907833 (SEM: None)
lr: 0.000209478
momentum: 0.334471", "Arm 22_0
accuracy: 0.100333 (SEM: None)
lr: 0.4
momentum: 1", "Arm 23_0
accuracy: 0.908 (SEM: None)
lr: 0.000143746
momentum: 0.280262", "Arm 24_0
accuracy: 0.8725 (SEM: None)
lr: 9.35406e-05
momentum: 0.422758" ], "type": "scatter", "x": [ 2.6e-05, 0.00995509203921593, 8.95174165429637e-05, 1.7701150611603212e-06, 0.10173960742426996, 0.0170037365367624, 3.4616185641529305e-05, 8.270343657944879e-05, 4.490802174695119e-05, 0.0001725987159313118, 2.5135328907545777e-05, 5.0320561042599415e-05, 0.00014689084297571294, 0.0002849687493641503, 0.00010685593765358799, 9.561769566800182e-05, 0.0001429577133666929, 7.154849467608624e-05, 1e-06, 0.0001139104663612585, 7.593590468713224e-05, 0.00020947764852863557, 0.4, 0.00014374597897290123, 9.354056485736736e-05 ], "xaxis": "x2", "y": [ 0.58, 0.6334228515625, 0.33544088527560234, 0.9028334226459265, 0.06578655354678631, 0.8026014352217317, 0.0, 1.0, 1.0, 1.0, 1.0, 0.6237977568473356, 0.0, 0.0, 0.0, 0.5032271284595418, 0.4165156332079209, 0.48842369040751554, 0.0, 0.3745788491011103, 0.5938915021158222, 0.3344711141973445, 1.0, 0.2802621653666575, 0.42275806227111623 ], "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.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.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.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.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.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.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.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.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.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.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "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.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.0, "#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.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.0, "#f0f921" ] ], "sequentialminus": [ [ 0.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.0, "#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, -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, -0.3979400086720376 ], "tickfont": { "size": 11 }, "tickmode": "auto", "title": { "text": "lr" }, "type": "log" }, "yaxis": { "anchor": "x", "autorange": false, "domain": [ 0, 1 ], "exponentformat": "e", "range": [ 0.0, 1.0 ], "tickfont": { "size": 11 }, "tickmode": "auto", "title": { "text": "momentum" }, "type": "linear" }, "yaxis2": { "anchor": "x2", "autorange": false, "domain": [ 0, 1 ], "exponentformat": "e", "range": [ 0.0, 1.0 ], "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\"))" ] }, { "cell_type": "markdown", "id": "ec425a80", "metadata": { "customInput": null, "originalKey": "5c91d83a-9a90-4ea0-8df9-9d242d998cb3", "papermill": { "duration": 0.061496, "end_time": "2024-11-13T05:21:08.588150", "exception": false, "start_time": "2024-11-13T05:21:08.526654", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "d7b15c31", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:08.713488Z", "iopub.status.busy": "2024-11-13T05:21:08.713004Z", "iopub.status.idle": "2024-11-13T05:21:08.760431Z", "shell.execute_reply": "2024-11-13T05:21:08.759779Z" }, "executionStartTime": 1690415953760, "executionStopTime": 1690415954260, "originalKey": "3a767bdf-7ef3-48e7-b853-6fae5e9e02ff", "papermill": { "duration": 0.112227, "end_time": "2024-11-13T05:21:08.762082", "exception": false, "start_time": "2024-11-13T05:21:08.649855", "status": "completed" }, "requestMsgId": "043de459-6a28-4796-b237-808385c9e54c", "showInput": true, "tags": [] }, "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.8843333333333333, 0.8843333333333333, 0.8843333333333333, 0.8843333333333333, 0.8843333333333333, 0.8945, 0.8945, 0.8945, 0.8945, 0.8945, 0.901, 0.901, 0.901, 0.912, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667 ] }, { "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: 8.95174165429637e-05
momentum: 0.33544088527560234", "
Parameterization:
lr: 1.7701150611603212e-06
momentum: 0.9028334226459265", "
Parameterization:
lr: 0.10173960742426996
momentum: 0.06578655354678631", "
Parameterization:
lr: 0.0170037365367624
momentum: 0.8026014352217317", "
Parameterization:
lr: 3.4616185641529305e-05
momentum: 0.0", "
Parameterization:
lr: 8.270343657944879e-05
momentum: 1.0", "
Parameterization:
lr: 4.490802174695119e-05
momentum: 1.0", "
Parameterization:
lr: 0.0001725987159313118
momentum: 1.0", "
Parameterization:
lr: 2.5135328907545777e-05
momentum: 1.0", "
Parameterization:
lr: 5.0320561042599415e-05
momentum: 0.6237977568473356", "
Parameterization:
lr: 0.00014689084297571294
momentum: 0.0", "
Parameterization:
lr: 0.0002849687493641503
momentum: 0.0", "
Parameterization:
lr: 0.00010685593765358799
momentum: 0.0", "
Parameterization:
lr: 9.561769566800182e-05
momentum: 0.5032271284595418", "
Parameterization:
lr: 0.0001429577133666929
momentum: 0.4165156332079209", "
Parameterization:
lr: 7.154849467608624e-05
momentum: 0.48842369040751554", "
Parameterization:
lr: 1e-06
momentum: 0.0", "
Parameterization:
lr: 0.0001139104663612585
momentum: 0.3745788491011103", "
Parameterization:
lr: 7.593590468713224e-05
momentum: 0.5938915021158222", "
Parameterization:
lr: 0.00020947764852863557
momentum: 0.3344711141973445", "
Parameterization:
lr: 0.4
momentum: 1.0", "
Parameterization:
lr: 0.00014374597897290123
momentum: 0.2802621653666575", "
Parameterization:
lr: 9.354056485736736e-05
momentum: 0.42275806227111623", "
Parameterization:
lr: 0.00012016523960069085
momentum: 0.5105476042166414" ], "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.8843333333333333, 0.8843333333333333, 0.8843333333333333, 0.8843333333333333, 0.8843333333333333, 0.8945, 0.8945, 0.8945, 0.8945, 0.8945, 0.901, 0.901, 0.901, 0.912, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667 ] }, { "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.8843333333333333, 0.8843333333333333, 0.8843333333333333, 0.8843333333333333, 0.8843333333333333, 0.8945, 0.8945, 0.8945, 0.8945, 0.8945, 0.901, 0.901, 0.901, 0.912, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667, 0.9131666666666667 ] } ], "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.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.0, "#f0f921" ] ], "type": "contour" } ], "contourcarpet": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "contourcarpet" } ], "heatmap": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.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.0, "#f0f921" ] ], "type": "heatmap" } ], "heatmapgl": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.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.0, "#f0f921" ] ], "type": "heatmapgl" } ], "histogram": [ { "marker": { "pattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 } }, "type": "histogram" } ], "histogram2d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.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.0, "#f0f921" ] ], "type": "histogram2d" } ], "histogram2dcontour": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "colorscale": [ [ 0.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.0, "#f0f921" ] ], "type": "histogram2dcontour" } ], "mesh3d": [ { "colorbar": { "outlinewidth": 0, "ticks": "" }, "type": "mesh3d" } ], "parcoords": [ { "line": { "colorbar": { "outlinewidth": 0, "ticks": "" } }, "type": "parcoords" } ], "pie": [ { "automargin": true, "type": "pie" } ], "scatter": [ { "fillpattern": { "fillmode": "overlay", "size": 10, "solidity": 0.2 }, "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.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.0, "#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.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.0, "#f0f921" ] ], "sequentialminus": [ [ 0.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.0, "#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": "Best objective found vs. # of iterations" }, "xaxis": { "title": { "text": "Iteration" } }, "yaxis": { "title": { "text": "Accuracy" } } } }, "text/html": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "render(\n", " ax_client.get_optimization_trace()\n", ") " ] }, { "cell_type": "markdown", "id": "7c2e9760", "metadata": { "customInput": null, "executionStartTime": 1689617061294, "executionStopTime": 1689617061325, "originalKey": "09aaec9d-c178-42e2-b549-663cd17f8c3d", "papermill": { "duration": 0.066465, "end_time": "2024-11-13T05:21:08.894337", "exception": false, "start_time": "2024-11-13T05:21:08.827872", "status": "completed" }, "requestMsgId": "09aaec9d-c178-42e2-b549-663cd17f8c3d", "showInput": false, "tags": [] }, "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, "id": "596424bc", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:09.034564Z", "iopub.status.busy": "2024-11-13T05:21:09.034296Z", "iopub.status.idle": "2024-11-13T05:21:09.056516Z", "shell.execute_reply": "2024-11-13T05:21:09.055928Z" }, "executionStartTime": 1690415954397, "executionStopTime": 1690415954452, "originalKey": "27f92d16-93c4-43bb-a37f-e7a1aeecd856", "papermill": { "duration": 0.090071, "end_time": "2024-11-13T05:21:09.057815", "exception": false, "start_time": "2024-11-13T05:21:08.967744", "status": "completed" }, "requestMsgId": "07eba5ce-bebe-4588-8dbb-07553efeb2b0", "showInput": true, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "{'lr': 0.0001429577133666929, 'momentum': 0.4165156332079209}" ] }, "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, "id": "48def15f", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:09.190545Z", "iopub.status.busy": "2024-11-13T05:21:09.190081Z", "iopub.status.idle": "2024-11-13T05:21:09.194001Z", "shell.execute_reply": "2024-11-13T05:21:09.193417Z" }, "executionStartTime": 1690415954677, "executionStopTime": 1690415954681, "originalKey": "d0c7c645-c230-4654-a3b5-a01c61a09393", "papermill": { "duration": 0.071729, "end_time": "2024-11-13T05:21:09.195298", "exception": false, "start_time": "2024-11-13T05:21:09.123569", "status": "completed" }, "requestMsgId": "0a962cef-65a1-4f95-9410-37a9a8e5c5ac", "showInput": true, "tags": [] }, "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, "id": "e22014ad", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:09.327515Z", "iopub.status.busy": "2024-11-13T05:21:09.327028Z", "iopub.status.idle": "2024-11-13T05:21:38.353449Z", "shell.execute_reply": "2024-11-13T05:21:38.352790Z" }, "executionStartTime": 1690415954791, "executionStopTime": 1690416061340, "originalKey": "5695c78b-4c6e-4d35-ab08-6c60781bd8f1", "papermill": { "duration": 29.094484, "end_time": "2024-11-13T05:21:38.355239", "exception": false, "start_time": "2024-11-13T05:21:09.260755", "status": "completed" }, "requestMsgId": "e22fa0c7-88cc-4d8a-bb7d-4f96fbae9a42", "showInput": true, "tags": [] }, "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, "id": "45126c04", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:38.488742Z", "iopub.status.busy": "2024-11-13T05:21:38.488129Z", "iopub.status.idle": "2024-11-13T05:21:38.491977Z", "shell.execute_reply": "2024-11-13T05:21:38.491441Z" }, "executionStartTime": 1690416061460, "executionStopTime": 1690416061467, "originalKey": "7522e229-9641-4383-a892-12c3f0a8011c", "papermill": { "duration": 0.071358, "end_time": "2024-11-13T05:21:38.493207", "exception": false, "start_time": "2024-11-13T05:21:38.421849", "status": "completed" }, "requestMsgId": "5552d77d-9c9d-4712-9256-2cb3da836f2c", "showInput": true, "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Classification Accuracy (test set): 96.24%\n" ] } ], "source": [ "print(f\"Classification Accuracy (test set): {round(test_accuracy*100, 2)}%\")" ] }, { "cell_type": "markdown", "id": "1bf158b6", "metadata": { "customInput": null, "originalKey": "c8232211-4837-4677-b86c-bce730635fff", "papermill": { "duration": 0.065987, "end_time": "2024-11-13T05:21:38.624891", "exception": false, "start_time": "2024-11-13T05:21:38.558904", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "0a70ba79", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:38.801212Z", "iopub.status.busy": "2024-11-13T05:21:38.800761Z", "iopub.status.idle": "2024-11-13T05:21:38.830543Z", "shell.execute_reply": "2024-11-13T05:21:38.829922Z" }, "executionStartTime": 1690416061571, "executionStopTime": 1690416061657, "originalKey": "6afddb45-c980-4b14-b5e9-927747ea98ea", "papermill": { "duration": 0.14163, "end_time": "2024-11-13T05:21:38.831876", "exception": false, "start_time": "2024-11-13T05:21:38.690246", "status": "completed" }, "requestMsgId": "bab02be8-706c-4422-b97b-c222b5084bba", "showInput": true, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:38] 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, "id": "a46e0f23", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:38.964964Z", "iopub.status.busy": "2024-11-13T05:21:38.964369Z", "iopub.status.idle": "2024-11-13T05:21:39.099534Z", "shell.execute_reply": "2024-11-13T05:21:39.098918Z" }, "executionStartTime": 1690416061758, "executionStopTime": 1690416062132, "originalKey": "31e6f7b4-cf6b-4967-95ff-f76d03657fb2", "papermill": { "duration": 0.203365, "end_time": "2024-11-13T05:21:39.100946", "exception": false, "start_time": "2024-11-13T05:21:38.897581", "status": "completed" }, "requestMsgId": "f2d10848-f995-420d-88e7-9036894d7b1b", "showInput": true, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:39] 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." ] }, { "cell_type": "markdown", "id": "bd10f721", "metadata": { "customInput": null, "originalKey": "122510f5-5b9e-4b1c-9f5e-8c8ea2e08848", "papermill": { "duration": 0.064896, "end_time": "2024-11-13T05:21:39.230885", "exception": false, "start_time": "2024-11-13T05:21:39.165989", "status": "completed" }, "showInput": false, "tags": [] }, "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", "id": "caf1aa82", "metadata": { "customInput": null, "originalKey": "bd80e639-aa0f-4dc1-8542-0caf0d674fda", "papermill": { "duration": 0.064908, "end_time": "2024-11-13T05:21:39.360766", "exception": false, "start_time": "2024-11-13T05:21:39.295858", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "1cc9c24c", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:39.497899Z", "iopub.status.busy": "2024-11-13T05:21:39.497619Z", "iopub.status.idle": "2024-11-13T05:21:39.508502Z", "shell.execute_reply": "2024-11-13T05:21:39.507968Z" }, "executionStartTime": 1690416062222, "executionStopTime": 1690416062314, "originalKey": "80eb6a2e-6564-405e-b5d4-d448e32dbf60", "papermill": { "duration": 0.077911, "end_time": "2024-11-13T05:21:39.509746", "exception": false, "start_time": "2024-11-13T05:21:39.431835", "status": "completed" }, "requestMsgId": "65f2307f-b800-4415-b9e7-11734a2a6889", "showInput": true, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:39] 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)" ] }, { "cell_type": "markdown", "id": "3578c6f6", "metadata": { "customInput": null, "originalKey": "adafd3aa-b84e-4e86-9694-a29f94c6d5f3", "papermill": { "duration": 0.065158, "end_time": "2024-11-13T05:21:39.639932", "exception": false, "start_time": "2024-11-13T05:21:39.574774", "status": "completed" }, "showInput": false, "tags": [] }, "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", "id": "0f13d87d", "metadata": { "customInput": null, "originalKey": "2f4a875b-1e18-4352-955d-576d6b01c5ed", "papermill": { "duration": 0.065291, "end_time": "2024-11-13T05:21:39.770668", "exception": false, "start_time": "2024-11-13T05:21:39.705377", "status": "completed" }, "showInput": false, "tags": [] }, "source": [ "# Special Cases" ] }, { "cell_type": "markdown", "id": "20bc8b02", "metadata": { "customInput": null, "originalKey": "0d49e448-4768-401d-ac1d-810aee633c9a", "papermill": { "duration": 0.06589, "end_time": "2024-11-13T05:21:39.901529", "exception": false, "start_time": "2024-11-13T05:21:39.835639", "status": "completed" }, "showInput": false, "tags": [] }, "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, "id": "6342a065", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:40.034135Z", "iopub.status.busy": "2024-11-13T05:21:40.033861Z", "iopub.status.idle": "2024-11-13T05:21:41.392279Z", "shell.execute_reply": "2024-11-13T05:21:41.391604Z" }, "executionStartTime": 1690416062420, "executionStopTime": 1690416064316, "originalKey": "faa83f1d-31da-481a-96e4-ccbc12f30b91", "papermill": { "duration": 1.427012, "end_time": "2024-11-13T05:21:41.393906", "exception": false, "start_time": "2024-11-13T05:21:39.966894", "status": "completed" }, "requestMsgId": "80a40c3a-76ed-4e1d-aa77-3652fadbe69f", "showInput": true, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:41] ax.service.ax_client: Generated new trial 26 with parameters {'lr': 0.00018, 'momentum': 0.444855} using model BoTorch.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:41] 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)" ] }, { "cell_type": "markdown", "id": "dabea0cc", "metadata": { "customInput": null, "originalKey": "c826a96e-9431-49bd-87d7-62b517537a15", "papermill": { "duration": 0.06476, "end_time": "2024-11-13T05:21:41.531371", "exception": false, "start_time": "2024-11-13T05:21:41.466611", "status": "completed" }, "showInput": false, "tags": [] }, "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", "id": "5920fc38", "metadata": { "customInput": null, "originalKey": "683378e0-893b-49a1-b090-084dc394da1a", "papermill": { "duration": 0.065014, "end_time": "2024-11-13T05:21:41.661858", "exception": false, "start_time": "2024-11-13T05:21:41.596844", "status": "completed" }, "showInput": false, "tags": [] }, "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", "id": "fad26bce", "metadata": { "customInput": null, "originalKey": "4602d41d-43aa-46d2-9ca6-392c414d0b5f", "papermill": { "duration": 0.064727, "end_time": "2024-11-13T05:21:41.791679", "exception": false, "start_time": "2024-11-13T05:21:41.726952", "status": "completed" }, "showInput": false, "tags": [] }, "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": 24, "id": "ce686d5e", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:41.923771Z", "iopub.status.busy": "2024-11-13T05:21:41.923155Z", "iopub.status.idle": "2024-11-13T05:21:41.935222Z", "shell.execute_reply": "2024-11-13T05:21:41.934633Z" }, "executionStartTime": 1690416064534, "executionStopTime": 1690416064564, "originalKey": "d62e6cfd-5127-450e-80b7-d0edcaf97d6c", "papermill": { "duration": 0.079537, "end_time": "2024-11-13T05:21:41.936578", "exception": false, "start_time": "2024-11-13T05:21:41.857041", "status": "completed" }, "requestMsgId": "cb9a17f9-5734-41c6-9018-c0635c61d8b3", "showInput": true, "tags": [] }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:41] 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 11-13 05:21:41] ax.service.utils.instantiation: Inferred value type of ParameterType.FLOAT for parameter x. If that is not the expected value type, you can explicitly specify 'value_type' ('int', 'float', 'bool' or 'str') in parameter dict.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:41] ax.service.utils.instantiation: Inferred value type of ParameterType.FLOAT for parameter y. If that is not the expected value type, you can explicitly specify 'value_type' ('int', 'float', 'bool' or 'str') in parameter dict.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:41] 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 11-13 05:21:41] ax.modelbridge.dispatch_utils: Using Models.BOTORCH_MODULAR since there is at least one ordered parameter and there are no unordered categorical parameters.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:41] 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 11-13 05:21:41] ax.modelbridge.dispatch_utils: calculated num_initialization_trials=5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:41] ax.modelbridge.dispatch_utils: num_completed_initialization_trials=0 num_remaining_initialization_trials=5\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:41] ax.modelbridge.dispatch_utils: `verbose`, `disable_progbar`, and `jit_compile` are not yet supported when using `choose_generation_strategy` with ModularBoTorchModel, dropping these arguments.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "[INFO 11-13 05:21:41] ax.modelbridge.dispatch_utils: Using Bayesian Optimization generation strategy: GenerationStrategy(name='Sobol+BoTorch', steps=[Sobol for 5 trials, BoTorch 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": 25, "id": "ae573abb", "metadata": { "customInput": null, "customOutput": null, "execution": { "iopub.execute_input": "2024-11-13T05:21:42.068667Z", "iopub.status.busy": "2024-11-13T05:21:42.068365Z", "iopub.status.idle": "2024-11-13T05:21:42.073145Z", "shell.execute_reply": "2024-11-13T05:21:42.072600Z" }, "executionStartTime": 1690416064679, "executionStopTime": 1690416064702, "originalKey": "bc15d2cf-8ddc-4d66-83b6-7469cd15aa4d", "papermill": { "duration": 0.072407, "end_time": "2024-11-13T05:21:42.074420", "exception": false, "start_time": "2024-11-13T05:21:42.002013", "status": "completed" }, "requestMsgId": "996c4bd3-b296-4cf9-8f95-cbf488639c2f", "showInput": true, "tags": [] }, "outputs": [ { "data": { "text/plain": [ "[(5, 10), (-1, 10)]" ] }, "execution_count": 25, "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": "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.10.15" }, "papermill": { "default_parameters": {}, "duration": 239.091051, "end_time": "2024-11-13T05:21:44.993692", "environment_variables": {}, "exception": null, "input_path": "/tmp/tmp.jh7tLjWjTJ/Ax-main/tutorials/tune_cnn_service.ipynb", "output_path": "/tmp/tmp.jh7tLjWjTJ/Ax-main/tutorials/tune_cnn_service.ipynb", "parameters": {}, "start_time": "2024-11-13T05:17:45.902641", "version": "2.6.0" } }, "nbformat": 4, "nbformat_minor": 5 }