2727
2828import numpy as np
2929from numpy .random import RandomState
30- from scipy .optimize import minimize
30+ from scipy .optimize import minimize , differential_evolution
3131from scipy .special import softmax
3232from scipy .stats import norm
3333from sklearn .gaussian_process import GaussianProcessRegressor
@@ -295,8 +295,10 @@ def _l_bfgs_b_minimize(
295295 min_acq : float
296296 Acquisition function value at `x_min`
297297 """
298+ bounds = space .bounds
298299 continuous_dimensions = space .continuous_dimensions
299300 continuous_bounds = space .bounds [continuous_dimensions ]
301+ discrete_dimensions = ~ continuous_dimensions
300302
301303 if not continuous_dimensions .any ():
302304 min_acq = np .inf
@@ -308,21 +310,23 @@ def _l_bfgs_b_minimize(
308310 x_min : NDArray [Float ]
309311 for x_try in x_seeds :
310312
311- def continuous_acq (x : NDArray [Float ], x_try = x_try ) -> NDArray [Float ]:
312- x_try [continuous_dimensions ] = x
313- return acq (x_try )
314-
313+ # def continuous_acq(x: NDArray[Float], x_try=x_try) -> NDArray[Float]:
314+ # x_try[continuous_dimensions] = x
315+ # return acq(x_try)
316+ if all ( continuous_dimensions ):
315317 # Find the minimum of minus the acquisition function
316- res : OptimizeResult = minimize (
317- continuous_acq , x_try [continuous_dimensions ], bounds = continuous_bounds , method = "L-BFGS-B"
318- )
318+ res : OptimizeResult = minimize (acq , x_try , bounds = continuous_bounds , method = "L-BFGS-B" )
319+ else :
320+ res : OptimizeResult = differential_evolution (acq , bounds = bounds ,
321+ integrality = discrete_dimensions ,
322+ seed = self .random_state )
319323 # See if success
320324 if not res .success :
321325 continue
322326
323327 # Store it if better than previous minimum(maximum).
324328 if min_acq is None or np .squeeze (res .fun ) >= min_acq :
325- x_try [ continuous_dimensions ] = res .x
329+ x_try = res .x
326330 x_min = x_try
327331 min_acq = np .squeeze (res .fun )
328332
0 commit comments