Scippy

    SCIP

    Solving Constraint Integer Programs

    iisfinder.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 iisfinder.c
    26 * @ingroup OTHER_CFILES
    27 * @brief methods for IIS finders
    28 * @author Mark Turner
    29 */
    30
    31/*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
    32
    33#include <assert.h>
    34
    35#include "scip/set.h"
    36#include "scip/clock.h"
    37#include "scip/misc.h"
    38#include "scip/paramset.h"
    39#include "scip/scip.h"
    40#include "scip/cons_linear.h"
    41#include "scip/iisfinder.h"
    44
    45
    46/** method to call, when the priority of an IIS finder was changed */
    47static
    48SCIP_DECL_PARAMCHGD(paramChgdIISfinderPriority)
    49{ /*lint --e{715}*/
    50 SCIP_PARAMDATA* paramdata;
    51
    52 paramdata = SCIPparamGetData(param);
    53 assert(paramdata != NULL);
    54
    55 /* use SCIPsetIISPriority() to mark the IIS unsorted */
    56 SCIP_CALL( SCIPsetIISfinderPriority(scip, (SCIP_IISFINDER*)paramdata, SCIPparamGetInt(param)) ); /*lint !e740*/
    57
    58 return SCIP_OKAY;
    59}
    60
    61/** internal method for creating the subscip that will hold the IIS */
    62static
    64 SCIP_SET* set, /**< global SCIP settings */
    65 SCIP_IIS* iis, /**< pointer to store IIS */
    66 SCIP_Real timelim, /**< timelimit */
    67 SCIP_Longint nodelim, /**< nodelimit */
    68 SCIP_Bool* success /**< whether the created subscip is complete */
    69 )
    70{
    71 SCIP_VAR** vars;
    72 int nvars;
    73 int i;
    74
    75 assert(set != NULL);
    76 assert(iis != NULL);
    77 assert(success != NULL);
    78
    79 *success = FALSE;
    80
    81 /* Create the subscip used for storing the IIS */
    82 if( iis->subscip != NULL )
    83 {
    84 SCIPdebugMsg(set->scip, "An IIS for this problem already exists. Removing it before starting search procedure again.\n");
    85
    86 /* free sub-SCIP */
    87 SCIP_CALL( SCIPiisReset(&iis) );
    88 }
    89
    90 assert( iis->subscip == NULL );
    91 assert( iis->varsmap == NULL );
    92 assert( iis->conssmap == NULL );
    93
    94 /* create a new SCIP instance */
    95 SCIP_CALL( SCIPcreate(&(iis->subscip)) );
    96
    97 /* Create hash maps */
    100
    101 /* create problem in sub-SCIP */
    102 SCIP_CALL( SCIPcopyOrig(set->scip, iis->subscip, iis->varsmap, iis->conssmap, "iis", TRUE, FALSE, TRUE, success) );
    103
    104 if( !(*success) )
    105 return SCIP_OKAY;
    106
    107 /* Remove the objective */
    108 vars = SCIPgetOrigVars(iis->subscip);
    109 nvars = SCIPgetNOrigVars(iis->subscip);
    110 for( i = 0; i < nvars; i++ )
    111 SCIP_CALL( SCIPchgVarObj(iis->subscip, vars[i], 0.0 ) );
    112
    113 /* copy parameter settings */
    114 /** @todo: Do we really want to copy the parameter settings? */
    116#ifdef SCIP_DEBUG
    117 /* for debugging, enable full output */
    118 SCIP_CALL( SCIPsetIntParam(iis->subscip, "display/verblevel", 5) );
    119 SCIP_CALL( SCIPsetIntParam(iis->subscip, "display/freq", 100000000) );
    120#else
    121 /* disable statistic timing inside sub SCIP and output to console */
    122 SCIP_CALL( SCIPsetIntParam(iis->subscip, "display/verblevel", 0) );
    123 SCIP_CALL( SCIPsetBoolParam(iis->subscip, "timing/statistictiming", FALSE) );
    124#endif
    126 SCIP_CALL( SCIPsetIntParam(iis->subscip, "limits/bestsol", 1) );
    127 SCIP_CALL( SCIPsetRealParam(iis->subscip, "limits/time", timelim - SCIPclockGetTime(iis->iistime)) );
    128 SCIP_CALL( SCIPsetLongintParam(iis->subscip, "limits/nodes", nodelim) );
    129
    130 return SCIP_OKAY;
    131}
    132
    133/** checks the problem for trivial infeasibility reasons, e.g. contradicting bounds */
    134static
    136 SCIP* scip, /**< pointer to SCIP */
    137 SCIP_Bool* trivial /**< pointer to store whether the problem is trivially infeasible */
    138 )
    139{
    140 SCIP_CONS** conss;
    141 SCIP_VAR** vars;
    142 SCIP_Real* coefs;
    143 SCIP_Real maxactivity;
    144 SCIP_Real minactivity;
    145 SCIP_Real lhs;
    146 SCIP_Real rhs;
    147 SCIP_Bool success;
    148 int violatingcons;
    149 int nconss;
    150 int nvars;
    151 int i;
    152 int j;
    153
    154 assert( trivial != NULL );
    155 *trivial = FALSE;
    156
    157 /* Check for contradicting bounds */
    158 nvars = SCIPgetNOrigVars(scip);
    159 vars = SCIPgetOrigVars(scip);
    160 for( i = 0; i < nvars; i++ )
    161 {
    162 if( SCIPisGT(scip, SCIPvarGetLbOriginal(vars[i]), SCIPvarGetUbOriginal(vars[i])) )
    163 {
    164 *trivial = TRUE;
    165 break;
    166 }
    167 }
    168
    169 /* Check for linear max (min) activities that do not respect their lhs (rhs) */
    170 violatingcons = -1;
    171 conss = SCIPgetConss(scip);
    172 nconss = SCIPgetNConss(scip);
    173 for( i = 0; i < nconss; ++i )
    174 {
    175 /**@todo generalize activity evaluation */
    176 /* Skip the constraint if it is not linear */
    177 if( strcmp(SCIPconshdlrGetName(SCIPconsGetHdlr(conss[i])), "linear") != 0 )
    178 continue;
    179
    180 /* Get variable information */
    181 nvars = SCIPgetNVarsLinear(scip, conss[i]);
    182 vars = SCIPgetVarsLinear(scip, conss[i]);
    183 coefs = SCIPgetValsLinear(scip, conss[i]);
    184
    185 /* Check the left-hand side */
    186 lhs = SCIPconsGetLhs(scip, conss[i], &success);
    187 assert( success );
    188
    189 if( !SCIPisInfinity(scip, -lhs) )
    190 {
    191 /* Compute the maximum activity */
    192 maxactivity = 0.0;
    193 for( j = 0; j < nvars; ++j )
    194 maxactivity += coefs[j] * (coefs[j] >= 0.0 ? SCIPvarGetUbOriginal(vars[j]) : SCIPvarGetLbOriginal(vars[j]));
    195
    196 /* Is the violation (maxactivity < lhs) true? */
    197 if( SCIPisSumLT(scip, maxactivity, lhs) )
    198 {
    199 *trivial = TRUE;
    200 violatingcons = i;
    201 break;
    202 }
    203 }
    204
    205 /* Check the right-hand side */
    206 rhs = SCIPconsGetRhs(scip, conss[i], &success);
    207 assert( success );
    208
    209 if( !SCIPisInfinity(scip, rhs) )
    210 {
    211 /* Compute the minimum activity */
    212 minactivity = 0.0;
    213 for( j = 0; j < nvars; ++j )
    214 minactivity += coefs[j] * (coefs[j] >= 0.0 ? SCIPvarGetLbOriginal(vars[j]) : SCIPvarGetUbOriginal(vars[j]));
    215
    216 /* Is the violation (rhs < minactivity) true? */
    217 if( SCIPisSumLT(scip, rhs, minactivity) )
    218 {
    219 *trivial = TRUE;
    220 violatingcons = i;
    221 break;
    222 }
    223 }
    224 }
    225
    226 /* Delete all constraints not relevant to the infeasibility */
    227 if( *trivial )
    228 {
    229 for( i = nconss - 1; i >= 0; i-- )
    230 {
    231 if( i == violatingcons )
    232 continue;
    233 SCIP_CALL( SCIPdelCons(scip, conss[i]) );
    234 }
    235 }
    236 return SCIP_OKAY;
    237}
    238
    239/** internal method for creating an IIS finder */
    240static
    242 SCIP_IISFINDER** iisfinder, /**< pointer to store IIS finder */
    243 SCIP_SET* set, /**< global SCIP settings */
    244 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    245 BMS_BLKMEM* blkmem, /**< block memory for parameter settings */
    246 const char* name, /**< name of IIS finder */
    247 const char* desc, /**< description of IIS finder */
    248 int priority, /**< priority of the IIS finder */
    249 SCIP_DECL_IISFINDERCOPY ((*iisfindercopy)), /**< copy method of IIS finder or NULL if you don't want to copy your plugin into sub-SCIPs */
    250 SCIP_DECL_IISFINDERFREE ((*iisfinderfree)), /**< destructor of IIS finder */
    251 SCIP_DECL_IISFINDEREXEC ((*iisfinderexec)), /**< IIS finder execution method */
    252 SCIP_IISFINDERDATA* iisfinderdata /**< IIS finder data */
    253 )
    254{
    256 char paramdesc[SCIP_MAXSTRLEN];
    257
    258 assert(iisfinder != NULL);
    259 assert(name != NULL);
    260 assert(desc != NULL);
    261 assert(iisfinderexec != NULL);
    262
    263 SCIP_ALLOC( BMSallocClearBlockMemory(blkmem, iisfinder) );
    264
    265 SCIP_ALLOC( BMSduplicateBlockMemoryArray(blkmem, &(*iisfinder)->name, name, strlen(name)+1) );
    266 SCIP_ALLOC( BMSduplicateBlockMemoryArray(blkmem, &(*iisfinder)->desc, desc, strlen(desc)+1) );
    267 (*iisfinder)->priority = priority;
    268 (*iisfinder)->iisfindercopy = iisfindercopy;
    269 (*iisfinder)->iisfinderfree = iisfinderfree;
    270 (*iisfinder)->iisfinderexec = iisfinderexec;
    271 (*iisfinder)->iisfinderdata = iisfinderdata;
    272
    273 /* create clocks */
    274 SCIP_CALL( SCIPclockCreate(&(*iisfinder)->iisfindertime, SCIP_CLOCKTYPE_DEFAULT) );
    275
    276 /* add parameters */
    277 (void) SCIPsnprintf(paramname, SCIP_MAXSTRLEN, "iis/%s/priority", name);
    278 (void) SCIPsnprintf(paramdesc, SCIP_MAXSTRLEN, "priority of iis generation rule <%s>", name);
    279 SCIP_CALL( SCIPsetAddIntParam(set, messagehdlr, blkmem, paramname, paramdesc,
    280 &(*iisfinder)->priority, FALSE, priority, INT_MIN/4, INT_MAX/2,
    281 paramChgdIISfinderPriority, (SCIP_PARAMDATA*)(*iisfinder)) ); /*lint !e740*/
    282
    283 return SCIP_OKAY;
    284}
    285
    286
    287/** creates an IIS finder */
    289 SCIP_IISFINDER** iisfinder, /**< pointer to store IIS finder */
    290 SCIP_SET* set, /**< global SCIP settings */
    291 SCIP_MESSAGEHDLR* messagehdlr, /**< message handler */
    292 BMS_BLKMEM* blkmem, /**< block memory for parameter settings */
    293 const char* name, /**< name of IIS finder */
    294 const char* desc, /**< description of IIS finder */
    295 int priority, /**< priority of the IIS finder in standard mode */
    296 SCIP_DECL_IISFINDERCOPY ((*iisfindercopy)), /**< copy method of IIS finder or NULL if you don't want to copy your plugin into sub-SCIPs */
    297 SCIP_DECL_IISFINDERFREE ((*iisfinderfree)), /**< destructor of IIS finder */
    298 SCIP_DECL_IISFINDEREXEC ((*iisfinderexec)), /**< IIS finder execution method */
    299 SCIP_IISFINDERDATA* iisfinderdata /**< IIS finder data */
    300 )
    301{
    302 assert(iisfinder != NULL);
    303 assert(name != NULL);
    304 assert(desc != NULL);
    305 assert(iisfinderexec != NULL);
    306
    307 SCIP_CALL_FINALLY( doIISfinderCreate(iisfinder, set, messagehdlr, blkmem, name, desc, priority,
    308 iisfindercopy, iisfinderfree, iisfinderexec, iisfinderdata), (void) SCIPiisfinderFree(iisfinder, set, blkmem) );
    309
    310 return SCIP_OKAY;
    311}
    312
    313/** gets name of IIS finder */
    315 SCIP_IISFINDER* iisfinder /**< IIS finder */
    316 )
    317{
    318 assert(iisfinder != NULL);
    319
    320 return iisfinder->name;
    321}
    322
    323/** calls IIS finder generation method */
    325 SCIP_SET* set /**< global SCIP settings */
    326 )
    327{
    328 SCIP_CONS** conss;
    329 SCIP_VAR** vars;
    330 SCIP_IIS* iis;
    332 SCIP_RETCODE retcode;
    333 SCIP_Real timelim;
    334 SCIP_Longint nodelim;
    335 SCIP_Bool silent;
    336 SCIP_Bool makeirreducible;
    337 SCIP_Bool stopafterone;
    338 SCIP_Bool removeunusedvars;
    339 SCIP_Bool trivial;
    340 SCIP_Bool islinear;
    341 SCIP_Bool success;
    342 int nconss;
    343 int nvars;
    344 int nbounds;
    345 int i;
    346 int j;
    347
    348 /* exact mode is not supported */
    349 if( set->exact_enable )
    350 {
    351 SCIPinfoMessage(set->scip, NULL, "IIS generation does not yet support exact mode.\n");
    352 return SCIP_OKAY;
    353 }
    354
    355 /* sort the iis finders by priority */
    357
    358 /* Get the IIS data. */
    359 iis = SCIPgetIIS(set->scip);
    360 SCIP_CALL( SCIPiisReset(&iis) );
    361 SCIP_CALL( SCIPgetRealParam(set->scip, "iis/time", &timelim) );
    362 SCIP_CALL( SCIPgetLongintParam(set->scip, "iis/nodes", &nodelim) );
    363
    364 /* Create the subscip used for storing the IIS */
    365 SCIP_CALL( createSubscipIIS(set, iis, timelim, nodelim, &success) );
    366
    367 if( !success )
    368 {
    369 SCIPinfoMessage(iis->subscip, NULL, "Error copying original problem instance. IIS generation suspended.\n");
    370 return SCIP_OKAY;
    371 }
    372
    374
    375 /* If the model is not yet shown to be infeasible then check for infeasibility */
    376 if( SCIPgetStage(set->scip) == SCIP_STAGE_PROBLEM )
    377 {
    378 retcode = SCIPsolve(iis->subscip);
    379
    380 if( retcode != SCIP_OKAY )
    381 {
    382 SCIPinfoMessage(iis->subscip, NULL, "Error proving infeasibility of initial problem. IIS generation suspended.\n");
    384 return SCIP_OKAY;
    385 }
    386
    388 {
    389 switch( SCIPgetStatus(iis->subscip) )
    390 {
    400 SCIPinfoMessage(iis->subscip, NULL, "Some limit reached. Failed to prove infeasibility of initial problem.\n");
    402 return SCIP_OKAY;
    403
    405 SCIPinfoMessage(iis->subscip, NULL, "Initial problem is infeasible or Unbounded. Not performing IIS generation.\n");
    407 return SCIP_OKAY;
    408
    411 SCIPdebugMsg(iis->subscip, "User interrupt. Stopping.\n");
    413 return SCIP_OKAY;
    414
    419 SCIPinfoMessage(iis->subscip, NULL, "Initial problem is feasible. No IIS exists.\n");
    421 return SCIP_OKAY;
    422
    424 break;
    425
    427 default:
    428 SCIPinfoMessage(iis->subscip, NULL, "Unexpected return status %d. Failing to show (in)feasibility of initial problem. Exiting ...\n", SCIPgetStatus(iis->subscip));
    430 return SCIP_OKAY;
    431 }
    432 }
    433 else
    434 {
    435 SCIPinfoMessage(iis->subscip, NULL, "Initial solve to verify infeasibility failed.\n");
    437 return SCIP_OKAY;
    438 }
    439 iis->nnodes += SCIPgetNTotalNodes(iis->subscip);
    441 iis->infeasible = TRUE;
    442 }
    443 else if( SCIPgetStage(set->scip) == SCIP_STAGE_SOLVED )
    444 {
    446 {
    447 SCIPinfoMessage(iis->subscip, NULL, "Initial problem does not have an infeasible status. Not performing an IIS algorithm.\n");
    449 return SCIP_OKAY;
    450 }
    451 iis->infeasible = TRUE;
    452 }
    453 else
    454 {
    455 SCIPinfoMessage(iis->subscip, NULL, "Initial problem is neither in problem stage or infeasible.\n");
    456 return SCIP_OKAY;
    457 }
    458
    459 /* Check for trivial infeasibility reasons */
    460 SCIP_CALL( checkTrivialInfeas(iis->subscip, &trivial) );
    461 if( trivial )
    463
    464 /* Try all IIS generators */
    465 SCIP_CALL( SCIPgetBoolParam(set->scip, "iis/stopafterone", &stopafterone) );
    466 if( !trivial )
    467 {
    468 for( i = 0; i < set->niisfinders; ++i )
    469 {
    470 SCIP_IISFINDER* iisfinder;
    471 iisfinder = set->iisfinders[i];
    472 assert( iis->infeasible );
    473
    474 /* start timing */
    475 SCIPclockStart(iisfinder->iisfindertime, set);
    476
    477 SCIPdebugMsg(iis->subscip, "----- STARTING IIS FINDER %s -----\n", iisfinder->name);
    478 SCIP_CALL( iisfinder->iisfinderexec(iis, iisfinder, &result) );
    479 assert( result == SCIP_SUCCESS || result == SCIP_DIDNOTFIND || result == SCIP_DIDNOTRUN );
    480
    481 /* stop timing */
    482 SCIPclockStop(iisfinder->iisfindertime, set);
    483
    484 /* recreate the initial subscip if the IIS finder has produced an invalid infeasible subsystem */
    485 if( !iis->infeasible )
    486 {
    487 SCIP_CALL( createSubscipIIS(set, iis, timelim, nodelim, &success) );
    488 assert(success);
    489 }
    490
    491 if( timelim - SCIPclockGetTime(iis->iistime) <= 0 || (nodelim != -1 && iis->nnodes > nodelim) )
    492 {
    493 SCIPdebugMsg(iis->subscip, "Time or node limit hit. Stopping Search.\n");
    494 break;
    495 }
    496
    497 if( (stopafterone && (result == SCIP_SUCCESS)) || (iis->irreducible == TRUE) )
    498 break;
    499 }
    500 }
    501
    502 /* Ensure the problem is irreducible if requested */
    503 SCIP_CALL( SCIPgetBoolParam(set->scip, "iis/irreducible", &makeirreducible) );
    504 if( !iis->irreducible && makeirreducible && !(timelim - SCIPclockGetTime(iis->iistime) <= 0 || (nodelim != -1 && iis->nnodes > nodelim)) && !trivial )
    505 {
    506 SCIPdebugMsg(iis->subscip, "----- STARTING GREEDY SINGLETON DELETION ALGORITHM. ATTEMPT TO ENSURE IRREDUCIBILITY -----\n");
    507
    508 assert( iis->infeasible );
    510 assert( iis->infeasible );
    511 }
    512
    513 /* Remove redundant constraints that potentially are left over from indicator constraints,
    514 * that is constraints containing a variables with no bounds and that only features in a single constraint */
    515 nconss = SCIPgetNOrigConss(iis->subscip);
    516 conss = SCIPgetOrigConss(iis->subscip);
    517 for( i = nconss -1; i >= 0; --i )
    518 {
    519 islinear = strcmp(SCIPconshdlrGetName(SCIPconsGetHdlr(conss[i])), "linear") == 0;
    520 if( islinear && SCIPconsGetNUses(conss[i]) <= 1)
    521 {
    522 nvars = SCIPgetNVarsLinear(iis->subscip, conss[i]);
    523 vars = SCIPgetVarsLinear(iis->subscip, conss[i]);
    524 for( j = 0; j < nvars; ++j )
    525 {
    526 if( SCIPvarGetNUses(vars[j]) <= 2 && SCIPisInfinity(iis->subscip, -SCIPvarGetLbOriginal(vars[j])) && SCIPisInfinity(iis->subscip, SCIPvarGetUbOriginal(vars[j])) )
    527 {
    528 SCIP_CALL( SCIPdelCons(iis->subscip, conss[i]) );
    529 break;
    530 }
    531 }
    532 }
    533 }
    534
    535 SCIP_CALL( SCIPgetBoolParam(set->scip, "iis/removeunusedvars", &removeunusedvars) );
    536 if( removeunusedvars )
    537 {
    538 SCIP_Bool deleted;
    539
    540 nvars = SCIPgetNOrigVars(iis->subscip);
    541 vars = SCIPgetOrigVars(iis->subscip);
    542 for( i = nvars - 1; i >= 0; i-- )
    543 {
    544 if( SCIPvarGetNUses(vars[i]) <= 1 && SCIPvarIsDeletable(vars[i]) && SCIPvarGetLbOriginal(vars[i]) <= SCIPvarGetUbOriginal(vars[i]) )
    545 {
    546 SCIP_CALL( SCIPdelVar(iis->subscip, vars[i], &deleted) );
    547 assert( deleted );
    548 }
    549 }
    550 }
    551
    552 SCIP_CALL( SCIPgetBoolParam(set->scip, "iis/silent", &silent) );
    553 if( !silent )
    555
    556 /* stop timing */
    558
    559 if( !silent )
    560 {
    561 nbounds = 0;
    562 SCIPinfoMessage(set->scip, NULL, "\n");
    563 if( iis->infeasible && iis->irreducible )
    564 SCIPinfoMessage(set->scip, NULL, "IIS Status : irreducible infeasible subsystem (IIS) found\n");
    565 else if( iis->infeasible )
    566 SCIPinfoMessage(set->scip, NULL, "IIS Status : infeasible subsystem (IS) found\n");
    567 else
    568 SCIPinfoMessage(set->scip, NULL, "IIS Status : failed to find an infeasible subsystem (IS)\n");
    569 if( iis->irreducible )
    570 SCIPinfoMessage(set->scip, NULL, "IIS irreducible : yes\n");
    571 else
    572 SCIPinfoMessage(set->scip, NULL, "IIS irreducible : no\n");
    573 assert( iis->subscip != NULL );
    574 SCIPinfoMessage(set->scip, NULL, "Generation Time (sec) : %.2f\n", SCIPiisGetTime(iis));
    575 SCIPinfoMessage(set->scip, NULL, "Generation Nodes : %lld\n", SCIPiisGetNNodes(iis));
    576 SCIPinfoMessage(set->scip, NULL, "Num. Cons. in IIS : %d\n", SCIPgetNOrigConss(iis->subscip));
    577 nvars = SCIPgetNOrigVars(iis->subscip);
    578 vars = SCIPgetOrigVars(iis->subscip);
    579 for( i = 0; i < nvars; i++ )
    580 {
    581 if( !SCIPisInfinity(iis->subscip, -SCIPvarGetLbOriginal(vars[i])) )
    582 ++nbounds;
    583 if( !SCIPisInfinity(iis->subscip, SCIPvarGetUbOriginal(vars[i])) )
    584 ++nbounds;
    585 }
    586 SCIPinfoMessage(set->scip, NULL, "Num. Vars. in IIS : %d\n", nvars);
    587 SCIPinfoMessage(set->scip, NULL, "Num. Bounds in IIS : %d\n", nbounds);
    588 }
    589
    590 return SCIP_OKAY;
    591}
    592
    593/** gets description of the IIS finder */
    595 SCIP_IISFINDER* iisfinder /**< IIS finder */
    596 )
    597{
    598 assert(iisfinder != NULL);
    599
    600 return iisfinder->desc;
    601}
    602
    603/** copies the given IIS finder to a new scip */
    605 SCIP_IISFINDER* iisfinder, /**< IIS finder */
    606 SCIP_SET* set /**< SCIP_SET of SCIP to copy to */
    607 )
    608{
    609 assert(iisfinder != NULL);
    610 assert(set != NULL);
    611 assert(set->scip != NULL);
    612
    613 if( iisfinder->iisfindercopy != NULL )
    614 {
    615 SCIPsetDebugMsg(set, "including IIS finder %s in subscip %p\n", SCIPiisfinderGetName(iisfinder), (void*)set->scip);
    616 SCIP_CALL( iisfinder->iisfindercopy(set->scip, iisfinder) );
    617 }
    618 return SCIP_OKAY;
    619}
    620
    621/** frees memory of IIS finder */
    623 SCIP_IISFINDER** iisfinder, /**< IIS finder */
    624 SCIP_SET* set, /**< global SCIP settings */
    625 BMS_BLKMEM* blkmem /**< block memory */
    626 )
    627{
    628 assert(iisfinder != NULL);
    629
    630 if( *iisfinder == NULL )
    631 return SCIP_OKAY;
    632
    633 assert(set != NULL);
    634
    635 /* call destructor of IIS */
    636 if( (*iisfinder)->iisfinderfree != NULL )
    637 {
    638 SCIP_CALL( (*iisfinder)->iisfinderfree(set->scip, *iisfinder) );
    639 }
    640
    641 /* free clocks */
    642 SCIPclockFree(&(*iisfinder)->iisfindertime);
    643
    644 BMSfreeBlockMemoryArrayNull(blkmem, &(*iisfinder)->name, strlen((*iisfinder)->name)+1);
    645 BMSfreeBlockMemoryArrayNull(blkmem, &(*iisfinder)->desc, strlen((*iisfinder)->desc)+1);
    646 BMSfreeBlockMemory(blkmem, iisfinder);
    647
    648 return SCIP_OKAY;
    649}
    650
    651/** gets user data of IIS finder */
    653 SCIP_IISFINDER* iisfinder /**< IIS finder */
    654 )
    655{
    656 assert(iisfinder != NULL);
    657
    658 return iisfinder->iisfinderdata;
    659}
    660
    661/** sets user data of IIS finder; user has to free old data in advance! */
    663 SCIP_IISFINDER* iisfinder, /**< IIS finder */
    664 SCIP_IISFINDERDATA* iisfinderdata /**< new IIS finder user data */
    665 )
    666{
    667 assert(iisfinder != NULL);
    668
    669 iisfinder->iisfinderdata = iisfinderdata;
    670}
    671
    672/** gets priority of IIS finder */
    674 SCIP_IISFINDER* iisfinder /**< IIS finder */
    675 )
    676{
    677 assert(iisfinder != NULL);
    678
    679 return iisfinder->priority;
    680}
    681
    682/** enables or disables all clocks of @p iisfinder, depending on the value of the flag */
    684 SCIP_IISFINDER* iisfinder, /**< the IIS finder for which all clocks should be enabled or disabled */
    685 SCIP_Bool enable /**< should the clocks of the IIS be enabled? */
    686 )
    687{
    688 assert(iisfinder != NULL);
    689
    690 SCIPclockEnableOrDisable(iisfinder->iisfindertime, enable);
    691}
    692
    693/** sets copy method of IIS finder */
    695 SCIP_IISFINDER* iisfinder, /**< IIS finder */
    696 SCIP_DECL_IISFINDERCOPY ((*iisfindercopy)) /**< copy method of IIS finder or NULL if you don't want to copy your plugin into sub-SCIPs */
    697 )
    698{
    699 assert(iisfinder != NULL);
    700
    701 iisfinder->iisfindercopy = iisfindercopy;
    702}
    703
    704/** sets destructor method of IIS finder */
    706 SCIP_IISFINDER* iisfinder, /**< IIS finder */
    707 SCIP_DECL_IISFINDERFREE ((*iisfinderfree)) /**< destructor of IIS finder */
    708 )
    709{
    710 assert(iisfinder != NULL);
    711
    712 iisfinder->iisfinderfree = iisfinderfree;
    713}
    714
    715/** sets priority of IIS finder */
    717 SCIP_IISFINDER* iisfinder, /**< IIS finder */
    718 SCIP_SET* set, /**< global SCIP settings */
    719 int priority /**< new priority of the IIS finder */
    720 )
    721{
    722 assert(iisfinder != NULL);
    723 assert(set != NULL);
    724
    725 iisfinder->priority = priority;
    726 set->iisfinderssorted = FALSE;
    727}
    728
    729/** gets time in seconds used in this IIS finder */
    731 SCIP_IISFINDER* iisfinder /**< IIS finder */
    732 )
    733{
    734 assert(iisfinder != NULL);
    735
    736 return SCIPclockGetTime(iisfinder->iisfindertime);
    737}
    738
    739/** prints output line during IIS calculations */
    741 SCIP_IIS* iis, /**< pointer to the IIS */
    742 SCIP_Bool printheaders /**< whether the headers should be printed instead of the info */
    743 )
    744{
    745 SCIP_VAR** vars;
    746 SCIP* scip;
    747 int i;
    748 int nvars;
    749 int nbounds = 0;
    750 const char* infeasible = iis->infeasible ? "yes" : "no";
    751
    752 scip = SCIPiisGetSubscip(iis);
    753 assert(scip != NULL);
    754
    755 if( printheaders || (iis->niismessagecalls % 15 == 0) )
    756 {
    757 SCIPinfoMessage(scip, NULL, "time(s)| node | cons | vars | bounds| infeasible\n");
    758 if( printheaders )
    759 return;
    760 }
    761 iis->niismessagecalls += 1;
    762
    763 nvars = SCIPgetNOrigVars(scip);
    764 vars = SCIPgetOrigVars(scip);
    765 for( i = 0; i < nvars; i++ )
    766 {
    767 if( !SCIPisInfinity(scip, -SCIPvarGetLbOriginal(vars[i])) )
    768 ++nbounds;
    770 ++nbounds;
    771 }
    772 SCIPinfoMessage(scip, NULL, "%7.1f|%7lld|%7d|%7d|%7d| %10s\n", SCIPiisGetTime(iis), SCIPiisGetNNodes(iis), SCIPgetNOrigConss(scip), nvars, nbounds, infeasible);
    773}
    774
    775/** creates and captures a new IIS */
    777 SCIP_IIS** iis, /**< pointer to return the created IIS */
    778 SCIP_SET* set, /**< global SCIP settings */
    779 BMS_BLKMEM* blkmem /**< block memory */
    780 )
    781{
    782 assert(iis != NULL);
    783
    784 SCIP_ALLOC( BMSallocBlockMemory(blkmem, iis) );
    785
    786 (*iis)->subscip = NULL;
    787 (*iis)->subscip = NULL;
    788 (*iis)->varsmap = NULL;
    789 (*iis)->conssmap = NULL;
    790 SCIP_CALL( SCIPrandomCreate(&((*iis)->randnumgen), blkmem, SCIPsetInitializeRandomSeed(set, 0x5EED)) );
    792 (*iis)->niismessagecalls = 0;
    793 (*iis)->nnodes = 0;
    794 (*iis)->infeasible = FALSE;
    795 (*iis)->irreducible = FALSE;
    796
    797 return SCIP_OKAY;
    798}
    799
    800/** releases an IIS */
    802 SCIP_IIS** iis, /**< pointer to the IIS */
    803 BMS_BLKMEM* blkmem /**< block memory */
    804 )
    805{
    806 assert(iis != NULL);
    807 if( *iis == NULL )
    808 return SCIP_OKAY;
    809
    810 if( (*iis)->subscip != NULL )
    811 {
    812 SCIP_CALL( SCIPfree(&((*iis)->subscip)) );
    813 (*iis)->subscip = NULL;
    814 }
    815
    816 if( (*iis)->varsmap != NULL )
    817 {
    818 SCIPhashmapFree(&((*iis)->varsmap));
    819 (*iis)->varsmap = NULL;
    820 }
    821
    822 if( (*iis)->conssmap != NULL )
    823 {
    824 SCIPhashmapFree(&((*iis)->conssmap));
    825 (*iis)->conssmap = NULL;
    826 }
    827
    828 if( (*iis)->randnumgen != NULL )
    829 {
    830 SCIPrandomFree(&((*iis)->randnumgen), blkmem);
    831 (*iis)->randnumgen = NULL;
    832 }
    833
    834 SCIPclockFree(&(*iis)->iistime);
    835
    836 BMSfreeBlockMemory(blkmem, iis);
    837 *iis = NULL;
    838
    839 return SCIP_OKAY;
    840}
    841
    842/** reset an IIS (in case one exists from a previous solve) */
    844 SCIP_IIS** iis /**< pointer to the IIS */
    845 )
    846{
    847 assert(iis != NULL);
    848 if( *iis == NULL )
    849 return SCIP_OKAY;
    850
    851 if( (*iis)->subscip != NULL )
    852 {
    853 SCIP_CALL( SCIPfree(&((*iis)->subscip)) );
    854 (*iis)->subscip = NULL;
    855 }
    856
    857 if( (*iis)->varsmap != NULL )
    858 {
    859 SCIPhashmapFree(&((*iis)->varsmap));
    860 (*iis)->varsmap = NULL;
    861 }
    862
    863 if( (*iis)->conssmap != NULL )
    864 {
    865 SCIPhashmapFree(&((*iis)->conssmap));
    866 (*iis)->conssmap = NULL;
    867 }
    868
    869 SCIPclockReset((*iis)->iistime);
    870 (*iis)->niismessagecalls = 0;
    871 (*iis)->nnodes = 0;
    872 (*iis)->infeasible = FALSE;
    873 (*iis)->irreducible = FALSE;
    874
    875 return SCIP_OKAY;
    876}
    877
    878/** gets time in seconds used in the IIS */
    880 SCIP_IIS* iis /**< IIS */
    881 )
    882{
    883 assert( iis != NULL );
    884
    885 return SCIPclockGetTime(iis->iistime);
    886}
    887
    888/** Gets whether the IIS subscip is currently infeasible. */
    890 SCIP_IIS* iis /**< IIS data structure */
    891 )
    892{
    893 assert( iis != NULL );
    894
    895 return iis->infeasible;
    896}
    897
    898/** Gets whether the IIS subscip is irreducible. */
    900 SCIP_IIS* iis /**< IIS data structure */
    901 )
    902{
    903 assert( iis != NULL );
    904
    905 return iis->irreducible;
    906}
    907
    908/** Gets the number of nodes in the IIS solve. */
    910 SCIP_IIS* iis /**< IIS data structure */
    911 )
    912{
    913 assert( iis != NULL );
    914
    915 return iis->nnodes;
    916}
    917
    918/** Sets the flag that states whether the IIS subscip is currently infeasible. */
    920 SCIP_IIS* iis, /**< IIS data structure */
    921 SCIP_Bool infeasible /**< The new infeasibility status of the IIS subscip */
    922 )
    923{
    924 assert( iis != NULL );
    925 iis->infeasible = infeasible;
    926}
    927
    928/** Sets the flag that states whether the IIS subscip is irreducible. */
    930 SCIP_IIS* iis, /**< IIS data structure */
    931 SCIP_Bool irreducible /**< The new irreducible status of the IIS */
    932 )
    933{
    934 assert( iis != NULL );
    935 iis->irreducible = irreducible;
    936}
    937
    938/** Increments the number of nodes in the IIS solve. */
    940 SCIP_IIS* iis, /**< IIS data structure */
    941 SCIP_Longint nnodes /**< The number of nodes to add to the IIS */
    942 )
    943{
    944 assert( iis != NULL );
    945 iis->nnodes += nnodes;
    946}
    947
    948/** get the randnumgen of the IIS */
    950 SCIP_IIS* iis /**< pointer to the IIS */
    951 )
    952{
    953 assert( iis != NULL );
    954 return iis->randnumgen;
    955}
    956
    957/** get the subscip of an IIS */
    959 SCIP_IIS* iis /**< pointer to the IIS */
    960 )
    961{
    962 assert( iis != NULL );
    963 return iis->subscip;
    964}
    965
    966/** compares two IIS finders w. r. to their priority */
    967SCIP_DECL_SORTPTRCOMP(SCIPiisfinderComp)
    968{ /*lint --e{715}*/
    969 return ((SCIP_IISFINDER*)elem2)->priority - ((SCIP_IISFINDER*)elem1)->priority;
    970}
    void SCIPclockStop(SCIP_CLOCK *clck, SCIP_SET *set)
    Definition: clock.c:360
    void SCIPclockEnableOrDisable(SCIP_CLOCK *clck, SCIP_Bool enable)
    Definition: clock.c:260
    void SCIPclockStart(SCIP_CLOCK *clck, SCIP_SET *set)
    Definition: clock.c:290
    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
    Constraint handler for linear constraints in their most general form, .
    #define NULL
    Definition: def.h:255
    #define SCIP_MAXSTRLEN
    Definition: def.h:276
    #define SCIP_Longint
    Definition: def.h:148
    #define SCIP_Bool
    Definition: def.h:98
    #define SCIP_ALLOC(x)
    Definition: def.h:373
    #define SCIP_Real
    Definition: def.h:163
    #define TRUE
    Definition: def.h:100
    #define FALSE
    Definition: def.h:101
    #define SCIP_CALL(x)
    Definition: def.h:362
    #define SCIP_CALL_FINALLY(x, y)
    Definition: def.h:404
    #define nnodes
    Definition: gastrans.c:74
    SCIP_VAR ** SCIPgetVarsLinear(SCIP *scip, SCIP_CONS *cons)
    int SCIPgetNVarsLinear(SCIP *scip, SCIP_CONS *cons)
    SCIP_Real * SCIPgetValsLinear(SCIP *scip, SCIP_CONS *cons)
    SCIP_RETCODE SCIPcopyOrig(SCIP *sourcescip, SCIP *targetscip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, const char *suffix, SCIP_Bool enablepricing, SCIP_Bool threadsafe, SCIP_Bool passmessagehdlr, SCIP_Bool *valid)
    Definition: scip_copy.c:3044
    SCIP_RETCODE SCIPcopyParamSettings(SCIP *sourcescip, SCIP *targetscip)
    Definition: scip_copy.c:2547
    SCIP_RETCODE SCIPfree(SCIP **scip)
    Definition: scip_general.c:402
    SCIP_RETCODE SCIPcreate(SCIP **scip)
    Definition: scip_general.c:370
    SCIP_STATUS SCIPgetStatus(SCIP *scip)
    Definition: scip_general.c:562
    SCIP_STAGE SCIPgetStage(SCIP *scip)
    Definition: scip_general.c:444
    int SCIPgetNOrigConss(SCIP *scip)
    Definition: scip_prob.c:3712
    SCIP_VAR ** SCIPgetOrigVars(SCIP *scip)
    Definition: scip_prob.c:2811
    SCIP_CONS ** SCIPgetConss(SCIP *scip)
    Definition: scip_prob.c:3666
    SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
    Definition: scip_prob.c:3420
    int SCIPgetNConss(SCIP *scip)
    Definition: scip_prob.c:3620
    int SCIPgetNOrigVars(SCIP *scip)
    Definition: scip_prob.c:2838
    SCIP_RETCODE SCIPdelVar(SCIP *scip, SCIP_VAR *var, SCIP_Bool *deleted)
    Definition: scip_prob.c:2041
    SCIP_CONS ** SCIPgetOrigConss(SCIP *scip)
    Definition: scip_prob.c:3739
    void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
    Definition: misc.c:3095
    SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
    Definition: misc.c:3061
    SCIP_RETCODE SCIPiisGreedyMakeIrreducible(SCIP_IIS *iis)
    void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
    Definition: scip_message.c:208
    #define SCIPdebugMsg
    Definition: scip_message.h:78
    SCIP_RETCODE SCIPgetBoolParam(SCIP *scip, const char *name, SCIP_Bool *value)
    Definition: scip_param.c:250
    SCIP_RETCODE SCIPsetLongintParam(SCIP *scip, const char *name, SCIP_Longint value)
    Definition: scip_param.c:545
    SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
    Definition: scip_param.c:487
    SCIP_RETCODE SCIPsetSubscipsOff(SCIP *scip, SCIP_Bool quiet)
    Definition: scip_param.c:904
    SCIP_RETCODE SCIPgetRealParam(SCIP *scip, const char *name, SCIP_Real *value)
    Definition: scip_param.c:307
    SCIP_RETCODE SCIPgetLongintParam(SCIP *scip, const char *name, SCIP_Longint *value)
    Definition: scip_param.c:288
    SCIP_RETCODE SCIPsetBoolParam(SCIP *scip, const char *name, SCIP_Bool value)
    Definition: scip_param.c:429
    SCIP_RETCODE SCIPsetRealParam(SCIP *scip, const char *name, SCIP_Real value)
    Definition: scip_param.c:603
    const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
    Definition: cons.c:4316
    SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
    Definition: cons.c:8409
    int SCIPconsGetNUses(SCIP_CONS *cons)
    Definition: cons.c:8429
    SCIP_RANDNUMGEN * SCIPiisGetRandnumgen(SCIP_IIS *iis)
    Definition: iisfinder.c:949
    void SCIPiisAddNNodes(SCIP_IIS *iis, SCIP_Longint nnodes)
    Definition: iisfinder.c:939
    SCIP * SCIPiisGetSubscip(SCIP_IIS *iis)
    Definition: iisfinder.c:958
    SCIP_RETCODE SCIPsetIISfinderPriority(SCIP *scip, SCIP_IISFINDER *iisfinder, int priority)
    const char * SCIPiisfinderGetName(SCIP_IISFINDER *iisfinder)
    Definition: iisfinder.c:314
    void SCIPiisSetSubscipIrreducible(SCIP_IIS *iis, SCIP_Bool irreducible)
    Definition: iisfinder.c:929
    SCIP_Longint SCIPiisGetNNodes(SCIP_IIS *iis)
    Definition: iisfinder.c:909
    SCIP_IISFINDERDATA * SCIPiisfinderGetData(SCIP_IISFINDER *iisfinder)
    Definition: iisfinder.c:652
    int SCIPiisfinderGetPriority(SCIP_IISFINDER *iisfinder)
    Definition: iisfinder.c:673
    void SCIPiisfinderSetData(SCIP_IISFINDER *iisfinder, SCIP_IISFINDERDATA *iisfinderdata)
    Definition: iisfinder.c:662
    SCIP_DECL_SORTPTRCOMP(SCIPiisfinderComp)
    Definition: iisfinder.c:967
    SCIP_Real SCIPiisGetTime(SCIP_IIS *iis)
    Definition: iisfinder.c:879
    void SCIPiisfinderInfoMessage(SCIP_IIS *iis, SCIP_Bool printheaders)
    Definition: iisfinder.c:740
    SCIP_Bool SCIPiisIsSubscipInfeasible(SCIP_IIS *iis)
    Definition: iisfinder.c:889
    void SCIPiisSetSubscipInfeasible(SCIP_IIS *iis, SCIP_Bool infeasible)
    Definition: iisfinder.c:919
    SCIP_Real SCIPiisfinderGetTime(SCIP_IISFINDER *iisfinder)
    Definition: iisfinder.c:730
    SCIP_Bool SCIPiisIsSubscipIrreducible(SCIP_IIS *iis)
    Definition: iisfinder.c:899
    const char * SCIPiisfinderGetDesc(SCIP_IISFINDER *iisfinder)
    Definition: iisfinder.c:594
    SCIP_IIS * SCIPgetIIS(SCIP *scip)
    BMS_BLKMEM * SCIPblkmem(SCIP *scip)
    Definition: scip_mem.c:57
    SCIP_RETCODE SCIPfreeTransform(SCIP *scip)
    Definition: scip_solve.c:3455
    SCIP_RETCODE SCIPsolve(SCIP *scip)
    Definition: scip_solve.c:2628
    SCIP_Longint SCIPgetNTotalNodes(SCIP *scip)
    SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
    SCIP_Bool SCIPisSumLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
    SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
    SCIP_Real SCIPvarGetLbOriginal(SCIP_VAR *var)
    Definition: var.c:24020
    int SCIPvarGetNUses(SCIP_VAR *var)
    Definition: var.c:23277
    SCIP_Real SCIPvarGetUbOriginal(SCIP_VAR *var)
    Definition: var.c:24063
    SCIP_Bool SCIPvarIsDeletable(SCIP_VAR *var)
    Definition: var.c:23632
    SCIP_RETCODE SCIPchgVarObj(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
    Definition: scip_var.c:5372
    int SCIPsnprintf(char *t, int len, const char *s,...)
    Definition: misc.c:10827
    static SCIP_DECL_PARAMCHGD(paramChgdIISfinderPriority)
    Definition: iisfinder.c:48
    SCIP_RETCODE SCIPiisCreate(SCIP_IIS **iis, SCIP_SET *set, BMS_BLKMEM *blkmem)
    Definition: iisfinder.c:776
    SCIP_RETCODE SCIPiisReset(SCIP_IIS **iis)
    Definition: iisfinder.c:843
    SCIP_RETCODE SCIPiisfinderCreate(SCIP_IISFINDER **iisfinder, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, SCIP_DECL_IISFINDERCOPY((*iisfindercopy)), SCIP_DECL_IISFINDERFREE((*iisfinderfree)), SCIP_DECL_IISFINDEREXEC((*iisfinderexec)), SCIP_IISFINDERDATA *iisfinderdata)
    Definition: iisfinder.c:288
    void SCIPiisfinderSetPriority(SCIP_IISFINDER *iisfinder, SCIP_SET *set, int priority)
    Definition: iisfinder.c:716
    static SCIP_RETCODE checkTrivialInfeas(SCIP *scip, SCIP_Bool *trivial)
    Definition: iisfinder.c:135
    SCIP_RETCODE SCIPiisFree(SCIP_IIS **iis, BMS_BLKMEM *blkmem)
    Definition: iisfinder.c:801
    static SCIP_RETCODE createSubscipIIS(SCIP_SET *set, SCIP_IIS *iis, SCIP_Real timelim, SCIP_Longint nodelim, SCIP_Bool *success)
    Definition: iisfinder.c:63
    void SCIPiisfinderEnableOrDisableClocks(SCIP_IISFINDER *iisfinder, SCIP_Bool enable)
    Definition: iisfinder.c:683
    void SCIPiisfinderSetFree(SCIP_IISFINDER *iisfinder, SCIP_DECL_IISFINDERFREE((*iisfinderfree)))
    Definition: iisfinder.c:705
    void SCIPiisfinderSetCopy(SCIP_IISFINDER *iisfinder, SCIP_DECL_IISFINDERCOPY((*iisfindercopy)))
    Definition: iisfinder.c:694
    SCIP_RETCODE SCIPiisfinderFree(SCIP_IISFINDER **iisfinder, SCIP_SET *set, BMS_BLKMEM *blkmem)
    Definition: iisfinder.c:622
    SCIP_RETCODE SCIPiisfinderCopyInclude(SCIP_IISFINDER *iisfinder, SCIP_SET *set)
    Definition: iisfinder.c:604
    SCIP_RETCODE SCIPiisGenerate(SCIP_SET *set)
    Definition: iisfinder.c:324
    static SCIP_RETCODE doIISfinderCreate(SCIP_IISFINDER **iisfinder, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, SCIP_DECL_IISFINDERCOPY((*iisfindercopy)), SCIP_DECL_IISFINDERFREE((*iisfinderfree)), SCIP_DECL_IISFINDEREXEC((*iisfinderexec)), SCIP_IISFINDERDATA *iisfinderdata)
    Definition: iisfinder.c:241
    internal methods for IIS finder
    greedy deletion and addition filter heuristic to compute IISs
    static const char * paramname[]
    Definition: lpi_msk.c:5172
    #define BMSduplicateBlockMemoryArray(mem, ptr, source, num)
    Definition: memory.h:462
    #define BMSfreeBlockMemory(mem, ptr)
    Definition: memory.h:465
    #define BMSallocBlockMemory(mem, ptr)
    Definition: memory.h:451
    #define BMSfreeBlockMemoryArrayNull(mem, ptr, num)
    Definition: memory.h:468
    #define BMSallocClearBlockMemory(mem, ptr)
    Definition: memory.h:452
    struct BMS_BlkMem BMS_BLKMEM
    Definition: memory.h:437
    void SCIPrandomFree(SCIP_RANDNUMGEN **randnumgen, BMS_BLKMEM *blkmem)
    Definition: misc.c:10209
    SCIP_RETCODE SCIPrandomCreate(SCIP_RANDNUMGEN **randnumgen, BMS_BLKMEM *blkmem, unsigned int initialseed)
    Definition: misc.c:10193
    internal miscellaneous methods
    SCIP_Real SCIPconsGetLhs(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
    Definition: misc_linear.c:112
    SCIP_Real SCIPconsGetRhs(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
    Definition: misc_linear.c:48
    SCIP_PARAMDATA * SCIPparamGetData(SCIP_PARAM *param)
    Definition: paramset.c:678
    int SCIPparamGetInt(SCIP_PARAM *param)
    Definition: paramset.c:733
    internal methods for handling parameter settings
    SCIP callable library.
    SCIP_RETCODE SCIPsetAddIntParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
    Definition: set.c:3229
    void SCIPsetSortIISfinders(SCIP_SET *set)
    Definition: set.c:5237
    unsigned int SCIPsetInitializeRandomSeed(SCIP_SET *set, unsigned int initialseedvalue)
    Definition: set.c:7800
    internal methods for global SCIP settings
    #define SCIPsetDebugMsg
    Definition: set.h:1811
    SCIP_Longint nnodes
    SCIP_HASHMAP * conssmap
    SCIP * subscip
    SCIP_HASHMAP * varsmap
    SCIP_Bool irreducible
    int niismessagecalls
    SCIP_Bool infeasible
    SCIP_RANDNUMGEN * randnumgen
    SCIP_CLOCK * iistime
    SCIP_CLOCK * iisfindertime
    SCIP_IISFINDERDATA * iisfinderdata
    data structures for irreducible infeasible subsystems (IIS)
    Definition: heur_padm.c:135
    @ SCIP_CLOCKTYPE_DEFAULT
    Definition: type_clock.h:43
    #define SCIP_DECL_IISFINDERFREE(x)
    #define SCIP_DECL_IISFINDEREXEC(x)
    struct SCIP_IISfinderData SCIP_IISFINDERDATA
    #define SCIP_DECL_IISFINDERCOPY(x)
    struct SCIP_ParamData SCIP_PARAMDATA
    Definition: type_paramset.h:87
    @ SCIP_DIDNOTRUN
    Definition: type_result.h:42
    @ SCIP_DIDNOTFIND
    Definition: type_result.h:44
    @ SCIP_SUCCESS
    Definition: type_result.h:58
    enum SCIP_Result SCIP_RESULT
    Definition: type_result.h:61
    @ SCIP_OKAY
    Definition: type_retcode.h:42
    enum SCIP_Retcode SCIP_RETCODE
    Definition: type_retcode.h:63
    @ SCIP_STAGE_PROBLEM
    Definition: type_set.h:45
    @ SCIP_STAGE_SOLVED
    Definition: type_set.h:54
    @ SCIP_STATUS_OPTIMAL
    Definition: type_stat.h:43
    @ SCIP_STATUS_TOTALNODELIMIT
    Definition: type_stat.h:50
    @ SCIP_STATUS_BESTSOLLIMIT
    Definition: type_stat.h:60
    @ SCIP_STATUS_SOLLIMIT
    Definition: type_stat.h:59
    @ SCIP_STATUS_UNBOUNDED
    Definition: type_stat.h:45
    @ SCIP_STATUS_UNKNOWN
    Definition: type_stat.h:42
    @ SCIP_STATUS_PRIMALLIMIT
    Definition: type_stat.h:57
    @ SCIP_STATUS_GAPLIMIT
    Definition: type_stat.h:56
    @ SCIP_STATUS_USERINTERRUPT
    Definition: type_stat.h:47
    @ SCIP_STATUS_TERMINATE
    Definition: type_stat.h:48
    @ SCIP_STATUS_INFORUNBD
    Definition: type_stat.h:46
    @ SCIP_STATUS_STALLNODELIMIT
    Definition: type_stat.h:52
    @ SCIP_STATUS_TIMELIMIT
    Definition: type_stat.h:54
    @ SCIP_STATUS_INFEASIBLE
    Definition: type_stat.h:44
    @ SCIP_STATUS_NODELIMIT
    Definition: type_stat.h:49
    @ SCIP_STATUS_DUALLIMIT
    Definition: type_stat.h:58
    @ SCIP_STATUS_MEMLIMIT
    Definition: type_stat.h:55
    @ SCIP_STATUS_RESTARTLIMIT
    Definition: type_stat.h:62