[Ipopt] Options that control the value of mu

Brad Bell bradbell at seanet.com
Mon Feb 20 07:44:00 EST 2012


Thanks for the explanation  `Note that sometimes mu is decrease more 
than once in one iteration (e.g., between iteration 3 and 4 above), 
because the barrier problem error is small.'

For my case in question below the values of log10(mu) between iterations 
were-.3 and -1.5.

Using the debugger for that case, and stopping at line 227 in
https://projects.coin-or.org/Ipopt/browser/stable/3.10/Ipopt/src/Algorithm/IpMonotoneMuUpdate.cpp

The original value of mu was .5 (directly after the output for iter=8),
the first value of new_mu was .5^2, the second .5^3, the third .5^4, and 
the fourth was .5^5.

Note that log10(.5) = -0.30103 and log10(.5^5) = -1.505 which agrees 
with the trace output to the accuracy printed.

P.S.
Tracing with the debugger also revealed that the parameter 
barrier_tol_factor (which is called kappa_epsilon in the paper) is also 
an important consideration in this regard.

Brad



On 02/19/2012 09:20 PM, Andreas Waechter wrote:
> Hi Brad,
>
> I cannot reproduce your observation.  For the options
>
> mu_init   0.5
> mu_linear_decrease_factor   0.5
> mu_strategy   monotone
> mu_superlinear_decrease_power   1.1
> tol 0.001
>
> I got this on the HS100 problem:
>
> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du 
> alpha_pr  ls
>    0  7.1400000e+02 0.00e+00 7.80e+00  -0.3 0.00e+00    -  0.00e+00 
> 0.00e+00   0
>    1  7.0995093e+02 0.00e+00 7.68e+00  -0.3 1.09e+02    -  9.18e-01 
> 1.56e-02f  7
>    2  6.7901631e+02 3.02e+00 6.38e+00  -0.3 1.45e+02    -  1.00e+00 
> 1.79e-01f  1
>    3  6.7946712e+02 1.83e+00 2.25e+00  -0.3 4.28e+00    -  1.00e+00 
> 7.19e-01h  1
>    4  6.8093385e+02 0.00e+00 9.10e-01  -0.9 3.54e+00    -  1.00e+00 
> 1.00e+00h  1
>    5  6.8065537e+02 4.19e-01 1.22e+00  -1.2 1.83e+00    -  1.00e+00 
> 1.00e+00h  1
>    6  6.8073733e+02 0.00e+00 2.18e-01  -1.2 4.19e-01    -  1.00e+00 
> 1.00e+00h  1
>    7  6.8066042e+02 0.00e+00 1.21e-02  -1.8 2.51e-01    -  1.00e+00 
> 1.00e+00h  1
>    8  6.8063205e+02 0.00e+00 3.67e-05  -3.0 6.90e-02    -  1.00e+00 
> 1.00e+00h  1
>    9  6.8063013e+02 0.00e+00 1.33e-07  -4.4 4.36e-03    -  1.00e+00 
> 1.00e+00h  1
>
> This coincides with your formula.  Note that sometimes mu is decrease 
> more than once in one iteration (e.g., between iteration 3 and 4 
> above), because the barrier problem error is small.
>
> Regards,
>
> Andreas
>
> On 02/19/2012 02:56 PM, Brad Bell wrote:
>> I am having some trouble understanding the Ipopt optionss that 
>> control the value of mu during optimization. According to equation 
>> (7) of the reference:
>>     `On the implementation of an interior-point filter line-search
>>     algorithm for large-scale nonlinear programming'
>> we have
>>     mu_{j+1} = max { epsilon/10 , min [ kappa mu_j , mu_j^theta ] }
>>
>> In the Ipopt trace below, it seems that kappa is the linear scaling 
>> factor and theta is the superlinear scaling factor. The initial mu = 
>> .5 and corresponding log10(mu) = -.3 which agrees with iter = 0 in 
>> the trace below.
>>
>> The problem is at iter = 8, the
>>     log10(mu_j) = -.3, i.e., mu_j = 0.5
>>     log10(mu_{j+1) = -1.5, i.e., mu_{j+1} = 0.032
>> But the value of kappa=.5 and the value of theta=1.1 and so the value 
>> of mu_{j+1} should be
>>     min[ .5 * .5 , .5^1.1 ] = min[ .25 , .467 ] = .25
>> so the conclusion is that mu_{j+1} = .032 >= .25 which is false.
>>
>> Can someone explain what is going on here ?
>>
>>
>> List of user-set options:
>>
>>                                     Name   Value                used
>>                    hessian_approximation = exact                 yes
>>                                 max_iter = 50                    yes
>>                                  mu_init = 0.5                   yes
>>                mu_linear_decrease_factor = 0.5                   yes
>>                              mu_strategy = monotone              yes
>>            mu_superlinear_decrease_power = 1.1                   yes
>>                      nlp_lower_bound_inf = -1e+19                yes
>>                      nlp_upper_bound_inf = 1e+19                 yes
>>                              print_level = 5                     yes
>>                       print_user_options = yes                   yes
>>                                      tol = 0.001                 yes
>> This is Ipopt version 3.10, running with linear solver mumps.
>>
>> Number of nonzeros in equality constraint Jacobian...:     3904
>> Number of nonzeros in inequality constraint Jacobian.:        0
>> Number of nonzeros in Lagrangian Hessian.............:    17012
>>
>> Total number of variables............................:      750
>>                      variables with only lower bounds:        0
>>                 variables with lower and upper bounds:      750
>>                      variables with only upper bounds:        0
>> Total number of equality constraints.................:      380
>> Total number of inequality constraints...............:        0
>>         inequality constraints with only lower bounds:        0
>>    inequality constraints with lower and upper bounds:        0
>>         inequality constraints with only upper bounds:        0
>>
>> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du 
>> alpha_pr  ls
>>    0  1.7336986e+03 9.06e-01 9.76e+01  -0.3 0.00e+00    -  0.00e+00 
>> 0.00e+00   0
>>    1  7.3646697e+02 2.98e-01 6.25e+02  -0.3 1.46e+00   2.0 4.12e-01 
>> 9.95e-01f  1
>>    2  6.1674749e+02 2.71e-01 7.48e+02  -0.3 6.53e+00   1.5 2.32e-01 
>> 8.95e-02f  1
>>    3  5.5840255e+02 2.15e-01 6.11e+02  -0.3 2.43e+00    -  3.46e-02 
>> 2.03e-01f  1
>>    4  3.3685504e+02 1.42e-01 3.55e+02  -0.3 1.10e+00    -  1.83e-01 
>> 4.21e-01f  1
>>    5  1.9885799e+02 9.32e-02 5.83e+01  -0.3 8.30e-01    -  7.44e-01 
>> 9.90e-01f  1
>>    6  2.0559440e+02 1.41e-01 1.11e+04  -0.3 1.05e+00    -  3.31e-01 
>> 1.00e+00f  1
>>    7  1.9305692e+02 5.79e-02 4.31e+03  -0.3 3.53e+00    -  4.83e-01 
>> 7.42e-01h  1
>>    8  1.8984018e+02 1.82e-02 1.51e+00  -0.3 1.06e+00    -  1.00e+00 
>> 1.00e+00f  1
>>    9  1.9125490e+02 4.80e-03 1.11e+02  -1.5 4.82e-01    -  6.92e-01 
>> 9.99e-01H  1
>> iter    objective    inf_pr   inf_du lg(mu)  ||d||  lg(rg) alpha_du 
>> alpha_pr  ls
>>   10  1.9256817e+02 3.67e-03 1.06e-01  -1.5 4.53e-01    -  1.00e+00 
>> 1.00e+00h  1
>>   11  1.9468436e+02 1.58e-03 3.03e+00  -2.7 4.07e-01    -  9.53e-01 
>> 8.80e-01h  1
>>   [...]
>>   32  2.2479027e+02 1.12e-04 7.42e-02  -4.4 1.52e-01    -  1.00e+00 
>> 1.00e+00h  1
>>   33  2.2749869e+02 8.63e-05 6.49e-02  -4.4 1.29e-01    -  1.00e+00 
>> 1.00e+00h  1
>>   34  2.3009148e+02 5.67e-05 5.57e-02  -4.4 1.00e-01    -  1.00e+00 
>> 1.00e+00h  1
>>
>> Number of Iterations....: 34
>>
>>                                    (scaled)                 (unscaled)
>> Objective...............:   2.3009147704253428e+02    
>> 2.3009147704253428e+02
>> Dual infeasibility......:   5.5729744609665358e-02    
>> 5.5729744609665358e-02
>> Constraint violation....:   5.6684216535626365e-05    
>> 5.6684216535626365e-05
>> Complementarity.........:   3.9139910972968873e-05    
>> 3.9139910972968873e-05
>> Overall NLP error.......:   7.9497813272578718e-04    
>> 5.5729744609665358e-02
>>
>>
>> Number of objective function evaluations             = 126
>> Number of objective gradient evaluations             = 35
>> Number of equality constraint evaluations            = 126
>> Number of inequality constraint evaluations          = 0
>> Number of equality constraint Jacobian evaluations   = 35
>> Number of inequality constraint Jacobian evaluations = 0
>> Number of Lagrangian Hessian evaluations             = 34
>> Total CPU secs in IPOPT (w/o function evaluations)   =      1.517
>> Total CPU secs in NLP function evaluations           =    246.303
>>
>> EXIT: Optimal Solution Found.
>>
>> _______________________________________________
>> Ipopt mailing list
>> Ipopt at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/ipopt
>



More information about the Ipopt mailing list