Scippy

SCIP

Solving Constraint Integer Programs

type_event.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_event.h
26  * @ingroup TYPEDEFINITIONS
27  * @brief type definitions for managing events
28  * @author Tobias Achterberg
29  * @author Leona Gottwald
30  *
31  * This file defines the interface for event handler implemented in C.
32  *
33  * - \ref scip::ObjEventhdlr "C++ wrapper class"
34  */
35 
36 /** @defgroup DEFPLUGINS_EVENT Default event handlers
37  * @ingroup DEFPLUGINS
38  * @brief implementation files (.c files) of the default event handlers of SCIP
39  */
40 
41 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
42 
43 #ifndef __SCIP_TYPE_EVENT_H__
44 #define __SCIP_TYPE_EVENT_H__
45 
46 #include "scip/def.h"
47 #include "scip/type_retcode.h"
48 #include "scip/type_scip.h"
49 
50 #if !defined(_MSC_VER) || _MSC_VER > 1600
51 #ifdef __cplusplus
52 #define __STDC_FORMAT_MACROS
53 #endif
54 #include <inttypes.h>
55 #else
56 #define PRIx64 "llx"
57 #endif
58 
59 #ifdef __cplusplus
60 extern "C" {
61 #endif
62 
63 /*
64  * event types
65  */
66 
67 #define SCIP_EVENTTYPE_DISABLED UINT64_C(0x000000000) /**< the event was disabled and has no effect any longer */
68 
69 /* variable events */
70 #define SCIP_EVENTTYPE_VARADDED UINT64_C(0x000000001) /**< a variable has been added to the transformed problem */
71 #define SCIP_EVENTTYPE_VARDELETED UINT64_C(0x000000002) /**< a variable will be deleted from the transformed problem */
72 #define SCIP_EVENTTYPE_VARFIXED UINT64_C(0x000000004) /**< a variable has been fixed, aggregated, or multi-aggregated */
73 #define SCIP_EVENTTYPE_VARUNLOCKED UINT64_C(0x000000008) /**< the number of rounding locks of a variable was reduced to zero or one */
74 #define SCIP_EVENTTYPE_OBJCHANGED UINT64_C(0x000000010) /**< the objective value of a variable has been changed */
75 #define SCIP_EVENTTYPE_GLBCHANGED UINT64_C(0x000000020) /**< the global lower bound of a variable has been changed */
76 #define SCIP_EVENTTYPE_GUBCHANGED UINT64_C(0x000000040) /**< the global upper bound of a variable has been changed */
77 #define SCIP_EVENTTYPE_LBTIGHTENED UINT64_C(0x000000080) /**< the local lower bound of a variable has been increased */
78 #define SCIP_EVENTTYPE_LBRELAXED UINT64_C(0x000000100) /**< the local lower bound of a variable has been decreased */
79 #define SCIP_EVENTTYPE_UBTIGHTENED UINT64_C(0x000000200) /**< the local upper bound of a variable has been decreased */
80 #define SCIP_EVENTTYPE_UBRELAXED UINT64_C(0x000000400) /**< the local upper bound of a variable has been increased */
81 #define SCIP_EVENTTYPE_GHOLEADDED UINT64_C(0x000000800) /**< a global hole has been added to the hole list of a variable's domain */
82 #define SCIP_EVENTTYPE_GHOLEREMOVED UINT64_C(0x000001000) /**< a global hole has been removed from the hole list of a variable's domain */
83 #define SCIP_EVENTTYPE_LHOLEADDED UINT64_C(0x000002000) /**< a local hole has been added to the hole list of a variable's domain */
84 #define SCIP_EVENTTYPE_LHOLEREMOVED UINT64_C(0x000004000) /**< a local hole has been removed from the hole list of a variable's domain */
85 #define SCIP_EVENTTYPE_IMPLADDED UINT64_C(0x000008000) /**< the variable's implication list, variable bound or clique information was extended */
86 #define SCIP_EVENTTYPE_TYPECHANGED UINT64_C(0x000010000) /**< the type of a variable has changed */
87 
88 /* presolving events */
89 #define SCIP_EVENTTYPE_PRESOLVEROUND UINT64_C(0x000020000) /**< a presolving round has been finished */
90 
91 /* node events */
92 #define SCIP_EVENTTYPE_NODEFOCUSED UINT64_C(0x000040000) /**< a node has been focused and is now the focus node */
93 #define SCIP_EVENTTYPE_NODEFEASIBLE UINT64_C(0x000080000) /**< the LP/pseudo solution of the node was feasible */
94 #define SCIP_EVENTTYPE_NODEINFEASIBLE UINT64_C(0x000100000) /**< the focus node has been proven to be infeasible or was bounded */
95 #define SCIP_EVENTTYPE_NODEBRANCHED UINT64_C(0x000200000) /**< the focus node has been solved by branching */
96 #define SCIP_EVENTTYPE_NODEDELETE UINT64_C(0x000400000) /**< a node is about to be deleted from the tree */
97 
98 
99 /* LP events */
100 #define SCIP_EVENTTYPE_FIRSTLPSOLVED UINT64_C(0x000800000) /**< the node's initial LP was solved */
101 #define SCIP_EVENTTYPE_LPSOLVED UINT64_C(0x001000000) /**< the node's LP was completely solved with cut & price */
102 
103 /* primal solution events */
104 #define SCIP_EVENTTYPE_POORSOLFOUND UINT64_C(0x002000000) /**< a good enough primal feasible (but not new best) solution was found */
105 #define SCIP_EVENTTYPE_BESTSOLFOUND UINT64_C(0x004000000) /**< a new best primal feasible solution was found */
106 
107 /* linear row events */
108 #define SCIP_EVENTTYPE_ROWADDEDSEPA UINT64_C(0x008000000) /**< a row has been added to SCIP's separation storage */
109 #define SCIP_EVENTTYPE_ROWDELETEDSEPA UINT64_C(0x010000000) /**< a row has been removed from SCIP's separation storage */
110 #define SCIP_EVENTTYPE_ROWADDEDLP UINT64_C(0x020000000) /**< a row has been added to the LP */
111 #define SCIP_EVENTTYPE_ROWDELETEDLP UINT64_C(0x040000000) /**< a row has been removed from the LP */
112 #define SCIP_EVENTTYPE_ROWCOEFCHANGED UINT64_C(0x080000000) /**< a coefficient of a row has been changed (row specific event) */
113 #define SCIP_EVENTTYPE_ROWCONSTCHANGED UINT64_C(0x100000000) /**< the constant of a row has been changed (row specific event) */
114 #define SCIP_EVENTTYPE_ROWSIDECHANGED UINT64_C(0x200000000) /**< a side of a row has been changed (row specific event) */
115 
116 /* sync event */
117 #define SCIP_EVENTTYPE_SYNC UINT64_C(0x400000000) /**< synchronization event */
118 
119 /* event masks for variable events */
120 #define SCIP_EVENTTYPE_GBDCHANGED (SCIP_EVENTTYPE_GLBCHANGED | SCIP_EVENTTYPE_GUBCHANGED)
121 #define SCIP_EVENTTYPE_LBCHANGED (SCIP_EVENTTYPE_LBTIGHTENED | SCIP_EVENTTYPE_LBRELAXED)
122 #define SCIP_EVENTTYPE_UBCHANGED (SCIP_EVENTTYPE_UBTIGHTENED | SCIP_EVENTTYPE_UBRELAXED)
123 #define SCIP_EVENTTYPE_BOUNDTIGHTENED (SCIP_EVENTTYPE_LBTIGHTENED | SCIP_EVENTTYPE_UBTIGHTENED)
124 #define SCIP_EVENTTYPE_BOUNDRELAXED (SCIP_EVENTTYPE_LBRELAXED | SCIP_EVENTTYPE_UBRELAXED)
125 #define SCIP_EVENTTYPE_BOUNDCHANGED (SCIP_EVENTTYPE_LBCHANGED | SCIP_EVENTTYPE_UBCHANGED)
126 #define SCIP_EVENTTYPE_GHOLECHANGED (SCIP_EVENTTYPE_GHOLEADDED | SCIP_EVENTTYPE_GHOLEREMOVED)
127 #define SCIP_EVENTTYPE_LHOLECHANGED (SCIP_EVENTTYPE_LHOLEADDED | SCIP_EVENTTYPE_LHOLEREMOVED)
128 #define SCIP_EVENTTYPE_HOLECHANGED (SCIP_EVENTTYPE_GHOLECHANGED | SCIP_EVENTTYPE_LHOLECHANGED)
129 #define SCIP_EVENTTYPE_DOMCHANGED (SCIP_EVENTTYPE_BOUNDCHANGED | SCIP_EVENTTYPE_HOLECHANGED)
130 #define SCIP_EVENTTYPE_VARCHANGED (SCIP_EVENTTYPE_VARFIXED | SCIP_EVENTTYPE_VARUNLOCKED | SCIP_EVENTTYPE_OBJCHANGED \
131  | SCIP_EVENTTYPE_GBDCHANGED | SCIP_EVENTTYPE_DOMCHANGED | SCIP_EVENTTYPE_IMPLADDED \
132  | SCIP_EVENTTYPE_VARDELETED | SCIP_EVENTTYPE_TYPECHANGED)
133 #define SCIP_EVENTTYPE_VAREVENT (SCIP_EVENTTYPE_VARADDED | SCIP_EVENTTYPE_VARCHANGED | SCIP_EVENTTYPE_TYPECHANGED)
134 
135 /* event masks for node events */
136 #define SCIP_EVENTTYPE_NODESOLVED (SCIP_EVENTTYPE_NODEFEASIBLE | SCIP_EVENTTYPE_NODEINFEASIBLE \
137  | SCIP_EVENTTYPE_NODEBRANCHED)
138 #define SCIP_EVENTTYPE_NODEEVENT (SCIP_EVENTTYPE_NODEFOCUSED | SCIP_EVENTTYPE_NODESOLVED)
139 
140 /* event masks for LP events */
141 #define SCIP_EVENTTYPE_LPEVENT (SCIP_EVENTTYPE_FIRSTLPSOLVED | SCIP_EVENTTYPE_LPSOLVED)
142 
143 /* event masks for primal solution events */
144 #define SCIP_EVENTTYPE_SOLFOUND (SCIP_EVENTTYPE_POORSOLFOUND | SCIP_EVENTTYPE_BESTSOLFOUND)
145 #define SCIP_EVENTTYPE_SOLEVENT (SCIP_EVENTTYPE_SOLFOUND)
146 
147 /* event masks for row events */
148 #define SCIP_EVENTTYPE_ROWCHANGED (SCIP_EVENTTYPE_ROWCOEFCHANGED | SCIP_EVENTTYPE_ROWCONSTCHANGED | SCIP_EVENTTYPE_ROWSIDECHANGED)
149 #define SCIP_EVENTTYPE_ROWEVENT (SCIP_EVENTTYPE_ROWADDEDSEPA | SCIP_EVENTTYPE_ROWDELETEDSEPA | SCIP_EVENTTYPE_ROWADDEDLP | SCIP_EVENTTYPE_ROWDELETEDLP | SCIP_EVENTTYPE_ROWCHANGED)
150 
151 typedef uint64_t SCIP_EVENTTYPE; /**< type of event (bit field) */
152 #define SCIP_EVENTTYPE_FORMAT PRIx64
153 
154 typedef struct SCIP_Eventhdlr SCIP_EVENTHDLR; /**< event handler for a specific events */
155 typedef struct SCIP_EventhdlrData SCIP_EVENTHDLRDATA; /**< event handler data */
156 typedef struct SCIP_Event SCIP_EVENT; /**< event data structure */
157 typedef struct SCIP_EventVarAdded SCIP_EVENTVARADDED; /**< data for variable addition events */
158 typedef struct SCIP_EventVarDeleted SCIP_EVENTVARDELETED; /**< data for variable deletion events */
159 typedef struct SCIP_EventVarFixed SCIP_EVENTVARFIXED; /**< data for variable fixing events */
160 typedef struct SCIP_EventVarUnlocked SCIP_EVENTVARUNLOCKED; /**< data for variable unlocked events */
161 typedef struct SCIP_EventObjChg SCIP_EVENTOBJCHG; /**< data for objective value change events */
162 typedef struct SCIP_EventBdChg SCIP_EVENTBDCHG; /**< data for bound change events */
163 typedef struct SCIP_EventHole SCIP_EVENTHOLE; /**< data for domain hole events */
164 typedef struct SCIP_EventImplAdd SCIP_EVENTIMPLADD; /**< data for implication added events */
165 typedef struct SCIP_EventTypeChg SCIP_EVENTTYPECHG; /**< data for variable type change events */
166 typedef struct SCIP_EventRowAddedSepa SCIP_EVENTROWADDEDSEPA; /**< data for row addition to sepastorage events */
167 typedef struct SCIP_EventRowDeletedSepa SCIP_EVENTROWDELETEDSEPA; /**< data for row deletion from sepastorage events */
168 typedef struct SCIP_EventRowAddedLP SCIP_EVENTROWADDEDLP; /**< data for row addition to LP events */
169 typedef struct SCIP_EventRowDeletedLP SCIP_EVENTROWDELETEDLP; /**< data for row deletion from LP events */
170 typedef struct SCIP_EventRowCoefChanged SCIP_EVENTROWCOEFCHANGED; /**< data for row coefficient change events */
171 typedef struct SCIP_EventRowConstChanged SCIP_EVENTROWCONSTCHANGED; /**< data for row constant change events */
172 typedef struct SCIP_EventRowSideChanged SCIP_EVENTROWSIDECHANGED; /**< data for row side change events */
173 typedef struct SCIP_EventData SCIP_EVENTDATA; /**< locally defined event specific data */
174 typedef struct SCIP_EventFilter SCIP_EVENTFILTER; /**< event filter to select events to be processed by an event handler */
175 typedef struct SCIP_EventQueue SCIP_EVENTQUEUE; /**< event queue to cache events and process them later */
176 
177 /** copy method for event handler plugins (called when SCIP copies plugins)
178  *
179  * input:
180  * - scip : SCIP main data structure
181  * - eventhdlr : the event handler itself
182  */
183 #define SCIP_DECL_EVENTCOPY(x) SCIP_RETCODE x (SCIP* scip, SCIP_EVENTHDLR* eventhdlr)
184 
185 /** destructor of event handler to free user data (called when SCIP is exiting)
186  *
187  * input:
188  * - scip : SCIP main data structure
189  * - eventhdlr : the event handler itself
190  */
191 #define SCIP_DECL_EVENTFREE(x) SCIP_RETCODE x (SCIP* scip, SCIP_EVENTHDLR* eventhdlr)
192 
193 /** initialization method of event handler (called after problem was transformed)
194  *
195  * input:
196  * - scip : SCIP main data structure
197  * - eventhdlr : the event handler itself
198  */
199 #define SCIP_DECL_EVENTINIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_EVENTHDLR* eventhdlr)
200 
201 /** deinitialization method of event handler (called before transformed problem is freed)
202  *
203  * input:
204  * - scip : SCIP main data structure
205  * - eventhdlr : the event handler itself
206  */
207 #define SCIP_DECL_EVENTEXIT(x) SCIP_RETCODE x (SCIP* scip, SCIP_EVENTHDLR* eventhdlr)
208 
209 /** solving process initialization method of event handler (called when branch and bound process is about to begin)
210  *
211  * This method is called when the presolving was finished and the branch and bound process is about to begin.
212  * The event handler may use this call to initialize its branch and bound specific data.
213  *
214  * input:
215  * - scip : SCIP main data structure
216  * - eventhdlr : the event handler itself
217  */
218 #define SCIP_DECL_EVENTINITSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_EVENTHDLR* eventhdlr)
219 
220 /** solving process deinitialization method of event handler (called before branch and bound process data is freed)
221  *
222  * This method is called before the branch and bound process is freed.
223  * The event handler should use this call to clean up its branch and bound data.
224  *
225  * input:
226  * - scip : SCIP main data structure
227  * - eventhdlr : the event handler itself
228  */
229 #define SCIP_DECL_EVENTEXITSOL(x) SCIP_RETCODE x (SCIP* scip, SCIP_EVENTHDLR* eventhdlr)
230 
231 /** frees specific event data
232  *
233  * input:
234  * - scip : SCIP main data structure
235  * - eventhdlr : the event handler itself
236  * - eventdata : pointer to the event data to free
237  */
238 #define SCIP_DECL_EVENTDELETE(x) SCIP_RETCODE x (SCIP* scip, SCIP_EVENTHDLR* eventhdlr, SCIP_EVENTDATA** eventdata)
239 
240 /** execution method of event handler
241  *
242  * Processes the event. The method is called every time an event occurs, for which the event handler
243  * is responsible. Event handlers may declare themselves responsible for events by calling the
244  * corresponding SCIPcatch...() method. This method creates an event filter object to point to the
245  * given event handler and event data.
246  *
247  * input:
248  * - scip : SCIP main data structure
249  * - eventhdlr : the event handler itself
250  * - event : event to process
251  * - eventdata : user data for the event
252  */
253 #define SCIP_DECL_EVENTEXEC(x) SCIP_RETCODE x (SCIP* scip, SCIP_EVENTHDLR* eventhdlr, SCIP_EVENT* event, SCIP_EVENTDATA* eventdata)
254 
255 #ifdef __cplusplus
256 }
257 #endif
258 
259 #endif
struct SCIP_EventhdlrData SCIP_EVENTHDLRDATA
Definition: type_event.h:155
type definitions for return codes for SCIP methods
type definitions for SCIP&#39;s main datastructure
struct SCIP_EventData SCIP_EVENTDATA
Definition: type_event.h:173
common defines and data types used in all packages of SCIP
uint64_t SCIP_EVENTTYPE
Definition: type_event.h:151