Scippy

SCIP

Solving Constraint Integer Programs

scip_nodesel.c
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-2019 Konrad-Zuse-Zentrum */
7 /* fuer Informationstechnik Berlin */
8 /* */
9 /* SCIP is distributed under the terms of the ZIB Academic License. */
10 /* */
11 /* You should have received a copy of the ZIB Academic License */
12 /* along with SCIP; see the file COPYING. If not visit scip.zib.de. */
13 /* */
14 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
15 
16 /**@file scip_nodesel.c
17  * @brief public methods for node selector plugins
18  * @author Tobias Achterberg
19  * @author Timo Berthold
20  * @author Gerald Gamrath
21  * @author Robert Lion Gottwald
22  * @author Stefan Heinz
23  * @author Gregor Hendel
24  * @author Thorsten Koch
25  * @author Alexander Martin
26  * @author Marc Pfetsch
27  * @author Michael Winkler
28  * @author Kati Wolter
29  *
30  * @todo check all SCIP_STAGE_* switches, and include the new stages TRANSFORMED and INITSOLVE
31  */
32 
33 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
34 
35 #include <ctype.h>
36 #include <stdarg.h>
37 #include <assert.h>
38 #include <string.h>
39 #if defined(_WIN32) || defined(_WIN64)
40 #else
41 #include <strings.h> /*lint --e{766}*/
42 #endif
43 
44 
45 #include "lpi/lpi.h"
46 #include "nlpi/exprinterpret.h"
47 #include "nlpi/nlpi.h"
48 #include "scip/benders.h"
49 #include "scip/benderscut.h"
50 #include "scip/branch.h"
51 #include "scip/branch_nodereopt.h"
52 #include "scip/clock.h"
53 #include "scip/compr.h"
54 #include "scip/concsolver.h"
55 #include "scip/concurrent.h"
56 #include "scip/conflict.h"
57 #include "scip/conflictstore.h"
58 #include "scip/cons.h"
59 #include "scip/cons_linear.h"
60 #include "scip/cutpool.h"
61 #include "scip/cuts.h"
62 #include "scip/debug.h"
63 #include "scip/def.h"
64 #include "scip/dialog.h"
65 #include "scip/dialog_default.h"
66 #include "scip/disp.h"
67 #include "scip/event.h"
68 #include "scip/heur.h"
69 #include "scip/heur_ofins.h"
70 #include "scip/heur_reoptsols.h"
72 #include "scip/heuristics.h"
73 #include "scip/history.h"
74 #include "scip/implics.h"
75 #include "scip/interrupt.h"
76 #include "scip/lp.h"
77 #include "scip/mem.h"
78 #include "scip/message_default.h"
79 #include "scip/misc.h"
80 #include "scip/nlp.h"
81 #include "scip/nodesel.h"
82 #include "scip/paramset.h"
83 #include "scip/presol.h"
84 #include "scip/presolve.h"
85 #include "scip/pricer.h"
86 #include "scip/pricestore.h"
87 #include "scip/primal.h"
88 #include "scip/prob.h"
89 #include "scip/prop.h"
90 #include "scip/reader.h"
91 #include "scip/relax.h"
92 #include "scip/reopt.h"
93 #include "scip/retcode.h"
94 #include "scip/scipbuildflags.h"
95 #include "scip/scipcoreplugins.h"
96 #include "scip/scipgithash.h"
97 #include "scip/sepa.h"
98 #include "scip/sepastore.h"
99 #include "scip/set.h"
100 #include "scip/sol.h"
101 #include "scip/solve.h"
102 #include "scip/stat.h"
103 #include "scip/syncstore.h"
104 #include "scip/table.h"
105 #include "scip/tree.h"
106 #include "scip/var.h"
107 #include "scip/visual.h"
108 #include "xml/xml.h"
109 
110 #include "scip/scip_nodesel.h"
111 
112 #include "scip/pub_message.h"
113 
114 
115 /* In debug mode, we include the SCIP's structure in scip.c, such that no one can access
116  * this structure except the interface methods in scip.c.
117  * In optimized mode, the structure is included in scip.h, because some of the methods
118  * are implemented as defines for performance reasons (e.g. the numerical comparisons)
119  */
120 #ifndef NDEBUG
121 #include "scip/struct_scip.h"
122 #endif
123 
124 /** creates a node selector and includes it in SCIP.
125  *
126  * @note method has all node selector callbacks as arguments and is thus changed every time a new
127  * callback is added in future releases; consider using SCIPincludeNodeselBasic() and setter functions
128  * if you seek for a method which is less likely to change in future releases
129  */
131  SCIP* scip, /**< SCIP data structure */
132  const char* name, /**< name of node selector */
133  const char* desc, /**< description of node selector */
134  int stdpriority, /**< priority of the node selector in standard mode */
135  int memsavepriority, /**< priority of the node selector in memory saving mode */
136  SCIP_DECL_NODESELCOPY ((*nodeselcopy)), /**< copy method of node selector or NULL if you don't want to copy your plugin into sub-SCIPs */
137  SCIP_DECL_NODESELFREE ((*nodeselfree)), /**< destructor of node selector */
138  SCIP_DECL_NODESELINIT ((*nodeselinit)), /**< initialize node selector */
139  SCIP_DECL_NODESELEXIT ((*nodeselexit)), /**< deinitialize node selector */
140  SCIP_DECL_NODESELINITSOL((*nodeselinitsol)),/**< solving process initialization method of node selector */
141  SCIP_DECL_NODESELEXITSOL((*nodeselexitsol)),/**< solving process deinitialization method of node selector */
142  SCIP_DECL_NODESELSELECT((*nodeselselect)),/**< node selection method */
143  SCIP_DECL_NODESELCOMP ((*nodeselcomp)), /**< node comparison method */
144  SCIP_NODESELDATA* nodeseldata /**< node selector data */
145  )
146 {
147  SCIP_NODESEL* nodesel;
148 
149  SCIP_CALL( SCIPcheckStage(scip, "SCIPincludeNodesel", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
150 
151  /* check whether node selector is already present */
152  if( SCIPfindNodesel(scip, name) != NULL )
153  {
154  SCIPerrorMessage("node selector <%s> already included.\n", name);
155  return SCIP_INVALIDDATA;
156  }
157 
158  SCIP_CALL( SCIPnodeselCreate(&nodesel, scip->set, scip->messagehdlr, scip->mem->setmem, name, desc, stdpriority, memsavepriority,
159  nodeselcopy, nodeselfree, nodeselinit, nodeselexit, nodeselinitsol, nodeselexitsol,
160  nodeselselect, nodeselcomp, nodeseldata) );
161  SCIP_CALL( SCIPsetIncludeNodesel(scip->set, nodesel) );
162 
163  return SCIP_OKAY;
164 }
165 
166 /** Creates a node selector and includes it in SCIP with its most fundamental callbacks. All non-fundamental
167  * (or optional) callbacks as, e.g., init and exit callbacks, will be set to NULL.
168  * Optional callbacks can be set via specific setter functions, see SCIPsetNodeselCopy(), SCIPsetNodeselFree(),
169  * SCIPsetNodeselInit(), SCIPsetNodeselExit(), SCIPsetNodeselInitsol(), and SCIPsetNodeselExitsol()
170  *
171  * @note if you want to set all callbacks with a single method call, consider using SCIPincludeNodesel() instead
172  */
174  SCIP* scip, /**< SCIP data structure */
175  SCIP_NODESEL** nodesel, /**< reference to a node selector, or NULL */
176  const char* name, /**< name of node selector */
177  const char* desc, /**< description of node selector */
178  int stdpriority, /**< priority of the node selector in standard mode */
179  int memsavepriority, /**< priority of the node selector in memory saving mode */
180  SCIP_DECL_NODESELSELECT((*nodeselselect)),/**< node selection method */
181  SCIP_DECL_NODESELCOMP ((*nodeselcomp)), /**< node comparison method */
182  SCIP_NODESELDATA* nodeseldata /**< node selector data */
183  )
184 {
185  SCIP_NODESEL* nodeselptr;
186 
187  SCIP_CALL( SCIPcheckStage(scip, "SCIPincludeNodeselBasic", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
188 
189  /* check whether node selector is already present */
190  if( SCIPfindNodesel(scip, name) != NULL )
191  {
192  SCIPerrorMessage("node selector <%s> already included.\n", name);
193  return SCIP_INVALIDDATA;
194  }
195 
196  SCIP_CALL( SCIPnodeselCreate(&nodeselptr, scip->set, scip->messagehdlr, scip->mem->setmem, name, desc, stdpriority, memsavepriority,
197  NULL, NULL, NULL, NULL, NULL, NULL,
198  nodeselselect, nodeselcomp, nodeseldata) );
199  SCIP_CALL( SCIPsetIncludeNodesel(scip->set, nodeselptr) );
200 
201  if( nodesel != NULL )
202  *nodesel = nodeselptr;
203 
204  return SCIP_OKAY;
205 }
206 
207 /** sets copy method of node selector */
209  SCIP* scip, /**< SCIP data structure */
210  SCIP_NODESEL* nodesel, /**< node selector */
211  SCIP_DECL_NODESELCOPY ((*nodeselcopy)) /**< copy method of node selector or NULL if you don't want to copy your plugin into sub-SCIPs */
212  )
213 {
214  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetNodeselCopy", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
215 
216  assert(nodesel != NULL);
217 
218  SCIPnodeselSetCopy(nodesel, nodeselcopy);
219 
220  return SCIP_OKAY;
221 }
222 
223 /** sets destructor method of node selector */
225  SCIP* scip, /**< SCIP data structure */
226  SCIP_NODESEL* nodesel, /**< node selector */
227  SCIP_DECL_NODESELFREE ((*nodeselfree)) /**< destructor of node selector */
228  )
229 {
230  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetNodeselFree", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
231 
232  assert(nodesel != NULL);
233 
234  SCIPnodeselSetFree(nodesel, nodeselfree);
235 
236  return SCIP_OKAY;
237 }
238 
239 /** sets initialization method of node selector */
241  SCIP* scip, /**< SCIP data structure */
242  SCIP_NODESEL* nodesel, /**< node selector */
243  SCIP_DECL_NODESELINIT ((*nodeselinit)) /**< initialize node selector */
244  )
245 {
246  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetNodeselInit", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
247 
248  assert(nodesel != NULL);
249 
250  SCIPnodeselSetInit(nodesel, nodeselinit);
251 
252  return SCIP_OKAY;
253 }
254 
255 /** sets deinitialization method of node selector */
257  SCIP* scip, /**< SCIP data structure */
258  SCIP_NODESEL* nodesel, /**< node selector */
259  SCIP_DECL_NODESELEXIT ((*nodeselexit)) /**< deinitialize node selector */
260  )
261 {
262  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetNodeselExit", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
263 
264  assert(nodesel != NULL);
265 
266  SCIPnodeselSetExit(nodesel, nodeselexit);
267 
268  return SCIP_OKAY;
269 }
270 
271 /** sets solving process initialization method of node selector */
273  SCIP* scip, /**< SCIP data structure */
274  SCIP_NODESEL* nodesel, /**< node selector */
275  SCIP_DECL_NODESELINITSOL ((*nodeselinitsol))/**< solving process initialization method of node selector */
276  )
277 {
278  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetNodeselInitsol", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
279 
280  assert(nodesel != NULL);
281 
282  SCIPnodeselSetInitsol(nodesel, nodeselinitsol);
283 
284  return SCIP_OKAY;
285 }
286 
287 /** sets solving process deinitialization method of node selector */
289  SCIP* scip, /**< SCIP data structure */
290  SCIP_NODESEL* nodesel, /**< node selector */
291  SCIP_DECL_NODESELEXITSOL ((*nodeselexitsol))/**< solving process deinitialization method of node selector */
292  )
293 {
294  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetNodeselExitsol", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
295 
296  assert(nodesel != NULL);
297 
298  SCIPnodeselSetExitsol(nodesel, nodeselexitsol);
299 
300  return SCIP_OKAY;
301 }
302 
303 /** returns the node selector of the given name, or NULL if not existing */
305  SCIP* scip, /**< SCIP data structure */
306  const char* name /**< name of node selector */
307  )
308 {
309  assert(scip != NULL);
310  assert(scip->set != NULL);
311  assert(name != NULL);
312 
313  return SCIPsetFindNodesel(scip->set, name);
314 }
315 
316 /** returns the array of currently available node selectors */
318  SCIP* scip /**< SCIP data structure */
319  )
320 {
321  assert(scip != NULL);
322  assert(scip->set != NULL);
323 
324  return scip->set->nodesels;
325 }
326 
327 /** returns the number of currently available node selectors */
329  SCIP* scip /**< SCIP data structure */
330  )
331 {
332  assert(scip != NULL);
333  assert(scip->set != NULL);
334 
335  return scip->set->nnodesels;
336 }
337 
338 /** sets the priority of a node selector in standard mode */
340  SCIP* scip, /**< SCIP data structure */
341  SCIP_NODESEL* nodesel, /**< node selector */
342  int priority /**< new standard priority of the node selector */
343  )
344 {
345  assert(scip != NULL);
346  assert(scip->set != NULL);
347 
348  SCIPnodeselSetStdPriority(nodesel, scip->set, priority);
349 
350  return SCIP_OKAY;
351 }
352 
353 /** sets the priority of a node selector in memory saving mode */
355  SCIP* scip, /**< SCIP data structure */
356  SCIP_NODESEL* nodesel, /**< node selector */
357  int priority /**< new memory saving priority of the node selector */
358  )
359 {
360  assert(scip != NULL);
361  assert(scip->set != NULL);
362 
363  SCIPnodeselSetMemsavePriority(nodesel, scip->set, priority);
364 
365  return SCIP_OKAY;
366 }
367 
368 /** returns the currently used node selector */
370  SCIP* scip /**< SCIP data structure */
371  )
372 {
373  assert(scip != NULL);
374  assert(scip->set != NULL);
375 
376  return SCIPsetGetNodesel(scip->set, scip->stat);
377 }
SCIP_RETCODE SCIPsetNodeselCopy(SCIP *scip, SCIP_NODESEL *nodesel, SCIP_DECL_NODESELCOPY((*nodeselcopy)))
Definition: scip_nodesel.c:208
internal methods for separators
SCIP_STAT * stat
Definition: struct_scip.h:69
void SCIPnodeselSetFree(SCIP_NODESEL *nodesel, SCIP_DECL_NODESELFREE((*nodeselfree)))
Definition: nodesel.c:1140
#define SCIP_DECL_NODESELCOMP(x)
Definition: type_nodesel.h:126
#define NULL
Definition: def.h:246
internal methods for managing events
default message handler
trivialnegation primal heuristic
internal methods for storing primal CIP solutions
int nnodesels
Definition: struct_set.h:120
methods to interpret (evaluate) an expression tree "fast"
SCIP_NODESEL ** SCIPgetNodesels(SCIP *scip)
Definition: scip_nodesel.c:317
internal methods for branch and bound tree
public methods for node selector plugins
void SCIPnodeselSetInit(SCIP_NODESEL *nodesel, SCIP_DECL_NODESELINIT((*nodeselinit)))
Definition: nodesel.c:1151
SCIP_NODESEL ** nodesels
Definition: struct_set.h:83
methods for implications, variable bounds, and cliques
internal methods for clocks and timing issues
#define SCIP_DECL_NODESELINITSOL(x)
Definition: type_nodesel.h:83
SCIP_RETCODE SCIPincludeNodeselBasic(SCIP *scip, SCIP_NODESEL **nodesel, const char *name, const char *desc, int stdpriority, int memsavepriority, SCIP_DECL_NODESELSELECT((*nodeselselect)), SCIP_DECL_NODESELCOMP((*nodeselcomp)), SCIP_NODESELDATA *nodeseldata)
Definition: scip_nodesel.c:173
internal methods for NLPI solver interfaces
interface methods for specific LP solvers
internal methods for displaying statistics tables
#define FALSE
Definition: def.h:72
SCIP_RETCODE SCIPsetNodeselMemsavePriority(SCIP *scip, SCIP_NODESEL *nodesel, int priority)
Definition: scip_nodesel.c:354
methods for the aggregation rows
SCIP_NODESEL * SCIPsetGetNodesel(SCIP_SET *set, SCIP_STAT *stat)
Definition: set.c:4660
internal methods for Benders&#39; decomposition
SCIP_RETCODE SCIPsetNodeselExit(SCIP *scip, SCIP_NODESEL *nodesel, SCIP_DECL_NODESELEXIT((*nodeselexit)))
Definition: scip_nodesel.c:256
#define TRUE
Definition: def.h:71
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:53
methods commonly used by primal heuristics
internal methods for branching rules and branching candidate storage
datastructures for concurrent solvers
internal methods for handling parameter settings
methods for creating output for visualization tools (VBC, BAK)
nodereopt branching rule
#define SCIP_DECL_NODESELEXITSOL(x)
Definition: type_nodesel.h:94
internal methods for LP management
internal methods for branching and inference history
internal methods for collecting primal CIP solutions and primal informations
#define SCIP_DECL_NODESELINIT(x)
Definition: type_nodesel.h:64
internal methods for propagators
struct SCIP_NodeselData SCIP_NODESELDATA
Definition: type_nodesel.h:38
SCIP_MEM * mem
Definition: struct_scip.h:61
git hash methods
SCIP_RETCODE SCIPsetNodeselExitsol(SCIP *scip, SCIP_NODESEL *nodesel, SCIP_DECL_NODESELEXITSOL((*nodeselexitsol)))
Definition: scip_nodesel.c:288
internal methods for storing and manipulating the main problem
#define SCIPerrorMessage
Definition: pub_message.h:45
methods for block memory pools and memory buffers
register additional core functionality that is designed as plugins
SCIP_RETCODE SCIPcheckStage(SCIP *scip, const char *method, SCIP_Bool init, SCIP_Bool problem, SCIP_Bool transforming, SCIP_Bool transformed, SCIP_Bool initpresolve, SCIP_Bool presolving, SCIP_Bool exitpresolve, SCIP_Bool presolved, SCIP_Bool initsolve, SCIP_Bool solving, SCIP_Bool solved, SCIP_Bool exitsolve, SCIP_Bool freetrans, SCIP_Bool freescip)
Definition: debug.c:2010
internal methods for presolvers
internal methods for NLP management
internal miscellaneous methods
#define SCIP_DECL_NODESELFREE(x)
Definition: type_nodesel.h:56
internal methods for node selectors and node priority queues
internal methods for variable pricers
internal methods for global SCIP settings
internal methods for storing conflicts
#define SCIP_CALL(x)
Definition: def.h:358
SCIP main data structure.
BMS_BLKMEM * setmem
Definition: struct_mem.h:39
SCIP_NODESEL * SCIPgetNodesel(SCIP *scip)
Definition: scip_nodesel.c:369
internal methods for storing priced variables
internal methods for relaxators
void SCIPnodeselSetInitsol(SCIP_NODESEL *nodesel, SCIP_DECL_NODESELINITSOL((*nodeselinitsol)))
Definition: nodesel.c:1173
internal methods for storing separated cuts
methods commonly used for presolving
methods for catching the user CTRL-C interrupt
internal methods for problem variables
data structures and methods for collecting reoptimization information
the function declarations for the synchronization store
internal methods for user interface dialog
SCIP_RETCODE SCIPnodeselCreate(SCIP_NODESEL **nodesel, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int stdpriority, int memsavepriority, SCIP_DECL_NODESELCOPY((*nodeselcopy)), SCIP_DECL_NODESELFREE((*nodeselfree)), SCIP_DECL_NODESELINIT((*nodeselinit)), SCIP_DECL_NODESELEXIT((*nodeselexit)), SCIP_DECL_NODESELINITSOL((*nodeselinitsol)), SCIP_DECL_NODESELEXITSOL((*nodeselexitsol)), SCIP_DECL_NODESELSELECT((*nodeselselect)), SCIP_DECL_NODESELCOMP((*nodeselcomp)), SCIP_NODESELDATA *nodeseldata)
Definition: nodesel.c:821
#define SCIP_DECL_NODESELEXIT(x)
Definition: type_nodesel.h:72
SCIP_NODESEL * SCIPsetFindNodesel(SCIP_SET *set, const char *name)
Definition: set.c:4640
void SCIPnodeselSetMemsavePriority(SCIP_NODESEL *nodesel, SCIP_SET *set, int priority)
Definition: nodesel.c:1092
internal methods for input file readers
methods for debugging
void SCIPnodeselSetExit(SCIP_NODESEL *nodesel, SCIP_DECL_NODESELEXIT((*nodeselexit)))
Definition: nodesel.c:1162
SCIP_RETCODE SCIPsetNodeselInitsol(SCIP *scip, SCIP_NODESEL *nodesel, SCIP_DECL_NODESELINITSOL((*nodeselinitsol)))
Definition: scip_nodesel.c:272
reoptsols primal heuristic
internal methods for storing cuts in a cut pool
Constraint handler for linear constraints in their most general form, .
SCIP_RETCODE SCIPsetIncludeNodesel(SCIP_SET *set, SCIP_NODESEL *nodesel)
Definition: set.c:4609
helper functions for concurrent scip solvers
internal methods for return codes for SCIP methods
void SCIPnodeselSetStdPriority(SCIP_NODESEL *nodesel, SCIP_SET *set, int priority)
Definition: nodesel.c:1068
internal methods for conflict analysis
internal methods for tree compressions
int SCIPgetNNodesels(SCIP *scip)
Definition: scip_nodesel.c:328
internal methods for main solving loop and node processing
SCIP_SET * set
Definition: struct_scip.h:62
SCIP_RETCODE SCIPsetNodeselFree(SCIP *scip, SCIP_NODESEL *nodesel, SCIP_DECL_NODESELFREE((*nodeselfree)))
Definition: scip_nodesel.c:224
public methods for message output
SCIP_NODESEL * SCIPfindNodesel(SCIP *scip, const char *name)
Definition: scip_nodesel.c:304
SCIP_MESSAGEHDLR * messagehdlr
Definition: struct_scip.h:65
default user interface dialog
internal methods for problem statistics
#define SCIP_DECL_NODESELCOPY(x)
Definition: type_nodesel.h:47
internal methods for constraints and constraint handlers
SCIP_RETCODE SCIPsetNodeselInit(SCIP *scip, SCIP_NODESEL *nodesel, SCIP_DECL_NODESELINIT((*nodeselinit)))
Definition: scip_nodesel.c:240
declarations for XML parsing
void SCIPnodeselSetCopy(SCIP_NODESEL *nodesel, SCIP_DECL_NODESELCOPY((*nodeselcopy)))
Definition: nodesel.c:1129
build flags methods
common defines and data types used in all packages of SCIP
internal methods for primal heuristics
#define SCIP_DECL_NODESELSELECT(x)
Definition: type_nodesel.h:109
void SCIPnodeselSetExitsol(SCIP_NODESEL *nodesel, SCIP_DECL_NODESELEXITSOL((*nodeselexitsol)))
Definition: nodesel.c:1184
internal methods for Benders&#39; decomposition cuts
SCIP_RETCODE SCIPsetNodeselStdPriority(SCIP *scip, SCIP_NODESEL *nodesel, int priority)
Definition: scip_nodesel.c:339
SCIP_RETCODE SCIPincludeNodesel(SCIP *scip, const char *name, const char *desc, int stdpriority, int memsavepriority, SCIP_DECL_NODESELCOPY((*nodeselcopy)), SCIP_DECL_NODESELFREE((*nodeselfree)), SCIP_DECL_NODESELINIT((*nodeselinit)), SCIP_DECL_NODESELEXIT((*nodeselexit)), SCIP_DECL_NODESELINITSOL((*nodeselinitsol)), SCIP_DECL_NODESELEXITSOL((*nodeselexitsol)), SCIP_DECL_NODESELSELECT((*nodeselselect)), SCIP_DECL_NODESELCOMP((*nodeselcomp)), SCIP_NODESELDATA *nodeseldata)
Definition: scip_nodesel.c:130
internal methods for displaying runtime statistics
OFINS - Objective Function Induced Neighborhood Search - a primal heuristic for reoptimization.