{
"cells": [
{
"cell_type": "markdown",
"id": "684ab04e",
"metadata": {
"code_folding": [],
"customInput": null,
"hidden_ranges": [],
"originalKey": "95e7a97a-bf78-48d4-a0c1-c0e8dfc4fed9",
"papermill": {
"duration": 0.008668,
"end_time": "2025-01-31T05:33:07.216011",
"exception": false,
"start_time": "2025-01-31T05:33:07.207343",
"status": "completed"
},
"showInput": true,
"tags": []
},
"source": [
"# Multi-Objective Optimization Ax API\n",
"### Using the Service API\n",
"For Multi-objective optimization (MOO) in the `AxClient`, objectives are specified through the `ObjectiveProperties` dataclass. An `ObjectiveProperties` requires a boolean `minimize`, and also accepts an optional floating point `threshold`. If a `threshold` is not specified, Ax will infer it through the use of heuristics. If the user knows the region of interest (because they have specs or prior knowledge), then specifying the thresholds is preferable to inferring it. But if the user would need to guess, inferring is preferable.\n",
"\n",
"\n",
"To learn more about how to choose a threshold, see [Set Objective Thresholds to focus candidate generation in a region of interest](#Set-Objective-Thresholds-to-focus-candidate-generation-in-a-region-of-interest). See the [Service API Tutorial](/tutorials/gpei_hartmann_service.html) for more infomation on running experiments with the Service API."
]
},
{
"cell_type": "code",
"execution_count": 1,
"id": "338b3f9c",
"metadata": {
"code_folding": [],
"customInput": null,
"execution": {
"iopub.execute_input": "2025-01-31T05:33:07.233835Z",
"iopub.status.busy": "2025-01-31T05:33:07.233484Z",
"iopub.status.idle": "2025-01-31T05:33:10.061697Z",
"shell.execute_reply": "2025-01-31T05:33:10.060702Z"
},
"hidden_ranges": [],
"originalKey": "06bf2029-0ea4-40b4-aced-956f1411cb6e",
"papermill": {
"duration": 2.856448,
"end_time": "2025-01-31T05:33:10.080809",
"exception": false,
"start_time": "2025-01-31T05:33:07.224361",
"status": "completed"
},
"showInput": true,
"tags": []
},
"outputs": [
{
"data": {
"text/html": [
""
]
},
"metadata": {},
"output_type": "display_data"
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:09] ax.utils.notebook.plotting: Injecting Plotly library into cell. Do not overwrite or delete cell.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:09] 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",
" \n",
" "
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"import torch\n",
"from ax.plot.pareto_frontier import plot_pareto_frontier\n",
"from ax.plot.pareto_utils import compute_posterior_pareto_frontier\n",
"from ax.service.ax_client import AxClient\n",
"from ax.service.utils.instantiation import ObjectiveProperties\n",
"\n",
"# Plotting imports and initialization\n",
"from ax.utils.notebook.plotting import init_notebook_plotting, render\n",
"from botorch.test_functions.multi_objective import BraninCurrin\n",
"\n",
"init_notebook_plotting()"
]
},
{
"cell_type": "code",
"execution_count": 2,
"id": "f245a035",
"metadata": {
"execution": {
"iopub.execute_input": "2025-01-31T05:33:10.175365Z",
"iopub.status.busy": "2025-01-31T05:33:10.174835Z",
"iopub.status.idle": "2025-01-31T05:33:10.179348Z",
"shell.execute_reply": "2025-01-31T05:33:10.178716Z"
},
"papermill": {
"duration": 0.053769,
"end_time": "2025-01-31T05:33:10.180723",
"exception": false,
"start_time": "2025-01-31T05:33:10.126954",
"status": "completed"
},
"tags": []
},
"outputs": [],
"source": [
"# Load our sample 2-objective problem\n",
"branin_currin = BraninCurrin(negate=True).to(\n",
" dtype=torch.double,\n",
" device=torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\"),\n",
")"
]
},