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