Bayesian exploration from YAML¶
In [1]:
Copied!
from xopt import Xopt
# set values if testing
import os
import warnings
warnings.filterwarnings("ignore")
SMOKE_TEST = os.environ.get("SMOKE_TEST")
YAML = """
generator:
name: bayesian_exploration
evaluator:
function: xopt.resources.test_functions.tnk.evaluate_TNK
vocs:
variables:
x1: [0, 3.14159]
x2: [0, 3.14159]
observables: [y1]
constraints:
c1: [GREATER_THAN, 0]
c2: [LESS_THAN, 0.5]
constants: {a: dummy_constant}
"""
from xopt import Xopt
# set values if testing
import os
import warnings
warnings.filterwarnings("ignore")
SMOKE_TEST = os.environ.get("SMOKE_TEST")
YAML = """
generator:
name: bayesian_exploration
evaluator:
function: xopt.resources.test_functions.tnk.evaluate_TNK
vocs:
variables:
x1: [0, 3.14159]
x2: [0, 3.14159]
observables: [y1]
constraints:
c1: [GREATER_THAN, 0]
c2: [LESS_THAN, 0.5]
constants: {a: dummy_constant}
"""
In [2]:
Copied!
X = Xopt.from_yaml(YAML)
# for testing purposes only
if SMOKE_TEST:
X.generator.numerical_optimizer.n_restarts = 1
X.generator.n_monte_carlo_samples = 1
X
X = Xopt.from_yaml(YAML)
# for testing purposes only
if SMOKE_TEST:
X.generator.numerical_optimizer.n_restarts = 1
X.generator.n_monte_carlo_samples = 1
X
Out[2]:
Xopt
________________________________
Version: 2.6.7.dev55+g7aa2f3618.d20250930
Data size: 0
Config as YAML:
dump_file: null
evaluator:
function: xopt.resources.test_functions.tnk.evaluate_TNK
function_kwargs:
raise_probability: 0
random_sleep: 0
sleep: 0
max_workers: 1
vectorized: false
generator:
computation_time: null
custom_objective: null
fixed_features: null
gp_constructor:
covar_modules: {}
custom_noise_prior: null
mean_modules: {}
name: standard
trainable_mean_keys: []
transform_inputs: true
use_cached_hyperparameters: false
use_low_noise_prior: false
max_travel_distances: null
model: null
n_candidates: 1
n_interpolate_points: null
n_monte_carlo_samples: 128
name: bayesian_exploration
numerical_optimizer:
max_iter: 2000
max_time: 5.0
n_restarts: 20
name: LBFGS
supports_batch_generation: true
supports_constraints: true
turbo_controller: null
use_cuda: false
max_evaluations: null
serialize_inline: false
serialize_torch: false
strict: true
vocs:
constants:
a: dummy_constant
constraints:
c1:
- GREATER_THAN
- 0.0
c2:
- LESS_THAN
- 0.5
objectives: {}
observables:
- y1
variables:
x1:
- 0.0
- 3.14159
x2:
- 0.0
- 3.14159
In [3]:
Copied!
X.random_evaluate(5)
for i in range(5):
print(f"step {i}")
X.step()
X.random_evaluate(5)
for i in range(5):
print(f"step {i}")
X.step()
step 0
step 1
step 2
step 3
step 4
In [4]:
Copied!
print(X.data)
print(X.data)
x1 x2 a y1 y2 c1 \
0 0.794551 3.092778 dummy_constant 0.794551 3.092778 9.260156
1 0.521696 2.700073 dummy_constant 0.521696 2.700073 6.662175
2 1.444625 1.178502 dummy_constant 1.444625 1.178502 2.480497
3 2.240708 0.852698 dummy_constant 2.240708 0.852698 4.658491
4 2.791609 0.260813 dummy_constant 2.791609 0.260813 6.853087
5 0.006361 1.281561 dummy_constant 0.006361 1.281561 0.542754
6 3.141590 1.726887 dummy_constant 3.141590 1.726887 11.870383
7 0.917748 0.809081 dummy_constant 0.917748 0.809081 0.443309
8 0.675372 0.979312 dummy_constant 0.675372 0.979312 0.512430
9 0.393077 0.946972 dummy_constant 0.393077 0.946972 -0.048727
c2 xopt_runtime xopt_error
0 6.809257 0.000156 False
1 4.840792 0.000133 False
2 1.352681 0.000129 False
3 3.154460 0.000126 False
4 5.308684 0.000127 False
5 0.854517 0.000152 False
6 8.483250 0.000151 False
7 0.270044 0.000152 False
8 0.260496 0.000156 False
9 0.211217 0.000150 False
In [5]:
Copied!
# plot results
ax = X.data.plot("x1", "x2")
ax.set_aspect("equal")
# plot results
ax = X.data.plot("x1", "x2")
ax.set_aspect("equal")
In [6]:
Copied!
fig, ax = X.generator.visualize_model(show_feasibility=True, n_grid=100)
fig, ax = X.generator.visualize_model(show_feasibility=True, n_grid=100)