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