Skip to content

Commit 6ab567d

Browse files
v0.9.4
fun_control handling
1 parent 0458bb1 commit 6ab567d

5 files changed

Lines changed: 102 additions & 62 deletions

File tree

notebooks/testKriging.ipynb

Lines changed: 34 additions & 30 deletions
Large diffs are not rendered by default.

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta"
77

88
[project]
99
name = "spotPython"
10-
version = "0.9.3"
10+
version = "0.9.4"
1111
authors = [
1212
{ name="T. Bartz-Beielstein", email="tbb@bartzundbartz.de" }
1313
]

src/spotPython/spot/spot.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@
3636
get_fun_control_key_value,
3737
)
3838
import plotly.graph_objects as go
39-
from typing import List, Union, Callable, Dict
39+
from typing import Union, Callable, Dict
4040

4141

4242
logger = logging.getLogger(__name__)
@@ -200,12 +200,12 @@ def __init__(
200200
upper: np.array = None,
201201
fun_evals: int = 15,
202202
fun_repeats: int = 1,
203-
fun_control: Dict[str, Union[int, float]] = {},
203+
fun_control: dict = {},
204204
max_time: int = inf,
205205
noise: bool = False,
206206
tolerance_x: float = 0,
207-
var_type: List[str] = ["num"],
208-
var_name: List[str] = None,
207+
var_type: list = ["num"],
208+
var_name: list = None,
209209
infill_criterion: str = "y",
210210
n_points: int = 1,
211211
ocba_delta: int = 0,
@@ -246,6 +246,8 @@ def __init__(
246246
self.lower = lower
247247
if get_bound_values(self.fun_control, "lower") is not None:
248248
self.lower = get_bound_values(self.fun_control, "lower")
249+
# Number of dimensions is based on lower
250+
self.k = self.lower.size
249251

250252
# if upper is in fun_control dictionary, use the value of the key "upper" as the upper bound
251253
# else use the upper bound upper
@@ -254,25 +256,22 @@ def __init__(
254256
self.upper = get_bound_values(self.fun_control, "upper")
255257

256258
self.set_self_attribute("var_type", var_type, self.fun_control)
259+
# Force numeric type as default in every dim:
260+
# assume all variable types are "num" if "num" is
261+
# specified less than k times
262+
if len(self.var_type) < self.k:
263+
self.var_type = self.var_type * self.k
264+
logger.warning("All variable types forced to 'num'.")
265+
257266
self.set_self_attribute("var_name", var_name, self.fun_control)
258267
# use x0, x1, ... as default variable names:
259268
if self.var_name is None:
260269
self.var_name = ["x" + str(i) for i in range(len(self.lower))]
261270

262-
# Number of dimensions:
263-
self.k = self.lower.size
264-
265271
# Reduce dim based on lower == upper logic:
266272
# modifies lower, upper, var_type, and var_name
267273
self.to_red_dim()
268274

269-
# Force numeric type as default in every dim:
270-
# assume all variable types are "num" if "num" is
271-
# specified less than k times
272-
if len(self.var_type) < self.k:
273-
self.var_type = self.var_type * self.k
274-
logger.warning("All variable types forced to 'num'.")
275-
276275
self.set_self_attribute("fun_evals", fun_evals, self.fun_control)
277276
self.set_self_attribute("fun_repeats", fun_repeats, self.fun_control)
278277
self.set_self_attribute("max_time", max_time, self.fun_control)
@@ -288,7 +287,7 @@ def __init__(
288287
# Random number generator:
289288
self.rng = default_rng(self.fun_control["seed"])
290289

291-
# Bounds are internal, because they are function of self.lower and self.upper
290+
# Bounds are internal, because they are functions of self.lower and self.upper
292291
# and used by the optimizer:
293292
de_bounds = []
294293
for j in range(self.lower.size):

test/test_generate_design.py

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ def test_generate_design():
1414
lower=np.array([-5,0,1]),
1515
upper=np.array([10,15,3]),
1616
seed=1,
17-
design_control={"init_size": ni}
17+
design_control={"init_size": ni},
18+
fun_control={}
1819
)
1920

2021
X = spot_test.generate_design(size=spot_test.design_control["init_size"],
@@ -38,30 +39,32 @@ def test_generate_design():
3839
lower=np.array([-5,0,1]),
3940
upper=np.array([10,15,3]),
4041
seed=1,
41-
design_control={"init_size": ni}
42+
design_control={"init_size": ni},
43+
fun_control={}
4244
)
4345

4446
X3 = spot_test.generate_design(size=spot_test.design_control["init_size"],
4547
repeats=spot_test.design_control["repeats"],
4648
lower=spot_test.lower,
4749
upper=spot_test.upper)
4850

49-
# spot_test = Spot(
50-
# fun=fun,
51-
# lower=np.array([-5,0,1]),
52-
# upper=np.array([10,15,3]),
53-
# seed=2,
54-
# design_control={"init_size": ni}
55-
# )
51+
spot_test = Spot(
52+
fun=fun,
53+
lower=np.array([-5,0,1]),
54+
upper=np.array([10,15,3]),
55+
seed=2,
56+
design_control={"init_size": ni},
57+
fun_control={}
58+
)
5659

57-
# X4 = spot_test.generate_design(size=spot_test.design_control["init_size"],
58-
# repeats=spot_test.design_control["repeats"],
59-
# lower=spot_test.lower,
60-
# upper=spot_test.upper)
60+
X4 = spot_test.generate_design(size=spot_test.design_control["init_size"],
61+
repeats=spot_test.design_control["repeats"],
62+
lower=spot_test.lower,
63+
upper=spot_test.upper)
6164

6265
assert (X != X2).any()
6366
assert (X == X3).any()
64-
# assert (X != X4).any()
67+
assert (X != X4).any()
6568
assert (X2 != X3).any()
66-
# assert (X2 != X4).any()
67-
# assert (X3 != X4).any()
69+
assert (X2 != X4).any()
70+
assert (X3 != X4).any()

test/test_to_red.py

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
import numpy as np
2+
from spotPython.fun.objectivefunctions import analytical
3+
from spotPython.spot import spot
4+
5+
def test_to_red():
6+
"""
7+
Test to_red.
8+
Test reduced dimensionality.
9+
The first variable is not active, because it has
10+
identical values (bounds).
11+
12+
"""
13+
# number of initial points:
14+
ni = 10
15+
# number of points
16+
fun_evals = 10
17+
fun = analytical().fun_sphere
18+
lower = np.array([-1, -1, -1])
19+
upper = np.array([-1, 1, 1])
20+
design_control={"init_size": ni}
21+
surrogate_control={"n_theta": 2}
22+
spot_1 = spot.Spot(fun=fun,
23+
lower = lower,
24+
upper= upper,
25+
fun_evals = fun_evals,
26+
show_progress=True,
27+
log_level=50,
28+
design_control=design_control,
29+
surrogate_control=surrogate_control,)
30+
spot_1.run()
31+
assert spot_1.lower.size == 2
32+
assert spot_1.upper.size == 2
33+
assert len(spot_1.var_type) == 2
34+
assert spot_1.red_dim == True

0 commit comments

Comments
 (0)