[Ipopt] why can iteration 1-2-3 get worsen?
andreasw at watson.ibm.com
Thu Jun 12 21:29:20 EDT 2008
> 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
smaller. The output does not print this function but the original
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
> 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)
> 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
> 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,
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,
More information about the Ipopt