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-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 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;
    371 stat->primalzeroittime = 0.0;
    372 stat->dualzeroittime = 0.0;
    373 stat->barrierzeroittime = 0.0;
    376 stat->firstlptime = 0.0;
    378 stat->ncopies = 0;
    379 stat->nclockskipsleft = 0;
    380 stat->nactiveexpriter = 0;
    381 stat->marked_nvaridx = -1;
    382 stat->marked_ncolidx = -1;
    383 stat->marked_nrowidx = -1;
    384 stat->branchedunbdvar = FALSE;
    385 stat->bestefficacy = 0.0;
    386 stat->minefficacyfac = 0.5;
    387 stat->ncutpoolfails = 0;
    388
    389 stat->ndivesetlpiterations = 0;
    390 stat->ndivesetcalls = 0;
    391 stat->ndivesetlps = 0;
    392 stat->totaldivesetdepth = 0;
    393
    394 stat->userinterrupt = FALSE;
    395 stat->userrestart = FALSE;
    396 stat->inrestart = FALSE;
    397 stat->collectvarhistory = TRUE;
    398 stat->performpresol = FALSE;
    400
    402 SCIPstatResetPresolving(stat, set, transprob, origprob);
    404}
    405
    406/** reset implication counter */
    408 SCIP_STAT* stat /**< problem statistics data */
    409 )
    410{
    411 assert(stat != NULL);
    412
    413 stat->nimplications = 0;
    414}
    415
    416/** reset presolving and current run specific statistics */
    418 SCIP_STAT* stat, /**< problem statistics data */
    419 SCIP_SET* set, /**< global SCIP settings */
    420 SCIP_PROB* transprob, /**< transformed problem, or NULL if not yet existing */
    421 SCIP_PROB* origprob /**< original problem, or NULL */
    422 )
    423{
    424 assert(stat != NULL);
    425
    426 stat->npresolrounds = 0;
    427 stat->npresolroundsfast = 0;
    428 stat->npresolroundsmed = 0;
    429 stat->npresolroundsext = 0;
    430 stat->npresolfixedvars = 0;
    431 stat->npresolaggrvars = 0;
    432 stat->npresolchgvartypes = 0;
    433 stat->npresolchgbds = 0;
    434 stat->npresoladdholes = 0;
    435 stat->npresoldelconss = 0;
    436 stat->npresoladdconss = 0;
    437 stat->npresolupgdconss = 0;
    438 stat->npresolchgcoefs = 0;
    439 stat->npresolchgsides = 0;
    440
    441 SCIPstatResetCurrentRun(stat, set, transprob, origprob, FALSE);
    442}
    443
    444/** reset primal-dual, primal-reference, and reference-dual integral */
    446 SCIP_STAT* stat, /**< problem statistics data */
    447 SCIP_SET* set, /**< global SCIP settings */
    448 SCIP_Bool partialreset /**< should time and integral value be kept? (in combination with no statistical
    449 * reset, integrals are added for each problem to be solved) */
    450 )
    451{
    452 assert(stat != NULL);
    453
    454 stat->previousgap = 100.0;
    455 stat->previousdualrefgap = 100.0;
    456 stat->previousprimalrefgap = 100.0;
    461
    462 /* partial resets keep the integral value and previous evaluation time */
    463 if( !partialreset )
    464 {
    465 stat->previntegralevaltime = 0.0;
    466 stat->dualrefintegral = 0.0;
    467 stat->primalrefintegral = 0.0;
    468 stat->primaldualintegral = 0.0;
    469 }
    470}
    471
    472/** returns the gap bounded by 100 */
    473static
    475 SCIP_SET* set, /**< global SCIP settings */
    476 SCIP_Real primalbound, /**< current primal bound */
    477 SCIP_Real dualbound, /**< current dual bound */
    478 SCIP_Real upperbound, /**< current upper bound in transformed problem, or infinity */
    479 SCIP_Real lowerbound /**< current lower bound in transformed space, or -infinity */
    480 )
    481{
    482 SCIP_Real gap;
    483
    484 /* computation of the gap, special cases are handled first */
    485 if( primalbound >= SCIP_UNKNOWN || dualbound >= SCIP_UNKNOWN ) /*lint !e777*/
    486 gap = 100.0;
    487 /* the gap is 0.0 if bounds coincide */
    488 else if( SCIPsetIsGE(set, lowerbound, upperbound) || SCIPsetIsEQ(set, primalbound, dualbound) )
    489 gap = 0.0;
    490 /* the gap is 100.0 if bounds have different signs */
    491 else if( primalbound * dualbound <= 0.0 ) /*lint !e777*/
    492 gap = 100.0;
    493 else if( !SCIPsetIsInfinity(set, REALABS(primalbound)) && !SCIPsetIsInfinity(set, REALABS(dualbound)) )
    494 {
    495 SCIP_Real absprim = REALABS(primalbound);
    496 SCIP_Real absdual = REALABS(dualbound);
    497
    498 /* The gap in the definition of the primal-dual integral differs from the default SCIP gap function.
    499 * Here, the MAX(primalbound, dualbound) is taken for gap quotient in order to ensure a gap <= 100.
    500 */
    501 gap = 100.0 * REALABS(primalbound - dualbound) / MAX(absprim, absdual);
    502 assert(SCIPsetIsLE(set, gap, 100.0));
    503 }
    504 else
    505 gap = 100.0;
    506
    507 return gap;
    508}
    509
    510/** update the primal-dual, primal-reference, and reference-dual integral statistics.
    511 * method accepts + and - SCIPsetInfinity() as values for upper and lower bound, respectively
    512 */
    514 SCIP_STAT* stat, /**< problem statistics data */
    515 SCIP_SET* set, /**< global SCIP settings */
    516 SCIP_PROB* transprob, /**< transformed problem */
    517 SCIP_PROB* origprob, /**< original problem */
    518 SCIP_Real upperbound, /**< current upper bound in transformed problem, or infinity */
    519 SCIP_Real lowerbound /**< current lower bound in transformed space, or -infinity */
    520 )
    521{
    522 SCIP_Real currentgap;
    523 SCIP_Real currentdualrefgap;
    524 SCIP_Real currentprimalrefgap;
    525 SCIP_Real solvingtime;
    526 SCIP_Real primalbound;
    527 SCIP_Real dualbound;
    528 SCIP_Real deltatime;
    529
    530 assert(stat != NULL);
    531 assert(set != NULL);
    532
    533 solvingtime = MAX(SCIPclockGetTime(stat->solvingtime), stat->previntegralevaltime); /*lint !e666*/
    534 assert(solvingtime >= stat->previntegralevaltime);
    535
    536 if( !SCIPsetIsInfinity(set, upperbound) ) /*lint !e777*/
    537 {
    538 /* get value in original space for gap calculation */
    539 primalbound = SCIPprobExternObjval(transprob, origprob, set, upperbound);
    540
    541 if( SCIPsetIsZero(set, primalbound) )
    542 primalbound = 0.0;
    543 }
    544 else
    545 {
    546 /* no new upper bound: use stored values from last update */
    547 upperbound = stat->lastupperbound;
    548 primalbound = stat->lastprimalbound;
    549 assert(SCIPsetIsZero(set, primalbound) == (primalbound == 0.0)); /*lint !e777*/
    550 }
    551
    552 if( !SCIPsetIsInfinity(set, -lowerbound) ) /*lint !e777*/
    553 {
    554 /* get value in original space for gap calculation */
    555 dualbound = SCIPprobExternObjval(transprob, origprob, set, lowerbound);
    556
    557 if( SCIPsetIsZero(set, dualbound) )
    558 dualbound = 0.0;
    559 }
    560 else
    561 {
    562 /* no new lower bound: use stored values from last update */
    563 lowerbound = stat->lastlowerbound;
    564 dualbound = stat->lastdualbound;
    565 assert(SCIPsetIsZero(set, dualbound) == (dualbound == 0.0)); /*lint !e777*/
    566 }
    567
    568 /* calculate primal-dual and dual reference gap */
    569 currentgap = getGap(set, primalbound, dualbound, upperbound, lowerbound);
    570
    571 /* if primal and dual bound have opposite signs, the gap always evaluates to 100.0% */
    572 assert(currentgap == 0.0 || currentgap == 100.0 || SCIPsetIsGE(set, primalbound * dualbound, 0.0));
    573
    574 /* update the integral based on previous information */
    575 deltatime = solvingtime - stat->previntegralevaltime;
    576 stat->primaldualintegral += deltatime * stat->previousgap;
    577 stat->dualrefintegral += deltatime * stat->previousdualrefgap;
    578 stat->primalrefintegral += deltatime * stat->previousprimalrefgap;
    579
    580 if( !SCIPsetIsInfinity(set, REALABS(set->misc_referencevalue)) )
    581 {
    582 currentdualrefgap = getGap(set, set->misc_referencevalue, dualbound, upperbound, lowerbound);
    583 assert(currentdualrefgap == 0.0 || currentdualrefgap == 100.0 || SCIPsetIsGE(set, set->misc_referencevalue * dualbound, 0.0));
    584
    585 currentprimalrefgap = getGap(set, primalbound, set->misc_referencevalue, upperbound, lowerbound);
    586 assert(currentprimalrefgap == 0.0 || currentprimalrefgap == 100.0 || SCIPsetIsGE(set, primalbound * set->misc_referencevalue, 0.0));
    587 }
    588 else
    589 {
    590 currentdualrefgap = 100.0;
    591 currentprimalrefgap = 100.0;
    592 }
    593
    594 /* update all relevant information for next evaluation */
    595 stat->previousgap = currentgap;
    596 stat->previousdualrefgap = currentdualrefgap;
    597 stat->previousprimalrefgap = currentprimalrefgap;
    598 stat->previntegralevaltime = solvingtime;
    599 stat->lastprimalbound = primalbound;
    600 stat->lastdualbound = dualbound;
    601 stat->lastlowerbound = lowerbound;
    602 stat->lastupperbound = upperbound;
    603}
    604
    605/** optionally update and return the reference-dual integral statistic */
    607 SCIP_STAT* stat, /**< problem statistics data */
    608 SCIP_SET* set, /**< global SCIP settings */
    609 SCIP_PROB* transprob, /**< transformed problem */
    610 SCIP_PROB* origprob, /**< original problem */
    611 SCIP_Bool update /**< should the value be updated first? */
    612 )
    613{
    614 assert(stat != NULL);
    615 assert(set != NULL);
    616 assert(transprob != NULL);
    617 assert(origprob != NULL);
    618
    619 /* update the reference-dual integral first */
    620 if( update )
    622
    623 return stat->dualrefintegral;
    624}
    625
    626/** optionally update and return the primal-reference integral statistic */
    628 SCIP_STAT* stat, /**< problem statistics data */
    629 SCIP_SET* set, /**< global SCIP settings */
    630 SCIP_PROB* transprob, /**< transformed problem */
    631 SCIP_PROB* origprob, /**< original problem */
    632 SCIP_Bool update /**< should the value be updated first? */
    633 )
    634{
    635 assert(stat != NULL);
    636 assert(set != NULL);
    637 assert(transprob != NULL);
    638 assert(origprob != NULL);
    639
    640 /* update the primal-reference integral first */
    641 if( update )
    643
    644 return stat->primalrefintegral;
    645}
    646
    647/** optionally update and return the primal-dual integral statistic */
    649 SCIP_STAT* stat, /**< problem statistics data */
    650 SCIP_SET* set, /**< global SCIP settings */
    651 SCIP_PROB* transprob, /**< transformed problem */
    652 SCIP_PROB* origprob, /**< original problem */
    653 SCIP_Bool update /**< should the value be updated first? */
    654 )
    655{
    656 assert(stat != NULL);
    657 assert(set != NULL);
    658 assert(transprob != NULL);
    659 assert(origprob != NULL);
    660
    661 /* update the primal dual reference integral first */
    662 if( update )
    664
    665 return stat->primaldualintegral;
    666}
    667
    668/** reset current branch and bound run specific statistics */
    670 SCIP_STAT* stat, /**< problem statistics data */
    671 SCIP_SET* set, /**< global SCIP settings */
    672 SCIP_PROB* transprob, /**< transformed problem, or NULL */
    673 SCIP_PROB* origprob, /**< original problem, or NULL */
    674 SCIP_Bool solved /**< is problem already solved? */
    675 )
    676{
    677 assert(stat != NULL);
    678
    679 stat->nnodes = 0;
    680 stat->ninternalnodes = 0;
    681 stat->ncreatednodesrun = 0;
    682 stat->nactivatednodes = 0;
    683 stat->ndeactivatednodes = 0;
    684 stat->nbacktracks = 0;
    685 stat->ndelayedcutoffs = 0;
    686 stat->nreprops = 0;
    687 stat->nrepropboundchgs = 0;
    688 stat->nrepropcutoffs = 0;
    689 stat->lastdivenode = 0;
    690 stat->lastconflictnode = 0;
    691 stat->bestsolnode = 0;
    695 stat->boundingerrorbs = 0;
    696 stat->boundingerrorps = 0;
    697 stat->boundingerrorexlp = 0;
    698 stat->lastbranchvar = NULL;
    700 stat->nrootboundchgsrun = 0;
    701 stat->nrootintfixingsrun = 0;
    702 stat->npricerounds = 0;
    703 stat->nseparounds = 0;
    704 stat->maxdepth = -1;
    705 stat->plungedepth = 0;
    706 stat->nobjleaves = 0;
    707 stat->ninfeasleaves = 0;
    708 stat->nfeasleaves = 0;
    709 stat->branchedunbdvar = FALSE;
    710 stat->nnumtroublelpmsgs = 0;
    711
    712 stat->nearlybacktracks = 0;
    713 stat->nnodesaboverefbound = 0;
    714
    715 assert(transprob == NULL || origprob != NULL);
    716 /* calculate the reference bound in transformed space from the reference value */
    717 if( transprob != NULL && !SCIPsetIsInfinity(set, SCIPsetGetReferencevalue(set)) )
    719 else
    721
    722 if( !solved )
    724
    726
    728
    730}
    731
    732/** resets display statistics, such that a new header line is displayed before the next display line */
    734 SCIP_STAT* stat /**< problem statistics data */
    735 )
    736{
    737 assert(stat != NULL);
    738
    739 stat->lastdispnode = 0;
    740 stat->ndisplines = 0;
    741}
    742
    743/** increases LP count, such that all lazy updates depending on the LP are enforced again */
    745 SCIP_STAT* stat /**< problem statistics data */
    746 )
    747{
    748 assert(stat != NULL);
    749
    750 stat->lpcount++;
    751}
    752
    753/** depending on the current memory usage, switches mode flag to standard or memory saving mode */
    755 SCIP_STAT* stat, /**< problem statistics data */
    756 SCIP_SET* set, /**< global SCIP settings */
    757 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    758 SCIP_MEM* mem /**< block memory pools */
    759 )
    760{
    761 assert(stat != NULL);
    762 assert(set != NULL);
    763
    764 if( SCIPsetIsLT(set, set->mem_savefac, 1.0) )
    765 {
    766 SCIP_Longint memused;
    767
    768 memused = SCIPmemGetTotal(mem);
    769 if( !stat->memsavemode && memused >= set->mem_savefac * set->limit_memory * 1024.0 * 1024.0 )
    770 {
    771 /* switch to memory saving mode */
    772 SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_HIGH,
    773 "(node %" SCIP_LONGINT_FORMAT ") switching to memory saving mode (mem: %.1fM/%.1fM)\n",
    774 stat->nnodes, (SCIP_Real)memused/(1024.0*1024.0), set->limit_memory);
    775 stat->memsavemode = TRUE;
    776 set->nodesel = NULL;
    777 }
    778 else if( stat->memsavemode && memused < 0.5 * set->mem_savefac * set->limit_memory * 1024.0 * 1024.0 )
    779 {
    780 /* switch to standard mode */
    781 SCIPmessagePrintVerbInfo(messagehdlr, set->disp_verblevel, SCIP_VERBLEVEL_HIGH,
    782 "(node %" SCIP_LONGINT_FORMAT ") switching to standard mode (mem: %.1fM/%.1fM)\n",
    783 stat->nnodes, (SCIP_Real)memused/(1024.0*1024.0), set->limit_memory);
    784 stat->memsavemode = FALSE;
    785 set->nodesel = NULL;
    786 }
    787 }
    788 else
    789 stat->memsavemode = FALSE;
    790}
    791
    792/** returns the estimated number of bytes used by extern software, e.g., the LP solver */
    794 SCIP_STAT* stat /**< dynamic SCIP statistics */
    795 )
    796{
    797 return stat->externmemestim;
    798}
    799
    800/** enables or disables all statistic clocks of \p stat concerning LP execution time, strong branching time, etc.
    801 *
    802 * @note: The (pre-)solving time clocks which are relevant for the output during (pre-)solving
    803 * are not affected by this method
    804 *
    805 * @see: For completely disabling all timing of SCIP, consider setting the parameter timing/enabled to FALSE
    806 */
    808 SCIP_STAT* stat, /**< SCIP statistics */
    809 SCIP_Bool enable /**< should the LP clocks be enabled? */
    810 )
    811{
    812 assert(stat != NULL);
    813
    828 SCIPclockEnableOrDisable(stat->lpsoltime, enable);
    831 SCIPclockEnableOrDisable(stat->sbsoltime, enable);
    834 SCIPclockEnableOrDisable(stat->copyclock, enable);
    836}
    837
    838/** recompute root LP best-estimate from scratch */
    840 SCIP_STAT* stat, /**< SCIP statistics */
    841 SCIP_SET* set, /**< global SCIP settings */
    842 SCIP_Real rootlpobjval, /**< root LP objective value */
    843 SCIP_VAR** vars, /**< problem variables */
    844 int nvars /**< number of variables */
    845 )
    846{
    847 int v;
    848 stat->rootlpbestestimate = rootlpobjval;
    849
    850 /* compute best-estimate contribution for every variable */
    851 for( v = 0; v < nvars; ++v )
    852 {
    853 SCIP_Real rootlpsol;
    854 SCIP_Real varminpseudoscore;
    855
    856 /* stop at the first continuous variable */
    857 if( !SCIPvarIsIntegral(vars[v]) )
    858 break;
    859
    860 rootlpsol = SCIPvarGetRootSol(vars[v]);
    861 varminpseudoscore = SCIPvarGetMinPseudocostScore(vars[v], stat, set, rootlpsol);
    862 assert(varminpseudoscore >= 0);
    863 stat->rootlpbestestimate += varminpseudoscore;
    864
    865 SCIPstatDebugMsg(stat, "Root LP Estimate initialization: <%s> + %15.9f\n", SCIPvarGetName(vars[v]), varminpseudoscore);
    866 }
    867}
    868
    869/** update root LP best-estimate with changed variable pseudo-costs */
    871 SCIP_STAT* stat, /**< SCIP statistics */
    872 SCIP_SET* set, /**< global SCIP settings */
    873 SCIP_VAR* var, /**< variable with changed pseudo costs */
    874 SCIP_Real oldrootpscostscore /**< old minimum pseudo cost score of variable */
    875 )
    876{
    877 SCIP_Real rootlpsol;
    878 SCIP_Real varminpseudoscore;
    879
    881
    882 /* entire root LP best-estimate must be computed from scratch first */
    883 if( stat->rootlpbestestimate == SCIP_INVALID ) /*lint !e777*/
    884 return SCIP_OKAY;
    885
    886 rootlpsol = SCIPvarGetRootSol(var);
    887
    888 /* LP root estimate only works for variables with fractional LP root solution */
    889 if( SCIPsetIsFeasIntegral(set, rootlpsol) )
    890 return SCIP_OKAY;
    891
    892 /* subtract old pseudo cost contribution and add new contribution afterwards */
    893 stat->rootlpbestestimate -= oldrootpscostscore;
    894
    895 varminpseudoscore = SCIPvarGetMinPseudocostScore(var, stat, set, rootlpsol);
    896 assert(varminpseudoscore >= 0.0);
    897 stat->rootlpbestestimate += varminpseudoscore;
    898
    899 SCIPstatDebugMsg(stat, "Root LP estimate update: <%s> - %15.9f + %15.9f\n", SCIPvarGetName(var), oldrootpscostscore, varminpseudoscore);
    900
    901 return SCIP_OKAY;
    902}
    903
    904/** prints a debug message */
    906 SCIP_STAT* stat, /**< SCIP statistics */
    907 const char* sourcefile, /**< name of the source file that called the function */
    908 int sourceline, /**< line in the source file where the function was called */
    909 const char* formatstr, /**< format string like in printf() function */
    910 ... /**< format arguments line in printf() function */
    911 )
    912{
    913 const char* filename;
    914 va_list ap;
    915
    916 assert( sourcefile != NULL );
    917 assert( stat != NULL );
    918
    919 /* strip directory from filename */
    920#ifdef _WIN32
    921 filename = strrchr(sourcefile, '\\');
    922#else
    923 filename = strrchr(sourcefile, '/');
    924#endif
    925 if ( filename == NULL )
    926 filename = sourcefile;
    927 else
    928 ++filename;
    929
    930 if ( stat->subscipdepth > 0 )
    931 printf("%d: [%s:%d] debug: ", stat->subscipdepth, filename, sourceline);
    932 else
    933 printf("[%s:%d] debug: ", filename, sourceline);
    934
    935 va_start(ap, formatstr); /*lint !e838*/
    936 (void)vprintf(formatstr, ap);
    937 va_end(ap);
    938}
    939
    940/** prints a debug message without precode */
    942 SCIP_STAT* stat, /**< SCIP statistics */
    943 const char* formatstr, /**< format string like in printf() function */
    944 ... /**< format arguments line in printf() function */
    945 )
    946{ /*lint --e{715}*/
    947 va_list ap;
    948
    949 assert(stat != NULL);
    950
    951 va_start(ap, formatstr); /*lint !e838*/
    952 printf(formatstr, ap);
    953 va_end(ap);
    954}
    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:163
    #define NULL
    Definition: def.h:248
    #define SCIP_Longint
    Definition: def.h:141
    #define SCIP_REAL_MAX
    Definition: def.h:158
    #define SCIP_INVALID
    Definition: def.h:178
    #define SCIP_Bool
    Definition: def.h:91
    #define SCIP_ALLOC(x)
    Definition: def.h:366
    #define SCIP_Real
    Definition: def.h:156
    #define SCIP_UNKNOWN
    Definition: def.h:179
    #define TRUE
    Definition: def.h:93
    #define FALSE
    Definition: def.h:94
    #define MAX(x, y)
    Definition: def.h:220
    #define SCIP_LONGINT_FORMAT
    Definition: def.h:148
    #define SCIP_REAL_MIN
    Definition: def.h:159
    #define REALABS(x)
    Definition: def.h:182
    #define SCIP_CALL(x)
    Definition: def.h:355
    SCIP_RETCODE SCIPrationalCreate(SCIP_RATIONAL **rational)
    Definition: rational.cpp:94
    void SCIPrationalSetNegInfinity(SCIP_RATIONAL *res)
    Definition: rational.cpp:630
    void SCIPrationalFree(SCIP_RATIONAL **rational)
    Definition: rational.cpp:450
    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:513
    void SCIPstatComputeRootLPBestEstimate(SCIP_STAT *stat, SCIP_SET *set, SCIP_Real rootlpobjval, SCIP_VAR **vars, int nvars)
    Definition: stat.c:839
    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:627
    SCIP_RETCODE SCIPstatUpdateVarRootLPBestEstimate(SCIP_STAT *stat, SCIP_SET *set, SCIP_VAR *var, SCIP_Real oldrootpscostscore)
    Definition: stat.c:870
    void SCIPstatResetImplications(SCIP_STAT *stat)
    Definition: stat.c:407
    void SCIPstatResetDisplay(SCIP_STAT *stat)
    Definition: stat.c:733
    void SCIPstatPrintDebugMessage(SCIP_STAT *stat, const char *sourcefile, int sourceline, const char *formatstr,...)
    Definition: stat.c:905
    static SCIP_Real getGap(SCIP_SET *set, SCIP_Real primalbound, SCIP_Real dualbound, SCIP_Real upperbound, SCIP_Real lowerbound)
    Definition: stat.c:474
    SCIP_Real SCIPstatGetDualReferenceIntegral(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Bool update)
    Definition: stat.c:606
    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:445
    void SCIPstatResetPresolving(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob)
    Definition: stat.c:417
    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:807
    void SCIPstatEnableVarHistory(SCIP_STAT *stat)
    Definition: stat.c:191
    void SCIPstatEnforceLPUpdates(SCIP_STAT *stat)
    Definition: stat.c:744
    void SCIPstatUpdateMemsaveMode(SCIP_STAT *stat, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, SCIP_MEM *mem)
    Definition: stat.c:754
    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:669
    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:793
    SCIP_Real SCIPstatGetPrimalDualIntegral(SCIP_STAT *stat, SCIP_SET *set, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_Bool update)
    Definition: stat.c:648
    void SCIPstatDebugMessagePrint(SCIP_STAT *stat, const char *formatstr,...)
    Definition: stat.c:941
    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
    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)