Note
Go to the end to download the full example code.
Constrained Black-Box Optimization with Rejection Sampling#
Author(s): Romain Egele.
In this tutorial, we illustrate how to solve constrained black-box optimization (Wikipedia) (also known as derivative-free optimization) using DeepHyper.
Black-box optimization refers to a class of methods where an objective function \(f(x) = y \in \mathbb{R}\) can only be queried through input–output evaluations \(\{ (x_1, y_1), \ldots, (x_n, y_n) \}\). No closed-form expression, derivatives, or structural information about \(f\) are required.
In constrained optimization, we further introduce one or more rules that restrict the set of admissible solutions. These constraints carve out the feasible region of the search space and can substantially influence both the behavior and performance of the optimizer.
In the following example, we define a simple two-dimensional problem, impose a linear constraint, and solve it using DeepHyper’s Centralized Bayesian Optimization (CBO) engine.
There exists multiple ways of handling constraints in DeepHyper:
Rejection sampling (shown in this tutorial) where we sample from the unconstrained search space then reject unfeasible solutions. While this approach is simple it can become computationnaly intractable.
Learning to avoid failures (see Learn to Avoid Failures with Bayesian Optimization).
Define the constraint as an other objective in a multi-objective optimization setup (tutorial coming soon).
Custom chained sampler (tutorial coming soon).
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from deephyper.analysis.hpo import plot_search_trajectory_single_objective_hpo, parameters_at_max
from deephyper.hpo import HpProblem, CBO
Optimization Problem#
We define a 2D search space over variables x and y.
pb = HpProblem()
pb.add((-10.0, 10.0), "x")
pb.add((-10.0, 10.0), "y")
def f(job):
"""Objective function: maximize x^2 + y^2."""
return job.parameters["x"] ** 2 + job.parameters["y"] ** 2
def constraint_fn_test(s: pd.DataFrame):
"""Feasibility condition: |x| + |y| <= 10."""
return np.abs(s["x"]) + np.abs(s["y"]) <= 10
pb.set_constraint_fn(constraint_fn_test)
We now set up a constrained Bayesian optimization search using a genetic algorithm to optimize the acquisition function periodically.
search = CBO(
pb,
acq_optimizer="ga",
acq_optimizer_kwargs={"acq_optimizer_freq": 2},
acq_func_kwargs={
# Exploration/Exploitation mechanism
"kappa": 200.0,
"scheduler": {"type": "periodic-exp-decay", "period": 20, "kappa_final": 1.96},
},
verbose=1,
)
results = search.search(f, max_evals=300)
Results file already exists, it will be renamed to /Users/rp5/Documents/DeepHyper/deephyper/examples/examples_bbo/results_20251202-183859.csv
0%| | 0/300 [00:00<?, ?it/s]
0%| | 1/300 [00:00<00:00, 6168.09it/s, failures=0, objective=0.926]
1%| | 2/300 [00:00<00:09, 32.77it/s, failures=0, objective=49.8]
1%| | 3/300 [00:00<00:08, 36.15it/s, failures=0, objective=49.8]
1%|▏ | 4/300 [00:00<00:07, 38.09it/s, failures=0, objective=49.8]
1%|▏ | 4/300 [00:00<00:07, 38.09it/s, failures=0, objective=49.8]
2%|▏ | 5/300 [00:00<00:07, 38.09it/s, failures=0, objective=49.8]
2%|▏ | 6/300 [00:00<00:07, 38.09it/s, failures=0, objective=91.8]
2%|▏ | 7/300 [00:00<00:07, 38.09it/s, failures=0, objective=91.8]
3%|▎ | 8/300 [00:00<00:21, 13.63it/s, failures=0, objective=91.8]
3%|▎ | 8/300 [00:00<00:21, 13.63it/s, failures=0, objective=92.4]
3%|▎ | 9/300 [00:00<00:21, 13.63it/s, failures=0, objective=92.4]
3%|▎ | 10/300 [00:00<00:21, 13.63it/s, failures=0, objective=92.4]
4%|▎ | 11/300 [00:00<00:22, 13.01it/s, failures=0, objective=92.4]
4%|▎ | 11/300 [00:00<00:22, 13.01it/s, failures=0, objective=92.4]
4%|▍ | 12/300 [00:00<00:22, 13.01it/s, failures=0, objective=92.4]
4%|▍ | 13/300 [00:00<00:23, 11.99it/s, failures=0, objective=92.4]
4%|▍ | 13/300 [00:00<00:23, 11.99it/s, failures=0, objective=92.4]
5%|▍ | 14/300 [00:01<00:23, 11.99it/s, failures=0, objective=92.4]
5%|▌ | 15/300 [00:01<00:23, 12.07it/s, failures=0, objective=92.4]
5%|▌ | 15/300 [00:01<00:23, 12.07it/s, failures=0, objective=92.4]
5%|▌ | 16/300 [00:01<00:23, 12.07it/s, failures=0, objective=92.4]
6%|▌ | 17/300 [00:01<00:24, 11.55it/s, failures=0, objective=92.4]
6%|▌ | 17/300 [00:01<00:24, 11.55it/s, failures=0, objective=95.9]
6%|▌ | 18/300 [00:01<00:24, 11.55it/s, failures=0, objective=97.4]
6%|▋ | 19/300 [00:01<00:25, 11.02it/s, failures=0, objective=97.4]
6%|▋ | 19/300 [00:01<00:25, 11.02it/s, failures=0, objective=98.3]
7%|▋ | 20/300 [00:01<00:25, 11.02it/s, failures=0, objective=98.3]
7%|▋ | 21/300 [00:01<00:25, 10.79it/s, failures=0, objective=98.3]
7%|▋ | 21/300 [00:01<00:25, 10.79it/s, failures=0, objective=98.3]
7%|▋ | 22/300 [00:01<00:25, 10.79it/s, failures=0, objective=98.3]
8%|▊ | 23/300 [00:01<00:24, 11.25it/s, failures=0, objective=98.3]
8%|▊ | 23/300 [00:01<00:24, 11.25it/s, failures=0, objective=99.4]
8%|▊ | 24/300 [00:02<00:24, 11.25it/s, failures=0, objective=99.4]
8%|▊ | 25/300 [00:02<00:25, 10.98it/s, failures=0, objective=99.4]
8%|▊ | 25/300 [00:02<00:25, 10.98it/s, failures=0, objective=99.4]
9%|▊ | 26/300 [00:02<00:24, 10.98it/s, failures=0, objective=99.4]
9%|▉ | 27/300 [00:02<00:25, 10.84it/s, failures=0, objective=99.4]
9%|▉ | 27/300 [00:02<00:25, 10.84it/s, failures=0, objective=99.4]
9%|▉ | 28/300 [00:02<00:25, 10.84it/s, failures=0, objective=99.4]
10%|▉ | 29/300 [00:02<00:23, 11.40it/s, failures=0, objective=99.4]
10%|▉ | 29/300 [00:02<00:23, 11.40it/s, failures=0, objective=99.4]
10%|█ | 30/300 [00:02<00:23, 11.40it/s, failures=0, objective=99.4]
10%|█ | 31/300 [00:02<00:23, 11.47it/s, failures=0, objective=99.4]
10%|█ | 31/300 [00:02<00:23, 11.47it/s, failures=0, objective=99.4]
11%|█ | 32/300 [00:02<00:23, 11.47it/s, failures=0, objective=99.4]
11%|█ | 33/300 [00:02<00:24, 10.92it/s, failures=0, objective=99.4]
11%|█ | 33/300 [00:02<00:24, 10.92it/s, failures=0, objective=99.4]
11%|█▏ | 34/300 [00:02<00:24, 10.92it/s, failures=0, objective=99.4]
12%|█▏ | 35/300 [00:02<00:24, 10.71it/s, failures=0, objective=99.4]
12%|█▏ | 35/300 [00:02<00:24, 10.71it/s, failures=0, objective=99.4]
12%|█▏ | 36/300 [00:03<00:24, 10.71it/s, failures=0, objective=99.4]
12%|█▏ | 37/300 [00:03<00:23, 11.06it/s, failures=0, objective=99.4]
12%|█▏ | 37/300 [00:03<00:23, 11.06it/s, failures=0, objective=99.4]
13%|█▎ | 38/300 [00:03<00:23, 11.06it/s, failures=0, objective=99.4]
13%|█▎ | 39/300 [00:03<00:24, 10.59it/s, failures=0, objective=99.4]
13%|█▎ | 39/300 [00:03<00:24, 10.59it/s, failures=0, objective=99.4]
13%|█▎ | 40/300 [00:03<00:24, 10.59it/s, failures=0, objective=99.4]
14%|█▎ | 41/300 [00:03<00:24, 10.45it/s, failures=0, objective=99.4]
14%|█▎ | 41/300 [00:03<00:24, 10.45it/s, failures=0, objective=99.4]
14%|█▍ | 42/300 [00:03<00:24, 10.45it/s, failures=0, objective=99.4]
14%|█▍ | 43/300 [00:03<00:25, 10.10it/s, failures=0, objective=99.4]
14%|█▍ | 43/300 [00:03<00:25, 10.10it/s, failures=0, objective=99.4]
15%|█▍ | 44/300 [00:03<00:25, 10.10it/s, failures=0, objective=99.4]
15%|█▌ | 45/300 [00:04<00:26, 9.50it/s, failures=0, objective=99.4]
15%|█▌ | 45/300 [00:04<00:26, 9.50it/s, failures=0, objective=99.4]
15%|█▌ | 46/300 [00:04<00:27, 9.15it/s, failures=0, objective=99.4]
15%|█▌ | 46/300 [00:04<00:27, 9.15it/s, failures=0, objective=99.4]
16%|█▌ | 47/300 [00:04<00:27, 9.15it/s, failures=0, objective=99.4]
16%|█▌ | 48/300 [00:04<00:26, 9.67it/s, failures=0, objective=99.4]
16%|█▌ | 48/300 [00:04<00:26, 9.67it/s, failures=0, objective=99.4]
16%|█▋ | 49/300 [00:04<00:25, 9.67it/s, failures=0, objective=99.4]
17%|█▋ | 50/300 [00:04<00:25, 9.81it/s, failures=0, objective=99.4]
17%|█▋ | 50/300 [00:04<00:25, 9.81it/s, failures=0, objective=99.4]
17%|█▋ | 51/300 [00:04<00:25, 9.81it/s, failures=0, objective=99.4]
17%|█▋ | 52/300 [00:04<00:24, 10.17it/s, failures=0, objective=99.4]
17%|█▋ | 52/300 [00:04<00:24, 10.17it/s, failures=0, objective=99.4]
18%|█▊ | 53/300 [00:04<00:24, 10.17it/s, failures=0, objective=99.4]
18%|█▊ | 54/300 [00:04<00:24, 10.05it/s, failures=0, objective=99.4]
18%|█▊ | 54/300 [00:04<00:24, 10.05it/s, failures=0, objective=99.4]
18%|█▊ | 55/300 [00:04<00:24, 10.05it/s, failures=0, objective=99.4]
19%|█▊ | 56/300 [00:05<00:27, 8.74it/s, failures=0, objective=99.4]
19%|█▊ | 56/300 [00:05<00:27, 8.74it/s, failures=0, objective=99.4]
19%|█▉ | 57/300 [00:05<00:27, 8.74it/s, failures=0, objective=99.4]
19%|█▉ | 58/300 [00:05<00:25, 9.45it/s, failures=0, objective=99.4]
19%|█▉ | 58/300 [00:05<00:25, 9.45it/s, failures=0, objective=99.4]
20%|█▉ | 59/300 [00:05<00:25, 9.45it/s, failures=0, objective=99.4]
20%|██ | 60/300 [00:05<00:25, 9.47it/s, failures=0, objective=99.4]
20%|██ | 60/300 [00:05<00:25, 9.47it/s, failures=0, objective=99.4]
20%|██ | 61/300 [00:05<00:25, 9.47it/s, failures=0, objective=99.4]
21%|██ | 62/300 [00:05<00:24, 9.60it/s, failures=0, objective=99.4]
21%|██ | 62/300 [00:05<00:24, 9.60it/s, failures=0, objective=99.4]
21%|██ | 63/300 [00:05<00:24, 9.60it/s, failures=0, objective=99.4]
21%|██▏ | 64/300 [00:06<00:25, 9.44it/s, failures=0, objective=99.4]
21%|██▏ | 64/300 [00:06<00:25, 9.44it/s, failures=0, objective=99.4]
22%|██▏ | 65/300 [00:06<00:24, 9.44it/s, failures=0, objective=99.4]
22%|██▏ | 66/300 [00:06<00:23, 9.84it/s, failures=0, objective=99.4]
22%|██▏ | 66/300 [00:06<00:23, 9.84it/s, failures=0, objective=99.4]
22%|██▏ | 67/300 [00:06<00:23, 9.84it/s, failures=0, objective=99.4]
23%|██▎ | 68/300 [00:06<00:22, 10.36it/s, failures=0, objective=99.4]
23%|██▎ | 68/300 [00:06<00:22, 10.36it/s, failures=0, objective=99.4]
23%|██▎ | 69/300 [00:06<00:22, 10.36it/s, failures=0, objective=99.4]
23%|██▎ | 70/300 [00:06<00:22, 10.24it/s, failures=0, objective=99.4]
23%|██▎ | 70/300 [00:06<00:22, 10.24it/s, failures=0, objective=99.4]
24%|██▎ | 71/300 [00:06<00:22, 10.24it/s, failures=0, objective=99.4]
24%|██▍ | 72/300 [00:06<00:22, 10.36it/s, failures=0, objective=99.4]
24%|██▍ | 72/300 [00:06<00:22, 10.36it/s, failures=0, objective=99.4]
24%|██▍ | 73/300 [00:06<00:21, 10.36it/s, failures=0, objective=99.4]
25%|██▍ | 74/300 [00:06<00:20, 10.97it/s, failures=0, objective=99.4]
25%|██▍ | 74/300 [00:06<00:20, 10.97it/s, failures=0, objective=99.4]
25%|██▌ | 75/300 [00:06<00:20, 10.97it/s, failures=0, objective=99.4]
25%|██▌ | 76/300 [00:07<00:21, 10.60it/s, failures=0, objective=99.4]
25%|██▌ | 76/300 [00:07<00:21, 10.60it/s, failures=0, objective=99.4]
26%|██▌ | 77/300 [00:07<00:21, 10.60it/s, failures=0, objective=99.4]
26%|██▌ | 78/300 [00:07<00:21, 10.41it/s, failures=0, objective=99.4]
26%|██▌ | 78/300 [00:07<00:21, 10.41it/s, failures=0, objective=99.4]
26%|██▋ | 79/300 [00:07<00:21, 10.41it/s, failures=0, objective=99.4]
27%|██▋ | 80/300 [00:07<00:21, 10.20it/s, failures=0, objective=99.4]
27%|██▋ | 80/300 [00:07<00:21, 10.20it/s, failures=0, objective=99.4]
27%|██▋ | 81/300 [00:07<00:21, 10.20it/s, failures=0, objective=99.4]
27%|██▋ | 82/300 [00:07<00:20, 10.58it/s, failures=0, objective=99.4]
27%|██▋ | 82/300 [00:07<00:20, 10.58it/s, failures=0, objective=99.4]
28%|██▊ | 83/300 [00:07<00:20, 10.58it/s, failures=0, objective=99.4]
28%|██▊ | 84/300 [00:07<00:21, 10.00it/s, failures=0, objective=99.4]
28%|██▊ | 84/300 [00:07<00:21, 10.00it/s, failures=0, objective=99.4]
28%|██▊ | 85/300 [00:07<00:21, 10.00it/s, failures=0, objective=99.4]
29%|██▊ | 86/300 [00:08<00:21, 9.75it/s, failures=0, objective=99.4]
29%|██▊ | 86/300 [00:08<00:21, 9.75it/s, failures=0, objective=99.4]
29%|██▉ | 87/300 [00:08<00:21, 9.75it/s, failures=0, objective=99.4]
29%|██▉ | 88/300 [00:08<00:23, 9.10it/s, failures=0, objective=99.4]
29%|██▉ | 88/300 [00:08<00:23, 9.10it/s, failures=0, objective=99.4]
30%|██▉ | 89/300 [00:08<00:23, 9.10it/s, failures=0, objective=99.4]
30%|███ | 90/300 [00:08<00:21, 9.72it/s, failures=0, objective=99.4]
30%|███ | 90/300 [00:08<00:21, 9.72it/s, failures=0, objective=99.4]
30%|███ | 91/300 [00:08<00:21, 9.74it/s, failures=0, objective=99.4]
30%|███ | 91/300 [00:08<00:21, 9.74it/s, failures=0, objective=99.4]
31%|███ | 92/300 [00:08<00:22, 9.24it/s, failures=0, objective=99.4]
31%|███ | 92/300 [00:08<00:22, 9.24it/s, failures=0, objective=99.4]
31%|███ | 93/300 [00:08<00:22, 9.24it/s, failures=0, objective=99.4]
31%|███▏ | 94/300 [00:09<00:21, 9.44it/s, failures=0, objective=99.4]
31%|███▏ | 94/300 [00:09<00:21, 9.44it/s, failures=0, objective=99.4]
32%|███▏ | 95/300 [00:09<00:21, 9.44it/s, failures=0, objective=99.4]
32%|███▏ | 96/300 [00:09<00:21, 9.54it/s, failures=0, objective=99.4]
32%|███▏ | 96/300 [00:09<00:21, 9.54it/s, failures=0, objective=99.4]
32%|███▏ | 97/300 [00:09<00:21, 9.54it/s, failures=0, objective=99.4]
33%|███▎ | 98/300 [00:09<00:20, 9.88it/s, failures=0, objective=99.4]
33%|███▎ | 98/300 [00:09<00:20, 9.88it/s, failures=0, objective=99.4]
33%|███▎ | 99/300 [00:09<00:20, 9.88it/s, failures=0, objective=99.4]
33%|███▎ | 100/300 [00:09<00:21, 9.37it/s, failures=0, objective=99.4]
33%|███▎ | 100/300 [00:09<00:21, 9.37it/s, failures=0, objective=99.4]
34%|███▎ | 101/300 [00:09<00:21, 9.37it/s, failures=0, objective=99.4]
34%|███▍ | 102/300 [00:09<00:23, 8.33it/s, failures=0, objective=99.4]
34%|███▍ | 102/300 [00:09<00:23, 8.33it/s, failures=0, objective=99.4]
34%|███▍ | 103/300 [00:09<00:23, 8.33it/s, failures=0, objective=99.4]
35%|███▍ | 104/300 [00:10<00:24, 8.00it/s, failures=0, objective=99.4]
35%|███▍ | 104/300 [00:10<00:24, 8.00it/s, failures=0, objective=99.4]
35%|███▌ | 105/300 [00:10<00:24, 8.00it/s, failures=0, objective=99.4]
35%|███▌ | 106/300 [00:10<00:22, 8.79it/s, failures=0, objective=99.4]
35%|███▌ | 106/300 [00:10<00:22, 8.79it/s, failures=0, objective=99.4]
36%|███▌ | 107/300 [00:10<00:21, 8.79it/s, failures=0, objective=99.4]
36%|███▌ | 108/300 [00:10<00:21, 9.06it/s, failures=0, objective=99.4]
36%|███▌ | 108/300 [00:10<00:21, 9.06it/s, failures=0, objective=99.4]
36%|███▋ | 109/300 [00:10<00:21, 9.06it/s, failures=0, objective=99.4]
37%|███▋ | 110/300 [00:10<00:21, 8.64it/s, failures=0, objective=99.4]
37%|███▋ | 110/300 [00:10<00:21, 8.64it/s, failures=0, objective=99.4]
37%|███▋ | 111/300 [00:10<00:21, 8.64it/s, failures=0, objective=99.4]
37%|███▋ | 112/300 [00:11<00:21, 8.77it/s, failures=0, objective=99.4]
37%|███▋ | 112/300 [00:11<00:21, 8.77it/s, failures=0, objective=99.4]
38%|███▊ | 113/300 [00:11<00:21, 8.77it/s, failures=0, objective=99.4]
38%|███▊ | 114/300 [00:11<00:19, 9.64it/s, failures=0, objective=99.4]
38%|███▊ | 114/300 [00:11<00:19, 9.64it/s, failures=0, objective=99.4]
38%|███▊ | 115/300 [00:11<00:19, 9.64it/s, failures=0, objective=99.4]
39%|███▊ | 116/300 [00:11<00:20, 8.87it/s, failures=0, objective=99.4]
39%|███▊ | 116/300 [00:11<00:20, 8.87it/s, failures=0, objective=99.4]
39%|███▉ | 117/300 [00:11<00:20, 8.87it/s, failures=0, objective=99.4]
39%|███▉ | 118/300 [00:11<00:19, 9.12it/s, failures=0, objective=99.4]
39%|███▉ | 118/300 [00:11<00:19, 9.12it/s, failures=0, objective=99.4]
40%|███▉ | 119/300 [00:11<00:19, 9.12it/s, failures=0, objective=99.4]
40%|████ | 120/300 [00:11<00:19, 9.30it/s, failures=0, objective=99.4]
40%|████ | 120/300 [00:11<00:19, 9.30it/s, failures=0, objective=99.4]
40%|████ | 121/300 [00:11<00:19, 9.30it/s, failures=0, objective=99.4]
41%|████ | 122/300 [00:12<00:20, 8.82it/s, failures=0, objective=99.4]
41%|████ | 122/300 [00:12<00:20, 8.82it/s, failures=0, objective=99.4]
41%|████ | 123/300 [00:12<00:20, 8.82it/s, failures=0, objective=99.4]
41%|████▏ | 124/300 [00:12<00:20, 8.56it/s, failures=0, objective=99.4]
41%|████▏ | 124/300 [00:12<00:20, 8.56it/s, failures=0, objective=99.4]
42%|████▏ | 125/300 [00:12<00:20, 8.56it/s, failures=0, objective=99.4]
42%|████▏ | 126/300 [00:12<00:21, 8.23it/s, failures=0, objective=99.4]
42%|████▏ | 126/300 [00:12<00:21, 8.23it/s, failures=0, objective=99.4]
42%|████▏ | 127/300 [00:12<00:21, 8.23it/s, failures=0, objective=99.4]
43%|████▎ | 128/300 [00:12<00:19, 8.61it/s, failures=0, objective=99.4]
43%|████▎ | 128/300 [00:12<00:19, 8.61it/s, failures=0, objective=99.4]
43%|████▎ | 129/300 [00:12<00:19, 8.61it/s, failures=0, objective=99.4]
43%|████▎ | 130/300 [00:13<00:19, 8.91it/s, failures=0, objective=99.4]
43%|████▎ | 130/300 [00:13<00:19, 8.91it/s, failures=0, objective=99.4]
44%|████▎ | 131/300 [00:13<00:18, 8.91it/s, failures=0, objective=99.4]
44%|████▍ | 132/300 [00:13<00:17, 9.52it/s, failures=0, objective=99.4]
44%|████▍ | 132/300 [00:13<00:17, 9.52it/s, failures=0, objective=99.4]
44%|████▍ | 133/300 [00:13<00:17, 9.52it/s, failures=0, objective=99.4]
45%|████▍ | 134/300 [00:13<00:17, 9.73it/s, failures=0, objective=99.4]
45%|████▍ | 134/300 [00:13<00:17, 9.73it/s, failures=0, objective=99.4]
45%|████▌ | 135/300 [00:13<00:16, 9.73it/s, failures=0, objective=99.4]
45%|████▌ | 136/300 [00:13<00:16, 9.93it/s, failures=0, objective=99.4]
45%|████▌ | 136/300 [00:13<00:16, 9.93it/s, failures=0, objective=99.4]
46%|████▌ | 137/300 [00:13<00:16, 9.93it/s, failures=0, objective=99.4]
46%|████▌ | 138/300 [00:13<00:17, 9.29it/s, failures=0, objective=99.4]
46%|████▌ | 138/300 [00:13<00:17, 9.29it/s, failures=0, objective=99.4]
46%|████▋ | 139/300 [00:13<00:17, 9.29it/s, failures=0, objective=99.4]
47%|████▋ | 140/300 [00:14<00:17, 9.34it/s, failures=0, objective=99.4]
47%|████▋ | 140/300 [00:14<00:17, 9.34it/s, failures=0, objective=99.4]
47%|████▋ | 141/300 [00:14<00:17, 9.34it/s, failures=0, objective=99.4]
47%|████▋ | 142/300 [00:14<00:16, 9.40it/s, failures=0, objective=99.4]
47%|████▋ | 142/300 [00:14<00:16, 9.40it/s, failures=0, objective=99.4]
48%|████▊ | 143/300 [00:14<00:16, 9.40it/s, failures=0, objective=99.4]
48%|████▊ | 144/300 [00:14<00:15, 9.88it/s, failures=0, objective=99.4]
48%|████▊ | 144/300 [00:14<00:15, 9.88it/s, failures=0, objective=99.4]
48%|████▊ | 145/300 [00:14<00:15, 9.88it/s, failures=0, objective=99.4]
49%|████▊ | 146/300 [00:14<00:16, 9.56it/s, failures=0, objective=99.4]
49%|████▊ | 146/300 [00:14<00:16, 9.56it/s, failures=0, objective=99.4]
49%|████▉ | 147/300 [00:14<00:16, 9.56it/s, failures=0, objective=99.4]
49%|████▉ | 148/300 [00:14<00:16, 9.39it/s, failures=0, objective=99.4]
49%|████▉ | 148/300 [00:14<00:16, 9.39it/s, failures=0, objective=99.4]
50%|████▉ | 149/300 [00:14<00:16, 9.39it/s, failures=0, objective=99.4]
50%|█████ | 150/300 [00:15<00:16, 9.27it/s, failures=0, objective=99.4]
50%|█████ | 150/300 [00:15<00:16, 9.27it/s, failures=0, objective=99.4]
50%|█████ | 151/300 [00:15<00:16, 9.27it/s, failures=0, objective=99.4]
51%|█████ | 152/300 [00:15<00:16, 9.13it/s, failures=0, objective=99.4]
51%|█████ | 152/300 [00:15<00:16, 9.13it/s, failures=0, objective=99.4]
51%|█████ | 153/300 [00:15<00:16, 9.13it/s, failures=0, objective=99.4]
51%|█████▏ | 154/300 [00:15<00:15, 9.65it/s, failures=0, objective=99.4]
51%|█████▏ | 154/300 [00:15<00:15, 9.65it/s, failures=0, objective=99.4]
52%|█████▏ | 155/300 [00:15<00:15, 9.65it/s, failures=0, objective=99.4]
52%|█████▏ | 156/300 [00:15<00:16, 8.63it/s, failures=0, objective=99.4]
52%|█████▏ | 156/300 [00:15<00:16, 8.63it/s, failures=0, objective=99.4]
52%|█████▏ | 157/300 [00:15<00:16, 8.63it/s, failures=0, objective=99.4]
53%|█████▎ | 158/300 [00:16<00:16, 8.80it/s, failures=0, objective=99.4]
53%|█████▎ | 158/300 [00:16<00:16, 8.80it/s, failures=0, objective=99.4]
53%|█████▎ | 159/300 [00:16<00:16, 8.80it/s, failures=0, objective=99.4]
53%|█████▎ | 160/300 [00:16<00:15, 9.17it/s, failures=0, objective=99.4]
53%|█████▎ | 160/300 [00:16<00:15, 9.17it/s, failures=0, objective=99.4]
54%|█████▎ | 161/300 [00:16<00:15, 9.17it/s, failures=0, objective=99.4]
54%|█████▍ | 162/300 [00:16<00:14, 9.29it/s, failures=0, objective=99.4]
54%|█████▍ | 162/300 [00:16<00:14, 9.29it/s, failures=0, objective=99.4]
54%|█████▍ | 163/300 [00:16<00:14, 9.29it/s, failures=0, objective=99.4]
55%|█████▍ | 164/300 [00:16<00:15, 9.01it/s, failures=0, objective=99.4]
55%|█████▍ | 164/300 [00:16<00:15, 9.01it/s, failures=0, objective=99.4]
55%|█████▌ | 165/300 [00:16<00:14, 9.01it/s, failures=0, objective=99.4]
55%|█████▌ | 166/300 [00:16<00:15, 8.79it/s, failures=0, objective=99.4]
55%|█████▌ | 166/300 [00:16<00:15, 8.79it/s, failures=0, objective=99.4]
56%|█████▌ | 167/300 [00:16<00:15, 8.79it/s, failures=0, objective=99.4]
56%|█████▌ | 168/300 [00:17<00:14, 9.16it/s, failures=0, objective=99.4]
56%|█████▌ | 168/300 [00:17<00:14, 9.16it/s, failures=0, objective=99.4]
56%|█████▋ | 169/300 [00:17<00:14, 9.16it/s, failures=0, objective=99.4]
57%|█████▋ | 170/300 [00:17<00:14, 9.10it/s, failures=0, objective=99.4]
57%|█████▋ | 170/300 [00:17<00:14, 9.10it/s, failures=0, objective=99.4]
57%|█████▋ | 171/300 [00:17<00:14, 9.10it/s, failures=0, objective=99.4]
57%|█████▋ | 172/300 [00:17<00:14, 9.06it/s, failures=0, objective=99.4]
57%|█████▋ | 172/300 [00:17<00:14, 9.06it/s, failures=0, objective=99.4]
58%|█████▊ | 173/300 [00:17<00:14, 9.06it/s, failures=0, objective=99.4]
58%|█████▊ | 174/300 [00:17<00:14, 8.91it/s, failures=0, objective=99.4]
58%|█████▊ | 174/300 [00:17<00:14, 8.91it/s, failures=0, objective=99.4]
58%|█████▊ | 175/300 [00:17<00:14, 8.91it/s, failures=0, objective=99.4]
59%|█████▊ | 176/300 [00:18<00:14, 8.68it/s, failures=0, objective=99.4]
59%|█████▊ | 176/300 [00:18<00:14, 8.68it/s, failures=0, objective=99.4]
59%|█████▉ | 177/300 [00:18<00:14, 8.68it/s, failures=0, objective=99.4]
59%|█████▉ | 178/300 [00:18<00:13, 9.18it/s, failures=0, objective=99.4]
59%|█████▉ | 178/300 [00:18<00:13, 9.18it/s, failures=0, objective=99.4]
60%|█████▉ | 179/300 [00:18<00:13, 9.18it/s, failures=0, objective=99.4]
60%|██████ | 180/300 [00:18<00:12, 9.49it/s, failures=0, objective=99.4]
60%|██████ | 180/300 [00:18<00:12, 9.49it/s, failures=0, objective=99.4]
60%|██████ | 181/300 [00:18<00:12, 9.49it/s, failures=0, objective=99.4]
61%|██████ | 182/300 [00:18<00:13, 8.77it/s, failures=0, objective=99.4]
61%|██████ | 182/300 [00:18<00:13, 8.77it/s, failures=0, objective=99.4]
61%|██████ | 183/300 [00:18<00:13, 8.77it/s, failures=0, objective=99.4]
61%|██████▏ | 184/300 [00:18<00:12, 9.50it/s, failures=0, objective=99.4]
61%|██████▏ | 184/300 [00:18<00:12, 9.50it/s, failures=0, objective=99.4]
62%|██████▏ | 185/300 [00:18<00:12, 9.50it/s, failures=0, objective=99.4]
62%|██████▏ | 186/300 [00:19<00:12, 9.14it/s, failures=0, objective=99.4]
62%|██████▏ | 186/300 [00:19<00:12, 9.14it/s, failures=0, objective=99.4]
62%|██████▏ | 187/300 [00:19<00:12, 9.14it/s, failures=0, objective=99.4]
63%|██████▎ | 188/300 [00:19<00:12, 9.08it/s, failures=0, objective=99.4]
63%|██████▎ | 188/300 [00:19<00:12, 9.08it/s, failures=0, objective=99.4]
63%|██████▎ | 189/300 [00:19<00:12, 9.08it/s, failures=0, objective=99.4]
63%|██████▎ | 190/300 [00:19<00:12, 9.09it/s, failures=0, objective=99.4]
63%|██████▎ | 190/300 [00:19<00:12, 9.09it/s, failures=0, objective=99.4]
64%|██████▎ | 191/300 [00:19<00:11, 9.09it/s, failures=0, objective=99.4]
64%|██████▍ | 192/300 [00:19<00:11, 9.62it/s, failures=0, objective=99.4]
64%|██████▍ | 192/300 [00:19<00:11, 9.62it/s, failures=0, objective=99.4]
64%|██████▍ | 193/300 [00:19<00:11, 9.62it/s, failures=0, objective=99.4]
65%|██████▍ | 194/300 [00:19<00:11, 9.36it/s, failures=0, objective=99.4]
65%|██████▍ | 194/300 [00:19<00:11, 9.36it/s, failures=0, objective=99.4]
65%|██████▌ | 195/300 [00:20<00:11, 9.36it/s, failures=0, objective=99.4]
65%|██████▌ | 196/300 [00:20<00:11, 9.18it/s, failures=0, objective=99.4]
65%|██████▌ | 196/300 [00:20<00:11, 9.18it/s, failures=0, objective=99.4]
66%|██████▌ | 197/300 [00:20<00:11, 9.18it/s, failures=0, objective=99.4]
66%|██████▌ | 198/300 [00:20<00:11, 8.69it/s, failures=0, objective=99.4]
66%|██████▌ | 198/300 [00:20<00:11, 8.69it/s, failures=0, objective=99.4]
66%|██████▋ | 199/300 [00:20<00:11, 8.69it/s, failures=0, objective=99.4]
67%|██████▋ | 200/300 [00:20<00:11, 8.91it/s, failures=0, objective=99.4]
67%|██████▋ | 200/300 [00:20<00:11, 8.91it/s, failures=0, objective=99.4]
67%|██████▋ | 201/300 [00:20<00:11, 8.91it/s, failures=0, objective=99.4]
67%|██████▋ | 202/300 [00:20<00:10, 9.00it/s, failures=0, objective=99.4]
67%|██████▋ | 202/300 [00:20<00:10, 9.00it/s, failures=0, objective=99.4]
68%|██████▊ | 203/300 [00:20<00:10, 9.00it/s, failures=0, objective=99.4]
68%|██████▊ | 204/300 [00:21<00:11, 8.56it/s, failures=0, objective=99.4]
68%|██████▊ | 204/300 [00:21<00:11, 8.56it/s, failures=0, objective=99.4]
68%|██████▊ | 205/300 [00:21<00:11, 8.56it/s, failures=0, objective=99.4]
69%|██████▊ | 206/300 [00:21<00:10, 8.81it/s, failures=0, objective=99.4]
69%|██████▊ | 206/300 [00:21<00:10, 8.81it/s, failures=0, objective=99.4]
69%|██████▉ | 207/300 [00:21<00:10, 8.81it/s, failures=0, objective=99.4]
69%|██████▉ | 208/300 [00:21<00:10, 9.19it/s, failures=0, objective=99.4]
69%|██████▉ | 208/300 [00:21<00:10, 9.19it/s, failures=0, objective=99.4]
70%|██████▉ | 209/300 [00:21<00:09, 9.19it/s, failures=0, objective=99.4]
70%|███████ | 210/300 [00:21<00:09, 9.29it/s, failures=0, objective=99.4]
70%|███████ | 210/300 [00:21<00:09, 9.29it/s, failures=0, objective=99.4]
70%|███████ | 211/300 [00:21<00:09, 9.29it/s, failures=0, objective=99.4]
71%|███████ | 212/300 [00:22<00:09, 9.16it/s, failures=0, objective=99.4]
71%|███████ | 212/300 [00:22<00:09, 9.16it/s, failures=0, objective=99.4]
71%|███████ | 213/300 [00:22<00:09, 9.16it/s, failures=0, objective=99.4]
71%|███████▏ | 214/300 [00:22<00:09, 9.08it/s, failures=0, objective=99.4]
71%|███████▏ | 214/300 [00:22<00:09, 9.08it/s, failures=0, objective=99.4]
72%|███████▏ | 215/300 [00:22<00:09, 9.08it/s, failures=0, objective=99.4]
72%|███████▏ | 216/300 [00:22<00:08, 9.40it/s, failures=0, objective=99.4]
72%|███████▏ | 216/300 [00:22<00:08, 9.40it/s, failures=0, objective=99.4]
72%|███████▏ | 217/300 [00:22<00:08, 9.40it/s, failures=0, objective=99.4]
73%|███████▎ | 218/300 [00:22<00:09, 9.08it/s, failures=0, objective=99.4]
73%|███████▎ | 218/300 [00:22<00:09, 9.08it/s, failures=0, objective=99.4]
73%|███████▎ | 219/300 [00:22<00:08, 9.08it/s, failures=0, objective=99.4]
73%|███████▎ | 220/300 [00:22<00:08, 9.42it/s, failures=0, objective=99.4]
73%|███████▎ | 220/300 [00:22<00:08, 9.42it/s, failures=0, objective=99.4]
74%|███████▎ | 221/300 [00:22<00:08, 9.42it/s, failures=0, objective=99.4]
74%|███████▍ | 222/300 [00:23<00:09, 8.61it/s, failures=0, objective=99.4]
74%|███████▍ | 222/300 [00:23<00:09, 8.61it/s, failures=0, objective=99.4]
74%|███████▍ | 223/300 [00:23<00:08, 8.61it/s, failures=0, objective=99.4]
75%|███████▍ | 224/300 [00:23<00:10, 6.92it/s, failures=0, objective=99.4]
75%|███████▍ | 224/300 [00:23<00:10, 6.92it/s, failures=0, objective=99.4]
75%|███████▌ | 225/300 [00:23<00:11, 6.27it/s, failures=0, objective=99.4]
75%|███████▌ | 225/300 [00:23<00:11, 6.27it/s, failures=0, objective=99.4]
75%|███████▌ | 226/300 [00:23<00:11, 6.51it/s, failures=0, objective=99.4]
75%|███████▌ | 226/300 [00:23<00:11, 6.51it/s, failures=0, objective=99.4]
76%|███████▌ | 227/300 [00:23<00:11, 6.51it/s, failures=0, objective=99.4]
76%|███████▌ | 228/300 [00:24<00:09, 7.49it/s, failures=0, objective=99.4]
76%|███████▌ | 228/300 [00:24<00:09, 7.49it/s, failures=0, objective=99.4]
76%|███████▋ | 229/300 [00:24<00:09, 7.49it/s, failures=0, objective=99.4]
77%|███████▋ | 230/300 [00:24<00:08, 7.81it/s, failures=0, objective=99.4]
77%|███████▋ | 230/300 [00:24<00:08, 7.81it/s, failures=0, objective=99.4]
77%|███████▋ | 231/300 [00:24<00:08, 7.81it/s, failures=0, objective=99.4]
77%|███████▋ | 232/300 [00:24<00:08, 7.77it/s, failures=0, objective=99.4]
77%|███████▋ | 232/300 [00:24<00:08, 7.77it/s, failures=0, objective=99.4]
78%|███████▊ | 233/300 [00:24<00:08, 7.77it/s, failures=0, objective=99.4]
78%|███████▊ | 234/300 [00:24<00:08, 8.06it/s, failures=0, objective=99.4]
78%|███████▊ | 234/300 [00:24<00:08, 8.06it/s, failures=0, objective=99.4]
78%|███████▊ | 235/300 [00:24<00:08, 8.06it/s, failures=0, objective=99.4]
79%|███████▊ | 236/300 [00:25<00:08, 7.69it/s, failures=0, objective=99.4]
79%|███████▊ | 236/300 [00:25<00:08, 7.69it/s, failures=0, objective=99.4]
79%|███████▉ | 237/300 [00:25<00:08, 7.69it/s, failures=0, objective=99.4]
79%|███████▉ | 238/300 [00:25<00:07, 8.09it/s, failures=0, objective=99.4]
79%|███████▉ | 238/300 [00:25<00:07, 8.09it/s, failures=0, objective=99.4]
80%|███████▉ | 239/300 [00:25<00:07, 8.09it/s, failures=0, objective=99.4]
80%|████████ | 240/300 [00:25<00:07, 8.47it/s, failures=0, objective=99.4]
80%|████████ | 240/300 [00:25<00:07, 8.47it/s, failures=0, objective=99.4]
80%|████████ | 241/300 [00:25<00:06, 8.47it/s, failures=0, objective=99.4]
81%|████████ | 242/300 [00:25<00:06, 8.56it/s, failures=0, objective=99.4]
81%|████████ | 242/300 [00:25<00:06, 8.56it/s, failures=0, objective=99.4]
81%|████████ | 243/300 [00:25<00:06, 8.56it/s, failures=0, objective=99.4]
81%|████████▏ | 244/300 [00:26<00:06, 8.46it/s, failures=0, objective=99.4]
81%|████████▏ | 244/300 [00:26<00:06, 8.46it/s, failures=0, objective=99.4]
82%|████████▏ | 245/300 [00:26<00:06, 8.46it/s, failures=0, objective=99.4]
82%|████████▏ | 246/300 [00:26<00:06, 8.35it/s, failures=0, objective=99.4]
82%|████████▏ | 246/300 [00:26<00:06, 8.35it/s, failures=0, objective=99.4]
82%|████████▏ | 247/300 [00:26<00:06, 8.35it/s, failures=0, objective=99.4]
83%|████████▎ | 248/300 [00:26<00:05, 9.05it/s, failures=0, objective=99.4]
83%|████████▎ | 248/300 [00:26<00:05, 9.05it/s, failures=0, objective=99.4]
83%|████████▎ | 249/300 [00:26<00:05, 9.05it/s, failures=0, objective=99.4]
83%|████████▎ | 250/300 [00:26<00:05, 9.15it/s, failures=0, objective=99.4]
83%|████████▎ | 250/300 [00:26<00:05, 9.15it/s, failures=0, objective=99.4]
84%|████████▎ | 251/300 [00:26<00:05, 9.15it/s, failures=0, objective=99.4]
84%|████████▍ | 252/300 [00:26<00:04, 9.73it/s, failures=0, objective=99.4]
84%|████████▍ | 252/300 [00:26<00:04, 9.73it/s, failures=0, objective=99.4]
84%|████████▍ | 253/300 [00:26<00:04, 9.73it/s, failures=0, objective=99.4]
85%|████████▍ | 254/300 [00:27<00:04, 9.83it/s, failures=0, objective=99.4]
85%|████████▍ | 254/300 [00:27<00:04, 9.83it/s, failures=0, objective=99.4]
85%|████████▌ | 255/300 [00:27<00:04, 9.83it/s, failures=0, objective=99.4]
85%|████████▌ | 256/300 [00:27<00:04, 9.66it/s, failures=0, objective=99.4]
85%|████████▌ | 256/300 [00:27<00:04, 9.66it/s, failures=0, objective=99.4]
86%|████████▌ | 257/300 [00:27<00:04, 9.66it/s, failures=0, objective=99.4]
86%|████████▌ | 258/300 [00:27<00:04, 9.16it/s, failures=0, objective=99.4]
86%|████████▌ | 258/300 [00:27<00:04, 9.16it/s, failures=0, objective=99.4]
86%|████████▋ | 259/300 [00:27<00:04, 9.16it/s, failures=0, objective=99.4]
87%|████████▋ | 260/300 [00:27<00:04, 9.10it/s, failures=0, objective=99.4]
87%|████████▋ | 260/300 [00:27<00:04, 9.10it/s, failures=0, objective=99.4]
87%|████████▋ | 261/300 [00:27<00:04, 9.10it/s, failures=0, objective=99.4]
87%|████████▋ | 262/300 [00:27<00:04, 9.38it/s, failures=0, objective=99.4]
87%|████████▋ | 262/300 [00:27<00:04, 9.38it/s, failures=0, objective=99.4]
88%|████████▊ | 263/300 [00:27<00:03, 9.38it/s, failures=0, objective=99.4]
88%|████████▊ | 264/300 [00:28<00:03, 9.37it/s, failures=0, objective=99.4]
88%|████████▊ | 264/300 [00:28<00:03, 9.37it/s, failures=0, objective=99.4]
88%|████████▊ | 265/300 [00:28<00:03, 9.37it/s, failures=0, objective=99.4]
89%|████████▊ | 266/300 [00:28<00:03, 8.95it/s, failures=0, objective=99.4]
89%|████████▊ | 266/300 [00:28<00:03, 8.95it/s, failures=0, objective=99.4]
89%|████████▉ | 267/300 [00:28<00:03, 8.95it/s, failures=0, objective=99.4]
89%|████████▉ | 268/300 [00:28<00:03, 9.68it/s, failures=0, objective=99.4]
89%|████████▉ | 268/300 [00:28<00:03, 9.68it/s, failures=0, objective=99.4]
90%|████████▉ | 269/300 [00:28<00:03, 9.68it/s, failures=0, objective=99.4]
90%|█████████ | 270/300 [00:28<00:03, 9.10it/s, failures=0, objective=99.4]
90%|█████████ | 270/300 [00:28<00:03, 9.10it/s, failures=0, objective=99.4]
90%|█████████ | 271/300 [00:28<00:03, 9.10it/s, failures=0, objective=99.4]
91%|█████████ | 272/300 [00:29<00:03, 7.46it/s, failures=0, objective=99.4]
91%|█████████ | 272/300 [00:29<00:03, 7.46it/s, failures=0, objective=99.4]
91%|█████████ | 273/300 [00:29<00:03, 7.46it/s, failures=0, objective=99.4]
91%|█████████▏| 274/300 [00:29<00:03, 7.53it/s, failures=0, objective=99.4]
91%|█████████▏| 274/300 [00:29<00:03, 7.53it/s, failures=0, objective=99.4]
92%|█████████▏| 275/300 [00:29<00:03, 7.53it/s, failures=0, objective=99.4]
92%|█████████▏| 276/300 [00:29<00:02, 8.14it/s, failures=0, objective=99.4]
92%|█████████▏| 276/300 [00:29<00:02, 8.14it/s, failures=0, objective=99.4]
92%|█████████▏| 277/300 [00:29<00:02, 8.14it/s, failures=0, objective=99.4]
93%|█████████▎| 278/300 [00:29<00:02, 7.64it/s, failures=0, objective=99.4]
93%|█████████▎| 278/300 [00:29<00:02, 7.64it/s, failures=0, objective=99.4]
93%|█████████▎| 279/300 [00:29<00:02, 7.64it/s, failures=0, objective=99.4]
93%|█████████▎| 280/300 [00:30<00:02, 7.92it/s, failures=0, objective=99.4]
93%|█████████▎| 280/300 [00:30<00:02, 7.92it/s, failures=0, objective=99.4]
94%|█████████▎| 281/300 [00:30<00:02, 7.92it/s, failures=0, objective=99.4]
94%|█████████▍| 282/300 [00:30<00:02, 7.90it/s, failures=0, objective=99.4]
94%|█████████▍| 282/300 [00:30<00:02, 7.90it/s, failures=0, objective=99.4]
94%|█████████▍| 283/300 [00:30<00:02, 7.90it/s, failures=0, objective=99.4]
95%|█████████▍| 284/300 [00:30<00:01, 8.25it/s, failures=0, objective=99.4]
95%|█████████▍| 284/300 [00:30<00:01, 8.25it/s, failures=0, objective=99.4]
95%|█████████▌| 285/300 [00:30<00:01, 8.25it/s, failures=0, objective=99.4]
95%|█████████▌| 286/300 [00:30<00:01, 7.47it/s, failures=0, objective=99.4]
95%|█████████▌| 286/300 [00:30<00:01, 7.47it/s, failures=0, objective=99.4]
96%|█████████▌| 287/300 [00:31<00:01, 7.47it/s, failures=0, objective=99.4]
96%|█████████▌| 288/300 [00:31<00:01, 8.27it/s, failures=0, objective=99.4]
96%|█████████▌| 288/300 [00:31<00:01, 8.27it/s, failures=0, objective=99.4]
96%|█████████▋| 289/300 [00:31<00:01, 8.27it/s, failures=0, objective=99.4]
97%|█████████▋| 290/300 [00:31<00:01, 8.38it/s, failures=0, objective=99.4]
97%|█████████▋| 290/300 [00:31<00:01, 8.38it/s, failures=0, objective=99.4]
97%|█████████▋| 291/300 [00:31<00:01, 8.38it/s, failures=0, objective=99.4]
97%|█████████▋| 292/300 [00:31<00:00, 8.63it/s, failures=0, objective=99.4]
97%|█████████▋| 292/300 [00:31<00:00, 8.63it/s, failures=0, objective=99.4]
98%|█████████▊| 293/300 [00:31<00:00, 8.63it/s, failures=0, objective=99.4]
98%|█████████▊| 294/300 [00:31<00:00, 8.87it/s, failures=0, objective=99.4]
98%|█████████▊| 294/300 [00:31<00:00, 8.87it/s, failures=0, objective=99.4]
98%|█████████▊| 295/300 [00:31<00:00, 8.87it/s, failures=0, objective=99.4]
99%|█████████▊| 296/300 [00:32<00:00, 8.61it/s, failures=0, objective=99.4]
99%|█████████▊| 296/300 [00:32<00:00, 8.61it/s, failures=0, objective=99.4]
99%|█████████▉| 297/300 [00:32<00:00, 8.61it/s, failures=0, objective=99.4]
99%|█████████▉| 298/300 [00:32<00:00, 7.96it/s, failures=0, objective=99.4]
99%|█████████▉| 298/300 [00:32<00:00, 7.96it/s, failures=0, objective=99.4]
100%|█████████▉| 299/300 [00:32<00:00, 7.96it/s, failures=0, objective=99.4]
100%|██████████| 300/300 [00:32<00:00, 8.33it/s, failures=0, objective=99.4]
100%|██████████| 300/300 [00:32<00:00, 8.33it/s, failures=0, objective=99.4]
100%|██████████| 300/300 [00:32<00:00, 9.21it/s, failures=0, objective=99.4]
Extracting the Best Parameters#
To recover the parameters corresponding to the best observed objective value,
we can use deephyper.analysis.hpo.parameters_at_max().
parameters, objective = parameters_at_max(results)
print("\nOptimum values")
print(f"x: {parameters['x']:.3f}, y: {parameters['y']:.2f}")
print("objective:", objective)
Optimum values
x: -9.970, y: 0.02
objective: 99.40231418419825
Visualizing the Search Trajectory#
We plot the evolution of the best objective value to verify that optimization progresses correctly toward the maximum \(100\).
We clearly see the periodic exploration/exploitation effect of the scheduler.
WIDTH_PLOTS = 8
HEIGHT_PLOTS = WIDTH_PLOTS / 1.618
fig, ax = plt.subplots(figsize=(WIDTH_PLOTS, HEIGHT_PLOTS))
plot_search_trajectory_single_objective_hpo(results, mode="max", ax=ax)
_ = plt.title("Search Trajectory")

Visualizing the Feasible Region and Evaluations#
We now plot all evaluated points in the (x, y) plane, color-coded by
objective value, along with the constraint boundary x + y = 10.
fig, ax = plt.subplots(figsize=(WIDTH_PLOTS, HEIGHT_PLOTS))
item = ax.scatter(results["p:x"], results["p:y"], c=results["objective"], label="Evaluations")
ax.plot([0, 10], [10, 0], "r:")
ax.plot([0, 10], [-10, 0], "r:")
ax.plot([-10, 0], [0, -10], "r:")
ax.plot([0, -10], [10, 0], "r:", label="Constraint")
ax.set_xlabel(r"$x$")
ax.set_ylabel(r"$y$")
ax.set_xlim(-10, 10)
ax.set_ylim(-10, 10)
ax.legend()
ax.grid()
ax.grid(which="minor", linestyle=":")
cb = plt.colorbar(item)
cb.set_label(r"Objective")

Total running time of the script: (0 minutes 33.894 seconds)