
{
"cell_type": "code",
"execution_count": 3,
"id": "4f7ddc2b",
"metadata": {
"code_folding": [],
"customInput": null,
"execution": {
"iopub.execute_input": "2025-01-31T05:33:10.275840Z",
"iopub.status.busy": "2025-01-31T05:33:10.275298Z",
"iopub.status.idle": "2025-01-31T05:33:10.287759Z",
"shell.execute_reply": "2025-01-31T05:33:10.287024Z"
},
"executionStartTime": 1628191188673,
"executionStopTime": 1628191188746,
"hidden_ranges": [],
"originalKey": "c687973d-1b09-4a8f-9108-1f74adf64d4d",
"papermill": {
"duration": 0.061594,
"end_time": "2025-01-31T05:33:10.289139",
"exception": false,
"start_time": "2025-01-31T05:33:10.227545",
"status": "completed"
},
"requestMsgId": "ea523260-8896-48e4-a62f-3530d268b209",
"showInput": true,
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] ax.service.ax_client: Starting optimization with verbose logging. To disable logging, set the `verbose_logging` argument to `False`. Note that float values in the logs are rounded to 6 decimal points.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] ax.service.utils.instantiation: Inferred value type of ParameterType.FLOAT for parameter x1. 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 01-31 05:33:10] ax.service.utils.instantiation: Inferred value type of ParameterType.FLOAT for parameter x2. 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 01-31 05:33:10] ax.service.utils.instantiation: Created search space: SearchSpace(parameters=[RangeParameter(name='x1', parameter_type=FLOAT, range=[0.0, 1.0]), RangeParameter(name='x2', parameter_type=FLOAT, range=[0.0, 1.0])], parameter_constraints=[]).\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] ax.core.experiment: The is_test flag has been set to True. This flag is meant purely for development and integration testing purposes. If you are running a live experiment, please set this flag to False\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] 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 01-31 05:33:10] 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 01-31 05:33:10] ax.modelbridge.dispatch_utils: calculated num_initialization_trials=5\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] ax.modelbridge.dispatch_utils: num_completed_initialization_trials=0 num_remaining_initialization_trials=5\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] 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 01-31 05:33:10] 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",
" name=\"moo_experiment\",\n",
" parameters=[\n",
" {\n",
" \"name\": f\"x{i+1}\",\n",
" \"type\": \"range\",\n",
" \"bounds\": [0.0, 1.0],\n",
" }\n",
" for i in range(2)\n",
" ],\n",
" objectives={\n",
" # `threshold` arguments are optional\n",
" \"a\": ObjectiveProperties(minimize=False, threshold=branin_currin.ref_point[0]),\n",
" \"b\": ObjectiveProperties(minimize=False, threshold=branin_currin.ref_point[1]),\n",
" },\n",
" overwrite_existing_experiment=True,\n",
" is_test=True,\n",
")"
]
},
{
"cell_type": "markdown",
"id": "a7f2eabb",
"metadata": {
"code_folding": [],
"customInput": null,
"hidden_ranges": [],
"originalKey": "70fd45e1-a2ce-4034-bb44-086507833472",
"papermill": {
"duration": 0.046906,
"end_time": "2025-01-31T05:33:10.383259",
"exception": false,
"start_time": "2025-01-31T05:33:10.336353",
"status": "completed"
},
"showInput": true,
"tags": []
},
"source": [
"### Create an Evaluation Function\n",
"In the case of MOO experiments, evaluation functions can be any arbitrary function that takes in a `dict` of parameter names mapped to values and returns a `dict` of objective names mapped to a `tuple` of mean and SEM values."
]
},
{
"cell_type": "code",
"execution_count": 4,
"id": "a04dfc23",
"metadata": {
"code_folding": [],
"customInput": null,
"execution": {
"iopub.execute_input": "2025-01-31T05:33:10.478671Z",
"iopub.status.busy": "2025-01-31T05:33:10.478180Z",
"iopub.status.idle": "2025-01-31T05:33:10.482315Z",
"shell.execute_reply": "2025-01-31T05:33:10.481740Z"
},
"executionStartTime": 1628191201840,
"executionStopTime": 1628191201871,
"hidden_ranges": [],
"originalKey": "a0e4fa8d-ebc7-4dc6-b370-ed4a83e3208f",
"papermill": {
"duration": 0.053318,
"end_time": "2025-01-31T05:33:10.483643",
"exception": false,
"start_time": "2025-01-31T05:33:10.430325",
"status": "completed"
},
"requestMsgId": "9cfd336d-c317-4d1c-a028-42d45903bac6",
"showInput": true,
"tags": []
},
"outputs": [],
"source": [
"def evaluate(parameters):\n",
" evaluation = branin_currin(\n",
" torch.tensor([parameters.get(\"x1\"), parameters.get(\"x2\")])\n",
" )\n",
" # In our case, standard error is 0, since we are computing a synthetic function.\n",
" # Set standard error to None if the noise level is unknown.\n",
" return {\"a\": (evaluation[0].item(), 0.0), \"b\": (evaluation[1].item(), 0.0)}"
]
},