У меня сейчас черный ящик с функцией цели. Он успешно использовался в scipy.optimize
как 'status = op.basinhopping (obj, sp, ...)', однако, когда я пытаюсь использовать тот же объект obj для пакета NLOPT, он выдает сообщение
TypeError: <lambda>() takes exactly 1 argument (2 given).
Я полагаю, что у obj для scipy.optimize
есть два аргумента: один - сама функция, а другой - дифференцирование каждого измерения, в то время как для obj, используемого в методах NLOPT, требуется только сама функция. Если я прав, как мне изменить obj, чтобы он мог использоваться в NLOPT? Мой код использования NLOPT
sys.path.insert(0,os.path.join(os.getcwd(),"build/R_ulp"))
import foo as foo_square
reload(foo_square)
sp=np.zeros(foo_square.dim)+args.startPoint
obj=lambda X:foo_square.R(* X)
opt = nlopt.opt(nlopt.GN_CRS2_LM, foo_square.dim)
opt.set_min_objective(obj)
opt.set_lower_bounds(-1e9)
opt.set_upper_bounds(1e9)
opt.set_stopval(0)
opt.set_xtol_rel(1e-9)
opt.set_initial_step(1)
opt.set_population(0)
opt.set_maxeval(100000)
status = opt.optimize([0.111111111]*foo_square.dim)