Scippy

SCIP

Solving Constraint Integer Programs

objexprhdlr.cpp
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-2025 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 objexprhdlr.cpp
26 * @brief C++ wrapper for expression handlers
27 * @author Kevin Kofler
28 */
29
30/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
31
32#include <cassert>
33
34#include "objexprhdlr.h"
35
36
37
38
39/*
40 * Data structures
41 */
42
43/** expression handler data */
44struct SCIP_ExprhdlrData
45{
46 scip::ObjExprhdlr* objexprhdlr; /**< expression handler object */
47 SCIP_Bool deleteobject; /**< should the expression handler object be deleted when exprhdlr is freed? */
48};
49
50
51
52
53/*
54 * Callback methods of expression handler
55 */
56
57extern "C"
58{
59
60/** copy method for expression handler plugins (called when SCIP copies plugins) */
61static
62SCIP_DECL_EXPRCOPYHDLR(exprCopyhdlrObj)
63{ /*lint --e{715}*/
64 SCIP_EXPRHDLRDATA* exprhdlrdata;
65
66 assert(scip != NULL);
67
68 exprhdlrdata = SCIPexprhdlrGetData(sourceexprhdlr);
69 assert(exprhdlrdata != NULL);
70 assert(exprhdlrdata->objexprhdlr != NULL);
71 assert(exprhdlrdata->objexprhdlr->scip_ != scip);
72
73 if( exprhdlrdata->objexprhdlr->iscloneable() )
74 {
75 scip::ObjExprhdlr* newobjexprhdlr;
76 newobjexprhdlr = dynamic_cast<scip::ObjExprhdlr*> (exprhdlrdata->objexprhdlr->clone(scip));
77
78 /* call include method of expression handler object */
79 SCIP_CALL( SCIPincludeObjExprhdlr(scip, newobjexprhdlr, TRUE) );
80 }
81
82 return SCIP_OKAY;
83}
84
85/** destructor of expression handler to free user data (called when SCIP is exiting) */
86static
87SCIP_DECL_EXPRFREEHDLR(exprFreehdlrObj)
88{ /*lint --e{715}*/
89 assert(exprhdlrdata != NULL);
90 assert(*exprhdlrdata != NULL);
91 assert((*exprhdlrdata)->objexprhdlr != NULL);
92 assert((*exprhdlrdata)->objexprhdlr->scip_ == scip);
93
94 /* call virtual method of exprhdlr object */
95 SCIP_CALL( (*exprhdlrdata)->objexprhdlr->scip_freehdlr(scip, exprhdlr, exprhdlrdata) );
96
97 /* free exprhdlr object */
98 if( (*exprhdlrdata)->deleteobject )
99 delete (*exprhdlrdata)->objexprhdlr;
100
101 /* free exprhdlr data */
102 delete (*exprhdlrdata);
103 *exprhdlrdata = NULL;
104
105 return SCIP_OKAY;
106}
107
108
109/** point evaluation callback of expression handler */
110static
112{ /*lint --e{715}*/
113 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
114 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
115 assert(exprhdlrdata != NULL);
116 assert(exprhdlrdata->objexprhdlr != NULL);
117
118 /* call virtual method of exprhdlr object */
119 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_eval(scip, expr, val, sol) );
120
121 return SCIP_OKAY;
122}
123
124
125/** data copy callback of expression handler */
126static
128{ /*lint --e{715}*/
129 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(targetexprhdlr);
130 assert(exprhdlrdata != NULL);
131 assert(exprhdlrdata->objexprhdlr != NULL);
132
133 /* call virtual method of exprhdlr object */
134 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_copydata(targetscip, targetexprhdlr, targetexprdata, sourcescip, sourceexpr) );
135
136 return SCIP_OKAY;
137}
138
139
140/** data free callback of expression handler */
141static
143{ /*lint --e{715}*/
144 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
145 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
146 assert(exprhdlrdata != NULL);
147 assert(exprhdlrdata->objexprhdlr != NULL);
148
149 /* call virtual method of exprhdlr object */
150 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_freedata(scip, expr) );
151
152 return SCIP_OKAY;
153}
154
155
156/** simplify callback of expression handler */
157static
159{ /*lint --e{715}*/
160 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
161 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
162 assert(exprhdlrdata != NULL);
163 assert(exprhdlrdata->objexprhdlr != NULL);
164
165 /* call virtual method of exprhdlr object */
166 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_simplify(scip, expr, simplifiedexpr, ownercreate, ownercreatedata) );
167
168 return SCIP_OKAY;
169}
170
171
172/** compare callback of expression handler */
173static
175{ /*lint --e{715}*/
176 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr1);
177 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
178 assert(exprhdlrdata != NULL);
179 assert(exprhdlrdata->objexprhdlr != NULL);
180
181 /* call virtual method of exprhdlr object */
182 return exprhdlrdata->objexprhdlr->scip_compare(scip, expr1, expr2);
183}
184
185
186/** print callback of expression handler */
187static
189{ /*lint --e{715}*/
190 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
191 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
192 assert(exprhdlrdata != NULL);
193 assert(exprhdlrdata->objexprhdlr != NULL);
194
195 /* call virtual method of exprhdlr object */
196 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_print(scip, expr, stage, currentchild, parentprecedence, file) );
197
198 return SCIP_OKAY;
199}
200
201
202/** parse callback of expression handler */
203static
205{ /*lint --e{715}*/
206 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
207 assert(exprhdlrdata != NULL);
208 assert(exprhdlrdata->objexprhdlr != NULL);
209
210 /* call virtual method of exprhdlr object */
211 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_parse(scip, exprhdlr, string, endstring,
212 expr, success, ownercreate, ownercreatedata) );
213
214 return SCIP_OKAY;
215}
216
217
218/** backward derivative evaluation callback of expression handler */
219static
221{ /*lint --e{715}*/
222 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
223 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
224 assert(exprhdlrdata != NULL);
225 assert(exprhdlrdata->objexprhdlr != NULL);
226
227 /* call virtual method of exprhdlr object */
228 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_bwdiff(scip, expr, childidx, val) );
229
230 return SCIP_OKAY;
231}
232
233
234/** forward derivative evaluation callback of expression handler */
235static
237{ /*lint --e{715}*/
238 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
239 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
240 assert(exprhdlrdata != NULL);
241 assert(exprhdlrdata->objexprhdlr != NULL);
242
243 /* call virtual method of exprhdlr object */
244 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_fwdiff(scip, expr, dot, direction) );
245
246 return SCIP_OKAY;
247}
248
249
250/** backward over forward derivative evaluation callback of expression handler */
251static
253{ /*lint --e{715}*/
254 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
255 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
256 assert(exprhdlrdata != NULL);
257 assert(exprhdlrdata->objexprhdlr != NULL);
258
259 /* call virtual method of exprhdlr object */
260 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_bwfwdiff(scip, expr, childidx, bardot, direction) );
261
262 return SCIP_OKAY;
263}
264
265
266/** interval evaluation callback of expression handler */
267static
269{ /*lint --e{715}*/
270 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
271 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
272 assert(exprhdlrdata != NULL);
273 assert(exprhdlrdata->objexprhdlr != NULL);
274
275 /* call virtual method of exprhdlr object */
276 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_inteval(scip, expr, interval, intevalvar, intevalvardata) );
277
278 return SCIP_OKAY;
279}
280
281
282/** estimation callback of expression handler */
283static
285{ /*lint --e{715}*/
286 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
287 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
288 assert(exprhdlrdata != NULL);
289 assert(exprhdlrdata->objexprhdlr != NULL);
290
291 /* call virtual method of exprhdlr object */
292 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_estimate(scip, expr, localbounds, globalbounds,
293 refpoint, overestimate, targetvalue, coefs, constant, islocal, success, branchcand) );
294
295 return SCIP_OKAY;
296}
297
298
299/** initial estimators callback of expression handler */
300static
301SCIP_DECL_EXPRINITESTIMATES(exprInitestimatesObj)
302{ /*lint --e{715}*/
303 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
304 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
305 assert(exprhdlrdata != NULL);
306 assert(exprhdlrdata->objexprhdlr != NULL);
307
308 /* call virtual method of exprhdlr object */
309 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_initestimates(scip, expr, bounds, overestimate,
310 coefs, constant, nreturned) );
311
312 return SCIP_OKAY;
313}
314
315
316/** reverse propagation callback of expression handler */
317static
318SCIP_DECL_EXPRREVERSEPROP(exprReversepropObj)
319{ /*lint --e{715}*/
320 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
321 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
322 assert(exprhdlrdata != NULL);
323 assert(exprhdlrdata->objexprhdlr != NULL);
324
325 /* call virtual method of exprhdlr object */
326 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_reverseprop(scip, expr, bounds, childrenbounds, infeasible) );
327
328 return SCIP_OKAY;
329}
330
331
332/** hash callback of expression handler */
333static
335{ /*lint --e{715}*/
336 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
337 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
338 assert(exprhdlrdata != NULL);
339 assert(exprhdlrdata->objexprhdlr != NULL);
340
341 /* call virtual method of exprhdlr object */
342 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_hash(scip, expr, hashkey, childrenhashes) );
343
344 return SCIP_OKAY;
345}
346
347
348/** curvature callback of expression handler */
349static
350SCIP_DECL_EXPRCURVATURE(exprCurvatureObj)
351{ /*lint --e{715}*/
352 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
353 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
354 assert(exprhdlrdata != NULL);
355 assert(exprhdlrdata->objexprhdlr != NULL);
356
357 /* call virtual method of exprhdlr object */
358 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_curvature(scip, expr, exprcurvature, success, childcurv) );
359
360 return SCIP_OKAY;
361}
362
363
364/** monotonicity callback of expression handler */
365static
366SCIP_DECL_EXPRMONOTONICITY(exprMonotonicityObj)
367{ /*lint --e{715}*/
368 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
369 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
370 assert(exprhdlrdata != NULL);
371 assert(exprhdlrdata->objexprhdlr != NULL);
372
373 /* call virtual method of exprhdlr object */
374 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_monotonicity(scip, expr, childidx, result) );
375
376 return SCIP_OKAY;
377}
378
379
380/** integrality callback of expression handler */
381static
382SCIP_DECL_EXPRINTEGRALITY(exprIntegralityObj)
383{ /*lint --e{715}*/
384 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
385 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
386 assert(exprhdlrdata != NULL);
387 assert(exprhdlrdata->objexprhdlr != NULL);
388
389 /* call virtual method of exprhdlr object */
390 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_integrality(scip, expr, integrality) );
391
392 return SCIP_OKAY;
393}
394
395
396/** symmetry information callback of expression handler */
397static
398SCIP_DECL_EXPRGETSYMDATA(exprGetsymdataObj)
399{ /*lint --e{715}*/
400 SCIP_EXPRHDLR* exprhdlr = SCIPexprGetHdlr(expr);
401 SCIP_EXPRHDLRDATA* exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
402 assert(exprhdlrdata != NULL);
403 assert(exprhdlrdata->objexprhdlr != NULL);
404
405 /* call virtual method of exprhdlr object */
406 SCIP_CALL( exprhdlrdata->objexprhdlr->scip_getsymdata(scip, expr, symdata) );
407
408 return SCIP_OKAY;
409}
410}
411
412
413/*
414 * expression handler specific interface methods
415 */
416
417/** creates the expression handler for the given expression handler object and includes it in SCIP */
419 SCIP* scip, /**< SCIP data structure */
420 scip::ObjExprhdlr* objexprhdlr, /**< expression handler object */
421 SCIP_Bool deleteobject, /**< should the expression handler object be deleted when exprhdlr is freed? */
422 SCIP_EXPRHDLR** cexprhdlr /**< buffer to store C plugin that corresponds to expression handler object, or 0 if not required */
423 )
424{
425 SCIP_EXPRHDLR* exprhdlr;
426 SCIP_EXPRHDLRDATA* exprhdlrdata;
427
428 assert(scip != NULL);
429 assert(objexprhdlr != NULL);
430 assert(objexprhdlr->scip_ == scip);
431
432 /* create obj expression handler data */
433 exprhdlrdata = new SCIP_EXPRHDLRDATA;
434 exprhdlrdata->objexprhdlr = objexprhdlr;
435 exprhdlrdata->deleteobject = deleteobject;
436
437 /* include expression handler */
438 SCIP_CALL( SCIPincludeExprhdlr(scip, &exprhdlr, objexprhdlr->scip_name_, objexprhdlr->scip_desc_,
439 objexprhdlr->scip_precedence_, exprEvalObj, exprhdlrdata) ); /*lint !e429*/
440
441 SCIPexprhdlrSetCopyFreeHdlr(exprhdlr, exprCopyhdlrObj, exprFreehdlrObj);
442 if( objexprhdlr->scip_has_copydata_ || objexprhdlr->scip_has_freedata_ )
444 objexprhdlr->scip_has_copydata_ ? exprCopydataObj : NULL,
445 objexprhdlr->scip_has_freedata_ ? exprFreedataObj : NULL);
446 if( objexprhdlr->scip_has_simplify_ )
447 SCIPexprhdlrSetSimplify(exprhdlr, exprSimplifyObj);
448 if( objexprhdlr->scip_has_compare_ )
449 SCIPexprhdlrSetCompare(exprhdlr, exprCompareObj);
450 if( objexprhdlr->scip_has_print_ )
451 SCIPexprhdlrSetPrint(exprhdlr, exprPrintObj);
452 if( objexprhdlr->scip_has_parse_ )
453 SCIPexprhdlrSetParse(exprhdlr, exprParseObj);
454 if( objexprhdlr->scip_has_bwdiff_ || objexprhdlr->scip_has_fwdiff_ || objexprhdlr->scip_has_bwfwdiff_ )
455 SCIPexprhdlrSetDiff(exprhdlr,
456 objexprhdlr->scip_has_bwdiff_ ? exprBwdiffObj : NULL,
457 objexprhdlr->scip_has_fwdiff_ ? exprFwdiffObj : NULL,
458 objexprhdlr->scip_has_bwfwdiff_ ? exprBwfwdiffObj : NULL);
459 if( objexprhdlr->scip_has_inteval_ )
460 SCIPexprhdlrSetIntEval(exprhdlr, exprIntevalObj);
461 if( objexprhdlr->scip_has_estimate_ || objexprhdlr->scip_has_initestimates_ )
463 objexprhdlr->scip_has_initestimates_ ? exprInitestimatesObj : NULL,
464 objexprhdlr->scip_has_estimate_ ? exprEstimateObj : NULL);
465 if( objexprhdlr->scip_has_reverseprop_ )
466 SCIPexprhdlrSetReverseProp(exprhdlr, exprReversepropObj);
467 if( objexprhdlr->scip_has_hash_ )
468 SCIPexprhdlrSetHash(exprhdlr, exprHashObj);
469 if( objexprhdlr->scip_has_curvature_ )
470 SCIPexprhdlrSetCurvature(exprhdlr, exprCurvatureObj);
471 if( objexprhdlr->scip_has_monotonicity_ )
472 SCIPexprhdlrSetMonotonicity(exprhdlr, exprMonotonicityObj);
473 if( objexprhdlr->scip_has_integrality_ )
474 SCIPexprhdlrSetIntegrality(exprhdlr, exprIntegralityObj);
475 if( objexprhdlr->scip_has_getsymdata_ )
476 SCIPexprhdlrSetGetSymdata(exprhdlr, exprGetsymdataObj);
477
478 if( cexprhdlr != NULL )
479 *cexprhdlr = exprhdlr;
480
481 return SCIP_OKAY; /*lint !e429*/
482}
483
484/** returns the exprhdlr object of the given name, or 0 if not existing */
486 SCIP* scip, /**< SCIP data structure */
487 const char* name /**< name of expression handler */
488 )
489{
490 SCIP_EXPRHDLR* exprhdlr;
491 SCIP_EXPRHDLRDATA* exprhdlrdata;
492
493 exprhdlr = SCIPfindExprhdlr(scip, name);
494 if( exprhdlr == NULL )
495 return 0;
496
497 exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
498 assert(exprhdlrdata != NULL);
499
500 return exprhdlrdata->objexprhdlr;
501}
502
503/** returns the exprhdlr object for the given expression handler */
505 SCIP* scip, /**< SCIP data structure */
506 SCIP_EXPRHDLR* exprhdlr /**< expression handler */
507 )
508{
509 SCIP_EXPRHDLRDATA* exprhdlrdata;
510
511 assert(scip != NULL);
512 exprhdlrdata = SCIPexprhdlrGetData(exprhdlr);
513 assert(exprhdlrdata != NULL);
514
515 return exprhdlrdata->objexprhdlr;
516}
C++ wrapper for expression handlers.
Definition: objexprhdlr.h:54
const SCIP_Bool scip_has_reverseprop_
Definition: objexprhdlr.h:107
const unsigned int scip_precedence_
Definition: objexprhdlr.h:68
const SCIP_Bool scip_has_bwdiff_
Definition: objexprhdlr.h:89
const SCIP_Bool scip_has_hash_
Definition: objexprhdlr.h:110
const SCIP_Bool scip_has_fwdiff_
Definition: objexprhdlr.h:92
const SCIP_Bool scip_has_bwfwdiff_
Definition: objexprhdlr.h:95
const SCIP_Bool scip_has_compare_
Definition: objexprhdlr.h:80
const SCIP_Bool scip_has_parse_
Definition: objexprhdlr.h:86
const SCIP_Bool scip_has_curvature_
Definition: objexprhdlr.h:113
const SCIP_Bool scip_has_initestimates_
Definition: objexprhdlr.h:104
const SCIP_Bool scip_has_integrality_
Definition: objexprhdlr.h:119
const SCIP_Bool scip_has_freedata_
Definition: objexprhdlr.h:74
const SCIP_Bool scip_has_copydata_
Definition: objexprhdlr.h:71
const SCIP_Bool scip_has_estimate_
Definition: objexprhdlr.h:101
const SCIP_Bool scip_has_getsymdata_
Definition: objexprhdlr.h:122
const SCIP_Bool scip_has_print_
Definition: objexprhdlr.h:83
const SCIP_Bool scip_has_simplify_
Definition: objexprhdlr.h:77
const SCIP_Bool scip_has_monotonicity_
Definition: objexprhdlr.h:116
const SCIP_Bool scip_has_inteval_
Definition: objexprhdlr.h:98
#define NULL
Definition: def.h:248
#define SCIP_Bool
Definition: def.h:91
#define TRUE
Definition: def.h:93
#define SCIP_CALL(x)
Definition: def.h:355
void SCIPexprhdlrSetIntegrality(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRINTEGRALITY((*integrality)))
Definition: expr.c:440
void SCIPexprhdlrSetCopyFreeData(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRCOPYDATA((*copydata)), SCIP_DECL_EXPRFREEDATA((*freedata)))
Definition: expr.c:383
void SCIPexprhdlrSetPrint(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRPRINT((*print)))
Definition: expr.c:396
void SCIPexprhdlrSetGetSymdata(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRGETSYMDATA((*getsymdata)))
Definition: expr.c:521
void SCIPexprhdlrSetHash(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRHASH((*hash)))
Definition: expr.c:451
SCIP_EXPRHDLRDATA * SCIPexprhdlrGetData(SCIP_EXPRHDLR *exprhdlr)
Definition: expr.c:575
void SCIPexprhdlrSetCopyFreeHdlr(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRCOPYHDLR((*copyhdlr)), SCIP_DECL_EXPRFREEHDLR((*freehdlr)))
Definition: expr.c:370
void SCIPexprhdlrSetDiff(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRBWDIFF((*bwdiff)), SCIP_DECL_EXPRFWDIFF((*fwdiff)), SCIP_DECL_EXPRBWFWDIFF((*bwfwdiff)))
Definition: expr.c:473
void SCIPexprhdlrSetReverseProp(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRREVERSEPROP((*reverseprop)))
Definition: expr.c:510
void SCIPexprhdlrSetParse(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRPARSE((*parse)))
Definition: expr.c:407
void SCIPexprhdlrSetEstimate(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRINITESTIMATES((*initestimates)), SCIP_DECL_EXPRESTIMATE((*estimate)))
Definition: expr.c:532
void SCIPexprhdlrSetMonotonicity(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRMONOTONICITY((*monotonicity)))
Definition: expr.c:429
void SCIPexprhdlrSetIntEval(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRINTEVAL((*inteval)))
Definition: expr.c:488
void SCIPexprhdlrSetCurvature(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRCURVATURE((*curvature)))
Definition: expr.c:418
SCIP_RETCODE SCIPincludeExprhdlr(SCIP *scip, SCIP_EXPRHDLR **exprhdlr, const char *name, const char *desc, unsigned int precedence, SCIP_DECL_EXPREVAL((*eval)), SCIP_EXPRHDLRDATA *data)
Definition: scip_expr.c:847
void SCIPexprhdlrSetCompare(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRCOMPARE((*compare)))
Definition: expr.c:462
SCIP_EXPRHDLR * SCIPfindExprhdlr(SCIP *scip, const char *name)
Definition: scip_expr.c:894
void SCIPexprhdlrSetSimplify(SCIP_EXPRHDLR *exprhdlr, SCIP_DECL_EXPRSIMPLIFY((*simplify)))
Definition: expr.c:499
SCIP_EXPRHDLR * SCIPexprGetHdlr(SCIP_EXPR *expr)
Definition: expr.c:3895
static SCIP_DECL_EXPRHASH(exprHashObj)
static SCIP_DECL_EXPRFREEDATA(exprFreedataObj)
static SCIP_DECL_EXPRSIMPLIFY(exprSimplifyObj)
static SCIP_DECL_EXPRCOPYDATA(exprCopydataObj)
scip::ObjExprhdlr * SCIPfindObjExprhdlr(SCIP *scip, const char *name)
static SCIP_DECL_EXPRREVERSEPROP(exprReversepropObj)
static SCIP_DECL_EXPRFWDIFF(exprFwdiffObj)
static SCIP_DECL_EXPRESTIMATE(exprEstimateObj)
static SCIP_DECL_EXPREVAL(exprEvalObj)
static SCIP_DECL_EXPRMONOTONICITY(exprMonotonicityObj)
scip::ObjExprhdlr * SCIPgetObjExprhdlr(SCIP *scip, SCIP_EXPRHDLR *exprhdlr)
static SCIP_DECL_EXPRCURVATURE(exprCurvatureObj)
static SCIP_DECL_EXPRPARSE(exprParseObj)
static SCIP_DECL_EXPRBWFWDIFF(exprBwfwdiffObj)
static SCIP_DECL_EXPRCOPYHDLR(exprCopyhdlrObj)
Definition: objexprhdlr.cpp:62
static SCIP_DECL_EXPRBWDIFF(exprBwdiffObj)
static SCIP_DECL_EXPRFREEHDLR(exprFreehdlrObj)
Definition: objexprhdlr.cpp:87
static SCIP_DECL_EXPRINTEGRALITY(exprIntegralityObj)
SCIP_RETCODE SCIPincludeObjExprhdlr(SCIP *scip, scip::ObjExprhdlr *objexprhdlr, SCIP_Bool deleteobject, SCIP_EXPRHDLR **cexprhdlr)
static SCIP_DECL_EXPRGETSYMDATA(exprGetsymdataObj)
static SCIP_DECL_EXPRCOMPARE(exprCompareObj)
static SCIP_DECL_EXPRINTEVAL(exprIntevalObj)
static SCIP_DECL_EXPRINITESTIMATES(exprInitestimatesObj)
static SCIP_DECL_EXPRPRINT(exprPrintObj)
C++ wrapper for expression handlers.
struct SCIP_ExprhdlrData SCIP_EXPRHDLRDATA
Definition: type_expr.h:195
@ SCIP_OKAY
Definition: type_retcode.h:42
enum SCIP_Retcode SCIP_RETCODE
Definition: type_retcode.h:63