MUMPS reallocating memory

939 views
Skip to first unread message

Ties van der Heijden

unread,
Nov 21, 2018, 8:41:50 AM11/21/18
to Pyomo Forum
Dear all,

I am running a receding horizon loop with my optimization. But sometimes it gets "stuck" for a long time, when IPOPT gives the following messages:
MUMPS returned INFO(1) = -9 and requires more memory, reallocating.  Attempt 1
  Increasing icntl[13] from 1000 to 2000.
MUMPS returned INFO(1) = -9 and requires more memory, reallocating.  Attempt 2
  Increasing icntl[13] from 2000 to 4000.
MUMPS returned INFO(1) = -9 and requires more memory, reallocating.  Attempt 3
  Increasing icntl[13] from 4000 to 8000.
MUMPS returned INFO(1) = -9 and requires more memory, reallocating.  Attempt 4
  Increasing icntl[13] from 8000 to 16000.

This is the size of the problem its trying to solve:
Number of nonzeros in equality constraint Jacobian...:     1923
Number of nonzeros in inequality constraint Jacobian.:    19295
Number of nonzeros in Lagrangian Hessian.............:     4426

Total number of variables............................:     2895
                     variables with only lower bounds:        0
                variables with lower and upper bounds:     2895
                     variables with only upper bounds:        0
Total number of equality constraints.................:      387
Total number of inequality constraints...............:     6175
        inequality constraints with only lower bounds:     1158
   inequality constraints with lower and upper bounds:        0
        inequality constraints with only upper bounds:     5017

Most solves take about 10 seconds to 1 minute, but when this happens it's in the order of 10-20 minutes.
Is it possible to give MUMPS a higher allocated memory from the start?

It is academic work, so it should be possible for me to get an academic licenses (MA27/57?)
I am now using Pyomo through anaconda, and IPOPT has been installed with Anaconda as well.
I see MA27/57 are not compiled by default, how could I include these solvers in my current installation of python/conda/pyomo/ipopt?

Thanks in advance for reading.

Rob D.

unread,
Dec 12, 2018, 2:51:53 PM12/12/18
to Pyomo Forum

I'm having the same problem. Have you looked into sending different options to the solver?

Ties van der Heijden

unread,
Dec 12, 2018, 7:11:16 PM12/12/18
to Pyomo Forum
I have but I couldn’t figure it out from there. I made the problem a little bit easier, and now it only happens with a cold start. I believe it might be because it wants to increase accuracy, so if lowering your tolerances is possible you could try that.

Santiago rodriguez

unread,
Dec 13, 2018, 11:03:37 AM12/13/18
to Pyomo Forum
There are a couple of ipopt-options that you may play with to deal with the memory allocation issue. I suggest looking at 

mumps_mem_percent

mumps_pivtol

mumps_pivtolmax


To see a description of these and other options in ipopt you can type ipopt --print-options in your anaconda prompt. Note that pyomo allows you to pass solver options by populating the dictionary in SolverFactory('ipopt').options[key] = value. Alternatively you can pass ipopt-options using an options file. Write the options in a file (in two column format with the first column being the option name and the second column being the option value). Name the file "ipopt.opt" and make sure to save it in the same location where you are running your pyomo script. 

The ipopt binaries distributed with conda-forge do not include HSL solvers and I don't believe there is an easy way to link it (I will be more than happy if some one proves me wrong). If you are working from Unix it would be relatively simple to compile ipopt with hsl solvers provided that you have a C++, fortran compiler. Check Ipopt installation guide for details


The HSL solvers will certainly make a difference for nonconvex nonlinear problems.
Reply all
Reply to author
Forward
0 new messages