SCIP_OrbitopalReductionData
172assert( orbireddata !=
NULL);
173assert( orbireddata->conshdlr_nonlinear_checked );
183assert( orbireddata->conshdlr_nonlinear_checked );
184 returnorbireddata->conshdlr_nonlinear ==
NULL?
FALSE:
235 return(
unsigned int) nodeinfo->
nodenumber;
259assert( orbidata !=
NULL);
261assert( col1 < orbidata->ncols );
263assert( col2 < orbidata->ncols );
266 for(i = 0; i < orbidata->
nrows; ++i)
268var1 = orbidata->
vars[i * orbidata->
ncols+ col1];
269var2 = orbidata->
vars[i * orbidata->
ncols+ col2];
310 int* origequalcolids;
311 intnorigequalcolids;
312 intmiddlecolumn = 0;
313 intpositionorigcolidincolorder;
314 intpositionswaporigcolidincolorder;
324assert( orbidata !=
NULL);
325assert( colorder !=
NULL);
326assert( colorderinv !=
NULL);
327assert( var !=
NULL);
328assert( thiscolswap !=
NULL);
329assert( orbidata->
ncols> 0 );
330assert( orbidata->
nrows> 0 );
332ncols = orbidata->
ncols;
342thiscolswap->
from= 0;
343thiscolswap->
to= 0;
349 if( origcolid == INT_MAX )
351thiscolswap->
from= 0;
352thiscolswap->
to= 0;
355assert( origcolid >= 0 );
356assert( origcolid < ncols );
360swaporigcolid = origcolid;
366middlecolumn = ncols / 2;
371 for(c = 0; c < ncols; ++c)
374 if( c == origcolid )
384 if( colorderinv[c] >= colorderinv[swaporigcolid] )
389 if( colorderinv[c] <= colorderinv[swaporigcolid] )
394 if(
ABS(colorderinv[c] - middlecolumn) >=
395 ABS(colorderinv[swaporigcolid] - middlecolumn) )
415norigequalcolids = 0;
419#ifdef SCIP_MORE_DEBUG 420 SCIPdebugMessage(
"Detect columns identical to original column %d: ", origcolid);
422 for(c = 0; c < ncols; ++c)
425 if( c == origcolid )
427origequalcolids[norigequalcolids++] = c;
428#ifdef SCIP_MORE_DEBUG 431assert( norigequalcolids <= ncols );
440origequalcolids[norigequalcolids++] = c;
441#ifdef SCIP_MORE_DEBUG 444assert( norigequalcolids <= ncols );
446#ifdef SCIP_MORE_DEBUG 451assert( norigequalcolids >= 1 );
458 SCIPsortInd(origequalcolids, SCIPsortArgsortInt, colorderinv, norigequalcolids);
460swaporigcolid = origequalcolids[norigequalcolids / 2];
474thiscolswap->
from= swaporigcolid;
475thiscolswap->
to= origcolid;
478 if( swaporigcolid == origcolid )
483 for(i = 0; i <
nrows; ++i)
485var1 = orbidata->
vars[i * ncols + swaporigcolid];
486var2 = orbidata->
vars[i * ncols + origcolid];
495positionorigcolidincolorder = colorderinv[origcolid];
496assert( positionorigcolidincolorder >= 0 );
497assert( positionorigcolidincolorder < ncols );
498assert( colorder[positionorigcolidincolorder] == origcolid );
501positionswaporigcolidincolorder = colorderinv[swaporigcolid];
502assert( positionswaporigcolidincolorder >= 0 );
503assert( positionswaporigcolidincolorder < ncols );
504assert( colorder[positionswaporigcolidincolorder] == swaporigcolid );
506 SCIPdebugMessage(
"Orbitope %p: Swapping column %d (at position %d) with column %d (at position %d)\n",
507(
void*) orbidata, origcolid, positionorigcolidincolorder, swaporigcolid, positionswaporigcolidincolorder);
510colorder[positionswaporigcolidincolorder] = origcolid;
511colorder[positionorigcolidincolorder] = swaporigcolid;
512colorderinv[origcolid] = positionswaporigcolidincolorder;
513colorderinv[swaporigcolid] = positionorigcolidincolorder;
542assert( orbidata !=
NULL);
543assert( roworder !=
NULL);
547assert( *roworder ==
NULL);
551assert( *roworder !=
NULL);
580assert( orbidata !=
NULL);
581assert( orbidata->
nrows> 0 );
582assert( orbidata->
ncols> 0 );
583assert( node !=
NULL);
584assert( roworder !=
NULL);
585assert( nselrows !=
NULL);
590*nselrows = orbidata->
nrows;
603 while(node !=
NULL)
608 if( ancestornodeinfo !=
NULL)
610assert( ancestornodeinfo->
nrows>= 0 );
611 for(i = ancestornodeinfo->
nrows- 1; i >= 0; --i)
613(*roworder)[(*nselrows)++] = ancestornodeinfo->
rows[i];
617 for(j = 0; j < (*nselrows) - 1; ++j)
619assert( ancestornodeinfo->
rows[i] != (*roworder)[j] );
630 for(i = 0; i < (*nselrows) / 2; ++i)
634(*roworder)[i] = (*roworder)[(*nselrows) - 1 - i];
635(*roworder)[(*nselrows) - 1 - i] = j;
659assert( orbidata !=
NULL);
660assert( node !=
NULL);
661assert( rootedpath !=
NULL);
662assert( colorder !=
NULL);
663assert( colorderinv !=
NULL);
667 while( node !=
NULL)
670rootedpath[i--] = node;
675 for(i = 0; i <= depth; ++i)
677node = rootedpath[i];
686 if( ancestornodeinfo ==
NULL)
692 for(j = 0; j < ancestornodeinfo->
ncolswaps; ++j)
694 intpositionfromincolorder;
695 intpositiontoincolorder;
697thiscolswap = &ancestornodeinfo->
colswaps[j];
698assert( thiscolswap->
from!= thiscolswap->
to);
699assert( thiscolswap->
from>= 0 && thiscolswap->
from< orbidata->
ncols);
700assert( thiscolswap->
to>= 0 && thiscolswap->
to< orbidata->
ncols);
703positionfromincolorder = colorderinv[thiscolswap->
from];
704assert( positionfromincolorder >= 0 );
705assert( positionfromincolorder < orbidata->ncols );
706assert( colorder[positionfromincolorder] == thiscolswap->
from);
709positiontoincolorder = colorderinv[thiscolswap->
to];
710assert( positiontoincolorder >= 0 );
711assert( positiontoincolorder < orbidata->ncols );
712assert( colorder[positiontoincolorder] == thiscolswap->
to);
715colorder[positiontoincolorder] = thiscolswap->
from;
716colorder[positionfromincolorder] = thiscolswap->
to;
717colorderinv[thiscolswap->
from] = positiontoincolorder;
718colorderinv[thiscolswap->
to] = positionfromincolorder;
749assert( eventdata !=
NULL);
756assert( orbidata !=
NULL);
757assert( orbidata->
nrows> 0 );
758assert( orbidata->
ncols> 0 );
772 for(c = 0; c < nchildren; ++c)
774childnode = children[c];
779 for(i = 0; i < nboundchgs; ++i)
783assert( boundchg !=
NULL);
797 if( nbranchvars > 0 )
799 for(j = 0; j < nbranchvars; ++j)
801 if( branchvars[j] == var )
807 if( j < nbranchvars )
812 if( nbranchvars >= maxnbranchvars )
814assert( nbranchvars == maxnbranchvars );
815assert( maxnbranchvars > 0 );
819assert( nbranchvars < maxnbranchvars );
820branchvars[nbranchvars++] = var;
825 if( nbranchvars <= 0 )
833newnodeinfo->
nrows= 0;
841assert( orbidata->
nrows> 0 );
846assert( roworder !=
NULL);
849 for(i = 0; i < nbranchvars; ++i)
855assert( rowid >= 0 );
856assert( rowid < orbidata->
nrows);
861 for(j = 0; j < nselrows; ++j)
863 if( rowid == roworder[j] )
873roworder[nselrows++] = rowid;
878assert( newnodeinfo->
nrows== 0 );
885newnodeinfo->
nrows, newnodeinfo->
nrows+ 1) );
887newnodeinfo->
rows[newnodeinfo->
nrows++] = rowid;
901assert( orbidata->
ncols> 0 );
906 for(i = 0; i < orbidata->
ncols; ++i)
910 for(i = 0; i < orbidata->
ncols; ++i)
924 for(i = 0; i < nbranchvars; ++i)
927colorderinv, branchvars[i], &tmpcolswap) );
930 if( tmpcolswap.
from== tmpcolswap.
to)
936assert( newnodeinfo->
nrows== 0 );
946thiscolswap->
from= tmpcolswap.
from;
947thiscolswap->
to= tmpcolswap.
to;
979 returneventExecNodeBranched(
scip, eventhdlr, event, eventdata);
1002assert( orbireddata !=
NULL);
1003assert( orbidata !=
NULL);
1004assert( orbidata->
nrows> 0 );
1005assert( orbidata->
ncols> 0 );
1006assert( rowid >= 0 );
1007assert( rowid < orbidata->
nrows);
1009assert( orbidata->
vars[rowid * orbidata->
ncols] );
1012var = orbidata->
vars[rowid * orbidata->
ncols];
1016 for(c = 1; c < orbidata->
ncols; ++c)
1044assert( orbireddata !=
NULL);
1045assert( orbidata !=
NULL);
1046assert( *orbidata !=
NULL);
1047assert( (*orbidata)->vars !=
NULL);
1048assert( (*orbidata)->nrows > 0 );
1049assert( (*orbidata)->ncols > 0 );
1050assert( (*orbidata)->nrows * (*orbidata)->ncols > 0 );
1062 for(i = 0; i < nentries; ++i)
1068 if( nodeinfo ==
NULL)
1071assert( nodeinfo !=
NULL);
1077assert( (nodeinfo->
nrows== 0) != (nodeinfo->
rows!=
NULL) );
1090nelem = (*orbidata)->nrows * (*orbidata)->ncols;
1091assert( nelem > 0 );
1092 for(i = 0; i < nelem; ++i)
1125assert( orbireddata !=
NULL);
1126assert( orbireddata->eventhdlr !=
NULL);
1127assert( vars !=
NULL);
1128assert(
nrows>= 0 );
1129assert( ncols >= 0 );
1131nelem =
nrows* ncols;
1132assert( nelem >= 0 );
1146orbidata->
ncols= ncols;
1162 SCIPdebugMessage(
"Orbitope variables for (%dx%d) orbitope with orbidata %p\n",
nrows, ncols, (
void*) orbidata);
1165 for(i = 0, rowid = 0, colid = 0; i < nelem; ++i, ++colid)
1167 if( colid == ncols )
1172assert(
nrows> 0 );
1173assert( ncols > 0 );
1174assert( rowid == i / ncols );
1175assert( colid == i % ncols );
1178assert( var !=
NULL);
1184orbidata->
vars[i] = var;
1199 for(i = 0; i <
nrows; ++i)
1221hashGetKeyBnbnodeinfo, hashKeyEqBnbnodeinfo, hashKeyValBnbnodeinfo,
NULL) );
1225assert( orbireddata->norbitopes >= 0 );
1226assert( (orbireddata->norbitopes == 0) == (orbireddata->orbitopes ==
NULL) );
1227assert( orbireddata->norbitopes <= orbireddata->maxnorbitopes );
1228 if( orbireddata->norbitopes == orbireddata->maxnorbitopes )
1233assert( newsize >= 0 );
1235 if( orbireddata->norbitopes == 0 )
1244orbireddata->maxnorbitopes = newsize;
1246assert( orbireddata->orbitopes !=
NULL);
1247assert( orbireddata->norbitopes < orbireddata->maxnorbitopes );
1250assert( orbireddata->norbitopes < orbireddata->maxnorbitopes );
1251orbireddata->orbitopes[orbireddata->norbitopes++] = orbidata;
1270assert( orbidata !=
NULL);
1271assert( colorder !=
NULL);
1272assert( colorderinv !=
NULL);
1276assert( *colorder ==
NULL);
1277assert( *colorderinv ==
NULL);
1280assert( *colorder !=
NULL);
1281assert( *colorderinv !=
NULL);
1308assert( orbidata !=
NULL);
1309assert( eventnode !=
NULL);
1310assert( colorder !=
NULL);
1311assert( colorderinv !=
NULL);
1316*colorderinv =
NULL;
1319ncols = orbidata->
ncols;
1320assert( ncols > 0 );
1326 for(i = 0; i < ncols; ++i)
1330 for(i = 0; i < ncols; ++i)
1331(*colorderinv)[i] = i;
1361 int* infinitesimal,
1374assert( matrix !=
NULL);
1375assert( orbidata !=
NULL);
1377assert(
nrows>= 0 );
1378assert( nrows <= orbidata->
nrows);
1379assert( ncols >= 0 );
1380assert( ncols <= orbidata->ncols );
1381assert( infinitesimal !=
NULL);
1384 for(rowid = 0; rowid <
nrows; ++rowid)
1387 for(colid = 0; colid < ncols; ++colid)
1390idx = rowid * ncols + colid;
1391origidx = origrowid * ncols + origcolid;
1392var = orbidata->
vars[origidx];
1399 for(colid = 0; colid < ncols - 1; ++colid)
1402 for(rowid = 0; rowid <
nrows; ++rowid)
1405assert(
SCIPsymGE(
scip, matrix[rowid * ncols + colid], matrix[rowid * ncols + colid + 1]) );
1407 if(
SCIPsymGT(
scip, matrix[rowid * ncols + colid], matrix[rowid * ncols + colid + 1]) )
1420assert(
SCIPsymEQ(
scip, matrix[rowid * ncols + colid], matrix[rowid * ncols + colid + 1]) );
1421 if( addinfinitesimals
1422? (infinitesimal[colid] == rowid)
1423: (infinitesimal[colid + 1] == rowid)
1444 unsigned inthash = 0;
1446assert( array !=
NULL);
1449 for(i = 0; i < len; i++)
1451hash ^= (
unsignedint) (array[i]);
1452hash = (hash << 1) ^ (hash >> 1);
1455 return(
int) hash;
1459#ifdef SCIP_MORE_DEBUG 1462voiddebugPrintMatrix(
1471assert( matrix !=
NULL);
1472assert(
nrows>= 0 );
1473assert( ncols >= 0 );
1475 for(row = 0; row <
nrows; ++row)
1478 for(col = 0; col < ncols; ++col)
1502 int* lexminepsrow =
NULL;
1504 int* lexmaxepsrow =
NULL;
1522assert( orbidata !=
NULL);
1524assert( nselrows >= 0 );
1525assert( infeasible !=
NULL);
1526assert( nfixedvars !=
NULL);
1528*infeasible =
FALSE;
1530assert( orbidata->
nrows> 0 );
1531assert( orbidata->
nrows>= nselrows );
1532ncols = orbidata->
ncols;
1533assert( ncols > 1 );
1536 if( nselrows <= 0 )
1539#ifdef SCIP_MORE_DEBUG 1547 for(k = 0; k < ncols; ++k)
1553 for(
r= 0;
r< nselrows; ++
r)
1556 for(k = 0; k < ncols; ++k)
1558thisvar = orbidata->
vars[roworder[
r] * ncols + colorder[k]];
1567nelem = nselrows * ncols;
1574 for(colid = 0; colid < ncols; ++colid)
1575lexminepsrow[colid] = -1;
1580 for(rowid = 0, i = colid; rowid < nselrows; ++rowid, i += ncols)
1583origidx = origrowid * ncols + origcolid;
1584var = orbidata->
vars[origidx];
1586assert( i == rowid * ncols + colid );
1587assert( var !=
NULL);
1592 for(colid = ncols - 2; colid >= 0; --colid)
1601 for(rowid = 0, i = colid; rowid < nselrows; ++rowid, i += ncols)
1604origidx = origrowid * ncols + origcolid;
1605assert( i == rowid * ncols + colid );
1608assert( (i + 1) % ncols > 0 );
1610var = orbidata->
vars[origidx];
1611assert( var !=
NULL);
1626( lexminepsrow[colid + 1] == rowid &&
SCIPsymEQ(
scip, ub, lexminface[i + 1]) ) )
1632 if( lastunfixed >= 0 )
1635assert(
SCIPsymEQ(
scip, lexminface[lastunfixed * ncols + colid],
1636lexminface[lastunfixed * ncols + colid + 1]) );
1646lexminface[lastunfixed * ncols + colid] += 1.0;
1653assert( lexminepsrow[colid] == -1 );
1654lexminepsrow[colid] = lastunfixed;
1661rowid = lastunfixed;
1662i = rowid * ncols + colid;
1668*infeasible =
TRUE;
1669 SCIPdebugMessage(
"Cannot repair infeasibility for column %d (original: %d), min\n", colid, origcolid);
1678lexminface[i] =
MAX(lexminface[i + 1], lb);
1679assert(
SCIPsymGE(
scip, lexminface[i], lexminface[i + 1]) );
1684 else if( lexminepsrow[colid + 1] == rowid )
1686assert(
SCIPsymEQ(
scip, lexminface[i], lexminface[i + 1]) );
1695assert( lexminepsrow[colid] == -1 );
1696lexminepsrow[colid] = rowid;
1710lastunfixed = rowid;
1717lastunfixed = rowid;
1742 for(colid = 0; colid < ncols; ++colid)
1743lexmaxepsrow[colid] = -1;
1748 for(rowid = 0, i = colid; rowid < nselrows; ++rowid, i += ncols)
1751origidx = origrowid * ncols + origcolid;
1752var = orbidata->
vars[origidx];
1754assert( i == rowid * ncols + colid );
1755assert( var !=
NULL);
1760 for(colid = 1; colid < ncols; ++colid)
1769 for(rowid = 0, i = colid; rowid < nselrows; ++rowid, i += ncols)
1772origidx = origrowid * ncols + origcolid;
1773assert( i == rowid * ncols + colid );
1776assert( i % ncols > 0 );
1778var = orbidata->
vars[origidx];
1779assert( var !=
NULL);
1794( lexmaxepsrow[colid - 1] == rowid &&
SCIPsymEQ(
scip, lb, lexmaxface[i - 1]) ) )
1800 if( lastunfixed >= 0 )
1803assert(
SCIPsymEQ(
scip, lexmaxface[lastunfixed * ncols + colid],
1804lexmaxface[lastunfixed * ncols + colid - 1]) );
1814lexmaxface[lastunfixed * ncols + colid] -= 1.0;
1823assert( lexmaxepsrow[colid] == -1 );
1824lexmaxepsrow[colid] = lastunfixed;
1831rowid = lastunfixed;
1832i = rowid * ncols + colid;
1838*infeasible =
TRUE;
1839 SCIPdebugMessage(
"Cannot repair infeasibility for column %d (original: %d), max\n", colid, origcolid);
1848lexmaxface[i] =
MIN(lexmaxface[i - 1], ub);
1849assert(
SCIPsymGE(
scip, lexmaxface[i - 1], lexmaxface[i]) );
1854 else if( lexmaxepsrow[colid - 1] == rowid )
1856assert(
SCIPsymEQ(
scip, lexmaxface[i - 1], lexmaxface[i]) );
1865assert( lexmaxepsrow[colid] == -1 );
1866lexmaxepsrow[colid] = rowid;
1880lastunfixed = rowid;
1887lastunfixed = rowid;
1907#ifdef SCIP_MORE_DEBUG 1910debugPrintMatrix(lexminface, nselrows, ncols);
1912debugPrintMatrix(lexmaxface, nselrows, ncols);
1916 for(colid = 0; colid < ncols; ++colid)
1918 for(rowid = 0, i = colid; rowid < nselrows; ++rowid, i += ncols)
1920assert( i == rowid * ncols + colid );
1925origidx = origrowid * ncols + origcolid;
1926var = orbidata->
vars[origidx];
1934 SCIPdebugMessage(
"Fixing variable LB %12s (%3d,%3d) to %5.2f\n", var->
name, rowid, colid, lexminface[i]);
1939 SCIPdebugMessage(
"Fixing variable LB %12s (%3d,%3d) to %5.2f (no success)\n", var->
name, rowid, colid,
1944 SCIPdebugMessage(
"Detected infeasibility fixing variable %12s (%3d,%3d) to %5.2f\n",
1945var->
name, rowid, colid, lexminface[i]);
1952 SCIPdebugMessage(
"Fixing variable UB %12s (%3d,%3d) to %5.2f\n", var->
name, rowid, colid, lexminface[i]);
1957 SCIPdebugMessage(
"Fixing variable UB %12s (%3d,%3d) to %5.2f (no success)\n", var->
name, rowid, colid,
1962 SCIPdebugMessage(
"Detected infeasibility fixing variable %12s (%3d,%3d) to %5.2f\n",
1963var->
name, rowid, colid, lexminface[i]);
1976 SCIPdebugMessage(
"Restricting variable LB %12s (%3d,%3d) to %5.2f\n", var->
name, rowid, colid,
1982 SCIPdebugMessage(
"Restricting variable LB %12s (%3d,%3d) to %5.2f (no success)\n", var->
name,
1983rowid, colid, lexminface[i]);
1987 SCIPdebugMessage(
"Detected infeasibility restricting variable LB %12s (%3d,%3d) to %5.2f\n",
1988var->
name, rowid, colid, lexminface[i]);
1996 SCIPdebugMessage(
"Restricting variable UB %12s (%3d,%3d) to %5.2f\n", var->
name, rowid, colid,
2002 SCIPdebugMessage(
"Restricting variable UB %12s (%3d,%3d) to %5.2f (no success)\n", var->
name,
2003rowid, colid, lexmaxface[i]);
2007 SCIPdebugMessage(
"Detected infeasibility restricting variable UB %12s (%3d,%3d) to %5.2f\n",
2008var->
name, rowid, colid, lexmaxface[i]);
2042assert( orbidata !=
NULL);
2043assert( infeasible !=
NULL);
2044assert( nfixedvars !=
NULL);
2047*infeasible =
FALSE;
2049assert( orbidata->
ncols> 0 );
2050assert( orbidata->
nrows> 0 );
2053assert( focusnode !=
NULL);
2057assert( nselrows >= 0 );
2058assert( nselrows <= orbidata->
nrows);
2059 if( nselrows == 0 )
2071 inthash = colhash ^ rowhash;
2074 SCIPdebugPrintf(
"Col hash %32d; Row hash %32d; Hash %32d\n", colhash, rowhash, hash);
2078 while( tmpnode !=
NULL)
2080 intnbranchings, nconsprop, nprop;
2083 SCIPdebugPrintf(
" node %lld: (%d, %d, %d) \n", tmpnode->
number, nbranchings, nconsprop, nprop);
2092assert( orbidata->
dbghash== hash );
2105#ifdef SCIP_MORE_DEBUG 2127assert( orbireddata !=
NULL);
2128assert( nred !=
NULL);
2130*nred = orbireddata->nred;
2131*ncutoff = orbireddata->ncutoff;
2146assert( orbireddata !=
NULL);
2148 if( orbireddata->norbitopes == 0 )
2155 " orbitopal reduction: %4d components: ", orbireddata->norbitopes);
2156 for(i = 0; i < orbireddata->norbitopes; ++i)
2161 "%dx%d", orbireddata->orbitopes[i]->nrows, orbireddata->orbitopes[i]->ncols);
2184assert( orbireddata !=
NULL);
2185assert( (orbireddata->norbitopes == 0) == (orbireddata->orbitopes ==
NULL) );
2186assert( infeasible !=
NULL);
2187assert( nred !=
NULL);
2189*infeasible =
FALSE;
2204 for(c = 0; c < orbireddata->norbitopes; ++c)
2206orbidata = orbireddata->orbitopes[c];
2207assert( orbidata !=
NULL);
2210 SCIPdebugMessage(
"Found %d reductions during orbitopal reduction for orbitope %d\n", thisfixedvars, c);
2211*nred += thisfixedvars;
2219 SCIPdebugMessage(
"Detected infeasibility during orbitopal reduction for orbitope %d\n", c);
2224orbireddata->nred += *nred;
2226++orbireddata->ncutoff;
2244assert( orbireddata !=
NULL);
2245assert( vars !=
NULL);
2246assert(
nrows> 0 );
2247assert( ncols > 0 );
2253 if( !orbireddata->conshdlr_nonlinear_checked )
2256orbireddata->conshdlr_nonlinear_checked =
TRUE;
2273assert( orbireddata !=
NULL);
2274assert( orbireddata->norbitopes >= 0 );
2275assert( (orbireddata->norbitopes == 0) == (orbireddata->orbitopes ==
NULL) );
2276assert( orbireddata->norbitopes <= orbireddata->maxnorbitopes );
2277assert( orbireddata->eventhdlr !=
NULL);
2280 while(orbireddata->norbitopes > 0)
2284assert( orbireddata->norbitopes == 0 );
2286orbireddata->orbitopes =
NULL;
2287orbireddata->maxnorbitopes = 0;
2300assert( orbireddata !=
NULL);
2301assert( *orbireddata !=
NULL);
2322assert( orbireddata !=
NULL);
2332 "The column ordering variant, respects enum SCIP_ColumnOrdering.",
2339assert( eventhdlr !=
NULL);
2340(*orbireddata)->eventhdlr = eventhdlr;
2343(*orbireddata)->orbitopes =
NULL;
2344(*orbireddata)->norbitopes = 0;
2345(*orbireddata)->maxnorbitopes = 0;
2348(*orbireddata)->conshdlr_nonlinear =
NULL;
2349(*orbireddata)->conshdlr_nonlinear_checked =
FALSE;
2352(*orbireddata)->nred = 0;
2353(*orbireddata)->ncutoff = 0;
2364assert( orbireddata !=
NULL);
2366 returnorbireddata->defaultcolumnordering;
SCIP_RETCODE SCIPcheckStage(SCIP *scip, const char *method, SCIP_Bool init, SCIP_Bool problem, SCIP_Bool transforming, SCIP_Bool transformed, SCIP_Bool initpresolve, SCIP_Bool presolving, SCIP_Bool exitpresolve, SCIP_Bool presolved, SCIP_Bool initsolve, SCIP_Bool solving, SCIP_Bool solved, SCIP_Bool exitsolve, SCIP_Bool freetrans, SCIP_Bool freescip)
SCIP_Bool SCIPisTransformed(SCIP *scip)
SCIP_STAGE SCIPgetStage(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)
int SCIPhashtableGetNEntries(SCIP_HASHTABLE *hashtable)
SCIP_RETCODE SCIPhashtableSafeInsert(SCIP_HASHTABLE *hashtable, void *element)
void * SCIPhashtableGetEntry(SCIP_HASHTABLE *hashtable, int entryidx)
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)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
int SCIPconshdlrGetNActiveConss(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata)
SCIP_EVENTHDLR * SCIPfindEventhdlr(SCIP *scip, const char *name)
SCIP_EVENTTYPE SCIPeventGetType(SCIP_EVENT *event)
SCIP_RETCODE SCIPcatchEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos)
SCIP_NODE * SCIPeventGetNode(SCIP_EVENT *event)
SCIP_RETCODE SCIPdropEvent(SCIP *scip, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPfreeBufferArrayNull(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
void SCIPnodeGetNDomchg(SCIP_NODE *node, int *nbranchings, int *nconsprop, int *nprop)
SCIP_DOMCHG * SCIPnodeGetDomchg(SCIP_NODE *node)
SCIP_Longint SCIPnodeGetNumber(SCIP_NODE *node)
SCIP_NODE * SCIPnodeGetParent(SCIP_NODE *node)
int SCIPnodeGetDepth(SCIP_NODE *node)
SCIP_Bool SCIPinProbing(SCIP *scip)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
SCIP_Bool SCIPsymGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsymEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsymLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsymGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsymLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_RETCODE SCIPgetChildren(SCIP *scip, SCIP_NODE ***children, int *nchildren)
SCIP_NODE * SCIPgetFocusNode(SCIP *scip)
SCIP_NODE * SCIPgetCurrentNode(SCIP *scip)
SCIP_RETCODE SCIPtightenVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_VAR * SCIPboundchgGetVar(SCIP_BOUNDCHG *boundchg)
SCIP_BOUNDCHG * SCIPdomchgGetBoundchg(SCIP_DOMCHG *domchg, int pos)
SCIP_BOUNDCHGTYPE SCIPboundchgGetBoundchgtype(SCIP_BOUNDCHG *boundchg)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Bool SCIPvarIsTransformed(SCIP_VAR *var)
SCIP_RETCODE SCIPtightenVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
int SCIPdomchgGetNBoundchgs(SCIP_DOMCHG *domchg)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPmarkDoNotMultaggrVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
SCIP_Bool SCIPallowStrongDualReds(SCIP *scip)
void SCIPsortInd(int *indarray, SCIP_DECL_SORTINDCOMP((*indcomp)), void *dataptr, int len)
memory allocation routines
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
public methods for managing constraints
public methods for message output
public methods for problem variables
public methods for branching rule plugins and branching
public methods for conflict handler plugins and conflict analysis
public methods for constraint handler plugins and constraints
public methods for problem copies
public methods for cuts and aggregation rows
public methods for the LP relaxation, rows and columns
public methods for memory management
public methods for message handling
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 SCIP variables
SCIP_HASHMAP * rowindexmap
SCIP_Longint lastnodenumber
SCIP_HASHTABLE * nodeinfos
SCIP_ROWORDERING rowordering
SCIP_HASHMAP * colindexmap
SCIP_COLUMNORDERING columnordering
datastructures for block memory pools and memory buffers
SCIP main data structure.
data structures for branch and bound tree
datastructures for problem variables
methods for handling symmetries
static SCIP_RETCODE propagateStaticOrbitope(SCIP *scip, ORBITOPEDATA *orbidata, int *roworder, int nselrows, int *colorder, SCIP_Bool *infeasible, int *nfixedvars)
static SCIP_RETCODE getRowOrder(SCIP *scip, ORBITOPEDATA *orbidata, SCIP_NODE *node, int **roworder, int *nselrows)
static SCIP_DECL_EVENTEXEC(eventExecNodeBranched)
static SCIP_RETCODE populateRootedPathColumnOrder(ORBITOPEDATA *orbidata, SCIP_NODE *node, SCIP_NODE **rootedpath, int *colorder, int *colorderinv)
static SCIP_RETCODE freeOrbitope(SCIP *scip, SCIP_ORBITOPALREDDATA *orbireddata, ORBITOPEDATA **orbidata)
static int debugGetArrayHash(int *array, int len)
static void freeColumnOrder(SCIP *scip, ORBITOPEDATA *orbidata, int **colorder, int **colorderinv)
SCIP_RETCODE SCIPincludeOrbitopalReduction(SCIP *scip, SCIP_ORBITOPALREDDATA **orbireddata)
static SCIP_DECL_HASHGETKEY(hashGetKeyBnbnodeinfo)
SCIP_RETCODE SCIPorbitopalReductionFree(SCIP *scip, SCIP_ORBITOPALREDDATA **orbireddata)
SCIP_RETCODE SCIPorbitopalReductionReset(SCIP *scip, SCIP_ORBITOPALREDDATA *orbireddata)
static SCIP_RETCODE propagateOrbitope(SCIP *scip, ORBITOPEDATA *orbidata, SCIP_Bool *infeasible, int *nfixedvars)
SCIP_RETCODE SCIPorbitopalReductionAddOrbitope(SCIP *scip, SCIP_ORBITOPALREDDATA *orbireddata, SCIP_ROWORDERING rowordering, SCIP_COLUMNORDERING colordering, SCIP_VAR **vars, int nrows, int ncols, SCIP_Bool *success)
static SCIP_Bool rowIsBranchRow(SCIP *scip, SCIP_ORBITOPALREDDATA *orbireddata, ORBITOPEDATA *orbidata, int rowid)
SCIP_RETCODE SCIPorbitopalReductionPropagate(SCIP *scip, SCIP_ORBITOPALREDDATA *orbireddata, SCIP_Bool *infeasible, int *nred, SCIP_Bool *didrun)
static void freeRowOrder(SCIP *scip, ORBITOPEDATA *orbidata, int **roworder)
SCIP_RETCODE SCIPorbitopalReductionGetStatistics(SCIP *scip, SCIP_ORBITOPALREDDATA *orbireddata, int *nred, int *ncutoff)
static SCIP_RETCODE updateColumnOrderWhenBranchingOnColumn(SCIP *scip, ORBITOPEDATA *orbidata, int *colorder, int *colorderinv, SCIP_VAR *var, COLSWAP *thiscolswap)
static SCIP_DECL_HASHKEYVAL(hashKeyValBnbnodeinfo)
static SCIP_RETCODE addOrbitope(SCIP *scip, SCIP_ORBITOPALREDDATA *orbireddata, SCIP_ROWORDERING rowordering, SCIP_COLUMNORDERING colordering, SCIP_VAR **vars, int nrows, int ncols, SCIP_Bool *success)
SCIP_RETCODE SCIPorbitopalReductionPrintStatistics(SCIP *scip, SCIP_ORBITOPALREDDATA *orbireddata)
static SCIP_Bool testColumnsAreSymmetricallyEquivalent(SCIP *scip, ORBITOPEDATA *orbidata, int col1, int col2)
static SCIP_RETCODE getColumnOrder(SCIP *scip, ORBITOPEDATA *orbidata, SCIP_NODE *eventnode, int **colorder, int **colorderinv)
static SCIP_Bool vartypeIsBranchRowType(SCIP *scip, SCIP_ORBITOPALREDDATA *orbireddata, SCIP_VARTYPE vartype)
static SCIP_DECL_HASHKEYEQ(hashKeyEqBnbnodeinfo)
SCIP_COLUMNORDERING SCIPorbitopalReductionGetDefaultColumnOrdering(SCIP_ORBITOPALREDDATA *orbireddata)
static int getArrayEntryOrIndex(int *arr, int idx)
#define DEFAULT_COLUMNORDERING
static void assertIsOrbitopeMatrix(SCIP *scip, ORBITOPEDATA *orbidata, int *roworder, int *colorder, SCIP_Real *matrix, int nrows, int ncols, int *infinitesimal, SCIP_Bool addinfinitesimals)
@ SCIP_COLUMNORDERING_CENTRE
@ SCIP_COLUMNORDERING_FIRST
@ SCIP_COLUMNORDERING_NONE
@ SCIP_COLUMNORDERING_LAST
@ SCIP_COLUMNORDERING_MEDIAN
enum SCIP_ColumnOrdering SCIP_COLUMNORDERING
@ SCIP_ROWORDERING_BRANCHING
struct SCIP_OrbitopalReductionData SCIP_ORBITOPALREDDATA
enum SCIP_RowOrdering SCIP_ROWORDERING
struct SCIP_EventData SCIP_EVENTDATA
#define SCIP_EVENTTYPE_NODEBRANCHED
enum SCIP_Retcode SCIP_RETCODE
type definitions for symmetry computations
type definitions for problem variables
@ SCIP_VARTYPE_CONTINUOUS
@ SCIP_BOUNDCHGTYPE_BRANCHING
enum SCIP_Vartype SCIP_VARTYPE
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