On Jul 12, 2010, at 1:07 PM, Tom Fiddaman wrote:
I’ve had problems with nlopt taking initial steps that are effectively 0 in single precision. As a result, the objective fn doesn’t change, and the algorithm makes no progress along the dimension in question. For example, where the initial guess for a parameter is 5000000.0, the first step is at 5000000.000039231.

NLopt uses some very simple heuristics for initial step sizes in nonderivative methods that may well be wrong in your case. You can easily change the initial step by calling the nlopt_set_initial_step function. (In the specific case of BOBYQA, it uses the same initial step in all directions, given by the minimum of your initial step sizes, so you might as well set them all to the same value using set_initial_step1).

Most likely, it's getting confused by you having quantities that are much bigger in some dimensions than in others. This is an annoying property of BOBYQA's implementation, in that it characterizes its initial step by a single number, which basically assumes that the units are the same for all the design variables. I should probably try to fix this at some point (so that BOBYQA can use dimension- specific initial steps), but modifying the BOBYQA code is a PITA.

Is there some reason that the dimensionality of the problem should affect the behavior of the initial search steps?

I don't see offhand how the dimensionality per se could affect the initial step size, but the default (heuristic) initial step also depends on lots of other things that you may be changing along with the dimensionality. e.g. the bounds in each dimension and the initial guess in each dimension. See the code for nlopt_set_default_initial_step in api/options.c, and again remember that the BOBYQA code just takes the minimum of all the steps in each direction.

Steven
_______________________________________________
NLopt-discuss mailing list
[email protected]
http://ab-initio.mit.edu/cgi-bin/mailman/listinfo/nlopt-discuss

Reply via email to