I guess setting maxeval or maxtime must guarantee that optimization algorithms finish anyway (or possibly raise an exception). With the following settings, opt.optimize() never returns (though I can make a workaround, for example, by changing the algorithm or putting other stopping criteria).
import nlopt
import numpy as np
def f(x, _grad):
return (2 - np.cos(x[0]) + x[1] ** 2) ** 2
opt = nlopt.opt(nlopt.LN_COBYLA, 2)
opt.set_min_objective(f)
opt.set_maxeval(668) # doesn't seems to work
opt.set_maxtime(1.0) # doesn't seems to work
opt.optimize([0, 0]) # never returns
If I use opt.set_maxeval(667) in the above code, then somehow it returns with the correct answer [0, 0].
Just in case, I am testing with the following versions (on Google Colab):
Python: 3.6.9
nlopt: 2.6.1
(I'm not sure why pip doesn't pick up 2.6.2).
I guess setting
maxevalormaxtimemust guarantee that optimization algorithms finish anyway (or possibly raise an exception). With the following settings,opt.optimize()never returns (though I can make a workaround, for example, by changing the algorithm or putting other stopping criteria).If I use
opt.set_maxeval(667)in the above code, then somehow it returns with the correct answer[0, 0].Just in case, I am testing with the following versions (on Google Colab):
(I'm not sure why
pipdoesn't pick up 2.6.2).