[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