  # SCIP

Solving Constraint Integer Programs

heur_multistart.h File Reference

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

1. 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.

2. 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 .

3. 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.

4. 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.

#include "scip/def.h"
#include "scip/type_retcode.h"
#include "scip/type_scip.h"

Go to the source code of this file.

## Functions

SCIP_EXPORT SCIP_RETCODE SCIPincludeHeurMultistart (SCIP *scip)