[Ipopt] why can iteration 1-2-3 get worsen?

Andreas Waechter andreasw at watson.ibm.com
Thu Jun 12 21:29:20 EDT 2008


Hi Xiaoming,

> I used IPOPT 3.3.4 and had results as below. My initial design (iter=0)
> is a feasible design. However, iter 1, 2, and 3 get some worsen not
> better (objective increases). Why that happens?
>
> Is that my due to automatic scaling?

No.  This is due to the fact that the barrier function (the function that 
includes the barrier terms, see (3a) in 
http://www.research.ibm.com/people/a/andreasw/papers/ipopt.pdf) becomes 
smaller.  The output does not print this function but the original 
objective function.

If your starting point is close to the boundary, but the barrier parameter 
is large (which is a very relative term here, depending, e.g., on the size 
of the objective function gradient), the algorithm will first push the 
variables away to the reduce the barrier term, which mich lead to an 
increase of the original objective function.  You can change the initial 
value of the barrier parameter with the mu_init option, or you can also 
try the 'mu_strategy=adaptive' option (see also the 
'bound_mult_init_method' option).

> 1) My design variables (all total =301501 in range 0.001, 1.0). Do you
> think I need to scale the design variables to 1.0 for all variables?
> SDi= 1.0/xi? Any comments?
>
> 2) If small obj < 1.0-2  or very small gradients (like 1.-5 to 1.-10),
> use your default parameter, the results are not quite good sometime. I
> guess Sometimes, I set my own scaling factor :
>
> SCFOBJ = 1.0D+5/abs(OBJ)
> IERR=IPADDNUMOPTION(IPROBLEM,'obj_scaling_factor',SCFOBJ)
>
> Optimization results are much better (may be due to increases gradients
> in orders?). If I set 'obj_scaling_factor, SCFOBJ', Does the IPOPT
> automatic scaling function still perform based on my already scaled
> "SCFOBJ"?
>
> Why is best way to deal with very small gradients?

It is definitely a good idea to scale up the objective function if its 
gradient elements are small, and from what you describe this seems good 
for your instance.  If the gradient elements in the objective on the order 
of 1e-5 as you describe, I would even try much larger values, such as 1e5 
for this option.

In general, I tried to give some hints regarding what good scaling of a 
problem is at the Ipopt "Hints and Tricks" page, 
https://projects.coin-or.org/Ipopt/wiki/HintsAndTricks.
Finding a good scaling for your problem can be critical and also 
difficult.  One guildline could be to find a scaling that makes all 
non-zero derivatives of "typical" order 1 or so.

The value of the 'obj_scaling_factor' is taken into account IN ADDITION to 
the automatic scaling of the problem, as the documentation for this option 
describes.  Also, if the default automatic scaling in Ipopt only scales 
functions down, so if you have a problem with small derivatives to begin 
with, nothing will happen.

I hope this answers your questions,

Andreas


More information about the Ipopt mailing list