69#define CONSHDLR_NAME "logicor"
70#define CONSHDLR_DESC "logic or constraints"
71#define CONSHDLR_SEPAPRIORITY +10000
72#define CONSHDLR_ENFOPRIORITY -2000000
73#define CONSHDLR_CHECKPRIORITY -2000000
74#define CONSHDLR_SEPAFREQ 0
75#define CONSHDLR_PROPFREQ 1
76#define CONSHDLR_EAGERFREQ 100
78#define CONSHDLR_MAXPREROUNDS -1
79#define CONSHDLR_DELAYSEPA FALSE
80#define CONSHDLR_DELAYPROP FALSE
81#define CONSHDLR_NEEDSCONS TRUE
83#define CONSHDLR_PRESOLTIMING SCIP_PRESOLTIMING_ALWAYS
84#define CONSHDLR_PROP_TIMING SCIP_PROPTIMING_BEFORELP
86#define LINCONSUPGD_PRIORITY +800000
88#define EVENTHDLR_NAME "logicor"
89#define EVENTHDLR_DESC "event handler for logic or constraints"
91#define CONFLICTHDLR_NAME "logicor"
92#define CONFLICTHDLR_DESC "conflict handler creating logic or constraints"
93#define CONFLICTHDLR_PRIORITY LINCONSUPGD_PRIORITY
95#define DEFAULT_PRESOLPAIRWISE TRUE
96#define DEFAULT_STRENGTHEN TRUE
98#define HASHSIZE_LOGICORCONS 500
99#define DEFAULT_PRESOLUSEHASHING TRUE
100#define DEFAULT_DUALPRESOLVING TRUE
101#define DEFAULT_NEGATEDCLIQUE TRUE
102#define DEFAULT_COPYTYPEDCONS FALSE
103#define DEFAULT_IMPLICATIONS TRUE
108#define AGEINCREASE(n) (1.0 + 0.2 * (n))
110#define AGEINCREASE(n) (0.1 * (n))
121struct SCIP_ConshdlrData
138 int nlastcliquesshorten;
139 int nlastimplsshorten;
159 unsigned int signature;
160 unsigned int presolved:1;
163 unsigned int impladded:1;
164 unsigned int sorted:1;
165 unsigned int changed:1;
166 unsigned int merged:1;
167 unsigned int existmultaggr:1;
168 unsigned int validsignature:1;
216 (*conshdlrdata)->nlastcliquesneg = 0;
217 (*conshdlrdata)->nlastimplsneg = 0;
218 (*conshdlrdata)->nlastcliquesshorten = 0;
219 (*conshdlrdata)->nlastimplsshorten = 0;
222 (*conshdlrdata)->eventhdlr = eventhdlr;
249 assert(consdata->nvars <= consdata->varssize);
251 if( num > consdata->varssize )
257 consdata->varssize = newsize;
259 assert(num <= consdata->varssize);
280 (*consdata)->row =
NULL;
281 (*consdata)->nlrow =
NULL;
285 (*consdata)->varssize =
nvars;
286 (*consdata)->nvars =
nvars;
290 (*consdata)->vars =
NULL;
291 (*consdata)->varssize = 0;
292 (*consdata)->nvars = 0;
294 (*consdata)->watchedvar1 = -1;
295 (*consdata)->watchedvar2 = -1;
296 (*consdata)->filterpos1 = -1;
297 (*consdata)->filterpos2 = -1;
298 (*consdata)->presolved =
FALSE;
299 (*consdata)->impladded =
FALSE;
300 (*consdata)->changed =
TRUE;
301 (*consdata)->sorted = (
nvars <= 1);
302 (*consdata)->merged = (
nvars <= 1);
303 (*consdata)->existmultaggr =
FALSE;
304 (*consdata)->validsignature =
FALSE;
312 for( v = 0; v < (*consdata)->nvars; v++ )
323 for( v = 0; v < (*consdata)->nvars; v++ )
346 if( (*consdata)->row !=
NULL )
352 if( (*consdata)->nlrow !=
NULL )
358 for( v = 0; v < (*consdata)->nvars; v++ )
410 assert(watchedvar1 == -1 || watchedvar1 != watchedvar2);
411 assert(watchedvar1 != -1 || watchedvar2 == -1);
412 assert(watchedvar1 == -1 || (0 <= watchedvar1 && watchedvar1 < consdata->
nvars));
413 assert(watchedvar2 == -1 || (0 <= watchedvar2 && watchedvar2 < consdata->
nvars));
416 if( watchedvar1 == consdata->watchedvar2 || watchedvar2 == consdata->watchedvar1 )
420 tmp = consdata->watchedvar1;
421 consdata->watchedvar1 = consdata->watchedvar2;
422 consdata->watchedvar2 = tmp;
423 tmp = consdata->filterpos1;
424 consdata->filterpos1 = consdata->filterpos2;
425 consdata->filterpos2 = tmp;
427 assert(watchedvar1 == -1 || watchedvar1 != consdata->watchedvar2);
428 assert(watchedvar2 == -1 || watchedvar2 != consdata->watchedvar1);
431 if( consdata->watchedvar1 != -1 && consdata->watchedvar1 != watchedvar1 )
433 assert(consdata->filterpos1 != -1);
436 consdata->filterpos1) );
438 if( consdata->watchedvar2 != -1 && consdata->watchedvar2 != watchedvar2 )
440 assert(consdata->filterpos2 != -1);
443 consdata->filterpos2) );
447 if( watchedvar1 != -1 && watchedvar1 != consdata->watchedvar1 )
451 &consdata->filterpos1) );
453 if( watchedvar2 != -1 && watchedvar2 != consdata->watchedvar2 )
457 &consdata->filterpos2) );
461 consdata->watchedvar1 = watchedvar1;
462 consdata->watchedvar2 = watchedvar2;
492 consdata->existmultaggr =
TRUE;
494 consdata->presolved =
FALSE;
500 consdata->vars[consdata->nvars] =
var;
519 consdata->sorted = (consdata->nvars == 1);
520 consdata->changed =
TRUE;
521 consdata->validsignature =
FALSE;
527 if( consdata->row !=
NULL )
532 consdata->merged =
FALSE;
568 if( consdata->watchedvar1 == pos )
572 if( consdata->watchedvar2 == pos )
577 assert(pos != consdata->watchedvar1);
578 assert(pos != consdata->watchedvar2);
584 if( pos != consdata->nvars - 1 )
586 consdata->vars[pos] = consdata->vars[consdata->nvars-1];
587 consdata->sorted =
FALSE;
592 if( consdata->watchedvar1 == consdata->nvars )
593 consdata->watchedvar1 = pos;
594 if( consdata->watchedvar2 == consdata->nvars )
595 consdata->watchedvar2 = pos;
597 consdata->changed =
TRUE;
598 consdata->validsignature =
FALSE;
672 nvars = consdata->nvars;
680 vars = consdata->vars;
691 for( v =
nvars - 1; v >= 0; --v )
702 if( idx == consdata->nvars - 1 )
705 bestvar = consdata->vars[idx];
710 if( idxnouplocks == consdata->nvars - 1 )
713 if( indepidx == consdata->nvars - 1 )
719 assert(bestvar ==
NULL || bestvar == consdata->vars[v]);
742 bestobjvalnouplocks =
objval;
776 nvars = consdata->nvars;
780 if(
nvars == 2 && indepidx >= 0 )
787 assert(0 <= idx2 && idx2 < 2);
805 if( nfixables == 1 && idxnouplocks >= 0 )
809 for( v =
nvars - 1; v >= 0; --v )
818 assert(idxnouplocks != v);
840 nvars = consdata->nvars;
850 for( v = 0; v <
nvars; ++v )
941 assert(consdata->nvars == 0 || consdata->vars !=
NULL);
947 consdata->existmultaggr =
FALSE;
948 consdata->presolved =
TRUE;
951 while( v < consdata->
nvars )
953 var = consdata->vars[v];
973 if( consdata->nvars == 0 )
976 nvars = consdata->nvars;
986 for( v =
nvars - 1; v >= 0; --v )
1011 if( requiredsize > size )
1015 size = requiredsize;
1018 assert(requiredsize <= size);
1020 assert(requiredsize == nconsvars);
1027 for( v2 = nconsvars - 1; v2 >= 0; --v2 )
1048 for( v2 = nconsvars - 1; v2 >= 0; --v2 )
1068 size =
MAX(nconsvars, 1) +
nvars - 1;
1077 for( k =
nvars - 1; k >= 0; --k )
1079 consvars[k] =
vars[k];
1089 if( requiredsize > size )
1093 size = requiredsize;
1096 assert(requiredsize <= size);
1098 assert(requiredsize == nconsvars);
1100 lhs = 1.0 - constant;
1123 if( ndelconss !=
NULL && naddconss !=
NULL )
1135 if(
var != consdata->vars[v] )
1147 else if(
var != consdata->vars[v] )
1185 consdata->presolved =
TRUE;
1210 for( v = 0; v < consdata->nvars; ++v )
1251 unsigned char** entries,
1281 nvars = consdata->nvars;
1285 if( consdata->merged )
1288 if( consdata->nvars <= 1 )
1290 consdata->merged =
TRUE;
1300 assert(*nentries >= nbinvars + nintvars + nimplvars);
1305 assert(consdata->presolved);
1311 vars = consdata->vars;
1314 for( v =
nvars - 1; v >= 0; --v )
1332 (pos >= nbinvars + nintvars && pos < nbinvars + nintvars + nimplvars &&
1336 (*entries)[pos] = 0;
1340 for( v =
nvars - 1; v >= 0; --v )
1348 if( (*entries)[pos] == 0 )
1349 (*entries)[pos] = negarray[v] ? 2 : 1;
1351 else if( (*entries)[pos] == 1 )
1355 SCIPdebugMsg(
scip,
"logicor constraint <%s> redundant: variable <%s> and its negation are present\n",
1372 SCIPdebugMsg(
scip,
"logicor constraint <%s> redundant: variable <%s> and its negation are present\n",
1390 consdata->merged =
TRUE;
1426 assert(consdata->watchedvar1 == -1 || consdata->watchedvar1 != consdata->watchedvar2);
1433 vars = consdata->vars;
1434 nvars = consdata->nvars;
1460 watchedvar1 = consdata->watchedvar1;
1465 if( watchedvar1 == -1 )
1467 watchedvar1 = consdata->watchedvar2;
1472 watchedvar2 = consdata->watchedvar2;
1476 assert(watchedvar1 >= 0 || watchedvar2 == -1);
1477 assert(nbranchings1 <= nbranchings2);
1480 if( watchedvar2 == -1 )
1484 for( v = 0; v <
nvars; ++v )
1489 if( v == consdata->watchedvar1 || v == consdata->watchedvar2 )
1499 assert(v != consdata->watchedvar1);
1500 assert(v != consdata->watchedvar2);
1505 SCIPdebugMsg(
scip,
" -> disabling constraint <%s> (variable <%s> fixed to 1.0)\n",
1507 if( consdata->watchedvar1 != -1 )
1521 assert(nbranchings >= 0);
1522 if( nbranchings < nbranchings2 )
1524 if( nbranchings < nbranchings1 )
1526 watchedvar2 = watchedvar1;
1527 nbranchings2 = nbranchings1;
1529 nbranchings1 = nbranchings;
1534 nbranchings2 = nbranchings;
1539 assert(nbranchings1 <= nbranchings2);
1540 assert(watchedvar1 >= 0 || watchedvar2 == -1);
1542 if( watchedvar1 == -1 )
1548 assert(watchedvar2 == -1);
1564 else if( watchedvar2 == -1 )
1580 SCIPdebugMsg(
scip,
" -> single-literal constraint <%s> (fix <%s> to 1.0) at depth %d\n",
1585 if( watchedvar1 != consdata->watchedvar1 )
1595 SCIPdebugMsg(
scip,
" -> new watched variables <%s> and <%s> of constraint <%s> are still unfixed\n",
1632 vars = consdata->vars;
1633 nvars = consdata->nvars;
1637 for( v = 0; v <
nvars && sum < 1.0; ++v )
1696 if( consdata->nlrow ==
NULL )
1702 for(
i = 0;
i < consdata->nvars; ++
i )
1736 if( consdata->row ==
NULL )
1896 if( !consdata->sorted )
1898 if( consdata->nvars <= 1 )
1899 consdata->sorted =
TRUE;
1906 if( consdata->watchedvar1 != -1 )
1908 var1 = consdata->vars[consdata->watchedvar1];
1910 consdata->watchedvar1 = -1;
1911 if( consdata->watchedvar2 != -1 )
1913 var2 = consdata->vars[consdata->watchedvar2];
1915 consdata->watchedvar2 = -1;
1918 assert(consdata->watchedvar1 == -1);
1919 assert(consdata->watchedvar2 == -1);
1923 SCIPsortPtr((
void**)consdata->vars, SCIPvarComp, consdata->nvars);
1924 consdata->sorted =
TRUE;
1933 found =
SCIPsortedvecFindPtr((
void**)consdata->vars, SCIPvarComp, (
void*)var1, consdata->nvars, &pos);
1936 (void)
SCIPsortedvecFindPtr((
void**)consdata->vars, SCIPvarComp, (
void*)var1, consdata->nvars, &pos);
1939 consdata->watchedvar1 = pos;
1944 found =
SCIPsortedvecFindPtr((
void**)consdata->vars, SCIPvarComp, (
void*)var2, consdata->nvars, &pos);
1947 (void)
SCIPsortedvecFindPtr((
void**)consdata->vars, SCIPvarComp, (
void*)var2, consdata->nvars, &pos);
1950 consdata->watchedvar2 = pos;
1961 for( v = consdata->nvars - 1; v > 0; --v )
1996 if( consdata1->nvars != consdata2->nvars )
2002 assert(consdata1->sorted);
2003 assert(consdata2->sorted);
2007 for(
i = 0;
i < consdata1->nvars ; ++
i )
2010 if( consdata1->vars[
i] != consdata2->vars[
i] )
2034 assert(consdata->sorted);
2035 assert(consdata->nvars > 0);
2040 assert(minidx >= 0 && minidx <= maxidx);
2042 return SCIPhashFour(consdata->nvars, minidx, mididx, maxidx);
2066 hashtablesize = nconss;
2069 hashGetKeyLogicorcons, hashKeyEqLogicorcons, hashKeyValLogicorcons, (
void*)
scip) );
2072 for(
c = 0;
c < nconss; ++
c )
2086 assert(consdata0->sorted);
2104 assert(consdata0->nvars >= 1 && consdata0->nvars == consdata1->nvars);
2106 assert(consdata0->sorted && consdata1->sorted);
2107 assert(consdata0->vars[0] == consdata1->vars[0]);
2147 SCIPdebugMsg(
scip,
" -> removing logicor constraint <%s> which is redundant to <%s>\n",
2170 unsigned int signature = 0;
2176 for( v =
nvars - 1; v >= 0; --v )
2178 signature |= ((
unsigned int)1 << ((
unsigned int)
SCIPvarGetIndex(
vars[v]) % (
sizeof(
unsigned int) * 8)));
2192 if( consdata->validsignature )
2195 consdata->signature =
calcSignature(consdata->vars, consdata->nvars);
2196 consdata->validsignature =
TRUE;
2205 int* noccurlistentries,
2226 nvars = consdata->nvars;
2228 vars = consdata->vars;
2232 for( v =
nvars - 1; v >= 0; --v )
2239 assert(0 < pos && pos <= occurlistlength);
2244 for( l = noccurlistentries[pos] - 1; l >= 0; --l )
2246 if( occurlist[pos][l] == cons )
2248 --noccurlistentries[pos];
2249 assert(noccurlistentries[pos] >= 0);
2251 occurlist[pos][l] = occurlist[pos][noccurlistentries[pos]];
2266 int* noccurlistentries,
2267 int occurlistlength,
2284 *nentries = INT_MAX;
2285 *shortestlist =
NULL;
2288 for( v =
nvars - 1; v >= 0; --v )
2301 assert(0 < pos && pos <= occurlistlength);
2306 if( noccurlistentries[pos] < *nentries )
2308 *nentries = noccurlistentries[pos];
2309 *shortestlist = occurlist[pos];
2321 int* noccurlistentries,
2322 int occurlistlength,
2346 assert(consdata->nvars > 1);
2347 assert(consdata->validsignature);
2348 assert(consdata->sorted);
2350 vars = consdata->vars;
2354 findShortestOccurlist(
vars, consdata->nvars, varstopos, occurlist, noccurlistentries, occurlistlength, &nentries, &shortestlist);
2364 for(
c = nentries - 1;
c >= 0; --
c )
2366 cons1 = shortestlist[
c];
2375 assert(consdata1->nvars >= consdata->nvars);
2380 if( consdata1->nvars == consdata->nvars )
2383 assert(consdata->validsignature);
2384 assert(consdata->sorted);
2385 assert(consdata1->validsignature);
2386 assert(consdata1->sorted);
2388 if( (consdata->signature & (~consdata1->signature)) == 0 )
2396 while( v < consdata->
nvars && v1 < consdata1->
nvars )
2401 var1 = consdata1->vars[v1];
2417 if( v == consdata->nvars )
2448 return consdata1->nvars - consdata2->nvars;
2458 int* noccurlistentries,
2459 int* occurlistsizes,
2460 int* occurlistlength,
2478 assert(*occurlistlength <= occurlistsize);
2482 assert(consdata->nvars > 1);
2484 vars = consdata->vars;
2487 for( v = consdata->nvars - 1; v >= 0; --v )
2496 pos = *occurlistlength;
2497 assert(pos <= occurlistsize);
2501 assert(noccurlistentries[pos] == 0);
2502 assert(occurlistsizes[pos] == 0);
2510 occurlist[pos][noccurlistentries[pos]] = cons;
2511 ++(noccurlistentries[pos]);
2516 ++(*occurlistlength);
2521 assert(0 < pos && pos <= *occurlistlength);
2526 assert(occurlistsizes[pos] > 0);
2529 if( noccurlistentries[pos] == occurlistsizes[pos] )
2532 assert(occurlistsizes[pos] > noccurlistentries[pos] && occurlistsizes[pos] < INT_MAX);
2537 assert(noccurlistentries[pos] < occurlistsizes[pos]);
2540 occurlist[pos][noccurlistentries[pos]] = cons;
2541 ++(noccurlistentries[pos]);
2559 int* noccurlistentries,
2560 int occurlistlength,
2572 unsigned int signature;
2593 assert(consdata->sorted);
2595 nvars = consdata->nvars;
2599 vars = consdata->vars;
2605 oldvar =
vars[artpos];
2607 vars[artpos] = artvar;
2613 vars[artpos] = oldvar;
2623 vars[artpos] = artvar;
2627 vars[artpos] = oldvar;
2630 for(
c = nentries - 1;
c >= 0; --
c )
2632 cons1 = shortestlist[
c];
2645 if( consdata1->nvars <
nvars )
2650 assert(consdata->sorted);
2651 assert(consdata->merged);
2652 assert(consdata1->validsignature);
2653 assert(consdata1->sorted);
2654 assert(consdata1->merged);
2656 if( (signature & (~consdata1->signature)) == 0 )
2675 var1 = consdata1->vars[v1];
2678 if( artvar == var1 )
2713 while( v1 < consdata1->
nvars )
2715 if( artvar == consdata1->vars[v1] )
2730 assert(artvar == consdata1->vars[pos]);
2733 SCIPdebugMsg(
scip,
"variable %s in logicor constraint <%s> is redundant and will be removed (used constraint %s)\n",
2738 if( consdata1->nvars >
nvars )
2741 assert(0 < pos && pos <= occurlistlength);
2746 for( l = noccurlistentries[pos] - 1; l >= 0; --l )
2748 if( occurlist[pos][l] == cons1 )
2750 --noccurlistentries[pos];
2751 assert(noccurlistentries[pos] >= 0);
2753 occurlist[pos][l] = occurlist[pos][noccurlistentries[pos]];
2764 SCIPdebugMsg(
scip,
"logicor constraint <%s> is redundant due to constraint <%s> after removing variable <%s>\n",
2802 int* noccurlistentries,
2803 int occurlistlength,
2831 for(
c = 0;
c < nconss; ++
c )
2843 nvars = consdata->nvars;
2849 vars = consdata->vars;
2852 for( v =
nvars - 1; v >= 0; --v )
2867 occurlistlength, eventhdlr, nchgcoefs, &deleted) );
2891 unsigned char** entries,
2916 assert(consdata->nvars > 0);
2921 if( !consdata->presolved )
2941 if( consdata->nvars == 0 )
2945 else if( consdata->nvars == 1 )
2950 SCIPdebugMsg(
scip,
" -> fix last remaining variable and delete constraint\n");
2962 consdata->presolved =
TRUE;
2987 unsigned char** entries,
3005 int* noccurlistentries;
3006 int* occurlistsizes;
3011 int occurlistlength;
3024 assert(0 <= *firstchange);
3029 if( *firstchange > nconss || nconss < 2 )
3032 SCIPdebugMsg(
scip,
"starting removeRedundantConssAndNonzeros(), pairwise comparison to detect covered logicor constraints\n");
3038 lastnfixedvars = -1;
3039 while( *nfixedvars != lastnfixedvars )
3041 lastnfixedvars = *nfixedvars;
3042 for(
c = nconss - 1;
c >= 0; --
c )
3049 myconss[
c] = myconss[nmyconss - 1];
3063 myconss[
c] = myconss[nmyconss - 1];
3081 assert(consdata->nvars >= 2);
3085 SCIPsortPtr((
void**)myconss, conssLogicorComp, nmyconss);
3105 occurlistsize = 2 * nbinvars;
3125 nmaxvars = consdata->nvars;
3127 occurlistlength = 0;
3128 conschanged =
FALSE;
3135 assert(consdata->validsignature);
3136 conschanged = conschanged || consdata->changed;
3137 consdata->changed =
FALSE;
3152 while( consdata->nvars == nmaxvars );
3165 assert(consdata->validsignature);
3168 if( conschanged || consdata->changed )
3180 consdata->changed =
FALSE;
3205 SCIP_CALL(
strengthenConss(
scip, myconss, nmyconss, varstopos, occurlist, noccurlistentries, occurlistlength, eventhdlr, ndelconss, nchgcoefs) );
3208 for( --occurlistsize ; occurlistsize >= 0; --occurlistsize )
3210 assert((occurlistsizes[occurlistsize] == 0) == (occurlist[occurlistsize] ==
NULL));
3224#define MAX_CONSLENGTH 200
3236 unsigned char** entries,
3285 for(
c = nconss - 1;
c >= 0; --
c )
3301 consdata->presolved =
FALSE;
3313 assert(consdata->nvars >= 2);
3320 for( v = consdata->nvars - 1; v >= 0; --v)
3322 var = consdata->vars[v];
3330 boundtypes[v] =
FALSE;
3336 boundtypes[v] =
TRUE;
3370 for( v = consdata->nvars - 1; v >= 0; --v )
3377 redundants[v] =
FALSE;
3380 *nchgcoefs += nredvars;
3383 if( consdata->nvars == 1 )
3388 SCIPdebugMsg(
scip,
" -> fix last remaining variable and delete constraint\n");
3404 for(
c = nconss - 1;
c >= 0; --
c )
3414 consdata->presolved =
FALSE;
3427#define MAXCOMPARISONS 1000000
3440 unsigned char** entries,
3497 for(
c = nconss - 1;
c >= 0; --
c )
3523 assert(consdata->nvars >= 2);
3524 assert(consdata->nvars <= size);
3525 assert(consdata->presolved);
3541 for( v = consdata->nvars - 1; v >= 0; --v )
3547 for( v = consdata->nvars - 1; v > 0; --v )
3575 comppercons += (v - 1);
3579 for(
w = v - 1;
w >= 0; --
w )
3610 SCIPdebugMsg(
scip,
"logicor constraint <%s> is redundant, because variable <%s> and its negation <%s> exist\n",
3620 SCIP_VAR* lastvar = consdata->vars[consdata->nvars - 1];
3622 SCIPdebugMsg(
scip,
"in logicor constraint <%s>, active variable of <%s> and active variable of <%s> are the same, removing the first\n",
3627 if( v < consdata->
nvars )
3632 assert(consdata->vars[v] == lastvar);
3633 negated[v] = negated[consdata->nvars];
3671 SCIPdebugMsg(
scip,
"logicor constraint <%s> is redundant due to negated clique information and will be replaced by a setppc constraint \n",
3686 if( comppercons > maxcomppercons )
3747 if( consdata->nvars == 2 )
3750 if( !consdata->impladded )
3762 *nchgbds += nimplbdchgs;
3763 if( implinfeasible )
3770 if ( nimplbdchgs > 0 )
3788 consdata->impladded =
TRUE;
3820 if( consdata->nvars == 0 )
3826 else if( consdata->nvars == 1 )
3828 SCIPdebugMsg(
scip,
"logic or constraint <%s> has only one variable not fixed to 0.0\n",
3852 else if( conshdlrlinear !=
NULL )
3858 SCIPdebugMsg(
scip,
" -> variable is multi-aggregated, convert to linear constraint <%s> == 1 \n",
3927 assert(mult == +1 || mult == -1);
3933 for( v = 0; v <
nvars; ++v )
3935 if( mult * vals[v] > 0.0 )
3936 transvars[v] =
vars[v];
3946 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
3970 if(
nvars > 2 && nposbin + nnegbin + nposimplbin + nnegimplbin ==
nvars && ncoeffspone + ncoeffsnone ==
nvars
4017 SCIPdebugMsg(
scip,
"Enforcing %d logic or constraints for %s solution\n", nconss,
sol ==
NULL ?
"LP" :
"relaxation");
4029 for(
c = 0;
c < nusefulconss && !
cutoff && !reduceddom; ++
c )
4035 for(
c = nusefulconss;
c < nconss && !
cutoff && !separated && !reduceddom; ++
c )
4043 else if( separated )
4045 else if( reduceddom )
4086 for(
i = 0;
i < consdata->nvars; ++
i )
4088 vars[
i] = logicorvars[
i];
4160 conshdlrdata->nlastcliquesneg = 0;
4161 conshdlrdata->nlastimplsneg = 0;
4162 conshdlrdata->nlastcliquesshorten = 0;
4163 conshdlrdata->nlastimplsshorten = 0;
4166 for(
c = nconss - 1;
c >= 0; --
c )
4171 for( v = consdata->nvars - 1; v >= 0; --v )
4196 for(
c = 0;
c < nconss; ++
c )
4201 for( v = 0; v < consdata->nvars; ++v )
4228 consdata->presolved =
FALSE;
4245 for(
c = 0;
c < nconss; ++
c )
4262 for(
c = 0;
c < nconss; ++
c )
4267 if( consdata->row !=
NULL )
4272 if( consdata->nlrow !=
NULL )
4300 for( v = (*consdata)->nvars - 1; v >= 0; --v )
4354 *infeasible =
FALSE;
4356 for(
c = 0;
c < nconss && !(*infeasible); ++
c )
4382 SCIPdebugMsg(
scip,
"separating %d/%d logic or constraints\n", nusefulconss, nconss);
4392 for(
c = 0;
c < nusefulconss && !
cutoff; ++
c )
4403 else if( reduceddom )
4405 else if( separated )
4430 SCIPdebugMsg(
scip,
"separating %d/%d logic or constraints\n", nusefulconss, nconss);
4440 for(
c = 0;
c < nusefulconss && !
cutoff; ++
c )
4451 else if( reduceddom )
4453 else if( separated )
4512 for(
c = 0;
c < nconss && !
cutoff && !reduceddom && !solvelp; ++
c )
4519 else if( reduceddom )
4523 else if( infeasible )
4563 for( v = 0; v < consdata->nvars; ++v )
4609 for(
c = 0;
c < nusefulconss && !
cutoff; ++
c )
4620 else if( reduceddom )
4635 unsigned char* entries;
4659 oldnfixedvars = *nfixedvars;
4660 oldnchgbds = *nchgbds;
4661 oldndelconss = *ndelconss;
4662 oldnupgdconss = *nupgdconss;
4663 oldnchgcoefs = *nchgcoefs;
4665 firstchange = INT_MAX;
4686 if( !consdata->presolved )
4712 if( consdata->nvars <= 2 )
4718 conshdlrdata->conshdlrsetppc, nfixedvars, nchgbds, nchgcoefs, ndelconss, naddconss, nupgdconss, &
cutoff) );
4725 else if( *nfixedvars > oldnfixedvars || *nchgbds > oldnchgbds || *nchgcoefs > oldnchgcoefs
4726 || *ndelconss > oldndelconss || *nupgdconss > oldnupgdconss )
4744 if( consdata->nvars <= 2 )
4750 conshdlrdata->conshdlrsetppc, nfixedvars, nchgbds, nchgcoefs, ndelconss, naddconss, nupgdconss, &
cutoff) );
4757 else if( *nfixedvars > oldnfixedvars || *nchgbds > oldnchgbds || *nchgcoefs > oldnchgcoefs
4758 || *ndelconss > oldndelconss || *nupgdconss > oldnupgdconss )
4767 if( firstchange == INT_MAX && consdata->changed )
4776 if( firstchange < nconss && conshdlrdata->presolusehashing )
4791 conshdlrdata->usestrengthening, &firstchange, nfixedvars, ndelconss, nchgcoefs, &
cutoff) );
4808 &entries, &nentries, nfixedvars, ndelconss, nchgcoefs, &
cutoff) );
4821 conshdlrdata->eventhdlr, conss, nconss, &entries, &nentries, nfixedvars, ndelconss,
4822 nupgdconss, nchgcoefs, &
cutoff) );
4861 SCIPdebugMsg(
scip,
"conflict resolving method of logic or constraint handler\n");
4869 infervarfound =
FALSE;
4871 for( v = 0; v < consdata->nvars; ++v )
4873 if( consdata->vars[v] != infervar )
4883 infervarfound =
TRUE;
4906 for(
i = 0;
i < consdata->nvars; ++
i )
4932 assert(consdata->watchedvar1 == -1 || consdata->watchedvar1 != consdata->watchedvar2);
4938 if( consdata->watchedvar1 != -1 )
4942 &consdata->filterpos1) );
4944 if( consdata->watchedvar2 != -1 )
4948 &consdata->filterpos2) );
4977 assert(consdata->watchedvar1 == -1 || consdata->watchedvar1 != consdata->watchedvar2);
4983 if( consdata->watchedvar1 != -1 )
4985 assert(consdata->filterpos1 != -1);
4988 consdata->filterpos1) );
4989 consdata->watchedvar1 = -1;
4990 consdata->filterpos1 = -1;
4992 if( consdata->watchedvar2 != -1 )
4994 assert(consdata->filterpos2 != -1);
4997 consdata->filterpos2) );
4998 consdata->watchedvar2 = -1;
4999 consdata->filterpos2 = -1;
5033 const char* consname;
5048 if( conshdlrdata->copytypedcons )
5075 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
5090 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode, global,
valid) );
5114 startptr = strchr((
char*)str,
'(');
5116 if( startptr ==
NULL )
5126 endptr = strrchr(startptr,
')');
5128 if( endptr ==
NULL )
5133 assert(endptr >= startptr);
5135 if( endptr > startptr )
5139 strcopy[endptr-startptr] =
'\0';
5152 if( varssize < requiredsize )
5155 varssize = requiredsize;
5163 assert(varssize >= requiredsize);
5167 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
5184 initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
5201 if( varssize < consdata->
nvars )
5223 (*nvars) = consdata->nvars;
5260 SCIPdebugMsg(
scip,
"exec method of event handler for logic or constraints\n");
5288 consdata->presolved =
FALSE;
5295 consdata->merged =
FALSE;
5297 if( !consdata->existmultaggr )
5300 consdata->existmultaggr =
TRUE;
5322 assert(bdchginfos !=
NULL || nbdchginfos == 0);
5334 if( nbdchginfos == 2 )
5341 for(
i = 0;
i < nbdchginfos; ++
i )
5359 if(
i == nbdchginfos )
5398 eventExecLogicor,
NULL) );
5402 conflictExecLogicor,
NULL) );
5410 consEnfolpLogicor, consEnfopsLogicor, consCheckLogicor, consLockLogicor,
5443 if( conshdlrdata->conshdlrlinear !=
NULL )
5451 "constraints/logicor/presolpairwise",
5452 "should pairwise constraint comparison be performed in presolving?",
5455 "constraints/logicor/presolusehashing",
5456 "should hash table be used for detecting redundant constraints in advance",
5459 "constraints/logicor/dualpresolving",
5460 "should dual presolving steps be performed?",
5463 "constraints/logicor/negatedclique",
5464 "should negated clique information be used in presolving",
5467 "constraints/logicor/implications",
5468 "should implications/cliques be used in presolving",
5471 "constraints/logicor/strengthen",
5472 "should pairwise constraint comparison try to strengthen constraints by removing superflous non-zeros?",
5476 "should logicor constraints be copied as logicor instead of as linear constraints?",
5526 if( conshdlr ==
NULL )
5547 SCIP_CALL(
SCIPcreateCons(
scip, cons, name, conshdlr, consdata, initial,
separate, enforce, check,
propagate,
5548 local, modifiable, dynamic, removable, stickingatnode) );
5558 for( v = consdata->nvars - 1; v >= 0; --v )
5626 return consdata->nvars;
5644 return consdata->vars;
5662 if( consdata->row !=
NULL )
5683 if( consdata->row !=
NULL )
5706 return consdata->row;
5745 unsigned char* entries;
5751 if( conshdlr ==
NULL )
5766 for(
i = nconss - 1;
i >= 0; --
i )
#define DEFAULT_DUALPRESOLVING
#define CONSHDLR_NEEDSCONS
#define CONSHDLR_SEPAFREQ
#define CONSHDLR_CHECKPRIORITY
#define CONSHDLR_PROP_TIMING
#define CONSHDLR_MAXPREROUNDS
#define DEFAULT_PRESOLPAIRWISE
#define CONSHDLR_SEPAPRIORITY
#define DEFAULT_PRESOLUSEHASHING
#define CONSHDLR_PROPFREQ
#define CONSHDLR_PRESOLTIMING
#define CONSHDLR_EAGERFREQ
#define CONSHDLR_ENFOPRIORITY
#define CONSHDLR_DELAYSEPA
#define CONSHDLR_DELAYPROP
#define CONFLICTHDLR_PRIORITY
#define CONFLICTHDLR_NAME
#define CONFLICTHDLR_DESC
#define LINCONSUPGD_PRIORITY
#define DEFAULT_COPYTYPEDCONS
#define DEFAULT_NEGATEDCLIQUE
Constraint handler for linear constraints in their most general form, .
static SCIP_Bool isConsViolated(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol)
static SCIP_RETCODE addCoef(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var)
#define DEFAULT_IMPLICATIONS
static void consdataCalcSignature(SCIP_CONSDATA *consdata)
static SCIP_RETCODE addCut(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *cutoff)
static SCIP_RETCODE delCoefPos(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int pos)
static SCIP_RETCODE createRow(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE processWatchedVars(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, SCIP_Bool *cutoff, SCIP_Bool *reduceddom, SCIP_Bool *addcut, SCIP_Bool *mustcheck)
static SCIP_RETCODE analyzeConflict(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE addConsToOccurList(SCIP *scip, SCIP_CONS *cons, SCIP_HASHMAP *varstopos, SCIP_CONS ***occurlist, int *noccurlistentries, int *occurlistsizes, int *occurlistlength, int occurlistsize)
static void conshdlrdataFree(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata)
static SCIP_RETCODE removeConstraintsDueToNegCliques(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLR *conshdlrsetppc, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS **conss, int nconss, unsigned char **entries, int *nentries, int *nfixedvars, int *ndelconss, int *nupgdconss, int *nchgcoefs, SCIP_Bool *cutoff)
static SCIP_RETCODE unlockRounding(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var)
#define DEFAULT_STRENGTHEN
static SCIP_RETCODE removeRedundantConss(SCIP *scip, SCIP_CONS *cons, SCIP_HASHMAP *varstopos, SCIP_CONS ***occurlist, int *noccurlistentries, int occurlistlength, int *ndelconss)
static void findShortestOccurlist(SCIP_VAR **vars, int nvars, SCIP_HASHMAP *varstopos, SCIP_CONS ***occurlist, int *noccurlistentries, int occurlistlength, int *nentries, SCIP_CONS ***shortestlist)
static SCIP_RETCODE removeRedundantConssAndNonzeros(SCIP *scip, SCIP_CONS **conss, int nconss, unsigned char **entries, int *nentries, SCIP_EVENTHDLR *eventhdlr, SCIP_Bool usestrengthening, int *firstchange, int *nfixedvars, int *ndelconss, int *nchgcoefs, SCIP_Bool *cutoff)
static SCIP_RETCODE prepareCons(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, unsigned char **entries, int *nentries, SCIP_Bool *redundant, int *nfixedvars, int *nchgcoefs, int *ndelconss, SCIP_Bool *cutoff)
static SCIP_RETCODE enforcePseudo(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, SCIP_Bool *cutoff, SCIP_Bool *infeasible, SCIP_Bool *reduceddom, SCIP_Bool *solvelp)
static SCIP_RETCODE createNormalizedLogicor(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, int mult, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
static SCIP_RETCODE dualPresolving(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int *nfixedvars, int *ndelconss, int *nchgcoefs, int *naggrvars, SCIP_RESULT *result)
static SCIP_RETCODE addSymmetryInformation(SCIP *scip, SYM_SYMTYPE symtype, SCIP_CONS *cons, SYM_GRAPH *graph, SCIP_Bool *success)
static SCIP_RETCODE lockRounding(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var)
static SCIP_RETCODE shortenConss(SCIP *scip, SCIP_CONSHDLRDATA *conshdlrdata, SCIP_EVENTHDLR *eventhdlr, SCIP_CONS **conss, int nconss, unsigned char **entries, int *nentries, int *nfixedvars, int *ndelconss, int *nchgcoefs, SCIP_Bool *cutoff)
static SCIP_RETCODE consdataEnsureVarsSize(SCIP *scip, SCIP_CONSDATA *consdata, int num)
static SCIP_RETCODE switchWatchedvars(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, int watchedvar1, int watchedvar2)
static SCIP_RETCODE fixDeleteOrUpgradeCons(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, SCIP_CONSHDLR *conshdlrlinear, SCIP_CONSHDLR *conshdlrsetppc, int *nfixedvars, int *nchgbds, int *nchgcoefs, int *ndelconss, int *naddconss, int *nupgdconss, SCIP_Bool *cutoff)
#define HASHSIZE_LOGICORCONS
static unsigned int calcSignature(SCIP_VAR **vars, int nvars)
static SCIP_RETCODE detectRedundantConstraints(SCIP *scip, BMS_BLKMEM *blkmem, SCIP_CONS **conss, int nconss, int *firstchange, int *ndelconss)
static SCIP_RETCODE separateCons(SCIP *scip, SCIP_CONS *cons, SCIP_SOL *sol, SCIP_EVENTHDLR *eventhdlr, SCIP_Bool *cutoff, SCIP_Bool *separated, SCIP_Bool *reduceddom)
static SCIP_RETCODE enforceConstraint(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_CONS **conss, int nconss, int nusefulconss, SCIP_SOL *sol, SCIP_RESULT *result)
static SCIP_RETCODE consdataFree(SCIP *scip, SCIP_CONSDATA **consdata)
static void consdataSort(SCIP_CONSDATA *consdata)
static SCIP_RETCODE addNlrow(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE strengthenConss(SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_HASHMAP *varstopos, SCIP_CONS ***occurlist, int *noccurlistentries, int occurlistlength, SCIP_EVENTHDLR *eventhdlr, int *ndelconss, int *nchgcoefs)
static SCIP_RETCODE conshdlrdataCreate(SCIP *scip, SCIP_CONSHDLRDATA **conshdlrdata, SCIP_EVENTHDLR *eventhdlr)
static SCIP_RETCODE mergeMultiples(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, unsigned char **entries, int *nentries, SCIP_Bool *redundant, int *nchgcoefs)
static void removeConsFromOccurList(SCIP_CONS *cons, SCIP_HASHMAP *varstopos, SCIP_CONS ***occurlist, int *noccurlistentries, int occurlistlength)
static SCIP_RETCODE consdataCreate(SCIP *scip, SCIP_CONSDATA **consdata, int nvars, SCIP_VAR **vars)
static SCIP_RETCODE applyFixings(SCIP *scip, SCIP_CONS *cons, SCIP_EVENTHDLR *eventhdlr, SCIP_Bool *redundant, int *nchgcoefs, int *naddconss, int *ndelconss)
static SCIP_RETCODE disableCons(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE removeRedundantCons(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1, int *ndelconss)
static SCIP_RETCODE removeRedundantNonZeros(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *artvar, int artpos, SCIP_HASHMAP *varstopos, SCIP_CONS ***occurlist, int *noccurlistentries, int occurlistlength, SCIP_EVENTHDLR *eventhdlr, int *nchgcoefs, SCIP_Bool *deleted)
static SCIP_RETCODE consdataPrint(SCIP *scip, SCIP_CONSDATA *consdata, FILE *file, SCIP_Bool endline)
Constraint handler for logicor constraints (equivalent to set covering, but algorithms are suited fo...
Constraint handler for the set partitioning / packing / covering constraints .
#define SCIP_STRINGEQ(name, reference, retcode)
#define SCIP_LONGINT_FORMAT
SCIP_RETCODE SCIPincludeLinconsUpgrade(SCIP *scip, SCIP_DECL_LINCONSUPGD((*linconsupgd)), int priority, const char *conshdlrname)
int SCIPgetNVarsLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetDualsolLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_ROW * SCIPgetRowLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsSetpack(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_RETCODE SCIPcleanupConssLogicor(SCIP *scip, SCIP_Bool onlychecked, int *naddconss, int *ndelconss, int *nchgcoefs)
SCIP_RETCODE SCIPcreateRowLogicor(SCIP *scip, SCIP_CONS *cons)
#define SCIP_DECL_LINCONSUPGD(x)
SCIP_RETCODE SCIPcopyConsLinear(SCIP *scip, SCIP_CONS **cons, SCIP *sourcescip, const char *name, int nvars, SCIP_VAR **sourcevars, SCIP_Real *sourcecoefs, SCIP_Real lhs, SCIP_Real rhs, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode, SCIP_Bool global, SCIP_Bool *valid)
SCIP_RETCODE SCIPcreateConsLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_VAR ** SCIPgetVarsLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsBasicLogicor(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars)
SCIP_RETCODE SCIPcreateConsLogicor(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Real SCIPgetDualfarkasLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPaddCoefLogicor(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var)
SCIP_RETCODE SCIPincludeConshdlrLogicor(SCIP *scip)
SCIP_RETCODE SCIPgetVarCopy(SCIP *sourcescip, SCIP *targetscip, SCIP_VAR *sourcevar, SCIP_VAR **targetvar, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, SCIP_Bool *success)
SCIP_Bool SCIPisTransformed(SCIP *scip)
SCIP_Bool SCIPisPresolveFinished(SCIP *scip)
SCIP_Bool SCIPisStopped(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
int SCIPgetNIntVars(SCIP *scip)
SCIP_RETCODE SCIPaddConsUpgrade(SCIP *scip, SCIP_CONS *oldcons, SCIP_CONS **newcons)
int SCIPgetNImplVars(SCIP *scip)
int SCIPgetNContVars(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNBinVars(SCIP *scip)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
int SCIPhashmapGetImageInt(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsertInt(SCIP_HASHMAP *hashmap, void *origin, int image)
void SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
#define SCIPhashFour(a, b, c, d)
SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr)
void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPaddConflict(SCIP *scip, SCIP_NODE *node, SCIP_CONS **cons, SCIP_NODE *validnode, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPinitConflictAnalysis(SCIP *scip, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
const char * SCIPconflicthdlrGetName(SCIP_CONFLICTHDLR *conflicthdlr)
SCIP_Bool SCIPisConflictAnalysisApplicable(SCIP *scip)
SCIP_RETCODE SCIPaddConflictBinvar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPanalyzeConflictCons(SCIP *scip, SCIP_CONS *cons, SCIP_Bool *success)
SCIP_RETCODE SCIPincludeConflicthdlrBasic(SCIP *scip, SCIP_CONFLICTHDLR **conflicthdlrptr, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata)
int SCIPconshdlrGetNCheckConss(SCIP_CONSHDLR *conshdlr)
void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrActive(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONS ** SCIPconshdlrGetCheckConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrPresol(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPRESOL((*conspresol)), int maxprerounds, SCIP_PRESOLTIMING presoltiming)
SCIP_RETCODE SCIPsetConshdlrInitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrSepa(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSSEPALP((*conssepalp)), SCIP_DECL_CONSSEPASOL((*conssepasol)), int sepafreq, int sepapriority, SCIP_Bool delaysepa)
SCIP_RETCODE SCIPsetConshdlrProp(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSPROP((*consprop)), int propfreq, SCIP_Bool delayprop, SCIP_PROPTIMING proptiming)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPincludeConshdlrBasic(SCIP *scip, SCIP_CONSHDLR **conshdlrptr, const char *name, const char *desc, int enfopriority, int chckpriority, int eagerfreq, SCIP_Bool needscons, SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrParse(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrPrint(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetSignedPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)),)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetConshdlrGetPermsymGraph(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDelete(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrInitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrDeactive(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
int SCIPconshdlrGetNActiveConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrTrans(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrResprop(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExitpre(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrInitlp(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrGetNVars(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSDATA * SCIPconsGetData(SCIP_CONS *cons)
int SCIPconsGetPos(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_RETCODE SCIPenableCons(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsPropagationEnabled(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file)
int SCIPconsGetNUpgradeLocks(SCIP_CONS *cons)
SCIP_RETCODE SCIPenableConsPropagation(SCIP *scip, SCIP_CONS *cons)
int SCIPconsGetValidDepth(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsDeleted(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsActive(SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateCons(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_CONSHDLR *conshdlr, SCIP_CONSDATA *consdata, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsLocal(SCIP_CONS *cons)
SCIP_RETCODE SCIPdisableCons(SCIP *scip, SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_RETCODE SCIPresetConsAge(SCIP *scip, SCIP_CONS *cons)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsAdded(SCIP_CONS *cons)
SCIP_RETCODE SCIPupdateConsFlags(SCIP *scip, SCIP_CONS *cons0, SCIP_CONS *cons1)
SCIP_Bool SCIPconsIsStickingAtNode(SCIP_CONS *cons)
SCIP_RETCODE SCIPdisableConsPropagation(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPaddConsAge(SCIP *scip, SCIP_CONS *cons, SCIP_Real deltaage)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr)
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
SCIP_VAR * SCIPeventGetVar(SCIP_EVENT *event)
SCIP_Bool SCIPhasCurrentNodeLP(SCIP *scip)
#define SCIPfreeCleanBufferArray(scip, ptr)
#define SCIPallocCleanBufferArray(scip, ptr, num)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPfreeBufferArrayNull(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
SCIP_RETCODE SCIPdelNlRow(SCIP *scip, SCIP_NLROW *nlrow)
SCIP_RETCODE SCIPaddNlRow(SCIP *scip, SCIP_NLROW *nlrow)
SCIP_Bool SCIPisNLPConstructed(SCIP *scip)
SCIP_RETCODE SCIPreleaseNlRow(SCIP *scip, SCIP_NLROW **nlrow)
SCIP_Bool SCIPnlrowIsInNLP(SCIP_NLROW *nlrow)
SCIP_RETCODE SCIPcreateNlRow(SCIP *scip, SCIP_NLROW **nlrow, const char *name, SCIP_Real constant, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs, SCIP_EXPRCURV curvature)
SCIP_Bool SCIPinProbing(SCIP *scip)
SCIP_RETCODE SCIPaddVarsToRowSameCoef(SCIP *scip, SCIP_ROW *row, int nvars, SCIP_VAR **vars, SCIP_Real val)
SCIP_RETCODE SCIPcreateEmptyRowCons(SCIP *scip, SCIP_ROW **row, SCIP_CONS *cons, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_Real SCIProwGetDualfarkas(SCIP_ROW *row)
SCIP_Real SCIPgetRowLPFeasibility(SCIP *scip, SCIP_ROW *row)
SCIP_Bool SCIProwIsInLP(SCIP_ROW *row)
SCIP_Real SCIProwGetDualsol(SCIP_ROW *row)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
void SCIPupdateSolLPConsViolation(SCIP *scip, SCIP_SOL *sol, SCIP_Real absviol, SCIP_Real relviol)
int SCIPgetNImplications(SCIP *scip)
int SCIPgetNRuns(SCIP *scip)
SCIP_Longint SCIPgetNConflictConssApplied(SCIP *scip)
SCIP_RETCODE SCIPshrinkDisjunctiveVarSet(SCIP *scip, SCIP_VAR **vars, SCIP_Real *bounds, SCIP_Bool *boundtypes, SCIP_Bool *redundants, int nvars, int *nredvars, int *nglobalred, SCIP_Bool *setredundant, SCIP_Bool *glbinfeas, SCIP_Bool fullshortening)
SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
int SCIPgetDepth(SCIP *scip)
SCIP_RETCODE SCIPlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_VAR * SCIPvarGetNegatedVar(SCIP_VAR *var)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_RETCODE SCIPaddClique(SCIP *scip, SCIP_VAR **vars, SCIP_Bool *values, int nvars, SCIP_Bool isequation, SCIP_Bool *infeasible, int *nbdchgs)
SCIP_RETCODE SCIPgetTransformedVars(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **transvars)
int SCIPvarGetNImpls(SCIP_VAR *var, SCIP_Bool varfixing)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
int SCIPvarGetNLocksUpType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_Bool SCIPvarIsImpliedIntegral(SCIP_VAR *var)
SCIP_RETCODE SCIPvarGetAggregatedObj(SCIP_VAR *var, SCIP_Real *aggrobj)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPgetBinvarRepresentatives(SCIP *scip, int nvars, SCIP_VAR **vars, SCIP_VAR **repvars, SCIP_Bool *negated)
SCIP_Bool SCIPvarIsTransformed(SCIP_VAR *var)
SCIP_RETCODE SCIPparseVarsList(SCIP *scip, const char *str, SCIP_VAR **vars, int *nvars, int varssize, int *requiredsize, char **endptr, char delimiter, SCIP_Bool *success)
SCIP_RETCODE SCIPaggregateVars(SCIP *scip, SCIP_VAR *varx, SCIP_VAR *vary, SCIP_Real scalarx, SCIP_Real scalary, SCIP_Real rhs, SCIP_Bool *infeasible, SCIP_Bool *redundant, SCIP_Bool *aggregated)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_VAR * SCIPvarGetProbvar(SCIP_VAR *var)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPvarGetIndex(SCIP_VAR *var)
SCIP_RETCODE SCIPaddVarLocksType(SCIP *scip, SCIP_VAR *var, SCIP_LOCKTYPE locktype, int nlocksdown, int nlocksup)
SCIP_RETCODE SCIPunlockVarCons(SCIP *scip, SCIP_VAR *var, SCIP_CONS *cons, SCIP_Bool lockdown, SCIP_Bool lockup)
SCIP_Real SCIPgetVarUbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_VAR * SCIPbdchginfoGetVar(SCIP_BDCHGINFO *bdchginfo)
SCIP_RETCODE SCIPcleanupCliques(SCIP *scip, SCIP_Bool *infeasible)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize)
SCIP_RETCODE SCIPgetNegatedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **negvar)
int SCIPvarGetNCliques(SCIP_VAR *var, SCIP_Bool varfixing)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Bool SCIPvarIsNegated(SCIP_VAR *var)
SCIP_VAR * SCIPvarGetNegationVar(SCIP_VAR *var)
int SCIPgetNCliques(SCIP *scip)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
int SCIPvarCompare(SCIP_VAR *var1, SCIP_VAR *var2)
SCIP_RETCODE SCIPvarGetProbvarBinary(SCIP_VAR **var, SCIP_Bool *negated)
SCIP_Longint SCIPvarGetNBranchingsCurrentRun(SCIP_VAR *var, SCIP_BRANCHDIR dir)
SCIP_RETCODE SCIPinferBinvarCons(SCIP *scip, SCIP_VAR *var, SCIP_Bool fixedval, SCIP_CONS *infercons, int inferinfo, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_RETCODE SCIPwriteVarsList(SCIP *scip, FILE *file, SCIP_VAR **vars, int nvars, SCIP_Bool type, char delimiter)
SCIP_Bool SCIPvarsHaveCommonClique(SCIP_VAR *var1, SCIP_Bool value1, SCIP_VAR *var2, SCIP_Bool value2, SCIP_Bool regardimplics)
SCIP_Real SCIPbdchginfoGetNewbound(SCIP_BDCHGINFO *bdchginfo)
int SCIPvarGetNLocksDownType(SCIP_VAR *var, SCIP_LOCKTYPE locktype)
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPallowStrongDualReds(SCIP *scip)
SCIP_Bool SCIPsortedvecFindPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *val, int len, int *pos)
void SCIPsortPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIP_RETCODE SCIPgetSymActiveVariables(SCIP *scip, SYM_SYMTYPE symtype, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, SCIP_Real *constant, SCIP_Bool transformed)
SCIP_RETCODE SCIPextendPermsymDetectionGraphLinear(SCIP *scip, SYM_GRAPH *graph, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_CONS *cons, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool *success)
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_Bool propagate
memory allocation routines
#define BMScopyMemoryArray(ptr, source, num)
#define BMSclearMemoryArray(ptr, num)
struct BMS_BlkMem BMS_BLKMEM
methods commonly used for presolving
public methods for conflict analysis handlers
public methods for managing constraints
public methods for managing events
public methods for LP management
public methods for message output
#define SCIPdebugPrintCons(x, y, z)
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
public methods for problem variables
public methods for conflict handler plugins and conflict analysis
public methods for constraint handler plugins and constraints
public methods for cuts and aggregation rows
public methods for event handler plugins and event handlers
public methods for the LP relaxation, rows and columns
public methods for memory management
public methods for message handling
public methods for nonlinear relaxation
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for global and local (sub)problems
public methods for the probing mode
public methods for solutions
public methods for querying solving statistics
public methods for the branch-and-bound tree
public methods for SCIP variables
static SCIP_RETCODE separate(SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
Main separation function.
structs for symmetry computations
methods for dealing with symmetry detection graphs
struct SCIP_Conflicthdlr SCIP_CONFLICTHDLR
#define SCIP_DECL_CONFLICTEXEC(x)
@ SCIP_CONFTYPE_PROPAGATION
#define SCIP_DECL_CONSGETSIGNEDPERMSYMGRAPH(x)
#define SCIP_DECL_CONSGETPERMSYMGRAPH(x)
#define SCIP_DECL_CONSENFOLP(x)
#define SCIP_DECL_CONSINITPRE(x)
#define SCIP_DECL_CONSDELETE(x)
struct SCIP_Cons SCIP_CONS
#define SCIP_DECL_CONSGETVARS(x)
#define SCIP_DECL_CONSINITSOL(x)
#define SCIP_DECL_CONSPRINT(x)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
#define SCIP_DECL_CONSSEPALP(x)
struct SYM_Graph SYM_GRAPH
#define SCIP_DECL_CONSENFORELAX(x)
#define SCIP_DECL_CONSPROP(x)
#define SCIP_DECL_CONSGETNVARS(x)
#define SCIP_DECL_CONSRESPROP(x)
#define SCIP_DECL_CONSACTIVE(x)
#define SCIP_DECL_CONSENFOPS(x)
#define SCIP_DECL_CONSPARSE(x)
#define SCIP_DECL_CONSTRANS(x)
#define SCIP_DECL_CONSDEACTIVE(x)
#define SCIP_DECL_CONSPRESOL(x)
#define SCIP_DECL_CONSINITLP(x)
#define SCIP_DECL_CONSEXITPRE(x)
#define SCIP_DECL_CONSLOCK(x)
struct SCIP_Conshdlr SCIP_CONSHDLR
#define SCIP_DECL_CONSCOPY(x)
struct SCIP_ConsData SCIP_CONSDATA
#define SCIP_DECL_CONSCHECK(x)
#define SCIP_DECL_CONSHDLRCOPY(x)
#define SCIP_DECL_CONSEXITSOL(x)
#define SCIP_DECL_CONSFREE(x)
#define SCIP_DECL_CONSSEPASOL(x)
struct SCIP_Eventhdlr SCIP_EVENTHDLR
struct SCIP_EventData SCIP_EVENTDATA
#define SCIP_EVENTTYPE_UBTIGHTENED
#define SCIP_EVENTTYPE_VARFIXED
#define SCIP_DECL_EVENTEXEC(x)
#define SCIP_EVENTTYPE_LBRELAXED
@ SCIP_BRANCHDIR_DOWNWARDS
struct SCIP_HashMap SCIP_HASHMAP
#define SCIP_DECL_SORTPTRCOMP(x)
#define SCIP_DECL_HASHKEYEQ(x)
#define SCIP_DECL_HASHGETKEY(x)
#define SCIP_DECL_HASHKEYVAL(x)
struct SCIP_HashTable SCIP_HASHTABLE
struct SCIP_NlRow SCIP_NLROW
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_STAGE_INITPRESOLVE
@ SCIP_STAGE_TRANSFORMING
enum SYM_Symtype SYM_SYMTYPE
#define SCIP_PRESOLTIMING_MEDIUM
#define SCIP_PRESOLTIMING_EXHAUSTIVE
@ SCIP_VARSTATUS_MULTAGGR