49 #define PRESOL_NAME "tworowbnd" 50 #define PRESOL_DESC "do bound tigthening by using two rows" 51 #define PRESOL_PRIORITY -500000 52 #define PRESOL_MAXROUNDS 0 53 #define PRESOL_TIMING SCIP_PRESOLTIMING_EXHAUSTIVE 55 #define SUPPORT_THRESHOLD 0.5 56 #define FASTMODE_THRESHOLD 1000 74 #ifdef DEBUG_WRITE_CHECK_LPS 83 int* othernonoverlapidx,
99 filemax = fopen(
"max.lp",
"wt");
100 filemin = fopen(
"min.lp",
"wt");
101 if( filemax !=
NULL && filemin !=
NULL )
103 fprintf(filemax,
"max\n\t");
104 fprintf(filemin,
"min\n\t");
106 for( i = 0; i < numoverlap; i++ )
108 if( coefbaseoverlap[i] > 0.0 )
120 fprintf(filemax,
"\ns.t.\n\t");
121 fprintf(filemin,
"\ns.t.\n\t");
123 for( i = 0; i < numoverlap; i++ )
125 if( coefotheroverlap[i] > 0.0 )
139 for( i = 0; i < nothernonolap; i++ )
141 if( coefothernonoverlap[i] > 0.0 )
152 fprintf(filemax,
" >= %.24f\n", lhs);
153 fprintf(filemin,
" >= %.24f\n", lhs);
155 fprintf(filemax,
"bounds\n");
156 fprintf(filemin,
"bounds\n");
158 for( i = 0; i < numoverlap; i++ )
162 fprintf(filemax,
"\t%.24f <= %s <= %.24f\n", lowerbds[overlapidx[i]],
164 fprintf(filemin,
"\t%.24f <= %s <= %.24f\n", lowerbds[overlapidx[i]],
179 for( i = 0; i < nothernonolap; i++ )
183 fprintf(filemax,
"\t%.24f <= %s <= %.24f\n", lowerbds[othernonoverlapidx[i]],
185 fprintf(filemin,
"\t%.24f <= %s <= %.24f\n", lowerbds[othernonoverlapidx[i]],
188 else if( !
SCIPisInfinity(scip, -lowerbds[othernonoverlapidx[i]]) )
190 fprintf(filemax,
"\t%.24f <= %s\n", lowerbds[othernonoverlapidx[i]],
192 fprintf(filemin,
"\t%.24f <= %s\n", lowerbds[othernonoverlapidx[i]],
203 fprintf(filemax,
"end\n");
204 fprintf(filemin,
"end\n");
231 int* othernonoverlapidx,
248 int nothernonoverlap;
260 #ifdef DEBUG_WRITE_CHECK_LPS 263 writeLPs(scip, matrix, otherrow, numoverlap, overlapidx, othernonoverlapidx,
264 coefbaseoverlap, coefotheroverlap, coefothernonoverlap, lowerbds, upperbds);
277 for( i = 0; i < nothernonoverlap; i++ )
279 if( coefothernonoverlap[i] < 0.0 )
288 val += coefothernonoverlap[i] * lowerbds[othernonoverlapidx[i]];
291 else if( coefothernonoverlap[i] > 0.0 )
300 val += coefothernonoverlap[i] * upperbds[othernonoverlapidx[i]];
313 for( i = 0; i < numoverlap; i++ )
315 tmplowerbds[i] = lowerbds[overlapidx[i]];
316 tmpupperbds[i] = upperbds[overlapidx[i]];
318 if( coefotheroverlap[i] > 0.0 )
322 tmp = tmplowerbds[i];
323 tmplowerbds[i] = -tmpupperbds[i];
324 tmpupperbds[i] = -tmp;
326 coefotheroverlap[i] = -coefotheroverlap[i];
327 coefbaseoverlap[i] = -coefbaseoverlap[i];
330 if( tmplowerbds[i] < minlowerbnd )
339 minlowerbnd = tmplowerbds[i];
343 if( minlowerbnd < 0.0 )
361 if( minlowerbnd < 0.0 )
363 double bndshift = -minlowerbnd;
373 for( i = 0; i < numoverlap; i++ )
375 minlhs += coefotheroverlap[i] * bndshift;
376 *minact -= coefbaseoverlap[i] * bndshift;
378 maxlhs += coefotheroverlap[i] * bndshift;
379 *maxact -= coefbaseoverlap[i] * bndshift;
381 tmplowerbds[i] += bndshift;
382 tmpupperbds[i] += bndshift;
384 assert(tmplowerbds[i] >= 0.0);
398 for( i = 0; i < numoverlap; i++ )
400 if( coefbaseoverlap[i] > 0.0 )
403 minlhs -= coefotheroverlap[i] * tmplowerbds[i];
404 *minact += coefbaseoverlap[i] * tmplowerbds[i];
409 minratios[nminratios] = coefbaseoverlap[i] / coefotheroverlap[i];
410 minsortedidx[nminratios] = i;
414 minlhs -= coefotheroverlap[i] * tmplowerbds[i];
415 *minact += coefbaseoverlap[i] * tmplowerbds[i];
424 for( i = nminratios-1; 0 <= i; i-- )
429 if( tmplowerbds[minsortedidx[i]] > 0 )
431 *minact -= coefbaseoverlap[minsortedidx[i]] * tmplowerbds[minsortedidx[i]];
432 minlhs += coefotheroverlap[minsortedidx[i]] * tmplowerbds[minsortedidx[i]];
436 tmpval = minlhs / coefotheroverlap[minsortedidx[i]];
437 if( tmpval < tmplowerbds[minsortedidx[i]] )
446 if( tmpval <= tmpupperbds[minsortedidx[i]] )
448 *minact += coefbaseoverlap[minsortedidx[i]] * tmpval;
453 *minact += coefbaseoverlap[minsortedidx[i]] * tmpupperbds[minsortedidx[i]];
454 minlhs -= coefotheroverlap[minsortedidx[i]] * tmpupperbds[minsortedidx[i]];
468 for( i = 0; i < numoverlap; i++ )
470 if( coefbaseoverlap[i] < 0.0 )
473 maxlhs -= coefotheroverlap[i] * tmplowerbds[i];
474 *maxact += coefbaseoverlap[i] * tmplowerbds[i];
479 maxratios[nmaxratios] = coefbaseoverlap[i] / coefotheroverlap[i];
480 maxsortedidx[nmaxratios] = i;
484 maxlhs -= coefotheroverlap[i] * tmplowerbds[i];
485 *maxact += coefbaseoverlap[i] * tmplowerbds[i];
494 for( i = 0; i < nmaxratios; i++ )
499 if( tmplowerbds[maxsortedidx[i]] > 0 )
501 *maxact -= coefbaseoverlap[maxsortedidx[i]] * tmplowerbds[maxsortedidx[i]];
502 maxlhs += coefotheroverlap[maxsortedidx[i]] * tmplowerbds[maxsortedidx[i]];
506 tmpval = maxlhs / coefotheroverlap[maxsortedidx[i]];
507 if( tmpval < tmplowerbds[maxsortedidx[i]] )
516 if( tmpval <= tmpupperbds[maxsortedidx[i]] )
518 *maxact += coefbaseoverlap[maxsortedidx[i]] * tmpval;
523 *maxact += coefbaseoverlap[maxsortedidx[i]] * tmpupperbds[maxsortedidx[i]];
524 maxlhs -= coefotheroverlap[maxsortedidx[i]] * tmpupperbds[maxsortedidx[i]];
534 for( i = 0; i < numoverlap; i++ )
536 if( coefbaseoverlap[i] > 0.0 )
540 *minact += coefbaseoverlap[i] * lowerbds[overlapidx[i]];
548 else if( coefbaseoverlap[i] < 0.0 )
552 *minact += coefbaseoverlap[i] * upperbds[overlapidx[i]];
563 for( i = 0; i < numoverlap; i++ )
565 if( coefbaseoverlap[i] > 0.0 )
569 *maxact += coefbaseoverlap[i] * upperbds[overlapidx[i]];
577 else if( coefbaseoverlap[i] < 0.0 )
581 *maxact += coefbaseoverlap[i] * lowerbds[overlapidx[i]];
592 #ifdef DEBUG_WRITE_CHECK_LPS 607 for(i=0; i< nvars; i++)
612 assert(numoverlap == objnonzeros);
620 assert(
SCIPisEQ(scip,minsolve,*minact));
643 assert(
SCIPisEQ(scip,maxsolve,*maxact));
670 for( i = 0; i < len; i++ )
681 infimum += coefs[i] * lowerbds[varidxs[i]];
693 infimum += coefs[i] * upperbds[varidxs[i]];
719 for( i = 0; i < len; i++ )
726 supremum += coefs[i] * lowerbds[varidxs[i]];
733 supremum += coefs[i] * upperbds[varidxs[i]];
760 for( i = 0; i < len; i++ )
768 supremum += coefs[i] * lowerbds[varidxs[i]];
773 supremum += coefs[i] * upperbds[varidxs[i]];
789 int* othernonoverlapidx,
790 int* basenonoverlapidx,
817 getActivities(scip, matrix, baserow, otherrow, numoverlap, overlapidx, othernonoverlapidx,
818 coefbaseoverlap, coefotheroverlap, coefothernonoverlap,
819 lowerbds, upperbds, tmplowerbds, tmpupperbds, minratios, maxratios,
820 minsortedidx, maxsortedidx, &minactoverlap, &maxactoverlap);
828 minactnonoverlap =
getMinActivity(scip, len, basenonoverlapidx, coefbasenonoverlap, lowerbds, upperbds);
831 if(
SCIPisGE(scip, minactoverlap + minactnonoverlap, lhs) )
833 if( !deletecons[baserow] )
836 deletecons[baserow] =
TRUE;
849 maxactnonoverlap =
getMaxActivity(scip, len, basenonoverlapidx, coefbasenonoverlap, lowerbds, upperbds, &infcnt);
852 for( i = 0; i < len; i++ )
854 if( coefbasenonoverlap[i] < 0.0 )
857 tmpsup = maxactnonoverlap - (coefbasenonoverlap[i] * lowerbds[basenonoverlapidx[i]]);
858 bnd = (lhs - (tmpsup + maxactoverlap)) / coefbasenonoverlap[i];
859 if( bnd < upperbds[basenonoverlapidx[i]] )
861 upperbds[basenonoverlapidx[i]] = bnd;
862 if( tighten[basenonoverlapidx[i]] !=
UPPERBOUND && tighten[basenonoverlapidx[i]] !=
BOTHBOUNDS )
865 if( tighten[basenonoverlapidx[i]] ==
LOWERBOUND )
875 tmpsup = maxactnonoverlap - (coefbasenonoverlap[i] * upperbds[basenonoverlapidx[i]]);
876 bnd = (lhs - (tmpsup + maxactoverlap)) / coefbasenonoverlap[i];
877 if( bnd > lowerbds[basenonoverlapidx[i]] )
879 lowerbds[basenonoverlapidx[i]] = bnd;
880 if( tighten[basenonoverlapidx[i]] !=
LOWERBOUND && tighten[basenonoverlapidx[i]] !=
BOTHBOUNDS )
883 if( tighten[basenonoverlapidx[i]] ==
UPPERBOUND )
898 for( i = 0; i < len; i++ )
900 if( coefbasenonoverlap[i] < 0.0 )
905 tmpsup =
getMaxResActivity(scip, len, basenonoverlapidx, coefbasenonoverlap, lowerbds, upperbds, i);
907 bnd = (lhs - (tmpsup + maxactoverlap)) / coefbasenonoverlap[i];
908 if( bnd < upperbds[basenonoverlapidx[i]] )
910 upperbds[basenonoverlapidx[i]] = bnd;
911 if( tighten[basenonoverlapidx[i]] !=
UPPERBOUND && tighten[basenonoverlapidx[i]] !=
BOTHBOUNDS )
914 if( tighten[basenonoverlapidx[i]] ==
LOWERBOUND )
924 if( infcnt == 1 &&
SCIPisInfinity(scip, upperbds[basenonoverlapidx[i]]) )
927 tmpsup =
getMaxResActivity(scip, len, basenonoverlapidx, coefbasenonoverlap, lowerbds, upperbds, i);
929 bnd = (lhs - (tmpsup + maxactoverlap)) / coefbasenonoverlap[i];
930 if( bnd > lowerbds[basenonoverlapidx[i]] )
932 lowerbds[basenonoverlapidx[i]] = bnd;
933 if( tighten[basenonoverlapidx[i]] !=
LOWERBOUND && tighten[basenonoverlapidx[i]] !=
BOTHBOUNDS )
936 if( tighten[basenonoverlapidx[i]] ==
UPPERBOUND )
958 int* olapidxbaseorder,
959 int* olapidxotherorder,
960 int* othernonoverlapidx,
961 int* basenonoverlapidx,
979 assert(baserowcnt != 0 && otherrowcnt != 0);
985 olapidxbaseorder[numoverlap] = -1;
986 olapidxotherorder[numoverlap] = -1;
997 rowend = rowpnt + baserowcnt;
1000 for( ; rowpnt < rowend; rowpnt++, valpnt++ )
1002 if( olapidxbaseorder[olapcnt] == *rowpnt )
1004 coefbaseoverlap[olapcnt] = *valpnt;
1009 basenonoverlapidx[nonolapcnt] = *rowpnt;
1010 coefbasenonoverlap[nonolapcnt] = *valpnt;
1015 assert(olapcnt+nonolapcnt == baserowcnt);
1016 assert(olapcnt == numoverlap);
1017 assert(nonolapcnt > 0);
1026 rowend = rowpnt + otherrowcnt;
1029 for( ; rowpnt < rowend; rowpnt++, valpnt++ )
1031 if( olapidxotherorder[olapcnt] == *rowpnt )
1033 coefotheroverlap[olapcnt] = *valpnt;
1038 othernonoverlapidx[nonolapcnt] = *rowpnt;
1039 coefothernonoverlap[nonolapcnt] = *valpnt;
1044 assert(olapcnt+nonolapcnt == otherrowcnt);
1045 assert(olapcnt == numoverlap);
1058 int* olapidxotherorder
1074 if( baserowcnt == 0 || otherrowcnt == 0 )
1076 *numoverlap = noverlap;
1082 rowend = rowpnt + baserowcnt;
1083 for( ; rowpnt < rowend; rowpnt++ )
1085 countings[*rowpnt] = 1;
1086 clearinfo[nclear] = *rowpnt;
1091 rowend = rowpnt + otherrowcnt;
1092 for( ; rowpnt < rowend; rowpnt++ )
1094 if( countings[*rowpnt] == 1 )
1097 olapidxotherorder[noverlap] = *rowpnt;
1102 for( i = 0; i < nclear; i++ )
1103 countings[clearinfo[i]] = 0;
1105 *numoverlap = noverlap;
1117 int* olapidxbaseorder
1136 rowend = rowpnt + otherrowcnt;
1137 for( ; rowpnt < rowend; rowpnt++ )
1139 countings[*rowpnt] = 1;
1140 clearinfo[nclear] = *rowpnt;
1145 rowend = rowpnt + baserowcnt;
1146 for( ; rowpnt < rowend; rowpnt++ )
1148 if( countings[*rowpnt] == 1 )
1151 olapidxbaseorder[noverlap] = *rowpnt;
1156 for( i = 0; i < nclear; i++ )
1157 countings[clearinfo[i]] = 0;
1159 assert(noverlap == numoverlap);
1187 int* olapidxbaseorder;
1188 int* olapidxotherorder;
1193 int* othernonoverlapidx;
1194 int* basenonoverlapidx;
1241 usefastmode =
FALSE;
1243 for( br = 0; br < nbaserows; br++ )
1252 rowend = rowpnt + rowcnt;
1254 for( ; (rowpnt < rowend); rowpnt++ )
1259 colend = colpnt + colcnt;
1260 for( ; (colpnt < colend); colpnt++ )
1262 if( *colpnt == baserows[br] || ignorerow[*colpnt] )
1271 countings, clearinfo, &numoverlap, olapidxotherorder);
1273 if( numoverlap == 0 )
1283 countings, clearinfo, numoverlap, olapidxbaseorder);
1286 olapidxbaseorder, olapidxotherorder, othernonoverlapidx, basenonoverlapidx,
1287 coefbaseoverlap, coefotheroverlap, coefbasenonoverlap, coefothernonoverlap);
1289 applyTightening(scip, matrix, baserows[br], *colpnt, numoverlap, olapidxotherorder,
1290 othernonoverlapidx, basenonoverlapidx,
1291 coefbaseoverlap, coefotheroverlap, coefbasenonoverlap, coefothernonoverlap,
1292 lowerbds, upperbds, tmplowerbds, tmpupperbds, minratios, maxratios,
1293 minsortedidx, maxsortedidx, ntightenbnds, tighten, ndeletecons, deletecons);
1296 ignorerow[*colpnt] =
TRUE;
1297 ignorerowidx[ignorerowcnt] = *colpnt;
1308 for( i = 0; i < ignorerowcnt; i++ )
1309 ignorerow[ignorerowidx[i]] =
FALSE;
1347 assert(scip !=
NULL);
1348 assert(matrix !=
NULL);
1349 assert(nbaserows !=
NULL);
1350 assert(baserows !=
NULL);
1355 for( r = 0; r < nrows; r++ )
1381 assert(scip !=
NULL);
1382 assert(matrix !=
NULL);
1383 assert(lowerbds !=
NULL);
1384 assert(upperbds !=
NULL);
1388 for( c = 0; c < ncols; c++ )
1406 assert(presol !=
NULL);
1423 assert(result !=
NULL);
1437 if( initialized && complete )
1471 nbaserows, baserows, lowerbds, upperbds,
1472 &ntightenbnds, tighten, &ndeletecons, deletecons) );
1474 if( ntightenbnds > 0 )
1481 for( c = 0; c < ncols; c++ )
1510 if( ndeletecons > 0 )
1513 for( r = 0; r < nrows; r++ )
void SCIPsortRealInt(SCIP_Real *realarray, int *intarray, int len)
SCIP_RETCODE SCIPincludePresolBasic(SCIP *scip, SCIP_PRESOL **presolptr, const char *name, const char *desc, int priority, int maxrounds, SCIP_PRESOLTIMING timing, SCIP_DECL_PRESOLEXEC((*presolexec)), SCIP_PRESOLDATA *presoldata)
void SCIPmatrixPrintRow(SCIP *scip, SCIP_MATRIX *matrix, int row)
SCIP_VAR * SCIPmatrixGetVar(SCIP_MATRIX *matrix, int col)
SCIP_RETCODE SCIPtightenVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
int SCIPmatrixGetNRows(SCIP_MATRIX *matrix)
enum Bndchgtype BNDCHGTYPE
SCIP_STAGE SCIPgetStage(SCIP *scip)
static void getActivities(SCIP *scip, SCIP_MATRIX *matrix, int baserow, int otherrow, int numoverlap, int *overlapidx, int *othernonoverlapidx, SCIP_Real *coefbaseoverlap, SCIP_Real *coefotheroverlap, SCIP_Real *coefothernonoverlap, SCIP_Real *lowerbds, SCIP_Real *upperbds, SCIP_Real *tmplowerbds, SCIP_Real *tmpupperbds, SCIP_Real *minratios, SCIP_Real *maxratios, int *minsortedidx, int *maxsortedidx, SCIP_Real *minact, SCIP_Real *maxact)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_CONS * SCIPmatrixGetCons(SCIP_MATRIX *matrix, int row)
SCIP_RETCODE SCIPdelCons(SCIP *scip, SCIP_CONS *cons)
static void getOverlapBaseOrdered(SCIP *scip, SCIP_MATRIX *matrix, int baserow, int otherrow, int *countings, int *clearinfo, int numoverlap, int *olapidxbaseorder)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
static SCIP_DECL_PRESOLEXEC(presolExecTworowbnd)
SCIP_RETCODE SCIPincludePresolTworowbnd(SCIP *scip)
void SCIPmatrixFree(SCIP *scip, SCIP_MATRIX **matrix)
static SCIP_Real getMaxResActivity(SCIP *scip, int len, int *varidxs, SCIP_Real *coefs, SCIP_Real *lowerbds, SCIP_Real *upperbds, int idx)
int SCIPgetNActivePricers(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
enum SCIP_Retcode SCIP_RETCODE
static SCIP_RETCODE calcTwoRowBnds(SCIP *scip, SCIP_MATRIX *matrix, int nbaserows, int *baserows, SCIP_Real *lowerbds, SCIP_Real *upperbds, int *ntightenbnds, BNDCHGTYPE *tighten, int *ndeletecons, SCIP_Bool *deletecons)
SCIP_RETCODE SCIPtightenVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
#define SCIPfreeBufferArray(scip, ptr)
static SCIP_DECL_PRESOLCOPY(presolCopyTworowbnd)
SCIP_RETCODE SCIPcreate(SCIP **scip)
SCIP_RETCODE SCIPmatrixCreate(SCIP *scip, SCIP_MATRIX **matrixptr, SCIP_Bool *initialized, SCIP_Bool *complete)
int SCIPmatrixGetRowNNonzs(SCIP_MATRIX *matrix, int row)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_Real SCIPmatrixGetRowLhs(SCIP_MATRIX *matrix, int row)
SCIP_RETCODE SCIPsolve(SCIP *scip)
SCIP_RETCODE SCIPreadProb(SCIP *scip, const char *filename, const char *extension)
SCIP_STATUS SCIPgetStatus(SCIP *scip)
static void getNumOverlap(SCIP *scip, SCIP_MATRIX *matrix, int baserow, int otherrow, int *countings, int *clearinfo, int *numoverlap, int *olapidxotherorder)
int * SCIPmatrixGetRowIdxPtr(SCIP_MATRIX *matrix, int row)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Bool SCIPisNLPEnabled(SCIP *scip)
SCIP_Real * SCIPmatrixGetRowValPtr(SCIP_MATRIX *matrix, int row)
#define SUPPORT_THRESHOLD
#define SCIPallocBufferArray(scip, ptr, num)
SCIP_RETCODE SCIPincludeDefaultPlugins(SCIP *scip)
enum SCIP_Status SCIP_STATUS
int * SCIPmatrixGetColIdxPtr(SCIP_MATRIX *matrix, int col)
SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
const char * SCIPpresolGetName(SCIP_PRESOL *presol)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
#define FASTMODE_THRESHOLD
SCIP_Real SCIPgetSolOrigObj(SCIP *scip, SCIP_SOL *sol)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
public methods for matrix
SCIP_Bool SCIPinProbing(SCIP *scip)
do bound tightening by using two rows
int SCIPgetNVars(SCIP *scip)
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
SCIP_Bool SCIPmatrixIsRowRhsInfinity(SCIP_MATRIX *matrix, int row)
SCIP_RETCODE SCIPsetPresolCopy(SCIP *scip, SCIP_PRESOL *presol, SCIP_DECL_PRESOLCOPY((*presolcopy)))
static void getCoefficients(SCIP *scip, SCIP_MATRIX *matrix, int baserow, int otherrow, int numoverlap, int *olapidxbaseorder, int *olapidxotherorder, int *othernonoverlapidx, int *basenonoverlapidx, SCIP_Real *coefbaseoverlap, SCIP_Real *coefotheroverlap, SCIP_Real *coefbasenonoverlap, SCIP_Real *coefothernonoverlap)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
static SCIP_RETCODE getBaseRows(SCIP *scip, SCIP_MATRIX *matrix, int *nbaserows, int *baserows)
static void applyTightening(SCIP *scip, SCIP_MATRIX *matrix, int baserow, int otherrow, int numoverlap, int *overlapidx, int *othernonoverlapidx, int *basenonoverlapidx, SCIP_Real *coefbaseoverlap, SCIP_Real *coefotheroverlap, SCIP_Real *coefbasenonoverlap, SCIP_Real *coefothernonoverlap, SCIP_Real *lowerbds, SCIP_Real *upperbds, SCIP_Real *tmplowerbds, SCIP_Real *tmpupperbds, SCIP_Real *minratios, SCIP_Real *maxratios, int *minsortedidx, int *maxsortedidx, int *ntightenbnds, BNDCHGTYPE *tighten, int *ndeletecons, SCIP_Bool *deletecons)
SCIP_Bool SCIPisStopped(SCIP *scip)
#define BMSclearMemoryArray(ptr, num)
#define SCIP_CALL_ABORT(x)
int SCIPmatrixGetNColumns(SCIP_MATRIX *matrix)
static void getBounds(SCIP *scip, SCIP_MATRIX *matrix, SCIP_Real *lowerbds, SCIP_Real *upperbds)
static SCIP_Real getMaxActivity(SCIP *scip, int len, int *varidxs, SCIP_Real *coefs, SCIP_Real *lowerbds, SCIP_Real *upperbds, int *infcnt)
SCIP_RETCODE SCIPfree(SCIP **scip)
static SCIP_Real getMinActivity(SCIP *scip, int len, int *varidxs, SCIP_Real *coefs, SCIP_Real *lowerbds, SCIP_Real *upperbds)
int SCIPmatrixGetColNNonzs(SCIP_MATRIX *matrix, int col)