mirror of https://github.com/ANL-CEEESA/LLEPE
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
40 lines
1.3 KiB
40 lines
1.3 KiB
import scipy.optimize as scipy_opt
|
|
from scipy.optimize import minimize
|
|
import skopt
|
|
|
|
def dual_anneal_optimizer(objective, x_guess):
|
|
bounds = [(1e-1, 1e1)] * len(x_guess)
|
|
bounds[1] = (1e-1, 2)
|
|
res = scipy_opt.dual_annealing(objective,
|
|
[(1e-1, 1e1)]*len(x_guess),
|
|
x0=x_guess)
|
|
est_parameters = res.x
|
|
return est_parameters, res.fun
|
|
|
|
|
|
def diff_evo_optimizer(objective, x_guess):
|
|
bounds = [(1e-1, 1e1)] * len(x_guess)
|
|
bounds[1] = (1e-1, 2)
|
|
res = scipy_opt.differential_evolution(objective,
|
|
bounds)
|
|
est_parameters = res.x
|
|
return est_parameters, res.fun
|
|
|
|
|
|
def forest_lbfgsb_optimizer(objective, x_guess):
|
|
x_guess = list(x_guess)
|
|
bounds = [(1e-1, 1e1)]*len(x_guess)
|
|
bounds[1] = (1e-1, 2)
|
|
res = skopt.forest_minimize(objective,
|
|
bounds,
|
|
random_state=1,
|
|
acq_func='LCB',
|
|
n_random_starts=30,
|
|
x0=x_guess,
|
|
xi=1e-4)
|
|
x_guess = res.x
|
|
optimizer_kwargs = {"method": 'l-bfgs-b',
|
|
"bounds": bounds}
|
|
res = minimize(objective, x_guess, **optimizer_kwargs)
|
|
return res.x, res.fun
|