У меня проблемы с определением ограничений с использованием бассейна с методом method = 'COBYLA'. Вот тестовый случай, когда все идет не так. По сути, ограничения игнорируются, и существуют функциональные испытания вне указанного диапазона. Я задаю простую квадратику с минимумом в [0,0], ища -3<x[0]
, но, как вы можете видеть из выходных данных, есть много поисков за пределами этого диапазона (я увеличил размер шага, чтобы сделать его очевидным)
import numpy as np
from scipy.optimize import basinhopping
def f(x):
if x[0]<-3 :
print('outside range ',x[0])
return x[0]**2+x[1]**2
cons = [{'type':'ineq','fun': lambda x: x[0]+3}]
kwargs = {'method':'COBYLA','constraints':cons}
ret=basinhopping(f, [5,1],T=1,stepsize=1000,niter=1,minimizer_kwargs=kwargs)
print(ret)
runfile('py/cobyla_test', wdir='/py', post_mortem=True)
outside range -446.14581341127945
outside range -445.14581341127945
outside range -445.14581341127945
outside range -444.14581341127945
[etc... lots of output deleted]
[-4.81217825e-05 -5.23242054e-05] 5.0535284302996725e-09