Я наткнулся на алгоритм прыжка в бассейне в scipy и создал простую проблему, чтобы понять, как ее использовать, но он, похоже, работает неправильно для этой проблемы. Может быть, я делаю что-то совершенно неправильное.
Вот код:
import scipy.optimize as spo
import numpy as np
minimizer_kwargs = {"method":"BFGS"}
f1=lambda x: (x-4)
def mybounds(**kwargs):
x = kwargs["x_new"]
tmax = bool(np.all(x <= 1.0))
tmin = bool(np.all(x >= 0.0))
print x
print tmin and tmax
return tmax and tmin
def print_fun(x, f, accepted):
print("at minima %.4f accepted %d" % (f, int(accepted)))
x0=[1.]
spo.basinhopping(f1,x0,accept_test=mybounds,callback=print_fun,niter=200,minimizer_kwargs=minimizer_kwargs)
Решение, которое оно дает, составляет x: array([ -1.80746874e+08])