## 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) |