
{
"cell_type": "markdown",
"id": "9b4b6ea5",
"metadata": {
"code_folding": [],
"customInput": null,
"hidden_ranges": [],
"originalKey": "4200cd7c-8e13-4cbf-b0c1-72b52d900aaf",
"papermill": {
"duration": 0.046994,
"end_time": "2025-01-31T05:33:10.577929",
"exception": false,
"start_time": "2025-01-31T05:33:10.530935",
"status": "completed"
},
"showInput": true,
"tags": []
},
"source": [
"### Run Optimization"
]
},
{
"cell_type": "code",
"execution_count": 5,
"id": "16820dd1",
"metadata": {
"customInput": null,
"execution": {
"iopub.execute_input": "2025-01-31T05:33:10.673049Z",
"iopub.status.busy": "2025-01-31T05:33:10.672768Z",
"iopub.status.idle": "2025-01-31T05:34:00.499521Z",
"shell.execute_reply": "2025-01-31T05:34:00.498852Z"
},
"executionStartTime": 1628191208271,
"executionStopTime": 1628191238749,
"originalKey": "f91b1a1e-c78a-4262-a211-a13115c007c1",
"papermill": {
"duration": 49.876125,
"end_time": "2025-01-31T05:34:00.500959",
"exception": false,
"start_time": "2025-01-31T05:33:10.624834",
"status": "completed"
},
"requestMsgId": "842a1cf8-97a3-43d6-83a3-f258ea96ae20",
"showInput": true,
"tags": []
},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/tmp.8SPGnWMU26/Ax-main/ax/modelbridge/cross_validation.py:439: UserWarning:\n",
"\n",
"Encountered exception in computing model fit quality: RandomModelBridge does not support prediction.\n",
"\n",
"[INFO 01-31 05:33:10] ax.service.ax_client: Generated new trial 0 with parameters {'x1': 0.746918, 'x2': 0.479699} using model Sobol.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] ax.service.ax_client: Completed trial 0 with data: {'a': (-56.747581, 0.0), 'b': (-6.859753, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/tmp.8SPGnWMU26/Ax-main/ax/modelbridge/cross_validation.py:439: UserWarning:\n",
"\n",
"Encountered exception in computing model fit quality: RandomModelBridge does not support prediction.\n",
"\n",
"[INFO 01-31 05:33:10] ax.service.ax_client: Generated new trial 1 with parameters {'x1': 0.086995, 'x2': 0.754964} using model Sobol.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] ax.service.ax_client: Completed trial 1 with data: {'a': (-7.215057, 0.0), 'b': (-5.161697, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/tmp.8SPGnWMU26/Ax-main/ax/modelbridge/cross_validation.py:439: UserWarning:\n",
"\n",
"Encountered exception in computing model fit quality: RandomModelBridge does not support prediction.\n",
"\n",
"[INFO 01-31 05:33:10] ax.service.ax_client: Generated new trial 2 with parameters {'x1': 0.46497, 'x2': 0.045244} using model Sobol.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] ax.service.ax_client: Completed trial 2 with data: {'a': (-13.422909, 0.0), 'b': (-11.961011, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/tmp.8SPGnWMU26/Ax-main/ax/modelbridge/cross_validation.py:439: UserWarning:\n",
"\n",
"Encountered exception in computing model fit quality: RandomModelBridge does not support prediction.\n",
"\n",
"[INFO 01-31 05:33:10] ax.service.ax_client: Generated new trial 3 with parameters {'x1': 0.869066, 'x2': 0.687956} using model Sobol.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] ax.service.ax_client: Completed trial 3 with data: {'a': (-85.115959, 0.0), 'b': (-5.337252, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/tmp/tmp.8SPGnWMU26/Ax-main/ax/modelbridge/cross_validation.py:439: UserWarning:\n",
"\n",
"Encountered exception in computing model fit quality: RandomModelBridge does not support prediction.\n",
"\n",
"[INFO 01-31 05:33:10] ax.service.ax_client: Generated new trial 4 with parameters {'x1': 0.973218, 'x2': 0.206337} using model Sobol.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:10] ax.service.ax_client: Completed trial 4 with data: {'a': (-0.762756, 0.0), 'b': (-9.297869, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:11] ax.service.ax_client: Generated new trial 5 with parameters {'x1': 0.0, 'x2': 0.993098} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:11] ax.service.ax_client: Completed trial 5 with data: {'a': (-17.971926, 0.0), 'b': (-1.18672, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:12] ax.service.ax_client: Generated new trial 6 with parameters {'x1': 0.291735, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:12] ax.service.ax_client: Completed trial 6 with data: {'a': (-81.100357, 0.0), 'b': (-5.284281, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:13] ax.service.ax_client: Generated new trial 7 with parameters {'x1': 0.0, 'x2': 0.85515} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:13] ax.service.ax_client: Completed trial 7 with data: {'a': (-31.734314, 0.0), 'b': (-1.328169, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:14] ax.service.ax_client: Generated new trial 8 with parameters {'x1': 0.080678, 'x2': 0.951566} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:14] ax.service.ax_client: Completed trial 8 with data: {'a': (-2.494925, 0.0), 'b': (-4.191863, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:16] ax.service.ax_client: Generated new trial 9 with parameters {'x1': 0.043467, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:16] ax.service.ax_client: Completed trial 9 with data: {'a': (-6.70921, 0.0), 'b': (-2.881385, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:17] ax.service.ax_client: Generated new trial 10 with parameters {'x1': 0.609723, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:17] ax.service.ax_client: Completed trial 10 with data: {'a': (-183.81427, 0.0), 'b': (-4.366278, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:18] ax.service.ax_client: Generated new trial 11 with parameters {'x1': 0.019607, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:18] ax.service.ax_client: Completed trial 11 with data: {'a': (-11.761579, 0.0), 'b': (-1.97527, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:19] ax.service.ax_client: Generated new trial 12 with parameters {'x1': 0.059941, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:19] ax.service.ax_client: Completed trial 12 with data: {'a': (-4.577833, 0.0), 'b': (-3.437746, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:21] ax.service.ax_client: Generated new trial 13 with parameters {'x1': 0.102202, 'x2': 0.885102} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:21] ax.service.ax_client: Completed trial 13 with data: {'a': (-0.944106, 0.0), 'b': (-4.965235, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:23] ax.service.ax_client: Generated new trial 14 with parameters {'x1': 0.0, 'x2': 0.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:23] ax.service.ax_client: Completed trial 14 with data: {'a': (-308.129059, 0.0), 'b': (-3.0, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:25] ax.service.ax_client: Generated new trial 15 with parameters {'x1': 0.030785, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:25] ax.service.ax_client: Completed trial 15 with data: {'a': (-9.116436, 0.0), 'b': (-2.411843, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:27] ax.service.ax_client: Generated new trial 16 with parameters {'x1': 0.008789, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:27] ax.service.ax_client: Completed trial 16 with data: {'a': (-14.76392, 0.0), 'b': (-1.539372, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:30] ax.service.ax_client: Generated new trial 17 with parameters {'x1': 0.069439, 'x2': 0.972496} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:30] ax.service.ax_client: Completed trial 17 with data: {'a': (-3.496262, 0.0), 'b': (-3.807144, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:33] ax.service.ax_client: Generated new trial 18 with parameters {'x1': 0.089752, 'x2': 0.916832} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:33] ax.service.ax_client: Completed trial 18 with data: {'a': (-1.675073, 0.0), 'b': (-4.549781, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:35] ax.service.ax_client: Generated new trial 19 with parameters {'x1': 0.003595, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:35] ax.service.ax_client: Completed trial 19 with data: {'a': (-16.353645, 0.0), 'b': (-1.327455, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/linear_operator/utils/cholesky.py:40: NumericalWarning:\n",
"\n",
"A not p.d., added jitter of 1.0e-08 to the diagonal\n",
"\n",
"[INFO 01-31 05:33:40] ax.service.ax_client: Generated new trial 20 with parameters {'x1': 0.014098, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:40] ax.service.ax_client: Completed trial 20 with data: {'a': (-13.237639, 0.0), 'b': (-1.754487, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/botorch/optim/optimize.py:652: RuntimeWarning:\n",
"\n",
"Optimization failed in `gen_candidates_scipy` with the following warning(s):\n",
"[NumericalWarning('A not p.d., added jitter of 1.0e-08 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-07 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-06 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-05 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-04 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-03 to the diagonal'), OptimizationWarning('Optimization failed within `scipy.optimize.minimize` with status 2 and message ABNORMAL: .'), NumericalWarning('A not p.d., added jitter of 1.0e-08 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-08 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-07 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-06 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-05 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-04 to the diagonal'), OptimizationWarning('Optimization failed within `scipy.optimize.minimize` with status 2 and message ABNORMAL: .'), NumericalWarning('A not p.d., added jitter of 1.0e-08 to the diagonal')]\n",
"Trying again with a new set of initial conditions.\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/botorch/optim/optimize.py:652: RuntimeWarning:\n",
"\n",
"Optimization failed on the second try, after generating a new set of initial conditions.\n",
"\n",
"/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/linear_operator/utils/cholesky.py:40: NumericalWarning:\n",
"\n",
"A not p.d., added jitter of 1.0e-08 to the diagonal\n",
"\n",
"[INFO 01-31 05:33:45] ax.service.ax_client: Generated new trial 21 with parameters {'x1': 0.051076, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:45] ax.service.ax_client: Completed trial 21 with data: {'a': (-5.581363, 0.0), 'b': (-3.146633, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/linear_operator/utils/cholesky.py:40: NumericalWarning:\n",
"\n",
"A not p.d., added jitter of 1.0e-08 to the diagonal\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/botorch/optim/optimize.py:652: RuntimeWarning:\n",
"\n",
"Optimization failed in `gen_candidates_scipy` with the following warning(s):\n",
"[NumericalWarning('A not p.d., added jitter of 1.0e-08 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-08 to the diagonal'), NumericalWarning('A not p.d., added jitter of 1.0e-08 to the diagonal'), OptimizationWarning('Optimization failed within `scipy.optimize.minimize` with status 2 and message ABNORMAL: .'), NumericalWarning('A not p.d., added jitter of 1.0e-08 to the diagonal')]\n",
"Trying again with a new set of initial conditions.\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/botorch/optim/optimize.py:652: RuntimeWarning:\n",
"\n",
"Optimization failed on the second try, after generating a new set of initial conditions.\n",
"\n",
"/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/linear_operator/utils/cholesky.py:40: NumericalWarning:\n",
"\n",
"A not p.d., added jitter of 1.0e-08 to the diagonal\n",
"\n",
"[INFO 01-31 05:33:54] ax.service.ax_client: Generated new trial 22 with parameters {'x1': 0.025049, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:54] ax.service.ax_client: Completed trial 22 with data: {'a': (-10.414244, 0.0), 'b': (-2.190018, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/linear_operator/utils/cholesky.py:40: NumericalWarning:\n",
"\n",
"A not p.d., added jitter of 1.0e-08 to the diagonal\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:57] ax.service.ax_client: Generated new trial 23 with parameters {'x1': 1.0, 'x2': 1.0} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:33:57] ax.service.ax_client: Completed trial 23 with data: {'a': (-145.872208, 0.0), 'b': (-4.005316, 0.0)}.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"/opt/hostedtoolcache/Python/3.10.16/x64/lib/python3.10/site-packages/linear_operator/utils/cholesky.py:40: NumericalWarning:\n",
"\n",
"A not p.d., added jitter of 1.0e-08 to the diagonal\n",
"\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:34:00] ax.service.ax_client: Generated new trial 24 with parameters {'x1': 0.11346, 'x2': 0.847211} using model BoTorch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"[INFO 01-31 05:34:00] ax.service.ax_client: Completed trial 24 with data: {'a': (-0.518156, 0.0), 'b': (-5.36139, 0.0)}.\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=evaluate(parameters))"
]
},