Scippy

SCIP

Solving Constraint Integer Programs

scip_pricer.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_pricer.c
17  * @brief public methods for variable pricer 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_pricer.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 variable pricer and includes it in SCIP
125  * To use the variable pricer for solving a problem, it first has to be activated with a call to SCIPactivatePricer().
126  * This should be done during the problem creation stage.
127  *
128  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
129  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
130  *
131  * @pre This method can be called if SCIP is in one of the following stages:
132  * - \ref SCIP_STAGE_INIT
133  * - \ref SCIP_STAGE_PROBLEM
134  *
135  * @note method has all pricer callbacks as arguments and is thus changed every time a new callback is added
136  * in future releases; consider using SCIPincludePricerBasic() and setter functions
137  * if you seek for a method which is less likely to change in future releases
138  */
140  SCIP* scip, /**< SCIP data structure */
141  const char* name, /**< name of variable pricer */
142  const char* desc, /**< description of variable pricer */
143  int priority, /**< priority of the variable pricer */
144  SCIP_Bool delay, /**< should the pricer be delayed until no other pricers or already existing
145  * problem variables with negative reduced costs are found?
146  * if this is set to FALSE it may happen that the pricer produces columns
147  * that already exist in the problem (which are also priced in by the
148  * default problem variable pricing in the same round) */
149  SCIP_DECL_PRICERCOPY ((*pricercopy)), /**< copy method of variable pricer or NULL if you don't want to copy your plugin into sub-SCIPs */
150  SCIP_DECL_PRICERFREE ((*pricerfree)), /**< destructor of variable pricer */
151  SCIP_DECL_PRICERINIT ((*pricerinit)), /**< initialize variable pricer */
152  SCIP_DECL_PRICEREXIT ((*pricerexit)), /**< deinitialize variable pricer */
153  SCIP_DECL_PRICERINITSOL((*pricerinitsol)),/**< solving process initialization method of variable pricer */
154  SCIP_DECL_PRICEREXITSOL((*pricerexitsol)),/**< solving process deinitialization method of variable pricer */
155  SCIP_DECL_PRICERREDCOST((*pricerredcost)),/**< reduced cost pricing method of variable pricer for feasible LPs */
156  SCIP_DECL_PRICERFARKAS((*pricerfarkas)), /**< Farkas pricing method of variable pricer for infeasible LPs */
157  SCIP_PRICERDATA* pricerdata /**< variable pricer data */
158  )
159 {
160  SCIP_PRICER* pricer;
161 
162  SCIP_CALL( SCIPcheckStage(scip, "SCIPincludePricer", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
163 
164  /* check whether pricer is already present */
165  if( SCIPfindPricer(scip, name) != NULL )
166  {
167  SCIPerrorMessage("pricer <%s> already included.\n", name);
168  return SCIP_INVALIDDATA;
169  }
170 
171  SCIP_CALL( SCIPpricerCreate(&pricer, scip->set, scip->messagehdlr, scip->mem->setmem,
172  name, desc, priority, delay,
173  pricercopy,
174  pricerfree, pricerinit, pricerexit, pricerinitsol, pricerexitsol, pricerredcost, pricerfarkas, pricerdata) );
175  SCIP_CALL( SCIPsetIncludePricer(scip->set, pricer) );
176 
177  return SCIP_OKAY;
178 }
179 
180 /** creates a variable pricer and includes it in SCIP with all non-fundamental callbacks set to NULL;
181  * if needed, these can be added afterwards via setter functions SCIPsetPricerCopy(), SCIPsetPricerFree(),
182  * SCIPsetPricerInity(), SCIPsetPricerExit(), SCIPsetPricerInitsol(), SCIPsetPricerExitsol(),
183  * SCIPsetPricerFarkas();
184  *
185  * To use the variable pricer for solving a problem, it first has to be activated with a call to SCIPactivatePricer().
186  * This should be done during the problem creation stage.
187  *
188  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
189  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
190  *
191  * @pre This method can be called if SCIP is in one of the following stages:
192  * - \ref SCIP_STAGE_INIT
193  * - \ref SCIP_STAGE_PROBLEM
194  *
195  * @note if you want to set all callbacks with a single method call, consider using SCIPincludePricer() instead
196  */
198  SCIP* scip, /**< SCIP data structure */
199  SCIP_PRICER** pricerptr, /**< reference to a pricer, or NULL */
200  const char* name, /**< name of variable pricer */
201  const char* desc, /**< description of variable pricer */
202  int priority, /**< priority of the variable pricer */
203  SCIP_Bool delay, /**< should the pricer be delayed until no other pricers or already existing
204  * problem variables with negative reduced costs are found?
205  * if this is set to FALSE it may happen that the pricer produces columns
206  * that already exist in the problem (which are also priced in by the
207  * default problem variable pricing in the same round) */
208  SCIP_DECL_PRICERREDCOST((*pricerredcost)),/**< reduced cost pricing method of variable pricer for feasible LPs */
209  SCIP_DECL_PRICERFARKAS((*pricerfarkas)), /**< Farkas pricing method of variable pricer for infeasible LPs */
210  SCIP_PRICERDATA* pricerdata /**< variable pricer data */
211  )
212 {
213  SCIP_PRICER* pricer;
214 
215  SCIP_CALL( SCIPcheckStage(scip, "SCIPincludePricerBasic", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
216 
217  /* check whether pricer is already present */
218  if( SCIPfindPricer(scip, name) != NULL )
219  {
220  SCIPerrorMessage("pricer <%s> already included.\n", name);
221  return SCIP_INVALIDDATA;
222  }
223 
224  SCIP_CALL( SCIPpricerCreate(&pricer, scip->set, scip->messagehdlr, scip->mem->setmem,
225  name, desc, priority, delay,
226  NULL,
227  NULL, NULL, NULL, NULL, NULL, pricerredcost, pricerfarkas, pricerdata) );
228  SCIP_CALL( SCIPsetIncludePricer(scip->set, pricer) );
229 
230  if( pricerptr != NULL )
231  *pricerptr = pricer;
232 
233  return SCIP_OKAY;
234 }
235 
236 /** sets copy method of pricer
237  *
238  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
239  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
240  *
241  * @pre This method can be called if SCIP is in one of the following stages:
242  * - \ref SCIP_STAGE_INIT
243  * - \ref SCIP_STAGE_PROBLEM
244  */
246  SCIP* scip, /**< SCIP data structure */
247  SCIP_PRICER* pricer, /**< pricer */
248  SCIP_DECL_PRICERCOPY ((*pricercopy)) /**< copy method of pricer or NULL if you don't want to copy your plugin into sub-SCIPs */
249  )
250 {
251  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerCopy", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
252 
253  assert(pricer != NULL);
254 
255  SCIPpricerSetCopy(pricer, pricercopy);
256 
257  return SCIP_OKAY;
258 }
259 
260 /** sets destructor method of pricer
261  *
262  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
263  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
264  *
265  * @pre This method can be called if SCIP is in one of the following stages:
266  * - \ref SCIP_STAGE_INIT
267  * - \ref SCIP_STAGE_PROBLEM
268  */
270  SCIP* scip, /**< SCIP data structure */
271  SCIP_PRICER* pricer, /**< pricer */
272  SCIP_DECL_PRICERFREE ((*pricerfree)) /**< destructor of pricer */
273  )
274 {
275  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerFree", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
276 
277  assert(pricer != NULL);
278 
279  SCIPpricerSetFree(pricer, pricerfree);
280 
281  return SCIP_OKAY;
282 }
283 
284 /** sets initialization method of pricer
285  *
286  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
287  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
288  *
289  * @pre This method can be called if SCIP is in one of the following stages:
290  * - \ref SCIP_STAGE_INIT
291  * - \ref SCIP_STAGE_PROBLEM
292  */
294  SCIP* scip, /**< SCIP data structure */
295  SCIP_PRICER* pricer, /**< pricer */
296  SCIP_DECL_PRICERINIT ((*pricerinit)) /**< initialize pricer */
297  )
298 {
299  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerInit", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
300 
301  assert(pricer != NULL);
302 
303  SCIPpricerSetInit(pricer, pricerinit);
304 
305  return SCIP_OKAY;
306 }
307 
308 /** sets deinitialization method of pricer
309  *
310  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
311  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
312  *
313  * @pre This method can be called if SCIP is in one of the following stages:
314  * - \ref SCIP_STAGE_INIT
315  * - \ref SCIP_STAGE_PROBLEM
316  */
318  SCIP* scip, /**< SCIP data structure */
319  SCIP_PRICER* pricer, /**< pricer */
320  SCIP_DECL_PRICEREXIT ((*pricerexit)) /**< deinitialize pricer */
321  )
322 {
323  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerExit", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
324 
325  assert(pricer != NULL);
326 
327  SCIPpricerSetExit(pricer, pricerexit);
328 
329  return SCIP_OKAY;
330 }
331 
332 /** sets solving process initialization method of pricer
333  *
334  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
335  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
336  *
337  * @pre This method can be called if SCIP is in one of the following stages:
338  * - \ref SCIP_STAGE_INIT
339  * - \ref SCIP_STAGE_PROBLEM
340  */
342  SCIP* scip, /**< SCIP data structure */
343  SCIP_PRICER* pricer, /**< pricer */
344  SCIP_DECL_PRICERINITSOL ((*pricerinitsol))/**< solving process initialization method of pricer */
345  )
346 {
347  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerInitsol", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
348 
349  assert(pricer != NULL);
350 
351  SCIPpricerSetInitsol(pricer, pricerinitsol);
352 
353  return SCIP_OKAY;
354 }
355 
356 /** sets solving process deinitialization method of pricer
357  *
358  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
359  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
360  *
361  * @pre This method can be called if SCIP is in one of the following stages:
362  * - \ref SCIP_STAGE_INIT
363  * - \ref SCIP_STAGE_PROBLEM
364  */
366  SCIP* scip, /**< SCIP data structure */
367  SCIP_PRICER* pricer, /**< pricer */
368  SCIP_DECL_PRICEREXITSOL((*pricerexitsol)) /**< solving process deinitialization method of pricer */
369  )
370 {
371  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerExitsol", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
372 
373  assert(pricer != NULL);
374 
375  SCIPpricerSetExitsol(pricer, pricerexitsol);
376 
377  return SCIP_OKAY;
378 }
379 
380 /** returns the variable pricer of the given name, or NULL if not existing */
382  SCIP* scip, /**< SCIP data structure */
383  const char* name /**< name of variable pricer */
384  )
385 {
386  assert(scip != NULL);
387  assert(scip->set != NULL);
388  assert(name != NULL);
389 
390  return SCIPsetFindPricer(scip->set, name);
391 }
392 
393 /** returns the array of currently available variable pricers; active pricers are in the first slots of the array */
395  SCIP* scip /**< SCIP data structure */
396  )
397 {
398  assert(scip != NULL);
399  assert(scip->set != NULL);
400 
401  SCIPsetSortPricers(scip->set);
402 
403  return scip->set->pricers;
404 }
405 
406 /** returns the number of currently available variable pricers */
408  SCIP* scip /**< SCIP data structure */
409  )
410 {
411  assert(scip != NULL);
412  assert(scip->set != NULL);
413 
414  return scip->set->npricers;
415 }
416 
417 /** returns the number of currently active variable pricers, that are used in the LP solving loop */
419  SCIP* scip /**< SCIP data structure */
420  )
421 {
422  assert(scip != NULL);
423  assert(scip->set != NULL);
424 
425  return scip->set->nactivepricers;
426 }
427 
428 /** sets the priority priority of a variable pricer */
430  SCIP* scip, /**< SCIP data structure */
431  SCIP_PRICER* pricer, /**< variable pricer */
432  int priority /**< new priority of the variable pricer */
433  )
434 {
435  assert(scip != NULL);
436  assert(scip->set != NULL);
437 
438  SCIPpricerSetPriority(pricer, scip->set, priority);
439 
440  return SCIP_OKAY;
441 }
442 
443 /** activates pricer to be used for the current problem
444  * This method should be called during the problem creation stage for all pricers that are necessary to solve
445  * the problem model.
446  * The pricers are automatically deactivated when the problem is freed.
447  *
448  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
449  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
450  *
451  * @pre This method can be called if SCIP is in one of the following stages:
452  * - \ref SCIP_STAGE_PROBLEM
453  */
455  SCIP* scip, /**< SCIP data structure */
456  SCIP_PRICER* pricer /**< variable pricer */
457  )
458 {
459  SCIP_CALL( SCIPcheckStage(scip, "SCIPactivatePricer", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
460 
461  SCIP_CALL( SCIPpricerActivate(pricer, scip->set) );
462 
463  return SCIP_OKAY;
464 }
465 
466 /** deactivates pricer
467  *
468  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
469  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
470  *
471  * @pre This method can be called if SCIP is in one of the following stages:
472  * - \ref SCIP_STAGE_PROBLEM
473  * - \ref SCIP_STAGE_EXITSOLVE
474  */
476  SCIP* scip, /**< SCIP data structure */
477  SCIP_PRICER* pricer /**< variable pricer */
478  )
479 {
480  SCIP_CALL( SCIPcheckStage(scip, "SCIPdeactivatePricer", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE) );
481 
482  SCIP_CALL( SCIPpricerDeactivate(pricer, scip->set) );
483 
484  return SCIP_OKAY;
485 }
internal methods for separators
SCIP_RETCODE SCIPsetPricerPriority(SCIP *scip, SCIP_PRICER *pricer, int priority)
Definition: scip_pricer.c:429
SCIP_RETCODE SCIPpricerDeactivate(SCIP_PRICER *pricer, SCIP_SET *set)
Definition: pricer.c:363
#define NULL
Definition: def.h:246
internal methods for managing events
void SCIPpricerSetInit(SCIP_PRICER *pricer, SCIP_DECL_PRICERINIT((*pricerinit)))
Definition: pricer.c:544
default message handler
trivialnegation primal heuristic
internal methods for storing primal CIP solutions
void SCIPpricerSetExitsol(SCIP_PRICER *pricer, SCIP_DECL_PRICEREXITSOL((*pricerexitsol)))
Definition: pricer.c:577
methods to interpret (evaluate) an expression tree "fast"
internal methods for branch and bound tree
SCIP_PRICER * SCIPsetFindPricer(SCIP_SET *set, const char *name)
Definition: set.c:3618
methods for implications, variable bounds, and cliques
internal methods for clocks and timing issues
internal methods for NLPI solver interfaces
interface methods for specific LP solvers
#define SCIP_DECL_PRICEREXIT(x)
Definition: type_pricer.h:70
internal methods for displaying statistics tables
#define FALSE
Definition: def.h:72
methods for the aggregation rows
internal methods for Benders&#39; decomposition
int SCIPgetNActivePricers(SCIP *scip)
Definition: scip_pricer.c:418
SCIP_PRICER * SCIPfindPricer(SCIP *scip, const char *name)
Definition: scip_pricer.c:381
#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
void SCIPpricerSetFree(SCIP_PRICER *pricer, SCIP_DECL_PRICERFREE((*pricerfree)))
Definition: pricer.c:533
datastructures for concurrent solvers
#define SCIP_DECL_PRICEREXITSOL(x)
Definition: type_pricer.h:92
SCIP_RETCODE SCIPsetPricerExit(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICEREXIT((*pricerexit)))
Definition: scip_pricer.c:317
SCIP_RETCODE SCIPsetPricerExitsol(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICEREXITSOL((*pricerexitsol)))
Definition: scip_pricer.c:365
internal methods for handling parameter settings
methods for creating output for visualization tools (VBC, BAK)
nodereopt branching rule
#define SCIP_DECL_PRICERCOPY(x)
Definition: type_pricer.h:46
internal methods for LP management
internal methods for branching and inference history
internal methods for collecting primal CIP solutions and primal informations
void SCIPpricerSetPriority(SCIP_PRICER *pricer, SCIP_SET *set, int priority)
Definition: pricer.c:618
internal methods for propagators
SCIP_MEM * mem
Definition: struct_scip.h:61
void SCIPpricerSetCopy(SCIP_PRICER *pricer, SCIP_DECL_PRICERCOPY((*pricercopy)))
Definition: pricer.c:522
git hash methods
SCIP_RETCODE SCIPdeactivatePricer(SCIP *scip, SCIP_PRICER *pricer)
Definition: scip_pricer.c:475
internal methods for storing and manipulating the main problem
#define SCIPerrorMessage
Definition: pub_message.h:45
SCIP_RETCODE SCIPincludePricerBasic(SCIP *scip, SCIP_PRICER **pricerptr, const char *name, const char *desc, int priority, SCIP_Bool delay, SCIP_DECL_PRICERREDCOST((*pricerredcost)), SCIP_DECL_PRICERFARKAS((*pricerfarkas)), SCIP_PRICERDATA *pricerdata)
Definition: scip_pricer.c:197
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
SCIP_RETCODE SCIPsetIncludePricer(SCIP_SET *set, SCIP_PRICER *pricer)
Definition: set.c:3595
SCIP_DECL_PRICERINIT(ObjPricerVRP::scip_init)
Definition: pricer_vrp.cpp:74
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
internal methods for storing priced variables
internal methods for relaxators
SCIP_RETCODE SCIPsetPricerInit(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICERINIT((*pricerinit)))
Definition: scip_pricer.c:293
internal methods for storing separated cuts
SCIP_DECL_PRICERFARKAS(ObjPricerVRP::scip_farkas)
Definition: pricer_vrp.cpp:237
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
SCIP_RETCODE SCIPactivatePricer(SCIP *scip, SCIP_PRICER *pricer)
Definition: scip_pricer.c:454
SCIP_DECL_PRICERREDCOST(ObjPricerVRP::scip_redcost)
Definition: pricer_vrp.cpp:216
internal methods for user interface dialog
SCIP_RETCODE SCIPpricerCreate(SCIP_PRICER **pricer, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, SCIP_Bool delay, SCIP_DECL_PRICERCOPY((*pricercopy)), SCIP_DECL_PRICERFREE((*pricerfree)), SCIP_DECL_PRICERINIT((*pricerinit)), SCIP_DECL_PRICEREXIT((*pricerexit)), SCIP_DECL_PRICERINITSOL((*pricerinitsol)), SCIP_DECL_PRICEREXITSOL((*pricerexitsol)), SCIP_DECL_PRICERREDCOST((*pricerredcost)), SCIP_DECL_PRICERFARKAS((*pricerfarkas)), SCIP_PRICERDATA *pricerdata)
Definition: pricer.c:163
#define SCIP_Bool
Definition: def.h:69
#define SCIP_DECL_PRICERINITSOL(x)
Definition: type_pricer.h:81
int SCIPgetNPricers(SCIP *scip)
Definition: scip_pricer.c:407
internal methods for input file readers
methods for debugging
SCIP_RETCODE SCIPsetPricerFree(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICERFREE((*pricerfree)))
Definition: scip_pricer.c:269
reoptsols primal heuristic
internal methods for storing cuts in a cut pool
Constraint handler for linear constraints in their most general form, .
void SCIPpricerSetInitsol(SCIP_PRICER *pricer, SCIP_DECL_PRICERINITSOL((*pricerinitsol)))
Definition: pricer.c:566
SCIP_RETCODE SCIPpricerActivate(SCIP_PRICER *pricer, SCIP_SET *set)
Definition: pricer.c:343
helper functions for concurrent scip solvers
SCIP_RETCODE SCIPsetPricerInitsol(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICERINITSOL((*pricerinitsol)))
Definition: scip_pricer.c:341
public methods for variable pricer plugins
internal methods for return codes for SCIP methods
int npricers
Definition: struct_set.h:99
internal methods for conflict analysis
internal methods for tree compressions
internal methods for main solving loop and node processing
int nactivepricers
Definition: struct_set.h:100
SCIP_SET * set
Definition: struct_scip.h:62
public methods for message output
SCIP_MESSAGEHDLR * messagehdlr
Definition: struct_scip.h:65
default user interface dialog
internal methods for problem statistics
SCIP_PRICER ** pricers
Definition: struct_set.h:69
SCIP_RETCODE SCIPincludePricer(SCIP *scip, const char *name, const char *desc, int priority, SCIP_Bool delay, SCIP_DECL_PRICERCOPY((*pricercopy)), SCIP_DECL_PRICERFREE((*pricerfree)), SCIP_DECL_PRICERINIT((*pricerinit)), SCIP_DECL_PRICEREXIT((*pricerexit)), SCIP_DECL_PRICERINITSOL((*pricerinitsol)), SCIP_DECL_PRICEREXITSOL((*pricerexitsol)), SCIP_DECL_PRICERREDCOST((*pricerredcost)), SCIP_DECL_PRICERFARKAS((*pricerfarkas)), SCIP_PRICERDATA *pricerdata)
Definition: scip_pricer.c:139
void SCIPsetSortPricers(SCIP_SET *set)
Definition: set.c:3638
internal methods for constraints and constraint handlers
declarations for XML parsing
build flags methods
struct SCIP_PricerData SCIP_PRICERDATA
Definition: type_pricer.h:36
#define SCIP_DECL_PRICERFREE(x)
Definition: type_pricer.h:54
SCIP_RETCODE SCIPsetPricerCopy(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICERCOPY((*pricercopy)))
Definition: scip_pricer.c:245
common defines and data types used in all packages of SCIP
void SCIPpricerSetExit(SCIP_PRICER *pricer, SCIP_DECL_PRICEREXIT((*pricerexit)))
Definition: pricer.c:555
internal methods for primal heuristics
internal methods for Benders&#39; decomposition cuts
internal methods for displaying runtime statistics
SCIP_PRICER ** SCIPgetPricers(SCIP *scip)
Definition: scip_pricer.c:394
OFINS - Objective Function Induced Neighborhood Search - a primal heuristic for reoptimization.