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