
{
"cell_type": "markdown",
"id": "45a60d76",
"metadata": {
"code_folding": [],
"customInput": null,
"hidden_ranges": [],
"originalKey": "e0a6feb4-8c38-42e4-9d7c-62b79307e043",
"papermill": {
"duration": 0.049404,
"end_time": "2025-01-31T05:34:00.600335",
"exception": false,
"start_time": "2025-01-31T05:34:00.550931",
"status": "completed"
},
"showInput": false,
"tags": []
},
"source": [
"### Plot Pareto Frontier"
]
},
{
"cell_type": "code",
"execution_count": 6,
"id": "7c7337e5",
"metadata": {
"code_folding": [],
"customInput": null,
"execution": {
"iopub.execute_input": "2025-01-31T05:34:00.701265Z",
"iopub.status.busy": "2025-01-31T05:34:00.700664Z",
"iopub.status.idle": "2025-01-31T05:34:06.780644Z",
"shell.execute_reply": "2025-01-31T05:34:06.779700Z"
},
"executionStartTime": 1628191262231,
"executionStopTime": 1628191270720,
"hidden_ranges": [],
"originalKey": "c2c2b222-6b68-4f1a-839f-16b50019ada4",
"papermill": {
"duration": 6.150713,
"end_time": "2025-01-31T05:34:06.800382",
"exception": false,
"start_time": "2025-01-31T05:34:00.649669",
"status": "completed"
},
"requestMsgId": "563d345b-573c-4d93-a480-5db88a283250",
"showInput": true,
"tags": []
},
"outputs": [
{
"data": {
"application/vnd.plotly.v1+json": {
"config": {
"linkText": "Export to plot.ly",
"plotlyServerURL": "https://plot.ly",
"showLink": false
},
"data": [
{
"error_x": {
"array": {
"bdata": "txxC/vfYuT+3HEL+99i5P7ccQv732Lk/txxC/vfYuT+3HEL+99i5P7ccQv732Lk/txxC/vfYuT+3HEL+99i5P7ccQv732Lk/txxC/vfYuT+3HEL+99i5P7ccQv732Lk/zGtT/vfYuT9BxEr+99i5P8xrU/732Lk/QcRK/vfYuT+0w0eJ2gWvP5VGeAHawK0/AmO/XRS2tD9YEvMJowc0QA==",
"dtype": "f8"
},
"color": "rgba(128,177,211,0.4)",
"thickness": 2,
"type": "data"
},
"error_y": {
"array": {
"bdata": "Tsjm6mhXbT9OyObqaFdtP07I5upoV20/Tsjm6mhXbT9OyObqaFdtP07I5upoV20/Tsjm6mhXbT9OyObqaFdtP07I5upoV20/Tsjm6mhXbT9OyObqaFdtP07I5upoV20/ijQD62hXbT+KNAPraFdtP4o0A+toV20/ijQD62hXbT88/w8dzCZhPxbBlA4mcmI/foGk06NLZj/4QKybLfntPw==",
"dtype": "f8"
},
"color": "rgba(128,177,211,0.4)",
"thickness": 2,
"type": "data"
},
"hoverinfo": "text",
"legendgroup": "mean",
"marker": {
"color": "rgba(128,177,211,1)"
},
"mode": "markers",
"name": "mean",
"text": [
"Parameterization 0
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 1
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 2
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 3
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 4
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 5
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 6
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 7
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 8
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 9
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 10
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 11
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 12
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 13
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 14
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 15
b: -1.182 [-1.186, -1.179]
a: -17.508 [-17.609, -17.407]
Parameterization:
x1: 0.0
x2: 1.0",
"Parameterization 16
b: -1.457 [-1.459, -1.455]
a: -15.377 [-15.437, -15.316]
Parameterization:
x1: 0.006760602450591173
x2: 1.0",
"Parameterization 17
b: -2.695 [-2.697, -2.692]
a: -7.607 [-7.665, -7.549]
Parameterization:
x1: 0.03831249537480375
x2: 1.0",
"Parameterization 18
b: -3.987 [-3.990, -3.984]
a: -3.009 [-3.090, -2.928]
Parameterization:
x1: 0.07429624258713655
x2: 0.9598787860507524",
"Parameterization 19
b: -9.183 [-10.120, -8.246]
a: 1.21 [-18.820, 21.240]
Parameterization:
x1: 0.9222435019487533
x2: 0.18485638999809526"
],
"type": "scatter",
"x": [
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-17.507830947601462,
-15.376702909458643,
-7.606668572581135,
-3.0086948900317694,
1.2097581433244144
],
"y": [
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.1822318715678213,
-1.4572283543010993,
-2.6946778841831938,
-3.986917570739371,
-9.183024857668656
]
}
],
"layout": {
"height": 500,
"hovermode": "closest",
"legend": {
"orientation": "h"
},
"margin": {
"b": 75,
"l": 225,
"pad": 4,
"t": 75
},
"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"
}
],
"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"
}
],
"scattermap": [
{
"marker": {
"colorbar": {
"outlinewidth": 0,
"ticks": ""
}
},
"type": "scattermap"
}
],
"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": "Pareto Frontier"
},
"width": 750,
"xaxis": {
"ticksuffix": "",
"title": {
"text": "a"
},
"zeroline": true
},
"yaxis": {
"ticksuffix": "",
"title": {
"text": "b"
},
"zeroline": true
}
}
},
"text/html": [
"