Detailed Description
multistart heuristic for convex and nonconvex MINLPs
The heuristic applies multiple NLP local searches to a mixed-integer nonlinear program with, probably nonconvex, constraints of the form \(g_j(x) \le 0\). The algorithm tries to identify clusters which approximate the boundary of the feasible set of the continuous relaxation by sampling and improving randomly generated points. For each cluster we use a local search heuristic to find feasible solutions. The algorithm consists of the following four steps:
sample points
Sample random points \( x^1, \ldots, x^n \) in the box \( [\ell,u] \). For an unbounded variable \( x_i \) we consider \( [\ell_i,\ell_i + \alpha], [u_i - \alpha,u_i], \) or \( [-\alpha / 2, \alpha / 2]\) for an \( \alpha > 0 \) depending on which bound is infinite.
reduce infeasibility
For each point \( x^i \) we use a gradient descent method to reduce the maximum infeasibility. We first compute
\[ d_j = -\frac{g_j(x^i)}{||\nabla g_j(x^i)||^2} \nabla g_j(x^i) \]
and update the current point \( x^i \) with
\[ x^i := x^i + \frac{1}{n_j} \sum_{j} d_j \]
where \( n_j \) is the number of strictly positive \( d_j \). The algorithm is called Constraint Consensus Method and has been introduced by here .
cluster points
We use a greedy algorithm to all of the resulting points of step 3. to find clusters which (hopefully) approximate the boundary of the feasible set locally. Points with a too large violations will be filtered.
solve sub-problems
Depending on the current setting, we solve a sub-problem for each identified cluster. The default strategy is to compute a starting point for the sub-NLP heuristic (see heur_subnlp.h) by using a linear combination of the points in a cluster \( C \), i.e.,
\[ s := \sum_{x \in C} \lambda_x x \]
Since the sub-NLP heuristic requires a starting point which is integer feasible we round each fractional value \( s_i \) to its closest integer.
Definition in file heur_multistart.h.
Go to the source code of this file.
Functions | |
SCIP_RETCODE | SCIPincludeHeurMultistart (SCIP *scip) |