[SCIP] maximizing the compute time spent on heuristics for a MINLP problem

Marcus Daniels marcus at snoutfarm.com
Tue Mar 8 01:52:54 CET 2022


Hi Stefan,

Thank you for that detailed set of suggestions.   This saved me a lot of time.  (It worked!)   I also decreased some OBBT tightening to speed things up.

Best,

Marcus

-----Original Message-----
From: Stefan Vigerske <svigerske at gams.com> 
Sent: Monday, March 7, 2022 12:42 AM
To: Marcus Daniels <marcus at snoutfarm.com>; scip at zib.de
Subject: Re: [SCIP] maximizing the compute time spent on heuristics for a MINLP problem

Hi,

to cut down the effort that cons_nonlinear spends for cut generation on nonlinear constraints, you can try changing some parameters to convince it to go into (spatial) branching earlier. Most useful for that should be increasing the value constraints/nonlinear/weakcutthreshold to something closer to 1. This will require a larger reduction in the convexification gap for a cut to be added. For convex constraints (or convex subexpressions), this won't do much of a difference, though, as there is no convexification gap and nothing to branch on.
For more details, see Section 4.2.10 and 4.2.11 of the SCIP 8 release report (https://nbn-resolving.org/urn:nbn:de:0297-zib-85309).

If there are less separation and enforcement rounds, then there should also be less propagation. But parameter constraints/nonlinear/maxproprounds could also be useful to reduce effort spend in propagation.

Regarding primal heuristics, subnlp may run on solutions that were found by other primal heuristic and are feasible for the MIP relaxation but violate some nonlinear constraints. For that, the constraint feasibility check in cons_nonlinear passes the solution on to the subnlp heuristic and when the heuristic starts next time, it uses a solution obtained this way to fix integer variables and as starting point for Ipopt. If the subnlp heur obtains several solutions, because a number of "MIP heuristics" ran, then only points with less constraint violation or better objective value are kept (see heur_subnlp.c:SCIPupdateStartpointHeurSubNlp()). So if you want only the mutation and subnlp heuristics to run, then you may want to disable many others.
Whether subnlp actually runs (i.e., starts a NLP solve with Ipopt) when it is called depends on some estimates for the effort it would spend. 
There are parameters of heuristics/subnlp to adjust this. See Section
4.12 of the SCIP 8 release report for details. To run the heuristic always when called and a starting point is disabled, setting heuristics/subnlp/nodesoffset=INT_MAX and
heuristics/subnlp/successrateexp=0.0 should work.

The multistart heuristic runs only on NLPs by default. You can turn it on for MINLPs as well by setting heuristics/multistart/onlynlps = FALSE.
For integer variables, it will just round the sampled point to integral values. Depending on your constraints, the probably that the NLP from fixing all integer variables to these values will be feasible may be low.

It may be useful to look at Ipopt output. To do so, the easiest way should be to set nlpi/ipopt/print_level = 5. If you see that Ipopt runs into an iteration limit often, then increasing the values for heuristics/subnlp/iter{init,min} could be useful.
The detailed solve statistics when SCIP terminates also give some overview which Ipopt termination status appeared how often.

Stefan

On 3/6/22 21:17, Marcus Daniels wrote:
> Hi all,
> 
> I have a nonconvex MINLP problem where I'd like to combine the mutation heuristic with either the multistart heuristic or the subnlp heuristic.   I know that IPOPT can solve this problem to local optimality very easily.  The integer part of the problem, if any, can be thought of the high-order bits of the bounded variables in the problem.   So by using with mutation with those, my intuition is that I'll get something like the multistart heuristic.
> 
> The problem has many nonlinear constraints and a smaller number of linear constraints.   The lower bound (minimization) is poor, so I'd like to get a value for the root node, and then forget about LP solves.    What I observe is that a huge amount of time goes into separation cuts and then it looks like (from running in GDB) that there is a lot of time that goes into constraint enforcement and propagation.  What I'd like to do is run parascip with something like the multistart heuristic on many cores, and benefit from the efficiency of IPOPT.    I can't find a way to disable the cut generation without setting the LP solverfreq to -1.   I don't believe there is any simple way to improve the lower bound.
> 
> Any suggestions on how to configure SCIP settings to make most of the 
> compute time go into IPOPT?  (Or if I am thinking about this wrong, 
> that would be useful too.)
> 
> Thanks!
> 
> Marcus
> 
> 
> 
> 
> _______________________________________________
> Scip mailing list
> Scip at zib.de
> https://listserv.zib.de/mailman/listinfo/scip




More information about the Scip mailing list