Optimizing KB Mirrors with Bayesian Optimization#
In this tutorial, you will learn how to use Blop to optimize a Kirkpatrick-Baez (KB) mirror system. By the end, you will understand:
How degrees of freedom (DOFs) represent the parameters you can adjust in an experiment
How objectives define what you’re trying to optimize
How to write an evaluation function that extracts results from experimental data
How the Agent coordinates the optimization loop
How to check optimization health mid-run and continue
We’ll work with a simulated KB mirror beamline, but the concepts apply directly to real experimental setups.
What are KB Mirrors?#
KB mirror systems use two curved mirrors to focus X-ray beams. Each mirror has adjustable curvature—getting both just right produces a tight, intense focal spot. This is a multi-objective optimization problem: we want to maximize beam intensity while minimizing the spot size in both X and Y directions.
The image below shows our simulated setup: a beam from a geometric source propagates through a pair of toroidal mirrors that focus it onto a screen.

Setting Up the Environment#
Before we can optimize, we need to set up the data infrastructure. Blop uses Bluesky to run experiments and Tiled to store and retrieve data.
import logging
from pathlib import PurePath
import cv2
import numpy as np
import matplotlib.pyplot as plt
from tiled.client.container import Container
from bluesky_tiled_plugins import TiledWriter
from bluesky.run_engine import RunEngine
from tiled.client import from_uri # type: ignore[import-untyped]
from tiled.server import SimpleTiledServer
from ophyd_async.core import StaticPathProvider, UUIDFilenameProvider
from blop.ax import Agent, RangeDOF, Objective
from blop.protocols import EvaluationFunction
# Import simulation devices (requires: pip install -e sim/)
from blop_sim.backends.xrt import XRTBackend
from blop_sim.devices.xrt import KBMirror
from blop_sim.devices import DetectorDevice
# Suppress noisy logs from httpx
logging.getLogger("httpx").setLevel(logging.WARNING)
# Enable interactive plotting
plt.ion()
DETECTOR_STORAGE = "/tmp/blop/sim"
[WARNING 05-19 23:16:13] ax.storage.sqa_store.with_db_settings_base: Ax currently requires a sqlalchemy version below 2.0. This will be addressed in a future release. Disabling SQL storage in Ax for now, if you would like to use SQL storage please install Ax with mysql extras via `pip install ax-platform[mysql]`.
Next, we create a local Tiled server. The TiledWriter callback will save experimental data to this server, and our evaluation function will read from it.
tiled_server = SimpleTiledServer(readable_storage=[DETECTOR_STORAGE])
tiled_client = from_uri(tiled_server.uri)
tiled_writer = TiledWriter(tiled_client)
RE = RunEngine({})
RE.subscribe(tiled_writer)
Tiled version 0.2.9
0
Defining Degrees of Freedom#
Degrees of freedom (DOFs) are the parameters the optimizer can adjust. In our KB system, we control the curvature radius of each mirror. Let’s define the search space:
# Define search ranges for each mirror's curvature radius
# The optimal values (~38000 and ~21000) are intentionally placed
# away from the center to make the optimization more realistic
VERTICAL_BOUNDS = (25000, 45000) # Optimal ~38000 is in upper portion
HORIZONTAL_BOUNDS = (15000, 35000) # Optimal ~21000 is in lower portion
Now we create the simulation backend and individual devices. Each RangeDOF wraps an actuator (something we can move) with bounds that constrain the search space:
# Create XRT simulation backend
backend = XRTBackend()
# Create individual KB mirror devices
kbv = KBMirror(backend, mirror_index=0, initial_radius=38000, name="kbv")
kbh = KBMirror(backend, mirror_index=1, initial_radius=21000, name="kbh")
# Create detector device
det = DetectorDevice(backend, StaticPathProvider(UUIDFilenameProvider(), PurePath(DETECTOR_STORAGE)), name="det")
# Define DOFs using mirror radius signals
dofs = [
RangeDOF(actuator=kbv.radius, bounds=VERTICAL_BOUNDS, parameter_type="float"),
RangeDOF(actuator=kbh.radius, bounds=HORIZONTAL_BOUNDS, parameter_type="float"),
]
The actuator is the device that physically changes the parameter. The bounds tell the optimizer what range of values to explore. Think of DOFs as the “knobs” the optimizer can turn.
Defining Objectives#
Objectives specify what you want to optimize. Each objective has a name (matching a value your evaluation function will return) and a direction: minimize=True for things you want smaller, minimize=False for things you want larger.
For our KB mirrors, we have three objectives:
Intensity (
intensity): We want more signal →minimize=FalseSpot width (
width): We want a tighter spot →minimize=TrueSpot height (
height): We want a tighter spot →minimize=True
objectives = [
Objective(name="intensity", minimize=False),
Objective(name="width", minimize=True),
Objective(name="height", minimize=True),
]
With multiple objectives that can conflict (maximizing intensity might increase spot size), the optimizer finds the Pareto frontier—the set of solutions where you can’t improve one objective without sacrificing another.
Writing an Evaluation Function#
The evaluation function is the bridge between raw experimental data and the optimizer. After each measurement, the optimizer needs to know how well that configuration performed. Your evaluation function:
Receives a run UID and the suggestions that were tested
Reads the beam images from Tiled
Computes statistics (intensity, width, centroid, etc.) from the images
Returns outcome values for each suggestion
class DetectorEvaluation(EvaluationFunction):
def __init__(self, tiled_client: Container):
self.tiled_client = tiled_client
def _compute_stats(self, image: np.array) -> tuple[str, str, str]:
"""Compute integrated intensity and beam width/height from a beam image."""
# Convert to grayscale
gray = image.squeeze()
if gray.ndim == 3:
gray = cv2.cvtColor(gray, cv2.COLOR_BGR2GRAY)
# Convert data type for numerical stability
gray = gray.astype(np.float32)
# Smooth w/ (5, 5) kernel and threshold
blurred = cv2.GaussianBlur(gray, (5, 5), 0)
max_val = np.max(blurred)
if max_val == 0:
return 0.0, 0.0, 0.0
thresh_value = 0.2 * max_val
_, thresh = cv2.threshold(blurred, thresh_value, 255, cv2.THRESH_TOZERO)
# Total integrated intensity
total_intensity = np.sum(thresh)
# Beam width/height from intensity-weighted second moment (σ)
total_weight = np.sum(thresh)
if total_weight <= 0:
return total_intensity, 0.0, 0.0
h, w = thresh.shape
y_coords = np.arange(h, dtype=np.float32)
x_coords = np.arange(w, dtype=np.float32)
x_bar = np.sum(x_coords * np.sum(thresh, axis=0)) / total_weight
y_bar = np.sum(y_coords * np.sum(thresh, axis=1)) / total_weight
x_var = np.sum((x_coords - x_bar) ** 2 * np.sum(thresh, axis=0)) / total_weight
y_var = np.sum((y_coords - y_bar) ** 2 * np.sum(thresh, axis=1)) / total_weight
width = 2 * np.sqrt(x_var) # ~2σ width
height = 2 * np.sqrt(y_var) # ~2σ height
return total_intensity, width, height
def __call__(self, uid: str, suggestions: list[dict]) -> list[dict]:
outcomes = []
run = self.tiled_client[uid]
# Read beam images from detector
images = run["primary/det_image"].read()
# Suggestions are stored in the start document's metadata when
# using the `blop.plans.default_acquire` plan.
# You may want to store them differently in your experiment when writing
# a custom acquisition plan.
suggestion_ids = [suggestion["_id"] for suggestion in run.metadata["start"]["blop_suggestions"]]
# Compute statistics from each image
for idx, sid in enumerate(suggestion_ids):
image = images[idx]
intensity, width, height = self._compute_stats(image)
outcome = {
"_id": sid,
"intensity": intensity,
"width": width,
"height": height,
}
outcomes.append(outcome)
return outcomes
Note how we:
Read the image data from the stored detector data
Use image processing techniques to compute beam metrics from the raw detector images
Link each outcome back to its suggestion via the
_idfield
Creating and Running the Agent#
The Agent brings everything together. It:
Uses DOFs to know what parameters to adjust
Uses objectives to know what to optimize
Calls the evaluation function to assess each configuration
Builds a surrogate model to predict outcomes across the parameter space
Suggests the next configurations to try
agent = Agent(
sensors=[det],
dofs=dofs,
objectives=objectives,
evaluation_function=DetectorEvaluation(tiled_client),
name="xrt-blop-demo",
description="A demo of the Blop agent with XRT simulated beamline",
experiment_type="demo",
)
The sensors list contains any devices that produce data during acquisition. Here, det is our detector device.
Running the Optimization#
Let’s start the optimization. Rather than running all iterations at once, we’ll pause partway through to check the optimization’s health—a practical workflow you’ll use in real experiments.
# Run first 10 iterations
RE(agent.optimize(10))
╭───────────────────────────────────────────────── Optimization ──────────────────────────────────────────────────╮ │ Optimizer AxOptimizer │ │ Actuators kbv-radius, kbh-radius │ │ Sensors det │ │ Iterations 10 │ │ Run UID 606f7f39-767c-4129-975e-afaa8b488021 │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
ToroidMirror2
center:
[0, 11000, np.float64(176.32576420275802)]
[INFO 05-19 23:16:17] ax.api.client: GenerationStrategy(name='Center+Sobol+MBM:fast', nodes=[CenterGenerationNode(next_node_name='Sobol'), GenerationNode(name='Sobol', generator_specs=[GeneratorSpec(generator_enum=Sobol, generator_key_override=None)], transition_criteria=[MinTrials(transition_to='MBM'), MinTrials(transition_to='MBM')], suggested_experiment_status=ExperimentStatus.INITIALIZATION, pausing_criteria=[MaxTrialsAwaitingData(threshold=5)]), GenerationNode(name='MBM', generator_specs=[GeneratorSpec(generator_enum=BoTorch, generator_key_override=None)], transition_criteria=None, suggested_experiment_status=ExperimentStatus.OPTIMIZATION, pausing_criteria=None)]) chosen based on user input and problem structure.
[INFO 05-19 23:16:17] ax.api.client: Generated new trial 0 with parameters {'kbv-radius': 35000.0, 'kbh-radius': 25000.0} using GenerationNode CenterOfSearchSpace.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:18] ax.api.client: Trial 0 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:18] ax.api.client: Generated new trial 1 with parameters {'kbv-radius': 40107.185841, 'kbh-radius': 27243.521214} using GenerationNode Sobol.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:18] ax.api.client: Trial 1 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:18] ax.api.client: Generated new trial 2 with parameters {'kbv-radius': 25536.393207, 'kbh-radius': 15635.150261} using GenerationNode Sobol.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:18] ax.api.client: Trial 2 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:19] ax.api.client: Generated new trial 3 with parameters {'kbv-radius': 33238.535039, 'kbh-radius': 34549.125936} using GenerationNode Sobol.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:19] ax.api.client: Trial 3 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:19] ax.api.client: Generated new trial 4 with parameters {'kbv-radius': 38669.002708, 'kbh-radius': 23646.320775} using GenerationNode Sobol.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:19] ax.api.client: Trial 4 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:21] ax.api.client: Generated new trial 5 with parameters {'kbv-radius': 38966.895985, 'kbh-radius': 22380.850116} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:21] ax.api.client: Trial 5 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:23] ax.api.client: Generated new trial 6 with parameters {'kbv-radius': 38386.946684, 'kbh-radius': 20571.465701} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:23] ax.api.client: Trial 6 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:25] ax.api.client: Generated new trial 7 with parameters {'kbv-radius': 38432.989625, 'kbh-radius': 21381.01684} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:26] ax.api.client: Trial 7 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:28] ax.api.client: Generated new trial 8 with parameters {'kbv-radius': 38172.786516, 'kbh-radius': 22180.098203} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:29] ax.api.client: Trial 8 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:32] ax.api.client: Generated new trial 9 with parameters {'kbv-radius': 37945.060334, 'kbh-radius': 21160.173955} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:32] ax.api.client: Trial 9 marked COMPLETED.
──────────────────────────────────────────────── Iteration 1 / 10 ─────────────────────────────────────────────────
Acquire UID 18f12a15-623d-44af-887a-d08737a7fab0
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 0 │ 25000 │ 35000 │ 51.5722 │ 16514.6 │ 148.884 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 51.5722 max: 51.5722 mean: 51.5722 intensity min: 16514.6 max: 16514.6 mean: 16514.6 width min: 148.884 max: 148.884 mean: 148.884 (1 pts sampled)
──────────────────────────────────────────────── Iteration 2 / 10 ─────────────────────────────────────────────────
Acquire UID f822318b-9b39-46a7-a84e-543abeee9c73
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 1 │ 27243.5 │ 40107.2 │ 34.0163 │ 15013.8 │ 185.069 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 34.0163 max: 51.5722 mean: 42.7942 intensity min: 15013.8 max: 16514.6 mean: 15764.2 width min: 148.884 max: 185.069 mean: 166.977 (2 pts sampled)
──────────────────────────────────────────────── Iteration 3 / 10 ─────────────────────────────────────────────────
Acquire UID cddbd0ce-76d6-4725-a9c1-a02c75a5b19d
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 2 │ 15635.2 │ 25536.4 │ 163.306 │ 4537.94 │ 204.823 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 34.0163 max: 163.306 mean: 82.9649 intensity min: 4537.94 max: 16514.6 mean: 12022.1 width min: 148.884 max: 204.823 mean: 179.592 (3 pts sampled)
──────────────────────────────────────────────── Iteration 4 / 10 ─────────────────────────────────────────────────
Acquire UID 51c56936-5928-4c05-95ad-50ecf13a90df
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 3 │ 34549.1 │ 33238.5 │ 85.1415 │ 9043.42 │ 214.762 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 34.0163 max: 163.306 mean: 83.509 intensity min: 4537.94 max: 16514.6 mean: 11277.4 width min: 148.884 max: 214.762 mean: 188.385 (4 pts sampled)
──────────────────────────────────────────────── Iteration 5 / 10 ─────────────────────────────────────────────────
Acquire UID d16cf53f-c68b-4dee-95e7-0821aba7b8e8
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 4 │ 23646.3 │ 38669 │ 21.0754 │ 18691 │ 113.004 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 21.0754 max: 163.306 mean: 71.0223 intensity min: 4537.94 max: 18691 mean: 12760.1 width min: 113.004 max: 214.762 mean: 173.308 (5 pts sampled)
──────────────────────────────────────────────── Iteration 6 / 10 ─────────────────────────────────────────────────
Acquire UID f10f7d35-1f34-429d-8cba-99991615b7c1
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 5 │ 22380.9 │ 38966.9 │ 23.7744 │ 19027.9 │ 67.5644 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 21.0754 max: 163.306 mean: 63.1477 intensity min: 4537.94 max: 19027.9 mean: 13804.8 width min: 67.5644 max: 214.762 mean: 155.684 (6 pts sampled)
──────────────────────────────────────────────── Iteration 7 / 10 ─────────────────────────────────────────────────
Acquire UID adc3ab01-1c04-4203-8523-256d3bad0947
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 6 │ 20571.5 │ 38386.9 │ 16.7423 │ 17221.7 │ 12.4633 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 16.7423 max: 163.306 mean: 56.5183 intensity min: 4537.94 max: 19027.9 mean: 14292.9 width min: 12.4633 max: 214.762 mean: 135.224 (7 pts sampled)
──────────────────────────────────────────────── Iteration 8 / 10 ─────────────────────────────────────────────────
Acquire UID 5d7c1fbd-3b11-4b6e-ae2f-a684deb6218d
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 7 │ 21381 │ 38433 │ 17.8716 │ 17261.1 │ 24.0277 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 16.7423 max: 163.306 mean: 51.6875 intensity min: 4537.94 max: 19027.9 mean: 14663.9 width min: 12.4633 max: 214.762 mean: 121.325 (8 pts sampled)
──────────────────────────────────────────────── Iteration 9 / 10 ─────────────────────────────────────────────────
Acquire UID 8ab9836e-fccd-4f8c-85df-816c781c5274
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 8 │ 22180.1 │ 38172.8 │ 18.8113 │ 19184.7 │ 59.8615 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 16.7423 max: 163.306 mean: 48.0346 intensity min: 4537.94 max: 19184.7 mean: 15166.2 width min: 12.4633 max: 214.762 mean: 114.495 (9 pts sampled)
──────────────────────────────────────────────── Iteration 10 / 10 ────────────────────────────────────────────────
Acquire UID 49f40048-d191-45e0-b876-1b82ffe147d9
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 9 │ 21160.2 │ 37945.1 │ 16.1004 │ 17418.7 │ 18.4373 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 16.1004 max: 163.306 mean: 44.8412 intensity min: 4537.94 max: 19184.7 mean: 15391.5 width min: 12.4633 max: 214.762 mean: 104.89 (10 pts sampled)
Summary Statistics ┏━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━┓ ┃ Name ┃ Type ┃ Min ┃ Max ┃ Mean ┃ Std ┃ Count ┃ ┡━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━┩ │ kbh-radius │ param │ 15635.2 │ 34549.1 │ 23374.8 │ 4962.12 │ 10 │ │ kbv-radius │ param │ 25536.4 │ 40107.2 │ 36445.6 │ 4333.89 │ 10 │ │ height │ outcome │ 16.1004 │ 163.306 │ 44.8412 │ 46.9629 │ 10 │ │ intensity │ outcome │ 4537.94 │ 19184.7 │ 15391.5 │ 4818.42 │ 10 │ │ width │ outcome │ 12.4633 │ 214.762 │ 104.89 │ 79.2077 │ 10 │ └────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┘
────────────────────────────────────────────── Optimization Complete ──────────────────────────────────────────────
('606f7f39-767c-4129-975e-afaa8b488021',
'18f12a15-623d-44af-887a-d08737a7fab0',
'f822318b-9b39-46a7-a84e-543abeee9c73',
'cddbd0ce-76d6-4725-a9c1-a02c75a5b19d',
'51c56936-5928-4c05-95ad-50ecf13a90df',
'd16cf53f-c68b-4dee-95e7-0821aba7b8e8',
'f10f7d35-1f34-429d-8cba-99991615b7c1',
'adc3ab01-1c04-4203-8523-256d3bad0947',
'5d7c1fbd-3b11-4b6e-ae2f-a684deb6218d',
'8ab9836e-fccd-4f8c-85df-816c781c5274',
'49f40048-d191-45e0-b876-1b82ffe147d9')
Checking Optimization Health#
After running some iterations, it’s good practice to check how the optimization is progressing. Ax provides built-in health checks and diagnostics through compute_analyses():
_ = agent.ax_client.compute_analyses()
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:34] ax.service.utils.best_point: Using inferred objective thresholds: [ObjectiveThreshold(intensity >= 16805.078777253355), ObjectiveThreshold(width <= 124.96827958592291), ObjectiveThreshold(height <= 22.655418869020963)], as objective thresholds were not specified as part of the optimization configuration on the experiment.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:39] ax.service.utils.best_point: Using inferred objective thresholds: [ObjectiveThreshold(intensity >= 16805.078777253355), ObjectiveThreshold(width <= 124.96827958592291), ObjectiveThreshold(height <= 22.655418869020963)], as objective thresholds were not specified as part of the optimization configuration on the experiment.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:39] ax.service.utils.best_point: Using inferred objective thresholds: [ObjectiveThreshold(intensity >= 16805.078777253355), ObjectiveThreshold(width <= 124.96827958592291), ObjectiveThreshold(height <= 22.655418869020963)], as objective thresholds were not specified as part of the optimization configuration on the experiment.
This analysis provides an overview of the entire optimization process. It includes visualizations of the results obtained so far, insights into the parameter and metric relationships learned by the Ax model, diagnostics such as model fit, and health checks to assess the overall health of the experiment.
Result Analyses provide a high-level overview of the results of the optimization process so far with respect to the metrics specified in experiment design.
These pair of plots visualize the metric effects for each arm, with the Ax model predictions on the left and the raw observed data on the right. The predicted effects apply shrinkage for noise and adjust for non-stationarity in the data, so they are more representative of the reproducible effects that will manifest in a long-term validation experiment.
Modeled Arm Effects on intensity
Modeled effects on intensity. This plot visualizes predictions of the true metric changes for each arm based on Ax's model. This is the expected delta you would expect if you (re-)ran that arm. This plot helps in anticipating the outcomes and performance of arms based on the model's predictions. Note, flat predictions across arms indicate that the model predicts that there is no effect, meaning if you were to re-run the experiment, the delta you would see would be small and fall within the confidence interval indicated in the plot.
Observed Arm Effects on intensity
Observed effects on intensity. This plot visualizes the effects from previously-run arms on a specific metric, providing insights into their performance. This plot allows one to compare and contrast the effectiveness of different arms, highlighting which configurations have yielded the most favorable outcomes.
Modeled Arm Effects on width
Modeled effects on width. This plot visualizes predictions of the true metric changes for each arm based on Ax's model. This is the expected delta you would expect if you (re-)ran that arm. This plot helps in anticipating the outcomes and performance of arms based on the model's predictions. Note, flat predictions across arms indicate that the model predicts that there is no effect, meaning if you were to re-run the experiment, the delta you would see would be small and fall within the confidence interval indicated in the plot.
Observed Arm Effects on width
Observed effects on width. This plot visualizes the effects from previously-run arms on a specific metric, providing insights into their performance. This plot allows one to compare and contrast the effectiveness of different arms, highlighting which configurations have yielded the most favorable outcomes.
Modeled Arm Effects on height
Modeled effects on height. This plot visualizes predictions of the true metric changes for each arm based on Ax's model. This is the expected delta you would expect if you (re-)ran that arm. This plot helps in anticipating the outcomes and performance of arms based on the model's predictions. Note, flat predictions across arms indicate that the model predicts that there is no effect, meaning if you were to re-run the experiment, the delta you would see would be small and fall within the confidence interval indicated in the plot.
Observed Arm Effects on height
Observed effects on height. This plot visualizes the effects from previously-run arms on a specific metric, providing insights into their performance. This plot allows one to compare and contrast the effectiveness of different arms, highlighting which configurations have yielded the most favorable outcomes.
These plots display the effects of each arm on two metrics displayed on the x- and y-axes. They are useful for understanding the trade-off between the two metrics and for visualizing the Pareto frontier.
Modeled Effects: intensity vs. width
This plot displays the effects of each arm on the two selected metrics. It is useful for understanding the trade-off between the two metrics and for visualizing the Pareto frontier.
Modeled Effects: intensity vs. height
This plot displays the effects of each arm on the two selected metrics. It is useful for understanding the trade-off between the two metrics and for visualizing the Pareto frontier.
Modeled Effects: width vs. height
This plot displays the effects of each arm on the two selected metrics. It is useful for understanding the trade-off between the two metrics and for visualizing the Pareto frontier.
Utility Progression
Shows the hypervolume of the Pareto frontier achieved so far across completed trials. The x-axis shows trace index, which counts completed or early-stopped trials sequentially (1, 2, 3, ...). This differs from trial index, which may have gaps if some trials failed or were abandoned. For example, if trials 0, 2, and 5 completed while trials 1, 3, and 4 failed, the trace indices would be 1, 2, 3 corresponding to trial indices 0, 2, 5. The y-axis shows cumulative best hypervolume—only improvements, so flat segments indicate trials that didn't improve the frontier. Hypervolume measures the volume of objective space dominated by the Pareto frontier. Infeasible trials (violating outcome constraints) don't contribute to the improvements.
Pareto Frontier Trials for Experiment
Displays trials on the Pareto frontier based on raw observations. This reflects actual measured performance during execution. No trial is strictly better across all objectives. These trials represent optimal trade-offs between competing objectives. Use this to understand the available trade-offs and select a trial that best balances your optimization goals. Only considering COMPLETED trials.
| trial_index | arm_name | trial_status | generation_node | intensity | width | height | kbv-radius | kbh-radius | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 8 | 8_0 | COMPLETED | MBM | 19184.667969 | 59.861458 | 18.811335 | 38172.786516 | 22180.098203 |
| 1 | 9 | 9_0 | COMPLETED | MBM | 17418.738281 | 18.437265 | 16.100424 | 37945.060334 | 21160.173955 |
| 2 | 6 | 6_0 | COMPLETED | MBM | 17221.683594 | 12.463347 | 16.742319 | 38386.946684 | 20571.465701 |
Summary for xrt-blop-demo
High-level summary of the `Trial`-s in this `Experiment`
| trial_index | arm_name | trial_status | generation_node | intensity | width | height | kbv-radius | kbh-radius | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0_0 | COMPLETED | CenterOfSearchSpace | 16514.632812 | 148.884308 | 51.572174 | 35000.000000 | 25000.000000 |
| 1 | 1 | 1_0 | COMPLETED | Sobol | 15013.800781 | 185.068909 | 34.016315 | 40107.185841 | 27243.521214 |
| 2 | 2 | 2_0 | COMPLETED | Sobol | 4537.941406 | 204.823288 | 163.306183 | 25536.393207 | 15635.150261 |
| 3 | 3 | 3_0 | COMPLETED | Sobol | 9043.417969 | 214.761841 | 85.141525 | 33238.535039 | 34549.125936 |
| 4 | 4 | 4_0 | COMPLETED | Sobol | 18690.957031 | 113.003830 | 21.075401 | 38669.002708 | 23646.320775 |
| 5 | 5 | 5_0 | COMPLETED | MBM | 19027.859375 | 67.564415 | 23.774429 | 38966.895985 | 22380.850116 |
| 6 | 6 | 6_0 | COMPLETED | MBM | 17221.683594 | 12.463347 | 16.742319 | 38386.946684 | 20571.465701 |
| 7 | 7 | 7_0 | COMPLETED | MBM | 17261.140625 | 24.027714 | 17.871607 | 38432.989625 | 21381.016840 |
| 8 | 8 | 8_0 | COMPLETED | MBM | 19184.667969 | 59.861458 | 18.811335 | 38172.786516 | 22180.098203 |
| 9 | 9 | 9_0 | COMPLETED | MBM | 17418.738281 | 18.437265 | 16.100424 | 37945.060334 | 21160.173955 |
Insight Analyses display information to help understand the underlying experiment i.e parameter and metric relationships learned by the Ax model.Use this information to better understand your experiment space and users.
The top surfaces analysis displays three analyses in one. First, it shows parameter sensitivities, which shows the sensitivity of the metrics in the experiment to the most important parameters. Subsetting to only the most important parameters, it then shows slice plots and contour plots for each metric in the experiment, displaying the relationship between the metric and the most important parameters.
Sensitivity Analysis for intensity
Understand how each parameter affects intensity according to a second-order sensitivity analysis.
These plots show the relationship between a metric and a parameter. They show the predicted values of the metric on the y-axis as a function of the parameter on the x-axis while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
intensity vs. kbh-radius
The slice plot provides a one-dimensional view of predicted outcomes for intensity as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
intensity vs. kbv-radius
The slice plot provides a one-dimensional view of predicted outcomes for intensity as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
These plots show the relationship between a metric and two parameters. They show the predicted values of the metric (indicated by color) as a function of the two parameters on the x- and y-axes while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
intensity (Mean) vs. kbv-radius, kbh-radius
The contour plot visualizes the predicted outcomes for intensity across a two-dimensional parameter space, with other parameters held fixed at the center of the search space. This plot helps in identifying regions of optimal performance and understanding how changes in the selected parameters influence the predicted outcomes. Contour lines represent levels of constant predicted values, providing insights into the gradient and potential optima within the parameter space.
The top surfaces analysis displays three analyses in one. First, it shows parameter sensitivities, which shows the sensitivity of the metrics in the experiment to the most important parameters. Subsetting to only the most important parameters, it then shows slice plots and contour plots for each metric in the experiment, displaying the relationship between the metric and the most important parameters.
Sensitivity Analysis for width
Understand how each parameter affects width according to a second-order sensitivity analysis.
These plots show the relationship between a metric and a parameter. They show the predicted values of the metric on the y-axis as a function of the parameter on the x-axis while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
width vs. kbh-radius
The slice plot provides a one-dimensional view of predicted outcomes for width as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
width vs. kbv-radius
The slice plot provides a one-dimensional view of predicted outcomes for width as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
These plots show the relationship between a metric and two parameters. They show the predicted values of the metric (indicated by color) as a function of the two parameters on the x- and y-axes while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
width (Mean) vs. kbv-radius, kbh-radius
The contour plot visualizes the predicted outcomes for width across a two-dimensional parameter space, with other parameters held fixed at the center of the search space. This plot helps in identifying regions of optimal performance and understanding how changes in the selected parameters influence the predicted outcomes. Contour lines represent levels of constant predicted values, providing insights into the gradient and potential optima within the parameter space.
The top surfaces analysis displays three analyses in one. First, it shows parameter sensitivities, which shows the sensitivity of the metrics in the experiment to the most important parameters. Subsetting to only the most important parameters, it then shows slice plots and contour plots for each metric in the experiment, displaying the relationship between the metric and the most important parameters.
Sensitivity Analysis for height
Understand how each parameter affects height according to a second-order sensitivity analysis.
These plots show the relationship between a metric and a parameter. They show the predicted values of the metric on the y-axis as a function of the parameter on the x-axis while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
height vs. kbv-radius
The slice plot provides a one-dimensional view of predicted outcomes for height as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
height vs. kbh-radius
The slice plot provides a one-dimensional view of predicted outcomes for height as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
These plots show the relationship between a metric and two parameters. They show the predicted values of the metric (indicated by color) as a function of the two parameters on the x- and y-axes while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
height (Mean) vs. kbv-radius, kbh-radius
The contour plot visualizes the predicted outcomes for height across a two-dimensional parameter space, with other parameters held fixed at the center of the search space. This plot helps in identifying regions of optimal performance and understanding how changes in the selected parameters influence the predicted outcomes. Contour lines represent levels of constant predicted values, providing insights into the gradient and potential optima within the parameter space.
Diagnostic Analyses provide information about the optimization process and the quality of the model fit. You can use this information to understand if the experimental design should be adjusted to improve optimization quality.
Cross-validation plots display the model fit for each metric in the experiment. The model is trained on a subset of the data and then predicts the outcome for the remaining subset. The plots show the predicted outcome for the validation set on the y-axis against its actual value on the x-axis. Points that align closely with the dotted diagonal line indicate a strong model fit, signifying accurate predictions. Additionally, the plots include confidence intervals that provide insight into the noise in observations and the uncertainty in model predictions.
NOTE: A horizontal, flat line of predictions indicates that the model has not picked up on sufficient signal in the data, and instead is just predicting the mean.
Cross Validation for intensity (R² = 0.88)
The cross-validation plot displays the model fit for each metric in the experiment. It employs a leave-one-out approach, where the model is trained on all data except one sample, which is used for validation. The plot shows the predicted outcome for the validation set on the y-axis against its actual value on the x-axis. Points that align closely with the dotted diagonal line indicate a strong model fit, signifying accurate predictions. Additionally, the plot includes 95% confidence intervals that provide insight into the noise in observations and the uncertainty in model predictions. A horizontal, flat line of predictions indicates that the model has not picked up on sufficient signal in the data, and instead is just predicting the mean.
Cross Validation for width (R² = 0.88)
The cross-validation plot displays the model fit for each metric in the experiment. It employs a leave-one-out approach, where the model is trained on all data except one sample, which is used for validation. The plot shows the predicted outcome for the validation set on the y-axis against its actual value on the x-axis. Points that align closely with the dotted diagonal line indicate a strong model fit, signifying accurate predictions. Additionally, the plot includes 95% confidence intervals that provide insight into the noise in observations and the uncertainty in model predictions. A horizontal, flat line of predictions indicates that the model has not picked up on sufficient signal in the data, and instead is just predicting the mean.
Cross Validation for height (R² = 0.88)
The cross-validation plot displays the model fit for each metric in the experiment. It employs a leave-one-out approach, where the model is trained on all data except one sample, which is used for validation. The plot shows the predicted outcome for the validation set on the y-axis against its actual value on the x-axis. Points that align closely with the dotted diagonal line indicate a strong model fit, signifying accurate predictions. Additionally, the plot includes 95% confidence intervals that provide insight into the noise in observations and the uncertainty in model predictions. A horizontal, flat line of predictions indicates that the model has not picked up on sufficient signal in the data, and instead is just predicting the mean.
Generation Strategy Graph
GenerationStrategy: Center+Sobol+MBM:fast Visualize the structure of a GenerationStrategy as a directed graph. Each node represents a GenerationNode in the strategy, and edges represent transitions between nodes based on TransitionCriterion. Edge labels show the criterion class names that trigger the transition.
This runs all applicable analyses for the current experiment state, including health checks that flag potential issues like model fit problems or exploration gaps. Review these before continuing.
Continuing the Optimization#
The optimization state is preserved, so we can simply run more iterations:
# Run remaining 20 iterations
RE(agent.optimize(20))
╭───────────────────────────────────────────────── Optimization ──────────────────────────────────────────────────╮ │ Optimizer AxOptimizer │ │ Actuators kbv-radius, kbh-radius │ │ Sensors det │ │ Iterations 20 more (10 completed, 30 total) │ │ Run UID 74df2b0b-ec49-47b7-838d-2383b2924ba3 │ ╰─────────────────────────────────────────────────────────────────────────────────────────────────────────────────╯
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:41] ax.api.client: Generated new trial 10 with parameters {'kbv-radius': 45000.0, 'kbh-radius': 21297.931526} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:42] ax.api.client: Trial 10 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:46] ax.api.client: Generated new trial 11 with parameters {'kbv-radius': 38104.169617, 'kbh-radius': 19400.096171} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:46] ax.api.client: Trial 11 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:50] ax.api.client: Generated new trial 12 with parameters {'kbv-radius': 38132.798794, 'kbh-radius': 20084.276437} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:51] ax.api.client: Trial 12 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:16:57] ax.api.client: Generated new trial 13 with parameters {'kbv-radius': 37843.38616, 'kbh-radius': 20604.102296} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:16:58] ax.api.client: Trial 13 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:17:03] ax.api.client: Generated new trial 14 with parameters {'kbv-radius': 37730.255672, 'kbh-radius': 21567.978728} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:17:04] ax.api.client: Trial 14 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:17:11] ax.api.client: Generated new trial 15 with parameters {'kbv-radius': 37757.938877, 'kbh-radius': 19752.539451} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:17:11] ax.api.client: Trial 15 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:17:19] ax.api.client: Generated new trial 16 with parameters {'kbv-radius': 38131.425354, 'kbh-radius': 21436.729972} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:17:19] ax.api.client: Trial 16 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:17:27] ax.api.client: Generated new trial 17 with parameters {'kbv-radius': 37911.504184, 'kbh-radius': 19571.214697} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:17:27] ax.api.client: Trial 17 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:17:35] ax.api.client: Generated new trial 18 with parameters {'kbv-radius': 37614.351653, 'kbh-radius': 22257.770318} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:17:35] ax.api.client: Trial 18 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:17:44] ax.api.client: Generated new trial 19 with parameters {'kbv-radius': 37955.608868, 'kbh-radius': 19914.222231} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:17:44] ax.api.client: Trial 19 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:17:48] ax.api.client: Generated new trial 20 with parameters {'kbv-radius': 37438.314498, 'kbh-radius': 20590.477946} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:17:48] ax.api.client: Trial 20 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:17:56] ax.api.client: Generated new trial 21 with parameters {'kbv-radius': 37969.278962, 'kbh-radius': 20252.639384} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:17:57] ax.api.client: Trial 21 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:18:04] ax.api.client: Generated new trial 22 with parameters {'kbv-radius': 38039.962221, 'kbh-radius': 19688.178462} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:18:05] ax.api.client: Trial 22 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:18:13] ax.api.client: Generated new trial 23 with parameters {'kbv-radius': 28222.041704, 'kbh-radius': 20651.869965} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:18:14] ax.api.client: Trial 23 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:18:23] ax.api.client: Generated new trial 24 with parameters {'kbv-radius': 38135.295949, 'kbh-radius': 19510.65259} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:18:24] ax.api.client: Trial 24 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:18:30] ax.api.client: Generated new trial 25 with parameters {'kbv-radius': 38170.779928, 'kbh-radius': 20673.19283} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:18:31] ax.api.client: Trial 25 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:18:43] ax.api.client: Generated new trial 26 with parameters {'kbv-radius': 38425.638906, 'kbh-radius': 19783.89969} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:18:43] ax.api.client: Trial 26 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:18:52] ax.api.client: Generated new trial 27 with parameters {'kbv-radius': 37936.6938, 'kbh-radius': 20132.645172} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:18:53] ax.api.client: Trial 27 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:19:07] ax.api.client: Generated new trial 28 with parameters {'kbv-radius': 37961.232824, 'kbh-radius': 20404.252868} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:19:07] ax.api.client: Trial 28 marked COMPLETED.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/linear_operator/utils/cholesky.py:41: NumericalWarning: A not p.d., added jitter of 1.0e-08 to the diagonal
warnings.warn(
[INFO 05-19 23:19:10] ax.api.client: Generated new trial 29 with parameters {'kbv-radius': 38517.554024, 'kbh-radius': 20717.10702} using GenerationNode MBM.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
[INFO 05-19 23:19:11] ax.api.client: Trial 29 marked COMPLETED.
──────────────────────────────────────────────── Iteration 11 / 30 ────────────────────────────────────────────────
Acquire UID f994fead-aaaa-4755-a490-7f22d7b100eb
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 10 │ 21297.9 │ 45000 │ 90.4341 │ 15185.6 │ 18.8155 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 16.1004 max: 163.306 mean: 48.986 intensity min: 4537.94 max: 19184.7 mean: 15372.8 width min: 12.4633 max: 214.762 mean: 97.0647 (11 pts sampled)
──────────────────────────────────────────────── Iteration 12 / 30 ────────────────────────────────────────────────
Acquire UID 19a0803e-e070-472d-858c-b9c067ea49a0
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 11 │ 19400.1 │ 38104.2 │ 17.4942 │ 19119.2 │ 56.7792 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 16.1004 max: 163.306 mean: 46.3617 intensity min: 4537.94 max: 19184.7 mean: 15685 width min: 12.4633 max: 214.762 mean: 93.7076 (12 pts sampled)
──────────────────────────────────────────────── Iteration 13 / 30 ────────────────────────────────────────────────
Acquire UID b7776bb8-6953-4cb4-a72c-9cafb7df1bd6
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━┩ │ 0 │ 12 │ 20084.3 │ 38132.8 │ 16.7706 │ 17957.2 │ 22.831 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴────────┘
height min: 16.1004 max: 163.306 mean: 44.0854 intensity min: 4537.94 max: 19184.7 mean: 15859.7 width min: 12.4633 max: 214.762 mean: 88.2555 (13 pts sampled)
──────────────────────────────────────────────── Iteration 14 / 30 ────────────────────────────────────────────────
Acquire UID 017ea975-a348-4167-b63a-cbf5d723ffdc
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 13 │ 20604.1 │ 37843.4 │ 15.7236 │ 17670.3 │ 12.6789 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 42.0596 intensity min: 4537.94 max: 19184.7 mean: 15989.1 width min: 12.4633 max: 214.762 mean: 82.8572 (14 pts sampled)
──────────────────────────────────────────────── Iteration 15 / 30 ────────────────────────────────────────────────
Acquire UID e41bac07-1d93-4c8e-b28d-9aca82b743f3
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 14 │ 21568 │ 37730.3 │ 17.678 │ 18230.4 │ 33.5166 │ └───────┴───────────────┴────────────┴────────────┴────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 40.4341 intensity min: 4537.94 max: 19184.7 mean: 16138.5 width min: 12.4633 max: 214.762 mean: 79.5678 (15 pts sampled)
──────────────────────────────────────────────── Iteration 16 / 30 ────────────────────────────────────────────────
Acquire UID d44d3390-11da-4d9a-a94c-a7ed47f01e46
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 15 │ 19752.5 │ 37757.9 │ 17.0217 │ 17995.8 │ 36.1757 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 38.9709 intensity min: 4537.94 max: 19184.7 mean: 16254.6 width min: 12.4633 max: 214.762 mean: 76.8558 (16 pts sampled)
──────────────────────────────────────────────── Iteration 17 / 30 ────────────────────────────────────────────────
Acquire UID bf2d177f-aefa-4967-bc4d-ad217a78cc0e
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 16 │ 21436.7 │ 38131.4 │ 16.9393 │ 17690.9 │ 27.7754 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 37.6749 intensity min: 4537.94 max: 19184.7 mean: 16339.1 width min: 12.4633 max: 214.762 mean: 73.9687 (17 pts sampled)
──────────────────────────────────────────────── Iteration 18 / 30 ────────────────────────────────────────────────
Acquire UID 8fa3f491-0aaa-4bb1-92e8-b5be41bce304
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 17 │ 19571.2 │ 37911.5 │ 17.0275 │ 18439.1 │ 46.4699 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 36.5278 intensity min: 4537.94 max: 19184.7 mean: 16455.7 width min: 12.4633 max: 214.762 mean: 72.441 (18 pts sampled)
──────────────────────────────────────────────── Iteration 19 / 30 ────────────────────────────────────────────────
Acquire UID cca36125-09f2-443b-8e20-c53f487d4af0
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 18 │ 22257.8 │ 37614.4 │ 19.2355 │ 19193.9 │ 63.5127 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 35.6177 intensity min: 4537.94 max: 19193.9 mean: 16599.8 width min: 12.4633 max: 214.762 mean: 71.9711 (19 pts sampled)
──────────────────────────────────────────────── Iteration 20 / 30 ────────────────────────────────────────────────
Acquire UID b5ea3537-1d95-42ff-8228-5ff782598794
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 19 │ 19914.2 │ 37955.6 │ 16.2878 │ 17754.3 │ 29.4305 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 34.6512 intensity min: 4537.94 max: 19193.9 mean: 16657.6 width min: 12.4633 max: 214.762 mean: 69.8441 (20 pts sampled)
──────────────────────────────────────────────── Iteration 21 / 30 ────────────────────────────────────────────────
Acquire UID a2b920e8-2f44-4ca6-877c-bedb17b39be2
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 20 │ 20590.5 │ 37438.3 │ 17.2387 │ 17138.8 │ 12.7727 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 33.822 intensity min: 4537.94 max: 19193.9 mean: 16680.5 width min: 12.4633 max: 214.762 mean: 67.1264 (21 pts sampled)
──────────────────────────────────────────────── Iteration 22 / 30 ────────────────────────────────────────────────
Acquire UID c6289f6e-85c3-45a1-a49c-a618db4cfbd6
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 21 │ 20252.6 │ 37969.3 │ 15.8739 │ 17464.1 │ 17.4201 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 33.0062 intensity min: 4537.94 max: 19193.9 mean: 16716.1 width min: 12.4633 max: 214.762 mean: 64.867 (22 pts sampled)
──────────────────────────────────────────────── Iteration 23 / 30 ────────────────────────────────────────────────
Acquire UID c1438436-a671-426d-b857-f2f69c570590
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 22 │ 19688.2 │ 38040 │ 17.0437 │ 18691.1 │ 40.5696 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 32.3122 intensity min: 4537.94 max: 19193.9 mean: 16802 width min: 12.4633 max: 214.762 mean: 63.8106 (23 pts sampled)
──────────────────────────────────────────────── Iteration 24 / 30 ────────────────────────────────────────────────
Acquire UID ec02c238-7164-40f0-b4aa-c2424538d176
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 23 │ 20651.9 │ 28222 │ 154.674 │ 13634.6 │ 12.3651 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 37.4106 intensity min: 4537.94 max: 19193.9 mean: 16670 width min: 12.3651 max: 214.762 mean: 61.667 (24 pts sampled)
──────────────────────────────────────────────── Iteration 25 / 30 ────────────────────────────────────────────────
Acquire UID 6519fc83-a8c7-4f24-8df7-240f60f07b34
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 24 │ 19510.7 │ 38135.3 │ 17.1273 │ 18975.7 │ 50.6082 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 36.5993 intensity min: 4537.94 max: 19193.9 mean: 16762.2 width min: 12.3651 max: 214.762 mean: 61.2247 (25 pts sampled)
──────────────────────────────────────────────── Iteration 26 / 30 ────────────────────────────────────────────────
Acquire UID 3120fe04-b17b-4ab2-a748-71f9c59d3a34
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 25 │ 20673.2 │ 38170.8 │ 15.739 │ 17357.8 │ 12.4443 │ └───────┴───────────────┴────────────┴────────────┴────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 35.797 intensity min: 4537.94 max: 19193.9 mean: 16785.1 width min: 12.3651 max: 214.762 mean: 59.3485 (26 pts sampled)
──────────────────────────────────────────────── Iteration 27 / 30 ────────────────────────────────────────────────
Acquire UID eb5ccc88-32d5-4052-b62e-6d068bc6e64c
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 26 │ 19783.9 │ 38425.6 │ 17.9878 │ 17786.6 │ 34.5984 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 35.1374 intensity min: 4537.94 max: 19193.9 mean: 16822.2 width min: 12.3651 max: 214.762 mean: 58.4319 (27 pts sampled)
──────────────────────────────────────────────── Iteration 28 / 30 ────────────────────────────────────────────────
Acquire UID 57d1d506-a717-4e79-830d-cf21c0293aea
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 27 │ 20132.6 │ 37936.7 │ 16.0424 │ 17591.6 │ 21.0855 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.7236 max: 163.306 mean: 34.4554 intensity min: 4537.94 max: 19193.9 mean: 16849.7 width min: 12.3651 max: 214.762 mean: 57.0981 (28 pts sampled)
──────────────────────────────────────────────── Iteration 29 / 30 ────────────────────────────────────────────────
Acquire UID df9d3020-1efc-4aa3-bb9f-d4ebeeef1420
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 28 │ 20404.3 │ 37961.2 │ 15.6054 │ 17265.2 │ 14.0636 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.6054 max: 163.306 mean: 33.8054 intensity min: 4537.94 max: 19193.9 mean: 16864 width min: 12.3651 max: 214.762 mean: 55.6141 (29 pts sampled)
──────────────────────────────────────────────── Iteration 30 / 30 ────────────────────────────────────────────────
Acquire UID 2e7e65a5-e2d7-4fae-a555-4ae679d700bf
┏━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━━━┳━━━━━━━━━┓ ┃ Event ┃ Suggestion ID ┃ kbh-radius ┃ kbv-radius ┃ height ┃ intensity ┃ width ┃ ┡━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━━━╇━━━━━━━━━┩ │ 0 │ 29 │ 20717.1 │ 38517.6 │ 17.2635 │ 17206.9 │ 12.7825 │ └───────┴───────────────┴────────────┴────────────┴─────────┴───────────┴─────────┘
height min: 15.6054 max: 163.306 mean: 33.254 intensity min: 4537.94 max: 19193.9 mean: 16875.5 width min: 12.3651 max: 214.762 mean: 54.1864 (30 pts sampled)
Summary Statistics ┏━━━━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━━━┳━━━━━━━┓ ┃ Name ┃ Type ┃ Min ┃ Max ┃ Mean ┃ Std ┃ Count ┃ ┡━━━━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━━━╇━━━━━━━┩ │ kbh-radius │ param │ 15635.2 │ 34549.1 │ 21401.3 │ 3169.04 │ 30 │ │ kbv-radius │ param │ 25536.4 │ 45000 │ 37381.8 │ 3360.67 │ 30 │ │ height │ outcome │ 15.6054 │ 163.306 │ 33.254 │ 38.9681 │ 30 │ │ intensity │ outcome │ 4537.94 │ 19193.9 │ 16875.5 │ 3070.89 │ 30 │ │ width │ outcome │ 12.3651 │ 214.762 │ 54.1864 │ 58.6942 │ 30 │ └────────────┴─────────┴─────────┴─────────┴─────────┴─────────┴───────┘
────────────────────────────────────────────── Optimization Complete ──────────────────────────────────────────────
('74df2b0b-ec49-47b7-838d-2383b2924ba3',
'f994fead-aaaa-4755-a490-7f22d7b100eb',
'19a0803e-e070-472d-858c-b9c067ea49a0',
'b7776bb8-6953-4cb4-a72c-9cafb7df1bd6',
'017ea975-a348-4167-b63a-cbf5d723ffdc',
'e41bac07-1d93-4c8e-b28d-9aca82b743f3',
'd44d3390-11da-4d9a-a94c-a7ed47f01e46',
'bf2d177f-aefa-4967-bc4d-ad217a78cc0e',
'8fa3f491-0aaa-4bb1-92e8-b5be41bce304',
'cca36125-09f2-443b-8e20-c53f487d4af0',
'b5ea3537-1d95-42ff-8228-5ff782598794',
'a2b920e8-2f44-4ca6-877c-bedb17b39be2',
'c6289f6e-85c3-45a1-a49c-a618db4cfbd6',
'c1438436-a671-426d-b857-f2f69c570590',
'ec02c238-7164-40f0-b4aa-c2424538d176',
'6519fc83-a8c7-4f24-8df7-240f60f07b34',
'3120fe04-b17b-4ab2-a748-71f9c59d3a34',
'eb5ccc88-32d5-4052-b62e-6d068bc6e64c',
'57d1d506-a717-4e79-830d-cf21c0293aea',
'df9d3020-1efc-4aa3-bb9f-d4ebeeef1420',
'2e7e65a5-e2d7-4fae-a555-4ae679d700bf')
Understanding the Results#
After optimization, we can examine what the agent learned. Let’s run the full suite of analyses again to see how things have improved:
_ = agent.ax_client.compute_analyses()
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:19:12] ax.service.utils.best_point: Using inferred objective thresholds: [ObjectiveThreshold(intensity >= 17951.211424097368), ObjectiveThreshold(width <= 64.24674825327826), ObjectiveThreshold(height <= 19.155096827531835)], as objective thresholds were not specified as part of the optimization configuration on the experiment.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/core/data.py:365: FutureWarning: DataFrameGroupBy.apply operated on the grouping columns. This behavior is deprecated, and in a future version of pandas the grouping columns will be excluded from the operation. Either pass `include_groups=False` to exclude the groupings or explicitly select the grouping columns after groupby to silence this warning.
self.full_df.groupby(self.DEDUPLICATE_BY_COLUMNS).apply(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:19:17] ax.service.utils.best_point: Using inferred objective thresholds: [ObjectiveThreshold(intensity >= 17951.211424097368), ObjectiveThreshold(width <= 64.24674825327826), ObjectiveThreshold(height <= 19.155096827531835)], as objective thresholds were not specified as part of the optimization configuration on the experiment.
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:19:17] ax.service.utils.best_point: Using inferred objective thresholds: [ObjectiveThreshold(intensity >= 17951.211424097368), ObjectiveThreshold(width <= 64.24674825327826), ObjectiveThreshold(height <= 19.155096827531835)], as objective thresholds were not specified as part of the optimization configuration on the experiment.
This analysis provides an overview of the entire optimization process. It includes visualizations of the results obtained so far, insights into the parameter and metric relationships learned by the Ax model, diagnostics such as model fit, and health checks to assess the overall health of the experiment.
Result Analyses provide a high-level overview of the results of the optimization process so far with respect to the metrics specified in experiment design.
These pair of plots visualize the metric effects for each arm, with the Ax model predictions on the left and the raw observed data on the right. The predicted effects apply shrinkage for noise and adjust for non-stationarity in the data, so they are more representative of the reproducible effects that will manifest in a long-term validation experiment.
Modeled Arm Effects on intensity
Modeled effects on intensity. This plot visualizes predictions of the true metric changes for each arm based on Ax's model. This is the expected delta you would expect if you (re-)ran that arm. This plot helps in anticipating the outcomes and performance of arms based on the model's predictions. Note, flat predictions across arms indicate that the model predicts that there is no effect, meaning if you were to re-run the experiment, the delta you would see would be small and fall within the confidence interval indicated in the plot.
Observed Arm Effects on intensity
Observed effects on intensity. This plot visualizes the effects from previously-run arms on a specific metric, providing insights into their performance. This plot allows one to compare and contrast the effectiveness of different arms, highlighting which configurations have yielded the most favorable outcomes.
Modeled Arm Effects on width
Modeled effects on width. This plot visualizes predictions of the true metric changes for each arm based on Ax's model. This is the expected delta you would expect if you (re-)ran that arm. This plot helps in anticipating the outcomes and performance of arms based on the model's predictions. Note, flat predictions across arms indicate that the model predicts that there is no effect, meaning if you were to re-run the experiment, the delta you would see would be small and fall within the confidence interval indicated in the plot.
Observed Arm Effects on width
Observed effects on width. This plot visualizes the effects from previously-run arms on a specific metric, providing insights into their performance. This plot allows one to compare and contrast the effectiveness of different arms, highlighting which configurations have yielded the most favorable outcomes.
Modeled Arm Effects on height
Modeled effects on height. This plot visualizes predictions of the true metric changes for each arm based on Ax's model. This is the expected delta you would expect if you (re-)ran that arm. This plot helps in anticipating the outcomes and performance of arms based on the model's predictions. Note, flat predictions across arms indicate that the model predicts that there is no effect, meaning if you were to re-run the experiment, the delta you would see would be small and fall within the confidence interval indicated in the plot.
Observed Arm Effects on height
Observed effects on height. This plot visualizes the effects from previously-run arms on a specific metric, providing insights into their performance. This plot allows one to compare and contrast the effectiveness of different arms, highlighting which configurations have yielded the most favorable outcomes.
These plots display the effects of each arm on two metrics displayed on the x- and y-axes. They are useful for understanding the trade-off between the two metrics and for visualizing the Pareto frontier.
Modeled Effects: intensity vs. width
This plot displays the effects of each arm on the two selected metrics. It is useful for understanding the trade-off between the two metrics and for visualizing the Pareto frontier.
Modeled Effects: intensity vs. height
This plot displays the effects of each arm on the two selected metrics. It is useful for understanding the trade-off between the two metrics and for visualizing the Pareto frontier.
Modeled Effects: width vs. height
This plot displays the effects of each arm on the two selected metrics. It is useful for understanding the trade-off between the two metrics and for visualizing the Pareto frontier.
Utility Progression
Shows the hypervolume of the Pareto frontier achieved so far across completed trials. The x-axis shows trace index, which counts completed or early-stopped trials sequentially (1, 2, 3, ...). This differs from trial index, which may have gaps if some trials failed or were abandoned. For example, if trials 0, 2, and 5 completed while trials 1, 3, and 4 failed, the trace indices would be 1, 2, 3 corresponding to trial indices 0, 2, 5. The y-axis shows cumulative best hypervolume—only improvements, so flat segments indicate trials that didn't improve the frontier. Hypervolume measures the volume of objective space dominated by the Pareto frontier. Infeasible trials (violating outcome constraints) don't contribute to the improvements.
Pareto Frontier Trials for Experiment
Displays trials on the Pareto frontier based on raw observations. This reflects actual measured performance during execution. No trial is strictly better across all objectives. These trials represent optimal trade-offs between competing objectives. Use this to understand the available trade-offs and select a trial that best balances your optimization goals. Only considering COMPLETED trials.
| trial_index | arm_name | trial_status | generation_node | intensity | width | height | kbv-radius | kbh-radius | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 22 | 22_0 | COMPLETED | MBM | 18691.136719 | 40.569580 | 17.043682 | 38039.962221 | 19688.178462 |
| 1 | 24 | 24_0 | COMPLETED | MBM | 18975.738281 | 50.608227 | 17.127310 | 38135.295949 | 19510.652590 |
| 2 | 17 | 17_0 | COMPLETED | MBM | 18439.074219 | 46.469910 | 17.027487 | 37911.504184 | 19571.214697 |
| 3 | 11 | 11_0 | COMPLETED | MBM | 19119.156250 | 56.779202 | 17.494156 | 38104.169617 | 19400.096171 |
| 4 | 14 | 14_0 | COMPLETED | MBM | 18230.425781 | 33.516594 | 17.677996 | 37730.255672 | 21567.978728 |
| 5 | 15 | 15_0 | COMPLETED | MBM | 17995.777344 | 36.175663 | 17.021694 | 37757.938877 | 19752.539451 |
| 6 | 8 | 8_0 | COMPLETED | MBM | 19184.667969 | 59.861458 | 18.811335 | 38172.786516 | 22180.098203 |
| 7 | 12 | 12_0 | COMPLETED | MBM | 17957.171875 | 22.831009 | 16.770588 | 38132.798794 | 20084.276437 |
Summary for xrt-blop-demo
High-level summary of the `Trial`-s in this `Experiment`
| trial_index | arm_name | trial_status | generation_node | intensity | width | height | kbv-radius | kbh-radius | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0_0 | COMPLETED | CenterOfSearchSpace | 16514.632812 | 148.884308 | 51.572174 | 35000.000000 | 25000.000000 |
| 1 | 1 | 1_0 | COMPLETED | Sobol | 15013.800781 | 185.068909 | 34.016315 | 40107.185841 | 27243.521214 |
| 2 | 2 | 2_0 | COMPLETED | Sobol | 4537.941406 | 204.823288 | 163.306183 | 25536.393207 | 15635.150261 |
| 3 | 3 | 3_0 | COMPLETED | Sobol | 9043.417969 | 214.761841 | 85.141525 | 33238.535039 | 34549.125936 |
| 4 | 4 | 4_0 | COMPLETED | Sobol | 18690.957031 | 113.003830 | 21.075401 | 38669.002708 | 23646.320775 |
| 5 | 5 | 5_0 | COMPLETED | MBM | 19027.859375 | 67.564415 | 23.774429 | 38966.895985 | 22380.850116 |
| 6 | 6 | 6_0 | COMPLETED | MBM | 17221.683594 | 12.463347 | 16.742319 | 38386.946684 | 20571.465701 |
| 7 | 7 | 7_0 | COMPLETED | MBM | 17261.140625 | 24.027714 | 17.871607 | 38432.989625 | 21381.016840 |
| 8 | 8 | 8_0 | COMPLETED | MBM | 19184.667969 | 59.861458 | 18.811335 | 38172.786516 | 22180.098203 |
| 9 | 9 | 9_0 | COMPLETED | MBM | 17418.738281 | 18.437265 | 16.100424 | 37945.060334 | 21160.173955 |
| 10 | 10 | 10_0 | COMPLETED | MBM | 15185.558594 | 18.815474 | 90.434082 | 45000.000000 | 21297.931526 |
| 11 | 11 | 11_0 | COMPLETED | MBM | 19119.156250 | 56.779202 | 17.494156 | 38104.169617 | 19400.096171 |
| 12 | 12 | 12_0 | COMPLETED | MBM | 17957.171875 | 22.831009 | 16.770588 | 38132.798794 | 20084.276437 |
| 13 | 13 | 13_0 | COMPLETED | MBM | 17670.261719 | 12.678870 | 15.723617 | 37843.386160 | 20604.102296 |
| 14 | 14 | 14_0 | COMPLETED | MBM | 18230.425781 | 33.516594 | 17.677996 | 37730.255672 | 21567.978728 |
| 15 | 15 | 15_0 | COMPLETED | MBM | 17995.777344 | 36.175663 | 17.021694 | 37757.938877 | 19752.539451 |
| 16 | 16 | 16_0 | COMPLETED | MBM | 17690.945312 | 27.775412 | 16.939339 | 38131.425354 | 21436.729972 |
| 17 | 17 | 17_0 | COMPLETED | MBM | 18439.074219 | 46.469910 | 17.027487 | 37911.504184 | 19571.214697 |
| 18 | 18 | 18_0 | COMPLETED | MBM | 19193.875000 | 63.512718 | 19.235533 | 37614.351653 | 22257.770318 |
| 19 | 19 | 19_0 | COMPLETED | MBM | 17754.332031 | 29.430490 | 16.287758 | 37955.608868 | 19914.222231 |
| 20 | 20 | 20_0 | COMPLETED | MBM | 17138.769531 | 12.772702 | 17.238726 | 37438.314498 | 20590.477946 |
| 21 | 21 | 21_0 | COMPLETED | MBM | 17464.113281 | 17.420095 | 15.873864 | 37969.278962 | 20252.639384 |
| 22 | 22 | 22_0 | COMPLETED | MBM | 18691.136719 | 40.569580 | 17.043682 | 38039.962221 | 19688.178462 |
| 23 | 23 | 23_0 | COMPLETED | MBM | 13634.648438 | 12.365093 | 154.674469 | 28222.041704 | 20651.869965 |
| 24 | 24 | 24_0 | COMPLETED | MBM | 18975.738281 | 50.608227 | 17.127310 | 38135.295949 | 19510.652590 |
| 25 | 25 | 25_0 | COMPLETED | MBM | 17357.804688 | 12.444318 | 15.738993 | 38170.779928 | 20673.192830 |
| 26 | 26 | 26_0 | COMPLETED | MBM | 17786.605469 | 34.598392 | 17.987768 | 38425.638906 | 19783.899690 |
| 27 | 27 | 27_0 | COMPLETED | MBM | 17591.617188 | 21.085464 | 16.042383 | 37936.693800 | 20132.645172 |
| 28 | 28 | 28_0 | COMPLETED | MBM | 17265.238281 | 14.063565 | 15.605353 | 37961.232824 | 20404.252868 |
| 29 | 29 | 29_0 | COMPLETED | MBM | 17206.882812 | 12.782537 | 17.263485 | 38517.554024 | 20717.107020 |
Insight Analyses display information to help understand the underlying experiment i.e parameter and metric relationships learned by the Ax model.Use this information to better understand your experiment space and users.
The top surfaces analysis displays three analyses in one. First, it shows parameter sensitivities, which shows the sensitivity of the metrics in the experiment to the most important parameters. Subsetting to only the most important parameters, it then shows slice plots and contour plots for each metric in the experiment, displaying the relationship between the metric and the most important parameters.
Sensitivity Analysis for intensity
Understand how each parameter affects intensity according to a second-order sensitivity analysis.
These plots show the relationship between a metric and a parameter. They show the predicted values of the metric on the y-axis as a function of the parameter on the x-axis while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
intensity vs. kbv-radius
The slice plot provides a one-dimensional view of predicted outcomes for intensity as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
intensity vs. kbh-radius
The slice plot provides a one-dimensional view of predicted outcomes for intensity as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
These plots show the relationship between a metric and two parameters. They show the predicted values of the metric (indicated by color) as a function of the two parameters on the x- and y-axes while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
intensity (Mean) vs. kbv-radius, kbh-radius
The contour plot visualizes the predicted outcomes for intensity across a two-dimensional parameter space, with other parameters held fixed at the center of the search space. This plot helps in identifying regions of optimal performance and understanding how changes in the selected parameters influence the predicted outcomes. Contour lines represent levels of constant predicted values, providing insights into the gradient and potential optima within the parameter space.
The top surfaces analysis displays three analyses in one. First, it shows parameter sensitivities, which shows the sensitivity of the metrics in the experiment to the most important parameters. Subsetting to only the most important parameters, it then shows slice plots and contour plots for each metric in the experiment, displaying the relationship between the metric and the most important parameters.
Sensitivity Analysis for width
Understand how each parameter affects width according to a second-order sensitivity analysis.
These plots show the relationship between a metric and a parameter. They show the predicted values of the metric on the y-axis as a function of the parameter on the x-axis while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
width vs. kbh-radius
The slice plot provides a one-dimensional view of predicted outcomes for width as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
width vs. kbv-radius
The slice plot provides a one-dimensional view of predicted outcomes for width as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
These plots show the relationship between a metric and two parameters. They show the predicted values of the metric (indicated by color) as a function of the two parameters on the x- and y-axes while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
width (Mean) vs. kbv-radius, kbh-radius
The contour plot visualizes the predicted outcomes for width across a two-dimensional parameter space, with other parameters held fixed at the center of the search space. This plot helps in identifying regions of optimal performance and understanding how changes in the selected parameters influence the predicted outcomes. Contour lines represent levels of constant predicted values, providing insights into the gradient and potential optima within the parameter space.
The top surfaces analysis displays three analyses in one. First, it shows parameter sensitivities, which shows the sensitivity of the metrics in the experiment to the most important parameters. Subsetting to only the most important parameters, it then shows slice plots and contour plots for each metric in the experiment, displaying the relationship between the metric and the most important parameters.
Sensitivity Analysis for height
Understand how each parameter affects height according to a second-order sensitivity analysis.
These plots show the relationship between a metric and a parameter. They show the predicted values of the metric on the y-axis as a function of the parameter on the x-axis while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
height vs. kbv-radius
The slice plot provides a one-dimensional view of predicted outcomes for height as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
height vs. kbh-radius
The slice plot provides a one-dimensional view of predicted outcomes for height as a function of a single parameter, while keeping all other parameters fixed at the center of the search space. This visualization helps in understanding the sensitivity and impact of changes in the selected parameter on the predicted metric outcomes.
These plots show the relationship between a metric and two parameters. They show the predicted values of the metric (indicated by color) as a function of the two parameters on the x- and y-axes while keeping all other parameters fixed at their status_quo value (if available), best trial value, or the center of the search space.
height (Mean) vs. kbv-radius, kbh-radius
The contour plot visualizes the predicted outcomes for height across a two-dimensional parameter space, with other parameters held fixed at the center of the search space. This plot helps in identifying regions of optimal performance and understanding how changes in the selected parameters influence the predicted outcomes. Contour lines represent levels of constant predicted values, providing insights into the gradient and potential optima within the parameter space.
Diagnostic Analyses provide information about the optimization process and the quality of the model fit. You can use this information to understand if the experimental design should be adjusted to improve optimization quality.
Cross-validation plots display the model fit for each metric in the experiment. The model is trained on a subset of the data and then predicts the outcome for the remaining subset. The plots show the predicted outcome for the validation set on the y-axis against its actual value on the x-axis. Points that align closely with the dotted diagonal line indicate a strong model fit, signifying accurate predictions. Additionally, the plots include confidence intervals that provide insight into the noise in observations and the uncertainty in model predictions.
NOTE: A horizontal, flat line of predictions indicates that the model has not picked up on sufficient signal in the data, and instead is just predicting the mean.
Cross Validation for intensity (R² = 0.22)
The cross-validation plot displays the model fit for each metric in the experiment. It employs a leave-one-out approach, where the model is trained on all data except one sample, which is used for validation. The plot shows the predicted outcome for the validation set on the y-axis against its actual value on the x-axis. Points that align closely with the dotted diagonal line indicate a strong model fit, signifying accurate predictions. Additionally, the plot includes 95% confidence intervals that provide insight into the noise in observations and the uncertainty in model predictions. A horizontal, flat line of predictions indicates that the model has not picked up on sufficient signal in the data, and instead is just predicting the mean.
Cross Validation for width (R² = 0.79)
The cross-validation plot displays the model fit for each metric in the experiment. It employs a leave-one-out approach, where the model is trained on all data except one sample, which is used for validation. The plot shows the predicted outcome for the validation set on the y-axis against its actual value on the x-axis. Points that align closely with the dotted diagonal line indicate a strong model fit, signifying accurate predictions. Additionally, the plot includes 95% confidence intervals that provide insight into the noise in observations and the uncertainty in model predictions. A horizontal, flat line of predictions indicates that the model has not picked up on sufficient signal in the data, and instead is just predicting the mean.
Cross Validation for height (R² = 0.66)
The cross-validation plot displays the model fit for each metric in the experiment. It employs a leave-one-out approach, where the model is trained on all data except one sample, which is used for validation. The plot shows the predicted outcome for the validation set on the y-axis against its actual value on the x-axis. Points that align closely with the dotted diagonal line indicate a strong model fit, signifying accurate predictions. Additionally, the plot includes 95% confidence intervals that provide insight into the noise in observations and the uncertainty in model predictions. A horizontal, flat line of predictions indicates that the model has not picked up on sufficient signal in the data, and instead is just predicting the mean.
Generation Strategy Graph
GenerationStrategy: Center+Sobol+MBM:fast Visualize the structure of a GenerationStrategy as a directed graph. Each node represents a GenerationNode in the strategy, and edges represent transitions between nodes based on TransitionCriterion. Edge labels show the criterion class names that trigger the transition.
We can also get a tabular summary of the trials:
agent.ax_client.summarize()
| trial_index | arm_name | trial_status | generation_node | intensity | width | height | kbv-radius | kbh-radius | |
|---|---|---|---|---|---|---|---|---|---|
| 0 | 0 | 0_0 | COMPLETED | CenterOfSearchSpace | 16514.632812 | 148.884308 | 51.572174 | 35000.000000 | 25000.000000 |
| 1 | 1 | 1_0 | COMPLETED | Sobol | 15013.800781 | 185.068909 | 34.016315 | 40107.185841 | 27243.521214 |
| 2 | 2 | 2_0 | COMPLETED | Sobol | 4537.941406 | 204.823288 | 163.306183 | 25536.393207 | 15635.150261 |
| 3 | 3 | 3_0 | COMPLETED | Sobol | 9043.417969 | 214.761841 | 85.141525 | 33238.535039 | 34549.125936 |
| 4 | 4 | 4_0 | COMPLETED | Sobol | 18690.957031 | 113.003830 | 21.075401 | 38669.002708 | 23646.320775 |
| 5 | 5 | 5_0 | COMPLETED | MBM | 19027.859375 | 67.564415 | 23.774429 | 38966.895985 | 22380.850116 |
| 6 | 6 | 6_0 | COMPLETED | MBM | 17221.683594 | 12.463347 | 16.742319 | 38386.946684 | 20571.465701 |
| 7 | 7 | 7_0 | COMPLETED | MBM | 17261.140625 | 24.027714 | 17.871607 | 38432.989625 | 21381.016840 |
| 8 | 8 | 8_0 | COMPLETED | MBM | 19184.667969 | 59.861458 | 18.811335 | 38172.786516 | 22180.098203 |
| 9 | 9 | 9_0 | COMPLETED | MBM | 17418.738281 | 18.437265 | 16.100424 | 37945.060334 | 21160.173955 |
| 10 | 10 | 10_0 | COMPLETED | MBM | 15185.558594 | 18.815474 | 90.434082 | 45000.000000 | 21297.931526 |
| 11 | 11 | 11_0 | COMPLETED | MBM | 19119.156250 | 56.779202 | 17.494156 | 38104.169617 | 19400.096171 |
| 12 | 12 | 12_0 | COMPLETED | MBM | 17957.171875 | 22.831009 | 16.770588 | 38132.798794 | 20084.276437 |
| 13 | 13 | 13_0 | COMPLETED | MBM | 17670.261719 | 12.678870 | 15.723617 | 37843.386160 | 20604.102296 |
| 14 | 14 | 14_0 | COMPLETED | MBM | 18230.425781 | 33.516594 | 17.677996 | 37730.255672 | 21567.978728 |
| 15 | 15 | 15_0 | COMPLETED | MBM | 17995.777344 | 36.175663 | 17.021694 | 37757.938877 | 19752.539451 |
| 16 | 16 | 16_0 | COMPLETED | MBM | 17690.945312 | 27.775412 | 16.939339 | 38131.425354 | 21436.729972 |
| 17 | 17 | 17_0 | COMPLETED | MBM | 18439.074219 | 46.469910 | 17.027487 | 37911.504184 | 19571.214697 |
| 18 | 18 | 18_0 | COMPLETED | MBM | 19193.875000 | 63.512718 | 19.235533 | 37614.351653 | 22257.770318 |
| 19 | 19 | 19_0 | COMPLETED | MBM | 17754.332031 | 29.430490 | 16.287758 | 37955.608868 | 19914.222231 |
| 20 | 20 | 20_0 | COMPLETED | MBM | 17138.769531 | 12.772702 | 17.238726 | 37438.314498 | 20590.477946 |
| 21 | 21 | 21_0 | COMPLETED | MBM | 17464.113281 | 17.420095 | 15.873864 | 37969.278962 | 20252.639384 |
| 22 | 22 | 22_0 | COMPLETED | MBM | 18691.136719 | 40.569580 | 17.043682 | 38039.962221 | 19688.178462 |
| 23 | 23 | 23_0 | COMPLETED | MBM | 13634.648438 | 12.365093 | 154.674469 | 28222.041704 | 20651.869965 |
| 24 | 24 | 24_0 | COMPLETED | MBM | 18975.738281 | 50.608227 | 17.127310 | 38135.295949 | 19510.652590 |
| 25 | 25 | 25_0 | COMPLETED | MBM | 17357.804688 | 12.444318 | 15.738993 | 38170.779928 | 20673.192830 |
| 26 | 26 | 26_0 | COMPLETED | MBM | 17786.605469 | 34.598392 | 17.987768 | 38425.638906 | 19783.899690 |
| 27 | 27 | 27_0 | COMPLETED | MBM | 17591.617188 | 21.085464 | 16.042383 | 37936.693800 | 20132.645172 |
| 28 | 28 | 28_0 | COMPLETED | MBM | 17265.238281 | 14.063565 | 15.605353 | 37961.232824 | 20404.252868 |
| 29 | 29 | 29_0 | COMPLETED | MBM | 17206.882812 | 12.782537 | 17.263485 | 38517.554024 | 20717.107020 |
Visualizing the Surrogate Model#
The plot_objective method shows how an objective varies across the DOF space, based on the surrogate model the agent built:
_ = agent.plot_objective(x_dof_name="kbh-radius", y_dof_name="kbv-radius", objective_name="intensity")
intensity (Mean) vs. kbh-radius, kbv-radius
The contour plot visualizes the predicted outcomes for intensity across a two-dimensional parameter space, with other parameters held fixed at the center of the search space. This plot helps in identifying regions of optimal performance and understanding how changes in the selected parameters influence the predicted outcomes. Contour lines represent levels of constant predicted values, providing insights into the gradient and potential optima within the parameter space.
This plot reveals the landscape the optimizer explored. Peaks (for maximization) or valleys (for minimization) show where good configurations lie.
Applying the Optimal Configuration#
The Pareto frontier contains all optimal trade-off solutions. Let’s retrieve one and apply it to see the resulting beam:
optimal_parameters = next(iter(agent.ax_client.get_pareto_frontier()))[0]
optimal_parameters
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/adapter/transforms/winsorize.py:126: AxOptimizationWarning: Encountered a `MultiObjective` without objective thresholds. We will winsorize each objective separately. We strongly recommend specifying the objective thresholds when using multi-objective optimization.
metric_signature: _get_cutoffs(
/home/runner/work/blop/blop/.pixi/envs/docs/lib/python3.13/site-packages/ax/generators/torch/botorch_moo_utils.py:268: UserWarning: To copy construct from a tensor, it is recommended to use sourceTensor.detach().clone() or sourceTensor.detach().clone().requires_grad_(True), rather than torch.tensor(sourceTensor).
obj_mask = torch.tensor(obj_indices, device=objective_weights.device)
[INFO 05-19 23:19:18] ax.service.utils.best_point: Using inferred objective thresholds: [ObjectiveThreshold(intensity >= 17951.211424097368), ObjectiveThreshold(width <= 64.24674825327826), ObjectiveThreshold(height <= 19.155096827531835)], as objective thresholds were not specified as part of the optimization configuration on the experiment.
{'kbv-radius': 38170.77992755252, 'kbh-radius': 20673.19282986607}
Now move the mirrors to these optimal positions and acquire an image:
from bluesky.plans import list_scan
uid = RE(list_scan(
[det],
kbv.radius, [optimal_parameters[kbv.radius.name]],
kbh.radius, [optimal_parameters[kbh.radius.name]],
))
What You’ve Learned#
In this tutorial, you worked through a complete Bayesian optimization workflow:
DOFs define the search space—the parameters you can control and their allowed ranges
Objectives specify your goals and whether to minimize or maximize each one
Evaluation functions extract meaningful metrics from experimental data
The Agent coordinates everything, building a model of your system and intelligently exploring the parameter space
Health checks let you diagnose optimization progress and catch issues early
These same components apply to any optimization problem: swap the simulated devices for real hardware, adjust the DOFs and objectives for your system, and write an evaluation function that extracts your metrics.
Next Steps#
Learn about custom acquisition plans for more complex measurement sequences
Explore DOF constraints to encode physical limitations
See outcome constraints to enforce requirements on your results
See Also#
blop_simpackage for XRT simulated beamline control