Scippy

    SCIP

    Solving Constraint Integer Programs

    stat.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-2026 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 stat.c
    26 * @ingroup OTHER_CFILES
    27 * @brief methods for problem statistics
    28 * @author Tobias Achterberg
    29 * @author Stefan Heinz
    30 * @author Gregor Hendel
    31 * @author Gerald Gamrath
    32 * @author Marc Pfetsch
    33 * @author Stefan Vigerske
    34 */
    35
    36/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    37
    38#include "scip/clock.h"
    39#include "scip/history.h"
    40#include "scip/mem.h"
    41#include "scip/prob.h"
    42#include "scip/pub_message.h"
    43#include "scip/pub_misc.h"
    44#include "scip/pub_var.h"
    45#include "scip/set.h"
    46#include "scip/stat.h"
    47#include "scip/struct_set.h"
    48#include "scip/struct_stat.h"
    49#include "scip/var.h"
    50#include "scip/visual.h"
    51#include "scip/certificate.h"
    52
    53
    54
    55/** creates problem statistics data */
    57 SCIP_STAT** stat, /**< pointer to problem statistics data */
    58 BMS_BLKMEM* blkmem, /**< block memory */
    59 SCIP_SET* set, /**< global SCIP settings */
    60 SCIP_PROB* transprob, /**< transformed problem, or NULL */
    61 SCIP_PROB* origprob, /**< original problem, or NULL */
    62 SCIP_MESSAGEHDLR* messagehdlr /**< message handler */
    63 )
    64{
    65 assert(stat != NULL);
    66 assert(set != NULL);
    67
    69 SCIP_CALL( SCIPclockCreate(&(*stat)->solvingtime, SCIP_CLOCKTYPE_DEFAULT) );
    70 SCIP_CALL( SCIPclockCreate(&(*stat)->solvingtimeoverall, SCIP_CLOCKTYPE_DEFAULT) );
    71 SCIP_CALL( SCIPclockCreate(&(*stat)->presolvingtime, SCIP_CLOCKTYPE_DEFAULT) );
    72 SCIP_CALL( SCIPclockCreate(&(*stat)->presolvingtimeoverall, SCIP_CLOCKTYPE_DEFAULT) );
    73 SCIP_CALL( SCIPclockCreate(&(*stat)->primallptime, SCIP_CLOCKTYPE_DEFAULT) );
    74 SCIP_CALL( SCIPclockCreate(&(*stat)->duallptime, SCIP_CLOCKTYPE_DEFAULT) );
    75 SCIP_CALL( SCIPclockCreate(&(*stat)->lexduallptime, SCIP_CLOCKTYPE_DEFAULT) );
    76 SCIP_CALL( SCIPclockCreate(&(*stat)->barrierlptime, SCIP_CLOCKTYPE_DEFAULT) );
    77 SCIP_CALL( SCIPclockCreate(&(*stat)->resolveinstablelptime, SCIP_CLOCKTYPE_DEFAULT) );
    78 SCIP_CALL( SCIPclockCreate(&(*stat)->divinglptime, SCIP_CLOCKTYPE_DEFAULT) );
    79 SCIP_CALL( SCIPclockCreate(&(*stat)->strongbranchtime, SCIP_CLOCKTYPE_DEFAULT) );
    80 SCIP_CALL( SCIPclockCreate(&(*stat)->conflictlptime, SCIP_CLOCKTYPE_DEFAULT) );
    81 SCIP_CALL( SCIPclockCreate(&(*stat)->provedfeaslptime, SCIP_CLOCKTYPE_DEFAULT) );
    82 SCIP_CALL( SCIPclockCreate(&(*stat)->provedinfeaslptime, SCIP_CLOCKTYPE_DEFAULT) );
    83 SCIP_CALL( SCIPclockCreate(&(*stat)->provedfeasbstime, SCIP_CLOCKTYPE_DEFAULT) );
    84 SCIP_CALL( SCIPclockCreate(&(*stat)->provedinfeasbstime, SCIP_CLOCKTYPE_DEFAULT) );
    85 SCIP_CALL( SCIPclockCreate(&(*stat)->provedfeaspstime, SCIP_CLOCKTYPE_DEFAULT) );
    86 SCIP_CALL( SCIPclockCreate(&(*stat)->provedinfeaspstime, SCIP_CLOCKTYPE_DEFAULT) );
    87 SCIP_CALL( SCIPclockCreate(&(*stat)->lpsoltime, SCIP_CLOCKTYPE_DEFAULT) );
    88 SCIP_CALL( SCIPclockCreate(&(*stat)->relaxsoltime, SCIP_CLOCKTYPE_DEFAULT) );
    89 SCIP_CALL( SCIPclockCreate(&(*stat)->pseudosoltime, SCIP_CLOCKTYPE_DEFAULT) );
    90 SCIP_CALL( SCIPclockCreate(&(*stat)->sbsoltime, SCIP_CLOCKTYPE_DEFAULT) );
    91 SCIP_CALL( SCIPclockCreate(&(*stat)->nodeactivationtime, SCIP_CLOCKTYPE_DEFAULT) );
    92 SCIP_CALL( SCIPclockCreate(&(*stat)->nlpsoltime, SCIP_CLOCKTYPE_DEFAULT) );
    93 SCIP_CALL( SCIPclockCreate(&(*stat)->copyclock, SCIP_CLOCKTYPE_DEFAULT) );
    94 SCIP_CALL( SCIPclockCreate(&(*stat)->strongpropclock, SCIP_CLOCKTYPE_DEFAULT) );
    95 SCIP_CALL( SCIPclockCreate(&(*stat)->reoptupdatetime, SCIP_CLOCKTYPE_DEFAULT) );
    96
    97 /* turn statistic timing on or off, depending on the user parameter */
    98 SCIPstatEnableOrDisableStatClocks(*stat, set->time_statistictiming);
    99
    100 SCIP_CALL( SCIPhistoryCreate(&(*stat)->glbhistory, blkmem) );
    101 SCIP_CALL( SCIPhistoryCreate(&(*stat)->glbhistorycrun, blkmem) );
    102 SCIP_CALL( SCIPvisualCreate(&(*stat)->visual, messagehdlr) );
    103 SCIP_CALL( SCIPcertificateCreate(&(*stat)->certificate, messagehdlr ) );
    104
    105 SCIP_CALL( SCIPregressionCreate(&(*stat)->regressioncandsobjval) );
    106
    107 if( set->exact_enable )
    108 {
    109 SCIP_CALL( SCIPrationalCreate(&(*stat)->lastlowerboundexact) );
    110 SCIPrationalSetNegInfinity((*stat)->lastlowerboundexact);
    111 }
    112 else
    113 (*stat)->lastlowerboundexact = NULL;
    114
    115 (*stat)->status = SCIP_STATUS_UNKNOWN;
    116 (*stat)->marked_nvaridx = 0;
    117 (*stat)->marked_ncolidx = 0;
    118 (*stat)->marked_nrowidx = 0;
    119 (*stat)->subscipdepth = 0;
    120 (*stat)->detertimecnt = 0.0;
    121 (*stat)->nreoptruns = 0;
    122
    123 SCIPstatReset(*stat, set, transprob, origprob);
    124
    125 return SCIP_OKAY;
    126}
    127
    128/** frees problem statistics data */
    130 SCIP_STAT** stat, /**< pointer to problem statistics data */
    131 BMS_BLKMEM* blkmem /**< block memory */
    132 )
    133{
    134 assert(stat != NULL);
    135 assert(*stat != NULL);
    136
    137 SCIPclockFree(&(*stat)->solvingtime);
    138 SCIPclockFree(&(*stat)->solvingtimeoverall);
    139 SCIPclockFree(&(*stat)->presolvingtime);
    140 SCIPclockFree(&(*stat)->presolvingtimeoverall);
    141 SCIPclockFree(&(*stat)->primallptime);
    142 SCIPclockFree(&(*stat)->duallptime);
    143 SCIPclockFree(&(*stat)->lexduallptime);
    144 SCIPclockFree(&(*stat)->barrierlptime);
    145 SCIPclockFree(&(*stat)->resolveinstablelptime);
    146 SCIPclockFree(&(*stat)->divinglptime);
    147 SCIPclockFree(&(*stat)->strongbranchtime);
    148 SCIPclockFree(&(*stat)->conflictlptime);
    149 SCIPclockFree(&(*stat)->provedfeaslptime);
    150 SCIPclockFree(&(*stat)->provedinfeaslptime);
    151 SCIPclockFree(&(*stat)->provedfeasbstime);
    152 SCIPclockFree(&(*stat)->provedinfeasbstime);
    153 SCIPclockFree(&(*stat)->provedfeaspstime);
    154 SCIPclockFree(&(*stat)->provedinfeaspstime);
    155 SCIPclockFree(&(*stat)->lpsoltime);
    156 SCIPclockFree(&(*stat)->relaxsoltime);
    157 SCIPclockFree(&(*stat)->pseudosoltime);
    158 SCIPclockFree(&(*stat)->sbsoltime);
    159 SCIPclockFree(&(*stat)->nodeactivationtime);
    160 SCIPclockFree(&(*stat)->nlpsoltime);
    161 SCIPclockFree(&(*stat)->copyclock);
    162 SCIPclockFree(&(*stat)->strongpropclock);
    163 SCIPclockFree(&(*stat)->reoptupdatetime);
    164
    165 SCIPhistoryFree(&(*stat)->glbhistory, blkmem);
    166 SCIPhistoryFree(&(*stat)->glbhistorycrun, blkmem);
    167 SCIPvisualFree(&(*stat)->visual);
    168 SCIPcertificateFree(&(*stat)->certificate);
    169
    170 SCIPregressionFree(&(*stat)->regressioncandsobjval);
    171
    172 if( (*stat)->lastlowerboundexact != NULL )
    173 SCIPrationalFree(&(*stat)->lastlowerboundexact);
    174
    175 BMSfreeMemory(stat);
    176
    177 return SCIP_OKAY;
    178}
    179
    180/** disables the collection of any statistic for a variable */
    182 SCIP_STAT* stat /**< problem statistics data */
    183 )
    184{
    185 assert(stat != NULL);
    186
    187 stat->collectvarhistory = FALSE;
    188}
    189
    190/** enables the collection of statistics for a variable */
    192 SCIP_STAT* stat /**< problem statistics data */
    193 )
    194{
    195 assert(stat != NULL);
    196
    197 stat->collectvarhistory = TRUE;
    198}
    199
    200/** marks statistics to be able to reset them when solving process is freed */
    202 SCIP_STAT* stat /**< problem statistics data */
    203 )
    204{
    205 assert(stat != NULL);
    206
    207 stat->marked_nvaridx = stat->nvaridx;
    208 stat->marked_ncolidx = stat->ncolidx;
    209 stat->marked_nrowidx = stat->nrowidx;
    210}
    211
    212/** reset statistics to the data before solving started */
    214 SCIP_STAT* stat, /**< problem statistics data */
    215 SCIP_SET* set, /**< global SCIP settings */
    216 SCIP_PROB* transprob, /**< transformed problem, or NULL */
    217 SCIP_PROB* origprob /**< original problem, or NULL */
    218 )
    219{
    220 assert(stat != NULL);
    221 assert(stat->marked_nvaridx >= 0);
    222 assert(stat->marked_ncolidx >= 0);
    223 assert(stat->marked_nrowidx >= 0);
    224
    249
    251
    253
    254 stat->vsidsweight = 1.0;
    255 stat->nlpiterations = 0;
    256 stat->nrootlpiterations = 0;
    257 stat->nrootfirstlpiterations = 0;
    258 stat->nprimallpiterations = 0;
    259 stat->nduallpiterations = 0;
    260 stat->nlexduallpiterations = 0;
    261 stat->nbarrierlpiterations = 0;
    263 stat->ndualresolvelpiterations = 0;
    265 stat->nnodelpiterations = 0;
    266 stat->ninitlpiterations = 0;
    267 stat->ndivinglpiterations = 0;
    268 stat->nsbdivinglpiterations = 0;
    269 stat->nsblpiterations = 0;
    270 stat->nsbtimesiterlimhit = 0L;
    271 stat->nrootsblpiterations = 0;
    272 stat->nconflictlpiterations = 0;
    273 stat->nresolveinstablelps = 0;
    274 stat->nresolveinstablelpiters = 0;
    275 stat->ntotalnodes = 0;
    276 stat->ntotalinternalnodes = 0;
    277 stat->ntotalnodesmerged = 0;
    278 stat->ncreatednodes = 0;
    279 stat->nlpsolsfound = 0;
    280 stat->nrelaxsolsfound = 0;
    281 stat->npssolsfound = 0;
    282 stat->nsbsolsfound = 0;
    283 stat->nlpbestsolsfound = 0;
    284 stat->nrelaxbestsolsfound = 0;
    285 stat->npsbestsolsfound = 0;
    286 stat->nsbbestsolsfound = 0;
    287 stat->nexternalsolsfound = 0;
    288 stat->domchgcount = 0;
    289 stat->nboundchgs = 0;
    290 stat->nholechgs = 0;
    291 stat->nprobboundchgs = 0;
    292 stat->nprobholechgs = 0;
    293 stat->nsbdowndomchgs = 0;
    294 stat->nsbupdomchgs = 0;
    295 stat->nruns = 0;
    296 stat->nconfrestarts = 0;
    297 stat->nrootboundchgs = 0;
    298 stat->nrootintfixings = 0;
    299 stat->prevrunnvars = 0;
    300 stat->nvaridx = stat->marked_nvaridx;
    301 stat->ncolidx = stat->marked_ncolidx;
    302 stat->nrowidx = stat->marked_nrowidx;
    303 stat->nnz = 0;
    304 stat->avgnnz = 0;
    305 stat->lpcount = 0;
    306 stat->relaxcount = 0;
    307 stat->nlps = 0;
    308 stat->nrootlps = 0;
    309 stat->nprimallps = 0;
    310 stat->nprimalzeroitlps = 0;
    311 stat->nduallps = 0;
    312 stat->ndualzeroitlps = 0;
    313 stat->nlexduallps = 0;
    314 stat->nbarrierlps = 0;
    315 stat->nbarrierzeroitlps = 0;
    316 stat->nprimalresolvelps = 0;
    317 stat->ndualresolvelps = 0;
    318 stat->nlexdualresolvelps = 0;
    319 stat->nnodelps = 0;
    320 stat->nnodezeroitlps = 0;
    321 stat->nisstoppedcalls = 0;
    322 stat->ninitlps = 0;
    323 stat->ndivinglps = 0;
    324 stat->nsbdivinglps = 0;
    325 stat->nnumtroublelpmsgs = 0;
    326 stat->nstrongbranchs = 0;
    327 stat->nrootstrongbranchs = 0;
    328 stat->nconflictlps = 0;
    329 stat->nexlp = 0;
    330 stat->nexlpinter = 0;
    331 stat->nexlpboundexc = 0;
    332 stat->nexlpintfeas = 0;
    333 stat->timefailexlpinf = 0;
    334 stat->timefailexlp = 0;
    335 stat->nfailexlp = 0;
    336 stat->nboundshift = 0;
    337 stat->nfailboundshift = 0;
    338 stat->nboundshiftinf = 0;
    339 stat->nfailboundshiftinf = 0;
    340 stat->nboundshiftobjlim = 0;
    341 stat->nboundshiftobjlimfail = 0;
    342 stat->nprojshift = 0;
    343 stat->nfailprojshift = 0;
    344 stat->nprojshiftinf = 0;
    345 stat->nfailprojshiftinf = 0;
    346 stat->nprojshiftobjlim = 0;
    347 stat->nprojshiftobjlimfail = 0;
    348 stat->niterationsexlp = 0;
    349 stat->niterationsexlpinf = 0;
    350 stat->nexlpinf = 0;
    351 stat->nfailexlpinf = 0;
    352 stat->nnlps = 0;
    353 stat->maxtotaldepth = -1;
    354 stat->nactiveconss = 0;
    355 stat->nenabledconss = 0;
    356 stat->solindex = 0;
    357 stat->memsavemode = FALSE;
    358 stat->nnodesbeforefirst = -1;
    359 stat->ninitconssadded = 0;
    360 stat->nactiveconssadded = 0;
    361 stat->externmemestim = 0;
    362 stat->exprlastvisitedtag = 0;
    363 stat->exprlastsoltag = 0;
    364 stat->exprlastdifftag = 0;
    365 stat->nrunsbeforefirst = -1;
    366 stat->firstprimalheur = NULL;
    369 stat->firstprimaldepth = -1;
    372 stat->primalzeroittime = 0.0;
    373 stat->dualzeroittime = 0.0;
    374 stat->barrierzeroittime = 0.0;
    377 stat->firstlptime = 0.0;
    379 stat->ncopies = 0;
    380 stat->nclockskipsleft = 0;
    381 stat->nactiveexpriter = 0;
    382 stat->marked_nvaridx = -1;
    383 stat->marked_ncolidx = -1;
    384 stat->marked_nrowidx = -1;
    385 stat->branchedunbdvar = FALSE;
    386 stat->bestefficacy = 0.0;
    387 stat->minefficacyfac = 0.5;
    388 stat->ncutpoolfails = 0;
    389
    390 stat->ndivesetlpiterations = 0;
    391 stat->ndivesetcalls = 0;
    392 stat->ndivesetlps = 0;
    393 stat->totaldivesetdepth = 0;
    394
    395 stat->userinterrupt = FALSE;
    396 stat->userrestart = FALSE;
    397 stat->inrestart = FALSE;
    398 stat->collectvarhistory = TRUE;
    399 stat->performpresol = FALSE;
    401
    403 SCIPstatResetPresolving(stat, set, transprob, origprob);
    405}
    406
    407/** reset implication counter */
    409 SCIP_STAT* stat /**< problem statistics data */
    410 )
    411{
    412 assert(stat != NULL);
    413
    414 stat->nimplications = 0;
    415}
    416
    417/** reset presolving and current run specific statistics */
    419 SCIP_STAT* stat, /**< problem statistics data */
    420 SCIP_SET* set, /**< global SCIP settings */
    421 SCIP_PROB* transprob, /**< transformed problem, or NULL if not yet existing */
    422 SCIP_PROB* origprob /**< original problem, or NULL */
    423 )
    424{
    425 assert(stat != NULL);
    426
    427 stat->npresolrounds = 0;
    428 stat->npresolroundsfast = 0;
    429 stat->npresolroundsmed = 0;
    430 stat->npresolroundsext = 0;
    431 stat->npresolfixedvars = 0;
    432 stat->npresolaggrvars = 0;
    433 stat->npresolchgvartypes = 0;
    434 stat->npresolchgbds = 0;
    435 stat->npresoladdholes = 0;
    436 stat->npresoldelconss = 0;
    437 stat->npresoladdconss = 0;
    438 stat->npresolupgdconss = 0;
    439 stat->npresolchgcoefs = 0;
    440 stat->npresolchgsides = 0;
    441
    442 SCIPstatResetCurrentRun(stat, set, transprob, origprob, FALSE);
    443}
    444
    445/** reset primal-dual, primal-reference, and reference-dual integral */
    447 SCIP_STAT* stat, /**< problem statistics data */
    448 SCIP_SET* set, /**< global SCIP settings */
    449 SCIP_Bool partialreset /**< should time and integral value be kept? (in combination with no statistical
    450 * reset, integrals are added for each problem to be solved) */
    451 )
    452{
    453 assert(stat != NULL);
    454
    455 stat->previousgap = 100.0;
    456 stat->previousdualrefgap = 100.0;
    457 stat->previousprimalrefgap = 100.0;
    462
    463 /* partial resets keep the integral value and previous evaluation time */
    464 if( !partialreset )
    465 {
    466 stat->previntegralevaltime = 0.0;
    467 stat->dualrefintegral = 0.0;
    468 stat->primalrefintegral = 0.0;
    469 stat->primaldualintegral = 0.0;
    470 }
    471}
    472
    473/** returns the gap bounded by 100 */
    474static
    476 SCIP_SET* set, /**< global SCIP settings */
    477 SCIP_Real primalbound, /**< current primal bound */
    478 SCIP_Real dualbound, /**< current dual bound */
    479 SCIP_Real upperbound, /**< current upper bound in transformed problem, or infinity */
    480 SCIP_Real lowerbound /**< current lower bound in transformed space, or -infinity */
    481 )
    482{
    483 SCIP_Real gap;
    484
    485 /* computation of the gap, special cases are handled first */
    486 if( primalbound >= SCIP_UNKNOWN || dualbound >= SCIP_UNKNOWN ) /*lint !e777*/
    487 gap = 100.0;
    488 /* the gap is 0.0 if bounds coincide */
    489 else if( SCIPsetIsGE(set, lowerbound, upperbound) || SCIPsetIsEQ(set, primalbound, dualbound) )
    490 gap = 0.0;
    491 /* the gap is 100.0 if bounds have different signs */
    492 else if( primalbound * dualbound <= 0.0 ) /*lint !e777*/
    493 gap = 100.0;
    494 else if( !SCIPsetIsInfinity(set, REALABS(primalbound)) && !SCIPsetIsInfinity(set, REALABS(dualbound)) )
    495 {
    496 SCIP_Real absprim = REALABS(primalbound);
    497 SCIP_Real absdual = REALABS(dualbound);
    498
    499 /* The gap in the definition of the primal-dual integral differs from the default SCIP gap function.
    500 * Here, the MAX(primalbound, dualbound) is taken for gap quotient in order to ensure a gap <= 100.
    501 */
    502 gap = 100.0 * REALABS(primalbound - dualbound) / MAX(absprim, absdual);
    503 assert(SCIPsetIsLE(set, gap, 100.0));
    504 }
    505 else
    506 gap = 100.0;
    507
    508 return gap;
    509}
    510
    511/** update the primal-dual, primal-reference, and reference-dual integral statistics.
    512 * method accepts + and - SCIPsetInfinity() as values for upper and lower bound, respectively
    513 */
    515 SCIP_STAT* stat, /**< problem statistics data */
    516 SCIP_SET* set, /**< global SCIP settings */
    517 SCIP_PROB* transprob, /**< transformed problem */
    518 SCIP_PROB* origprob, /**< original problem */
    519 SCIP_Real upperbound, /**< current upper bound in transformed problem, or infinity */
    520 SCIP_Real lowerbound /**< current lower bound in transformed space, or -infinity */
    521 )
    522{
    523 SCIP_Real currentgap;
    524 SCIP_Real currentdualrefgap;
    525 SCIP_Real currentprimalrefgap;
    526 SCIP_Real solvingtime;
    527 SCIP_Real primalbound;
    528 SCIP_Real dualbound;
    529 SCIP_Real deltatime;
    530
    531 assert(stat != NULL);
    532 assert(set != NULL);
    533
    534 solvingtime = MAX(SCIPclockGetTime(stat->solvingtime), stat->previntegralevaltime); /*lint !e666*/
    535 assert(solvingtime >= stat->previntegralevaltime);
    536
    537 if( !SCIPsetIsInfinity(set, upperbound) ) /*lint !e777*/
    538 {
    539 /* get value in original space for gap calculation */
    540 primalbound = SCIPprobExternObjval(transprob, origprob, set, upperbound);
    541
    542 if( SCIPsetIsZero(set, primalbound) )
    543 primalbound = 0.0;
    544 }
    545 else
    546 {
    547 /* no new upper bound: use stored values from last update */
    548 upperbound = stat->lastupperbound;
    549 primalbound = stat->lastprimalbound;
    550 assert(SCIPsetIsZero(set, primalbound) == (primalbound == 0.0)); /*lint !e777*/
    551 }
    552
    553 if( !SCIPsetIsInfinity(set, -lowerbound) ) /*lint !e777*/
    554 {
    555 /* get value in original space for gap calculation */
    556 dualbound = SCIPprobExternObjval(transprob, origprob, set, lowerbound);
    557
    558 if( SCIPsetIsZero(set, dualbound) )
    559 dualbound = 0.0;
    560 }
    561 else
    562 {
    563 /* no new lower bound: use stored values from last update */
    564 lowerbound = stat->lastlowerbound;
    565 dualbound = stat->lastdualbound;
    566 assert(SCIPsetIsZero(set, dualbound) == (dualbound == 0.0)); /*lint !e777*/
    567 }
    568
    569 /* calculate primal-dual and dual reference gap */
    570 currentgap = getGap(set, primalbound, dualbound, upperbound, lowerbound);
    571
    572 /* if primal and dual bound have opposite signs, the gap always evaluates to 100.0% */
    573 assert(currentgap == 0.0 || currentgap == 100.0 || SCIPsetIsGE(set, primalbound * dualbound, 0.0));
    574
    575 /* update the integral based on previous information */
    576 deltatime = solvingtime - stat->previntegralevaltime;
    577 stat->primaldualintegral += deltatime * stat->previousgap;
    578 stat->dualrefintegral += deltatime * stat->previousdualrefgap;
    579 stat->primalrefintegral += deltatime * stat->previousprimalrefgap;
    580
    581 if( !SCIPsetIsInfinity(set, REALABS(set->misc_referencevalue)) )
    582 {
    583 currentdualrefgap = getGap(set, set->misc_referencevalue, dualbound, upperbound, lowerbound);
    584 assert(currentdualrefgap == 0.0 || currentdualrefgap == 100.0 || SCIPsetIsGE(set, set->misc_referencevalue * dualbound, 0.0));
    585
    586 currentprimalrefgap = getGap(set, primalbound, set->misc_referencevalue, upperbound, lowerbound);
    587 assert(currentprimalrefgap == 0.0 || currentprimalrefgap == 100.0 || SCIPsetIsGE(set, primalbound * set->misc_referencevalue, 0.0));
    588 }
    589 else
    590 {
    591 currentdualrefgap = 100.0;
    592 currentprimalrefgap = 100.0;
    593 }
    594
    595 /* update all relevant information for next evaluation */
    596 stat->previousgap = currentgap;
    597 stat->previousdualrefgap = currentdualrefgap;
    598 stat->previousprimalrefgap = currentprimalrefgap;
    599 stat->previntegralevaltime = solvingtime;
    600 stat->lastprimalbound = primalbound;
    601 stat->lastdualbound = dualbound;
    602 stat->lastlowerbound = lowerbound;
    603 stat->lastupperbound = upperbound;
    604}
    605
    606/** optionally update and return the reference-dual integral statistic */
    608 SCIP_STAT* stat, /**< problem statistics data */
    609 SCIP_SET* set, /**< global SCIP settings */
    610 SCIP_PROB* transprob, /**< transformed problem */
    611 SCIP_PROB* origprob, /**< original problem */
    612 SCIP_Bool update /**< should the value be updated first? */
    613 )
    614{
    615 assert(stat != NULL);
    616 assert(set != NULL);
    617 assert(transprob != NULL);
    618 assert(origprob != NULL);
    619
    620 /* update the reference-dual integral first */
    621 if( update )
    623
    624 return stat->dualrefintegral;
    625}
    626
    627/** optionally update and return the primal-reference integral statistic */
    629 SCIP_STAT* stat, /**< problem statistics data */
    630 SCIP_SET* set, /**< global SCIP settings */
    631 SCIP_PROB* transprob, /**< transformed problem */
    632 SCIP_PROB* origprob, /**< original problem */
    633 SCIP_Bool update /**< should the value be updated first? */
    634 )
    635{
    636 assert(stat != NULL);
    637 assert(set != NULL);
    638 assert(transprob != NULL);
    639 assert(origprob != NULL);
    640
    641 /* update the primal-reference integral first */
    642 if( update )
    644
    645 return stat->primalrefintegral;
    646}
    647
    648/** optionally update and return the primal-dual integral statistic */
    650 SCIP_STAT* stat, /**< problem statistics data */
    651 SCIP_SET* set, /**< global SCIP settings */
    652 SCIP_PROB* transprob, /**< transformed problem */
    653 SCIP_PROB* origprob, /**< original problem */
    654 SCIP_Bool update /**< should the value be updated first? */
    655 )
    656{
    657 assert(stat != NULL);
    658 assert(set != NULL);
    659 assert(transprob != NULL);
    660 assert(origprob != NULL);
    661
    662 /* update the primal dual reference integral first */
    663 if( update )
    665
    666 return stat->primaldualintegral;
    667}
    668
    669/** reset current branch and bound run specific statistics */
    671 SCIP_STAT* stat, /**< problem statistics data */
    672 SCIP_SET* set, /**< global SCIP settings */
    673 SCIP_PROB* transprob, /**< transformed problem, or NULL */
    674 SCIP_PROB* origprob, /**< original problem, or NULL */
    675 SCIP_Bool solved /**< is problem already solved? */
    676 )
    677{
    678 assert(stat != NULL);
    679
    680 stat->nnodes = 0;
    681 stat->ninternalnodes = 0;
    682 stat->ncreatednodesrun = 0;
    683 stat->nactivatednodes = 0;
    684 stat->ndeactivatednodes = 0;
    685 stat->nbacktracks = 0;
    686 stat->ndelayedcutoffs = 0;
    687 stat->nreprops = 0;
    688 stat->nrepropboundchgs = 0;
    689 stat->nrepropcutoffs = 0;
    690 stat->lastdivenode = 0;
    691 stat->lastconflictnode = 0;
    692 stat->bestsolnode = 0;
    696 stat->boundingerrorbs = 0;
    697 stat->boundingerrorps = 0;
    698 stat->boundingerrorexlp = 0;
    699 stat->lastbranchvar = NULL;
    701 stat->nrootboundchgsrun = 0;
    702 stat->nrootintfixingsrun = 0;
    703 stat->npricerounds = 0;
    704 stat->nseparounds = 0;
    705 stat->maxdepth = -1;
    706 stat->plungedepth = 0;
    707 stat->nobjleaves = 0;
    708 stat->ninfeasleaves = 0;
    709 stat->nfeasleaves = 0;
    710 stat->branchedunbdvar = FALSE;
    711 stat->nnumtroublelpmsgs = 0;
    712
    713 stat->nearlybacktracks = 0;
    714 stat->nnodesaboverefbound = 0;
    715
    716 assert(transprob == NULL || origprob != NULL);
    717 /* calculate the reference bound in transformed space from the reference value */
    718 if( transprob != NULL && !SCIPsetIsInfinity(set, SCIPsetGetReferencevalue(set)) )
    720 else
    722
    723 if( !solved )
    725
    727
    729
    731}
    732
    733/** resets display statistics, such that a new header line is displayed before the next display line */
    735 SCIP_STAT* stat /**< problem statistics data */
    736 )
    737{
    738 assert(stat != NULL);
    739
    740 stat->lastdispnode = 0;
    741 stat->ndisplines = 0;
    742}
    743
    744/** increases LP count, such that all lazy updates depending on the LP are enforced again */
    746 SCIP_STAT* stat /**< problem statistics data */
    747 )
    748{
    749 assert(stat != NULL);
    750
    751 stat->lpcount++;
    752}
    753
    754/** depending on the current memory usage, switches mode flag to standard or memory saving mode */
    756 SCIP_STAT* stat, /**< problem statistics data */
    757 SCIP_SET* set, /**< global SCIP settings */
    758 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    759 SCIP_MEM* mem /**< block memory pools */
    760 )
    761{
    762 assert(stat != NULL);
    763 assert(set != NULL);
    764
    765 if( SCIPsetIsLT(set, set->mem_savefac, 1.0) )
    766 {
    767 SCIP_Longint memused;
    768
    769 memused = SCIPmemGetTotal(mem);
    770 if( !stat->memsavemode && memused >= set->mem_savefac * set->limit_memory * 1024.0 * 1024.0 )
    771 {
    772 /* switch to memory saving mode */
    773 SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_HIGH,
    774 "(node %" SCIP_LONGINT_FORMAT ") switching to memory saving mode (mem: %.1fM/%.1fM)\n",
    775 stat->nnodes, (SCIP_Real)memused/(1024.0*1024.0), set->limit_memory);
    776 stat->memsavemode = TRUE;
    777 set->nodesel = NULL;
    778 }
    779 else if( stat->memsavemode && memused < 0.5 * set->mem_savefac * set->limit_memory * 1024.0 * 1024.0 )
    780 {
    781 /* switch to standard mode */
    782 SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_HIGH,
    783 "(node %" SCIP_LONGINT_FORMAT ") switching to standard mode (mem: %.1fM/%.1fM)\n",
    784 stat->nnodes, (SCIP_Real)memused/(1024.0*1024.0), set->limit_memory);
    785 stat->memsavemode = FALSE;
    786 set->nodesel = NULL;
    787 }
    788 }
    789 else
    790 stat->memsavemode = FALSE;
    791}
    792
    793/** returns the estimated number of bytes used by extern software, e.g., the LP solver */
    795 SCIP_STAT* stat /**< dynamic SCIP statistics */
    796 )
    797{
    798 return stat->externmemestim;
    799}
    800
    801/** enables or disables all statistic clocks of \p stat concerning LP execution time, strong branching time, etc.
    802 *
    803 * @note: The (pre-)solving time clocks which are relevant for the output during (pre-)solving
    804 * are not affected by this method
    805 *
    806 * @see: For completely disabling all timing of SCIP, consider setting the parameter timing/enabled to FALSE
    807 */
    809 SCIP_STAT* stat, /**< SCIP statistics */
    810 SCIP_Bool enable /**< should the LP clocks be enabled? */
    811 )
    812{
    813 assert(stat != NULL);
    814
    829 SCIPclockEnableOrDisable(stat->lpsoltime, enable);
    832 SCIPclockEnableOrDisable(stat->sbsoltime, enable);
    835 SCIPclockEnableOrDisable(stat->copyclock, enable);
    837}
    838
    839/** recompute root LP best-estimate from scratch */
    841 SCIP_STAT* stat, /**< SCIP statistics */
    842 SCIP_SET* set, /**< global SCIP settings */
    843 SCIP_Real rootlpobjval, /**< root LP objective value */
    844 SCIP_VAR** vars, /**< problem variables */
    845 int nvars /**< number of variables */
    846 )
    847{
    848 int v;
    849 stat->rootlpbestestimate = rootlpobjval;
    850
    851 /* compute best-estimate contribution for every variable */
    852 for( v = 0; v < nvars; ++v )
    853 {
    854 SCIP_Real rootlpsol;
    855 SCIP_Real varminpseudoscore;
    856
    857 /* stop at the first continuous variable */
    858 if( !SCIPvarIsIntegral(vars[v]) )
    859 break;
    860
    861 rootlpsol = SCIPvarGetRootSol(vars[v]);
    862 varminpseudoscore = SCIPvarGetMinPseudocostScore(vars[v], stat, set, rootlpsol);
    863 assert(varminpseudoscore >= 0);
    864 stat->rootlpbestestimate += varminpseudoscore;
    865
    866 SCIPstatDebugMsg(stat, "Root LP Estimate initialization: <%s> + %15.9f\n", SCIPvarGetName(vars[v]), varminpseudoscore);
    867 }
    868}
    869
    870/** update root LP best-estimate with changed variable pseudo-costs */
    872 SCIP_STAT* stat, /**< SCIP statistics */
    873 SCIP_SET* set, /**< global SCIP settings */
    874 SCIP_VAR* var, /**< variable with changed pseudo costs */
    875 SCIP_Real oldrootpscostscore /**< old minimum pseudo cost score of variable */
    876 )
    877{
    878 SCIP_Real rootlpsol;
    879 SCIP_Real varminpseudoscore;
    880
    882
    883 /* entire root LP best-estimate must be computed from scratch first */
    884 if( stat->rootlpbestestimate == SCIP_INVALID ) /*lint !e777*/
    885 return SCIP_OKAY;
    886
    887 rootlpsol = SCIPvarGetRootSol(var);
    888
    889 /* LP root estimate only works for variables with fractional LP root solution */
    890 if( SCIPsetIsFeasIntegral(set, rootlpsol) )
    891 return SCIP_OKAY;
    892
    893 /* subtract old pseudo cost contribution and add new contribution afterwards */
    894 stat->rootlpbestestimate -= oldrootpscostscore;
    895
    896 varminpseudoscore = SCIPvarGetMinPseudocostScore(var, stat, set, rootlpsol);
    897 assert(varminpseudoscore >= 0.0);
    898 stat->rootlpbestestimate += varminpseudoscore;
    899
    900 SCIPstatDebugMsg(stat, "Root LP estimate update: <%s> - %15.9f + %15.9f\n", SCIPvarGetName(var), oldrootpscostscore, varminpseudoscore);
    901
    902 return SCIP_OKAY;
    903}
    904
    905/** prints a debug message */
    907 SCIP_STAT* stat, /**< SCIP statistics */
    908 const char* sourcefile, /**< name of the source file that called the function */
    909 int sourceline, /**< line in the source file where the function was called */
    910 const char* formatstr, /**< format string like in printf() function */
    911 ... /**< format arguments line in printf() function */
    912 )
    913{
    914 const char* filename;
    915 va_list ap;
    916
    917 assert( sourcefile != NULL );
    918 assert( stat != NULL );
    919
    920 /* strip directory from filename */
    921#ifdef _WIN32
    922 filename = strrchr(sourcefile, '\\');
    923#else
    924 filename = strrchr(sourcefile, '/');
    925#endif
    926 if ( filename == NULL )
    927 filename = sourcefile;
    928 else
    929 ++filename;
    930
    931 if ( stat->subscipdepth > 0 )
    932 printf("%d: [%s:%d] debug: ", stat->subscipdepth, filename, sourceline);
    933 else
    934 printf("[%s:%d] debug: ", filename, sourceline);
    935
    936 va_start(ap, formatstr); /*lint !e838*/
    937 (void)vprintf(formatstr, ap);
    938 va_end(ap);
    939}
    940
    941/** prints a debug message without precode */
    943 SCIP_STAT* stat, /**< SCIP statistics */
    944 const char* formatstr, /**< format string like in printf() function */
    945 ... /**< format arguments line in printf() function */
    946 )
    947{ /*lint --e{715}*/
    948 va_list ap;
    949
    950 assert(stat != NULL);
    951
    952 va_start(ap, formatstr); /*lint !e838*/
    953 printf(formatstr, ap);
    954 va_end(ap);
    955}
    void SCIPcertificateFree(SCIP_CERTIFICATE **certificate)
    SCIP_RETCODE SCIPcertificateCreate(SCIP_CERTIFICATE **certificate, SCIP_MESSAGEHDLR *messagehdlr)
    methods for certificate output
    void SCIPclockEnableOrDisable(SCIP_CLOCK *clck, SCIP_Bool enable)
    Definition: clock.c:260
    SCIP_Real SCIPclockGetTime(SCIP_CLOCK *clck)
    Definition: clock.c:438
    void SCIPclockReset(SCIP_CLOCK *clck)
    Definition: clock.c:209
    void SCIPclockFree(SCIP_CLOCK **clck)
    Definition: clock.c:185
    SCIP_RETCODE SCIPclockCreate(SCIP_CLOCK **clck, SCIP_CLOCKTYPE clocktype)
    Definition: clock.c:170
    internal methods for clocks and timing issues
    #define SCIP_DEFAULT_INFINITY
    Definition: def.h:170
    #define NULL
    Definition: def.h:255
    #define SCIP_Longint
    Definition: def.h:148
    #define SCIP_REAL_MAX
    Definition: def.h:165
    #define SCIP_INVALID
    Definition: def.h:185
    #define SCIP_Bool
    Definition: def.h:98
    #define SCIP_ALLOC(x)
    Definition: def.h:373
    #define SCIP_Real
    Definition: def.h:163
    #define SCIP_UNKNOWN
    Definition: def.h:186
    #define TRUE
    Definition: def.h:100
    #define FALSE
    Definition: def.h:101
    #define MAX(x, y)
    Definition: def.h:227
    #define SCIP_LONGINT_FORMAT
    Definition: def.h:155
    #define SCIP_REAL_MIN
    Definition: def.h:166
    #define REALABS(x)
    Definition: def.h:189
    #define SCIP_CALL(x)
    Definition: def.h:362
    SCIP_RETCODE SCIPrationalCreate(SCIP_RATIONAL **rational)
    Definition: rational.cpp:95
    void SCIPrationalSetNegInfinity(SCIP_RATIONAL *res)
    Definition: rational.cpp:631
    void SCIPrationalFree(SCIP_RATIONAL **rational)
    Definition: rational.cpp:451
    SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
    Definition: var.c:23386
    const char * SCIPvarGetName(SCIP_VAR *var)
    Definition: var.c:23267
    SCIP_Real SCIPvarGetRootSol(SCIP_VAR *var)
    Definition: var.c:19115
    SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
    Definition: var.c:23490
    void SCIPregressionFree(SCIP_REGRESSION **regression)
    Definition: misc.c:436
    SCIP_RETCODE SCIPregressionCreate(SCIP_REGRESSION **regression)
    Definition: misc.c:420
    void SCIPregressionReset(SCIP_REGRESSION *regression)
    Definition: misc.c:404
    void SCIPhistoryReset(SCIP_HISTORY *history)
    Definition: history.c:78
    SCIP_RETCODE SCIPhistoryCreate(SCIP_HISTORY **history, BMS_BLKMEM *blkmem)
    Definition: history.c:51
    void SCIPhistoryFree(SCIP_HISTORY **history, BMS_BLKMEM *blkmem)
    Definition: history.c:66
    internal methods for branching and inference history
    SCIP_Longint SCIPmemGetTotal(SCIP_MEM *mem)
    Definition: mem.c:108
    methods for block memory pools and memory buffers
    #define BMSfreeMemory(ptr)
    Definition: memory.h:145
    struct BMS_BlkMem BMS_BLKMEM
    Definition: memory.h:437
    #define BMSallocMemory(ptr)
    Definition: memory.h:118
    void SCIPmessagePrintVerbInfo(SCIP_MESSAGEHDLR *messagehdlr, SCIP_VERBLEVEL verblevel, SCIP_VERBLEVEL msgverblevel, const char *formatstr,...)
    Definition: message.c:678
    SCIP_Real SCIPprobExternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
    Definition: prob.c:2520
    SCIP_Real SCIPprobInternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
    Definition: prob.c:2573
    internal methods for storing and manipulating the main problem
    public methods for message output
    public data structures and miscellaneous methods
    public methods for problem variables
    SCIP_Bool SCIPsetIsGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
    Definition: set.c:6617
    SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
    Definition: set.c:6577
    SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
    Definition: set.c:6537
    SCIP_Real SCIPsetInfinity(SCIP_SET *set)
    Definition: set.c:6380
    SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
    Definition: set.c:6557
    SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
    Definition: set.c:6515
    SCIP_Bool SCIPsetIsZero(SCIP_SET *set, SCIP_Real val)
    Definition: set.c:6637
    SCIP_Real SCIPsetGetReferencevalue(SCIP_SET *set)
    Definition: set.c:6261
    SCIP_Bool SCIPsetIsFeasIntegral(SCIP_SET *set, SCIP_Real val)
    Definition: set.c:7098
    internal methods for global SCIP settings
    void SCIPstatUpdatePrimalDualIntegrals(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Real upperbound, SCIP_Real lowerbound)
    Definition: stat.c:514
    void SCIPstatComputeRootLPBestEstimate(SCIP_STAT *stat, SCIP_SET *set, SCIP_Real rootlpobjval, SCIP_VAR **vars, int nvars)
    Definition: stat.c:840
    void SCIPstatMark(SCIP_STAT *stat)
    Definition: stat.c:201
    SCIP_Real SCIPstatGetPrimalReferenceIntegral(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Bool update)
    Definition: stat.c:628
    SCIP_RETCODE SCIPstatUpdateVarRootLPBestEstimate(SCIP_STAT *stat, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldrootpscostscore)
    Definition: stat.c:871
    void SCIPstatResetImplications(SCIP_STAT *stat)
    Definition: stat.c:408
    void SCIPstatResetDisplay(SCIP_STAT *stat)
    Definition: stat.c:734
    void SCIPstatPrintDebugMessage(SCIP_STAT *stat, const char *sourcefile, int sourceline, const char *formatstr,...)
    Definition: stat.c:906
    static SCIP_Real getGap(SCIP_SET *set, SCIP_Real primalbound, SCIP_Real dualbound, SCIP_Real upperbound, SCIP_Real lowerbound)
    Definition: stat.c:475
    SCIP_Real SCIPstatGetDualReferenceIntegral(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Bool update)
    Definition: stat.c:607
    SCIP_RETCODE SCIPstatFree(SCIP_STAT **stat, BMS_BLKMEM *blkmem)
    Definition: stat.c:129
    void SCIPstatResetPrimalDualIntegrals(SCIP_STAT *stat, SCIP_SET *set, SCIP_Bool partialreset)
    Definition: stat.c:446
    void SCIPstatResetPresolving(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
    Definition: stat.c:418
    void SCIPstatReset(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
    Definition: stat.c:213
    void SCIPstatEnableOrDisableStatClocks(SCIP_STAT *stat, SCIP_Bool enable)
    Definition: stat.c:808
    void SCIPstatEnableVarHistory(SCIP_STAT *stat)
    Definition: stat.c:191
    void SCIPstatEnforceLPUpdates(SCIP_STAT *stat)
    Definition: stat.c:745
    void SCIPstatUpdateMemsaveMode(SCIP_STAT *stat, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_MEM *mem)
    Definition: stat.c:755
    void SCIPstatDisableVarHistory(SCIP_STAT *stat)
    Definition: stat.c:181
    void SCIPstatResetCurrentRun(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Bool solved)
    Definition: stat.c:670
    SCIP_RETCODE SCIPstatCreate(SCIP_STAT **stat, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_MESSAGEHDLR *messagehdlr)
    Definition: stat.c:56
    SCIP_Longint SCIPstatGetMemExternEstim(SCIP_STAT *stat)
    Definition: stat.c:794
    SCIP_Real SCIPstatGetPrimalDualIntegral(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Bool update)
    Definition: stat.c:649
    void SCIPstatDebugMessagePrint(SCIP_STAT *stat, const char *formatstr,...)
    Definition: stat.c:942
    internal methods for problem statistics
    #define SCIPstatDebugMsg
    Definition: stat.h:322
    SCIP_Real timefailexlpinf
    Definition: struct_stat.h:166
    SCIP_Longint nnlps
    Definition: struct_stat.h:250
    SCIP_Longint nlexdualresolvelpiterations
    Definition: struct_stat.h:73
    SCIP_Longint nexlpinter
    Definition: struct_stat.h:232
    SCIP_Longint ntotalnodesmerged
    Definition: struct_stat.h:91
    SCIP_STATUS status
    Definition: struct_stat.h:201
    SCIP_Longint nearlybacktracks
    Definition: struct_stat.h:96
    SCIP_Longint ndualresolvelpiterations
    Definition: struct_stat.h:72
    SCIP_Longint nfailboundshiftinf
    Definition: struct_stat.h:239
    SCIP_Real rootlowerbound
    Definition: struct_stat.h:133
    SCIP_Longint nboundshiftinf
    Definition: struct_stat.h:238
    SCIP_Longint nrootstrongbranchs
    Definition: struct_stat.h:227
    SCIP_Longint nprimalresolvelpiterations
    Definition: struct_stat.h:71
    SCIP_Bool inrestart
    Definition: struct_stat.h:316
    SCIP_Longint nactiveconssadded
    Definition: struct_stat.h:126
    int npresoladdholes
    Definition: struct_stat.h:286
    SCIP_Bool performpresol
    Definition: struct_stat.h:318
    SCIP_Longint nprojshiftinf
    Definition: struct_stat.h:244
    SCIP_Longint nprimallps
    Definition: struct_stat.h:209
    SCIP_Real dualrefintegral
    Definition: struct_stat.h:146
    SCIP_Real minefficacyfac
    Definition: struct_stat.h:161
    SCIP_Longint nrelaxsolsfound
    Definition: struct_stat.h:104
    SCIP_CLOCK * strongpropclock
    Definition: struct_stat.h:193
    SCIP_Longint nsbdowndomchgs
    Definition: struct_stat.h:121
    SCIP_Real previousgap
    Definition: struct_stat.h:149
    SCIP_Longint nprimalzeroitlps
    Definition: struct_stat.h:210
    SCIP_Real boundingerrorps
    Definition: struct_stat.h:164
    SCIP_Longint nreprops
    Definition: struct_stat.h:100
    SCIP_CLOCK * sbsoltime
    Definition: struct_stat.h:189
    SCIP_Real lastsolgap
    Definition: struct_stat.h:138
    SCIP_Longint nnodes
    Definition: struct_stat.h:84
    SCIP_Longint exprlastsoltag
    Definition: struct_stat.h:129
    SCIP_Longint nboundshift
    Definition: struct_stat.h:236
    SCIP_REGRESSION * regressioncandsobjval
    Definition: struct_stat.h:63
    int npresolupgdconss
    Definition: struct_stat.h:289
    SCIP_Longint nsblpiterations
    Definition: struct_stat.h:79
    SCIP_Longint ntotalnodes
    Definition: struct_stat.h:89
    SCIP_CLOCK * strongbranchtime
    Definition: struct_stat.h:178
    SCIP_Real previousdualrefgap
    Definition: struct_stat.h:150
    int ndivesetcalls
    Definition: struct_stat.h:254
    SCIP_Longint exprlastvisitedtag
    Definition: struct_stat.h:128
    SCIP_Bool disableenforelaxmsg
    Definition: struct_stat.h:320
    SCIP_CLOCK * barrierlptime
    Definition: struct_stat.h:175
    SCIP_Real dualzeroittime
    Definition: struct_stat.h:140
    SCIP_Longint nduallps
    Definition: struct_stat.h:211
    SCIP_Longint ninfeasleaves
    Definition: struct_stat.h:88
    SCIP_VAR * lastbranchvar
    Definition: struct_stat.h:197
    SCIP_Real avgnnz
    Definition: struct_stat.h:131
    SCIP_Longint nrepropcutoffs
    Definition: struct_stat.h:102
    SCIP_CLOCK * copyclock
    Definition: struct_stat.h:192
    SCIP_Longint nduallpiterations
    Definition: struct_stat.h:68
    SCIP_CLOCK * provedfeaslptime
    Definition: struct_stat.h:180
    int nclockskipsleft
    Definition: struct_stat.h:311
    SCIP_Longint ncreatednodesrun
    Definition: struct_stat.h:93
    SCIP_Longint ndelayedcutoffs
    Definition: struct_stat.h:99
    SCIP_CLOCK * nodeactivationtime
    Definition: struct_stat.h:190
    SCIP_Longint nlps
    Definition: struct_stat.h:207
    SCIP_Longint externmemestim
    Definition: struct_stat.h:127
    SCIP_Real lastlowerbound
    Definition: struct_stat.h:155
    SCIP_Longint ndualresolvelps
    Definition: struct_stat.h:217
    SCIP_Real rootlpbestestimate
    Definition: struct_stat.h:158
    SCIP_Longint nbarrierlpiterations
    Definition: struct_stat.h:70
    SCIP_Longint nfailprojshiftinf
    Definition: struct_stat.h:245
    SCIP_Longint nboundshiftobjlimfail
    Definition: struct_stat.h:241
    SCIP_Longint domchgcount
    Definition: struct_stat.h:116
    SCIP_Longint nnodelps
    Definition: struct_stat.h:219
    SCIP_Longint nconflictlps
    Definition: struct_stat.h:228
    SCIP_LPSOLSTAT lastsblpsolstats[2]
    Definition: struct_stat.h:203
    SCIP_Longint nnz
    Definition: struct_stat.h:204
    SCIP_CLOCK * divinglptime
    Definition: struct_stat.h:177
    SCIP_Longint nrootsblpiterations
    Definition: struct_stat.h:80
    SCIP_Longint ndivesetlpiterations
    Definition: struct_stat.h:77
    SCIP_Longint lpcount
    Definition: struct_stat.h:205
    SCIP_Longint nprobholechgs
    Definition: struct_stat.h:120
    SCIP_CLOCK * presolvingtime
    Definition: struct_stat.h:170
    int prevrunnvars
    Definition: struct_stat.h:262
    SCIP_Longint nrootfirstlpiterations
    Definition: struct_stat.h:66
    SCIP_Longint nbacktracks
    Definition: struct_stat.h:98
    SCIP_Real maxcopytime
    Definition: struct_stat.h:142
    SCIP_Longint ninitconssadded
    Definition: struct_stat.h:125
    int nseparounds
    Definition: struct_stat.h:270
    SCIP_Longint ndivesetlps
    Definition: struct_stat.h:223
    SCIP_CLOCK * provedinfeaspstime
    Definition: struct_stat.h:185
    SCIP_Real previousprimalrefgap
    Definition: struct_stat.h:151
    SCIP_Longint nlpiterations
    Definition: struct_stat.h:64
    SCIP_Longint nprimalresolvelps
    Definition: struct_stat.h:216
    SCIP_Longint exprlastdifftag
    Definition: struct_stat.h:130
    SCIP_Longint ndivinglpiterations
    Definition: struct_stat.h:76
    SCIP_CLOCK * nlpsoltime
    Definition: struct_stat.h:191
    int nconfrestarts
    Definition: struct_stat.h:257
    int firstprimaldepth
    Definition: struct_stat.h:308
    SCIP_Longint nfeasleaves
    Definition: struct_stat.h:87
    SCIP_Longint nsbsolsfound
    Definition: struct_stat.h:106
    int npricerounds
    Definition: struct_stat.h:269
    int npresolroundsext
    Definition: struct_stat.h:281
    SCIP_Longint lastdivenode
    Definition: struct_stat.h:113
    SCIP_Longint nlexdualresolvelps
    Definition: struct_stat.h:218
    int npresolaggrvars
    Definition: struct_stat.h:283
    SCIP_HISTORY * glbhistory
    Definition: struct_stat.h:195
    SCIP_Longint ndeactivatednodes
    Definition: struct_stat.h:95
    int nrootboundchgs
    Definition: struct_stat.h:258
    int solindex
    Definition: struct_stat.h:306
    SCIP_Longint nprojshiftobjlimfail
    Definition: struct_stat.h:247
    SCIP_Longint nrepropboundchgs
    Definition: struct_stat.h:101
    SCIP_Longint nnodesaboverefbound
    Definition: struct_stat.h:97
    SCIP_Real firstlpdualbound
    Definition: struct_stat.h:132
    SCIP_Longint nlexduallpiterations
    Definition: struct_stat.h:69
    SCIP_Longint nrootlpiterations
    Definition: struct_stat.h:65
    SCIP_Longint nnumtroublelpmsgs
    Definition: struct_stat.h:225
    SCIP_CLOCK * resolveinstablelptime
    Definition: struct_stat.h:176
    SCIP_Longint relaxcount
    Definition: struct_stat.h:206
    SCIP_Real firstprimaltime
    Definition: struct_stat.h:136
    int nrootintfixingsrun
    Definition: struct_stat.h:261
    SCIP_Longint nprojshiftobjlim
    Definition: struct_stat.h:246
    SCIP_Longint nlexduallps
    Definition: struct_stat.h:213
    SCIP_Longint ninternalnodes
    Definition: struct_stat.h:85
    SCIP_CLOCK * provedinfeasbstime
    Definition: struct_stat.h:183
    int ncutpoolfails
    Definition: struct_stat.h:256
    int nrootintfixings
    Definition: struct_stat.h:260
    SCIP_Longint nexlpintfeas
    Definition: struct_stat.h:233
    SCIP_Real firstsolgap
    Definition: struct_stat.h:137
    SCIP_Longint nexlp
    Definition: struct_stat.h:231
    SCIP_Real lastdualbound
    Definition: struct_stat.h:154
    SCIP_Longint lastdispnode
    Definition: struct_stat.h:112
    SCIP_Real vsidsweight
    Definition: struct_stat.h:134
    int marked_ncolidx
    Definition: struct_stat.h:267
    int npresolchgvartypes
    Definition: struct_stat.h:284
    SCIP_CLOCK * relaxsoltime
    Definition: struct_stat.h:187
    SCIP_Longint lastconflictnode
    Definition: struct_stat.h:114
    int nrunsbeforefirst
    Definition: struct_stat.h:307
    SCIP_Real primalrefintegral
    Definition: struct_stat.h:147
    int nactiveexpriter
    Definition: struct_stat.h:312
    SCIP_Real boundingerrorbs
    Definition: struct_stat.h:163
    SCIP_Longint ntotalinternalnodes
    Definition: struct_stat.h:90
    SCIP_Longint nobjleaves
    Definition: struct_stat.h:86
    SCIP_HEUR * firstprimalheur
    Definition: struct_stat.h:200
    SCIP_Real referencebound
    Definition: struct_stat.h:159
    SCIP_CLOCK * duallptime
    Definition: struct_stat.h:173
    SCIP_BRANCHDIR lastbranchdir
    Definition: struct_stat.h:202
    SCIP_CLOCK * pseudosoltime
    Definition: struct_stat.h:188
    SCIP_Longint nexlpinf
    Definition: struct_stat.h:229
    SCIP_Longint nprojshift
    Definition: struct_stat.h:242
    SCIP_Longint nboundshiftobjlim
    Definition: struct_stat.h:240
    int npresoldelconss
    Definition: struct_stat.h:287
    SCIP_Longint nnodesbeforefirst
    Definition: struct_stat.h:124
    int marked_nrowidx
    Definition: struct_stat.h:268
    SCIP_Bool userrestart
    Definition: struct_stat.h:315
    int marked_nvaridx
    Definition: struct_stat.h:266
    SCIP_Longint nlpbestsolsfound
    Definition: struct_stat.h:107
    SCIP_Longint nboundchgs
    Definition: struct_stat.h:117
    SCIP_CLOCK * provedfeaspstime
    Definition: struct_stat.h:184
    int npresolchgbds
    Definition: struct_stat.h:285
    int npresolroundsfast
    Definition: struct_stat.h:279
    SCIP_Real firstlptime
    Definition: struct_stat.h:144
    int nrootboundchgsrun
    Definition: struct_stat.h:259
    SCIP_Longint nfailexlp
    Definition: struct_stat.h:235
    SCIP_Longint ndivinglps
    Definition: struct_stat.h:222
    SCIP_Longint nholechgs
    Definition: struct_stat.h:118
    SCIP_Longint nrelaxbestsolsfound
    Definition: struct_stat.h:108
    int nenabledconss
    Definition: struct_stat.h:276
    SCIP_Real bestefficacy
    Definition: struct_stat.h:160
    SCIP_Longint npsbestsolsfound
    Definition: struct_stat.h:109
    SCIP_Real lastupperbound
    Definition: struct_stat.h:157
    SCIP_Real barrierzeroittime
    Definition: struct_stat.h:141
    SCIP_Longint niterationsexlpinf
    Definition: struct_stat.h:249
    int npresolchgcoefs
    Definition: struct_stat.h:290
    SCIP_Longint totaldivesetdepth
    Definition: struct_stat.h:252
    SCIP_Longint ninitlps
    Definition: struct_stat.h:221
    SCIP_Bool memsavemode
    Definition: struct_stat.h:313
    int maxdepth
    Definition: struct_stat.h:272
    SCIP_Longint nresolveinstablelps
    Definition: struct_stat.h:82
    SCIP_Real previntegralevaltime
    Definition: struct_stat.h:152
    SCIP_Bool collectvarhistory
    Definition: struct_stat.h:317
    SCIP_Longint nexternalsolsfound
    Definition: struct_stat.h:111
    SCIP_Longint nisstoppedcalls
    Definition: struct_stat.h:251
    int maxtotaldepth
    Definition: struct_stat.h:273
    SCIP_Longint niterationsexlp
    Definition: struct_stat.h:248
    SCIP_Longint ndualzeroitlps
    Definition: struct_stat.h:212
    SCIP_Longint nfailboundshift
    Definition: struct_stat.h:237
    SCIP_Longint nrootlps
    Definition: struct_stat.h:208
    SCIP_Real boundingerrorexlp
    Definition: struct_stat.h:165
    int ndisplines
    Definition: struct_stat.h:271
    SCIP_Longint nsbdivinglps
    Definition: struct_stat.h:224
    SCIP_Longint nexlpboundexc
    Definition: struct_stat.h:234
    SCIP_Longint nnodelpiterations
    Definition: struct_stat.h:74
    SCIP_Real lastprimalbound
    Definition: struct_stat.h:153
    SCIP_Longint nactivatednodes
    Definition: struct_stat.h:94
    SCIP_HISTORY * glbhistorycrun
    Definition: struct_stat.h:196
    int plungedepth
    Definition: struct_stat.h:274
    SCIP_Longint bestsolnode
    Definition: struct_stat.h:115
    SCIP_Longint nsbbestsolsfound
    Definition: struct_stat.h:110
    SCIP_Longint nsbtimesiterlimhit
    Definition: struct_stat.h:123
    SCIP_Real primalzeroittime
    Definition: struct_stat.h:139
    SCIP_CLOCK * primallptime
    Definition: struct_stat.h:172
    int npresoladdconss
    Definition: struct_stat.h:288
    SCIP_CLOCK * provedinfeaslptime
    Definition: struct_stat.h:181
    SCIP_Longint nfailexlpinf
    Definition: struct_stat.h:230
    SCIP_Longint nnodezeroitlps
    Definition: struct_stat.h:220
    int nimplications
    Definition: struct_stat.h:277
    SCIP_Longint nconflictlpiterations
    Definition: struct_stat.h:81
    int npresolroundsmed
    Definition: struct_stat.h:280
    SCIP_Real timefailexlp
    Definition: struct_stat.h:167
    SCIP_Longint nstrongbranchs
    Definition: struct_stat.h:226
    SCIP_Longint nfailprojshift
    Definition: struct_stat.h:243
    SCIP_Real mincopytime
    Definition: struct_stat.h:143
    SCIP_Longint npssolsfound
    Definition: struct_stat.h:105
    SCIP_Longint nbarrierzeroitlps
    Definition: struct_stat.h:215
    SCIP_CLOCK * provedfeasbstime
    Definition: struct_stat.h:182
    SCIP_CLOCK * lpsoltime
    Definition: struct_stat.h:186
    SCIP_Longint nprimallpiterations
    Definition: struct_stat.h:67
    SCIP_Bool branchedunbdvar
    Definition: struct_stat.h:319
    SCIP_CLOCK * solvingtime
    Definition: struct_stat.h:168
    SCIP_Real primaldualintegral
    Definition: struct_stat.h:148
    SCIP_Longint nbarrierlps
    Definition: struct_stat.h:214
    int nactiveconss
    Definition: struct_stat.h:275
    SCIP_Longint nlpsolsfound
    Definition: struct_stat.h:103
    SCIP_Longint nsbupdomchgs
    Definition: struct_stat.h:122
    SCIP_Longint nresolveinstablelpiters
    Definition: struct_stat.h:83
    SCIP_Real lastbranchvalue
    Definition: struct_stat.h:145
    int npresolrounds
    Definition: struct_stat.h:278
    SCIP_Longint ninitlpiterations
    Definition: struct_stat.h:75
    SCIP_Bool userinterrupt
    Definition: struct_stat.h:314
    SCIP_Longint nprobboundchgs
    Definition: struct_stat.h:119
    int npresolchgsides
    Definition: struct_stat.h:291
    SCIP_Longint ncreatednodes
    Definition: struct_stat.h:92
    SCIP_CLOCK * conflictlptime
    Definition: struct_stat.h:179
    int subscipdepth
    Definition: struct_stat.h:253
    SCIP_Longint nsbdivinglpiterations
    Definition: struct_stat.h:78
    SCIP_Real firstprimalbound
    Definition: struct_stat.h:135
    SCIP_CLOCK * lexduallptime
    Definition: struct_stat.h:174
    int npresolfixedvars
    Definition: struct_stat.h:282
    datastructures for global SCIP settings
    datastructures for problem statistics
    Definition: heur_padm.c:135
    @ SCIP_CLOCKTYPE_DEFAULT
    Definition: type_clock.h:43
    @ SCIP_BRANCHDIR_DOWNWARDS
    Definition: type_history.h:43
    @ SCIP_LPSOLSTAT_NOTSOLVED
    Definition: type_lp.h:43
    @ SCIP_VERBLEVEL_HIGH
    Definition: type_message.h:61
    @ SCIP_OKAY
    Definition: type_retcode.h:42
    enum SCIP_Retcode SCIP_RETCODE
    Definition: type_retcode.h:63
    @ SCIP_STATUS_UNKNOWN
    Definition: type_stat.h:42
    @ SCIP_VARSTATUS_COLUMN
    Definition: type_var.h:53
    @ SCIP_VARSTATUS_LOOSE
    Definition: type_var.h:52
    SCIP_Real SCIPvarGetMinPseudocostScore(SCIP_VAR *var, SCIP_STAT *stat, SCIP_SET *set, SCIP_Real solval)
    Definition: var.c:20713
    internal methods for problem variables
    void SCIPvisualFree(SCIP_VISUAL **visual)
    Definition: visual.c:106
    SCIP_RETCODE SCIPvisualCreate(SCIP_VISUAL **visual, SCIP_MESSAGEHDLR *messagehdlr)
    Definition: visual.c:85
    methods for creating output for visualization tools (VBC, BAK)