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 "scip/debug.h"
36 #include "scip/pricer.h"
37 #include "scip/pub_message.h"
38 #include "scip/scip_pricer.h"
39 #include "scip/set.h"
40 #include "scip/struct_mem.h"
41 #include "scip/struct_scip.h"
42 #include "scip/struct_set.h"
43 
44 /** creates a variable pricer and includes it in SCIP
45  * To use the variable pricer for solving a problem, it first has to be activated with a call to SCIPactivatePricer().
46  * This should be done during the problem creation stage.
47  *
48  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
49  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
50  *
51  * @pre This method can be called if SCIP is in one of the following stages:
52  * - \ref SCIP_STAGE_INIT
53  * - \ref SCIP_STAGE_PROBLEM
54  *
55  * @note method has all pricer callbacks as arguments and is thus changed every time a new callback is added
56  * in future releases; consider using SCIPincludePricerBasic() and setter functions
57  * if you seek for a method which is less likely to change in future releases
58  */
60  SCIP* scip, /**< SCIP data structure */
61  const char* name, /**< name of variable pricer */
62  const char* desc, /**< description of variable pricer */
63  int priority, /**< priority of the variable pricer */
64  SCIP_Bool delay, /**< should the pricer be delayed until no other pricers or already existing
65  * problem variables with negative reduced costs are found?
66  * if this is set to FALSE it may happen that the pricer produces columns
67  * that already exist in the problem (which are also priced in by the
68  * default problem variable pricing in the same round) */
69  SCIP_DECL_PRICERCOPY ((*pricercopy)), /**< copy method of variable pricer or NULL if you don't want to copy your plugin into sub-SCIPs */
70  SCIP_DECL_PRICERFREE ((*pricerfree)), /**< destructor of variable pricer */
71  SCIP_DECL_PRICERINIT ((*pricerinit)), /**< initialize variable pricer */
72  SCIP_DECL_PRICEREXIT ((*pricerexit)), /**< deinitialize variable pricer */
73  SCIP_DECL_PRICERINITSOL((*pricerinitsol)),/**< solving process initialization method of variable pricer */
74  SCIP_DECL_PRICEREXITSOL((*pricerexitsol)),/**< solving process deinitialization method of variable pricer */
75  SCIP_DECL_PRICERREDCOST((*pricerredcost)),/**< reduced cost pricing method of variable pricer for feasible LPs */
76  SCIP_DECL_PRICERFARKAS((*pricerfarkas)), /**< Farkas pricing method of variable pricer for infeasible LPs */
77  SCIP_PRICERDATA* pricerdata /**< variable pricer data */
78  )
79 {
80  SCIP_PRICER* pricer;
81 
82  SCIP_CALL( SCIPcheckStage(scip, "SCIPincludePricer", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
83 
84  /* check whether pricer is already present */
85  if( SCIPfindPricer(scip, name) != NULL )
86  {
87  SCIPerrorMessage("pricer <%s> already included.\n", name);
88  return SCIP_INVALIDDATA;
89  }
90 
91  SCIP_CALL( SCIPpricerCreate(&pricer, scip->set, scip->messagehdlr, scip->mem->setmem,
92  name, desc, priority, delay,
93  pricercopy,
94  pricerfree, pricerinit, pricerexit, pricerinitsol, pricerexitsol, pricerredcost, pricerfarkas, pricerdata) );
95  SCIP_CALL( SCIPsetIncludePricer(scip->set, pricer) );
96 
97  return SCIP_OKAY;
98 }
99 
100 /** creates a variable pricer and includes it in SCIP with all non-fundamental callbacks set to NULL;
101  * if needed, these can be added afterwards via setter functions SCIPsetPricerCopy(), SCIPsetPricerFree(),
102  * SCIPsetPricerInity(), SCIPsetPricerExit(), SCIPsetPricerInitsol(), SCIPsetPricerExitsol(),
103  * SCIPsetPricerFarkas();
104  *
105  * To use the variable pricer for solving a problem, it first has to be activated with a call to SCIPactivatePricer().
106  * This should be done during the problem creation stage.
107  *
108  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
109  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
110  *
111  * @pre This method can be called if SCIP is in one of the following stages:
112  * - \ref SCIP_STAGE_INIT
113  * - \ref SCIP_STAGE_PROBLEM
114  *
115  * @note if you want to set all callbacks with a single method call, consider using SCIPincludePricer() instead
116  */
118  SCIP* scip, /**< SCIP data structure */
119  SCIP_PRICER** pricerptr, /**< reference to a pricer, or NULL */
120  const char* name, /**< name of variable pricer */
121  const char* desc, /**< description of variable pricer */
122  int priority, /**< priority of the variable pricer */
123  SCIP_Bool delay, /**< should the pricer be delayed until no other pricers or already existing
124  * problem variables with negative reduced costs are found?
125  * if this is set to FALSE it may happen that the pricer produces columns
126  * that already exist in the problem (which are also priced in by the
127  * default problem variable pricing in the same round) */
128  SCIP_DECL_PRICERREDCOST((*pricerredcost)),/**< reduced cost pricing method of variable pricer for feasible LPs */
129  SCIP_DECL_PRICERFARKAS((*pricerfarkas)), /**< Farkas pricing method of variable pricer for infeasible LPs */
130  SCIP_PRICERDATA* pricerdata /**< variable pricer data */
131  )
132 {
133  SCIP_PRICER* pricer;
134 
135  SCIP_CALL( SCIPcheckStage(scip, "SCIPincludePricerBasic", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
136 
137  /* check whether pricer is already present */
138  if( SCIPfindPricer(scip, name) != NULL )
139  {
140  SCIPerrorMessage("pricer <%s> already included.\n", name);
141  return SCIP_INVALIDDATA;
142  }
143 
144  SCIP_CALL( SCIPpricerCreate(&pricer, scip->set, scip->messagehdlr, scip->mem->setmem,
145  name, desc, priority, delay,
146  NULL,
147  NULL, NULL, NULL, NULL, NULL, pricerredcost, pricerfarkas, pricerdata) );
148  SCIP_CALL( SCIPsetIncludePricer(scip->set, pricer) );
149 
150  if( pricerptr != NULL )
151  *pricerptr = pricer;
152 
153  return SCIP_OKAY;
154 }
155 
156 /** sets copy method of pricer
157  *
158  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
159  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
160  *
161  * @pre This method can be called if SCIP is in one of the following stages:
162  * - \ref SCIP_STAGE_INIT
163  * - \ref SCIP_STAGE_PROBLEM
164  */
166  SCIP* scip, /**< SCIP data structure */
167  SCIP_PRICER* pricer, /**< pricer */
168  SCIP_DECL_PRICERCOPY ((*pricercopy)) /**< copy method of pricer or NULL if you don't want to copy your plugin into sub-SCIPs */
169  )
170 {
171  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerCopy", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
172 
173  assert(pricer != NULL);
174 
175  SCIPpricerSetCopy(pricer, pricercopy);
176 
177  return SCIP_OKAY;
178 }
179 
180 /** sets destructor method of pricer
181  *
182  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
183  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
184  *
185  * @pre This method can be called if SCIP is in one of the following stages:
186  * - \ref SCIP_STAGE_INIT
187  * - \ref SCIP_STAGE_PROBLEM
188  */
190  SCIP* scip, /**< SCIP data structure */
191  SCIP_PRICER* pricer, /**< pricer */
192  SCIP_DECL_PRICERFREE ((*pricerfree)) /**< destructor of pricer */
193  )
194 {
195  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerFree", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
196 
197  assert(pricer != NULL);
198 
199  SCIPpricerSetFree(pricer, pricerfree);
200 
201  return SCIP_OKAY;
202 }
203 
204 /** sets initialization method of pricer
205  *
206  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
207  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
208  *
209  * @pre This method can be called if SCIP is in one of the following stages:
210  * - \ref SCIP_STAGE_INIT
211  * - \ref SCIP_STAGE_PROBLEM
212  */
214  SCIP* scip, /**< SCIP data structure */
215  SCIP_PRICER* pricer, /**< pricer */
216  SCIP_DECL_PRICERINIT ((*pricerinit)) /**< initialize pricer */
217  )
218 {
219  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerInit", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
220 
221  assert(pricer != NULL);
222 
223  SCIPpricerSetInit(pricer, pricerinit);
224 
225  return SCIP_OKAY;
226 }
227 
228 /** sets deinitialization method of pricer
229  *
230  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
231  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
232  *
233  * @pre This method can be called if SCIP is in one of the following stages:
234  * - \ref SCIP_STAGE_INIT
235  * - \ref SCIP_STAGE_PROBLEM
236  */
238  SCIP* scip, /**< SCIP data structure */
239  SCIP_PRICER* pricer, /**< pricer */
240  SCIP_DECL_PRICEREXIT ((*pricerexit)) /**< deinitialize pricer */
241  )
242 {
243  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerExit", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
244 
245  assert(pricer != NULL);
246 
247  SCIPpricerSetExit(pricer, pricerexit);
248 
249  return SCIP_OKAY;
250 }
251 
252 /** sets solving process initialization method of pricer
253  *
254  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
255  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
256  *
257  * @pre This method can be called if SCIP is in one of the following stages:
258  * - \ref SCIP_STAGE_INIT
259  * - \ref SCIP_STAGE_PROBLEM
260  */
262  SCIP* scip, /**< SCIP data structure */
263  SCIP_PRICER* pricer, /**< pricer */
264  SCIP_DECL_PRICERINITSOL ((*pricerinitsol))/**< solving process initialization method of pricer */
265  )
266 {
267  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerInitsol", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
268 
269  assert(pricer != NULL);
270 
271  SCIPpricerSetInitsol(pricer, pricerinitsol);
272 
273  return SCIP_OKAY;
274 }
275 
276 /** sets solving process deinitialization method of pricer
277  *
278  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
279  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
280  *
281  * @pre This method can be called if SCIP is in one of the following stages:
282  * - \ref SCIP_STAGE_INIT
283  * - \ref SCIP_STAGE_PROBLEM
284  */
286  SCIP* scip, /**< SCIP data structure */
287  SCIP_PRICER* pricer, /**< pricer */
288  SCIP_DECL_PRICEREXITSOL((*pricerexitsol)) /**< solving process deinitialization method of pricer */
289  )
290 {
291  SCIP_CALL( SCIPcheckStage(scip, "SCIPsetPricerExitsol", TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
292 
293  assert(pricer != NULL);
294 
295  SCIPpricerSetExitsol(pricer, pricerexitsol);
296 
297  return SCIP_OKAY;
298 }
299 
300 /** returns the variable pricer of the given name, or NULL if not existing */
302  SCIP* scip, /**< SCIP data structure */
303  const char* name /**< name of variable pricer */
304  )
305 {
306  assert(scip != NULL);
307  assert(scip->set != NULL);
308  assert(name != NULL);
309 
310  return SCIPsetFindPricer(scip->set, name);
311 }
312 
313 /** returns the array of currently available variable pricers; active pricers are in the first slots of the array */
315  SCIP* scip /**< SCIP data structure */
316  )
317 {
318  assert(scip != NULL);
319  assert(scip->set != NULL);
320 
321  SCIPsetSortPricers(scip->set);
322 
323  return scip->set->pricers;
324 }
325 
326 /** returns the number of currently available variable pricers */
328  SCIP* scip /**< SCIP data structure */
329  )
330 {
331  assert(scip != NULL);
332  assert(scip->set != NULL);
333 
334  return scip->set->npricers;
335 }
336 
337 /** returns the number of currently active variable pricers, that are used in the LP solving loop */
339  SCIP* scip /**< SCIP data structure */
340  )
341 {
342  assert(scip != NULL);
343  assert(scip->set != NULL);
344 
345  return scip->set->nactivepricers;
346 }
347 
348 /** sets the priority priority of a variable pricer */
350  SCIP* scip, /**< SCIP data structure */
351  SCIP_PRICER* pricer, /**< variable pricer */
352  int priority /**< new priority of the variable pricer */
353  )
354 {
355  assert(scip != NULL);
356  assert(scip->set != NULL);
357 
358  SCIPpricerSetPriority(pricer, scip->set, priority);
359 
360  return SCIP_OKAY;
361 }
362 
363 /** activates pricer to be used for the current problem
364  * This method should be called during the problem creation stage for all pricers that are necessary to solve
365  * the problem model.
366  * The pricers are automatically deactivated when the problem is freed.
367  *
368  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
369  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
370  *
371  * @pre This method can be called if SCIP is in one of the following stages:
372  * - \ref SCIP_STAGE_PROBLEM
373  */
375  SCIP* scip, /**< SCIP data structure */
376  SCIP_PRICER* pricer /**< variable pricer */
377  )
378 {
379  SCIP_CALL( SCIPcheckStage(scip, "SCIPactivatePricer", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) );
380 
381  SCIP_CALL( SCIPpricerActivate(pricer, scip->set) );
382 
383  return SCIP_OKAY;
384 }
385 
386 /** deactivates pricer
387  *
388  * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
389  * SCIP_Retcode "SCIP_RETCODE" for a complete list of error codes.
390  *
391  * @pre This method can be called if SCIP is in one of the following stages:
392  * - \ref SCIP_STAGE_PROBLEM
393  * - \ref SCIP_STAGE_EXITSOLVE
394  */
396  SCIP* scip, /**< SCIP data structure */
397  SCIP_PRICER* pricer /**< variable pricer */
398  )
399 {
400  SCIP_CALL( SCIPcheckStage(scip, "SCIPdeactivatePricer", FALSE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE) );
401 
402  SCIP_CALL( SCIPpricerDeactivate(pricer, scip->set) );
403 
404  return SCIP_OKAY;
405 }
int SCIPgetNPricers(SCIP *scip)
Definition: scip_pricer.c:327
SCIP_RETCODE SCIPsetPricerInit(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICERINIT((*pricerinit)))
Definition: scip_pricer.c:213
SCIP_RETCODE SCIPpricerDeactivate(SCIP_PRICER *pricer, SCIP_SET *set)
Definition: pricer.c:363
#define NULL
Definition: def.h:253
void SCIPpricerSetInit(SCIP_PRICER *pricer, SCIP_DECL_PRICERINIT((*pricerinit)))
Definition: pricer.c:544
void SCIPpricerSetExitsol(SCIP_PRICER *pricer, SCIP_DECL_PRICEREXITSOL((*pricerexitsol)))
Definition: pricer.c:577
SCIP_PRICER * SCIPsetFindPricer(SCIP_SET *set, const char *name)
Definition: set.c:3618
#define SCIP_DECL_PRICEREXIT(x)
Definition: type_pricer.h:70
SCIP_RETCODE SCIPsetPricerFree(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICERFREE((*pricerfree)))
Definition: scip_pricer.c:189
#define FALSE
Definition: def.h:73
SCIP_PRICER * SCIPfindPricer(SCIP *scip, const char *name)
Definition: scip_pricer.c:301
#define TRUE
Definition: def.h:72
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:53
SCIP_PRICER ** SCIPgetPricers(SCIP *scip)
Definition: scip_pricer.c:314
void SCIPpricerSetFree(SCIP_PRICER *pricer, SCIP_DECL_PRICERFREE((*pricerfree)))
Definition: pricer.c:533
#define SCIP_DECL_PRICEREXITSOL(x)
Definition: type_pricer.h:92
#define SCIP_DECL_PRICERCOPY(x)
Definition: type_pricer.h:46
void SCIPpricerSetPriority(SCIP_PRICER *pricer, SCIP_SET *set, int priority)
Definition: pricer.c:618
SCIP_RETCODE SCIPsetPricerCopy(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICERCOPY((*pricercopy)))
Definition: scip_pricer.c:165
SCIP_MEM * mem
Definition: struct_scip.h:61
SCIP_RETCODE SCIPdeactivatePricer(SCIP *scip, SCIP_PRICER *pricer)
Definition: scip_pricer.c:395
void SCIPpricerSetCopy(SCIP_PRICER *pricer, SCIP_DECL_PRICERCOPY((*pricercopy)))
Definition: pricer.c:522
#define SCIPerrorMessage
Definition: pub_message.h:45
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:59
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
SCIP_RETCODE SCIPsetPricerExitsol(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICEREXITSOL((*pricerexitsol)))
Definition: scip_pricer.c:285
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 variable pricers
SCIP_RETCODE SCIPsetPricerInitsol(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICERINITSOL((*pricerinitsol)))
Definition: scip_pricer.c:261
internal methods for global SCIP settings
#define SCIP_CALL(x)
Definition: def.h:365
SCIP main data structure.
BMS_BLKMEM * setmem
Definition: struct_mem.h:39
SCIP_DECL_PRICERFARKAS(ObjPricerVRP::scip_farkas)
Definition: pricer_vrp.cpp:237
SCIP_DECL_PRICERREDCOST(ObjPricerVRP::scip_redcost)
Definition: pricer_vrp.cpp:216
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:70
#define SCIP_DECL_PRICERINITSOL(x)
Definition: type_pricer.h:81
methods for debugging
datastructures for block memory pools and memory buffers
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:117
int SCIPgetNActivePricers(SCIP *scip)
Definition: scip_pricer.c:338
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
public methods for variable pricer plugins
SCIP_RETCODE SCIPsetPricerPriority(SCIP *scip, SCIP_PRICER *pricer, int priority)
Definition: scip_pricer.c:349
int npricers
Definition: struct_set.h:99
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
SCIP_PRICER ** pricers
Definition: struct_set.h:69
void SCIPsetSortPricers(SCIP_SET *set)
Definition: set.c:3638
SCIP_RETCODE SCIPsetPricerExit(SCIP *scip, SCIP_PRICER *pricer, SCIP_DECL_PRICEREXIT((*pricerexit)))
Definition: scip_pricer.c:237
struct SCIP_PricerData SCIP_PRICERDATA
Definition: type_pricer.h:36
SCIP_RETCODE SCIPactivatePricer(SCIP *scip, SCIP_PRICER *pricer)
Definition: scip_pricer.c:374
#define SCIP_DECL_PRICERFREE(x)
Definition: type_pricer.h:54
void SCIPpricerSetExit(SCIP_PRICER *pricer, SCIP_DECL_PRICEREXIT((*pricerexit)))
Definition: pricer.c:555
datastructures for global SCIP settings