Scippy

    SCIP

    Solving Constraint Integer Programs

    implics.h
    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 implics.h
    26 * @ingroup INTERNALAPI
    27 * @brief methods for implications, variable bounds, and cliques
    28 * @author Tobias Achterberg
    29 */
    30
    31/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    32
    33#ifndef __SCIP_IMPLICS_H__
    34#define __SCIP_IMPLICS_H__
    35
    36
    38#include "scip/def.h"
    39#include "scip/type_branch.h"
    40#include "scip/type_event.h"
    41#include "scip/type_implics.h"
    42#include "scip/type_lp.h"
    43#include "scip/type_prob.h"
    44#include "scip/type_reopt.h"
    45#include "scip/type_retcode.h"
    46#include "scip/type_set.h"
    47#include "scip/type_stat.h"
    48#include "scip/type_tree.h"
    49#include "scip/type_var.h"
    50
    51#ifdef NDEBUG
    52#include "scip/pub_implics.h"
    53#include "scip/struct_implics.h"
    54#endif
    55
    56#ifdef __cplusplus
    57extern "C" {
    58#endif
    59
    60/*
    61 * Methods for Variable Bounds
    62 */
    63
    64/** frees a variable bounds data structure */
    66 SCIP_VBOUNDS** vbounds, /**< pointer to store variable bounds data structure */
    67 BMS_BLKMEM* blkmem /**< block memory */
    68 );
    69
    70/** adds a variable bound to the variable bounds data structure */
    72 SCIP_VBOUNDS** vbounds, /**< pointer to variable bounds data structure */
    73 BMS_BLKMEM* blkmem, /**< block memory */
    74 SCIP_SET* set, /**< global SCIP settings */
    75 SCIP_BOUNDTYPE vboundtype, /**< type of variable bound (LOWER or UPPER) */
    76 SCIP_VAR* var, /**< variable z in x <= b*z + d or x >= b*z + d */
    77 SCIP_Real coef, /**< coefficient b in x <= b*z + d or x >= b*z + d */
    78 SCIP_Real constant, /**< constant d in x <= b*z + d or x >= b*z + d */
    79 SCIP_Bool* added /**< pointer to store whether the variable bound was added */
    80 );
    81
    82/** removes from variable x a variable bound x >=/<= b*z + d with binary or integer z */
    84 SCIP_VBOUNDS** vbounds, /**< pointer to variable bounds data structure */
    85 BMS_BLKMEM* blkmem, /**< block memory */
    86 SCIP_VAR* vbdvar, /**< variable z in x >=/<= b*z + d */
    87 SCIP_Bool negativecoef /**< is coefficient b negative? */
    88 );
    89
    90/** reduces the number of variable bounds stored in the given variable bounds data structure */
    92 SCIP_VBOUNDS** vbounds, /**< pointer to variable bounds data structure */
    93 BMS_BLKMEM* blkmem, /**< block memory */
    94 int newnvbds /**< new number of variable bounds */
    95 );
    96
    97
    98/** gets number of variable bounds contained in given variable bounds data structure */
    100 SCIP_VBOUNDS* vbounds /**< variable bounds data structure */
    101 );
    102
    103/** gets array of variables contained in given variable bounds data structure */
    105 SCIP_VBOUNDS* vbounds /**< variable bounds data structure */
    106 );
    107
    108/** gets array of coefficients contained in given variable bounds data structure */
    110 SCIP_VBOUNDS* vbounds /**< variable bounds data structure */
    111 );
    112
    113/** gets array of constants contained in given variable bounds data structure */
    115 SCIP_VBOUNDS* vbounds /**< variable bounds data structure */
    116 );
    117
    118#ifdef NDEBUG
    119
    120/* In optimized mode, the function calls are overwritten by defines to reduce the number of function calls and
    121 * speed up the algorithms.
    122 */
    123
    124#define SCIPvboundsGetNVbds(vbounds) ((vbounds) != NULL ? (vbounds)->len : 0)
    125#define SCIPvboundsGetVars(vbounds) ((vbounds) != NULL ? (vbounds)->vars : NULL)
    126#define SCIPvboundsGetCoefs(vbounds) ((vbounds) != NULL ? (vbounds)->coefs : NULL)
    127#define SCIPvboundsGetConstants(vbounds) ((vbounds) != NULL ? (vbounds)->constants : NULL)
    128
    129#endif
    130
    131
    132
    133
    134/*
    135 * Methods for Implications
    136 */
    137
    138/** frees an implications data structure */
    139void SCIPimplicsFree(
    140 SCIP_IMPLICS** implics, /**< pointer of implications data structure to free */
    141 BMS_BLKMEM* blkmem /**< block memory */
    142 );
    143
    144/** adds an implication x == 0/1 -> y <= b or y >= b to the implications data structure;
    145 * the implication must be non-redundant
    146 */
    148 SCIP_IMPLICS** implics, /**< pointer to implications data structure */
    149 BMS_BLKMEM* blkmem, /**< block memory */
    150 SCIP_SET* set, /**< global SCIP settings */
    151 SCIP_STAT* stat, /**< problem statistics */
    152 SCIP_Bool varfixing, /**< FALSE if implication for x == 0 has to be added, TRUE for x == 1 */
    153 SCIP_VAR* implvar, /**< variable y in implication y <= b or y >= b */
    154 SCIP_BOUNDTYPE impltype, /**< type of implication y <= b (SCIP_BOUNDTYPE_UPPER) or y >= b (SCIP_BOUNDTYPE_LOWER) */
    155 SCIP_Real implbound, /**< bound b in implication y <= b or y >= b */
    156 SCIP_Bool isshortcut, /**< is the implication a shortcut, i.e., added as part of the transitive closure of another implication? */
    157 SCIP_Bool* conflict, /**< pointer to store whether implication causes a conflict for variable x */
    158 SCIP_Bool* added /**< pointer to store whether the implication was added */
    159 );
    160
    161/** removes the implication x <= 0 or x >= 1 ==> y <= b or y >= b from the implications data structure */
    163 SCIP_IMPLICS** implics, /**< pointer to implications data structure */
    164 BMS_BLKMEM* blkmem, /**< block memory */
    165 SCIP_SET* set, /**< global SCIP settings */
    166 SCIP_Bool varfixing, /**< FALSE if y should be removed from implications for x <= 0, TRUE for x >= 1 */
    167 SCIP_VAR* implvar, /**< variable y in implication y <= b or y >= b */
    168 SCIP_BOUNDTYPE impltype /**< type of implication y <= b (SCIP_BOUNDTYPE_UPPER) or y >= b (SCIP_BOUNDTYPE_LOWER) */
    169 );
    170
    171/** returns which implications on given variable y are contained in implications for x == 0 or x == 1 */
    173 SCIP_IMPLICS* implics, /**< implications data structure */
    174 SCIP_Bool varfixing, /**< FALSE if y should be searched in implications for x == 0, TRUE for x == 1 */
    175 SCIP_VAR* implvar, /**< variable y to search for */
    176 SCIP_Bool* haslowerimplic, /**< pointer to store whether there exists an implication y >= l */
    177 SCIP_Bool* hasupperimplic /**< pointer to store whether there exists an implication y <= u */
    178 );
    179
    180/** returns which implications on given variable y are contained in implications for x == 0 or x == 1 */
    182 SCIP_IMPLICS* implics, /**< implications data structure */
    183 SCIP_Bool varfixing, /**< FALSE if y should be searched in implications for x == 0, TRUE for x == 1 */
    184 SCIP_VAR* implvar, /**< variable y to search for */
    185 int* lowerimplicpos, /**< pointer to store the position of an implication y >= l */
    186 int* upperimplicpos /**< pointer to store the position of an implication y <= u */
    187 );
    188
    189/** returns whether an implication y <= b or y >= b is contained in implications for x == 0 or x == 1 */
    191 SCIP_IMPLICS* implics, /**< implications data structure */
    192 SCIP_Bool varfixing, /**< FALSE if y should be searched in implications for x == 0, TRUE for x == 1 */
    193 SCIP_VAR* implvar, /**< variable y to search for */
    194 SCIP_BOUNDTYPE impltype /**< type of implication y <=/>= b to search for */
    195 );
    196
    197
    198/** gets number of implications for a given binary variable fixing */
    200 SCIP_IMPLICS* implics, /**< implication data */
    201 SCIP_Bool varfixing /**< should the implications on var == FALSE or var == TRUE be returned? */
    202 );
    203
    204/** gets array with implied variables for a given binary variable fixing */
    206 SCIP_IMPLICS* implics, /**< implication data */
    207 SCIP_Bool varfixing /**< should the implications on var == FALSE or var == TRUE be returned? */
    208 );
    209
    210/** gets array with implication types for a given binary variable fixing */
    212 SCIP_IMPLICS* implics, /**< implication data */
    213 SCIP_Bool varfixing /**< should the implications on var == FALSE or var == TRUE be returned? */
    214 );
    215
    216/** gets array with implication bounds for a given binary variable fixing */
    218 SCIP_IMPLICS* implics, /**< implication data */
    219 SCIP_Bool varfixing /**< should the implications on var == FALSE or var == TRUE be returned? */
    220 );
    221
    222/** Gets array with unique implication identifiers for a given binary variable fixing.
    223 * If an implication is a shortcut, i.e., it was added as part of the transitive closure of another implication,
    224 * its id is negative, otherwise it is nonnegative.
    225 */
    227 SCIP_IMPLICS* implics, /**< implication data */
    228 SCIP_Bool varfixing /**< should the implications on var == FALSE or var == TRUE be returned? */
    229 );
    230
    231#ifdef NDEBUG
    232
    233/* In optimized mode, the function calls are overwritten by defines to reduce the number of function calls and
    234 * speed up the algorithms.
    235 */
    236
    237#define SCIPimplicsGetNImpls(implics, varfixing) ((implics) != NULL ? (implics)->nimpls[varfixing] : 0)
    238#define SCIPimplicsGetNBinImpls(implics, varfixing) ((implics) != NULL ? (implics)->nbinimpls[varfixing] : 0)
    239#define SCIPimplicsGetVars(implics, varfixing) ((implics) != NULL ? (implics)->vars[varfixing] : NULL)
    240#define SCIPimplicsGetTypes(implics, varfixing) ((implics) != NULL ? (implics)->types[varfixing] : NULL)
    241#define SCIPimplicsGetBounds(implics, varfixing) ((implics) != NULL ? (implics)->bounds[varfixing] : NULL)
    242#define SCIPimplicsGetIds(implics, varfixing) ((implics) != NULL ? (implics)->ids[varfixing] : NULL)
    243
    244#endif
    245
    246
    247
    248
    249/*
    250 * methods for cliques
    251 */
    252
    253/** adds a single variable to the given clique */
    255 SCIP_CLIQUE* clique, /**< clique data structure */
    256 BMS_BLKMEM* blkmem, /**< block memory */
    257 SCIP_SET* set, /**< global SCIP settings */
    258 SCIP_VAR* var, /**< variable to add to the clique */
    259 SCIP_Bool value, /**< value of the variable in the clique */
    260 SCIP_Bool* doubleentry, /**< pointer to store whether the variable and value occurs twice in the clique */
    261 SCIP_Bool* oppositeentry /**< pointer to store whether the variable with opposite value is in the clique */
    262 );
    263
    264/** removes a single variable from the given clique */
    266 SCIP_CLIQUE* clique, /**< clique data structure */
    267 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    268 SCIP_VAR* var, /**< variable to remove from the clique */
    269 SCIP_Bool value /**< value of the variable in the clique */
    270 );
    271
    272/** frees a clique list data structure */
    274 SCIP_CLIQUELIST** cliquelist, /**< pointer to the clique list data structure */
    275 BMS_BLKMEM* blkmem /**< block memory */
    276 );
    277
    278/** adds a clique to the clique list */
    280 SCIP_CLIQUELIST** cliquelist, /**< pointer to the clique list data structure */
    281 BMS_BLKMEM* blkmem, /**< block memory */
    282 SCIP_SET* set, /**< global SCIP settings */
    283 SCIP_Bool value, /**< value of the variable for which the clique list should be extended */
    284 SCIP_CLIQUE* clique /**< clique that should be added to the clique list */
    285 );
    286
    287/** removes a clique from the clique list */
    289 SCIP_CLIQUELIST** cliquelist, /**< pointer to the clique list data structure */
    290 BMS_BLKMEM* blkmem, /**< block memory */
    291 SCIP_Bool value, /**< value of the variable for which the clique list should be reduced */
    292 SCIP_CLIQUE* clique /**< clique that should be deleted from the clique list */
    293 );
    294
    295/** returns whether the given clique lists have a non-empty intersection, i.e. whether there is a clique that appears
    296 * in both lists
    297 */
    299 SCIP_CLIQUELIST* cliquelist1, /**< first clique list data structure */
    300 SCIP_Bool value1, /**< value of first variable */
    301 SCIP_CLIQUELIST* cliquelist2, /**< second clique list data structure */
    302 SCIP_Bool value2 /**< value of second variable */
    303 );
    304
    305/** removes all listed entries from the cliques */
    307 SCIP_CLIQUELIST* cliquelist, /**< clique list data structure */
    308 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    309 SCIP_VAR* var, /**< active problem variable the clique list belongs to */
    310 SCIP_Bool irrelevantvar /**< has the variable become irrelevant, meaning that equality
    311 * cliques need to be relaxed? */
    312 );
    313
    314/** creates a clique table data structure */
    316 SCIP_CLIQUETABLE** cliquetable, /**< pointer to store clique table data structure */
    317 SCIP_SET* set, /**< global SCIP settings */
    318 BMS_BLKMEM* blkmem /**< block memory */
    319 );
    320
    321/** frees a clique table data structure */
    323 SCIP_CLIQUETABLE** cliquetable, /**< pointer to store clique table data structure */
    324 BMS_BLKMEM* blkmem /**< block memory */
    325 );
    326
    327/** adds a clique to the clique table, using the given values for the given variables;
    328 * performs implications if the clique contains the same variable twice
    329 */
    331 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    332 BMS_BLKMEM* blkmem, /**< block memory */
    333 SCIP_SET* set, /**< global SCIP settings */
    334 SCIP_STAT* stat, /**< problem statistics */
    335 SCIP_PROB* transprob, /**< transformed problem */
    336 SCIP_PROB* origprob, /**< original problem */
    337 SCIP_TREE* tree, /**< branch and bound tree if in solving stage */
    338 SCIP_REOPT* reopt, /**< reoptimization data structure */
    339 SCIP_LP* lp, /**< current LP data */
    340 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    341 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    342 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    343 SCIP_VAR** vars, /**< binary variables in the clique: at most one can be set to the given value */
    344 SCIP_Bool* values, /**< values of the variables in the clique; NULL to use TRUE for all vars */
    345 int nvars, /**< number of variables in the clique */
    346 SCIP_Bool isequation, /**< is the clique an equation or an inequality? */
    347 SCIP_Bool* infeasible, /**< pointer to store whether an infeasibility was detected */
    348 int* nbdchgs /**< pointer to count the number of performed bound changes, or NULL */
    349 );
    350
    351/** removes all empty and single variable cliques from the clique table; removes double entries from the clique table
    352 *
    353 * @note cliques can be processed several times by this method
    354 */
    356 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    357 BMS_BLKMEM* blkmem, /**< block memory */
    358 SCIP_SET* set, /**< global SCIP settings */
    359 SCIP_STAT* stat, /**< problem statistics */
    360 SCIP_PROB* transprob, /**< transformed problem */
    361 SCIP_PROB* origprob, /**< original problem */
    362 SCIP_TREE* tree, /**< branch and bound tree if in solving stage */
    363 SCIP_REOPT* reopt, /**< reoptimization data structure */
    364 SCIP_LP* lp, /**< current LP data */
    365 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    366 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    367 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    368 int* nchgbds, /**< pointer to store number of fixed variables */
    369 SCIP_Bool* infeasible /**< pointer to store whether an infeasibility was detected */
    370 );
    371
    372/** computes connected components of the clique graph
    373 *
    374 * use depth-first search similarly to the components presolver/constraint handler, representing a clique as a
    375 * path to reduce memory usage, but leaving the connected components the same
    376 *
    377 * an update becomes necessary if a clique gets added with variables from different components
    378 */
    380 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    381 SCIP_SET* set, /**< global SCIP settings */
    382 BMS_BLKMEM* blkmem, /**< block memory */
    383 SCIP_VAR** vars, /**< array of problem variables, sorted by variable type */
    384 int nbinvars, /**< number of binary variables */
    385 int nintvars, /**< number of integer variables */
    386 int nimplvars /**< number of implicit integer variables */
    387 );
    388
    389/** returns the index of the connected component of the clique graph that the variable belongs to, or -1 */
    391 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    392 SCIP_VAR* var /**< problem variable */
    393 );
    394
    395/** returns the number of cliques stored in the clique list */
    397 SCIP_CLIQUELIST* cliquelist, /**< clique list data structure */
    398 SCIP_Bool value /**< value of the variable for which the cliques should be returned */
    399 );
    400
    401/** returns the cliques stored in the clique list, or NULL if the clique list is empty */
    403 SCIP_CLIQUELIST* cliquelist, /**< clique list data structure */
    404 SCIP_Bool value /**< value of the variable for which the cliques should be returned */
    405 );
    406
    407/** checks whether variable is contained in all cliques of the cliquelist */
    409 SCIP_CLIQUELIST* cliquelist, /**< clique list data structure */
    410 SCIP_VAR* var /**< variable, the clique list belongs to */
    411 );
    412
    413/** gets the number of cliques stored in the clique table */
    415 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    416 );
    417
    418/** gets the number of cliques created so far by the clique table */
    420 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    421 );
    422
    423/** gets the array of cliques stored in the clique table */
    425 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    426 );
    427
    428/** gets the number of entries in the whole clique table */
    430 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    431 );
    432
    433/** returns the number of clique components, or -1 if update is necessary first */
    435 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    436 );
    437
    438/** returns TRUE iff the connected clique components need an update (because new cliques were added) */
    440 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    441 );
    442
    443#ifdef NDEBUG
    444
    445/* In optimized mode, the function calls are overwritten by defines to reduce the number of function calls and
    446 * speed up the algorithms.
    447 */
    448
    449#define SCIPcliquelistGetNCliques(cliquelist, value) ((cliquelist) != NULL ? (cliquelist)->ncliques[value] : 0)
    450#define SCIPcliquelistGetCliques(cliquelist, value) ((cliquelist) != NULL ? (cliquelist)->cliques[value] : NULL)
    451#define SCIPcliquelistCheck(cliquelist, var) /**/
    452#define SCIPcliquetableGetNCliques(cliquetable) ((cliquetable)->ncliques)
    453#define SCIPcliquetableGetCliques(cliquetable) ((cliquetable)->cliques)
    454#define SCIPcliquetableGetNEntries(cliquetable) ((cliquetable)->nentries)
    455#define SCIPcliquetableGetNCliqueComponents(cliquetable) (cliquetable->compsfromscratch ? -1 : cliquetable->ncliquecomponents)
    456#define SCIPcliquetableNeedsComponentUpdate(cliquetable) (cliquetable->compsfromscratch || cliquetable->djset == NULL)
    457#endif
    458
    459#ifdef __cplusplus
    460}
    461#endif
    462
    463#endif
    common defines and data types used in all packages of SCIP
    #define SCIP_Longint
    Definition: def.h:141
    #define SCIP_Bool
    Definition: def.h:91
    #define SCIP_Real
    Definition: def.h:156
    SCIP_VAR ** SCIPimplicsGetVars(SCIP_IMPLICS *implics, SCIP_Bool varfixing)
    Definition: implics.c:3335
    void SCIPcliqueDelVar(SCIP_CLIQUE *clique, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Bool value)
    Definition: implics.c:1285
    SCIP_RETCODE SCIPcliquetableAdd(SCIP_CLIQUETABLE *cliquetable, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_VAR **vars, SCIP_Bool *values, int nvars, SCIP_Bool isequation, SCIP_Bool *infeasible, int *nbdchgs)
    Definition: implics.c:2377
    void SCIPcliquelistRemoveFromCliques(SCIP_CLIQUELIST *cliquelist, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Bool irrelevantvar)
    Definition: implics.c:1683
    SCIP_RETCODE SCIPcliquetableFree(SCIP_CLIQUETABLE **cliquetable, BMS_BLKMEM *blkmem)
    Definition: implics.c:1822
    void SCIPvboundsFree(SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem)
    Definition: implics.c:73
    SCIP_Real * SCIPvboundsGetCoefs(SCIP_VBOUNDS *vbounds)
    Definition: implics.c:3310
    void SCIPvboundsShrink(SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, int newnvbds)
    Definition: implics.c:333
    int SCIPcliquetableGetNCliquesCreated(SCIP_CLIQUETABLE *cliquetable)
    Definition: implics.c:3520
    SCIP_Bool SCIPcliquetableNeedsComponentUpdate(SCIP_CLIQUETABLE *cliquetable)
    Definition: implics.c:3558
    SCIP_CLIQUE ** SCIPcliquelistGetCliques(SCIP_CLIQUELIST *cliquelist, SCIP_Bool value)
    Definition: implics.c:3459
    SCIP_Bool SCIPcliquelistsHaveCommonClique(SCIP_CLIQUELIST *cliquelist1, SCIP_Bool value1, SCIP_CLIQUELIST *cliquelist2, SCIP_Bool value2)
    Definition: implics.c:1605
    SCIP_Real * SCIPimplicsGetBounds(SCIP_IMPLICS *implics, SCIP_Bool varfixing)
    Definition: implics.c:3353
    SCIP_Longint SCIPcliquetableGetNEntries(SCIP_CLIQUETABLE *cliquetable)
    Definition: implics.c:3540
    void SCIPcliquelistCheck(SCIP_CLIQUELIST *cliquelist, SCIP_VAR *var)
    Definition: implics.c:3468
    SCIP_VAR ** SCIPvboundsGetVars(SCIP_VBOUNDS *vbounds)
    Definition: implics.c:3302
    SCIP_RETCODE SCIPvboundsDel(SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, SCIP_VAR *vbdvar, SCIP_Bool negativecoef)
    Definition: implics.c:288
    int * SCIPimplicsGetIds(SCIP_IMPLICS *implics, SCIP_Bool varfixing)
    Definition: implics.c:3365
    SCIP_RETCODE SCIPimplicsAdd(SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, SCIP_Real implbound, SCIP_Bool isshortcut, SCIP_Bool *conflict, SCIP_Bool *added)
    Definition: implics.c:633
    int SCIPcliquetableGetNCliqueComponents(SCIP_CLIQUETABLE *cliquetable)
    Definition: implics.c:3550
    SCIP_RETCODE SCIPvboundsAdd(SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BOUNDTYPE vboundtype, SCIP_VAR *var, SCIP_Real coef, SCIP_Real constant, SCIP_Bool *added)
    Definition: implics.c:206
    void SCIPcliquelistFree(SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem)
    Definition: implics.c:1441
    int SCIPimplicsGetNImpls(SCIP_IMPLICS *implics, SCIP_Bool varfixing)
    Definition: implics.c:3326
    SCIP_RETCODE SCIPcliqueAddVar(SCIP_CLIQUE *clique, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_VAR *var, SCIP_Bool value, SCIP_Bool *doubleentry, SCIP_Bool *oppositeentry)
    Definition: implics.c:1151
    SCIP_RETCODE SCIPcliquetableCreate(SCIP_CLIQUETABLE **cliquetable, SCIP_SET *set, BMS_BLKMEM *blkmem)
    Definition: implics.c:1786
    SCIP_BOUNDTYPE * SCIPimplicsGetTypes(SCIP_IMPLICS *implics, SCIP_Bool varfixing)
    Definition: implics.c:3344
    int SCIPcliquetableGetNCliques(SCIP_CLIQUETABLE *cliquetable)
    Definition: implics.c:3510
    int SCIPcliquelistGetNCliques(SCIP_CLIQUELIST *cliquelist, SCIP_Bool value)
    Definition: implics.c:3450
    void SCIPimplicsGetVarImplics(SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_Bool *haslowerimplic, SCIP_Bool *hasupperimplic)
    Definition: implics.c:894
    SCIP_RETCODE SCIPcliquelistDel(SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem, SCIP_Bool value, SCIP_CLIQUE *clique)
    Definition: implics.c:1527
    int SCIPcliquetableGetVarComponentIdx(SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var)
    Definition: implics.c:2349
    void SCIPimplicsGetVarImplicPoss(SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, int *lowerimplicpos, int *upperimplicpos)
    Definition: implics.c:916
    SCIP_RETCODE SCIPimplicsDel(SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype)
    Definition: implics.c:836
    SCIP_RETCODE SCIPcliquetableCleanup(SCIP_CLIQUETABLE *cliquetable, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, int *nchgbds, SCIP_Bool *infeasible)
    Definition: implics.c:2923
    SCIP_Real * SCIPvboundsGetConstants(SCIP_VBOUNDS *vbounds)
    Definition: implics.c:3318
    int SCIPvboundsGetNVbds(SCIP_VBOUNDS *vbounds)
    Definition: implics.c:3294
    SCIP_RETCODE SCIPcliquetableComputeCliqueComponents(SCIP_CLIQUETABLE *cliquetable, SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_VAR **vars, int nbinvars, int nintvars, int nimplvars)
    Definition: implics.c:3135
    SCIP_CLIQUE ** SCIPcliquetableGetCliques(SCIP_CLIQUETABLE *cliquetable)
    Definition: implics.c:3530
    SCIP_Bool SCIPimplicsContainsImpl(SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype)
    Definition: implics.c:933
    void SCIPimplicsFree(SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem)
    Definition: implics.c:451
    SCIP_RETCODE SCIPcliquelistAdd(SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool value, SCIP_CLIQUE *clique)
    Definition: implics.c:1482
    memory allocation routines
    struct BMS_BlkMem BMS_BLKMEM
    Definition: memory.h:437
    public methods for implications, variable bounds, and cliques
    datastructures for implications, variable bounds, and cliques
    Definition: heur_padm.c:135
    type definitions for branching rules
    type definitions for managing events
    type definitions for implications, variable bounds, and cliques
    type definitions for LP management
    enum SCIP_BoundType SCIP_BOUNDTYPE
    Definition: type_lp.h:60
    type definitions for storing and manipulating the main problem
    type definitions for collecting reoptimization information
    type definitions for return codes for SCIP methods
    enum SCIP_Retcode SCIP_RETCODE
    Definition: type_retcode.h:63
    type definitions for global SCIP settings
    type definitions for problem statistics
    type definitions for branch and bound tree
    type definitions for problem variables