Scippy

    SCIP

    Solving Constraint Integer Programs

    conflict_general.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 conflict_general.h
    26 * @ingroup OTHER_CFILES
    27 * @brief methods and datastructures for conflict analysis
    28 * @author Tobias Achterberg
    29 * @author Timo Berthold
    30 * @author Stefan Heinz
    31 * @author Marc Pfetsch
    32 * @author Michael Winkler
    33 * @author Jakob Witzig
    34 *
    35 * SCIP contains two kinds of conflict analysis:
    36 * - In graph based conflict analysis, the graph consisting of derived
    37 * is analysed. Code and documentation is available in conflict_graphanalysis.h
    38 * - In dual proof analysis, an infeasible LP relaxation is analysed.
    39 * Using the dual solution, a valid constraint is derived that is violated
    40 * by all values in the domain. This constraint is added to the problem
    41 * and can then be used for domain propagation.
    42 * Code is available in conflict_dualproofanalysis.h
    43 * This file contains the methods that are shared by both kinds of conflict analysis.
    44 */
    45
    46/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    47
    48#ifndef __SCIP_CONFLICT_GENERAL_H__
    49#define __SCIP_CONFLICT_GENERAL_H__
    50
    51
    53#include "scip/def.h"
    54#include "scip/type_branch.h"
    55#include "scip/type_conflict.h"
    57#include "scip/type_event.h"
    58#include "scip/type_cuts.h"
    59#include "lpi/type_lpi.h"
    60#include "scip/type_implics.h"
    61#include "scip/type_lp.h"
    62#include "scip/type_prob.h"
    63#include "scip/type_reopt.h"
    64#include "scip/type_retcode.h"
    65#include "scip/type_set.h"
    66#include "scip/type_stat.h"
    67#include "scip/type_tree.h"
    68#include "scip/type_var.h"
    69#include "scip/type_cons.h"
    70
    71#ifdef __cplusplus
    72extern "C" {
    73#endif
    74
    75/*
    76 * Conflict Analysis
    77 */
    78
    79/** return TRUE if conflict analysis is applicable; In case the function return FALSE there is no need to initialize the
    80 * conflict analysis since it will not be applied
    81 */
    83 SCIP_SET* set /**< global SCIP settings */
    84 );
    85
    86/** creates conflict analysis data for propagation conflicts */
    88 SCIP_CONFLICT** conflict, /**< pointer to conflict analysis data */
    89 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
    90 SCIP_SET* set /**< global SCIP settings */
    91 );
    92
    93/** frees conflict analysis data for propagation conflicts */
    95 SCIP_CONFLICT** conflict, /**< pointer to conflict analysis data */
    96 BMS_BLKMEM* blkmem /**< block memory of transformed problem */
    97 );
    98
    99/** clears conflict analysis bound changes queues for propagation conflicts */
    101 SCIP_CONFLICT* conflict /**< pointer to conflict analysis data */
    102 );
    103
    104/** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound() and
    105 * SCIPconflictAddRelaxedBound(), and on success, calls the conflict handlers to create a conflict constraint out of
    106 * the resulting conflict set; updates statistics for propagation conflict analysis
    107 */
    109 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    110 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
    111 SCIP_SET* set, /**< global SCIP settings */
    112 SCIP_STAT* stat, /**< problem statistics */
    113 SCIP_PROB* prob, /**< problem data */
    114 SCIP_TREE* tree, /**< branch and bound tree */
    115 int validdepth, /**< minimal depth level at which the initial conflict set is valid */
    116 SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
    117 );
    118
    119/** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound(), and on success,
    120 * creates a linear constraint that explains the infeasibility
    121 */
    123 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    124 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
    125 SCIP_SET* set, /**< global SCIP settings */
    126 SCIP_STAT* stat, /**< problem statistics */
    127 SCIP_PROB* transprob, /**< transformed problem */
    128 SCIP_PROB* origprob, /**< original problem */
    129 SCIP_TREE* tree, /**< branch and bound tree */
    130 SCIP_REOPT* reopt, /**< reoptimization data structure */
    131 SCIP_LP* lp, /**< LP data */
    132 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    133 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    134 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    135 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    136 SCIP_ROW* initialconflictrow, /**< row of constraint that detected the conflict */
    137 int validdepth, /**< minimal depth level at which the initial conflict set is valid */
    138 SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
    139 );
    140
    141/** adds the collected conflict constraints to the corresponding nodes; the best set->conf_maxconss conflict constraints
    142 * are added to the node of their validdepth; additionally (if not yet added, and if repropagation is activated), the
    143 * conflict constraint that triggers the earliest repropagation is added to the node of its validdepth
    144 */
    146 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    147 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
    148 SCIP_SET* set, /**< global SCIP settings */
    149 SCIP_STAT* stat, /**< dynamic problem statistics */
    150 SCIP_PROB* transprob, /**< transformed problem */
    151 SCIP_PROB* origprob, /**< original problem */
    152 SCIP_TREE* tree, /**< branch and bound tree */
    153 SCIP_REOPT* reopt, /**< reoptimization data structure */
    154 SCIP_LP* lp, /**< current LP data */
    155 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    156 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    157 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    158 SCIP_CLIQUETABLE* cliquetable /**< clique table data structure */
    159 );
    160
    161/** returns the current number of conflict sets in the conflict set storage */
    163 SCIP_CONFLICT* conflict /**< conflict analysis data */
    164 );
    165
    166/** returns the total number of conflict constraints that were added to the problem */
    168 SCIP_CONFLICT* conflict /**< conflict analysis data */
    169 );
    170
    171/** returns the total number of resolution conflict constraints that were added to the problem */
    173 SCIP_CONFLICT* conflict /**< conflict analysis data */
    174 );
    175
    176/** returns the total number of literals in conflict constraints that were added to the problem */
    178 SCIP_CONFLICT* conflict /**< conflict analysis data */
    179 );
    180
    181/** returns the total number of global bound changes applied by the conflict analysis */
    183 SCIP_CONFLICT* conflict /**< conflict analysis data */
    184 );
    185
    186/** returns the total number of conflict constraints that were added globally to the problem */
    188 SCIP_CONFLICT* conflict /**< conflict analysis data */
    189 );
    190
    191/** returns the total number of literals in conflict constraints that were added globally to the problem */
    193 SCIP_CONFLICT* conflict /**< conflict analysis data */
    194 );
    195
    196/** returns the total number of local bound changes applied by the conflict analysis */
    198 SCIP_CONFLICT* conflict /**< conflict analysis data */
    199 );
    200
    201/** returns the total number of conflict constraints that were added locally to the problem */
    203 SCIP_CONFLICT* conflict /**< conflict analysis data */
    204 );
    205
    206/** returns the total number of literals in conflict constraints that were added locally to the problem */
    208 SCIP_CONFLICT* conflict /**< conflict analysis data */
    209 );
    210
    211/** gets time in seconds used for preprocessing global conflict constraint before appliance */
    213 SCIP_CONFLICT* conflict /**< conflict analysis data */
    214 );
    215
    216/** gets time in seconds used for analyzing propagation conflicts */
    218 SCIP_CONFLICT* conflict /**< conflict analysis data */
    219 );
    220
    221/** gets time in seconds used for analyzing propagation conflicts with generalized resolution*/
    223 SCIP_CONFLICT* conflict /**< conflict analysis data */
    224 );
    225
    226/** gets number of calls to propagation conflict analysis */
    228 SCIP_CONFLICT* conflict /**< conflict analysis data */
    229 );
    230
    231/** gets number of calls to propagation conflict analysis that yield at least one conflict constraint */
    233 SCIP_CONFLICT* conflict /**< conflict analysis data */
    234 );
    235
    236/** gets number of conflict constraints detected in propagation conflict analysis */
    238 SCIP_CONFLICT* conflict /**< conflict analysis data */
    239 );
    240
    241/** gets total number of literals in conflict constraints created in propagation conflict analysis */
    243 SCIP_CONFLICT* conflict /**< conflict analysis data */
    244 );
    245
    246/** gets total number of variables in resolution conflict constraints created in propagation conflict analysis */
    248 SCIP_CONFLICT* conflict /**< conflict analysis data */
    249 );
    250
    251/** gets number of reconvergence constraints detected in propagation conflict analysis */
    253 SCIP_CONFLICT* conflict /**< conflict analysis data */
    254 );
    255
    256/** gets total number of literals in reconvergence constraints created in propagation conflict analysis */
    258 SCIP_CONFLICT* conflict /**< conflict analysis data */
    259 );
    260
    261/*
    262 * Infeasible LP Conflict Analysis
    263 */
    264
    265/** analyzes an infeasible or bound exceeding LP to find out the bound changes on variables that were responsible for the
    266 * infeasibility or for exceeding the primal bound;
    267 * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating
    268 * a conflict constraint out of the resulting conflict set;
    269 * updates statistics for infeasible or bound exceeding LP conflict analysis
    270 */
    272 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    273 SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
    274 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
    275 SCIP_SET* set, /**< global SCIP settings */
    276 SCIP_STAT* stat, /**< problem statistics */
    277 SCIP_PROB* transprob, /**< transformed problem */
    278 SCIP_PROB* origprob, /**< original problem */
    279 SCIP_TREE* tree, /**< branch and bound tree */
    280 SCIP_REOPT* reopt, /**< reoptimization data structure */
    281 SCIP_LP* lp, /**< LP data */
    282 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    283 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    284 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    285 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    286 SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
    287 );
    288
    289/** gets time in seconds used for analyzing infeasible LP conflicts */
    291 SCIP_CONFLICT* conflict /**< conflict analysis data */
    292 );
    293
    294/** gets number of calls to infeasible LP conflict analysis */
    296 SCIP_CONFLICT* conflict /**< conflict analysis data */
    297 );
    298
    299/** gets number of calls to infeasible LP conflict analysis that yield at least one conflict constraint */
    301 SCIP_CONFLICT* conflict /**< conflict analysis data */
    302 );
    303
    304/** gets number of conflict constraints detected in infeasible LP conflict analysis */
    306 SCIP_CONFLICT* conflict /**< conflict analysis data */
    307 );
    308
    309/** gets total number of literals in conflict constraints created in infeasible LP conflict analysis */
    311 SCIP_CONFLICT* conflict /**< conflict analysis data */
    312 );
    313
    314/** gets number of reconvergence constraints detected in infeasible LP conflict analysis */
    316 SCIP_CONFLICT* conflict /**< conflict analysis data */
    317 );
    318
    319/** gets total number of literals in reconvergence constraints created in infeasible LP conflict analysis */
    321 SCIP_CONFLICT* conflict /**< conflict analysis data */
    322 );
    323
    324/** gets number of LP iterations in infeasible LP conflict analysis */
    326 SCIP_CONFLICT* conflict /**< conflict analysis data */
    327 );
    328
    329/** gets time in seconds used for analyzing bound exceeding LP conflicts */
    331 SCIP_CONFLICT* conflict /**< conflict analysis data */
    332 );
    333
    334/** gets number of calls to bound exceeding LP conflict analysis */
    336 SCIP_CONFLICT* conflict /**< conflict analysis data */
    337 );
    338
    339/** gets number of calls to bound exceeding LP conflict analysis that yield at least one conflict constraint */
    341 SCIP_CONFLICT* conflict /**< conflict analysis data */
    342 );
    343
    344/** gets number of conflict constraints detected in bound exceeding LP conflict analysis */
    346 SCIP_CONFLICT* conflict /**< conflict analysis data */
    347 );
    348
    349/** gets total number of literals in conflict constraints created in bound exceeding LP conflict analysis */
    351 SCIP_CONFLICT* conflict /**< conflict analysis data */
    352 );
    353
    354/** gets number of reconvergence constraints detected in bound exceeding LP conflict analysis */
    356 SCIP_CONFLICT* conflict /**< conflict analysis data */
    357 );
    358
    359/** gets total number of literals in reconvergence constraints created in bound exceeding LP conflict analysis */
    361 SCIP_CONFLICT* conflict /**< conflict analysis data */
    362 );
    363
    364/** gets number of LP iterations in bound exceeding LP conflict analysis */
    366 SCIP_CONFLICT* conflict /**< conflict analysis data */
    367 );
    368
    369
    370
    371
    372/*
    373 * infeasible strong branching conflict analysis
    374 */
    375
    376/** analyses infeasible strong branching sub problems for conflicts */
    378 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    379 SCIP_CONFLICTSTORE* conflictstore, /**< conflict store */
    380 BMS_BLKMEM* blkmem, /**< block memory buffers */
    381 SCIP_SET* set, /**< global SCIP settings */
    382 SCIP_STAT* stat, /**< dynamic problem statistics */
    383 SCIP_PROB* transprob, /**< transformed problem */
    384 SCIP_PROB* origprob, /**< original problem */
    385 SCIP_TREE* tree, /**< branch and bound tree */
    386 SCIP_REOPT* reopt, /**< reoptimization data structure */
    387 SCIP_LP* lp, /**< LP data */
    388 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    389 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    390 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    391 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    392 SCIP_COL* col, /**< LP column with at least one infeasible strong branching subproblem */
    393 SCIP_Bool* downconflict, /**< pointer to store whether a conflict constraint was created for an
    394 * infeasible downwards branch, or NULL */
    395 SCIP_Bool* upconflict /**< pointer to store whether a conflict constraint was created for an
    396 * infeasible upwards branch, or NULL */
    397 );
    398
    399/** gets time in seconds used for analyzing infeasible strong branching conflicts */
    401 SCIP_CONFLICT* conflict /**< conflict analysis data */
    402 );
    403
    404/** gets number of successful calls to dual proof analysis derived from infeasible LPs */
    406 SCIP_CONFLICT* conflict /**< conflict analysis data */
    407 );
    408
    409/** gets number of globally valid dual proof constraints derived from infeasible LPs */
    411 SCIP_CONFLICT* conflict /**< conflict analysis data */
    412 );
    413
    414/** gets number of locally valid dual proof constraints derived from infeasible LPs */
    416 SCIP_CONFLICT* conflict /**< conflict analysis data */
    417 );
    418
    419/** gets average length of dual proof constraints derived from infeasible LPs */
    421 SCIP_CONFLICT* conflict /**< conflict analysis data */
    422 );
    423
    424/** gets number of successfully analyzed dual proofs derived from bound exceeding LPs */
    426 SCIP_CONFLICT* conflict /**< conflict analysis data */
    427 );
    428
    429/** gets number of globally applied dual proofs derived from bound exceeding LPs */
    431 SCIP_CONFLICT* conflict /**< conflict analysis data */
    432 );
    433
    434/** gets number of locally applied dual proofs derived from bound exceeding LPs */
    436 SCIP_CONFLICT* conflict /**< conflict analysis data */
    437 );
    438
    439/** gets average length of dual proofs derived from bound exceeding LPs */
    441 SCIP_CONFLICT* conflict /**< conflict analysis data */
    442 );
    443
    444/** gets number of calls to infeasible strong branching conflict analysis */
    446 SCIP_CONFLICT* conflict /**< conflict analysis data */
    447 );
    448
    449/** gets number of calls to infeasible strong branching conflict analysis that yield at least one conflict constraint */
    451 SCIP_CONFLICT* conflict /**< conflict analysis data */
    452 );
    453
    454/** gets number of conflict constraints detected in infeasible strong branching conflict analysis */
    456 SCIP_CONFLICT* conflict /**< conflict analysis data */
    457 );
    458
    459/** gets total number of literals in conflict constraints created in infeasible strong branching conflict analysis */
    461 SCIP_CONFLICT* conflict /**< conflict analysis data */
    462 );
    463
    464/** gets number of reconvergence constraints detected in infeasible strong branching conflict analysis */
    466 SCIP_CONFLICT* conflict /**< conflict analysis data */
    467 );
    468
    469/** gets total number of literals in reconvergence constraints created in infeasible strong branching conflict analysis */
    471 SCIP_CONFLICT* conflict /**< conflict analysis data */
    472 );
    473
    474/** gets number of LP iterations in infeasible strong branching conflict analysis */
    476 SCIP_CONFLICT* conflict /**< conflict analysis data */
    477 );
    478
    479
    480
    481
    482/*
    483 * pseudo solution conflict analysis
    484 */
    485
    486/** analyzes a pseudo solution with objective value exceeding the current cutoff to find out the bound changes on
    487 * variables that were responsible for the objective value degradation;
    488 * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating
    489 * a conflict constraint out of the resulting conflict set;
    490 * updates statistics for pseudo solution conflict analysis
    491 */
    493 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    494 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
    495 SCIP_SET* set, /**< global SCIP settings */
    496 SCIP_STAT* stat, /**< problem statistics */
    497 SCIP_PROB* transprob, /**< transformed problem */
    498 SCIP_PROB* origprob, /**< original problem */
    499 SCIP_TREE* tree, /**< branch and bound tree */
    500 SCIP_REOPT* reopt, /**< reoptimization data structure */
    501 SCIP_LP* lp, /**< LP data */
    502 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    503 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    504 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    505 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    506 SCIP_Bool* success /**< pointer to store whether a conflict constraint was created, or NULL */
    507 );
    508
    509/** gets time in seconds used for analyzing pseudo solution conflicts */
    511 SCIP_CONFLICT* conflict /**< conflict analysis data */
    512 );
    513
    514/** gets number of calls to pseudo solution conflict analysis */
    516 SCIP_CONFLICT* conflict /**< conflict analysis data */
    517 );
    518
    519/** gets number of calls to pseudo solution conflict analysis that yield at least one conflict constraint */
    521 SCIP_CONFLICT* conflict /**< conflict analysis data */
    522 );
    523
    524/** gets number of conflict constraints detected in pseudo solution conflict analysis */
    526 SCIP_CONFLICT* conflict /**< conflict analysis data */
    527 );
    528
    529/** gets total number of literals in conflict constraints created in pseudo solution conflict analysis */
    531 SCIP_CONFLICT* conflict /**< conflict analysis data */
    532 );
    533
    534/** gets number of reconvergence constraints detected in pseudo solution conflict analysis */
    536 SCIP_CONFLICT* conflict /**< conflict analysis data */
    537 );
    538
    539/** gets total number of literals in reconvergence constraints created in pseudo solution conflict analysis */
    541 SCIP_CONFLICT* conflict /**< conflict analysis data */
    542 );
    543
    544/** enables or disables all clocks of \p conflict, depending on the value of the flag */
    546 SCIP_CONFLICT* conflict, /**< the conflict analysis data for which all clocks should be enabled or disabled */
    547 SCIP_Bool enable /**< should the clocks of the conflict analysis data be enabled? */
    548 );
    549
    550/** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound() and
    551 * SCIPconflictAddRelaxedBound(), and on success, calls the conflict handlers to create a conflict constraint out of
    552 * the resulting conflict set; afterwards the conflict queue and the conflict set is cleared
    553 */
    555 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    556 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
    557 SCIP_SET* set, /**< global SCIP settings */
    558 SCIP_STAT* stat, /**< problem statistics */
    559 SCIP_PROB* prob, /**< problem data */
    560 SCIP_TREE* tree, /**< branch and bound tree */
    561 SCIP_Bool diving, /**< are we in strong branching or diving mode? */
    562 int validdepth, /**< minimal depth level at which the initial conflict set is valid */
    563 SCIP_Bool mustresolve, /**< should the conflict set only be used, if a resolution was applied? */
    564 int* nconss, /**< pointer to store the number of generated conflict constraints */
    565 int* nliterals, /**< pointer to store the number of literals in generated conflict constraints */
    566 int* nreconvconss, /**< pointer to store the number of generated reconvergence constraints */
    567 int* nreconvliterals /**< pointer to store the number of literals generated reconvergence constraints */
    568 );
    569
    570/** Analyzes conflicting bound changes added via SCIPconflictAddBound().
    571 * This function performs generalized resolution conflict analysis by iteratively aggregating the
    572 * infeasible conflict row (conflictrow) with the reason row (reasonrow) that propagated the bound change.
    573 * In each iteration, the coefficient of the resolving variable is cancelled. If the aggregation does not
    574 * yield an infeasible row, MIR reduction is applied to the reason row and the aggregation is retried,
    575 * continuing until a first unique implication point (FUIP) is reached. On success, a linear conflict
    576 * constraint that explains the infeasibility is added to the problem.
    577 */
    579 SCIP_CONFLICT* conflict, /**< conflict analysis data */
    580 BMS_BLKMEM* blkmem, /**< block memory of transformed problem */
    581 SCIP_SET* set, /**< global SCIP settings */
    582 SCIP_STAT* stat, /**< problem statistics */
    583 SCIP_PROB* transprob, /**< transformed problem */
    584 SCIP_PROB* origprob, /**< original problem */
    585 SCIP_TREE* tree, /**< branch and bound tree */
    586 SCIP_REOPT* reopt, /**< reoptimization data structure */
    587 SCIP_LP* lp, /**< LP data */
    588 SCIP_BRANCHCAND* branchcand, /**< branching candidate storage */
    589 SCIP_EVENTQUEUE* eventqueue, /**< event queue */
    590 SCIP_EVENTFILTER* eventfilter, /**< global event filter */
    591 SCIP_CLIQUETABLE* cliquetable, /**< clique table data structure */
    592 SCIP_ROW* initialconflictrow, /**< row of constraint that detected the conflict */
    593 int validdepth, /**< minimal depth level at which the initial conflict set is valid */
    594 int* nconss, /**< pointer to store the number of generated conflict constraints */
    595 int* nconfvars /**< pointer to store the number of variables in generated conflict constraints */
    596 );
    597
    598/** calculates a Farkas proof from the current dual LP solution */
    600 SCIP_SET* set, /**< global SCIP settings */
    601 SCIP_PROB* prob, /**< transformed problem */
    602 SCIP_LP* lp, /**< LP data */
    603 SCIP_LPI* lpi, /**< LPI data */
    604 SCIP_TREE* tree, /**< tree data */
    605 SCIP_AGGRROW* farkasrow, /**< aggregated row representing the proof */
    606 SCIP_Real* farkasact, /**< maximal activity of the proof constraint */
    607 int* validdepth, /**< pointer to store the valid depth of the proof constraint */
    608 SCIP_Real* curvarlbs, /**< current lower bounds of active problem variables */
    609 SCIP_Real* curvarubs, /**< current upper bounds of active problem variables */
    610 SCIP_Bool* valid /**< pointer store whether the proof constraint is valid */
    611 );
    612
    613/** calculates a dual proof from the current dual LP solution */
    615 SCIP_SET* set, /**< global SCIP settings */
    616 SCIP_PROB* transprob, /**< transformed problem */
    617 SCIP_LP* lp, /**< LP data */
    618 SCIP_LPI* lpi, /**< LPI data */
    619 SCIP_TREE* tree, /**< tree data */
    620 SCIP_AGGRROW* farkasrow, /**< aggregated row representing the proof */
    621 SCIP_Real* farkasact, /**< maximal activity of the proof constraint */
    622 int* validdepth, /**< pointer to store the valid depth of the proof constraint */
    623 SCIP_Real* curvarlbs, /**< current lower bounds of active problem variables */
    624 SCIP_Real* curvarubs, /**< current upper bounds of active problem variables */
    625 SCIP_Bool* valid /**< pointer store whether the proof constraint is valid */
    626 );
    627
    628/** calculates the minimal activity of a given aggregation row
    629 *
    630 * @note in exact solving mode, this returns a safe underestimation of the minimal activity
    631 */
    633 SCIP_SET* set, /**< global SCIP settings */
    634 SCIP_PROB* transprob, /**< transformed problem data */
    635 SCIP_AGGRROW* aggrrow, /**< aggregation row */
    636 SCIP_Real* curvarlbs, /**< current lower bounds of active problem variables (or NULL for global bounds) */
    637 SCIP_Real* curvarubs, /**< current upper bounds of active problem variables (or NULL for global bounds) */
    638 SCIP_Bool* infdelta /**< pointer to store whether at least one variable contributes with an infinite value */
    639 );
    640#ifdef __cplusplus
    641}
    642#endif
    643
    644#endif
    int SCIPconflictGetNConflicts(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNAppliedGlobalConss(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNDualproofsInfLocal(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNAppliedLocalLiterals(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNResConflictVars(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNPropCalls(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNDualproofsInfNonzeros(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNStrongbranchIterations(SCIP_CONFLICT *conflict)
    SCIP_Real SCIPconflictGetInfeasibleLPTime(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNInfeasibleLPCalls(SCIP_CONFLICT *conflict)
    SCIP_RETCODE SCIPgetFarkasProof(SCIP_SET *set, SCIP_PROB *prob, SCIP_LP *lp, SCIP_LPI *lpi, SCIP_TREE *tree, SCIP_AGGRROW *farkasrow, SCIP_Real *farkasact, int *validdepth, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, SCIP_Bool *valid)
    SCIP_RETCODE SCIPconflictCreate(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem, SCIP_SET *set)
    SCIP_Real SCIPconflictGetGlobalApplTime(SCIP_CONFLICT *conflict)
    SCIP_RETCODE SCIPgetDualProof(SCIP_SET *set, SCIP_PROB *transprob, SCIP_LP *lp, SCIP_LPI *lpi, SCIP_TREE *tree, SCIP_AGGRROW *farkasrow, SCIP_Real *farkasact, int *validdepth, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, SCIP_Bool *valid)
    SCIP_Longint SCIPconflictGetNInfeasibleLPSuccess(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceConss(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNGlobalChgBds(SCIP_CONFLICT *conflict)
    SCIP_RETCODE SCIPconflictClearQueues(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNAppliedLiterals(SCIP_CONFLICT *conflict)
    SCIP_RETCODE SCIPconflictAnalyzeLP(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, 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_CLIQUETABLE *cliquetable, SCIP_Bool *success)
    SCIP_Longint SCIPconflictGetNPropConflictLiterals(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNAppliedConss(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNInfeasibleLPConflictConss(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictConss(SCIP_CONFLICT *conflict)
    SCIP_RETCODE conflictAnalyzeResolution(SCIP_CONFLICT *conflict, 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_CLIQUETABLE *cliquetable, SCIP_ROW *initialconflictrow, int validdepth, int *nconss, int *nconfvars)
    SCIP_Longint SCIPconflictGetNBoundexceedingLPSuccess(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNStrongbranchCalls(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceLiterals(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNPropReconvergenceConss(SCIP_CONFLICT *conflict)
    SCIP_Real SCIPconflictGetBoundexceedingLPTime(SCIP_CONFLICT *conflict)
    SCIP_RETCODE SCIPconflictAnalyze(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, int validdepth, SCIP_Bool *success)
    SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceLiterals(SCIP_CONFLICT *conflict)
    SCIP_Real SCIPconflictGetPseudoTime(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNPseudoReconvergenceLiterals(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNPropReconvergenceLiterals(SCIP_CONFLICT *conflict)
    SCIP_Bool SCIPconflictApplicable(SCIP_SET *set)
    SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceConss(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNAppliedLocalConss(SCIP_CONFLICT *conflict)
    SCIP_RETCODE SCIPconflictAnalyzeStrongbranch(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, 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_CLIQUETABLE *cliquetable, SCIP_COL *col, SCIP_Bool *downconflict, SCIP_Bool *upconflict)
    SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceConss(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictLiterals(SCIP_CONFLICT *conflict)
    SCIP_RETCODE SCIPconflictAnalyzePseudo(SCIP_CONFLICT *conflict, 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_CLIQUETABLE *cliquetable, SCIP_Bool *success)
    SCIP_Real SCIPconflictGetStrongbranchTime(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNPseudoSuccess(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNInfeasibleLPConflictLiterals(SCIP_CONFLICT *conflict)
    SCIP_Real SCIPaggrRowGetMinActivity(SCIP_SET *set, SCIP_PROB *transprob, SCIP_AGGRROW *aggrrow, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, SCIP_Bool *infdelta)
    SCIP_Longint SCIPconflictGetNPseudoConflictLiterals(SCIP_CONFLICT *conflict)
    SCIP_RETCODE conflictAnalyze(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool diving, int validdepth, SCIP_Bool mustresolve, int *nconss, int *nliterals, int *nreconvconss, int *nreconvliterals)
    SCIP_Longint SCIPconflictGetNLocalChgBds(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNDualproofsBndSuccess(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNPropSuccess(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNDualproofsInfSuccess(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNBoundexceedingLPCalls(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNPropConflictConss(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNStrongbranchSuccess(SCIP_CONFLICT *conflict)
    SCIP_Real SCIPconflictGetResTime(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNDualproofsBndGlobal(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNPseudoReconvergenceConss(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNAppliedGlobalLiterals(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNDualproofsBndLocal(SCIP_CONFLICT *conflict)
    SCIP_RETCODE SCIPconflictAnalyzeResolution(SCIP_CONFLICT *conflict, 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_CLIQUETABLE *cliquetable, SCIP_ROW *initialconflictrow, int validdepth, SCIP_Bool *success)
    SCIP_Longint SCIPconflictGetNPseudoCalls(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNAppliedResConss(SCIP_CONFLICT *conflict)
    void SCIPconflictEnableOrDisableClocks(SCIP_CONFLICT *conflict, SCIP_Bool enable)
    SCIP_Real SCIPconflictGetPropTime(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNBoundexceedingLPIterations(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNStrongbranchConflictLiterals(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNPseudoConflictConss(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNDualproofsBndNonzeros(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNDualproofsInfGlobal(SCIP_CONFLICT *conflict)
    SCIP_RETCODE SCIPconflictFlushConss(SCIP_CONFLICT *conflict, 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_CLIQUETABLE *cliquetable)
    SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceLiterals(SCIP_CONFLICT *conflict)
    SCIP_RETCODE SCIPconflictFree(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem)
    SCIP_Longint SCIPconflictGetNStrongbranchConflictConss(SCIP_CONFLICT *conflict)
    SCIP_Longint SCIPconflictGetNInfeasibleLPIterations(SCIP_CONFLICT *conflict)
    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
    memory allocation routines
    struct BMS_BlkMem BMS_BLKMEM
    Definition: memory.h:437
    Definition: heur_padm.c:135
    type definitions for branching rules
    type definitions for conflict analysis
    type definitions for conflict store
    type definitions for constraints and constraint handlers
    type definitions for cuts
    type definitions for managing events
    type definitions for implications, variable bounds, and cliques
    type definitions for LP management
    type definitions for specific LP solvers interface
    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