This seems to be exactly the issue - changing the dimensionality introduced
new variables with very different scales from the subset. I rescaled all my
dimensions to a 0-1 hypercube and the problem goes away.

I hadn't seen the new nlopt_set_default_initial_step function - I guess it's
time to upgrade from 1.2.

Thanks for the insight!

Tom

From: Steven G. Johnson <stevenj....@...>
Subject: Re: puzzling behavior of initial steps
Newsgroups: gmane.science.analysis.nlopt.general
Date: 2010-07-12 19:30:02 GMT (20 hours and 15 minutes ago)

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