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

Stefan Vigerske svigerske at gams.com
Mon Mar 7 09:42:01 CET 2022


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