87#define BOUNDSWITCH 0.51
88#define POSTPROCESS FALSE
90#define FIXINTEGRALRHS FALSE
110 targetsize = sourcerow->
nnz;
121 (*targetrow)->lhs = sourcerow->
lhs;
122 (*targetrow)->slack = sourcerow->
slack;
124 (*targetrow)->nvars =
nvars;
125 (*targetrow)->nnz = targetsize;
126 (*targetrow)->size = targetsize;
127 (*targetrow)->validdepth = sourcerow->
validdepth;
129 (*targetrow)->repropdepth = sourcerow->
repropdepth;
130 (*targetrow)->insertdepth = sourcerow->
insertdepth;
132 (*targetrow)->isbinary = sourcerow->
isbinary;
154 sourcennzs = sourcerow->
nnz;
155 targetsize = targetrow->
size;
158 if( targetsize < sourcennzs )
165 targetrow->
lhs = sourcerow->
lhs;
169 targetrow->
nnz = sourcennzs;
170 targetrow->
size =
MAX(sourcennzs, targetsize);
201 assert(num <= conflict->conflictrowssize);
221 (*conflictrow)->validdepth, (*conflictrow)->conflictdepth, (*conflictrow)->repropdepth);
289 REDUCED_REASON_ROWTYPE,
290 RESOLVED_CONFLICT_ROWTYPE,
291 CONTINUOUS_REASON_ROWTYPE
296void printConflictRow(
311 case CONFLICT_ROWTYPE:
314 case RESOLVED_CONFLICT_ROWTYPE:
320 case REDUCED_REASON_ROWTYPE:
323 case CONTINUOUS_REASON_ROWTYPE:
329 for(
i = 0;
i < row->
nnz;
i++ )
340 if ((
i + 1) % 5 == 0)
372 for(
i = 0;
i < aggrrow->
nnz;
i++ )
387void printSingleBoundChange(
394 SCIPsetDebugMsgPrint(
set,
" \t -> Bound change <%s> %s %.15g [status:%d, type:%d, depth:%d, pos:%d, reason:<%s>, global bounds:[%.15g,%.15g], local bounds:[%.15g,%.15g]] \n",
410void printAllBoundChanges(
425 SCIPsetDebugMsgPrint(
set,
"Bound changes in %s bound change queue: \n", continuousbdchgqueue ?
"continuous" :
"resolution");
437 SCIPsetDebugMsgPrint(
set,
" \t -> Bound change %d: <%s> %s %.15g [status:%d, type:%d, depth:%d, pos:%d, reason:<%s>, global bounds:[%.15g,%.15g], local bounds:[%.15g,%.15g]] \n",
456void printNonResolvableReasonType(
498 maxsize =
MAX(maxsize,
set->conf_minmaxvars);
535 if( redundant !=
NULL )
539 for(
i = 0;
i < *rownnz; ++
i )
552 if( rowcoefs[coefidx] > 0.0 )
557 goto TERMINATE_TIGHTENING;
559 if( idx < nintegralvars )
561 maxabsval =
MAX(maxabsval, rowcoefs[coefidx]);
562 absvals[
i] = rowcoefs[coefidx];
574 goto TERMINATE_TIGHTENING;
576 if( idx < nintegralvars )
578 maxabsval =
MAX(maxabsval, -rowcoefs[coefidx]);
579 absvals[
i] = -rowcoefs[coefidx];
593 if( redundant !=
NULL )
595 goto TERMINATE_TIGHTENING;
600 goto TERMINATE_TIGHTENING;
610 goto TERMINATE_TIGHTENING;
617 for(
i = 0;
i < *rownnz; ++
i )
631 if( idx >= nintegralvars )
636 if( rowcoefs[coefidx] < 0.0 &&
SCIPsetIsGE(
set, minact - rowcoefs[coefidx], *rowlhs) )
644 if( newcoef > rowcoefs[coefidx] )
653 SCIPdebugPrintf(
"tightened coefficient from %g to %g; lhs changed from %g to %g; the bounds are [%g,%g]\n",
654 rowcoefs[coefidx], newcoef, (*rowlhs),
QUAD_TO_DBL(newlhs),
665 rowcoefs[coefidx] = newcoef;
670 rowcoefs[coefidx] = 0.0;
671 rowinds[
i] = rowinds[*rownnz];
676 else if( rowcoefs[coefidx] > 0.0 &&
SCIPsetIsGE(
set, minact + rowcoefs[coefidx], *rowlhs) )
684 if( newcoef < rowcoefs[coefidx] )
693 SCIPdebugPrintf(
"tightened coefficient from %g to %g; lhs changed from %g to %g; the bounds are [%g,%g]\n",
694 rowcoefs[coefidx], newcoef, (*rowlhs),
QUAD_TO_DBL(newlhs), lb,
705 rowcoefs[coefidx] = newcoef;
710 rowcoefs[coefidx] = 0.0;
711 rowinds[
i] = rowinds[*rownnz];
720 TERMINATE_TIGHTENING:
740 for(
i = 0;
i < row->
nnz; ++
i )
767 for(
i = 0;
i < row->
nnz; ++
i )
790 idx = row->
inds[pos];
793 assert(pos >= 0 && pos < row->nnz);
797 row->
vals[idx] = 0.0;
810 for(
int i = row->
nnz - 1;
i >= 0; --
i )
874 if( resvarcoef < 0.0 )
889 for(
int i = 0;
i < reasonrow->
nnz; ++
i )
907 deltaoldlhs += -coef;
910 oldlhs = reasonrow->
lhs;
911 newlhs = (oldlhs + deltaoldlhs) / divisor;
914 if( fraclhs < MINFRAC || fraclhs >
MAXFRAC )
916 reasonrow->
vals[idxreason] = resvarcoef;
922 for(
int i = 0;
i < reasonrow->
nnz; ++
i )
940 if( (1.0 - fraccoef) >= fraclhs )
945 deltanewlhs += newcoef;
952 deltanewlhs += newcoef;
957 if( fraccoef >= fraclhs )
965 reasonrow->
lhs = newlhs;
990 for(
i = 0;
i < row2->
nnz; ++
i )
998 row1->
vals[idx] = scale * row2->
vals[idx];
1002 row1->
vals[idx] = row1->
vals[idx] + scale * row2->
vals[idx];
1004 row1->
lhs = row1->
lhs + scale * row2->
lhs;
1018 const char* conshdlrname;
1033 if( strcmp(conshdlrname,
"nonlinear") == 0 )
1080 else if( conflictrow->
nnz == 0 )
1166 if( !
set->conf_enable || !
set->conf_usegenres )
1182 (*row)->vals =
NULL;
1183 (*row)->inds =
NULL;
1185 (*row)->slack = 0.0;
1186 (*row)->coefquotient = 0.0;
1190 (*row)->validdepth = 0;
1191 (*row)->conflictdepth = 0;
1192 (*row)->repropdepth = 0;
1193 (*row)->insertdepth = 0;
1194 (*row)->usescutoffbound =
FALSE;
1195 (*row)->isbinary =
FALSE;
1306#ifdef SCIP_MORE_DEBUG
1310 if( currbdchginfo ==
NULL )
1311 currbdchgidx =
NULL;
1314 for(
i = 0;
i < row->
nnz;
i++ )
1324 coef = row->
vals[v];
1329 if( fixsides !=
NULL && fixsides[v] == 1 )
1332 bound = fixbounds[v];
1342 if( fixsides !=
NULL && fixsides[v] == -1 )
1345 bound = fixbounds[v];
1354#ifdef SCIP_MORE_DEBUG
1355 SCIPsetDebugMsgPrint(
set,
"var: %s, coef: %f, bound: %f global bounds:[%.15g,%.15g], current bounds:[%.15g,%.15g] \n",
1358 currbdchgidx,
TRUE));
1363#ifdef SCIP_MORE_DEBUG
1432 rowrhs = -reasonrow->
lhs;
1433 rownnz = reasonrow->
nnz;
1434 for(
int i = 0;
i < rownnz; ++
i )
1438 idx = reasonrow->
inds[
i];
1439 coef = reasonrow->
vals[idx];
1452 fracval =
MIN(fracval, bnd);
1459 fracval =
MAX(fracval, bnd);
1481 MINFRAC,
MAXFRAC, 1.0, aggrrow, cutcoefs, &cutrhs, cutinds, &cutnnz,
NULL,
NULL, &cutislocal, &success) );
1487 reasonrow->
nnz = cutnnz;
1488 reasonrow->
lhs = -cutrhs;
1489 for(
int i = 0;
i < cutnnz; ++
i )
1491 reasonrow->
inds[
i] = cutinds[
i];
1492 reasonrow->
vals[cutinds[
i]] = -cutcoefs[
i];
1525 idx = row->
inds[pos];
1537 row->
vals[idx] = 0.0;
1561 for(
i = row->
nnz - 1;
i >= 0; --
i )
1567 vartoweaken =
vars[idx];
1569 if( row->
vals[idx] > 0.0 )
1595 SCIPdebugMessage(
"weakened %d variables in the conflict row \n", nvarsweakened);
1616 for(
i = row->
nnz - 1;
i >= 0; --
i )
1622 vartoweaken =
vars[idx];
1639 SCIPdebugMessage(
"weakened %d continuous variables in the row \n", nvarsweakened);
1666 for(
i = 0;
i < nnz;
i++ )
1670 minval =
MIN(minval, vals[idx]);
1671 maxval =
MAX(maxval, vals[idx]);
1673 return REALABS(maxval / minval);
1690 for(
i = 0;
i < conflictrow->
nnz;
i++ )
1694 v = conflictrow->
inds[
i];
1698 coef = conflictrow->
vals[v];
1755 for(
i = 0;
i < row->
nnz;
i++ )
1767 coef = row->
vals[v];
1772 if( bdchginfo !=
NULL )
1782 if( bdchginfo !=
NULL )
1836 if( insertdepth > 0 )
1845 conflictlength = conflictrow->
nnz;
1849 for(
i = 0;
i < conflictlength;
i++ )
1859 idx = conflictrow->
inds[
i];
1916 lhs = conflictrow->
lhs;
1918 for(
i = 0;
i < conflictrow->
nnz; ++
i )
1921 idx = conflictrow->
inds[
i];
1923 consvars[
i] =
vars[idx];
1924 vals[
i] = conflictrow->
vals[idx];
1935 if( upgdcons !=
NULL )
2000 SCIPsetDebugMsgPrint(
set,
"flushing conflict constraint at focus depth %d (id: %d, vd: %d, cd: %d, rd: %d, maxsize: %d)\n",
2006 if( conflictrow->
nnz > maxsize )
2016 SCIPsetDebugMsgPrint(
set,
" \t -> empty conflict row with lhs %f in depth %d cuts off sub tree at depth %d\n",
2036 idx = conflictrow->
inds[0];
2073 reopt, lp, branchcand, eventqueue, eventfilter, cliquetable,
var,
bound, boundtype,
FALSE) );
2084 tree, reopt, lp, cliquetable, conflictrow, conflictrow->
insertdepth, success) );
2086 SCIPsetDebugMsgPrint(
set,
" \t -> conflict row added (cdpt:%d, fdpt:%d, insert:%d, valid:%d, conf: %d, reprop: %d, len:%d):\n",
2119 if( resolutionrow->
size == 0 )
2124 resolutionrow->
size = nnz;
2131 if( resolutionrow->
size < nnz )
2134 resolutionrow->
size = nnz;
2140 for(
i = 0;
i < nnz;
i++ )
2143 resolutionrow->
vals[idx] = -vals[
i];
2144 resolutionrow->
inds[
i] = inds[
i];
2149 for(
i = 0;
i < nnz;
i++ )
2152 resolutionrow->
vals[idx] = vals[
i];
2153 resolutionrow->
inds[
i] = inds[
i];
2157 resolutionrow->
lhs = lhs;
2158 resolutionrow->
nnz = nnz;
2176 coefconf = conflictrow->
vals[residx];
2177 coefreas = reasonrow->
vals[residx];
2180 assert(coefconf * coefreas < 0);
2182 scale =
REALABS( coefconf / coefreas );
2223 newsize = resolvedrow->
nnz + row2->
nnz;
2224 if( resolvedrow->
size < newsize )
2230 resolvedrow->
size = newsize;
2236 newnnz = resolvedrow->
nnz;
2241 for(
i = newnnz - 1;
i >= 0 ;
i-- )
2244 idx = resolvedrow->
inds[
i];
2247 smallestcoef =
MIN(smallestcoef, resolvedrow->
vals[idx]);
2248 largestcoef =
MAX(largestcoef, resolvedrow->
vals[idx]);
2254 resolvedrow->
coefquotient = (resolvedrow->
nnz > 0) ? fabs(largestcoef / smallestcoef) : 0.0;
2258 SCIPsetDebugMsgPrint(
set,
"Quotient %f exceeds max allowed quotient", (resolvedrow->
nnz > 0) ? fabs(largestcoef / smallestcoef) : 0.0);
2287 coefinrow = fabs(rowtoreduce->
vals[residx]);
2299 SCIPdebug(printConflictRow(rowtoreduce,
set,
vars, REDUCED_REASON_ROWTYPE));
2346 for(
i = 0;
i < nnz;
i++ )
2435 for(
i = 0;
i < nnz;
i++ )
2512 if( reasonlprow ==
NULL )
2551 coef = reasonrow->
vals[residx];
2598 if( initialconflictrow !=
NULL )
2604 if( conflictrow->
nnz > maxsize )
2612 if( conflictrow->
nnz > maxsize )
2636 if( conflictrow->
nnz > maxsize )
2677 *successresolution =
FALSE;
2685 residx, successresolution) );
2687 if( !(*successresolution) )
2693 if(
set->conf_reduction ==
'o' )
2708 residx, successresolution) );
2710 if( !(*successresolution) )
2725 coefresidx = reducedreasonrow->
vals[residx];
2743 if( nresconts > maxsize / 2 || reducedreasonrow->
nnz > maxsize )
2745 (*successresolution) =
FALSE;
2758 &successgetreason) );
2759 if( !successgetreason )
2761 (*successresolution) =
FALSE;
2765 SCIPdebug(printConflictRow(reasonrow,
set,
vars, CONTINUOUS_REASON_ROWTYPE));
2771 varidx, successresolution) );
2773 if( !(*successresolution) )
2789 SCIPdebug(printConflictRow(reducedreasonrow,
set,
vars, REDUCED_REASON_ROWTYPE));
2805 residx, successresolution) );
2825 int* currbdchgdepth,
2862 if( fixsides[
varidx] != 0 )
2881 if( nressteps == 0 )
2895 else if( !
set->conf_fixandcontinue )
2930 for(
i = 0;
i < nconstoadd;
i++ )
2942 lp, branchcand, eventqueue, eventfilter, cliquetable, conflictrowtoadd, &success) );
2946 (*nconfvars) += conflictrowtoadd->
nnz;
3048 if( bdchginfo !=
NULL )
3049 printAllBoundChanges(conflict,
set,
FALSE);
3071 if( !successgetconflict )
3082 &conflictrow->
nnz, &conflictrow->
lhs, &nchgcoefs,
NULL) );
3135 printSingleBoundChange(
set, bdchginfo);
3136 printAllBoundChanges(conflict,
set,
FALSE);
3145 printNonResolvableReasonType(
set, bdchginfo);
3148 fixbounds, fixsides, &successfixing) );
3149 if( !successfixing )
3150 goto TERMINATE_RESOLUTION_LOOP;
3171 &successgetreason) );
3172 if( !successgetreason )
3175 goto TERMINATE_RESOLUTION_LOOP;
3181 successresolution =
FALSE;
3188 if( successresolution )
3191 goto TERMINATE_RESOLUTION_LOOP;
3199 if( conflictrow->
nnz > maxsize )
3202 conflictrow->
nnz, maxsize);
3204 if( conflictrow->
nnz > maxsize )
3207 goto TERMINATE_RESOLUTION_LOOP;
3211 oldslack = conflictrow->
slack;
3219 SCIPdebug(printConflictRow(conflictrow,
set,
vars, RESOLVED_CONFLICT_ROWTYPE));
3229 goto TERMINATE_RESOLUTION_LOOP;
3235 &conflictrow->
nnz, &conflictrow->
lhs, &nchgcoefs,
NULL) );
3244 previousslack = conflictrow->
slack;
3246 SCIPsetDebugMsgPrint(
set,
"Tightened %d coefficients in the resolved constraint, old slack %f, new slack %f \n", nchgcoefs, previousslack, conflictrow->
slack);
3261 if( bdchginfo ==
NULL )
3274 goto TERMINATE_RESOLUTION_LOOP;
3307 lastuipdepth = bdchgdepth;
3310 if(
set->conf_resfuiplevels > 0 && nfuips >=
set->conf_resfuiplevels )
3311 goto TERMINATE_RESOLUTION_LOOP;
3316 TERMINATE_RESOLUTION_LOOP:
3324 SCIP_CALL(
addConflictRows(conflict, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
3325 eventfilter, cliquetable, nconstoadd, nconss, nconfvars) );
3368 if( success !=
NULL )
3371 SCIPsetDebugMsgPrint(
set,
"Starting resolution based conflict analysis after infeasible propagation in depth %d\n",
3383 SCIP_CALL(
conflictAnalyzeResolution(conflict, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
3384 eventfilter, cliquetable, initialconflictrow, validdepth, &nconss, &nconfvars) );
3390 if( success !=
NULL )
3391 *success = (nconss > 0);
void SCIPclockStop(SCIP_CLOCK *clck, SCIP_SET *set)
void SCIPclockStart(SCIP_CLOCK *clck, SCIP_SET *set)
internal methods for clocks and timing issues
internal methods for conflict analysis
static void conflictRowRemoveZeroVars(SCIP_CONFLICTROW *row, SCIP_SET *set)
static SCIP_RETCODE conflictEnsureConflictRowsMem(SCIP_CONFLICT *conflict, SCIP_SET *set, int num)
static SCIP_Real getQuotLargestSmallestCoef(SCIP_SET *set, int *inds, SCIP_Real *vals, int nnz)
static void conflictRowClear(BMS_BLKMEM *blkmem, SCIP_CONFLICTROW *row, int nvars)
static SCIP_RETCODE updateStatistics(SCIP_CONFLICT *conflict, SCIP_VAR **vars, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONFLICTROW *conflictrow, int insertdepth)
static void weakenConflictRow(SCIP_CONFLICTROW *row, SCIP_SET *set, SCIP_VAR **vars, SCIP_BDCHGIDX *currbdchgidx, int *fixsides)
static void weakenVarConflictRow(SCIP_CONFLICTROW *row, SCIP_SET *set, SCIP_VAR *var, int pos)
static SCIP_RETCODE conflictInsertConflictRow(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_CONFLICTROW **conflictrow)
static SCIP_Bool isBdchgConflictRelevant(SCIP_CONFLICT *conflict, SCIP_BDCHGINFO *bdchginfo, int initial)
void SCIPconflictRowFree(SCIP_CONFLICTROW **row, BMS_BLKMEM *blkmem)
static void linearCombRows(SCIP_SET *set, SCIP_CONFLICTROW *row1, SCIP_CONFLICTROW *row2, SCIP_Real scale)
static SCIP_Real computeScaleReason(SCIP_SET *set, SCIP_CONFLICTROW *conflictrow, SCIP_CONFLICTROW *reasonrow, int residx)
SCIP_RETCODE SCIPconflictAddConflictCon(SCIP_CONFLICT *conflict, 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_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_CONFLICTROW *conflictrow, SCIP_Bool *success)
static int conflictCalcResMaxsize(SCIP_SET *set, SCIP_PROB *prob)
static SCIP_RETCODE updateBdchgQueue(SCIP_SET *set, SCIP_VAR **vars, SCIP_CONFLICTROW *conflictrow, SCIP_BDCHGIDX *inferbdchgidx)
static SCIP_Bool isResolvableBdchg(SCIP_BDCHGINFO *bdchginfo)
static SCIP_Bool existsResolvablebdchginfo(SCIP_CONFLICT *conflict)
static SCIP_RETCODE weakenContinuousVarsConflictRow(SCIP_CONFLICTROW *row, SCIP_SET *set, SCIP_VAR **vars, int residx)
SCIP_RETCODE conflictAnalyzeResolution(SCIP_CONFLICT *conflict, 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_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_ROW *initialconflictrow, int validdepth, int *nconss, int *nconfvars)
SCIP_Longint SCIPconflictGetNResConflictConss(SCIP_CONFLICT *conflict)
static void conflictRowRemoveZeroVar(SCIP_CONFLICTROW *row, SCIP_SET *set, int pos)
static SCIP_RETCODE conflictRowReplace(SCIP_CONFLICTROW *targetrow, BMS_BLKMEM *blkmem, SCIP_CONFLICTROW *sourcerow)
static SCIP_BDCHGINFO * conflictFirstCand(SCIP_SET *set, SCIP_CONFLICT *conflict, int initial)
SCIP_Longint SCIPconflictGetNResLargeCoefs(SCIP_CONFLICT *conflict)
static SCIP_RETCODE addConflictRows(SCIP_CONFLICT *conflict, 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_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, int nconstoadd, int *nconss, int *nconfvars)
static SCIP_RETCODE MirReduction(SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_VAR **vars, int nvars, SCIP_CONFLICTROW *reasonrow, SCIP_BDCHGINFO *currbdchginfo, int varidx, SCIP_Real divisor)
static SCIP_RETCODE getReasonRow(BMS_BLKMEM *blkmem, SCIP_VAR **vars, SCIP_SET *set, SCIP_BDCHGINFO *currbdchginfo, SCIP_CONFLICTROW *reasonrow, int residx, SCIP_Real *fixbounds, int *fixsides, SCIP_Bool *success)
static SCIP_RETCODE conflictRowFromLpRow(SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_CONFLICTROW *conflictrow, SCIP_BDCHGINFO *bdchginfo)
SCIP_Longint SCIPconflictGetNResSuccess(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNResCalls(SCIP_CONFLICT *conflict)
static SCIP_Bool hasRelaxationOnlyVar(SCIP_SET *set, SCIP_VAR **vars, SCIP_CONFLICTROW *row)
static SCIP_RETCODE conflictRowAddSemiSparseData(SCIP_CONFLICTROW *resolutionrow, BMS_BLKMEM *blkmem, SCIP_Real *vals, int *inds, int nnz, SCIP_Real lhs, SCIP_Bool reverse)
SCIP_RETCODE SCIPconflictInitRows(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem)
static SCIP_RETCODE getConflictRow(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_ROW *initialconflictrow, SCIP_BDCHGINFO *currbdchginfo, int maxsize, SCIP_Bool *success)
static SCIP_RETCODE ComplementedMirLhs(SCIP_SET *set, SCIP_VAR **vars, SCIP_CONFLICTROW *reasonrow, int *fixsides, SCIP_BDCHGIDX *currbdchgidx, int idxreason, SCIP_Real divisor)
static SCIP_RETCODE slackReducingContinuousBdchgQueue(SCIP_CONFLICT *conflict, SCIP_VAR **vars, SCIP_CONFLICTROW *row, SCIP_BDCHGIDX *inferbdchgidx)
static void freeConflictResources(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_Real *fixbounds, int *fixsides)
static SCIP_RETCODE incVSIDS(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BOUNDTYPE boundtype, SCIP_Real value, SCIP_Real weight)
static SCIP_RETCODE reduceReason(SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_VAR **vars, int nvars, SCIP_CONFLICTROW *rowtoreduce, SCIP_BDCHGINFO *currbdchginfo, int residx, SCIP_Real *fixbounds, int *fixsides)
SCIP_Longint SCIPconflictGetNResLongConflicts(SCIP_CONFLICT *conflict)
SCIP_Bool SCIPconflictResolutionApplicable(SCIP_SET *set)
static SCIP_Bool isBinaryConflictRow(SCIP_SET *set, SCIP_VAR **vars, SCIP_CONFLICTROW *row)
static SCIP_RETCODE conflictRowCopy(SCIP_CONFLICTROW **targetrow, BMS_BLKMEM *blkmem, SCIP_CONFLICTROW *sourcerow)
static SCIP_BDCHGINFO * conflictRemoveCand(SCIP_CONFLICT *conflict, int initial)
static SCIP_RETCODE computeSlack(SCIP_SET *set, SCIP_VAR **vars, SCIP_CONFLICTROW *row, SCIP_BDCHGINFO *currbdchginfo, SCIP_Real *fixbounds, int *fixsides)
static SCIP_RETCODE tightenCoefs(SCIP_SET *set, SCIP_VAR **vars, SCIP_Bool localbounds, SCIP_Real *rowcoefs, int *rowinds, int *rownnz, SCIP_Real *rowlhs, int *nchgcoefs, SCIP_Bool *redundant)
SCIP_RETCODE SCIPconflictAnalyzeResolution(SCIP_CONFLICT *conflict, 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_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_ROW *initialconflictrow, int validdepth, SCIP_Bool *success)
static SCIP_RETCODE markBdchgAsFixed(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_VAR **vars, SCIP_BDCHGINFO **currbdchginfo, int *currbdchgdepth, int nressteps, SCIP_Real *fixbounds, int *fixsides, SCIP_Bool *success)
static SCIP_RETCODE executeResolutionStep(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_VAR **vars, BMS_BLKMEM *blkmem, SCIP_BDCHGINFO *currbdchginfo, int residx, int maxsize, SCIP_Real *fixbounds, int *fixsides, SCIP_Bool *successresolution)
static SCIP_RETCODE createAndAddConflictCon(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR **vars, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_CLIQUETABLE *cliquetable, SCIP_CONFLICTROW *conflictrow, int insertdepth, SCIP_Bool *success)
static SCIP_RETCODE rescaleAndResolve(SCIP_SET *set, SCIP_CONFLICT *conflict, SCIP_CONFLICTROW *row1, SCIP_CONFLICTROW *row2, SCIP_CONFLICTROW *resolvedrow, BMS_BLKMEM *blkmem, int residx, SCIP_Bool *success)
static SCIP_RETCODE reasonRowFromLpRow(SCIP_SET *set, BMS_BLKMEM *blkmem, SCIP_ROW *row, SCIP_CONFLICTROW *reasonrow, SCIP_BDCHGINFO *bdchginfo)
static SCIP_RETCODE conflictRowCreate(SCIP_CONFLICTROW **row, BMS_BLKMEM *blkmem)
Methods for generalized resolution conflict analysis.
internal methods for constraints and constraint handlers
Constraint handler for linear constraints in their most general form, .
methods for the aggregation rows
#define SCIPquadprecProdDD(r, a, b)
#define SCIPquadprecProdQD(r, a, b)
#define SCIPquadprecSumQD(r, a, b)
#define QUAD_ASSIGN(a, constant)
#define SCIPquadprecSumDD(r, a, b)
#define SCIPquadprecSumQQ(r, a, b)
#define QUAD_ARRAY_LOAD(r, a, idx)
#define SCIPdebugCheckConss(scip, conss, nconss)
#define SCIP_CALL_ABORT(x)
#define SCIP_LONGINT_FORMAT
SCIP_RETCODE SCIPupgradeConsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_CONS **upgdcons)
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)
int SCIPgetNContVars(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddConflict(SCIP *scip, SCIP_NODE *node, SCIP_CONS **cons, SCIP_NODE *validnode, SCIP_CONFTYPE conftype, SCIP_Bool iscutoffinvolved)
void ** SCIPpqueueElems(SCIP_PQUEUE *pqueue)
void SCIPpqueueClear(SCIP_PQUEUE *pqueue)
SCIP_RETCODE SCIPpqueueInsert(SCIP_PQUEUE *pqueue, void *elem)
int SCIPpqueueNElems(SCIP_PQUEUE *pqueue)
void * SCIPpqueueRemove(SCIP_PQUEUE *pqueue)
void * SCIPpqueueFirst(SCIP_PQUEUE *pqueue)
SCIP_VAR * SCIPcolGetVar(SCIP_COL *col)
SCIP_RETCODE SCIPaddConflictLb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPaddConflictUb(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsGlobal(SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_RETCODE SCIPcalcMIR(SCIP *scip, SCIP_SOL *sol, SCIP_Bool postprocess, SCIP_Real boundswitch, int vartypeusevbds, SCIP_Bool allowlocal, SCIP_Bool fixintegralrhs, int *boundsfortrans, SCIP_BOUNDTYPE *boundtypesfortrans, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_Real scale, SCIP_AGGRROW *aggrrow, SCIP_Real *cutcoefs, SCIP_Real *cutrhs, int *cutinds, int *cutnnz, SCIP_Real *cutefficacy, int *cutrank, SCIP_Bool *cutislocal, SCIP_Bool *success)
SCIP_RETCODE SCIPaggrRowCreate(SCIP *scip, SCIP_AGGRROW **aggrrow)
SCIP_RETCODE SCIPaggrRowAddCustomCons(SCIP *scip, SCIP_AGGRROW *aggrrow, int *inds, SCIP_Real *vals, int len, SCIP_Real rhs, SCIP_Real weight, int rank, SCIP_Bool local)
void SCIPaggrRowFree(SCIP *scip, SCIP_AGGRROW **aggrrow)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPfreeBufferArrayNull(scip, ptr)
int SCIPnodeGetDepth(SCIP_NODE *node)
const char * SCIPpropGetName(SCIP_PROP *prop)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
int SCIProwGetNNonz(SCIP_ROW *row)
SCIP_COL ** SCIProwGetCols(SCIP_ROW *row)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
const char * SCIProwGetName(SCIP_ROW *row)
SCIP_Real SCIProwGetConstant(SCIP_ROW *row)
SCIP_Real * SCIProwGetVals(SCIP_ROW *row)
SCIP_RETCODE SCIPsetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real val)
SCIP_Bool SCIPbdchginfoIsRedundant(SCIP_BDCHGINFO *bdchginfo)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_BDCHGIDX * SCIPbdchginfoGetIdx(SCIP_BDCHGINFO *bdchginfo)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_BDCHGINFO * SCIPvarGetLbchgInfo(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
SCIP_PROP * SCIPbdchginfoGetInferProp(SCIP_BDCHGINFO *bdchginfo)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPbdchginfoGetDepth(SCIP_BDCHGINFO *bdchginfo)
SCIP_CONS * SCIPbdchginfoGetInferCons(SCIP_BDCHGINFO *bdchginfo)
int SCIPbdchginfoGetPos(SCIP_BDCHGINFO *bdchginfo)
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_Real SCIPbdchginfoGetOldbound(SCIP_BDCHGINFO *bdchginfo)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_BOUNDCHGTYPE SCIPbdchginfoGetChgtype(SCIP_BDCHGINFO *bdchginfo)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Bool SCIPvarIsRelaxationOnly(SCIP_VAR *var)
SCIP_BDCHGINFO * SCIPvarGetUbchgInfo(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
int SCIPvarGetNBdchgInfosUb(SCIP_VAR *var)
SCIP_BOUNDTYPE SCIPbdchginfoGetBoundtype(SCIP_BDCHGINFO *bdchginfo)
SCIP_Real SCIPbdchginfoGetNewbound(SCIP_BDCHGINFO *bdchginfo)
int SCIPvarGetNBdchgInfosLb(SCIP_VAR *var)
void SCIPsortDownRealInt(SCIP_Real *realarray, int *intarray, int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIPfreeSol(scip, &heurdata->sol))
SCIPcreateSol(scip, &heurdata->sol, heur))
assert(minobj< SCIPgetCutoffbound(scip))
void SCIPhistoryIncNActiveConflicts(SCIP_HISTORY *history, SCIP_BRANCHDIR dir, SCIP_Real length)
void SCIPhistoryIncVSIDS(SCIP_HISTORY *history, SCIP_BRANCHDIR dir, SCIP_Real weight)
internal methods for branching and inference history
memory allocation routines
#define BMSfreeBlockMemory(mem, ptr)
#define BMSallocBlockMemory(mem, ptr)
#define BMSreallocMemoryArray(ptr, num)
#define BMSfreeBlockMemoryArrayNull(mem, ptr, num)
#define BMSallocBlockMemoryArray(mem, ptr, num)
#define BMScopyMemoryArray(ptr, source, num)
#define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum)
struct BMS_BlkMem BMS_BLKMEM
SCIP_RETCODE SCIPconsCreateRow(SCIP *scip, SCIP_CONS *cons, SCIP_ROW **row)
SCIP_VAR ** SCIPprobGetVars(SCIP_PROB *prob)
internal methods for storing and manipulating the main problem
internal methods for propagators
public methods for conflict analysis handlers
public methods for managing constraints
public methods for LP management
public methods for message output
public data structures and miscellaneous methods
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 memory management
public methods for global and local (sub)problems
public methods for solutions
public methods for SCIP variables
SCIP_Real SCIPsetFloor(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPsetCeil(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsFeasGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsPositive(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPsetInfinity(SCIP_SET *set)
SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsRelGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsZero(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsRelLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
int SCIPsetCalcMemGrowSize(SCIP_SET *set, int num)
SCIP_Bool SCIPsetIsNegative(SCIP_SET *set, SCIP_Real val)
internal methods for global SCIP settings
#define SCIPsetFreeBufferArray(set, ptr)
#define SCIPsetDebugMsgPrint
#define SCIPsetAllocBufferArray(set, ptr, num)
internal methods for storing primal CIP solutions
SCIP_INFERENCEDATA inferencedata
SCIP_CONFTYPE conflicttype
unsigned int usescutoffbound
SCIP_Real * conflictvarsubs
SCIP_Longint nappliedglbconss
SCIP_CONFLICTROW ** conflictrows
SCIP_PQUEUE * resbdchgqueue
SCIP_Longint nappliedglbliterals
SCIP_Longint nresconfconss
SCIP_Longint nappliedglbresconss
SCIP_CONFLICTROW * resolvedconflictrow
SCIP_CONFLICTROW * reducedreasonrow
SCIP_Longint nreslongconfs
SCIP_Longint nresconfvariables
SCIP_Longint nappliedlocconss
SCIP_CLOCK * resanalyzetime
SCIP_PQUEUE * continuousbdchgqueue
SCIP_CONFLICTROW * conflictrow
SCIP_Bool bdchgonlyresqueue
SCIP_CONFLICTROW * reasonrow
SCIP_Real * conflictvarslbs
SCIP_Longint nreslargecoefs
SCIP_Longint nappliedlocliterals
SCIP_Bool strongbranching
SCIP_HISTORY * glbhistory
SCIP_HISTORY * glbhistorycrun
datastructures for conflict analysis
data structures for LP management
datastructures for storing and manipulating the main problem
datastructures for global SCIP settings
datastructures for problem statistics
int SCIPtreeGetFocusDepth(SCIP_TREE *tree)
SCIP_RETCODE SCIPnodeAddBoundchg(SCIP_NODE *node, 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_EVENTFILTER *eventfilter, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype, SCIP_Bool probingchange)
SCIP_RETCODE SCIPnodeCutoff(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTFILTER *eventfilter, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_REOPT *reopt, SCIP_LP *lp, BMS_BLKMEM *blkmem)
int SCIPtreeGetCurrentDepth(SCIP_TREE *tree)
internal methods for branch and bound tree
struct SCIP_BranchCand SCIP_BRANCHCAND
struct SCIP_Conflict SCIP_CONFLICT
@ SCIP_CONFTYPE_PROPAGATION
struct SCIP_ConflictRow SCIP_CONFLICTROW
struct SCIP_Cons SCIP_CONS
struct SCIP_Conshdlr SCIP_CONSHDLR
struct SCIP_AggrRow SCIP_AGGRROW
struct SCIP_EventFilter SCIP_EVENTFILTER
struct SCIP_EventQueue SCIP_EVENTQUEUE
@ SCIP_BRANCHDIR_DOWNWARDS
enum SCIP_BranchDir SCIP_BRANCHDIR
struct SCIP_CliqueTable SCIP_CLIQUETABLE
enum SCIP_BoundType SCIP_BOUNDTYPE
struct SCIP_PQueue SCIP_PQUEUE
struct SCIP_Prob SCIP_PROB
struct SCIP_Prop SCIP_PROP
struct SCIP_Reopt SCIP_REOPT
enum SCIP_Retcode SCIP_RETCODE
struct SCIP_Stat SCIP_STAT
struct SCIP_Tree SCIP_TREE
enum SCIP_BoundchgType SCIP_BOUNDCHGTYPE
struct SCIP_BdChgIdx SCIP_BDCHGIDX
@ SCIP_BOUNDCHGTYPE_PROPINFER
@ SCIP_BOUNDCHGTYPE_BRANCHING
@ SCIP_BOUNDCHGTYPE_CONSINFER
struct SCIP_BdChgInfo SCIP_BDCHGINFO
SCIP_RETCODE SCIPvarIncVSIDS(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real weight)
int SCIPbdchgidxGetDepth(SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPvarIncNActiveConflicts(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real length)
int SCIPbdchgidxGetPos(SCIP_BDCHGIDX *bdchgidx)
internal methods for problem variables