Scippy

SCIP

Solving Constraint Integer Programs

heur_mpec.h
Go to the documentation of this file.
1/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2/* */
3/* This file is part of the program and library */
4/* SCIP --- Solving Constraint Integer Programs */
5/* */
6/* Copyright (c) 2002-2024 Zuse Institute Berlin (ZIB) */
7/* */
8/* Licensed under the Apache License, Version 2.0 (the "License"); */
9/* you may not use this file except in compliance with the License. */
10/* You may obtain a copy of the License at */
11/* */
12/* http://www.apache.org/licenses/LICENSE-2.0 */
13/* */
14/* Unless required by applicable law or agreed to in writing, software */
15/* distributed under the License is distributed on an "AS IS" BASIS, */
16/* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. */
17/* See the License for the specific language governing permissions and */
18/* limitations under the License. */
19/* */
20/* You should have received a copy of the Apache-2.0 license */
21/* along with SCIP; see the file LICENSE. If not visit scipopt.org. */
22/* */
23/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
24
25/**@file heur_mpec.h
26 * @ingroup PRIMALHEURISTICS
27 * @brief mpec primal heuristic
28 * @author Felipe Serrano
29 * @author Benjamin Mueller
30 *
31 * This heuristic is based on the paper:
32 * @par
33 * Lars Schewe and Martin Schmidt@n
34 * [Computing Feasible Points for MINLPs with MPECs](http://www.optimization-online.org/DB_HTML/2016/12/5778.html)
35 *
36 * An MPEC is a mathematical program with complementarity constraint.
37 * For example, the constraint \f$x \in \{0, 1\}\f$ as \f$x (1-x) = 0\f$
38 * can be modeled as complementarity constraint \f$x = 0\f$ or \f$x = 1\f$.
39 *
40 * This heuristic applies only to mixed binary nonlinear problems.
41 * The idea is to rewrite the MBNLP as MPEC and solve the MPEC instead (to a
42 * a local optimum) by replacing each integrality constraint by the
43 * complementarity constraint \f$x = 0\f$ or \f$x = 1\f$.
44 * In principle, this MPEC can be reformulated to a NLP by rewriting this
45 * constraint as equation \f$x (1-x) = 0\f$.
46 * However, solving this NLP reformulation with a generic NLP solver will
47 * often fail. One issue is that the reformulated complementarity constraints
48 * will not, in general, satisfy constraint qualifications (for instance,
49 * Slater's conditions, which requires the existence of a relative interior
50 * point, will not be satisfied).
51 * In order to increase the chances of solving the NLP reformulation of
52 * the MPEC by a NLP solver, the heuristic applies a regularization
53 * (proposed by Scholtes): it relaxes \f$x(1-x) = 0\f$ to
54 * \f$x(1-x) \leq \theta\f$.
55 *
56 * So the heuristic proceeds as follows.
57 * - Build the regularized NLP (rNLP) with a starting \f$\theta \in (0, \tfrac{1}{4}\f$.
58 * - Give the current LP solution as starting point to the NLP solver.
59 * - Solves rNLP and let \f$x^*\f$ be the best point found (if there is no point, abort).
60 * - If feasible, then reduce \f$\theta\f$ by a factor \f$\sigma\f$ and use
61 * its solution as the starting point for the next iteration.
62 *
63 * - If the rNLP is found infeasible, but the regularization constraints are feasible, abort.
64 *
65 * - If some variable violates the regularization constraint, i.e.,
66 * \f$x^*_i(1-x^*_i) > \tau\f$ then solve the rNLP again using its starting solution
67 * modified by \f$x_i = 0\f$ if \f$x^*_i > 0.5\f$ and \f$x_i = 1\f$ if \f$x^*_i < 0.5\f$.
68 * One possible explanation for this choice is that, assuming \f$x^*_i > 0.5\f$,
69 * if really \f$x_i = 1\f$ were a solution, then the NLP solver should not have had troubles
70 * pushing \f$x_i\f$ towards 1, making at least the regularization constraint feasible.
71 * Instead, it might be that there is a solution with \f$x_i = 0\f$, but since \f$x^*_i > 0.5\f$
72 * the NLP solver is having more problems pushing it to 0.
73 *
74 * - If the modification of the starting point did not help finding a feasible solution,
75 * solve the problem again, but now fixing the problematic variables using the same criteria.
76 *
77 * - If still we do not get a feasible solution, abort (note that the paper suggests to backtrack,
78 * but this might be just too expensive).
79 *
80 * - If the maximum binary infeasibility is small enough, call sub-NLP heuristic
81 * with binary variables fixed to the value suggested by \f$x^*\f$.
82 */
83
84/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
85
86#ifndef __SCIP_HEUR_MPEC_H__
87#define __SCIP_HEUR_MPEC_H__
88
89#include "scip/def.h"
90#include "scip/type_retcode.h"
91#include "scip/type_scip.h"
92
93#ifdef __cplusplus
94extern "C" {
95#endif
96
97/** creates the mpec primal heuristic and includes it in SCIP
98 *
99 * @ingroup PrimalHeuristicIncludes
100 */
101SCIP_EXPORT
103 SCIP* scip /**< SCIP data structure */
104 );
105
106#ifdef __cplusplus
107}
108#endif
109
110#endif
common defines and data types used in all packages of SCIP
SCIP_RETCODE SCIPincludeHeurMpec(SCIP *scip)
Definition: heur_mpec.c:687
type definitions for return codes for SCIP methods
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63
type definitions for SCIP's main datastructure