assert(vbounds !=
NULL);
63(*vbounds)->vars =
NULL;
64(*vbounds)->coefs =
NULL;
65(*vbounds)->constants =
NULL;
78assert(vbounds !=
NULL);
80 if( *vbounds !=
NULL)
98assert(vbounds !=
NULL);
101 if( *vbounds ==
NULL)
105assert(*vbounds !=
NULL);
106assert((*vbounds)->len <= (*vbounds)->size);
108 if( num > (*vbounds)->size )
116(*vbounds)->size = newsize;
118assert(num <= (*vbounds)->size);
136assert(insertpos !=
NULL);
137assert(found !=
NULL);
140 if( vbounds ==
NULL)
146assert(vbounds->
len>= 0);
154assert(var == vbounds->
vars[pos]);
155 if( (vbounds->
coefs[pos] < 0.0) == negativecoef )
161 else if( negativecoef )
163assert(vbounds->
coefs[pos] > 0.0);
164 if( pos+1 < vbounds->
len&& vbounds->
vars[pos+1] == var )
167assert(vbounds->
coefs[pos+1] < 0.0);
180assert(vbounds->
coefs[pos] < 0.0);
181 if( pos-1 >= 0 && vbounds->
vars[pos-1] == var )
184assert(vbounds->
coefs[pos-1] > 0.0);
220assert(vbounds !=
NULL);
221assert(var !=
NULL);
224assert(added !=
NULL);
234assert(*vbounds !=
NULL);
235assert(0 <= insertpos && insertpos < (*vbounds)->len);
236assert((*vbounds)->vars[insertpos] == var);
237assert(((*vbounds)->coefs[insertpos] < 0.0) == (coef < 0.0));
241 if( constant +
MIN(coef, 0.0) < (*vbounds)->constants[insertpos] +
MIN((*vbounds)->coefs[insertpos], 0.0) )
243(*vbounds)->coefs[insertpos] = coef;
244(*vbounds)->constants[insertpos] = constant;
250 if( constant +
MAX(coef, 0.0) > (*vbounds)->constants[insertpos] +
MAX((*vbounds)->coefs[insertpos], 0.0) )
252(*vbounds)->coefs[insertpos] = coef;
253(*vbounds)->constants[insertpos] = constant;
264assert(*vbounds !=
NULL);
265assert(0 <= insertpos && insertpos <= (*vbounds)->len);
266assert(0 <= insertpos && insertpos < (*vbounds)->size);
269 for( i = (*vbounds)->len; i > insertpos; --i )
272(*vbounds)->vars[i] = (*vbounds)->vars[i-1];
273(*vbounds)->coefs[i] = (*vbounds)->coefs[i-1];
274(*vbounds)->constants[i] = (*vbounds)->constants[i-1];
277(*vbounds)->vars[insertpos] = var;
278(*vbounds)->coefs[insertpos] = coef;
279(*vbounds)->constants[insertpos] = constant;
299assert(vbounds !=
NULL);
300assert(*vbounds !=
NULL);
307assert(0 <= pos && pos < (*vbounds)->len);
308assert((*vbounds)->vars[pos] == vbdvar);
309assert(((*vbounds)->coefs[pos] < 0.0) == negativecoef);
312 for( i = pos; i < (*vbounds)->len - 1; i++ )
314(*vbounds)->vars[i] = (*vbounds)->vars[i+1];
315(*vbounds)->coefs[i] = (*vbounds)->coefs[i+1];
316(*vbounds)->constants[i] = (*vbounds)->constants[i+1];
326 if( (*vbounds)->len == 0 )
339assert(vbounds !=
NULL);
340assert(*vbounds !=
NULL);
341assert(newnvbds <= (*vbounds)->len);
346(*vbounds)->len = newnvbds;
368assert(var1 !=
NULL);
369assert(var2 !=
NULL);
373 if( var1idx < var2idx )
375 else if( var1idx > var2idx )
389 if( implics ==
NULL)
400vars = implics->
vars[varfixing];
401types = implics->
types[varfixing];
402nimpls = implics->
nimpls[varfixing];
404assert(0 <= nimpls && nimpls <= implics->size[varfixing]);
405 for( i = 1; i < nimpls; ++i )
409cmp = compVars(vars[i-1], vars[i]);
411assert((cmp == 0) == (vars[i-1] == vars[i]));
415varfixing = !varfixing;
417 while( varfixing ==
TRUE);
420#define checkImplics(implics) 430assert(implics !=
NULL);
434(*implics)->vars[0] =
NULL;
435(*implics)->types[0] =
NULL;
436(*implics)->bounds[0] =
NULL;
437(*implics)->ids[0] =
NULL;
438(*implics)->size[0] = 0;
439(*implics)->nimpls[0] = 0;
440(*implics)->vars[1] =
NULL;
441(*implics)->types[1] =
NULL;
442(*implics)->bounds[1] =
NULL;
443(*implics)->ids[1] =
NULL;
444(*implics)->size[1] = 0;
445(*implics)->nimpls[1] = 0;
456assert(implics !=
NULL);
458 if( *implics !=
NULL)
482assert(implics !=
NULL);
485 if( *implics ==
NULL)
489assert(*implics !=
NULL);
490assert((*implics)->nimpls[varfixing] <= (*implics)->size[varfixing]);
492 if( num > (*implics)->size[varfixing] )
501(*implics)->size[varfixing] = newsize;
503assert(num <= (*implics)->size[varfixing]);
526assert(implics !=
NULL);
527assert(poslower !=
NULL);
528assert(posupper !=
NULL);
529assert(posadd !=
NULL);
531 if( implics->
nimpls[varfixing] == 0 )
539right = implics->
nimpls[varfixing] - 1;
543found =
SCIPsortedvecFindPtr((
void**)(&(implics->
vars[varfixing][0])), SCIPvarComp, (
void*)implvar, right + 1, &pos);
548assert(pos >= right || compVars((
void*)implics->
vars[varfixing][pos], (
void*)implvar) > 0);
549assert(pos == 0 || compVars((
void*)implics->
vars[varfixing][pos-1], (
void*)implvar) < 0);
557assert(implvar == implics->
vars[varfixing][pos]);
564 if( pos + 1 < implics->
nimpls[varfixing] && implics->
vars[varfixing][pos+1] == implvar )
577 if( pos - 1 >= 0 && implics->
vars[varfixing][pos-1] == implvar )
606assert(implics !=
NULL);
607assert(poslower !=
NULL);
608assert(posupper !=
NULL);
609assert(posadd !=
NULL);
612assert(*poslower == -1 || *posupper == -1 || *posupper == (*poslower)+1);
613assert(*poslower == -1 || *posadd == *poslower);
614assert(*poslower >= 0 || *posupper == -1 || *posadd == *posupper);
615assert(0 <= *posadd && *posadd <= implics->nimpls[varfixing]);
618 return(*poslower >= 0);
621 if( *poslower >= 0 )
623assert(*posadd == *poslower);
626 return(*posupper >= 0);
655assert(implics !=
NULL);
656assert(*implics ==
NULL|| 0 <= (*implics)->nimpls[varfixing]);
657assert(stat !=
NULL);
662assert(conflict !=
NULL);
663assert(added !=
NULL);
674 if( *implics !=
NULL)
676found =
implicsSearchImplic(*implics, varfixing, implvar, impltype, &poslower, &posupper, &posadd);
677assert(-1 <= poslower && poslower < (*implics)->nimpls[varfixing]);
678assert(-1 <= posupper && posupper < (*implics)->nimpls[varfixing]);
679assert(0 <= posadd && posadd <= (*implics)->nimpls[varfixing]);
693assert(found == (poslower >= 0));
696 if( poslower >= 0 &&
SCIPsetIsFeasLE(
set, implbound, (*implics)->bounds[varfixing][poslower]) )
703 if( posupper >= 0 &&
SCIPsetIsFeasGT(
set, implbound, (*implics)->bounds[varfixing][posupper]) )
715assert(poslower >= 0);
716assert(posadd == poslower);
719assert((*implics)->vars[varfixing][poslower] == implvar);
721(*implics)->bounds[varfixing][poslower] = implbound;
725assert(poslower == -1);
729*implics !=
NULL? (*implics)->nimpls[varfixing]+1 : 1) );
730assert(*implics !=
NULL);
732 if( (*implics)->nimpls[varfixing] - posadd > 0 )
734 intamount = ((*implics)->nimpls[varfixing] - posadd);
737 for( k = (*implics)->nimpls[varfixing]; k > posadd; k-- )
739assert(compVars((
void*)(*implics)->vars[varfixing][k-1], (
void*)implvar) >= 0);
742 BMSmoveMemoryArray(&((*implics)->types[varfixing][posadd+1]), &((*implics)->types[varfixing][posadd]), amount);
743 BMSmoveMemoryArray(&((*implics)->ids[varfixing][posadd+1]), &((*implics)->ids[varfixing][posadd]), amount);
744 BMSmoveMemoryArray(&((*implics)->vars[varfixing][posadd+1]), &((*implics)->vars[varfixing][posadd]), amount);
745 BMSmoveMemoryArray(&((*implics)->bounds[varfixing][posadd+1]), &((*implics)->bounds[varfixing][posadd]), amount);
748(*implics)->vars[varfixing][posadd] = implvar;
749(*implics)->types[varfixing][posadd] = impltype;
750(*implics)->bounds[varfixing][posadd] = implbound;
752(*implics)->nimpls[varfixing]++;
754 for( k = posadd-1; k >= 0; k-- )
755assert(compVars((
void*)(*implics)->vars[varfixing][k], (
void*)implvar) <= 0);
762assert(found == (posupper >= 0));
765 if( posupper >= 0 &&
SCIPsetIsFeasGE(
set, implbound, (*implics)->bounds[varfixing][posupper]) )
772 if( poslower >= 0 &&
SCIPsetIsFeasLT(
set, implbound, (*implics)->bounds[varfixing][poslower]) )
784assert(posupper >= 0);
785assert(posadd == posupper);
788assert((*implics)->vars[varfixing][posupper] == implvar);
790(*implics)->bounds[varfixing][posupper] = implbound;
795assert(posupper == -1);
798*implics !=
NULL? (*implics)->nimpls[varfixing]+1 : 1) );
799assert(*implics !=
NULL);
801 if( (*implics)->nimpls[varfixing] - posadd > 0 )
803 intamount = ((*implics)->nimpls[varfixing] - posadd);
806 for( k = (*implics)->nimpls[varfixing]; k > posadd; k-- )
808assert(compVars((
void*)(*implics)->vars[varfixing][k-1], (
void*)implvar) >= 0);
811 BMSmoveMemoryArray(&((*implics)->types[varfixing][posadd+1]), &((*implics)->types[varfixing][posadd]), amount);
812 BMSmoveMemoryArray(&((*implics)->ids[varfixing][posadd+1]), &((*implics)->ids[varfixing][posadd]), amount);
813 BMSmoveMemoryArray(&((*implics)->vars[varfixing][posadd+1]), &((*implics)->vars[varfixing][posadd]), amount);
814 BMSmoveMemoryArray(&((*implics)->bounds[varfixing][posadd+1]), &((*implics)->bounds[varfixing][posadd]), amount);
817(*implics)->vars[varfixing][posadd] = implvar;
818(*implics)->types[varfixing][posadd] = impltype;
819(*implics)->bounds[varfixing][posadd] = implbound;
821(*implics)->nimpls[varfixing]++;
823 for( k = posadd-1; k >= 0; k-- )
824assert(compVars((
void*)(*implics)->vars[varfixing][k], (
void*)implvar) <= 0);
850assert(implics !=
NULL);
851assert(*implics !=
NULL);
852assert(implvar !=
NULL);
860found =
implicsSearchImplic(*implics, varfixing, implvar, impltype, &poslower, &posupper, &posadd);
869assert(0 <= posadd && posadd < (*implics)->nimpls[varfixing]);
870assert((*implics)->vars[varfixing][posadd] == implvar);
871assert((*implics)->types[varfixing][posadd] == impltype);
874 if( (*implics)->nimpls[varfixing] - posadd > 1 )
876 intamount = ((*implics)->nimpls[varfixing] - posadd - 1);
878 BMSmoveMemoryArray(&((*implics)->types[varfixing][posadd]), &((*implics)->types[varfixing][posadd+1]), amount);
879 BMSmoveMemoryArray(&((*implics)->vars[varfixing][posadd]), &((*implics)->vars[varfixing][posadd+1]), amount);
880 BMSmoveMemoryArray(&((*implics)->bounds[varfixing][posadd]), &((*implics)->bounds[varfixing][posadd+1]), amount);
882(*implics)->nimpls[varfixing]--;
885 if( (*implics)->nimpls[0] == 0 && (*implics)->nimpls[1] == 0 )
906assert(haslowerimplic !=
NULL);
907assert(hasupperimplic !=
NULL);
909 implicsSearchVar(implics, varfixing, implvar, &poslower, &posupper, &posadd);
911*haslowerimplic = (poslower >= 0);
912*hasupperimplic = (posupper >= 0);
920 int* lowerimplicpos,
926assert(lowerimplicpos !=
NULL);
927assert(upperimplicpos !=
NULL);
929 implicsSearchVar(implics, varfixing, implvar, lowerimplicpos, upperimplicpos, &posadd);
944 return implicsSearchImplic(implics, varfixing, implvar, impltype, &poslower, &posupper, &posadd);
963 if( first != second )
967tmp = cliquetable->
cliques[first];
968assert(tmp->
index== first);
969assert(cliquetable->
cliques[second]->
index== second);
972cliquetable->
cliques[second] = tmp;
975tmp->
index= second;
988assert(cliquetable->
cliques[clique->
index] == clique);
1016assert(clique !=
NULL);
1017assert(blkmem !=
NULL);
1018assert(size >= nvars && nvars > 0);
1019assert(vars !=
NULL);
1020assert(values !=
NULL);
1025(*clique)->nvars = nvars;
1026(*clique)->size = size;
1027(*clique)->startcleanup = -1;
1028(*clique)->id = (
unsignedint)
id;
1029(*clique)->eventsissued =
FALSE;
1030(*clique)->equation = isequation;
1031(*clique)->index = -1;
1043assert(clique !=
NULL);
1045 if( *clique !=
NULL)
1062assert(clique !=
NULL);
1064 if( num > clique->
size)
1071clique->
size= newsize;
1073assert(num <= clique->size);
1091assert(clique !=
NULL);
1095right = clique->
nvars;
1096 while( left < right-1 )
1101middle = (left+right)/2;
1106 else if( varidx > idx )
1110assert(var == clique->
vars[middle]);
1113 if( clique->
values[middle] < value )
1116 for( i = middle+1; i < clique->
nvars&& clique->
vars[i] == var; ++i )
1118 if( clique->
values[i] == value )
1123 if( clique->
values[middle] > value )
1126 for( i = middle-1; i >= 0 && clique->
vars[i] == var; --i )
1128 if( clique->
values[i] == value )
1164assert(clique !=
NULL);
1167assert(doubleentry !=
NULL);
1168assert(oppositeentry !=
NULL);
1172*doubleentry =
FALSE;
1173*oppositeentry =
FALSE;
1183assert(pos >= 0 && pos <= clique->nvars);
1187 if( pos < clique->nvars )
1189 const intamount = clique->
nvars- pos;
1200 for( ; pos < clique->
nvars- 1 && clique->
vars[pos + 1] == var && clique->
values[pos + 1] == value; ++pos );
1203 if( pos < clique->nvars - 1 && clique->
vars[pos + 1] == var )
1205assert(clique->
values[pos + 1] != value);
1206*oppositeentry =
TRUE;
1211*doubleentry =
TRUE;
1215 for( ; pos > 0 && clique->
vars[pos - 1] == var && clique->
values[pos - 1] != value; --pos );
1218 if( pos > 0 && clique->
vars[pos - 1] == var )
1220assert(clique->
values[pos - 1] == value);
1222*doubleentry =
TRUE;
1227assert(clique->
vars[pos] == var);
1228assert(clique->
values[pos] != value);
1230clique->
values[pos] = value;
1239 for( ; pos < clique->
nvars- 1 && clique->
vars[pos + 1] == var && clique->
values[pos + 1] != value; ++pos );
1242 if( pos < clique->nvars - 1 && clique->
vars[pos + 1] == var )
1244assert(clique->
values[pos + 1] == value);
1245*doubleentry =
TRUE;
1251*oppositeentry =
TRUE;
1254assert(clique->
vars[pos] == var);
1255assert(clique->
values[pos] != value);
1257clique->
values[pos] = value;
1263 for( ; pos > 0 && clique->
vars[pos - 1] == var && clique->
values[pos - 1] == value; --pos );
1266*doubleentry =
TRUE;
1269 if( pos > 0 && clique->
vars[pos - 1] == var && clique->
values[pos - 1] != value )
1270*oppositeentry =
TRUE;
1277clique->
vars[i] = var;
1278clique->
values[i] = value;
1294assert(clique !=
NULL);
1296assert(cliquetable !=
NULL);
1307assert(0 <= pos && pos < clique->nvars);
1308assert(clique->
vars[pos] == var);
1309assert(clique->
values[pos] == value);
1315 if( clique->
startcleanup== -1 || pos < clique->startcleanup )
1318#ifdef SCIP_MORE_DEBUG 1339 unsigned intcliqueid;
1343assert(cliques !=
NULL|| ncliques == 0);
1344assert(clique !=
NULL);
1346cliqueid = clique->
id;
1349 while( left < right-1 )
1354assert(cliques !=
NULL);
1355middle = (left+right)/2;
1356 id= cliques[middle]->
id;
1357 if( cliqueid <
id)
1359 else if( cliqueid >
id)
1363assert(clique == cliques[middle]);
1371#ifdef SCIP_MORE_DEBUG 1380assert(clique !=
NULL);
1382 for( i = 0; i < clique->
nvars; ++i )
1389var = clique->
vars[i];
1391assert(i == 0 || clique->
vars[i-1] != var || clique->
values[i-1] <= clique->
values[i]);
1397 if( ncliques == 0 )
1408assert(0 <= pos && pos < ncliques);
1409assert(cliques[pos] == clique);
1414assert(clique->
index>= 0);
1417#define cliqueCheck(clique) 1427assert(cliquelist !=
NULL);
1430(*cliquelist)->cliques[0] =
NULL;
1431(*cliquelist)->cliques[1] =
NULL;
1432(*cliquelist)->ncliques[0] = 0;
1433(*cliquelist)->ncliques[1] = 0;
1434(*cliquelist)->size[0] = 0;
1435(*cliquelist)->size[1] = 0;
1446assert(cliquelist !=
NULL);
1448 if( *cliquelist !=
NULL)
1466assert(cliquelist !=
NULL);
1468 if( num > cliquelist->
size[value] )
1474cliquelist->
size[value] = newsize;
1476assert(num <= cliquelist->size[value]);
1493assert(cliquelist !=
NULL);
1499 if( *cliquelist ==
NULL)
1505 if( (*cliquelist)->cliques[value] !=
NULL)
1507 for( i = (*cliquelist)->ncliques[value]; i > 0 && (*cliquelist)->cliques[value][i - 1]->id >
id; --i );
1509 if( i > 0 && (*cliquelist)->cliques[value][i - 1]->id ==
id)
1515 SCIPsetDebugMsg(
set,
"adding clique %u to cliquelist %p value %u (length: %d)\n",
1516clique->
id, (
void*)*cliquelist, value, (*cliquelist)->
ncliques[value]);
1518 BMSmoveMemoryArray(&((*cliquelist)->cliques[value][i+1]), &((*cliquelist)->cliques[value][i]), (*cliquelist)->ncliques[value] - i);
1520(*cliquelist)->cliques[value][i] = clique;
1521(*cliquelist)->ncliques[value]++;
1536assert(cliquelist !=
NULL);
1540 if( *cliquelist ==
NULL)
1543 SCIPdebugMessage(
"deleting clique %u from cliquelist %p value %u (length: %d)\n",
1544clique->
id, (
void*)*cliquelist, value, (*cliquelist)->
ncliques[value]);
1546pos =
cliquesSearchClique((*cliquelist)->cliques[value], (*cliquelist)->ncliques[value], clique);
1551#ifdef SCIP_MORE_DEBUG 1557assert(nclqvars >= 2);
1565 SCIPsortPtrBool((
void**) clqvars, clqvalues, SCIPvarComp, nclqvars);
1567 for( v = nclqvars - 1; v > 0; --v )
1569 if( clqvars[v] == clqvars[v - 1] )
1571 if( clqvalues[v] == clqvalues[v - 1] || (v > 1 && clqvars[v] == clqvars[v - 2]) )
1583assert(0 <= pos && pos < (*cliquelist)->ncliques[value]);
1584assert((*cliquelist)->cliques[value][pos] == clique);
1588(*cliquelist)->ncliques[value]--;
1589 if( pos < (*cliquelist)->ncliques[value] )
1591 BMSmoveMemoryArray(&((*cliquelist)->cliques[value][pos]), &((*cliquelist)->cliques[value][pos+1]),
1592(*cliquelist)->ncliques[value] - pos);
1596 if( (*cliquelist)->ncliques[0] == 0 && (*cliquelist)->ncliques[1] == 0 )
1619 if( cliquelist1 ==
NULL|| cliquelist2 ==
NULL)
1622ncliques1 = cliquelist1->
ncliques[value1];
1623cliques1 = cliquelist1->
cliques[value1];
1624ncliques2 = cliquelist2->
ncliques[value2];
1625cliques2 = cliquelist2->
cliques[value2];
1630 if( i1 < ncliques1 && i2 < ncliques2 )
1632 unsigned intcliqueid;
1635 if( ncliques2 > ncliques1 )
1642cliques1 = cliques2;
1643ncliques1 = ncliques2;
1661assert(i1 < ncliques1);
1673assert(i2 < ncliques2);
1693 if( cliquelist !=
NULL)
1697 SCIPdebugMessage(
"removing variable <%s> from cliques (%d with value 0, %d with value 1)\n",
1700 for( value = 0; value < 2; ++value )
1710 for( i = cliquelist->
ncliques[value] - 1; i >= 0; --i )
1714clique = cliquelist->
cliques[value][i];
1715assert(clique !=
NULL);
1717 SCIPdebugMessage(
" -> removing variable <%s> == %d from clique %u (size %d)\n",
1722 if( irrelevantvar )
1725#ifdef SCIP_MORE_DEBUG 1754assert(clique1 !=
NULL);
1755assert(clique2 !=
NULL);
1761 for( i = 0; i < clique1->
nvars; ++i )
1763 if( clique1->
vars[i] != clique2->
vars[i] || clique1->
values[i] != clique2->
values[i] )
1783#define HASHTABLE_CLIQUETABLE_SIZE 100 1794assert(cliquetable !=
NULL);
1802hashgetkeyClique, hashkeyeqClique, hashkeyvalClique,
NULL) );
1804(*cliquetable)->varidxtable =
NULL;
1805(*cliquetable)->djset =
NULL;
1806(*cliquetable)->cliques =
NULL;
1807(*cliquetable)->ncliques = 0;
1808(*cliquetable)->size = 0;
1809(*cliquetable)->ncreatedcliques = 0;
1810(*cliquetable)->ncleanupfixedvars = 0;
1811(*cliquetable)->ncleanupaggrvars = 0;
1812(*cliquetable)->ndirtycliques = 0;
1813(*cliquetable)->nentries = 0;
1814(*cliquetable)->incleanup =
FALSE;
1815(*cliquetable)->compsfromscratch =
FALSE;
1816(*cliquetable)->ncliquecomponents = -1;
1829assert(cliquetable !=
NULL);
1830assert(*cliquetable !=
NULL);
1833 for( i = (*cliquetable)->ncliques - 1; i >= 0; --i )
1835 cliqueFree(&(*cliquetable)->cliques[i], blkmem);
1839 if( (*cliquetable)->djset !=
NULL)
1843 if( (*cliquetable)->varidxtable !=
NULL)
1865assert(cliquetable !=
NULL);
1867 if( num > cliquetable->
size)
1873cliquetable->
size= newsize;
1875assert(num <= cliquetable->size);
1906assert(nclqvars !=
NULL);
1908 SCIPsetDebugMsg(
set,
"starting merging %d variables in clique %d\n", *nclqvars, (clique ==
NULL) ? -1 : (
int) clique->
id);
1910 if( *nclqvars <= 1 )
1913assert(clqvars !=
NULL);
1914assert(clqvalues !=
NULL);
1915assert(blkmem !=
NULL);
1917assert(stat !=
NULL);
1918assert(transprob !=
NULL);
1919assert(origprob !=
NULL);
1920assert(tree !=
NULL);
1921assert(eventqueue !=
NULL);
1922assert(nbdchgs !=
NULL);
1923assert(infeasible !=
NULL);
1926 SCIPsortPtrBool((
void**) clqvars, clqvalues, SCIPvarComp, *nclqvars);
1928noldbdchgs = *nbdchgs;
1931startidx = *nclqvars - 1;
1932 while( startidx >= 0 )
1939var = clqvars[startidx];
1945 if( clqvalues[startidx] )
1955curr = startidx - 1;
1960 if( clqvars[curr] == var )
1962 if( clqvalues[curr] )
1973assert(nzeros + nones <= *nclqvars);
1976 if( nones + nzeros == 1 )
1982 if( nones >= 2 && nzeros >= 2 )
1984*infeasible =
TRUE;
1989 if( nones >= 2 || nzeros >= 2 )
1994assert(nones <= 1 || nzeros <= 1);
1997 if( clique !=
NULL)
2013 SCIP_CALL(
SCIPvarFixBinary(var, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
2014cliquetable, fixvalue, infeasible, nbdchgs) );
2017fixvalue ? 1 : 0, *infeasible ?
"infeasible":
"feasible");
2024 if( nones >= 1 && nzeros >= 1 )
2029 if( nzeros + nones < *nclqvars )
2037 if(
w== startidx )
2044assert(clqvars[
w] != var);
2050 while(
w> 0 && clqvars[
w-1] == clqvars[
w] )
2052 if( clqvalues[
w-1] != clqvalues[
w] )
2054*infeasible =
TRUE;
2063 if( clique !=
NULL)
2068branchcand, eventqueue, cliquetable, !clqvalues[
w], infeasible, nbdchgs) );
2071clqvalues[
w] ? 0 : 1, *infeasible ?
"infeasible":
"feasible");
2080 if( clique !=
NULL)
2086*isequation =
FALSE;
2093assert(curr < startidx);
2098 if( *infeasible || *nclqvars == 0 )
2106 if( *nbdchgs > noldbdchgs )
2113onefixedvalue =
TRUE;
2114onefixedvar =
NULL;
2119 while( startidx < *nclqvars )
2123var = clqvars[startidx];
2131 if( onefixedvar !=
NULL)
2133*infeasible =
TRUE;
2135 SCIPsetDebugMsg(
set,
"two variables in clique %d fixed to one %s%s and %s%s\n", (clique !=
NULL) ? (
int) clique->
id: -1,
2140onefixedvalue = clqvalues[startidx];
2148clqvars[
w] = clqvars[startidx];
2149clqvalues[
w] = clqvalues[startidx];
2158 if( clique !=
NULL)
2170 if( onefixedvar !=
NULL)
2172 SCIPsetDebugMsg(
set,
"variable %s%s in clique %d fixed to one, fixing all other variables to zero\n",
2173onefixedvalue ?
"":
"~",
SCIPvarGetName(onefixedvar), (clique !=
NULL) ? (
int) clique->
id: -1);
2176 for( startidx = *nclqvars; startidx >= 0; --startidx )
2182 if( onefixedvalue != clqvalues[startidx] || clqvars[startidx] != onefixedvar )
2184 if( clique !=
NULL)
2193 while( startidx > 0 && clqvars[startidx - 1] == clqvars[startidx] )
2195 if( clqvalues[startidx - 1] != clqvalues[startidx] )
2197*infeasible =
TRUE;
2204clqvalues[startidx] ? 0 : 1);
2208branchcand, eventqueue, cliquetable, !clqvalues[startidx], infeasible, nbdchgs) );
2216 if( clique !=
NULL)
2222*isequation =
FALSE;
2226assert(!(*infeasible));
2230 if( *nclqvars == 0 )
2234*infeasible =
TRUE;
2236 else if( *nclqvars == 1 )
2241 if( clique !=
NULL)
2245 SCIP_CALL(
SCIPvarFixBinary(clqvars[0], blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand,
2246eventqueue, cliquetable, clqvalues[0], infeasible, nbdchgs) );
2249clqvalues[0] ? 1 : 0, *infeasible ?
"infeasible":
"feasible");
2252*isequation =
FALSE;
2269assert(binvar !=
NULL);
2314assert(cliquetable !=
NULL);
2315assert(clique !=
NULL);
2326clqvars = clique->
vars;
2327nclqvars = clique->
nvars;
2336 if( currnode == - 1 )
2340 if( lastnode != -1 )
2343lastnode = currnode;
2354assert(var !=
NULL);
2365 if( nodeindex >= 0 )
2401 intnlocalbdchgs = 0;
2405assert(cliquetable !=
NULL);
2406assert(vars !=
NULL);
2413*infeasible =
FALSE;
2417 if( values ==
NULL)
2422 for( v = nvars - 1; v >= 0; --v )
2423clqvalues[v] =
TRUE;
2435 for( v = nvars - 1; v >= 0; --v )
2451 for(
w= nvars - 1;
w>= 0; --
w)
2456 if( clqvar != var )
2467*infeasible =
TRUE;
2478#ifdef SCIP_DISABLED_CODE 2483 while(
w> 0 && clqvars[
w- 1] == clqvars[
w] )
2485 if( clqvalues[
w- 1] != clqvalues[
w] )
2487*infeasible =
TRUE;
2496branchcand, eventqueue, cliquetable, !clqval, infeasible, &nlocalbdchgs) );
2499clqval ? 0 : 1, *infeasible ?
"infeasible":
"feasible");
2516clqvars[v] = clqvars[nvars];
2517clqvalues[v] = clqvalues[nvars];
2522 if( nbdchgs !=
NULL)
2523*nbdchgs += nlocalbdchgs;
2529assert(!*infeasible);
2532 if( v < 0 && nvars <= 1)
2541branchcand, eventqueue, cliquetable, clqvalues[0], infeasible, &nlocalbdchgs) );
2544clqvalues[0] ? 1 : 0, *infeasible ?
"infeasible":
"feasible");
2546 if( nbdchgs !=
NULL)
2547*nbdchgs += nlocalbdchgs;
2549 else if( nvars == 0 )
2553*infeasible =
TRUE;
2563 SCIP_CALL(
sortAndMergeClique(clqvars, clqvalues, &nvars, &isequation,
NULL, blkmem,
set, stat, transprob, origprob, tree,
2564reopt, lp, branchcand, eventqueue, cliquetable, &nlocalbdchgs, infeasible) );
2566 if( nbdchgs !=
NULL)
2567*nbdchgs += nlocalbdchgs;
2570 if( nvars == 0 || *infeasible )
2575 SCIPsetDebugMsg(
set,
"reject %d-variable clique to keep clique table entries below threshold of %g entries\n",
2576nvars,
set->presol_clqtablefac * stat->
nnz);
2593 if( sameclique ==
NULL)
2595 SCIPsetDebugMsg(
set,
"adding clique %u with %d vars to clique table\n", clique->
id, nvars);
2614 SCIPsetDebugMsg(
set,
"same clique %p (id: %d) already found in cliquetable -> discard new one\n", (
void*) sameclique, sameclique->
id);
2620 if( !sameclique->equation && clique->
equation)
2621sameclique->equation =
TRUE;
2630assert(!isequation);
2663assert(clique !=
NULL);
2664assert(blkmem !=
NULL);
2666assert(nchgbds !=
NULL);
2667assert(infeasible !=
NULL);
2683 for( v =
w; v < clique->
nvars; ++v )
2687addvartoclique =
FALSE;
2692needsorting =
TRUE;
2706addvartoclique =
TRUE;
2718 if( !addvartoclique )
2732 if( onefixedvar !=
NULL)
2734*infeasible =
TRUE;
2736 SCIPsetDebugMsg(
set,
"two variables in clique %u fixed to one %s%s and %s%s\n", clique->
id,
2741onefixedvar = clique->
vars[v];
2742onefixedvalue = clique->
values[v];
2751clique->
vars[
w] = clique->
vars[v];
2756 if( addvartoclique )
2766 if( onefixedvar !=
NULL)
2768 SCIPsetDebugMsg(
set,
"variable %s%s in clique %u fixed to one, fixing all other variables to zero\n",
2771 for( v = 0; v < clique->
nvars; ++v )
2779 if( onefixedvalue != clqval || clqvar != onefixedvar )
2793assert(clqvar != onefixedvar);
2794*infeasible =
TRUE;
2806#ifdef SCIP_DISABLED_CODE 2811 while( v < clique->nvars - 1 && clique->
vars[v + 1] == clqvar )
2815*infeasible =
TRUE;
2823 SCIP_CALL(
SCIPvarFixBinary(clqvar, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand,
2824eventqueue, cliquetable, !clqval, infeasible, nchgbds) );
2846 if( clique->
nvars== 0 )
2848*infeasible =
TRUE;
2851 else if( clique->
nvars== 1 )
2860clique->
values[0] ? 1 : 0);
2863branchcand, eventqueue, cliquetable, clique->
values[0], infeasible, nchgbds) );
2879transprob, origprob, tree, reopt, lp, branchcand, eventqueue, cliquetable, nchgbds, infeasible) );
2893#ifdef SCIP_MORE_DEBUG 2903assert(cliquetable !=
NULL);
2905 for( c = cliquetable->
ncliques- 1; c >= 0; --c )
2908 return(nentries == cliquetable->
nentries);
2911#define checkNEntries(cliquetable) TRUE 2936assert(cliquetable !=
NULL);
2937assert(stat !=
NULL);
2938assert(infeasible !=
NULL);
2940*infeasible =
FALSE;
2959clique = cliquetable->
cliques[0];
2966assert(cliquetable->
nentries>= 0);
2968 SCIP_CALL(
cliqueCleanup(clique, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
2969cliquetable, nchgbds, infeasible) );
2982#ifdef SCIP_DISABLED_CODE 2992printf(
"aggr vars, clique %u\n", clique->
id);
2996var0 = clique->
vars[0];
2997var1 = clique->
vars[1];
2999 if( !clique->
values[0] )
3007 if( !clique->
values[1] )
3017var0 = clique->
vars[1];
3018var1 = clique->
vars[0];
3020 if( !clique->
values[0] )
3028 if( !clique->
values[1] )
3042tree, lp, cliquetable, branchcand, eventfilter, eventqueue,
3043var0, var1, scalarx, scalary, rhs, infeasible, &aggregated) );
3045assert(aggregated || *infeasible);
3052 if( clique->
nvars<= 1 || sameclique !=
NULL)
3064assert(sameclique->
nvars>= 2);
3073 for( j = 0; j < clique->
nvars; ++j )
3094 if( !clique->eventsissued )
3099 for( j = 0; j < clique->nvars; ++j )
3106clique->eventsissued =
TRUE;
3151assert(cliquetable !=
NULL);
3152assert(vars !=
NULL);
3156ndiscvars = nbinvars + nintvars + nimplvars;
3159 for( v = nbinvars; v < ndiscvars; ++v )
3166nbinvarstotal = nbinvars + nimplbinvars;
3169 if( nbinvarstotal == 0 )
3171 SCIPsetDebugMsg(
set,
"0 binary variables in total --> 0 connected components in the clique table");
3179 SCIPsetDebugMsg(
set,
"0 cliques --> Clique table has %d isolated nodes", nbinvarstotal);
3195 for( v = 0; v < ndiscvars; ++v )
3226djset = cliquetable->
djset;
3229nnonbinvars = (nintvars + nimplvars) - nimplbinvars;
3231cliques = cliquetable->
cliques;
3240clique = cliques[c];
3264#undef SCIPvboundsGetNVbds 3265#undef SCIPvboundsGetVars 3266#undef SCIPvboundsGetCoefs 3267#undef SCIPvboundsGetConstants 3268#undef SCIPimplicsGetNImpls 3269#undef SCIPimplicsGetVars 3270#undef SCIPimplicsGetTypes 3271#undef SCIPimplicsGetBounds 3272#undef SCIPimplicsGetIds 3273#undef SCIPcliqueGetNVars 3274#undef SCIPcliqueGetVars 3275#undef SCIPcliqueGetValues 3276#undef SCIPcliqueGetId 3277#undef SCIPcliqueGetIndex 3278#undef SCIPcliqueIsCleanedUp 3279#undef SCIPcliqueIsEquation 3280#undef SCIPcliquelistGetNCliques 3281#undef SCIPcliquelistGetCliques 3282#undef SCIPcliquelistCheck 3283#undef SCIPcliquetableGetNCliques 3284#undef SCIPcliquetableGetCliques 3285#undef SCIPcliquetableGetNEntries 3286#undef SCIPcliquetableGetNCliqueComponents 3287#undef SCIPcliquetableNeedsComponentUpdate 3294 returnvbounds !=
NULL? vbounds->
len: 0;
3327 returnimplics !=
NULL? implics->
nimpls[varfixing] : 0;
3336 returnimplics !=
NULL? implics->
vars[varfixing] :
NULL;
3345 returnimplics !=
NULL? implics->
types[varfixing] :
NULL;
3366 returnimplics !=
NULL? implics->
ids[varfixing] :
NULL;
3374assert(clique !=
NULL);
3376 returnclique->
nvars;
3384assert(clique !=
NULL);
3386 returnclique->
vars;
3396assert(clique !=
NULL);
3408assert(clique !=
NULL);
3420assert(clique !=
NULL);
3422 returnclique->
index;
3430assert(clique !=
NULL);
3440assert(clique !=
NULL);
3451 returncliquelist !=
NULL? cliquelist->
ncliques[value] : 0;
3480 for( value = 0; value < 2; ++value )
3488 for( i = 0; i < ncliques; ++i )
3493clique = cliques[i];
3494assert(clique !=
NULL);
3497assert(0 <= pos && pos < clique->nvars);
3498assert(clique->
vars[pos] == var);
3510assert(cliquetable !=
NULL);
3520assert(cliquetable !=
NULL);
3530assert(cliquetable !=
NULL);
3532 returncliquetable->
cliques;
3540assert(cliquetable !=
NULL);
#define SCIPdebugCheckClique(set, vars, values, nvars)
#define SCIP_HASHSIZE_CLIQUES
#define SCIP_LONGINT_FORMAT
#define SCIP_HASHSIZE_CLIQUES_SMALL
SCIP_RETCODE SCIPeventqueueAdd(SCIP_EVENTQUEUE *eventqueue, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter, SCIP_EVENT **event)
SCIP_RETCODE SCIPeventqueueProcess(SCIP_EVENTQUEUE *eventqueue, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter)
SCIP_RETCODE SCIPeventCreateImplAdded(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var)
SCIP_RETCODE SCIPeventqueueDelay(SCIP_EVENTQUEUE *eventqueue)
internal methods for managing events
int SCIPdisjointsetGetSize(SCIP_DISJOINTSET *djset)
int SCIPdisjointsetGetComponentCount(SCIP_DISJOINTSET *djset)
int SCIPdisjointsetFind(SCIP_DISJOINTSET *djset, int element)
void SCIPdisjointsetUnion(SCIP_DISJOINTSET *djset, int p, int q, SCIP_Bool forcerepofp)
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)
SCIP_RETCODE SCIPhashmapRemoveAll(SCIP_HASHMAP *hashmap)
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 SCIPhashtableRemove(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_VARSTATUS SCIPvarGetStatus(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)
const char * SCIPvarGetName(SCIP_VAR *var)
int SCIPvarGetNCliques(SCIP_VAR *var, SCIP_Bool varfixing)
SCIP_VAR * SCIPvarGetNegationVar(SCIP_VAR *var)
SCIP_CLIQUE ** SCIPvarGetCliques(SCIP_VAR *var, SCIP_Bool varfixing)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPvarGetProbvarBinary(SCIP_VAR **var, SCIP_Bool *negated)
SCIP_RETCODE SCIPvarsGetProbvarBinary(SCIP_VAR ***vars, SCIP_Bool **negatedarr, int nvars)
SCIP_Bool SCIPsortedvecFindPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), void *val, int len, int *pos)
void SCIPsortPtrBool(void **ptrarray, SCIP_Bool *boolarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
SCIP_VAR ** SCIPimplicsGetVars(SCIP_IMPLICS *implics, SCIP_Bool varfixing)
void SCIPcliqueDelVar(SCIP_CLIQUE *clique, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Bool value)
void SCIPcliquelistRemoveFromCliques(SCIP_CLIQUELIST *cliquelist, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Bool irrelevantvar)
SCIP_RETCODE SCIPcliquetableFree(SCIP_CLIQUETABLE **cliquetable, BMS_BLKMEM *blkmem)
void SCIPvboundsFree(SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem)
SCIP_Real * SCIPvboundsGetCoefs(SCIP_VBOUNDS *vbounds)
void SCIPvboundsShrink(SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, int newnvbds)
#define HASHTABLE_CLIQUETABLE_SIZE
int SCIPcliquetableGetNCliquesCreated(SCIP_CLIQUETABLE *cliquetable)
static SCIP_DECL_HASHKEYVAL(hashkeyvalClique)
static SCIP_RETCODE vboundsEnsureSize(SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
static void cliquetableSwapCliques(SCIP_CLIQUETABLE *cliquetable, int first, int second)
SCIP_Bool SCIPcliquetableNeedsComponentUpdate(SCIP_CLIQUETABLE *cliquetable)
SCIP_VAR ** SCIPcliqueGetVars(SCIP_CLIQUE *clique)
static SCIP_RETCODE cliqueCleanup(SCIP_CLIQUE *clique, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, int *nchgbds, SCIP_Bool *infeasible)
SCIP_CLIQUE ** SCIPcliquelistGetCliques(SCIP_CLIQUELIST *cliquelist, SCIP_Bool value)
static SCIP_RETCODE implicsCreate(SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem)
SCIP_Bool SCIPcliquelistsHaveCommonClique(SCIP_CLIQUELIST *cliquelist1, SCIP_Bool value1, SCIP_CLIQUELIST *cliquelist2, SCIP_Bool value2)
SCIP_Real * SCIPimplicsGetBounds(SCIP_IMPLICS *implics, SCIP_Bool varfixing)
SCIP_Longint SCIPcliquetableGetNEntries(SCIP_CLIQUETABLE *cliquetable)
void SCIPcliquelistCheck(SCIP_CLIQUELIST *cliquelist, SCIP_VAR *var)
SCIP_VAR ** SCIPvboundsGetVars(SCIP_VBOUNDS *vbounds)
int SCIPcliqueGetNVars(SCIP_CLIQUE *clique)
static void cliquetableMarkCliqueForCleanup(SCIP_CLIQUETABLE *cliquetable, SCIP_CLIQUE *clique)
SCIP_Bool * SCIPcliqueGetValues(SCIP_CLIQUE *clique)
SCIP_RETCODE SCIPvboundsDel(SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, SCIP_VAR *vbdvar, SCIP_Bool negativecoef)
SCIP_RETCODE SCIPcliquetableAdd(SCIP_CLIQUETABLE *cliquetable, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR **vars, SCIP_Bool *values, int nvars, SCIP_Bool isequation, SCIP_Bool *infeasible, int *nbdchgs)
int * SCIPimplicsGetIds(SCIP_IMPLICS *implics, SCIP_Bool varfixing)
SCIP_RETCODE SCIPimplicsAdd(SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, SCIP_Real implbound, SCIP_Bool isshortcut, SCIP_Bool *conflict, SCIP_Bool *added)
static int cliquesSearchClique(SCIP_CLIQUE **cliques, int ncliques, SCIP_CLIQUE *clique)
int SCIPcliquetableGetNCliqueComponents(SCIP_CLIQUETABLE *cliquetable)
static int cliquetableGetNodeIndexBinvar(SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *binvar)
SCIP_RETCODE SCIPvboundsAdd(SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BOUNDTYPE vboundtype, SCIP_VAR *var, SCIP_Real coef, SCIP_Real constant, SCIP_Bool *added)
void SCIPcliquelistFree(SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem)
static SCIP_RETCODE vboundsSearchPos(SCIP_VBOUNDS *vbounds, SCIP_VAR *var, SCIP_Bool negativecoef, int *insertpos, SCIP_Bool *found)
int SCIPimplicsGetNImpls(SCIP_IMPLICS *implics, SCIP_Bool varfixing)
SCIP_RETCODE SCIPcliqueAddVar(SCIP_CLIQUE *clique, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_VAR *var, SCIP_Bool value, SCIP_Bool *doubleentry, SCIP_Bool *oppositeentry)
static void checkImplics(SCIP_IMPLICS *implics)
SCIP_RETCODE SCIPcliquetableCreate(SCIP_CLIQUETABLE **cliquetable, SCIP_SET *set, BMS_BLKMEM *blkmem)
SCIP_BOUNDTYPE * SCIPimplicsGetTypes(SCIP_IMPLICS *implics, SCIP_Bool varfixing)
static void cliqueFree(SCIP_CLIQUE **clique, BMS_BLKMEM *blkmem)
SCIP_Bool SCIPcliqueHasVar(SCIP_CLIQUE *clique, SCIP_VAR *var, SCIP_Bool value)
int SCIPcliquetableGetNCliques(SCIP_CLIQUETABLE *cliquetable)
int SCIPcliquelistGetNCliques(SCIP_CLIQUELIST *cliquelist, SCIP_Bool value)
void SCIPimplicsGetVarImplics(SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_Bool *haslowerimplic, SCIP_Bool *hasupperimplic)
static SCIP_RETCODE cliquelistCreate(SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem)
#define checkNEntries(cliquetable)
static SCIP_RETCODE vboundsCreate(SCIP_VBOUNDS **vbounds, BMS_BLKMEM *blkmem)
static SCIP_RETCODE cliquelistEnsureSize(SCIP_CLIQUELIST *cliquelist, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool value, int num)
static void implicsSearchVar(SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, int *poslower, int *posupper, int *posadd)
SCIP_RETCODE SCIPcliquelistDel(SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem, SCIP_Bool value, SCIP_CLIQUE *clique)
static SCIP_RETCODE cliqueCreateWithData(SCIP_CLIQUE **clique, BMS_BLKMEM *blkmem, int size, SCIP_VAR **vars, SCIP_Bool *values, int nvars, int id, SCIP_Bool isequation)
#define cliqueCheck(clique)
SCIP_Bool SCIPcliqueIsCleanedUp(SCIP_CLIQUE *clique)
int SCIPcliquetableGetVarComponentIdx(SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var)
void SCIPimplicsGetVarImplicPoss(SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, int *lowerimplicpos, int *upperimplicpos)
static SCIP_RETCODE cliquetableEnsureSize(SCIP_CLIQUETABLE *cliquetable, SCIP_SET *set, int num)
SCIP_RETCODE SCIPimplicsDel(SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype)
SCIP_Real * SCIPvboundsGetConstants(SCIP_VBOUNDS *vbounds)
static SCIP_Bool implicsSearchImplic(SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype, int *poslower, int *posupper, int *posadd)
static void cliquetableUpdateConnectednessClique(SCIP_CLIQUETABLE *cliquetable, SCIP_CLIQUE *clique)
int SCIPvboundsGetNVbds(SCIP_VBOUNDS *vbounds)
SCIP_RETCODE SCIPcliquetableComputeCliqueComponents(SCIP_CLIQUETABLE *cliquetable, SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_VAR **vars, int nbinvars, int nintvars, int nimplvars)
SCIP_CLIQUE ** SCIPcliquetableGetCliques(SCIP_CLIQUETABLE *cliquetable)
SCIP_Bool SCIPimplicsContainsImpl(SCIP_IMPLICS *implics, SCIP_Bool varfixing, SCIP_VAR *implvar, SCIP_BOUNDTYPE impltype)
static SCIP_RETCODE sortAndMergeClique(SCIP_VAR **clqvars, SCIP_Bool *clqvalues, int *nclqvars, SCIP_Bool *isequation, SCIP_CLIQUE *clique, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, int *nbdchgs, SCIP_Bool *infeasible)
static SCIP_DECL_HASHGETKEY(hashgetkeyClique)
SCIP_RETCODE SCIPcliquetableCleanup(SCIP_CLIQUETABLE *cliquetable, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, int *nchgbds, SCIP_Bool *infeasible)
static SCIP_RETCODE implicsEnsureSize(SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool varfixing, int num)
void SCIPimplicsFree(SCIP_IMPLICS **implics, BMS_BLKMEM *blkmem)
int SCIPcliqueGetIndex(SCIP_CLIQUE *clique)
static SCIP_DECL_SORTPTRCOMP(compVars)
int SCIPcliqueSearchVar(SCIP_CLIQUE *clique, SCIP_VAR *var, SCIP_Bool value)
SCIP_Bool SCIPcliqueIsEquation(SCIP_CLIQUE *clique)
unsigned int SCIPcliqueGetId(SCIP_CLIQUE *clique)
static SCIP_RETCODE cliqueEnsureSize(SCIP_CLIQUE *clique, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
SCIP_RETCODE SCIPcliquelistAdd(SCIP_CLIQUELIST **cliquelist, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool value, SCIP_CLIQUE *clique)
static SCIP_DECL_HASHKEYEQ(hashkeyeqClique)
methods for implications, variable bounds, and cliques
#define BMSduplicateBlockMemoryArray(mem, ptr, source, num)
#define BMSfreeMemory(ptr)
#define BMSfreeBlockMemory(mem, ptr)
#define BMSallocBlockMemory(mem, ptr)
#define BMSreallocMemoryArray(ptr, num)
#define BMSfreeBlockMemoryArrayNull(mem, ptr, num)
#define BMSfreeBlockMemoryArray(mem, ptr, num)
#define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum)
#define BMSmoveMemoryArray(ptr, source, num)
struct BMS_BlkMem BMS_BLKMEM
#define BMSfreeMemoryArrayNull(ptr)
#define BMSallocMemory(ptr)
void SCIPdisjointsetFree(SCIP_DISJOINTSET **djset, BMS_BLKMEM *blkmem)
SCIP_RETCODE SCIPdisjointsetCreate(SCIP_DISJOINTSET **djset, BMS_BLKMEM *blkmem, int ncomponents)
internal miscellaneous methods
public methods for implications, variable bounds, and cliques
public methods for message output
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
public methods for problem variables
SCIP_Bool SCIPsetIsFeasGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsFeasLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_STAGE SCIPsetGetStage(SCIP_SET *set)
SCIP_Bool SCIPsetIsFeasLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsZero(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsFeasGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
int SCIPsetCalcMemGrowSize(SCIP_SET *set, int num)
internal methods for global SCIP settings
#define SCIPsetFreeBufferArray(set, ptr)
#define SCIPsetAllocBufferArray(set, ptr, num)
#define SCIPsetDuplicateBufferArray(set, ptr, source, num)
SCIP_CLIQUE ** cliques[2]
SCIP_HASHTABLE * hashtable
SCIP_HASHMAP * varidxtable
SCIP_Bool compsfromscratch
unsigned int eventsissued
SCIP_BOUNDTYPE * types[2]
datastructures for implications, variable bounds, and cliques
datastructures for global SCIP settings
datastructures for problem statistics
enum SCIP_BoundType SCIP_BOUNDTYPE
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_VARTYPE_CONTINUOUS
@ SCIP_VARSTATUS_MULTAGGR
@ SCIP_VARSTATUS_AGGREGATED
SCIP_RETCODE SCIPvarAddCliqueToList(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Bool value, SCIP_CLIQUE *clique)
SCIP_RETCODE SCIPvarFixBinary(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_Bool value, SCIP_Bool *infeasible, int *nbdchgs)
SCIP_RETCODE SCIPvarTryAggregateVars(SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_CLIQUETABLE *cliquetable, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *varx, SCIP_VAR *vary, SCIP_Real scalarx, SCIP_Real scalary, SCIP_Real rhs, SCIP_Bool *infeasible, SCIP_Bool *aggregated)
SCIP_Bool SCIPvarIsMarkedDeleteGlobalStructures(SCIP_VAR *var)
SCIP_RETCODE SCIPvarDelCliqueFromList(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_Bool value, SCIP_CLIQUE *clique)
SCIP_RETCODE SCIPvarsAddClique(SCIP_VAR **vars, SCIP_Bool *values, int nvars, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_CLIQUE *clique)
internal methods for problem variables
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4