Вы передаете возвращаемое значение от вызова callbackF(start_t)
.То, что вы хотите, это передать саму функцию.Вот один из способов сделать это
from scipy.optimize import differential_evolution as DE
import time as t
# Max time in seconds
max_time = 3.
def get_callback(start_t):
def callbackF(current_params, convergence):
time_elapsed = t.time() - start_t
if time_elapsed > max_time:
print("Stop")
return True
return callbackF
def DEdist(model):
res = (1. - model[0])**2 + 100.0 * (model[1] - model[0]**2)**2 + \
(1. - model[1])**2 + 100.0 * (model[2] - model[1]**2)**2
return res
start_t = t.time()
bounds = [[0., 10.], [0., 10.], [0., 10.], [0., 10.]]
result = DE(
DEdist, bounds, popsize=100, maxiter=1500, callback=get_callback(start_t))
print(t.time() - start_t)
Я добавил *args, **kwargs
, потому что некоторые вызовы kwarg convergence
были пропущены, и я не хотел искать в документации, есть ли что-нибудь еще, чтопередается в функцию обратного вызова.
EDIT - делает подпись функции более значимой.