[Ipopt] inf_du doesn't get smaller
Sean C McDuffee
scmcduff at blueskystudios.com
Tue Dec 16 10:56:51 EST 2014
Hi Stefan
Thanks for replying. So I tried setting those similarly in the past but
still didn't get the desired result. I just tried the following:
app->Options ()->SetNumericValue ("acceptable_tol",1.e-4);
app->Options ()->SetNumericValue ("acceptable_obj_change_tol", 0.01);
app->Options ()->SetNumericValue ("acceptable_constr_viol_tol", 1.e-4);
app->Options ()->SetNumericValue ("acceptable_dual_inf_tol", 1.e10);
app->Options ()->SetIntegerValue ("acceptable_iter", 5);
And still got the following output:
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
0 5.4023963e-01 2.56e-03 7.24e-01 0.0 0.00e+00 - 0.00e+00
0.00e+00 0
1 5.3791059e-01 1.71e-13 5.49e-02 -11.0 2.32e-03 - 1.00e+00
1.00e+00h 1
2 5.3791459e-01 1.71e-13 2.20e-03 -11.0 3.33e-05 - 1.00e+00
1.00e+00h 1
3 5.3791482e-01 1.71e-13 2.57e-03 -11.0 4.96e-06 - 1.00e+00
1.00e+00h 1
4 5.3791479e-01 1.71e-13 2.21e-03 -11.0 2.70e-06 - 1.00e+00
1.00e+00h 1
5 5.3791479e-01 1.71e-13 2.56e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
6 5.3791481e-01 1.71e-13 2.21e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
7 5.3791478e-01 1.71e-13 2.56e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
8 5.3791481e-01 1.71e-13 2.21e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
9 5.3791478e-01 1.71e-13 2.56e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
10 5.3791481e-01 1.71e-13 2.21e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
11 5.3791478e-01 1.71e-13 2.56e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
12 5.3791481e-01 1.71e-13 2.21e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
13 5.3791478e-01 1.71e-13 2.56e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
14 5.3791481e-01 1.71e-13 2.21e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
15 5.3791478e-01 1.71e-13 2.56e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
16 5.3791481e-01 1.71e-13 2.21e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
17 5.3791478e-01 1.71e-13 2.56e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
18 5.3791481e-01 1.71e-13 2.21e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
19 5.3791478e-01 1.71e-13 2.56e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
alpha_pr ls
20 5.3791481e-01 1.71e-13 2.21e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
21 5.3791478e-01 1.71e-13 2.56e-03 -11.0 2.60e-06 - 1.00e+00
1.00e+00h 1
...
I had earlier tried using the default acceptable_dual_inf_tol. The
cycling nature in inf_du is something I don't understand either.
Thanks
Sean
On 12/12/2014 12:42 PM, Stefan Vigerske wrote:
> Hi,
>
> acceptable_tol only applies if there were acceptable_iter (15 by
> default) iterations in a row that were acceptable.
>
> If you set
> acceptable_tol 1e-4
> acceptable_constr_viol_tol 1e-4
> acceptable_obj_change_tol 0.01
> Ipopt should stop if there have been 15 iterations in a row with
> - inf_pr < 1e-4,
> - violation of complementarity < 0.01 (default for
> acceptable_compl_inf_tol),
> - objective change < 1%
> - arbitary inf_du (default for
> acceptable_dual_inf_tol)
>
> If 15 iterations is too much, then set acceptable_iter to a smaller
> value.
>
> I don't remember an option to stop if ||d|| is small, but this is
> somewhat related to the objective change.
>
> Hope that helps,
> Stefan
>
> On 12/10/2014 06:20 PM, Sean C McDuffee wrote:
>> I have a problem that results in output like:
>>
>> iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
>> alpha_pr ls
>> 0 3.7869112e-03 0.00e+00 3.20e-04 0.0 0.00e+00 - 0.00e+00
>> 0.00e+00 0
>> 1 3.7869106e-03 3.10e-35 3.24e-04 -11.0 3.32e-08 - 1.00e+00
>> 1.00e+00f 1
>> 2 3.7869101e-03 1.76e-37 2.26e-04 -11.0 1.92e-09 - 1.00e+00
>> 1.00e+00f 1
>> 3 3.7869104e-03 5.29e-37 2.59e-04 -11.0 7.08e-10 - 1.00e+00
>> 1.00e+00h 1
>> 4 3.7869100e-03 6.88e-36 2.57e-04 -11.0 8.14e-10 - 1.00e+00
>> 1.00e+00f 1
>> 5 3.7869104e-03 4.41e-37 2.59e-04 -11.0 8.08e-10 - 1.00e+00
>> 1.00e+00h 1
>> 6 3.7869100e-03 1.41e-36 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00f 1
>> 7 3.7869104e-03 7.05e-36 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00h 1
>> 8 3.7869100e-03 2.91e-36 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00f 1
>> 9 3.7869104e-03 2.03e-36 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00h 1
>> iter objective inf_pr inf_du lg(mu) ||d|| lg(rg) alpha_du
>> alpha_pr ls
>> 10 3.7869100e-03 1.94e-36 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00f 1
>> 11 3.7869104e-03 9.79e-36 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00h 1
>> 12 3.7869100e-03 2.38e-36 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00f 1
>> 13 3.7869104e-03 8.38e-36 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00h 1
>> 14 3.7869100e-03 5.29e-36 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00f 1
>> 15 3.7869104e-03 1.23e-35 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00h 1
>> 16 3.7869100e-03 8.82e-37 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00f 1
>> 17 3.7869104e-03 3.17e-36 2.59e-04 -11.0 8.13e-10 - 1.00e+00
>> 1.00e+00h 1
>>
>> ...
>>
>> What could cause this and can I stop the solver effectively when the
>> inf_du can't be lowered anymore? I've tried using acceptable_tol and
>> acceptable_dual_inf_tol but inf_du is still being considered for the
>> acceptable_tol. I'd like to accept an iteration here if ||d||, inf_pr,
>> and change in obj are all small.
>>
>>
>>
>> _______________________________________________
>> Ipopt mailing list
>> Ipopt at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/ipopt
>>
>
More information about the Ipopt
mailing list