[Ipopt] IPOPT takes very long before the first iteration

Uwe Nowak uwe.nowak at itwm.fraunhofer.de
Tue Oct 6 04:30:41 EDT 2009


Hello!

Sorry for not replying for some days. I do not yet not completely 
understand what is that slow, but the symbolic factorization and all the 
other times are pretty short (below few seconds). Measurements showed, 
that the performance leek is in my code at the computation of the 
density structure of the jacobian. I simply did not expect it to be 
there. So sorry for asking stupid questions about IPOPT.

Thank you very much four your help,

Uwe


Andreas Waechter schrieb:
> Hi Uwe,
> 
> InitializeIterates is the place where the first linear system is solved.
> 
> To see how the linear solver is doing, look at the following lines in 
> the print_timing_statistics=yes output:
> 
>  LinearSystemSymbolicFactorization..:      0.010
>  LinearSystemFactorization..........:      0.440
>  LinearSystemBackSolve..............:      2.810
> 
> I suspect that in your case the first one take a lot of time.
> 
> And, yes, I strongly suggest to try another solver, Pardiso should cure 
> this problem.
> 
> Regards,
> 
> Andreas
> 
> 
> On Thu, 1 Oct 2009, Uwe Nowak wrote:
> 
>> Hello!
>>
>> Thank you for the hint with the "print_timing_statistics". Actually most
>> of the time is spent in the "InitializeIterates" (between 50% and 90% of
>> the total run time, depending on the number of iterations and the
>> problem size), most of the rest is spent in the convergence check
>> (probably because I do some pretty expensive tracing in the
>> intermediate_callback method).
>>
>> I did not find time to try another linear solver, but I will try
>> Paradiso next week an tell you the results.
>>
>> Thank you very much four your help,
>>
>> Uwe
>>
>>
>> Andreas Waechter schrieb:
>>> Hi Uwe,
>>>
>>> The derivative checker is not run by default, so this cannot be the 
>>> reason.
>>>
>>> What happens before the first iteration is that Ipopt calls the linear
>>> solver (your output tells me that it is MA27) to compute initial values
>>> for the multiplers.  here, it first does a "symbolic factorization" (an
>>> initialization step that is done once at the beginning but not in
>>> further iterations), and depending on your matrix structure, this can
>>> take a long time.   Similarly, the factorization itself can take time.
>>> (You could switch off the initialization of the multipliers by setting
>>> constr_mult_init_max to 0, but that would just postpone the problem to
>>> the point where Ipopt has to compute the search direction in the first
>>> iteration.)
>>>
>>> To find out what the specific step is that runs so slow you can set the
>>> option
>>>
>>> print_timing_statistics yes
>>>
>>> This should show you in more detail, which part of the run takes most of
>>> the time.
>>>
>>> In order to fix your problem, you probably want to consider
>>> experimenting with a different linear solver (there a bunch of options
>>> [see documentation], and Olaf already suggest to use Pardiso, which
>>> seems to work very efficiently).  But of course you need to compile
>>> Ipopt with such a linear solver.
>>>
>>> Hope this helps,
>>>
>>> Andreas
>>>
>>>
>>>
>>> On Tue, 29 Sep 2009, Uwe Nowak wrote:
>>>
>>>> Hello!
>>>>
>>>> Thank you for your guess. I already deactivated the derivative check.
>>>> The list of user options is
>>>>
>>>>                                     Name   Value                used
>>>>                           acceptable_tol = 1                     yes
>>>>                         file_print_level = 6                     yes
>>>>                    hessian_approximation = limited-memory        yes
>>>>                                 max_iter = 1000                  yes
>>>>                                  max_soc = 0                     yes
>>>>                       nlp_scaling_method = none                  yes
>>>>                              output_file = ipopt.out             yes
>>>>                              print_level = 5                     yes
>>>>                       print_user_options = yes                   yes
>>>>                                      tol = 1                     yes
>>>>          watchdog_shortened_iter_trigger = 0                     yes
>>>>
>>>> Thank you,
>>>> Uwe
>>>>
>>>>
>>>> Sebastian Walter schrieb:
>>>>> -----BEGIN PGP SIGNED MESSAGE-----
>>>>> Hash: SHA1
>>>>>
>>>>> My speculative guess: It's the derivative checker of IPOPT that is
>>>>> the resource hog.
>>>>> Depending on the dimension of your problem, the computation of finite
>>>>> differences approximations of gradient and jacobian
>>>>> can take much longer than the evaluation your implemented  gradient
>>>>> and jacobian function.
>>>>>
>>>>> The derivative check is performed once before the iteration starts.
>>>>>
>>>>>
>>>>> regards,
>>>>> Sebastian
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> Uwe Nowak schrieb:
>>>>>> Hello!
>>>>>>
>>>>>> I am using IPOPT and really like the solver. But with larger problem
>>>>>> instances the solver takes very long time before the first iteration.
>>>>>>
>>>>>> Below there is the output. After the first line ("This is IPOPT...")
>>>>>> the
>>>>>> solver takes (estimated) 350 CPU seconds.
>>>>>>
>>>>>> What does IPOPT do there? Is there a way to speed this part of IPOPT
>>>>>> up?
>>>>>> The Iterations itself are fast enough.
>>>>>>
>>>>>> I am using IPOPT to successively solve nonlinear problems that have
>>>>>> similar, but not equal structure. So I usually expect only few
>>>>>> iterations to be
>>>>>> necessary.
>>>>>>
>>>>>> Thank you,
>>>>>> Uwe Nowak
>>>>>>
>>>>>>
>>>>>> ------------------------- OUTPUT ------------------------------
>>>>>>
>>>>>>
>>>>>> This is Ipopt version 3.7.0, running with linear solver ma27.
>>>>>>
>>>>>> Number of nonzeros in equality constraint Jacobian...: 196
>>>>>> Number of nonzeros in inequality constraint Jacobian.: 13624
>>>>>> Number of nonzeros in Lagrangian Hessian.............: 0
>>>>>>
>>>>>> Total number of variables............................: 180
>>>>>>   variables with only lower bounds: 0
>>>>>>   variables with lower and upper bounds: 0
>>>>>>   variables with only upper bounds: 0
>>>>>> Total number of equality constraints.................: 49
>>>>>> Total number of inequality constraints...............: 1703
>>>>>>   inequality constraints with only lower bounds: 1703
>>>>>>   inequality constraints with lower and upper bounds: 0
>>>>>>   inequality constraints with only upper bounds: 0
>>>>>>
>>>>>> [...]
>>>>>>
>>>>>> Number of Iterations....: 15
>>>>>>
>>>>>> [...]
>>>>>>
>>>>>> Number of objective function evaluations = 18
>>>>>> Number of objective gradient evaluations = 16
>>>>>> Number of equality constraint evaluations = 18
>>>>>> Number of inequality constraint evaluations = 18
>>>>>> Number of equality constraint Jacobian evaluations = 16
>>>>>> Number of inequality constraint Jacobian evaluations = 16
>>>>>> Number of Lagrangian Hessian evaluations = 0
>>>>>> Total CPU secs in IPOPT (w/o function evaluations) = 392.561
>>>>>> Total CPU secs in NLP function evaluations = 8.939
>>>>>>
>>>>>> EXIT: Optimal Solution Found.
>>>>>>
>>>>>> _______________________________________________
>>>>>> Ipopt mailing list
>>>>>> Ipopt at list.coin-or.org
>>>>>> http://list.coin-or.org/mailman/listinfo/ipopt
>>>>>
>>>>> -----BEGIN PGP SIGNATURE-----
>>>>> Version: GnuPG v2.0.4-svn0 (GNU/Linux)
>>>>> Comment: Using GnuPG with SUSE - http://enigmail.mozdev.org
>>>>>
>>>>> iD8DBQFKwe4q9PBA5IG0h0ARAqbKAJ0TLmQ338eEUGQCBH78mmRtRypOxgCfaKhl
>>>>> Om47RZaa6iFbgE7j9RqDlsg=
>>>>> =CvjV
>>>>> -----END PGP SIGNATURE-----
>>>>
>>>> _______________________________________________
>>>> Ipopt mailing list
>>>> Ipopt at list.coin-or.org
>>>> http://list.coin-or.org/mailman/listinfo/ipopt
>>>>
>>>>
>>
>> _______________________________________________
>> Ipopt mailing list
>> Ipopt at list.coin-or.org
>> http://list.coin-or.org/mailman/listinfo/ipopt
>>



More information about the Ipopt mailing list