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-2023 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
48 extern "C" {
49 #endif
50 
51 typedef struct SCIP_Sepa SCIP_SEPA; /**< separator */
52 typedef 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
type definitions for return codes for SCIP methods
type definitions for SCIP&#39;s main datastructure
type definitions for storing primal CIP solutions
result codes for SCIP callback methods
common defines and data types used in all packages of SCIP
struct SCIP_SepaData SCIP_SEPADATA
Definition: type_sepa.h:52