Methods for generalized resolution conflict analysis.
This file implements a conflict analysis method based on generalized resolution, as detailed in the paper:
Gioni Mexi, et al. "Cut-based Conflict Analysis in Mixed Integer Programming." arXiv preprint arXiv:2410.15110 (2024).
The generalized resolution conflict analysis procedure starts with an initial conflict row and it iteratively aggregates this row with a reason row—the row that propagated the bound change causing the conflict. The aggregation cancels the coefficient of the resolving variable. This process continues until a first unique implication point (FUIP) is reached. If the aggregation does not yield a valid (infeasible) row, the algorithm attempts to reduce the reason row (e.g., using MIR reduction) and retries the aggregation. Once a valid conflict row with negative slack is generated, a conflict constraint is constructed and added to the problem.
Definition in file conflict_resolution.c.
#include "blockmemshell/memory.h"#include "scip/clock.h"#include "scip/conflict.h"#include "scip/conflict_resolution.h"#include "scip/cons.h"#include "scip/cons_linear.h"#include "scip/cuts.h"#include "scip/history.h"#include "scip/prob.h"#include "scip/prop.h"#include "scip/pub_cons.h"#include "scip/pub_conflict.h"#include "scip/pub_lp.h"#include "scip/pub_message.h"#include "scip/pub_misc.h"#include "scip/pub_var.h"#include "scip/scip_conflict.h"#include "scip/scip_cons.h"#include "scip/scip_mem.h"#include "scip/scip_prob.h"#include "scip/scip_sol.h"#include "scip/scip_var.h"#include "scip/set.h"#include "scip/sol.h"#include "scip/struct_conflict.h"#include "scip/struct_lp.h"#include "scip/struct_prob.h"#include "scip/struct_set.h"#include "scip/struct_stat.h"#include "scip/tree.h"#include "scip/var.h"#include <string.h>#include <strings.h>Go to the source code of this file.
Macros | |
| #define | BOUNDSWITCH 0.51 |
| #define | POSTPROCESS FALSE |
| #define | USEVBDS FALSE |
| #define | FIXINTEGRALRHS FALSE |
| #define | MINFRAC 0.05 |
| #define | MAXFRAC 0.999 |
| #define | EPS 1e-06 |
| #define BOUNDSWITCH 0.51 |
threshold for bound switching - see cuts.c
Definition at line 87 of file conflict_resolution.c.
| #define POSTPROCESS FALSE |
apply postprocessing after MIR calculation - see SCIPcalcMIR()
Definition at line 88 of file conflict_resolution.c.
| #define USEVBDS FALSE |
use variable bounds - see SCIPcalcMIR()
Definition at line 89 of file conflict_resolution.c.
Referenced by MirReduction().
| #define FIXINTEGRALRHS FALSE |
try to generate an integral rhs - see SCIPcalcMIR()
Definition at line 90 of file conflict_resolution.c.
Referenced by createCGCutCMIR(), generateGMICuts(), MirReduction(), and SCIP_DECL_SEPAEXECLP().
| #define MINFRAC 0.05 |
minimal fractionality of floor(rhs) - see cuts.c
Definition at line 91 of file conflict_resolution.c.
| #define MAXFRAC 0.999 |
maximal fractionality of floor(rhs) - see cuts.c
Definition at line 92 of file conflict_resolution.c.
| #define EPS 1e-06 |
Definition at line 94 of file conflict_resolution.c.
Referenced by conflictAnalyzeResolution(), global_relabel(), maxflow(), and tightenCoefs().
|
static |
creates a copy of the given generalized resolution row, allocating an additional amount of memory
| targetrow | pointer to store the generalized resolution row |
| blkmem | block memory of transformed problem |
| sourcerow | source generalized resolution row |
Definition at line 98 of file conflict_resolution.c.
References assert(), BMSallocBlockMemory, BMSallocBlockMemoryArray, BMScopyMemoryArray, SCIP_ConflictRow::coefquotient, SCIP_ConflictRow::conflictdepth, SCIP_ConflictRow::conflicttype, SCIP_ConflictRow::inds, SCIP_ConflictRow::insertdepth, SCIP_ConflictRow::isbinary, SCIP_ConflictRow::lhs, SCIP_ConflictRow::nnz, NULL, nvars, SCIP_ConflictRow::nvars, SCIP_ConflictRow::repropdepth, SCIP_ALLOC, SCIP_OKAY, SCIP_ConflictRow::slack, SCIP_ConflictRow::usescutoffbound, SCIP_ConflictRow::validdepth, and SCIP_ConflictRow::vals.
Referenced by conflictAnalyzeResolution().
|
static |
replaces a generalized resolution row by another; allocate an additional amount of memory if needed
| targetrow | pointer to store the generalized resolution row |
| blkmem | block memory of transformed problem |
| sourcerow | source generalized resolution row |
Definition at line 140 of file conflict_resolution.c.
References assert(), BMScopyMemoryArray, BMSreallocBlockMemoryArray, SCIP_ConflictRow::coefquotient, SCIP_ConflictRow::conflictdepth, SCIP_ConflictRow::conflicttype, SCIP_ConflictRow::inds, SCIP_ConflictRow::insertdepth, SCIP_ConflictRow::isbinary, SCIP_ConflictRow::lhs, MAX, SCIP_ConflictRow::nnz, NULL, nvars, SCIP_ConflictRow::nvars, SCIP_ConflictRow::repropdepth, SCIP_ALLOC, SCIP_OKAY, SCIP_ConflictRow::size, SCIP_ConflictRow::slack, SCIP_ConflictRow::usescutoffbound, SCIP_ConflictRow::validdepth, and SCIP_ConflictRow::vals.
Referenced by conflictAnalyzeResolution(), executeResolutionStep(), and rescaleAndResolve().
|
static |
resizes conflict rows array to be able to store at least num entries
| conflict | conflict analysis data |
| set | global SCIP settings |
| num | minimal number of slots in array |
Definition at line 184 of file conflict_resolution.c.
References assert(), BMSreallocMemoryArray, SCIP_Conflict::conflictrows, SCIP_Conflict::conflictrowssize, NULL, SCIP_ALLOC, SCIP_OKAY, and SCIPsetCalcMemGrowSize().
Referenced by conflictInsertConflictRow().
|
static |
add conflict row to the array of all conflicts rows
| conflict | conflict analysis data |
| set | global SCIP settings |
| conflictrow | conflict row to add |
Definition at line 208 of file conflict_resolution.c.
References assert(), conflictEnsureConflictRowsMem(), SCIP_Conflict::conflictrows, SCIP_Conflict::nconflictrows, NULL, SCIP_CALL, SCIP_OKAY, and SCIPsetDebugMsgPrint.
Referenced by conflictAnalyzeResolution().
| SCIP_Longint SCIPconflictGetNResConflictConss | ( | SCIP_CONFLICT * | conflict | ) |
gets number of conflict constraints found during propagation with the generalized resolution conflict analysis
| conflict | conflict analysis data |
Definition at line 233 of file conflict_resolution.c.
References assert(), SCIP_Conflict::nresconfconss, NULL, and SCIP_Longint.
Referenced by SCIPgetNConflictConssFound(), and SCIPprintConflictStatistics().
| SCIP_Longint SCIPconflictGetNResSuccess | ( | SCIP_CONFLICT * | conflict | ) |
gets number of calls to generalized resolution conflict analysis that yield at least one conflict constraint
| conflict | conflict analysis data |
Definition at line 243 of file conflict_resolution.c.
References assert(), SCIP_Conflict::nressuccess, NULL, and SCIP_Longint.
Referenced by SCIPprintConflictStatistics().
| SCIP_Longint SCIPconflictGetNResLargeCoefs | ( | SCIP_CONFLICT * | conflict | ) |
gets number of calls to generalized resolution conflict analysis terminating because of large coefficients
| conflict | conflict analysis data |
Definition at line 254 of file conflict_resolution.c.
References assert(), SCIP_Conflict::nreslargecoefs, NULL, and SCIP_Longint.
Referenced by SCIPprintConflictStatistics().
| SCIP_Longint SCIPconflictGetNResLongConflicts | ( | SCIP_CONFLICT * | conflict | ) |
gets number of calls to generalized resolution conflict analysis terminating because of long conflicts
| conflict | conflict analysis data |
Definition at line 264 of file conflict_resolution.c.
References assert(), SCIP_Conflict::nreslongconfs, NULL, and SCIP_Longint.
Referenced by SCIPprintConflictStatistics().
| SCIP_Longint SCIPconflictGetNResCalls | ( | SCIP_CONFLICT * | conflict | ) |
gets number of calls to generalized resolution conflict analysis
| conflict | conflict analysis data |
Definition at line 274 of file conflict_resolution.c.
References assert(), SCIP_Conflict::nrescalls, NULL, and SCIP_Longint.
Referenced by SCIPprintConflictStatistics().
calculates the maximal size of conflict sets to be used
| set | global SCIP settings |
| prob | problem data |
Definition at line 487 of file conflict_resolution.c.
References assert(), MAX, SCIP_Prob::ncontvars, NULL, and SCIP_Prob::nvars.
Referenced by conflictAnalyzeResolution(), and SCIPconflictAddConflictCon().
|
static |
perform activity based coefficient tightening on a semi-sparse or sparse row defined with a left hand side
| set | global SCIP settings |
| vars | array of variables |
| localbounds | do we use local bounds? |
| rowcoefs | dense row of coefficients |
| rowinds | indices of the variables in the row |
| rownnz | number of non-zeros in the row |
| rowlhs | left hand side of the row |
| nchgcoefs | number of changed coefficients |
| redundant | pointer to store whether the row is redundant |
Definition at line 504 of file conflict_resolution.c.
References assert(), EPS, FALSE, i, MAX, NULL, QUAD, QUAD_ASSIGN, QUAD_TO_DBL, SCIP_Bool, SCIP_CALL_ABORT, SCIP_OKAY, SCIP_Real, SCIPallocBufferArray, SCIPdebugPrintf, SCIPfreeBufferArray, SCIPfreeBufferArrayNull, SCIPgetNContVars(), SCIPgetNVars(), SCIPquadprecProdQD, SCIPquadprecSumDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, SCIPsetIsGE(), SCIPsetIsInfinity(), SCIPsetIsLE(), SCIPsetIsLT(), SCIPsetIsNegative(), SCIPsetIsPositive(), SCIPsetIsRelGE(), SCIPsetIsRelLE(), SCIPsortDownRealInt(), SCIPvarGetLbGlobal(), SCIPvarGetLbLocal(), SCIPvarGetUbGlobal(), SCIPvarGetUbLocal(), SCIPvarIsIntegral(), TRUE, var, and vars.
Referenced by conflictAnalyzeResolution().
|
static |
check if the generalized resolution row has a relaxation only variable
| set | global SCIP settings |
| vars | array of variables |
| row | generalized resolution row |
Definition at line 728 of file conflict_resolution.c.
References assert(), FALSE, i, SCIP_ConflictRow::inds, SCIP_ConflictRow::nnz, NULL, SCIP_Bool, SCIPvarIsRelaxationOnly(), TRUE, var, and vars.
Referenced by SCIPconflictAddConflictCon().
|
static |
check if a generalized resolution row has only binary variables
| set | global SCIP settings |
| vars | array of variables |
| row | generalized resolution row |
Definition at line 755 of file conflict_resolution.c.
References assert(), FALSE, i, SCIP_ConflictRow::inds, SCIP_ConflictRow::nnz, NULL, SCIP_Bool, SCIPvarIsBinary(), TRUE, var, and vars.
Referenced by ComplementedMirLhs(), executeResolutionStep(), and reduceReason().
|
static |
Removes a variable with zero coefficient in the generalized resolution row
| row | generalized resolution row |
| set | global SCIP settings |
| pos | position of variable in conflict row |
Definition at line 782 of file conflict_resolution.c.
References assert(), SCIP_ConflictRow::inds, SCIP_ConflictRow::nnz, NULL, SCIPsetIsZero(), and SCIP_ConflictRow::vals.
Referenced by conflictRowRemoveZeroVars().
|
static |
Removes all variables with zero coefficient (< 1e-09) in the generalized resolution row
| row | generalized resolution row |
| set | global SCIP settings |
Definition at line 803 of file conflict_resolution.c.
References assert(), conflictRowRemoveZeroVar(), i, SCIP_ConflictRow::inds, SCIP_ConflictRow::nnz, NULL, SCIPsetIsZero(), and SCIP_ConflictRow::vals.
Referenced by ComplementedMirLhs(), conflictAnalyzeResolution(), linearCombRows(), and MirReduction().
|
static |
complement and apply MIR to a 0-1 reason constraint lhs <= a^T x
| set | global SCIP settings |
| vars | array of variables |
| reasonrow | reason row |
| fixsides | dense array of variables fixed to a bound |
| currbdchgidx | current bound change index |
| idxreason | index in the reason |
| divisor | the divisor of the row |
Definition at line 821 of file conflict_resolution.c.
References assert(), conflictRowRemoveZeroVars(), i, SCIP_ConflictRow::inds, isBinaryConflictRow(), SCIP_ConflictRow::lhs, MAXFRAC, MINFRAC, SCIP_ConflictRow::nnz, NULL, SCIP_OKAY, SCIP_Real, SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), SCIPsetCeil(), SCIPsetDebugMsgPrint, SCIPsetFloor(), SCIPsetIsGT(), SCIPvarIsBinary(), TRUE, SCIP_ConflictRow::vals, varidx, and vars.
Referenced by reduceReason().
|
static |
| set | global SCIP settings |
| row1 | first row (aggregated row) |
| row2 | second row |
| scale | scale factor for second row |
Definition at line 975 of file conflict_resolution.c.
References assert(), conflictRowRemoveZeroVars(), i, SCIP_ConflictRow::inds, SCIP_ConflictRow::lhs, SCIP_ConflictRow::nnz, NULL, SCIP_Real, SCIPsetIsZero(), and SCIP_ConflictRow::vals.
Referenced by rescaleAndResolve().
|
static |
returns whether a bound change is resolvable or not
| bdchginfo | bound change to check |
Definition at line 1012 of file conflict_resolution.c.
References assert(), FALSE, SCIP_Bool, SCIP_BOUNDCHGTYPE_BRANCHING, SCIP_BOUNDCHGTYPE_CONSINFER, SCIP_BOUNDCHGTYPE_PROPINFER, SCIPbdchginfoGetChgtype(), SCIPbdchginfoGetInferCons(), SCIPconsGetHdlr(), SCIPconshdlrGetName(), and TRUE.
Referenced by conflictAnalyzeResolution(), existsResolvablebdchginfo(), and getReasonRow().
|
static |
returns whether there exists a resolvable bound change or not
| conflict | conflict analysis data |
Definition at line 1041 of file conflict_resolution.c.
References FALSE, i, isResolvableBdchg(), SCIP_Conflict::resbdchgqueue, SCIP_Bool, SCIPpqueueElems(), SCIPpqueueNElems(), and TRUE.
Referenced by conflictAnalyzeResolution(), and markBdchgAsFixed().
|
static |
returns whether a bound change is relevant for the infeasibility of the conflict row. A bound change is relevant if:
| conflict | conflict analysis data |
| bdchginfo | bound change to check |
| initial | whether we are in the initialization of conflict analysis |
Definition at line 1064 of file conflict_resolution.c.
References SCIP_Conflict::conflictrow, FALSE, SCIP_ConflictRow::nnz, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetVar(), SCIPvarGetProbindex(), TRUE, SCIP_ConflictRow::vals, and var.
Referenced by conflictFirstCand(), and conflictRemoveCand().
|
static |
returns next conflict analysis bound change candidate from the queue without removing it
| set | global SCIP settings |
| conflict | conflict analysis data |
| initial | whether we are in the initialization of conflict analysis |
Definition at line 1095 of file conflict_resolution.c.
References assert(), conflictFirstCand(), SCIP_Conflict::conflictvarslbs, SCIP_Conflict::conflictvarsubs, isBdchgConflictRelevant(), NULL, SCIP_Conflict::resbdchgqueue, SCIP_BOUNDTYPE_LOWER, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetDepth(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetPos(), SCIPbdchginfoGetVar(), SCIPbdchginfoIsRedundant(), SCIPpqueueFirst(), SCIPpqueueRemove(), SCIPsetDebugMsgPrint, SCIPvarGetName(), SCIPvarGetProbindex(), and var.
Referenced by conflictAnalyzeResolution(), conflictFirstCand(), and markBdchgAsFixed().
|
static |
removes and returns next conflict analysis bound change candidate from the queue
| conflict | conflict analysis data |
| initial | whether we are in the initialization of conflict analysis |
Definition at line 1141 of file conflict_resolution.c.
References assert(), isBdchgConflictRelevant(), NULL, SCIP_Conflict::resbdchgqueue, SCIPbdchginfoIsRedundant(), and SCIPpqueueRemove().
Referenced by conflictAnalyzeResolution(), and markBdchgAsFixed().
return TRUE if generalized resolution conflict analysis is applicable
| set | global SCIP settings |
Definition at line 1161 of file conflict_resolution.c.
References FALSE, SCIP_Bool, and TRUE.
Referenced by SCIPconflictAnalyzeResolution().
|
static |
creates a generalized resolution row
| row | generalized resolution row |
| blkmem | block memory of transformed problem |
Definition at line 1174 of file conflict_resolution.c.
References assert(), BMSallocBlockMemory, FALSE, NULL, SCIP_ALLOC, SCIP_CONFTYPE_PROPAGATION, and SCIP_OKAY.
Referenced by SCIPconflictInitRows().
| SCIP_RETCODE SCIPconflictInitRows | ( | SCIP_CONFLICT * | conflict, |
| BMS_BLKMEM * | blkmem ) |
creates conflict and reason rows
| conflict | conflict analysis data |
| blkmem | block memory of transformed problem |
Definition at line 1202 of file conflict_resolution.c.
References assert(), SCIP_Conflict::conflictrow, conflictRowCreate(), NULL, SCIP_Conflict::reasonrow, SCIP_Conflict::reducedreasonrow, SCIP_Conflict::resolvedconflictrow, SCIP_CALL, and SCIP_OKAY.
Referenced by SCIPconflictCreate().
| void SCIPconflictRowFree | ( | SCIP_CONFLICTROW ** | row, |
| BMS_BLKMEM * | blkmem ) |
frees a generalized resolution row
| row | conflict row |
| blkmem | block memory |
Definition at line 1220 of file conflict_resolution.c.
References assert(), BMSfreeBlockMemory, BMSfreeBlockMemoryArrayNull, and NULL.
Referenced by freeConflictResources(), SCIPconflictAnalyzeResolution(), and SCIPconflictFree().
|
static |
frees all conflict rows and arrays that track unresolvable (fixed) variables
| conflict | conflict analysis data |
| blkmem | block memory |
| set | global SCIP settings |
| fixbounds | dense array of fixed bounds |
| fixsides | dense array of variables fixed to a bound |
Definition at line 1237 of file conflict_resolution.c.
References SCIP_Conflict::conflictrows, i, SCIP_Conflict::nconflictrows, SCIP_Real, SCIPconflictRowFree(), and SCIPsetFreeBufferArray.
Referenced by conflictAnalyzeResolution().
|
static |
resets the data structure of a generalized resolution row
| blkmem | block memory |
| row | generalized resolution row |
| nvars | number of variables in the problem |
Definition at line 1257 of file conflict_resolution.c.
References assert(), BMSallocBlockMemoryArray, BMSfreeBlockMemoryArrayNull, SCIP_ConflictRow::coefquotient, SCIP_ConflictRow::conflictdepth, SCIP_ConflictRow::conflicttype, FALSE, i, SCIP_ConflictRow::insertdepth, SCIP_ConflictRow::isbinary, SCIP_ConflictRow::lhs, SCIP_ConflictRow::nnz, NULL, nvars, SCIP_ConflictRow::nvars, SCIP_ConflictRow::repropdepth, SCIP_CONFTYPE_PROPAGATION, SCIP_ConflictRow::slack, SCIP_ConflictRow::usescutoffbound, SCIP_ConflictRow::validdepth, and SCIP_ConflictRow::vals.
Referenced by conflictAnalyzeResolution(), executeResolutionStep(), and MirReduction().
|
static |
calculates the slack (maxact - rhs) for a generalized resolution row given a set of bounds and coefficients
| set | global SCIP settings |
| vars | array of variables |
| row | generalized resolution row |
| currbdchginfo | current bound change |
| fixbounds | dense array of fixed bounds |
| fixsides | dense array of variables fixed to a bound |
Definition at line 1291 of file conflict_resolution.c.
References assert(), bound, i, SCIP_ConflictRow::inds, SCIP_ConflictRow::lhs, SCIP_ConflictRow::nnz, NULL, QUAD, QUAD_ASSIGN, QUAD_TO_DBL, SCIP_OKAY, SCIP_Real, SCIPbdchginfoGetDepth(), SCIPbdchginfoGetIdx(), SCIPbdchginfoGetPos(), SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), SCIPquadprecProdDD, SCIPquadprecSumQD, SCIPquadprecSumQQ, SCIPsetDebugMsgPrint, SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetProbindex(), SCIPvarGetUbGlobal(), SCIP_ConflictRow::slack, TRUE, SCIP_ConflictRow::vals, and vars.
Referenced by conflictAnalyzeResolution(), executeResolutionStep(), getConflictRow(), getReasonRow(), markBdchgAsFixed(), MirReduction(), and reduceReason().
|
static |
reduces the reason row by applying MIR. In the reference solution, each variable is set to the value that was used for the propagation of currbdchginfo.
| set | global SCIP settings |
| blkmem | block memory of transformed problem |
| vars | array of variables |
| nvars | number of variables |
| reasonrow | reason row |
| currbdchginfo | current bound change to resolve |
| varidx | index of the variable to resolve |
| divisor | the divisor of the row |
Definition at line 1375 of file conflict_resolution.c.
References assert(), BOUNDSWITCH, computeSlack(), conflictRowClear(), conflictRowRemoveZeroVars(), FALSE, FIXINTEGRALRHS, i, SCIP_ConflictRow::inds, SCIP_ConflictRow::lhs, MAX, MAXFRAC, MIN, MINFRAC, SCIP_ConflictRow::nnz, NULL, nvars, POSTPROCESS, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaggrRowAddCustomCons(), SCIPaggrRowCreate(), SCIPaggrRowFree(), SCIPbdchginfoGetIdx(), SCIPcalcMIR(), SCIPcreateSol(), SCIPdebug, SCIPfreeSol(), SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), SCIPsetAllocBufferArray, SCIPsetDebugMsgPrint, SCIPsetFreeBufferArray, SCIPsetIsGT(), SCIPsetSolVal(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), SCIPvarIsIntegral(), SCIP_ConflictRow::slack, USEVBDS, SCIP_ConflictRow::vals, varidx, and vars.
Referenced by reduceReason().
|
static |
weaken variable in a generalized resolution row
| row | generalized resolution row |
| set | global SCIP settings |
| var | variable to weaken |
| pos | position in array of indices |
Definition at line 1511 of file conflict_resolution.c.
References assert(), SCIP_ConflictRow::inds, SCIP_ConflictRow::lhs, SCIP_ConflictRow::nnz, NULL, nvars, SCIPdebugMessage, SCIPsetIsGT(), SCIPsetIsLT(), SCIPsetIsZero(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIP_ConflictRow::vals, and var.
Referenced by weakenConflictRow(), and weakenContinuousVarsConflictRow().
|
static |
weaken generalized resolution row by setting variables to their global bounds
| row | generalized resolution row |
| set | global SCIP settings |
| vars | array of variables |
| currbdchgidx | current bound change index |
| fixsides | dense array of variables fixed to a bound |
Definition at line 1543 of file conflict_resolution.c.
References assert(), i, SCIP_ConflictRow::inds, SCIP_ConflictRow::nnz, NULL, SCIP_Real, SCIPdebugMessage, SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), SCIPsetIsEQ(), SCIPvarGetLbGlobal(), SCIPvarGetUbGlobal(), TRUE, SCIP_ConflictRow::vals, vars, and weakenVarConflictRow().
Referenced by conflictAnalyzeResolution(), and getConflictRow().
|
static |
weaken all continuous variables in a generalized resolution row
| row | generalized resolution row |
| set | global SCIP settings |
| vars | array of variables |
| residx | index of variable we are resolving on |
Definition at line 1600 of file conflict_resolution.c.
References assert(), i, SCIP_ConflictRow::inds, SCIP_ConflictRow::nnz, NULL, SCIP_OKAY, SCIPdebugMessage, SCIPvarIsIntegral(), SCIP_ConflictRow::vals, vars, and weakenVarConflictRow().
Referenced by executeResolutionStep().
|
static |
returns the quotient of the largest and smallest value in a semi-sparse array
| set | global SCIP settings |
| inds | array of indices |
| vals | dense array of values |
| nnz | number of nonzeros |
Definition at line 1647 of file conflict_resolution.c.
References assert(), i, MAX, MIN, NULL, REALABS, SCIP_Real, and SCIPsetInfinity().
Referenced by conflictAnalyzeResolution().
|
static |
for every variable in the row, except the inferred variable, add bound changes
| set | global SCIP settings |
| vars | array of variables |
| conflictrow | conflict row |
| inferbdchgidx | bound change index (time stamp of bound change), or NULL for current time |
Definition at line 1678 of file conflict_resolution.c.
References assert(), FALSE, i, SCIP_ConflictRow::inds, SCIP_ConflictRow::nnz, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPaddConflictLb(), SCIPaddConflictUb(), SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), SCIPsetIsGT(), SCIPsetIsLT(), SCIPvarGetLbGlobal(), SCIPvarGetNBdchgInfosLb(), SCIPvarGetNBdchgInfosUb(), SCIPvarGetProbindex(), SCIPvarGetUbGlobal(), SCIP_ConflictRow::vals, and vars.
Referenced by conflictAnalyzeResolution(), and markBdchgAsFixed().
|
static |
add all slack reducing continuous bound changes to the continuous bound change queue
| conflict | conflict analysis data |
| vars | array of variables |
| row | conflict row |
| inferbdchgidx | bound change index of latest continuous bound change |
Definition at line 1730 of file conflict_resolution.c.
References assert(), SCIP_Conflict::continuousbdchgqueue, FALSE, i, SCIP_ConflictRow::inds, SCIP_ConflictRow::nnz, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbdchgidxGetDepth(), SCIPbdchgidxGetPos(), SCIPbdchginfoGetDepth(), SCIPbdchginfoGetPos(), SCIPpqueueClear(), SCIPpqueueInsert(), SCIPpqueueNElems(), SCIPvarGetLbchgInfo(), SCIPvarGetProbindex(), SCIPvarGetUbchgInfo(), SCIPvarIsIntegral(), SCIP_ConflictRow::vals, and vars.
Referenced by executeResolutionStep().
|
static |
increases the conflict score of the variable in the given direction
| var | problem variable |
| blkmem | block memory |
| set | global SCIP settings |
| stat | dynamic problem statistics |
| boundtype | type of bound for which the score should be increased |
| value | value of the bound |
| weight | weight of this VSIDS updates |
Definition at line 1795 of file conflict_resolution.c.
References assert(), SCIP_Stat::glbhistory, SCIP_Stat::glbhistorycrun, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BRANCHDIR_DOWNWARDS, SCIP_BRANCHDIR_UPWARDS, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPhistoryIncVSIDS(), SCIPsetIsZero(), SCIPvarIncVSIDS(), var, and SCIP_Stat::vsidsweight.
Referenced by updateStatistics().
|
static |
update conflict statistics
| conflict | conflict analysis data |
| vars | array of variables |
| blkmem | block memory |
| set | global SCIP settings |
| stat | dynamic problem statistics |
| conflictrow | conflict row to add to the tree |
| insertdepth | depth level at which the conflict set should be added |
Definition at line 1826 of file conflict_resolution.c.
References assert(), bound, SCIP_Stat::glbhistory, SCIP_Stat::glbhistorycrun, i, incVSIDS(), SCIP_ConflictRow::inds, SCIP_Conflict::nappliedglbconss, SCIP_Conflict::nappliedglbliterals, SCIP_Conflict::nappliedlocconss, SCIP_Conflict::nappliedlocliterals, SCIP_ConflictRow::nnz, NULL, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_BRANCHDIR_DOWNWARDS, SCIP_BRANCHDIR_UPWARDS, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPhistoryIncNActiveConflicts(), SCIPsetIsZero(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), SCIPvarIncNActiveConflicts(), SCIP_ConflictRow::vals, var, and vars.
Referenced by createAndAddConflictCon(), and SCIPconflictAddConflictCon().
|
static |
creates a conflict constraint and tries to add it to the storage
| conflict | conflict analysis data |
| blkmem | block memory |
| set | global SCIP settings |
| stat | dynamic problem statistics |
| vars | array of variables |
| tree | branch and bound tree |
| reopt | reoptimization data structure |
| lp | current LP data |
| cliquetable | clique table data structure |
| conflictrow | conflict row to add to the tree |
| insertdepth | depth level at which the conflict set should be added |
| success | pointer to store whether the addition was successful |
Definition at line 1885 of file conflict_resolution.c.
References assert(), SCIP_ConflictRow::conflicttype, FALSE, i, SCIP_ConflictRow::inds, SCIP_ConflictRow::lhs, SCIP_ConflictRow::nnz, SCIP_Conflict::nresconfconss, NULL, SCIP_Tree::path, SCIP_Bool, SCIP_CALL, SCIP_LONGINT_FORMAT, SCIP_MAXSTRLEN, SCIP_OKAY, SCIP_Real, SCIPaddConflict(), SCIPallocBufferArray, SCIPcreateConsLinear(), SCIPdebugCheckConss, SCIPfreeBufferArray, SCIPnodeGetDepth(), SCIPreleaseCons(), SCIPsetInfinity(), SCIPsnprintf(), SCIPupgradeConsLinear(), TRUE, updateStatistics(), SCIP_ConflictRow::usescutoffbound, SCIP_ConflictRow::validdepth, SCIP_ConflictRow::vals, and vars.
Referenced by SCIPconflictAddConflictCon().
| 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 ) |
create conflict constraints out of conflict row and add them to the problem
| conflict | conflict analysis data |
| blkmem | block memory |
| set | global SCIP settings |
| stat | dynamic problem statistics |
| transprob | transformed problem |
| origprob | original problem |
| tree | branch and bound tree |
| reopt | reoptimization data structure |
| lp | current LP data |
| branchcand | branching candidate storage |
| eventqueue | event queue |
| eventfilter | global event filter |
| cliquetable | clique table data structure |
| conflictrow | conflict row to add to the tree |
| success | true if the conflict is added to the problem |
Definition at line 1958 of file conflict_resolution.c.
References assert(), bound, conflictCalcResMaxsize(), SCIP_ConflictRow::conflictdepth, createAndAddConflictCon(), SCIP_Lp::diving, FALSE, hasRelaxationOnlyVar(), SCIP_ConflictRow::inds, SCIP_ConflictRow::insertdepth, SCIP_ConflictRow::lhs, SCIP_Conflict::nappliedglbresconss, SCIP_ConflictRow::nnz, SCIP_Conflict::nreslongconfs, NULL, SCIP_Tree::path, SCIP_Tree::pathlen, SCIP_ConflictRow::repropdepth, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPnodeAddBoundchg(), SCIPnodeCutoff(), SCIPprobGetVars(), SCIPsetCeil(), SCIPsetDebugMsg, SCIPsetDebugMsgPrint, SCIPsetFloor(), SCIPsetIsFeasGT(), SCIPsetIsGT(), SCIPsetIsLT(), SCIPsetIsZero(), SCIPtreeGetCurrentDepth(), SCIPtreeGetFocusDepth(), SCIPvarGetLbGlobal(), SCIPvarGetName(), SCIPvarGetUbGlobal(), SCIPvarIsIntegral(), SCIP_Lp::strongbranching, TRUE, updateStatistics(), SCIP_ConflictRow::validdepth, SCIP_ConflictRow::vals, var, and vars.
Referenced by addConflictRows().
|
static |
adds given data as row to the generalized resolution row
| resolutionrow | generalized resolution row |
| blkmem | block memory |
| vals | variable coefficients |
| inds | variable array |
| nnz | size of variable and coefficient array |
| lhs | left-hand side of conflict row |
| reverse | reverse coefficients |
Definition at line 2102 of file conflict_resolution.c.
References assert(), BMSallocBlockMemoryArray, BMSreallocBlockMemoryArray, i, SCIP_ConflictRow::inds, SCIP_ConflictRow::lhs, SCIP_ConflictRow::nnz, NULL, SCIP_ALLOC, SCIP_Bool, SCIP_OKAY, SCIP_Real, SCIP_ConflictRow::size, and SCIP_ConflictRow::vals.
Referenced by conflictRowFromLpRow(), and reasonRowFromLpRow().
|
static |
compute scale for the reason constraint such that the resolving variable cancels out
| set | global SCIP settings |
| conflictrow | conflict row |
| reasonrow | reason row |
| residx | index of variable to resolve |
Definition at line 2165 of file conflict_resolution.c.
References assert(), REALABS, SCIP_Real, SCIPsetIsZero(), and SCIP_ConflictRow::vals.
Referenced by rescaleAndResolve().
|
static |
compute the resolved conflict row resolvedrow = row1 + scale * row2
| set | global SCIP settings |
| conflict | conflict analysis data |
| row1 | conflict row |
| row2 | reason conflict row |
| resolvedrow | resolved conflict row |
| blkmem | block memory |
| residx | index of variable to resolve |
| success | apply resolution |
Definition at line 2188 of file conflict_resolution.c.
References assert(), BMSreallocBlockMemoryArray, SCIP_ConflictRow::coefquotient, computeScaleReason(), conflictRowReplace(), FALSE, i, SCIP_ConflictRow::inds, linearCombRows(), MAX, MIN, SCIP_ConflictRow::nnz, SCIP_Conflict::nreslargecoefs, NULL, SCIP_ALLOC, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPsetDebugMsgPrint, SCIPsetInfinity(), SCIPsetIsGE(), SCIPsetIsGT(), SCIPsetIsZero(), SCIP_ConflictRow::size, SCIP_ConflictRow::slack, TRUE, and SCIP_ConflictRow::vals.
Referenced by executeResolutionStep().
|
static |
reduce the reason constraint
| set | global SCIP settings |
| blkmem | block memory of transformed problem |
| vars | array of variables |
| nvars | number of variables |
| rowtoreduce | the row to reduce |
| currbdchginfo | current bound change to resolve |
| residx | index of variable to resolve |
| fixbounds | dense array of fixed bounds |
| fixsides | dense array of variables fixed to a bound |
Definition at line 2270 of file conflict_resolution.c.
References assert(), ComplementedMirLhs(), computeSlack(), isBinaryConflictRow(), MirReduction(), nvars, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbdchginfoGetIdx(), SCIPdebug, SCIPsetIsZero(), SCIP_ConflictRow::vals, and vars.
Referenced by executeResolutionStep().
|
static |
reason row from an LP row
| set | global SCIP settings |
| blkmem | block memory |
| row | row to add |
| reasonrow | reason row |
| bdchginfo | bound change to resolve |
Definition at line 2306 of file conflict_resolution.c.
References assert(), conflictRowAddSemiSparseData(), FALSE, i, SCIP_BdChgInfo::inferencedata, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_UNUSED, SCIPABORT, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetVar(), SCIPcolGetVar(), SCIPconshdlrGetName(), SCIProwGetCols(), SCIProwGetConstant(), SCIProwGetLhs(), SCIProwGetNNonz(), SCIProwGetRhs(), SCIProwGetVals(), SCIPsetAllocBufferArray, SCIPsetFreeBufferArray, SCIPsetIsInfinity(), SCIPvarGetProbindex(), TRUE, var, and varidx.
Referenced by getReasonRow().
|
static |
add a row to the conflict row
| set | global SCIP settings |
| blkmem | block memory |
| row | row to add |
| conflictrow | conflict row |
| bdchginfo | bound change to resolve |
Definition at line 2396 of file conflict_resolution.c.
References assert(), conflictRowAddSemiSparseData(), FALSE, i, NULL, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_UNUSED, SCIPABORT, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetVar(), SCIPcolGetVar(), SCIProwGetCols(), SCIProwGetConstant(), SCIProwGetLhs(), SCIProwGetNNonz(), SCIProwGetRhs(), SCIProwGetVals(), SCIPsetAllocBufferArray, SCIPsetFreeBufferArray, SCIPvarGetProbindex(), TRUE, var, and varidx.
Referenced by getConflictRow().
|
static |
get the reason for the given bound change
| blkmem | block memory |
| vars | array of variables |
| set | global SCIP settings |
| currbdchginfo | bound change to resolve |
| reasonrow | reason row for the bound change |
| residx | index of the bound change to resolve |
| fixbounds | dense array of fixed bounds |
| fixsides | dense array of variables fixed to a bound |
| success | pointer to store whether we could get a linear reason |
Definition at line 2479 of file conflict_resolution.c.
References assert(), computeSlack(), SCIP_Cons::conshdlr, FALSE, isResolvableBdchg(), SCIP_ConflictRow::lhs, NULL, reasonRowFromLpRow(), SCIP_Bool, SCIP_BOUNDCHGTYPE_CONSINFER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbdchginfoGetChgtype(), SCIPbdchginfoGetIdx(), SCIPbdchginfoGetInferCons(), SCIPbdchginfoGetOldbound(), SCIPbdchginfoGetVar(), SCIPconsCreateRow(), SCIPconshdlrGetName(), SCIPconsIsGlobal(), SCIPgetVarLbAtIndex(), SCIPgetVarUbAtIndex(), SCIPsetDebugMsgPrint, SCIPsetIsGT(), SCIPsetIsInfinity(), SCIPsetIsLT(), SCIPvarGetProbindex(), SCIP_ConflictRow::slack, TRUE, SCIP_ConflictRow::vals, var, and vars.
Referenced by conflictAnalyzeResolution(), and executeResolutionStep().
|
static |
get the conflict row for the given bound change from the LP row.
| conflict | conflict analysis data |
| blkmem | block memory of transformed problem |
| set | global SCIP settings |
| prob | problem data |
| initialconflictrow | row of constraint that detected the conflict |
| currbdchginfo | bound change to resolve |
| maxsize | maximal size of conflict rows |
| success | pointer to store whether we could get a conflict row |
Definition at line 2573 of file conflict_resolution.c.
References assert(), computeSlack(), SCIP_Conflict::conflictrow, conflictRowFromLpRow(), FALSE, SCIP_ConflictRow::nnz, SCIP_Conflict::nreslongconfs, NULL, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPbdchginfoGetIdx(), SCIProwGetName(), SCIProwGetNNonz(), SCIPsetDebugMsgPrint, SCIPsetIsGE(), SCIPsetIsLT(), SCIP_ConflictRow::slack, TRUE, SCIP_Prob::vars, vars, and weakenConflictRow().
Referenced by conflictAnalyzeResolution().
|
static |
execute resolution; reduce reason if necessary
| conflict | conflict analysis data |
| set | global SCIP settings |
| vars | array of variables |
| blkmem | block memory of transformed problem |
| currbdchginfo | current bound change to resolve |
| residx | index of variable to resolve |
| maxsize | maximal size of conflict rows |
| fixbounds | dense array of fixed bounds |
| fixsides | dense array of variables fixed to a bound |
| successresolution | pointer to store whether the resolution was successful |
Definition at line 2650 of file conflict_resolution.c.
References assert(), computeSlack(), SCIP_Conflict::conflictrow, conflictRowClear(), conflictRowReplace(), SCIP_Conflict::continuousbdchgqueue, FALSE, getReasonRow(), isBinaryConflictRow(), SCIP_ConflictRow::nnz, SCIP_Conflict::nreslongconfs, NULL, nvars, SCIP_Conflict::reasonrow, SCIP_Conflict::reducedreasonrow, reduceReason(), rescaleAndResolve(), SCIP_Conflict::resolvedconflictrow, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPbdchginfoGetIdx(), SCIPbdchginfoGetVar(), SCIPdebug, SCIPgetNVars(), SCIPpqueueNElems(), SCIPpqueueRemove(), SCIPsetDebugMsgPrint, SCIPsetIsGE(), SCIPsetIsLE(), SCIPsetIsLT(), SCIPsetIsZero(), SCIPvarGetName(), SCIPvarGetProbindex(), SCIP_ConflictRow::slack, slackReducingContinuousBdchgQueue(), TRUE, SCIP_ConflictRow::vals, varidx, vars, and weakenContinuousVarsConflictRow().
Referenced by conflictAnalyzeResolution().
|
static |
If a bound change cannot be resolved, it is treated as a branching decision. Subsequent bound changes for that variable are ignored by recording the variable's index in fixsides and its bound type in fixbounds (1 for upper, -1 for lower).
| conflict | conflict analysis data |
| set | global SCIP settings |
| vars | array of variables |
| currbdchginfo | pointer to current bound change to resolve |
| currbdchgdepth | pointer to store the depth of the bound change |
| nressteps | number of bound changes that have been resolved so far |
| fixbounds | dense array of fixed bounds |
| fixsides | dense array of variables fixed to a bound |
| success | pointer to store whether the bound change was ignored |
Definition at line 2820 of file conflict_resolution.c.
References assert(), computeSlack(), conflictFirstCand(), conflictRemoveCand(), SCIP_Conflict::conflictrow, SCIP_Conflict::conflictvarslbs, SCIP_Conflict::conflictvarsubs, existsResolvablebdchginfo(), FALSE, NULL, SCIP_Bool, SCIP_BOUNDCHGTYPE_BRANCHING, SCIP_BOUNDCHGTYPE_CONSINFER, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetChgtype(), SCIPbdchginfoGetDepth(), SCIPbdchginfoGetIdx(), SCIPbdchginfoGetInferCons(), SCIPbdchginfoGetNewbound(), SCIPbdchginfoGetVar(), SCIPconsIsGlobal(), SCIPsetDebugMsgPrint, SCIPsetIsLT(), SCIPvarGetName(), SCIPvarGetProbindex(), SCIP_ConflictRow::slack, TRUE, updateBdchgQueue(), var, varidx, and vars.
Referenced by conflictAnalyzeResolution().
|
static |
add the conflict rows to the problem
| conflict | conflict analysis data |
| blkmem | block memory |
| set | global SCIP settings |
| stat | dynamic problem statistics |
| transprob | transformed problem |
| origprob | original problem |
| tree | branch and bound tree |
| reopt | reoptimization data structure |
| lp | current LP data |
| branchcand | branching candidate storage |
| eventqueue | event queue |
| eventfilter | global event filter |
| cliquetable | clique table data structure |
| nconstoadd | number of conflict constraints to add |
| nconss | pointer to store the number of generated conflict constraints |
| nconfvars | pointer to store the number of variables in generated conflict constraints |
Definition at line 2909 of file conflict_resolution.c.
References assert(), SCIP_ConflictRow::coefquotient, SCIP_Conflict::conflictrows, i, SCIP_ConflictRow::nnz, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPconflictAddConflictCon(), SCIPsetIsLT(), and SCIP_ConflictRow::slack.
Referenced by conflictAnalyzeResolution().
| 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 ) |
Analyzes conflicting bound changes added via SCIPconflictAddBound(). This function performs generalized resolution conflict analysis by iteratively aggregating the infeasible conflict row (conflictrow) with the reason row (reasonrow) that propagated the bound change. In each iteration, the coefficient of the resolving variable is cancelled. If the aggregation does not yield an infeasible row, MIR reduction is applied to the reason row and the aggregation is retried, continuing until a first unique implication point (FUIP) is reached. On success, a linear conflict constraint that explains the infeasibility is added to the problem.
| conflict | conflict analysis data |
| blkmem | block memory of transformed problem |
| set | global SCIP settings |
| stat | problem statistics |
| transprob | transformed problem |
| origprob | original problem |
| tree | branch and bound tree |
| reopt | reoptimization data structure |
| lp | LP data |
| branchcand | branching candidate storage |
| eventqueue | event queue |
| eventfilter | global event filter |
| cliquetable | clique table data structure |
| initialconflictrow | row of constraint that detected the conflict |
| validdepth | minimal depth level at which the initial conflict set is valid |
| nconss | pointer to store the number of generated conflict constraints |
| nconfvars | pointer to store the number of variables in generated conflict constraints |
Definition at line 2961 of file conflict_resolution.c.
References addConflictRows(), assert(), SCIP_ConflictRow::coefquotient, computeSlack(), conflictCalcResMaxsize(), SCIP_ConflictRow::conflictdepth, conflictFirstCand(), conflictInsertConflictRow(), conflictRemoveCand(), SCIP_Conflict::conflictrow, conflictRowClear(), conflictRowCopy(), conflictRowRemoveZeroVars(), conflictRowReplace(), SCIP_ConflictRow::conflicttype, SCIP_Conflict::conflictvarslbs, SCIP_Conflict::conflictvarsubs, EPS, executeResolutionStep(), existsResolvablebdchginfo(), FALSE, freeConflictResources(), getConflictRow(), getQuotLargestSmallestCoef(), getReasonRow(), i, SCIP_ConflictRow::inds, SCIP_ConflictRow::insertdepth, isResolvableBdchg(), SCIP_ConflictRow::lhs, markBdchgAsFixed(), MAX, MIN, SCIP_Conflict::nconflictrows, SCIP_ConflictRow::nnz, SCIP_Conflict::nreslongconfs, NULL, nvars, SCIP_Prob::nvars, SCIP_Tree::pathlen, SCIP_Conflict::reasonrow, SCIP_Conflict::reducedreasonrow, SCIP_ConflictRow::repropdepth, SCIP_Conflict::resolvedconflictrow, SCIP_Bool, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_CONFTYPE_PROPAGATION, SCIP_OKAY, SCIP_Real, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIPbdchginfoGetBoundtype(), SCIPbdchginfoGetDepth(), SCIPbdchginfoGetIdx(), SCIPbdchginfoGetVar(), SCIPdebug, SCIPprobGetVars(), SCIPsetAllocBufferArray, SCIPsetDebugMsgPrint, SCIPsetIsEQ(), SCIPsetIsGE(), SCIPsetIsLE(), SCIPsetIsLT(), SCIPsetIsRelLE(), SCIPsetIsZero(), SCIPtreeGetCurrentDepth(), SCIPtreeGetFocusDepth(), SCIPvarGetName(), SCIPvarGetProbindex(), SCIPvarIsActive(), SCIP_ConflictRow::slack, tightenCoefs(), TRUE, updateBdchgQueue(), SCIP_ConflictRow::validdepth, SCIP_ConflictRow::vals, vars, and weakenConflictRow().
Referenced by SCIPconflictAnalyzeResolution().
| 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 ) |
analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound(), and on success, creates a linear constraint that explains the infeasibility
| conflict | conflict analysis data |
| blkmem | block memory of transformed problem |
| set | global SCIP settings |
| stat | problem statistics |
| transprob | transformed problem |
| origprob | original problem |
| tree | branch and bound tree |
| reopt | reoptimization data structure |
| lp | LP data |
| branchcand | branching candidate storage |
| eventqueue | event queue |
| eventfilter | global event filter |
| cliquetable | clique table data structure |
| initialconflictrow | row of constraint that detected the conflict |
| validdepth | minimal depth level at which the initial conflict set is valid |
| success | pointer to store whether a conflict constraint was created, or NULL |
Definition at line 3336 of file conflict_resolution.c.
References assert(), SCIP_Conflict::bdchgonlyresqueue, conflictAnalyzeResolution(), SCIP_Conflict::conflictrows, SCIP_Conflict::continuousbdchgqueue, FALSE, i, SCIP_Conflict::nconflictrows, SCIP_Conflict::nrescalls, SCIP_Conflict::nresconfconss, SCIP_Conflict::nresconfvariables, SCIP_Conflict::nressuccess, NULL, SCIP_Conflict::resanalyzetime, SCIP_Conflict::resbdchgqueue, SCIP_Bool, SCIP_CALL, SCIP_OKAY, SCIPclockStart(), SCIPclockStop(), SCIPconflictResolutionApplicable(), SCIPconflictRowFree(), SCIPpqueueClear(), SCIPsetDebugMsgPrint, SCIPtreeGetCurrentDepth(), and TRUE.
Referenced by SCIPanalyzeConflict(), and SCIPanalyzeConflictCons().