[Ipopt] Optimization Days follow up

Andreas Waechter andreasw at watson.ibm.com
Mon Nov 30 13:04:33 EST 2009


Hi Laurence,

(I'm posting my reply to your question to the Ipopt mailing list since the 
answer might be of interest to others as well.  Please post your questions 
regarding Ipopt also to this list - thanks!)

> Hi Andreas,
>
> Thanks for your response. I got another question about Ipopt's output.
> I've found that the "final x unscaled" reported in the output file
> doesn't correspond to the "Objective" for some models. For instance,
> for the ex5_2_5 model from the COCONUT benchmark, the output file
> lists:
>
>                                  (scaled)                 (unscaled)
> Objective...............:  -1.8592808841713094e+01   -4.5000000620423145e+02
> Dual infeasibility......:   2.2678624254638618e-10    5.4888861291334158e-09
> Constraint violation....:   0.0000000000000000e+00    0.0000000000000000e+00
> Complementarity.........:   3.0000438918078409e-09    7.2609780556540572e-08
> Overall NLP error.......:   3.0000438918078409e-09    7.2609780556540572e-08
>
> and
>
> EXIT: Optimal Solution Found.
> DenseVector "final x unscaled" with 7 elements:
> final x unscaled[    1]= 0.0000000000000000e+00
> final x unscaled[    2]= 5.0000000053591165e-01
> final x unscaled[    3]= 5.0000000916067178e-01
> final x unscaled[    4]= 8.8775814756766804e-10
> final x unscaled[    5]= 9.9999999045612540e+01
> final x unscaled[    6]= 1.0699974491383665e-07
> final x unscaled[    7]= 1.0000000292406480e+02
>
> However, when I calculate the objective function value with the x
> listed above, I get a slightly different Objective:
> -4.5000000038628144e+02. I also get a larger Constraint violation. I
> guess I don't fully understand the output. Is "final x unscaled" the
> point used to calculate the objective? Anyways, if you could fill me
> in it would be greatly appreciated.

I guess what happens is that Ipopt is projecting the variable x[1] into 
its lower bound 0.0.  At the beginning of the optimization, Ipopt relaxes 
all bounds by a tiny bit, and at the end of the optimization, all 
variables are projected back into the original bounds.  Please refer to 
the options "bound_relax_factor" and "honor_original_bounds" in the Ipopt 
documentation.  If you set bound_relax_factor to 0 or 
honor_original_bounds to no, your computed objective function with the 
final values should correspond to what Ipopt prints in the last iteration.

I hope this answers your question.

Regards,

Andreas



More information about the Ipopt mailing list