[Ipopt] Acceptance Criteria

Marco Rozgic marco.rozgic at hsu-hh.de
Fri May 10 10:26:27 EDT 2013


Hi everybody,

I was trying to figure out how the acceptable_tol features in IPOPT work 
and got stuck by trying to force the algorithm to terminate if the 
objective value of the function is not change by a threshold. I was 
playing around with the h_071 example and did the following:

options.ipopt.acceptable_tol = 5e-1;
options.ipopt.acceptable_iter = 1;
options.ipopt.print_level = 7;
options.ipopt.acceptable_obj_change_tol = 5e-1;

Taking a closer look at the output showed that even at iteration 4 the 
acceptable_obj_change_tol criterion is fulfilled (I think its even at 
iteration 3 or something like that). But the algorithm stops at 
iteration 6 due to the table below. For me it seems like the 
acceptable_to options only take into account the values of 
acceptable_dual_inf_tol and acceptable_constr_viol_tol and 
acceptable_compl_inf_tol.
As I understand with the options given above IPOPT should terminate with 
an acceptable solution after it had 1 iteration where the objective 
value (relative error divided by max(1,f(x))) changed by a factor of 5e-1.
Or am I mistaking the acceptance options?

Best,

Marco


Table Iteration 6:
Acceptable Check:
   overall_error =  2.3359562177951432e-03 acceptable_tol_             
=  5.0000000000000000e-01
   dual_inf      =  5.9258342526721580e-04 acceptable_dual_inf_tol_    
=  1.0000000000000000e+10
   constr_viol   =  2.3359562177951432e-03 acceptable_constr_viol_tol_ 
=  1.0000000000000000e-02
   compl_inf     =  6.3159163015538613e-04 acceptable_compl_inf_tol_   
=  1.0000000000000000e-02
   curr_obj_val_ =  1.7013025522460833e+01 last_obj_val                
=  1.6970895784694793e+01
   fabs(curr_obj_val_-last_obj_val_)/Max(1., fabs(curr_obj_val_)) = 
2.4763224924584512e-03 acceptable_obj_change_tol_ = 5.0000000000000000e-01
test iter = 6


Table iteration 4:


Convergence Check:
   overall_error =  1.2223872394948643e-01   IpData().tol()   = 
1.0000000000000000e-08
   dual_inf      =  3.2000084460944857e-02   dual_inf_tol_    = 
1.0000000000000000e+00
   constr_viol   =  1.2223872394948643e-01   constr_viol_tol_ = 
1.0000000000000000e-04
   compl_inf     =  9.2646645001600608e-02   compl_inf_tol_   = 
1.0000000000000000e-04
obj val update iter = 4
Acceptable Check:
   overall_error =  1.2223872394948643e-01 acceptable_tol_             
=  5.0000000000000000e-01
   dual_inf      =  3.2000084460944857e-02 acceptable_dual_inf_tol_    
=  1.0000000000000000e+10
   constr_viol   =  1.2223872394948643e-01 acceptable_constr_viol_tol_ 
=  1.0000000000000000e-02
   compl_inf     =  9.2646645001600608e-02 acceptable_compl_inf_tol_   
=  1.0000000000000000e-02
   curr_obj_val_ =  1.7002639474047527e+01 last_obj_val                
=  1.7506115001869802e+01
   fabs(curr_obj_val_-last_obj_val_)/Max(1., fabs(curr_obj_val_)) = 
2.9611609926256988e-02 acceptable_obj_change_tol_ = 5.0000000000000000e-01
test iter = 4

-- 
Dipl.-Math. Marco Rozgic
Department of the Theory of Electrical Engineering at the
Helmut Schmidt University
University of the Federal Armed Forces Hamburg
Tel: +49 (0) 40 6541 3647
Location: Holstenhofweg 85, 22043 Hamburg Building H3 Room 007



More information about the Ipopt mailing list