Scippy

SCIP

Solving Constraint Integer Programs

type_sepa.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 type_sepa.h
26 * @ingroup TYPEDEFINITIONS
27 * @brief type definitions for separators
28 * @author Tobias Achterberg
29 */
30
31/** @defgroup DEFPLUGINS_SEPA Default Separators
32 * @ingroup DEFPLUGINS
33 * @brief implementation files (.c files) of the default separators of SCIP
34 */
35
36/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
37
38#ifndef __SCIP_TYPE_SEPA_H__
39#define __SCIP_TYPE_SEPA_H__
40
41#include "scip/def.h"
42#include "scip/type_retcode.h"
43#include "scip/type_result.h"
44#include "scip/type_sol.h"
45#include "scip/type_scip.h"
46
47#ifdef __cplusplus
48extern "C" {
49#endif
50
51typedef struct SCIP_Sepa SCIP_SEPA; /**< separator */
52typedef struct SCIP_SepaData SCIP_SEPADATA; /**< locally defined separator data */
53
54
55/** copy method for separator plugins (called when SCIP copies plugins)
56 *
57 * input:
58 * - scip : SCIP main data structure
59 * - sepa : the separator itself
60 */
61#define SCIP_DECL_SEPACOPY(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
62
63/** destructor of separator to free user data (called when SCIP is exiting)
64 *
65 * input:
66 * - scip : SCIP main data structure
67 * - sepa : the separator itself
68 */
69#define SCIP_DECL_SEPAFREE(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
70
71/** initialization method of separator (called after problem was transformed)
72 *
73 * input:
74 * - scip : SCIP main data structure
75 * - sepa : the separator itself
76 */
77#define SCIP_DECL_SEPAINIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
78
79/** deinitialization method of separator (called before transformed problem is freed)
80 *
81 * input:
82 * - scip : SCIP main data structure
83 * - sepa : the separator itself
84 */
85#define SCIP_DECL_SEPAEXIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
86
87/** solving process initialization method of separator (called when branch and bound process is about to begin)
88 *
89 * This method is called when the presolving was finished and the branch and bound process is about to begin.
90 * The separator may use this call to initialize its branch and bound specific data.
91 *
92 * input:
93 * - scip : SCIP main data structure
94 * - sepa : the separator itself
95 */
96#define SCIP_DECL_SEPAINITSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
97
98/** solving process deinitialization method of separator (called before branch and bound process data is freed)
99 *
100 * This method is called before the branch and bound process is freed.
101 * The separator should use this call to clean up its branch and bound data.
102 *
103 * input:
104 * - scip : SCIP main data structure
105 * - sepa : the separator itself
106 */
107#define SCIP_DECL_SEPAEXITSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa)
108
109/** LP solution separation method of separator
110 *
111 * Searches for cutting planes that separate the current LP solution. The method is called in the LP solving loop,
112 * which means that a valid LP solution exists.
113 *
114 * input:
115 * - scip : SCIP main data structure
116 * - sepa : the separator itself
117 * - result : pointer to store the result of the separation call
118 * - allowlocal : should the separator allow local cuts?
119 * - depth : preteneded depth of current node
120 *
121 * @note The depth argument shouldn't be use to determine whether the cut is globally valid or not. The value of depth
122 * could be 0 even though we are not in the root node! The purpose of depth is to control the behavior of the
123 * separator. Usually separators will have different limits on the number of cuts to be applied in the root node, etc.
124 * These limits should be checked against depth and not against the actual depth of the current node.
125 *
126 * possible return values for *result (if more than one applies, the first in the list should be used):
127 * - SCIP_CUTOFF : the node is infeasible in the variable's bounds and can be cut off
128 * - SCIP_CONSADDED : an additional constraint was generated
129 * - SCIP_REDUCEDDOM : a variable's domain was reduced
130 * - SCIP_SEPARATED : a cutting plane was generated
131 * - SCIP_NEWROUND : a cutting plane was generated and a new separation round should immediately start
132 * - SCIP_DIDNOTFIND : the separator searched, but did not find domain reductions, cutting planes, or cut constraints
133 * - SCIP_DIDNOTRUN : the separator was skipped
134 * - SCIP_DELAYED : the separator was skipped, but should be called again
135 */
136#define SCIP_DECL_SEPAEXECLP(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa, SCIP_RESULT* result, SCIP_Bool allowlocal, int depth)
137
138/** arbitrary primal solution separation method of separator
139 *
140 * Searches for cutting planes that separate the given primal solution. The method is called outside the LP solution
141 * loop (e.g., by a relaxator or a primal heuristic), which means that there is no valid LP solution.
142 *
143 * input:
144 * - scip : SCIP main data structure
145 * - sepa : the separator itself
146 * - sol : primal solution that should be separated
147 * - result : pointer to store the result of the separation call
148 * - allowlocal : should the separator allow local cuts?
149 * - depth : preteneded depth of current node
150 *
151 * @note The depth argument shouldn't be use to determine whether the cut is globally valid or not. The value of depth
152 * could be 0 even though we are not in the root node! The purpose of depth is to control the behavior of the
153 * separator. Usually separators will have different limits on the number of cuts to be applied in the root node, etc.
154 * These limits should be checked against depth and not against the actual depth of the current node.
155 *
156 * possible return values for *result (if more than one applies, the first in the list should be used):
157 * - SCIP_CUTOFF : the node is infeasible in the variable's bounds and can be cut off
158 * - SCIP_CONSADDED : an additional constraint was generated
159 * - SCIP_REDUCEDDOM : a variable's domain was reduced
160 * - SCIP_SEPARATED : a cutting plane was generated
161 * - SCIP_NEWROUND : a cutting plane was generated and a new separation round should immediately start
162 * - SCIP_DIDNOTFIND : the separator searched, but did not find domain reductions, cutting planes, or cut constraints
163 * - SCIP_DIDNOTRUN : the separator was skipped
164 * - SCIP_DELAYED : the separator was skipped, but should be called again
165 */
166#define SCIP_DECL_SEPAEXECSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_SEPA* sepa, SCIP_SOL* sol, SCIP_RESULT* result, SCIP_Bool allowlocal, int depth)
167
168#ifdef __cplusplus
169}
170#endif
171
172#endif
common defines and data types used in all packages of SCIP
result codes for SCIP callback methods
type definitions for return codes for SCIP methods
type definitions for SCIP's main datastructure
struct SCIP_SepaData SCIP_SEPADATA
Definition: type_sepa.h:52
type definitions for storing primal CIP solutions