[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