Scippy

    SCIP

    Solving Constraint Integer Programs

    cons_integral.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-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 cons_integral.c
    26 * @ingroup DEFPLUGINS_CONS
    27 * @brief constraint handler for the integrality constraint
    28 * @author Tobias Achterberg
    29 */
    30
    31/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    32
    33#include "scip/cons_integral.h"
    34#include "scip/pub_cons.h"
    35#include "scip/pub_message.h"
    36#include "scip/pub_var.h"
    37#include "scip/pub_sol.h"
    38#include "scip/scip_branch.h"
    39#include "scip/scip_cons.h"
    40#include "scip/scip_exact.h"
    41#include "scip/scip_lp.h"
    42#include "scip/scip_lpexact.h"
    43#include "scip/scip_message.h"
    44#include "scip/scip_numerics.h"
    45#include "scip/scip_prob.h"
    46#include "scip/scip_probing.h"
    47#include "scip/scip_sol.h"
    48#include "scip/scip_mem.h"
    49#include "scip/rational.h"
    50#include <string.h>
    51
    52
    53#define CONSHDLR_NAME "integral"
    54#define CONSHDLR_DESC "integrality constraint"
    55#define CONSHDLR_ENFOPRIORITY 0 /**< priority of the constraint handler for constraint enforcing */
    56#define CONSHDLR_CHECKPRIORITY 0 /**< priority of the constraint handler for checking feasibility */
    57#define CONSHDLR_EAGERFREQ -1 /**< frequency for using all instead of only the useful constraints in separation,
    58 * propagation and enforcement, -1 for no eager evaluations, 0 for first only */
    59#define CONSHDLR_NEEDSCONS FALSE /**< should the constraint handler be skipped, if no constraints are available? */
    60
    61
    62/** checks whether primal solution satisfies all integrality restrictions without tolerances */
    63static
    65 SCIP* scip, /**< SCIP data structure */
    66 SCIP_SOL* sol, /**< solution to be checked */
    67 SCIP_Bool printreason, /**< should infeasisibility reason be printed? */
    68 SCIP_RESULT* result /**< pointer to store the result of the lp enforcement call */
    69 )
    70{
    71 SCIP_RATIONAL* solval;
    72 SCIP_Bool integral;
    73 SCIP_VAR** vars;
    74 int nintegers;
    75 int ncontimplvars;
    76 int ncontvars;
    77 int v;
    78
    79 assert(result != NULL);
    80
    81 SCIPdebugMessage("checking exact integrality of primal solution:\n");
    82
    83 integral = TRUE;
    84
    86
    87 /* get all problem variables and integer region in vars array */
    88 SCIP_CALL( SCIPgetSolVarsData(scip, sol, &vars, &nintegers, NULL, NULL, NULL, NULL, &ncontimplvars, &ncontvars) );
    89 nintegers -= ncontimplvars + ncontvars;
    90 assert(nintegers >= 0);
    91
    92 /* check whether primal solution satisfies all integrality restrictions */
    93 for( v = 0; v < nintegers && integral; ++v )
    94 {
    95 /* if the solution is exact we check the exact data, otherwise we check the fp data */
    96 if( SCIPsolIsExact(sol) )
    97 SCIPgetSolValExact(scip, sol, vars[v], solval);
    98 else
    99 SCIPrationalSetReal(solval, SCIPgetSolVal(scip, sol, vars[v]));
    100
    101 assert(SCIPvarGetProbindex(vars[v]) == v);
    102 assert(SCIPvarGetType(vars[v]) == SCIP_VARTYPE_BINARY || SCIPvarGetType(vars[v]) == SCIP_VARTYPE_INTEGER );
    103
    104 if( !SCIPrationalIsIntegral(solval) )
    105 {
    106 *result = SCIP_INFEASIBLE;
    107 if( printreason )
    108 {
    109 SCIPinfoMessage(scip, NULL, "violation: integrality condition of variable <%s> =",
    110 SCIPvarGetName(vars[v]));
    112 SCIPinfoMessage(scip, NULL, "\n");
    113 }
    114 integral = FALSE;
    115 }
    116 }
    117
    119
    120 return SCIP_OKAY;
    121}
    122
    123/*
    124 * Callback methods
    125 */
    126
    127/** copy method for constraint handler plugins (called when SCIP copies plugins) */
    128static
    129SCIP_DECL_CONSHDLRCOPY(conshdlrCopyIntegral)
    130{ /*lint --e{715}*/
    131 assert(scip != NULL);
    132 assert(conshdlr != NULL);
    133 assert(strcmp(SCIPconshdlrGetName(conshdlr), CONSHDLR_NAME) == 0);
    134
    135 /* call inclusion method of constraint handler */
    137
    138 *valid = TRUE;
    139
    140 return SCIP_OKAY;
    141}
    142
    143#define consCopyIntegral NULL
    144
    145#define consEnfopsIntegral NULL
    146
    147/** constraint enforcing method of constraint handler for LP solutions */
    148static
    149SCIP_DECL_CONSENFOLP(consEnfolpIntegral)
    150{ /*lint --e{715}*/
    151 assert(conshdlr != NULL);
    152 assert(strcmp(SCIPconshdlrGetName(conshdlr), CONSHDLR_NAME) == 0);
    153 assert(scip != NULL);
    154 assert(conss == NULL);
    155 assert(nconss == 0);
    156 assert(result != NULL);
    157
    158 SCIPdebugMsg(scip, "Enfolp method of integrality constraint: %d fractional variables\n", SCIPgetNLPBranchCands(scip));
    159
    160 *result = SCIP_DIDNOTRUN;
    161
    162 /* if the root LP is unbounded, we want to terminate with UNBOUNDED or INFORUNBOUNDED,
    163 * depending on whether we are able to construct an integral solution; in any case we do not want to branch
    164 */
    166 {
    167 if( SCIPgetNLPBranchCands(scip) == 0 )
    168 *result = SCIP_FEASIBLE;
    169 else
    170 *result = SCIP_INFEASIBLE;
    171 return SCIP_OKAY;
    172 }
    173
    174 /* call branching methods */
    175 SCIP_CALL( SCIPbranchLP(scip, result) );
    176
    177 if( SCIPisExact(scip) && *result == SCIP_DIDNOTRUN )
    178 {
    179 SCIP_CALL( SCIPbranchLPExact(scip, result) );
    180 }
    181
    182 /* if no branching was done, the LP solution was not fractional */
    183 if( *result == SCIP_DIDNOTRUN )
    184 *result = SCIP_FEASIBLE;
    185
    186 return SCIP_OKAY;
    187}
    188
    189/** constraint enforcing method of constraint handler for relaxation solutions */
    190static
    191SCIP_DECL_CONSENFORELAX(consEnforelaxIntegral)
    192{ /*lint --e{715}*/
    193 SCIP_VAR** vars;
    194 int nbinvars;
    195 int nintvars;
    196 int i;
    197
    198 assert(conshdlr != NULL);
    199 assert(strcmp(SCIPconshdlrGetName(conshdlr), CONSHDLR_NAME) == 0);
    200 assert(scip != NULL);
    201 assert(conss == NULL);
    202 assert(nconss == 0);
    203 assert(result != NULL);
    204
    205 SCIPdebugMsg(scip, "Enforelax method of integrality constraint\n");
    206
    207 *result = SCIP_FEASIBLE;
    208
    209 SCIP_CALL( SCIPgetVarsData(scip, &vars, NULL, &nbinvars, &nintvars, NULL, NULL) );
    210
    211 int nintegers = nbinvars + nintvars + SCIPgetNBinImplVars(scip) + SCIPgetNIntImplVars(scip);
    212
    213 for( i = 0; i < nintegers; ++i )
    214 {
    215 assert(vars[i] != NULL);
    216 assert(SCIPvarIsIntegral(vars[i]));
    217
    218 if( !SCIPisFeasIntegral(scip, SCIPgetSolVal(scip, sol, vars[i])) )
    219 {
    220 if( SCIPisFeasEQ(scip, SCIPvarGetLbLocal(vars[i]), SCIPvarGetUbLocal(vars[i])) )
    221 {
    222 SCIPdebugMsg(scip, "Cutoff for integral variable %s with bounds [%f, %f] and value %f\n", SCIPvarGetName(vars[i]),
    223 SCIPvarGetLbLocal(vars[i]), SCIPvarGetUbLocal(vars[i]), SCIPgetSolVal(scip, sol, vars[i]));
    224 *result = SCIP_CUTOFF;
    225 return SCIP_OKAY;
    226 }
    227 else
    228 {
    229 /* @todo better way to handle this would be a BRANCHEXECRELAX callback that could also implement pseudo costs for
    230 * relaxation solutions instead of using the enforelaxcallback which is mainly intended for spatial branching
    231 */
    232 SCIP_CALL( SCIPaddExternBranchCand(scip, vars[i], 0.2, SCIPgetSolVal(scip, sol, vars[i])) );
    233 *result = SCIP_INFEASIBLE;
    234 }
    235 }
    236 }
    237
    238 /* if we have found a branching candidate, immediately branch to be able to return SCIP_BRANCHED and stop the
    239 * enforcement loop
    240 */
    241 if( *result == SCIP_INFEASIBLE )
    242 {
    243 /* call branching methods for external candidates */
    244 SCIP_CALL( SCIPbranchExtern(scip, result) );
    245
    246 /* since we only call it if we added external candidates, the branching rule should always be able to branch */
    247 assert(*result != SCIP_DIDNOTRUN);
    248 }
    249
    250 return SCIP_OKAY;
    251}
    252
    253/** feasibility check method of constraint handler for integral solutions */
    254static
    255SCIP_DECL_CONSCHECK(consCheckIntegral)
    256{ /*lint --e{715}*/
    257 SCIP_VAR** vars;
    258 SCIP_Real solval;
    259 int nintegers;
    260 int ncontimplvars;
    261 int ncontvars;
    262 int v;
    263
    264 assert(scip != NULL);
    265 assert(sol != NULL);
    266 assert(strcmp(SCIPconshdlrGetName(conshdlr), CONSHDLR_NAME) == 0);
    267
    268 SCIPdebugMsg(scip, "Check method of integrality constraint (checkintegrality=%u)\n", checkintegrality);
    269
    270 *result = SCIP_FEASIBLE;
    271
    272 if( !checkintegrality )
    273 return SCIP_OKAY;
    274
    275 SCIP_CALL( SCIPgetSolVarsData(scip, sol, &vars, &nintegers, NULL, NULL, NULL, NULL, &ncontimplvars, &ncontvars) );
    276 nintegers -= ncontimplvars + ncontvars;
    277 assert(nintegers >= 0);
    278
    279 if( !SCIPisExact(scip) )
    280 {
    281 for( v = 0; v < nintegers; ++v )
    282 {
    283 solval = SCIPgetSolVal(scip, sol, vars[v]);
    284
    285 if( sol != NULL )
    287
    288 if( !SCIPisFeasIntegral(scip, solval) )
    289 {
    290 *result = SCIP_INFEASIBLE;
    291
    292 if( printreason )
    293 {
    294 SCIPinfoMessage(scip, NULL, "violation: integrality condition of variable <%s> = %.15g\n",
    295 SCIPvarGetName(vars[v]), solval);
    296 }
    297 if( !completely )
    298 break;
    299 }
    300 }
    301 }
    302 /* in exact solving mode, we have to check integrality without tolerances */
    303 else
    304 {
    305 SCIP_CALL( checkIntegralityExact(scip, sol, printreason, result) );
    306 }
    307
    308 return SCIP_OKAY;
    309}
    310
    311/** variable rounding lock method of constraint handler */
    312static
    313SCIP_DECL_CONSLOCK(consLockIntegral)
    314{ /*lint --e{715}*/
    315 return SCIP_OKAY;
    316}
    317
    318/** constraint handler method to suggest dive bound changes during the generic diving algorithm */
    319static
    320SCIP_DECL_CONSGETDIVEBDCHGS(consGetDiveBdChgsIntegral)
    321{ /*lint --e{715}*/
    322 SCIP_VAR** vars;
    323 SCIP_Real solval;
    324 SCIP_Real score;
    325 SCIP_Real bestscore;
    326 SCIP_Bool bestroundup;
    327 int nintegers;
    328 int ncontvars;
    329 int nbinimplvars;
    330 int nintimplvars;
    331 int ncontimplvars;
    332 int bestcandidx;
    333 int v;
    334
    335 assert(scip != NULL);
    336 assert(diveset != NULL);
    337 assert(sol != NULL);
    338 assert(strcmp(SCIPconshdlrGetName(conshdlr), CONSHDLR_NAME) == 0);
    339
    340 SCIPdebugMsg(scip, "integral constraint handler: determine diving bound changes\n");
    341
    342 SCIP_CALL( SCIPgetSolVarsData(scip, sol, &vars, &nintegers, NULL, NULL,
    343 &nbinimplvars, &nintimplvars, &ncontimplvars, &ncontvars) );
    344 nintegers = nintegers - nbinimplvars - nintimplvars - ncontimplvars - ncontvars;
    345 assert(nintegers >= 0);
    346
    347 bestscore = SCIP_REAL_MIN;
    348 bestcandidx = -1;
    349 *success = FALSE;
    350 bestroundup = FALSE; /* only for lint */
    351
    352 /* loop over solution values and get score of fractional variables */
    353 for( v = 0; v < nintegers; ++v )
    354 {
    355 solval = SCIPgetSolVal(scip, sol, vars[v]);
    356
    357 /* skip variable if solution value disagrees with the local bounds */
    358 if( ! SCIPisFeasIntegral(scip, solval) && SCIPisGE(scip, solval, SCIPvarGetLbLocal(vars[v])) && SCIPisLE(scip, solval, SCIPvarGetUbLocal(vars[v])) )
    359 {
    360 SCIP_Bool roundup;
    361
    363 solval - SCIPfloor(scip, solval), &score, &roundup) );
    364
    365 /* we search for candidates with maximum score */
    366 if( score > bestscore )
    367 {
    368 bestcandidx = v;
    369 bestscore = score;
    370 bestroundup = roundup;
    371 *success = TRUE;
    372 }
    373 }
    374 }
    375
    376 assert(!(*success) || bestcandidx >= 0);
    377
    378 if( *success )
    379 {
    380 solval = SCIPgetSolVal(scip, sol, vars[bestcandidx]);
    381
    382 /* if we want to round up the best candidate, it is added as the preferred bound change */
    384 SCIPceil(scip, solval), bestroundup) );
    386 SCIPfloor(scip, solval), ! bestroundup) );
    387 }
    388
    389 return SCIP_OKAY;
    390}
    391
    392/*
    393 * constraint specific interface methods
    394 */
    395
    396/** creates the handler for integrality constraint and includes it in SCIP */
    398 SCIP* scip /**< SCIP data structure */
    399 )
    400{
    401 SCIP_CONSHDLR* conshdlr;
    402
    403 /* include constraint handler */
    406 consEnfolpIntegral, consEnfopsIntegral, consCheckIntegral, consLockIntegral, NULL) );
    407
    408 assert(conshdlr != NULL);
    409
    410 /* mark constraint handler as exact */
    411 SCIPconshdlrMarkExact(conshdlr);
    412
    413 /* set non-fundamental callbacks via specific setter functions */
    414 SCIP_CALL( SCIPsetConshdlrCopy(scip, conshdlr, conshdlrCopyIntegral, consCopyIntegral) );
    415 SCIP_CALL( SCIPsetConshdlrGetDiveBdChgs(scip, conshdlr, consGetDiveBdChgsIntegral) );
    416 SCIP_CALL( SCIPsetConshdlrEnforelax(scip, conshdlr, consEnforelaxIntegral) );
    417
    418 return SCIP_OKAY;
    419}
    #define consCopyIntegral
    #define CONSHDLR_NEEDSCONS
    Definition: cons_integral.c:59
    static SCIP_DECL_CONSCHECK(consCheckIntegral)
    #define CONSHDLR_CHECKPRIORITY
    Definition: cons_integral.c:56
    #define CONSHDLR_DESC
    Definition: cons_integral.c:54
    static SCIP_DECL_CONSENFORELAX(consEnforelaxIntegral)
    static SCIP_RETCODE checkIntegralityExact(SCIP *scip, SCIP_SOL *sol, SCIP_Bool printreason, SCIP_RESULT *result)
    Definition: cons_integral.c:64
    static SCIP_DECL_CONSLOCK(consLockIntegral)
    static SCIP_DECL_CONSGETDIVEBDCHGS(consGetDiveBdChgsIntegral)
    static SCIP_DECL_CONSENFOLP(consEnfolpIntegral)
    #define CONSHDLR_EAGERFREQ
    Definition: cons_integral.c:57
    #define CONSHDLR_ENFOPRIORITY
    Definition: cons_integral.c:55
    static SCIP_DECL_CONSHDLRCOPY(conshdlrCopyIntegral)
    #define CONSHDLR_NAME
    Definition: cons_integral.c:53
    #define consEnfopsIntegral
    constraint handler for the integrality constraint
    #define NULL
    Definition: def.h:248
    #define SCIP_Bool
    Definition: def.h:91
    #define SCIP_Real
    Definition: def.h:156
    #define EPSFRAC(x, eps)
    Definition: def.h:194
    #define TRUE
    Definition: def.h:93
    #define FALSE
    Definition: def.h:94
    #define SCIP_REAL_MIN
    Definition: def.h:159
    #define SCIP_CALL(x)
    Definition: def.h:355
    SCIP_RETCODE SCIPincludeConshdlrIntegral(SCIP *scip)
    SCIP_RETCODE SCIPgetSolVarsData(SCIP *scip, SCIP_SOL *sol, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nbinimplvars, int *nintimplvars, int *ncontimplvars, int *ncontvars)
    Definition: scip_prob.c:3114
    int SCIPgetNBinImplVars(SCIP *scip)
    Definition: scip_prob.c:2432
    SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
    Definition: scip_prob.c:2115
    int SCIPgetNIntImplVars(SCIP *scip)
    Definition: scip_prob.c:2477
    void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
    Definition: scip_message.c:208
    SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
    Definition: scip_message.c:88
    #define SCIPdebugMsg
    Definition: scip_message.h:78
    SCIP_RETCODE SCIPaddExternBranchCand(SCIP *scip, SCIP_VAR *var, SCIP_Real score, SCIP_Real solval)
    Definition: scip_branch.c:673
    SCIP_RETCODE SCIPbranchExtern(SCIP *scip, SCIP_RESULT *result)
    Definition: scip_branch.c:1264
    int SCIPgetNLPBranchCands(SCIP *scip)
    Definition: scip_branch.c:436
    SCIP_RETCODE SCIPbranchLP(SCIP *scip, SCIP_RESULT *result)
    Definition: scip_branch.c:1240
    SCIP_RETCODE SCIPincludeConshdlrBasic(SCIP *scip, SCIP_CONSHDLR **conshdlrptr, const char *name, const char *desc, int enfopriority, int chckpriority, int eagerfreq, SCIP_Bool needscons, SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_CONSHDLRDATA *conshdlrdata)
    Definition: scip_cons.c:181
    void SCIPconshdlrMarkExact(SCIP_CONSHDLR *conshdlr)
    Definition: cons.c:4370
    SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSENFORELAX((*consenforelax)))
    Definition: scip_cons.c:323
    SCIP_RETCODE SCIPsetConshdlrGetDiveBdChgs(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSGETDIVEBDCHGS((*consgetdivebdchgs)))
    Definition: scip_cons.c:877
    const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
    Definition: cons.c:4316
    SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)), SCIP_DECL_CONSCOPY((*conscopy)))
    Definition: scip_cons.c:347
    SCIP_RETCODE SCIPbranchLPExact(SCIP *scip, SCIP_RESULT *result)
    Definition: scip_exact.c:235
    SCIP_Bool SCIPisExact(SCIP *scip)
    Definition: scip_exact.c:193
    SCIP_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
    Definition: scip_lp.c:174
    BMS_BUFMEM * SCIPbuffer(SCIP *scip)
    Definition: scip_mem.c:72
    SCIP_RETCODE SCIPgetDivesetScore(SCIP *scip, SCIP_DIVESET *diveset, SCIP_DIVETYPE divetype, SCIP_VAR *divecand, SCIP_Real divecandsol, SCIP_Real divecandfrac, SCIP_Real *candscore, SCIP_Bool *roundup)
    SCIP_RETCODE SCIPaddDiveBoundChange(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Bool preferred)
    void SCIPrationalSetReal(SCIP_RATIONAL *res, SCIP_Real real)
    Definition: rational.cpp:603
    void SCIPrationalFreeBuffer(BMS_BUFMEM *bufmem, SCIP_RATIONAL **rational)
    Definition: rational.cpp:473
    SCIP_RETCODE SCIPrationalCreateBuffer(BMS_BUFMEM *bufmem, SCIP_RATIONAL **rational)
    Definition: rational.cpp:123
    SCIP_Bool SCIPrationalIsIntegral(SCIP_RATIONAL *rational)
    Definition: rational.cpp:1691
    void SCIPrationalMessage(SCIP_MESSAGEHDLR *msg, FILE *file, SCIP_RATIONAL *rational)
    Definition: rational.cpp:1790
    void SCIPupdateSolIntegralityViolation(SCIP *scip, SCIP_SOL *sol, SCIP_Real absviol)
    Definition: scip_sol.c:406
    void SCIPgetSolValExact(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_RATIONAL *res)
    Definition: scip_sol.c:1803
    SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
    Definition: scip_sol.c:1765
    SCIP_Bool SCIPsolIsExact(SCIP_SOL *sol)
    Definition: sol.c:4150
    SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
    SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
    SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
    SCIP_Real SCIPfloor(SCIP *scip, SCIP_Real val)
    SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
    SCIP_Real SCIPfeastol(SCIP *scip)
    SCIP_Real SCIPceil(SCIP *scip, SCIP_Real val)
    SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
    Definition: var.c:24268
    SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
    Definition: var.c:23453
    int SCIPvarGetProbindex(SCIP_VAR *var)
    Definition: var.c:23662
    const char * SCIPvarGetName(SCIP_VAR *var)
    Definition: var.c:23267
    SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
    Definition: var.c:23490
    SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
    Definition: var.c:24234
    public methods for managing constraints
    public methods for message output
    #define SCIPdebugMessage
    Definition: pub_message.h:96
    public methods for primal CIP solutions
    public methods for problem variables
    wrapper for rational number arithmetic
    public methods for branching rule plugins and branching
    public methods for constraint handler plugins and constraints
    public methods for exact solving
    public methods for the LP relaxation, rows and columns
    public methods for the LP relaxation, rows and columns
    public methods for memory management
    public methods for message handling
    public methods for numerical tolerances
    public methods for global and local (sub)problems
    public methods for the probing mode
    public methods for solutions
    #define SCIP_DIVETYPE_INTEGRALITY
    Definition: type_heur.h:60
    @ SCIP_BRANCHDIR_DOWNWARDS
    Definition: type_history.h:43
    @ SCIP_BRANCHDIR_UPWARDS
    Definition: type_history.h:44
    @ SCIP_LPSOLSTAT_UNBOUNDEDRAY
    Definition: type_lp.h:46
    @ SCIP_DIDNOTRUN
    Definition: type_result.h:42
    @ SCIP_CUTOFF
    Definition: type_result.h:48
    @ SCIP_FEASIBLE
    Definition: type_result.h:45
    @ SCIP_INFEASIBLE
    Definition: type_result.h:46
    enum SCIP_Result SCIP_RESULT
    Definition: type_result.h:61
    @ SCIP_OKAY
    Definition: type_retcode.h:42
    enum SCIP_Retcode SCIP_RETCODE
    Definition: type_retcode.h:63
    @ SCIP_VARTYPE_INTEGER
    Definition: type_var.h:65
    @ SCIP_VARTYPE_BINARY
    Definition: type_var.h:64