conflict.c
Go to the documentation of this file.
27 * Given is a set of bound changes that are not allowed being applied simultaneously, because they 28 * render the current node infeasible (e.g. because a single constraint is infeasible in the these 29 * bounds, or because the LP relaxation is infeasible). The goal is to deduce a clause on variables 30 * -- a conflict clause -- representing the "reason" for this conflict, i.e., the branching decisions 31 * or the deductions (applied e.g. in domain propagation) that lead to the conflict. This clause can 34 * conflict was detected by a locally valid constraint. In this case, the resulting conflict clause 113 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/ 143 #define CONFLICTSETSCORE(conflictset) (-(conflictset)->nbdchginfos - 100*(conflictset)->repropdepth \ 158 static SCIP_BDCHGINFO* confgraphcurrentbdchginfo = NULL; /**< currently resolved bound change */ 173 SCIPgmlWriteNode(confgraphfile, (unsigned int)(size_t)idptr, label, nodetype, fillcolor, bordercolor); 187 SCIPgmlWriteArc(confgraphfile, (unsigned int)(size_t)source, (unsigned int)(size_t)target, NULL, color); 189 SCIPgmlWriteEdge(confgraphfile, (unsigned int)(size_t)source, (unsigned int)(size_t)target, NULL, color); 193 /** creates a file to output the current conflict graph into; adds the conflict vertex to the graph */ 243 /** adds a bound change node to the conflict graph and links it to the currently resolved bound change */ 281 (void) SCIPsnprintf(label, SCIP_MAXSTRLEN, "%s %s %g\n[%s:%d]", SCIPvarGetName(SCIPbdchginfoGetVar(bdchginfo)), 318 (void) SCIPsnprintf(label, SCIP_MAXSTRLEN, "conf %d (%d)", confgraphnconflictsets, conflictset->validdepth); 319 confgraphWriteNode((void*)(size_t)confgraphnconflictsets, label, "rectangle", "#ff00ff", "#000000"); 321 confgraphWriteEdge((void*)(size_t)confgraphnconflictsets, conflictset->bdchginfos[i], "#ff00ff"); 341 return strcmp(SCIPconflicthdlrGetName((SCIP_CONFLICTHDLR*)elem1), SCIPconflicthdlrGetName((SCIP_CONFLICTHDLR*)elem2)); 354 SCIP_CALL( SCIPsetConflicthdlrPriority(scip, (SCIP_CONFLICTHDLR*)paramdata, SCIPparamGetInt(param)) ); /*lint !e740*/ 371 SCIPdebugMessage("including conflict handler %s in subscip %p\n", SCIPconflicthdlrGetName(conflicthdlr), (void*)set->scip); 387 SCIP_DECL_CONFLICTCOPY((*conflictcopy)), /**< copy method of conflict handler or NULL if you don't want to copy your plugin into sub-SCIPs */ 391 SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)),/**< solving process initialization method of conflict handler */ 392 SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)),/**< solving process deinitialization method of conflict handler */ 581 SCIP_Real* relaxedbds, /**< array with relaxed bounds which are efficient to create a valid conflict */ 599 SCIP_CALL( conflicthdlr->conflictexec(set->scip, conflicthdlr, node, validnode, bdchginfos, relaxedbds, nbdchginfos, 600 set->conf_seperate, (SCIPnodeGetDepth(validnode) > 0), set->conf_dynamic, set->conf_removable, resolved, result) ); 686 SCIP_DECL_CONFLICTINITSOL((*conflictinitsol))/**< solving process initialization method of conflict handler */ 697 SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol))/**< solving process deinitialization method of conflict handler */ 761 SCIP_CONFLICTHDLR* conflicthdlr, /**< the conflict handler for which all clocks should be enabled or disabled */ 851 /** resizes the array of the temporary bound change informations to be able to store at least num bound change entries */ 875 /** creates a temporary bound change information object that is destroyed after the conflict sets are flushed */ 972 BMScopyMemoryArray((*targetconflictset)->bdchginfos, sourceconflictset->bdchginfos, sourceconflictset->nbdchginfos); 973 BMScopyMemoryArray((*targetconflictset)->relaxedbds, sourceconflictset->relaxedbds, sourceconflictset->nbdchginfos); 974 BMScopyMemoryArray((*targetconflictset)->sortvals, sourceconflictset->sortvals, sourceconflictset->nbdchginfos); 995 BMSfreeBlockMemoryArrayNull(blkmem, &(*conflictset)->bdchginfos, (*conflictset)->bdchginfossize); 996 BMSfreeBlockMemoryArrayNull(blkmem, &(*conflictset)->relaxedbds, (*conflictset)->bdchginfossize); 1001 /** resizes the arrays of the conflict set to be able to store at least num bound change entries */ 1018 SCIP_ALLOC( BMSreallocBlockMemoryArray(blkmem, &conflictset->bdchginfos, conflictset->bdchginfossize, newsize) ); 1019 SCIP_ALLOC( BMSreallocBlockMemoryArray(blkmem, &conflictset->relaxedbds, conflictset->bdchginfossize, newsize) ); 1020 SCIP_ALLOC( BMSreallocBlockMemoryArray(blkmem, &conflictset->sortvals, conflictset->bdchginfossize, newsize) ); 1039 /** check if the bound change info (which is the potential next candidate which is queued) is valid for the current 1040 * conflict analysis; a bound change info can get invalid if after this one was added to the queue, a weaker bound 1041 * change was added to the queue (due the bound widening idea) which immediately makes this bound change redundant; due 1042 * to the priority we did not removed that bound change info since that cost O(log(n)); hence we have to skip/ignore it 1045 * The following situations can occur before for example the bound change info (x >= 3) is potentially popped from the 1048 * Postcondition: the reason why (x >= 3) was queued is that at this time point no lower bound of x was involved yet in 1049 * the current conflict or the lower bound which was involved until then was stronger, e.g., (x >= 2). 1051 * 1) during the time until (x >= 3) gets potentially popped no weaker lower bound was added to the queue, in that case 1052 * the conflictlbcount is valid and conflictlb is 3; that is (var->conflictlbcount == conflict->count && 1055 * 2) a weaker bound change info gets queued (e.g., x >= 4); this bound change is popped before (x >= 3) since it has 1056 * higher priority (which is the time stamp of the bound change info and (x >= 4) has to be done after (x >= 3) 1059 * a) if (x >= 4) is popped and added to the conflict set the conflictlbcount is still valid and conflictlb is at 1060 * most 4; that is (var->conflictlbcount == conflict->count && var->conflictlb >= 4); it follows that any bound 1063 * b) if (x >= 4) is popped and resolved without introducing a new lower bound on x until (x >= 3) is a potentially 1067 * c) if (x >= 4) is popped and resolved and a new lower bound on x (e.g., x >= 2) is introduced until (x >= 3) is 1068 * pooped, the conflictlbcount indicates that bound change is currently present; that is (var->conflictlbcount == 1069 * conflict->count); however the (x >= 3) only has be explained if conflictlb matches that one; that is 1085 /* the bound change info of a binary (domained) variable can never be invalid since the concepts of relaxed bounds 1091 /* check if the bdchginfo is invaild since a tight/weaker bound change was already explained */ 1094 if( var->conflictlbcount != conflict->count || var->conflictlb != SCIPbdchginfoGetNewbound(bdchginfo) ) /*lint !e777*/ 1104 if( var->conflictubcount != conflict->count || var->conflictub != SCIPbdchginfoGetNewbound(bdchginfo) ) /*lint !e777*/ 1137 SCIP_CALL( conflictsetEnsureBdchginfosMem(conflictset, blkmem, set, conflictset->nbdchginfos+1) ); 1139 /* insert the new bound change in the arrays sorted by increasing variable index and by bound type */ 1148 sortval = 2*idx + (int)boundtype; /* first sorting criteria: variable index, second criteria: boundtype */ 1150 /* insert new element into the sorted arrays; if an element exits with the same value insert the new element afterwards 1152 * @todo check if it better (faster) to first search for the position O(log n) and compare the sort values and if 1156 SCIPsortedvecInsertIntPtrReal(sortvals, (void**)bdchginfos, relaxedbds, sortval, (void*)bdchginfo, relaxedbd, &conflictset->nbdchginfos, &pos); 1166 SCIPsortedvecDelPosIntPtrReal(sortvals, (void**)bdchginfos, relaxedbds, pos-1, &conflictset->nbdchginfos); 1171 SCIPsortedvecDelPosIntPtrReal(sortvals, (void**)bdchginfos, relaxedbds, pos, &conflictset->nbdchginfos); 1175 /* both bound change are equivalent; hence, keep the worse relaxed bound and remove one of them */ 1176 relaxedbds[pos-1] = boundtype == SCIP_BOUNDTYPE_LOWER ? MAX(relaxedbds[pos-1], relaxedbd) : MIN(relaxedbds[pos-1], relaxedbd); 1177 SCIPsortedvecDelPosIntPtrReal(sortvals, (void**)bdchginfos, relaxedbds, pos, &conflictset->nbdchginfos); 1225 SCIP_CALL( conflictsetAddBound(conflictset, blkmem, set, bdchginfo, SCIPbdchginfoGetRelaxedBound(bdchginfo)) ); 1229 SCIPdebugMessage("-> bound change info [%d:<%s> %s %g] is invaild -> ignore it\n", SCIPbdchginfoGetDepth(bdchginfo), 1241 SCIP_CALL( conflictsetEnsureBdchginfosMem(conflictset, blkmem, set, confnbdchginfos + nbdchginfos) ); 1266 sortval = 2*idx + (int)boundtype; /* first sorting criteria: variable index, second criteria: boundtype */ 1276 SCIPdebugMessage("-> bound change info [%d:<%s> %s %g] is invaild -> ignore it\n", SCIPbdchginfoGetDepth(bdchginfo), 1315 /* both bound change are equivalent; hence, keep the worse relaxed bound and remove one of them */ 1316 confrelaxedbds[k] = (confsortvals[k] % 2 == 0) ? MAX(confrelaxedbds[k], confrelaxedbds[i]) : MIN(confrelaxedbds[k], confrelaxedbds[i]); 1338 /* the number of bound change infos cannot be decreased, it would mean that the conflict set was not merged 1386 * - if the branching rule operates on variables only, and if all branching variables up to a certain 1387 * depth level are member of the conflict, the conflict constraint can only be violated in the subtree 1388 * of the node at that depth, because in all other nodes, at least one of these branching variables 1390 * - if there is at least one branching variable in a node, we assume, that this branching was performed 1391 * on variables, and that the siblings of this node are disjunct w.r.t. the branching variables' fixings 1425 depth = MIN(depth, currentdepth+1); /* put diving/probing/strong branching changes in this depth level */ 1430 while( conflictset->insertdepth < currentdepth && branchingincluded[conflictset->insertdepth+1] ) 1436 assert(conflictset->validdepth <= conflictset->insertdepth && conflictset->insertdepth <= currentdepth); 1458 /* check, if all bound changes in conflictset2 are also present at least as tight in conflictset1; 1459 * we can stop immediately, if more bound changes are remaining in conflictset2 than in conflictset1 1461 for( i1 = 0, i2 = 0; i2 < conflictset2->nbdchginfos && conflictset1->nbdchginfos - i1 >= conflictset2->nbdchginfos - i2; 1528 /** inserts conflict set into sorted conflictsets array and deletes the conflict set pointer */ 1552 /* if we apply repropagations, the conflict set should be inserted at most at its repropdepth */ 1560 (*conflictset)->validdepth, (*conflictset)->insertdepth, (*conflictset)->conflictdepth, (*conflictset)->repropdepth); 1567 for( pos = 0; pos < conflict->nconflictsets && score < conflict->conflictsetscores[pos]; ++pos ) 1578 /**@todo like in sepastore.c: calculate overlap between conflictsets -> large overlap reduces score */ 1664 branchdir = (boundtype == SCIP_BOUNDTYPE_LOWER ? SCIP_BRANCHDIR_UPWARDS : SCIP_BRANCHDIR_DOWNWARDS); /*lint !e641*/ 1707 branchdir = (boundtype == SCIP_BOUNDTYPE_LOWER ? SCIP_BRANCHDIR_UPWARDS : SCIP_BRANCHDIR_DOWNWARDS); /*lint !e641*/ 1709 SCIP_CALL( SCIPvarIncNActiveConflicts(var, blkmem, set, stat, branchdir, bound, (SCIP_Real)conflictlength) ); 1724 /** check conflict set for redundancy, other conflicts in the same conflict analysis could have led to global reductions 1755 assert(SCIPbdchginfoGetBoundtype(bdchginfos[v]) == SCIP_BOUNDTYPE_LOWER || SCIPsetIsGE(set, relaxedbds[v], SCIPbdchginfoGetNewbound(bdchginfos[v]))); 1756 assert(SCIPbdchginfoGetBoundtype(bdchginfos[v]) == SCIP_BOUNDTYPE_UPPER || SCIPsetIsLE(set, relaxedbds[v], SCIPbdchginfoGetNewbound(bdchginfos[v]))); 1799 SCIP_Bool* redundant /**< did we found a global reduction on a conflict set variable, which makes this conflict redundant */ 1828 /* due to other conflict in the same conflict analysis, this conflict set might have become redundant */ 1849 /* due to multiple conflict sets for one conflict, it can happen, that we already have redundant information in the 1878 SCIPdebugMessage("trivially removed %d redundant of %d variables from conflictset (%p)\n", ntrivialredvars, conflictset->nbdchginfos, (void*)conflictset); 1883 if( conflictset->nbdchginfos > set->conf_maxvarsdetectimpliedbounds || conflictset->nbdchginfos <= 1 ) 1907 assert(SCIPbdchginfoGetBoundtype(bdchginfos[v]) == SCIP_BOUNDTYPE_LOWER || SCIPsetIsGE(set, relaxedbds[v], SCIPbdchginfoGetNewbound(bdchginfos[v]))); 1908 assert(SCIPbdchginfoGetBoundtype(bdchginfos[v]) == SCIP_BOUNDTYPE_UPPER || SCIPsetIsLE(set, relaxedbds[v], SCIPbdchginfoGetNewbound(bdchginfos[v]))); 1910 /* for continuous variables, we can only use the relaxed version of the bounds negation: !(x <= u) -> x >= u */ 1936 /* the literal is satisfied in global bounds (may happen due to weak "negation" of continuous variables) 1951 if( v == nbdchginfos && ((!set->conf_fullshortenconflict && nzeroimpls < 2) || (set->conf_fullshortenconflict && nzeroimpls < nbdchginfos)) ) 1960 SCIPdebugMessage("checking for global reductions and redundant conflict variables(in %s) on conflict:\n", SCIPprobGetName(prob)); 1964 SCIPdebugPrintf("%s %s %g", SCIPvarGetName(SCIPbdchginfoGetVar(bdchginfos[v])), (!boundtypes[v]) ? ">=" : "<=", bounds[v]); 1977 SCIP_CALL( SCIPshrinkDisjunctiveVarSet(set->scip, vars, bounds, boundtypes, redundants, nbdchginfos, nredvars, 1989 SCIPdebugMessage("conflict set (%p) led to %d global bound reductions\n", (void*) conflictset, *nbdchgs); 1996 SCIPdebugMessage("conflict set (%p) is redundant because at least one global reduction, fulfills the conflict constraint\n", (void*)conflictset); 2011 SCIPdebugMessage("remove redundant variable <%s> from conflict set\n", SCIPvarGetName(SCIPbdchginfoGetVar(bdchginfos[v]))); 2025 SCIPdebugMessage("removed %d redundant of %d variables from conflictset (%p)\n", (*nredvars), conflictset->nbdchginfos, (void*)conflictset); 2077 /* try to derive global bound changes and shorten the conflictset by using implication and clique and variable bound 2091 SCIP_CALL( detectImpliedBounds(set, transprob, conflictset, &nbdchgs, &nredvars, &redundant) ); 2097 SCIP_CALL( SCIPdebugCheckConflict(blkmem, set, tree->root, conflictset->bdchginfos, conflictset->relaxedbds, conflictset->nbdchginfos) ); /*lint !e506 !e774*/ 2100 SCIPdebugMessage(" -> conflict set removed %d redundant variables (old nvars %d, new nvars = %d)\n", nredvars, oldnbdchginfos, conflictset->nbdchginfos); 2101 SCIPdebugMessage(" -> conflict set led to %d global bound changes %s(cdpt:%d, fdpt:%d, confdpt:%d, len:%d):\n", 2102 nbdchgs, redundant ? "(conflict became redundant) " : "", SCIPtreeGetCurrentDepth(tree), SCIPtreeGetFocusDepth(tree), 2117 /* in case the conflict set contains only one bound change which is globally valid we apply that bound change 2118 * directly (except if we are in strong branching or diving - in this case a bound change would yield an unflushed LP 2121 * @note A bound change can only be applied if it is are related to the active node or if is a global bound 2122 * change. Bound changes which are related to any other node cannot be handled at point due to the internal 2137 /* for continuous variables, we can only use the relaxed version of the bounds negation: !(x <= u) -> x >= u */ 2147 SCIP_CALL( SCIPnodeAddBoundchg(tree->path[conflictset->validdepth], blkmem, set, stat, transprob, origprob, tree, 2164 tree->path[conflictset->validdepth], conflictset->bdchginfos, conflictset->relaxedbds, conflictset->nbdchginfos, *success, &result) ); 2171 SCIPdebugMessage(" -> call conflict handler <%s> (prio=%d) to create conflict set with %d bounds returned result %d\n", 2172 SCIPconflicthdlrGetName(set->conflicthdlrs[h]), SCIPconflicthdlrGetPriority(set->conflicthdlrs[h]), 2180 /** adds the collected conflict constraints to the corresponding nodes; the best set->conf_maxconss conflict constraints 2181 * are added to the node of their validdepth; additionally (if not yet added, and if repropagation is activated), the 2182 * conflict constraint that triggers the earliest repropagation is added to the node of its validdepth 2220 /* calculate the maximal number of conflict sets to accept, and the maximal size of each accepted conflict set */ 2231 SCIPdebugMessage("flushing %d conflict sets at focus depth %d (maxconflictsets: %d, maxsize: %d)\n", 2252 assert(conflictset->repropdepth <= currentdepth || conflictset->repropdepth == INT_MAX); /* INT_MAX for dive/probing/strong */ 2253 assert(conflictset->conflictdepth <= currentdepth || conflictset->conflictdepth == INT_MAX); /* INT_MAX for dive/probing/strong */ 2263 /* if no conflict bounds exist, the node and its sub tree in the conflict set's valid depth can be 2271 SCIP_CALL( SCIPnodeCutoff(tree->path[conflictset->validdepth], set, stat, tree, reopt, lp, blkmem) ); 2276 /* if the conflict set is too long, use the conflict set only if it decreases the repropagation depth */ 2279 SCIPdebugMessage(" -> conflict set is too long: %d > %d literals\n", conflictset->nbdchginfos, maxsize); 2280 if( set->conf_keepreprop && conflictset->repropagate && conflictset->repropdepth < repropdepth ) 2292 tree, reopt, lp, branchcand, eventqueue, cliquetable, conflictset, conflictset->insertdepth, &success) ); 2296 SCIPdebugMessage(" -> conflict set %d/%d added (cdpt:%d, fdpt:%d, insert:%d, valid:%d, conf:%d, reprop:%d, len:%d):\n", 2297 nconflictsetsused+1, maxconflictsets, SCIPtreeGetCurrentDepth(tree), SCIPtreeGetFocusDepth(tree), 2298 conflictset->insertdepth, conflictset->validdepth, conflictset->conflictdepth, conflictset->repropdepth, 2312 /* reactivate propagation on the first node where one of the new conflict sets trigger a deduction */ 2318 /* if the conflict constraint of smallest repropagation depth was not yet added, insert it now */ 2327 tree, reopt, lp, branchcand, eventqueue, cliquetable, repropconflictset, repropdepth, &success) ); 2331 SCIPdebugMessage(" -> additional reprop conflict set added (cdpt:%d, fdpt:%d, insert:%d, valid:%d, conf:%d, reprop:%d, len:%d):\n", 2333 repropconflictset->insertdepth, repropconflictset->validdepth, repropconflictset->conflictdepth, 2343 SCIPdebugMessage("marked node %p in depth %d to be repropagated due to conflicts found in depth %d\n", 2381 /** returns the total number of literals in conflict constraints that were added to the problem */ 2401 /** returns the total number of conflict constraints that were added globally to the problem */ 2411 /** returns the total number of literals in conflict constraints that were added globally to the problem */ 2441 /** returns the total number of literals in conflict constraints that were added locally to the problem */ 2458 /** returns whether bound change has a valid reason that can be resolved in conflict analysis */ 2488 if( !SCIPbdchgidxIsEarlierNonNull(SCIPbdchginfoGetIdx(bdchginfo1), SCIPbdchginfoGetIdx(bdchginfo2)) ) 2494 /** return TRUE if conflict analysis is applicable; In case the function return FALSE there is no need to initialize the 2533 SCIP_CALL( SCIPpqueueCreate(&(*conflict)->bdchgqueue, set->mem_arraygrowinit, set->mem_arraygrowfac, 2535 SCIP_CALL( SCIPpqueueCreate(&(*conflict)->forcedbdchgqueue, set->mem_arraygrowinit, set->mem_arraygrowfac, 2652 /* increase the conflict counter, such that binary variables of new conflict set and new conflict queue are labeled 2656 if( conflict->count == 0 ) /* make sure, 0 is not a valid conflict counter (may happen due to integer overflow) */ 2666 /* if the conflict score for the next conflict exceeds 1000.0, rescale all history conflict scores */ 2690 /** marks bound to be present in the current conflict and returns whether a bound which is at least as tight was already 2715 /* the variable is already member of the conflict; hence check if the new bound is redundant */ 2718 SCIPdebugMessage("ignoring redundant bound change <%s> >= %g since a stronger lower bound exist <%s> >= %g\n", 2724 SCIPdebugMessage("ignoring redundant bound change <%s> >= %g since this lower bound is already present\n", SCIPvarGetName(var), newbound); 2734 /* remember the lower bound and relaxed bound to allow only better/tighter lower bounds for that variables 2746 /* the variable is already member of the conflict; hence check if the new bound is redundant */ 2749 SCIPdebugMessage("ignoring redundant bound change <%s> <= %g since a stronger upper bound exist <%s> <= %g\n", 2755 SCIPdebugMessage("ignoring redundant bound change <%s> <= %g since this upper bound is already present\n", SCIPvarGetName(var), newbound); 2765 /* remember the upper bound and relaxed bound to allow only better/tighter upper bounds for that variables 2794 assert(SCIPbdchginfoGetBoundtype(bdchginfo) == SCIP_BOUNDTYPE_LOWER || SCIPsetIsGE(set, relaxedbd, SCIPbdchginfoGetNewbound(bdchginfo))); 2795 assert(SCIPbdchginfoGetBoundtype(bdchginfo) == SCIP_BOUNDTYPE_UPPER || SCIPsetIsLE(set, relaxedbd, SCIPbdchginfoGetNewbound(bdchginfo))); 2799 SCIPbdchginfoGetBoundtype(bdchginfo) == SCIP_BOUNDTYPE_LOWER ? ">=" : "<=", SCIPbdchginfoGetNewbound(bdchginfo), 2802 /* mark the bound to be member of the conflict and check if a bound which is at least as tight is already member of 2823 /** returns whether the negation of the given bound change would lead to a globally valid literal */ 2839 && ((boundtype == SCIP_BOUNDTYPE_LOWER && SCIPsetIsFeasGE(set, bound, SCIPvarGetUbGlobal(var))) 2840 || (boundtype == SCIP_BOUNDTYPE_UPPER && SCIPsetIsFeasLE(set, bound, SCIPvarGetLbGlobal(var))))); 2858 assert(SCIPbdchginfoGetBoundtype(bdchginfo) == SCIP_BOUNDTYPE_LOWER || SCIPsetIsGE(set, relaxedbd, SCIPbdchginfoGetNewbound(bdchginfo))); 2859 assert(SCIPbdchginfoGetBoundtype(bdchginfo) == SCIP_BOUNDTYPE_UPPER || SCIPsetIsLE(set, relaxedbd, SCIPbdchginfoGetNewbound(bdchginfo))); 2861 /* mark the bound to be member of the conflict and check if a bound which is at least as tight is already member of 2894 SCIP_BOUNDTYPE* boundtype, /**< pointer to type of bound that was changed: lower or upper bound */ 2941 SCIPdebugMessage(" -> adding bound <%s> %s %.15g(%.15g) [status:%d, type:%d, depth:%d, pos:%d, reason:<%s>, info:%d] to candidates\n", 2950 : (SCIPbdchginfoGetInferProp(bdchginfo) != NULL ? SCIPpropGetName(SCIPbdchginfoGetInferProp(bdchginfo)) 2952 SCIPbdchginfoGetChgtype(bdchginfo) != SCIP_BOUNDCHGTYPE_BRANCHING ? SCIPbdchginfoGetInferInfo(bdchginfo) : -1); 2955 * we even put bound changes without inference information on the queue in order to automatically 2964 assert(boundtype == SCIP_BOUNDTYPE_LOWER ? SCIPsetIsLE(set, relaxedbd, SCIPbdchginfoGetNewbound(bdchginfo)) : SCIPsetIsGE(set, relaxedbd, SCIPbdchginfoGetNewbound(bdchginfo))); 2967 assert(boundtype == SCIP_BOUNDTYPE_LOWER ? SCIPsetIsGT(set, relaxedbd, SCIPbdchginfoGetOldbound(bdchginfo)) : SCIPsetIsLT(set, relaxedbd, SCIPbdchginfoGetOldbound(bdchginfo))); 2976 SCIP_CALL( incVSIDS(var, blkmem, set, stat, boundtype, relaxedbd, set->conf_conflictgraphweight) ); 2989 SCIP_BDCHGIDX* bdchgidx /**< bound change index (time stamp of bound change), or NULL for current time */ 3029 /* if bound of variable was not changed (this means it is still the global bound), we can ignore the conflicting 3037 SCIP_CALL( conflictAddBound(conflict, blkmem, set, stat, var, boundtype, bdchginfo, SCIPbdchginfoGetNewbound(bdchginfo)) ); 3050 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */ 3073 SCIPdebugMessage("ignoring relaxed bound information since variable <%s> is multi-aggregated active\n", SCIPvarGetName(var)); 3085 /* if bound of variable was not changed (this means it is still the global bound), we can ignore the conflicting 3094 /* get the position of the bound change information within the bound change array of the variable */ 3098 /* if the relaxed bound should be ignored, set the relaxed bound to the bound given by the bdchgidx; that ensures 3112 /* due to numericis we compare the relaxed lower bound to the one present at the particular time point and take 3118 /* check if relaxed lower bound is smaller or equal to global lower bound; if so we can ignore the conflicting 3128 /* check if the old lower bound is greater than or equal to relaxed lower bound; if not we found the bound 3136 SCIPdebugMessage("lower bound change %d oldbd=%.15g, newbd=%.15g, depth=%d, pos=%d, redundant=%u\n", 3141 /* if bound change is redundant (this means it now a global bound), we can ignore the conflicting bound */ 3158 /* due to numericis we compare the relaxed upper bound to the one present at the particular time point and take 3164 /* check if relaxed upper bound is greater or equal to global upper bound; if so we can ignore the conflicting 3174 /* check if the old upper bound is smaller than or equal to the relaxed upper bound; if not we found the 3182 SCIPdebugMessage("upper bound change %d oldbd=%.15g, newbd=%.15g, depth=%d, pos=%d, redundant=%u\n", 3187 /* if bound change is redundant (this means it now a global bound), we can ignore the conflicting bound */ 3199 SCIP_CALL( conflictAddBound(conflict, blkmem, set, stat, var, boundtype, bdchginfo, relaxedbd) ); 3204 /** checks if the given variable is already part of the current conflict set or queued for resolving with the same or 3212 SCIP_BDCHGIDX* bdchgidx, /**< bound change index (time stamp of bound change), or NULL for current time */ 3221 if( SCIPvarGetStatus(var) == SCIP_VARSTATUS_FIXED || SCIPvarGetStatus(var) == SCIP_VARSTATUS_MULTAGGR ) 3264 /** returns the conflict lower bound if the variable is present in the current conflict set; otherwise the global lower 3281 /** returns the conflict upper bound if the variable is present in the current conflict set; otherwise the global upper 3319 /* mark the bound change to be no longer in the conflict (it will be either added again to the conflict set or 3360 SCIPdebugMessage("bound change info [%d:<%s> %s %g] is invaild -> pop it from the force queue\n", SCIPbdchginfoGetDepth(bdchginfo), 3379 SCIPdebugMessage("bound change info [%d:<%s> %s %g] is invaild -> pop it from the queue\n", SCIPbdchginfoGetDepth(bdchginfo), 3396 /** adds the current conflict set (extended by all remaining bound changes in the queue) to the pool of conflict sets */ 3438 assert(0 <= conflict->conflictset->validdepth && conflict->conflictset->validdepth <= currentdepth); 3445 /* create a copy of the current conflict set, allocating memory for the additional elements of the queue */ 3451 SCIPdebugMessage("adding %d variables from the queue as temporary conflict variables\n", nbdchginfos); 3452 SCIP_CALL( conflictsetAddBounds(conflict, conflictset, blkmem, set, bdchginfos, nbdchginfos) ); 3456 assert(conflictset->validdepth <= conflictset->insertdepth && conflictset->insertdepth <= currentdepth); 3457 SCIPdebugMessage(" -> conflict with %d literals found at depth %d is active in depth %d and valid in depth %d\n", 3463 if( (diving || conflictset->insertdepth < currentdepth) && conflictset->insertdepth <= focusdepth ) 3465 /* if the conflict should not be located only in the subtree where it is useful, put it to its valid depth level */ 3474 conflictset->bdchginfos, conflictset->relaxedbds, conflictset->nbdchginfos) ); /*lint !e506 !e774*/ 3491 * current minimal valid depth level, because this depth level is the topmost level to add the conflict 3531 SCIPdebugMessage("processing next conflicting bound (depth: %d, valid depth: %d, bdchgtype: %s [%s], vartype: %d): [<%s> %s %g(%g)]\n", 3548 SCIPdebugPrintf(" [%d:<%s> %s %g(%g)]", SCIPbdchginfoGetDepth(conflict->conflictset->bdchginfos[i]), 3550 SCIPbdchginfoGetBoundtype(conflict->conflictset->bdchginfos[i]) == SCIP_BOUNDTYPE_LOWER ? ">=" : "<=", 3551 SCIPbdchginfoGetNewbound(conflict->conflictset->bdchginfos[i]), conflict->conflictset->relaxedbds[i]); 3559 SCIPdebugPrintf(" [%d:<%s> %s %g(%g)]", SCIPbdchginfoGetDepth(info), SCIPvarGetName(SCIPbdchginfoGetVar(info)), 3560 bdchginfoIsInvalid(conflict, info) ? "<!>" : SCIPbdchginfoGetBoundtype(info) == SCIP_BOUNDTYPE_LOWER ? ">=" : "<=", 3569 SCIPdebugPrintf(" [%d:<%s> %s %g(%g)]", SCIPbdchginfoGetDepth(info), SCIPvarGetName(SCIPbdchginfoGetVar(info)), 3570 bdchginfoIsInvalid(conflict, info) ? "<!>" : SCIPbdchginfoGetBoundtype(info) == SCIP_BOUNDTYPE_LOWER ? ">=" : "<=", 3578 * current minimal valid depth level (which is initialized with the valid depth level of the initial 3579 * conflict set), because this depth level is the topmost level to add the conflict constraint to anyways 3594 /* resolve bound change by asking the constraint that infered the bound to put all bounds that were 3603 SCIPdebugMessage("resolving bound <%s> %s %g(%g) [status:%d, type:%d, depth:%d, pos:%d]: <%s> %s %g [cons:<%s>(%s), info:%d]\n", 3616 /* in case the inference variables is not an active variables, we need to transform the relaxed bound */ 3625 || (SCIPvarGetStatus(infervar) == SCIP_VARSTATUS_MULTAGGR && SCIPvarGetMultaggrNVars(infervar) == 1)); 3640 SCIP_CALL( SCIPconsResolvePropagation(infercons, set, infervar, inferinfo, inferboundtype, bdchgidx, relaxedbd, &result) ); 3654 /* resolve bound change by asking the propagator that infered the bound to put all bounds that were 3663 SCIPdebugMessage("resolving bound <%s> %s %g(%g) [status:%d, depth:%d, pos:%d]: <%s> %s %g [prop:<%s>, info:%d]\n", 3673 SCIP_CALL( SCIPpropResolvePropagation(inferprop, set, infervar, inferinfo, inferboundtype, bdchgidx, relaxedbd, &result) ); 3694 /* in case the bound change was not resolved, the conflict queues should have the same size (contents) */ 3701 /** if only one conflicting bound change of the last depth level was used, and if this can be resolved, 3702 * creates GRASP-like reconvergence conflict constraints in the conflict graph up to the branching variable of this 3717 int* nreconvliterals /**< pointer to store the number of literals generated reconvergence constraints */ 3737 /* check, whether local constraints are allowed; however, don't generate reconvergence constraints that are only valid 3746 /* for each succeeding UIP pair of the last depth level, create one reconvergence constraint */ 3748 while( uip != NULL && SCIPbdchginfoGetDepth(uip) == SCIPbdchginfoGetDepth(firstuip) && bdchginfoIsResolvable(uip) ) 3761 SCIPvarGetName(SCIPbdchginfoGetVar(uip)), SCIPbdchginfoGetBoundtype(uip) == SCIP_BOUNDTYPE_LOWER ? ">=" : "<=", 3769 * for reconvergence constraints for continuous variables we can only use the "negation" !(x <= u) == (x >= u); 3770 * during conflict analysis, we treat a continuous bound "x >= u" in the conflict set as "x > u", and in the 3782 oppositeuipboundtype, oppositeuipboundtype == SCIP_BOUNDTYPE_LOWER ? SCIP_REAL_MIN : SCIP_REAL_MAX, 3805 /* remove currently processed candidate and get next conflicting bound from the conflict candidate queue before 3806 * we remove the candidate we have to collect the relaxed bound since removing the candidate from the queue 3816 assert(nextbdchginfo == NULL || SCIPbdchginfoGetDepth(bdchginfo) >= SCIPbdchginfoGetDepth(nextbdchginfo) 3820 /* bound changes that are higher in the tree than the valid depth of the conflict can be ignored; 3864 assert(conflict->conflictset->nbdchginfos >= 1); /* starting UIP is already member of the conflict set */ 3866 /* if this is the first variable of the conflict set besides the current starting UIP, it is the next 3883 /* get next conflicting bound from the conflict candidate queue (this does not need to be nextbdchginfo, because 3891 /* if only one propagation was resolved, the reconvergence constraint is already member of the constraint set 3904 conflict->conflictset->nbdchginfos, conflict->bdchgqueue, conflict->forcedbdchgqueue) ); /*lint !e506 !e774*/ 3906 SCIPdebugMessage("creating reconvergence constraint from UIP <%s> to UIP <%s> in depth %d with %d literals after %d resolutions\n", 3911 SCIP_CALL( conflictAddConflictset(conflict, blkmem, set, stat, tree, validdepth, diving, FALSE, 3920 /* clear the conflict candidate queue and the conflict set (to make sure, oppositeuip is not referenced anymore) */ 3929 /** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound() and 3930 * SCIPconflictAddRelaxedBound(), and on success, calls the conflict handlers to create a conflict constraint out of 3943 SCIP_Bool mustresolve, /**< should the conflict set only be used, if a resolution was applied? */ 3945 int* nliterals, /**< pointer to store the number of literals in generated conflict constraints */ 3947 int* nreconvliterals /**< pointer to store the number of literals generated reconvergence constraints */ 3981 /* if we must resolve at least one bound change, find the first UIP at least in the last depth level */ 3985 SCIPdebugMessage("analyzing conflict with %d+%d conflict candidates and starting conflict set of size %d in depth %d (resolvedepth=%d)\n", 3994 /* check, whether local conflicts are allowed; however, don't generate conflict constraints that are only valid in the 4001 /* allocate temporary memory for storing first UIPs (in each depth level, at most two bound changes can be flagged 4015 NULL, conflict->conflictset->bdchginfos, conflict->conflictset->relaxedbds, conflict->conflictset->nbdchginfos, 4037 assert(SCIPbdchginfoGetPos(bdchginfo) < (int)tree->path[bdchgdepth]->domchg->domchgbound.nboundchgs); 4038 assert(tree->path[bdchgdepth]->domchg->domchgbound.boundchgs[SCIPbdchginfoGetPos(bdchginfo)].var 4040 assert(tree->path[bdchgdepth]->domchg->domchgbound.boundchgs[SCIPbdchginfoGetPos(bdchginfo)].newbound 4043 ? SCIPvarGetLbGlobal(SCIPbdchginfoGetVar(bdchginfo)) : SCIPvarGetUbGlobal(SCIPbdchginfoGetVar(bdchginfo))) 4045 assert((SCIP_BOUNDTYPE)tree->path[bdchgdepth]->domchg->domchgbound.boundchgs[SCIPbdchginfoGetPos(bdchginfo)].boundtype 4053 lastconsresoldepth = bdchgdepth; /* all intermediate depth levels consisted of only unresolved bound changes */ 4054 else if( bdchgdepth < lastconsresoldepth && (set->conf_interconss == -1 || *nconss < set->conf_interconss) ) 4060 SCIPdebugMessage("creating intermediate conflictset after %d resolutions up to depth %d (valid at depth %d): %d conflict bounds, %d bounds in queue\n", 4075 /* remove currently processed candidate and get next conflicting bound from the conflict candidate queue before 4076 * we remove the candidate we have to collect the relaxed bound since removing the candidate from the queue 4085 assert(nextbdchginfo == NULL || SCIPbdchginfoGetDepth(bdchginfo) >= SCIPbdchginfoGetDepth(nextbdchginfo) 4088 /* we don't need to resolve bound changes that are already active in the valid depth of the current conflict set, 4089 * because the conflict set can only be added locally at the valid depth, and all bound changes applied in this 4090 * depth or earlier can be removed from the conflict constraint, since they are already applied in the constraint's 4154 bdchginfo, conflict->conflictset->bdchginfos, conflict->conflictset->relaxedbds, conflict->conflictset->nbdchginfos, 4157 /* get next conflicting bound from the conflict candidate queue (this needs not to be nextbdchginfo, because 4175 SCIP_CALL( conflictAddConflictset(conflict, blkmem, set, stat, tree, validdepth, diving, TRUE, &success, &nlits) ); 4210 /** analyzes conflicting bound changes that were added with calls to SCIPconflictAddBound(), and on success, calls the 4248 SCIPdebugMessage("analyzing conflict after infeasible propagation in depth %d\n", SCIPtreeGetCurrentDepth(tree)); 4302 /** gets number of calls to propagation conflict analysis that yield at least one conflict constraint */ 4322 /** gets total number of literals in conflict constraints created in propagation conflict analysis */ 4342 /** gets total number of literals in reconvergence constraints created in propagation conflict analysis */ 4396 /** adds removal of row's side to side change arrays; finite sides are only replaced by near infinite sides, such 4431 SCIP_CALL( ensureSidechgsSize(set, sidechginds, sidechgoldlhss, sidechgoldrhss, sidechgnewlhss, sidechgnewrhss, 4474 SCIP_LPBDCHGS* oldlpbdchgs, /**< old LP bound changes used for reset the LP bound change, or NULL */ 4475 SCIP_LPBDCHGS* relaxedlpbdchgs, /**< relaxed LP bound changes used for reset the LP bound change, or NULL */ 4476 SCIP_LPI* lpi /**< pointer to LPi to access infinity of LP solver; necessary to set correct value */ 4507 assert((SCIPlpiIsInfinity(lpi, -oldlpbdchgs->bdchglbs[oldlpbdchgs->bdchgcolinds[c]]) && SCIPsetIsInfinity(set, -SCIPvarGetLbLP(var, set))) || 4508 SCIPsetIsEQ(set, oldlpbdchgs->bdchglbs[oldlpbdchgs->bdchgcolinds[c]], SCIPvarGetLbLP(var, set))); 4509 assert((SCIPlpiIsInfinity(lpi, oldlpbdchgs->bdchgubs[oldlpbdchgs->bdchgcolinds[c]]) && SCIPsetIsInfinity(set, SCIPvarGetUbLP(var, set))) || 4510 SCIPsetIsEQ(set, oldlpbdchgs->bdchgubs[oldlpbdchgs->bdchgcolinds[c]], SCIPvarGetUbLP(var, set))); 4536 relaxedlpbdchgs->bdchglbs[idx] = SCIPsetIsInfinity(set, -newlb) ? -SCIPlpiInfinity(lpi) : newlb; 4579 /** adds variable to candidate list, if the current best bound corresponding to the proof coefficient is local; 4580 * returns the array position in the candidate list, where the new candidate was inserted, or -1 if the 4583 * - prefer bound changes that have been applied deeper in the tree, to get a more global conflict 4584 * - prefer variables with small Farkas coefficient to get rid of as many bound changes as possible 4591 int lbchginfopos, /**< positions of currently active lower bound change information in variable's array */ 4592 int ubchginfopos, /**< positions of currently active upper bound change information in variable's array */ 4599 SCIP_Real** proofactdeltas, /**< pointer to proof activity increase array for undoing bound changes */ 4628 /* in the infeasibility or dual bound proof, the variable's bound is chosen to maximize the proof's activity */ 4631 assert(ubchginfopos >= 0); /* otherwise, undoBdchgsProof() should already have relaxed the local bound */ 4653 assert(lbchginfopos >= 0); /* otherwise, undoBdchgsProof() should already have relaxed the local bound */ 4690 SCIP_CALL( ensureCandsSize(set, cands, candscores, newbounds, proofactdeltas, candssize, (*ncands)+1) ); 4696 SCIPdebugMessage(" -> local <%s> %s %g, relax <%s> %s %g, proofcoef=%g, dpt=%d, resolve=%u, delta=%g, score=%g\n", 4718 /** after changing the global bound of a variable, the bdchginfos that are now redundant are replaced with 4719 * oldbound = newbound = global bound; if the current bdchginfo is of such kind, the bound is equal to the 4720 * global bound and we can ignore it by installing a -1 as the corresponding bound change info position 4736 == (var->lbchginfos[*lbchginfopos].oldbound == var->lbchginfos[*lbchginfopos].newbound)); /*lint !e777*/ 4739 == (var->ubchginfos[*ubchginfopos].oldbound == var->ubchginfos[*ubchginfopos].newbound)); /*lint !e777*/ 4741 if( *lbchginfopos >= 0 && *lbchginfopos < var->nlbchginfos && var->lbchginfos[*lbchginfopos].redundant ) 4746 if( *ubchginfopos >= 0 && *ubchginfopos < var->nubchginfos && var->ubchginfos[*ubchginfopos].redundant ) 4764 int* lbchginfoposs, /**< positions of currently active lower bound change information in variables' arrays */ 4765 int* ubchginfoposs, /**< positions of currently active upper bound change information in variables' arrays */ 4766 SCIP_LPBDCHGS* oldlpbdchgs, /**< old LP bound changes used for reset the LP bound change, or NULL */ 4767 SCIP_LPBDCHGS* relaxedlpbdchgs, /**< relaxed LP bound changes used for reset the LP bound change, or NULL */ 4768 SCIP_Bool* resolve, /**< pointer to store whether the changed LP should be resolved again, or NULL */ 4769 SCIP_LPI* lpi /**< pointer to LPi to access infinity of LP solver; necessary to set correct values */ 4798 /* calculate the order in which the bound changes are tried to be undone, and relax all bounds if this doesn't 4814 /* after changing the global bound of a variable, the bdchginfos that are now redundant are replaced with 4815 * oldbound = newbound = global bound; if the current bdchginfo is of such kind, the bound is equal to the 4854 SCIP_CALL( addBdchg(set, var, curvarlbs[v], curvarubs[v], oldlpbdchgs, relaxedlpbdchgs, lpi) ); 4861 prooflhs, proofact, &cands, &candscores, &newbounds, &proofactdeltas, &candssize, &ncands, 0) ); 4872 assert((lbchginfoposs[SCIPvarGetProbindex(cands[i])] >= 0) != (ubchginfoposs[SCIPvarGetProbindex(cands[i])] >= 0)); 4874 /* when relaxing a constraint we still need to stay infeasible; therefore we need to do the comparison in 4875 * feasibility tolerance because if 'prooflhs' is (feas-))equal to 'proofact + proofactdeltas[i]' it would mean 4884 SCIPdebugMessage(" -> relaxing variable <%s>[%g,%g] to [%g,%g]: proofcoef=%g, %g <= %g + %g\n", 4914 SCIP_CALL( addBdchg(set, cands[i], curvarlbs[v], curvarubs[v], oldlpbdchgs, relaxedlpbdchgs, lpi) ); 4920 /* after changing the global bound of a variable, the bdchginfos that are now redundant are replaced with 4921 * oldbound = newbound = global bound; if the current bdchginfo is of such kind, the bound is equal to the 4929 SCIP_CALL( addCand(set, currentdepth, cands[i], lbchginfoposs[v], ubchginfoposs[v], proofcoefs[v], 4930 prooflhs, proofact, &cands, &candscores, &newbounds, &proofactdeltas, &candssize, &ncands, i+1) ); 4944 /* because calculations might cancel out some values, we stop the infeasibility analysis if a value is bigger than 4958 int* lbchginfoposs, /**< positions of currently active lower bound change information in variables' arrays */ 4959 int* ubchginfoposs, /**< positions of currently active upper bound change information in variables' arrays */ 4960 SCIP_LPBDCHGS* oldlpbdchgs, /**< old LP bound changes used for reset the LP bound change, or NULL */ 4961 SCIP_LPBDCHGS* relaxedlpbdchgs, /**< relaxed LP bound changes used for reset the LP bound change, or NULL */ 5001 /* if solve for some reason did not produce a dual ray, e.g. because of numerical instabilities, abort conflict analysis */ 5019 if( retcode == SCIP_LPERROR ) /* on an error in the LP solver, just abort the conflict analysis */ 5100 /* calculate the current Farkas activity, always using the best bound w.r.t. the Farkas coefficient */ 5112 assert((SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN && SCIPcolGetLPPos(SCIPvarGetCol(var)) >= 0) 5122 assert((SCIPvarGetStatus(var) == SCIP_VARSTATUS_COLUMN && SCIPcolGetLPPos(SCIPvarGetCol(var)) >= 0) 5133 /* check, if the Farkas row is still violated (using current bounds and ignoring local rows) */ 5138 curvarlbs, curvarubs, lbchginfoposs, ubchginfoposs, oldlpbdchgs, relaxedlpbdchgs, resolve, lpi) ); 5142 /* resolving does not make sense: the old dual ray is still valid -> resolving will not change the solution */ 5155 /** analyzes an LP exceeding the objective limit and undoes additional bound changes while staying beyond the 5166 int* lbchginfoposs, /**< positions of currently active lower bound change information in variables' arrays */ 5167 int* ubchginfoposs, /**< positions of currently active upper bound change information in variables' arrays */ 5168 SCIP_LPBDCHGS* oldlpbdchgs, /**< old LP bound changes used for reset the LP bound change, or NULL */ 5169 SCIP_LPBDCHGS* relaxedlpbdchgs, /**< relaxed LP bound changes used for reset the LP bound change, or NULL */ 5209 SCIPdebugMessage("undoing bound changes in LP exceeding cutoff: cutoff=%g\n", lp->cutoffbound); 5232 if( retcode == SCIP_LPERROR ) /* on an error in the LP solver, just abort the conflict analysis */ 5246 * Define the set X := {x | lhs <= Ax <= rhs, lb <= x <= ub, c^Tx <= c*}, with c* being the current primal bound. 5261 /* use a slightly tighter cutoff bound, because solutions with equal objective value should also be declared 5268 * process rows: add z^T{lhs,rhs} to the dual row's left hand side, and -(y-z)^TA to the dual row's coefficients 5283 if( (SCIPsetIsInfinity(set, -row->lhs) && dualsols[r] > 0.0) || (SCIPsetIsInfinity(set, row->rhs) && dualsols[r] < 0.0) ) 5290 /* local rows add up to the dual row's coefficients (because z_i == 0 => -(y_i - z_i) == -y_i), 5306 /* add minimal value to dual row's left hand side: z_i == y_i > 0 -> lhs, z_i == y_i < 0 -> rhs */ 5318 SCIProwGetName(row), row->lhs - row->constant, row->rhs - row->constant, dualsols[r], duallhs); 5323 * process variables: subtract reduced costs from dual row's coefficients, and calculate current maximal dual 5351 if( (SCIPsetIsGT(set, primsols[c], curvarlbs[v]) && SCIPsetIsDualfeasPositive(set, varredcosts[v])) 5352 || (SCIPsetIsLT(set, primsols[c], curvarubs[v]) && SCIPsetIsDualfeasNegative(set, varredcosts[v])) ) 5384 curvarlbs, curvarubs, lbchginfoposs, ubchginfoposs, oldlpbdchgs, relaxedlpbdchgs, resolve, lpi) ); 5401 /** applies conflict analysis starting with given bound changes, that could not be undone during previous 5413 int* lbchginfoposs, /**< positions of currently active lower bound change information in variables' arrays */ 5414 int* ubchginfoposs, /**< positions of currently active upper bound change information in variables' arrays */ 5416 int* nliterals, /**< pointer to store the number of literals in generated conflict constraints */ 5418 int* nreconvliterals /**< pointer to store the number of literals generated reconvergence constraints */ 5470 assert((lbchginfoposs[v] == var->nlbchginfos) != (ubchginfoposs[v] == var->nubchginfos)); /* only one can be tight in the dual! */ 5471 assert(lbchginfoposs[v] < var->nlbchginfos || SCIPvarGetLbLP(var, set) > SCIPvarGetLbLocal(var)); 5472 assert(ubchginfoposs[v] < var->nubchginfos || SCIPvarGetUbLP(var, set) < SCIPvarGetUbLocal(var)); 5501 SCIP_CALL( incVSIDS(var, blkmem, set, stat, SCIPbdchginfoGetBoundtype(bdchginfo), relaxedbd, set->conf_conflictgraphweight) ); 5509 SCIP_CALL( conflictAddBound(conflict, blkmem, set, stat, var, SCIP_BOUNDTYPE_LOWER, &var->lbchginfos[lbchginfoposs[v]], SCIPbdchginfoGetNewbound(&var->lbchginfos[lbchginfoposs[v]])) ); 5515 SCIP_CALL( conflictAddBound(conflict, blkmem, set, stat, var, SCIP_BOUNDTYPE_UPPER, &var->ubchginfos[ubchginfoposs[v]], SCIPbdchginfoGetNewbound(&var->ubchginfos[ubchginfoposs[v]])) ); 5549 int* nliterals, /**< pointer to store the number of literals in generated conflict constraints */ 5551 int* nreconvliterals, /**< pointer to store the number of literals generated reconvergence constraints */ 5552 SCIP_Bool marklpunsolved /**< whether LP should be marked unsolved after analysis (needed for strong branching) */ 5573 assert(SCIPprobAllColsInLP(transprob, set, lp)); /* LP conflict analysis is only valid, if all variables are known */ 5593 assert(SCIPlpiIsPrimalInfeasible(lpi) || SCIPlpiIsObjlimExc(lpi) || SCIPlpiIsDualFeasible(lpi)); 5603 * With FASTMIP setting, CPLEX does not apply the final pivot to reach the dual solution exceeding the objective 5604 * limit. Therefore, we have to either turn off FASTMIP and resolve the problem or continue solving it without 5605 * objective limit for at least one iteration. It seems that the strategy to continue with FASTMIP for one 5639 SCIPdebugMessage(" -> resolved objlim exceeding LP in %d iterations (total: %" SCIP_LONGINT_FORMAT ") (infeasible:%u, objlim: %u, optimal:%u)\n", 5642 valid = (SCIPlpiIsObjlimExc(lpi) || SCIPlpiIsPrimalInfeasible(lpi) || SCIPlpiIsDualFeasible(lpi)); 5654 assert(SCIPlpiIsPrimalInfeasible(lpi) || SCIPlpiIsObjlimExc(lpi) || SCIPlpiIsDualFeasible(lpi)); 5665 SCIPdebugMessage(" -> LP does not exceed the cutoff bound: obj=%g, cutoff=%g\n", objval, lp->lpiuobjlim); 5670 SCIPdebugMessage(" -> LP exceeds the cutoff bound: obj=%g, cutoff=%g\n", objval, lp->lpiuobjlim); 5674 SCIPdebugMessage("analyzing conflict on infeasible LP (infeasible: %u, objlimexc: %u, optimal:%u) in depth %d (diving: %u)\n", 5675 SCIPlpiIsPrimalInfeasible(lpi), SCIPlpiIsObjlimExc(lpi), SCIPlpiIsOptimal(lpi), SCIPtreeGetCurrentDepth(tree), diving); 5681 SCIPdebugMessage(" -> objective limit in LP solver: %g (in LP: %g)\n", uobjlim, lp->lpiuobjlim); 5689 /* get temporary memory for remembering variables' current bounds and corresponding bound change information 5697 /* the following algorithm is used to find a subset of changed bounds leading to an infeasible LP: 5737 /* the bound in the diving LP was relaxed -> the LP is not a subproblem of the current node -> abort! */ 5738 /**@todo we could still analyze such a conflict, but we would have to take care with our data structures */ 5745 /* the bound in the diving LP was relaxed -> the LP is not a subproblem of the current node -> abort! */ 5746 /**@todo we could still analyze such a conflict, but we would have to take care with our data structures */ 5768 SCIP_CALL( undoBdchgsDualfarkas(set, transprob, lp, currentdepth, curvarlbs, curvarubs, lbchginfoposs, 5774 SCIP_CALL( undoBdchgsDualsol(set, transprob, lp, currentdepth, curvarlbs, curvarubs, lbchginfoposs, ubchginfoposs, 5836 SCIP_CALL( addSideRemoval(set, rows[r], lpiinfinity, &sidechginds, &sidechgoldlhss, &sidechgoldrhss, 5858 SCIPdebugMessage("infeasible LP conflict analysis loop %d (changed col bounds: %d)\n", nloops, relaxedlpbdchgs->nbdchgs); 5864 SCIPdebugMessage(" -> applying %d bound changes to the LP solver\n", relaxedlpbdchgs->nbdchgs); 5894 SCIPdebugMessage(" -> resolved LP in %d iterations (total: %" SCIP_LONGINT_FORMAT ") (infeasible:%u)\n", 5927 SCIPdebugMessage(" -> finished infeasible LP conflict analysis loop %d (iter: %d, nbdchgs: %d)\n", 5978 SCIP_CALL( conflictAnalyzeRemainingBdchgs(conflict, blkmem, set, stat, transprob, tree, diving, 5991 SCIP_CALL( SCIPconflictFlushConss(conflict, blkmem, set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue, cliquetable) ); 5996 /** analyzes an infeasible LP to find out the bound changes on variables that were responsible for the infeasibility; 5997 * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating 6027 assert(SCIPprobAllColsInLP(transprob, set, lp)); /* LP conflict analysis is only valid, if all variables are known */ 6039 SCIPdebugMessage("analyzing conflict on infeasible LP in depth %d (solstat: %d, objchanged: %u)\n", 6047 SCIP_CALL( conflictAnalyzeLP(conflict, blkmem, set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue, 6048 cliquetable, SCIPlpDiving(lp), &iterations, &nconss, &nliterals, &nreconvconss, &nreconvliterals, TRUE) ); 6064 /** analyzes a bound exceeding LP to find out the bound changes on variables that were responsible for exceeding the 6066 * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating 6097 assert(SCIPprobAllColsInLP(transprob, set, lp)); /* LP conflict analysis is only valid, if all variables are known */ 6117 SCIP_CALL( conflictAnalyzeLP(conflict, blkmem, set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue, 6118 cliquetable, SCIPlpDiving(lp), &iterations, &nconss, &nliterals, &nreconvconss, &nreconvliterals, TRUE) ); 6134 /** analyzes an infeasible or bound exceeding LP to find out the bound changes on variables that were responsible for the 6136 * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating 6166 /* in rare cases, it might happen that the solution stati of the LP and the LPI are out of sync; in particular this 6167 * happens when a new incumbent which cuts off the current node is found during the LP solving loop; in this case the 6168 * LP has status objlimit, but if diving has been used, the LPI only has the basis information, but is not solved 6177 assert( SCIPlpGetSolstat(lp) == SCIP_LPSOLSTAT_INFEASIBLE || SCIPlpGetSolstat(lp) == SCIP_LPSOLSTAT_OBJLIMIT 6224 SCIP_CALL( conflictAnalyzeInfeasibleLP(conflict, blkmem, set, stat, transprob, origprob, tree, reopt, lp, 6229 SCIP_CALL( conflictAnalyzeBoundexceedingLP(conflict, blkmem, set, stat, transprob, origprob, tree, reopt, lp, 6298 /** gets number of calls to infeasible LP conflict analysis that yield at least one conflict constraint */ 6318 /** gets total number of literals in conflict constraints created in infeasible LP conflict analysis */ 6338 /** gets total number of literals in reconvergence constraints created in infeasible LP conflict analysis */ 6378 /** gets number of calls to bound exceeding LP conflict analysis that yield at least one conflict constraint */ 6398 /** gets total number of literals in conflict constraints created in bound exceeding LP conflict analysis */ 6408 /** gets number of reconvergence constraints detected in bound exceeding LP conflict analysis */ 6418 /** gets total number of literals in reconvergence constraints created in bound exceeding LP conflict analysis */ 6460 SCIP_Bool* downconflict, /**< pointer to store whether a conflict constraint was created for an 6484 assert(SCIPprobAllColsInLP(transprob, set, lp)); /* LP conflict analysis is only valid, if all variables are known */ 6530 SCIPdebugMessage("analyzing conflict on infeasible downwards strongbranch for variable <%s>[%g,%g] in depth %d\n", 6531 SCIPvarGetName(SCIPcolGetVar(col)), SCIPvarGetLbLocal(SCIPcolGetVar(col)), SCIPvarGetUbLocal(SCIPcolGetVar(col)), 6561 /* perform conflict analysis on infeasible LP; last parameter guarantees status 'solved' on return */ 6562 SCIP_CALL( conflictAnalyzeLP(conflict, blkmem, set, stat, transprob, origprob, tree, reopt, lp, branchcand, 6563 eventqueue, cliquetable, TRUE, &iter, &nconss, &nliterals, &nreconvconss, &nreconvliterals, FALSE) ); 6592 SCIPdebugMessage("analyzing conflict on infeasible upwards strongbranch for variable <%s>[%g,%g] in depth %d\n", 6593 SCIPvarGetName(SCIPcolGetVar(col)), SCIPvarGetLbLocal(SCIPcolGetVar(col)), SCIPvarGetUbLocal(SCIPcolGetVar(col)), 6623 /* perform conflict analysis on infeasible LP; last parameter guarantees status 'solved' on return */ 6624 SCIP_CALL( conflictAnalyzeLP(conflict, blkmem, set, stat, transprob, origprob, tree, reopt, lp, branchcand, 6625 eventqueue, cliquetable, TRUE, &iter, &nconss, &nliterals, &nreconvconss, &nreconvliterals, FALSE) ); 6696 /** gets number of calls to infeasible strong branching conflict analysis that yield at least one conflict constraint */ 6706 /** gets number of conflict constraints detected in infeasible strong branching conflict analysis */ 6716 /** gets total number of literals in conflict constraints created in infeasible strong branching conflict analysis */ 6726 /** gets number of reconvergence constraints detected in infeasible strong branching conflict analysis */ 6736 /** gets total number of literals in reconvergence constraints created in infeasible strong branching conflict analysis */ 6763 /** analyzes a pseudo solution with objective value exceeding the current cutoff to find out the bound changes on 6765 * on success, calls standard conflict analysis with the responsible variables as starting conflict set, thus creating 6832 * In the local subproblem, this row is violated. We want to undo bound changes while still keeping the 6836 /* get temporary memory for remembering variables' current bounds and corresponding bound change information 6847 /* use a slightly tighter cutoff bound, because solutions with equal objective value should also be declared 6852 /* store the objective values as infeasibility proof coefficients, and recalculate the pseudo activity */ 6868 SCIPdebugMessage(" -> recalculated pseudo infeasibility proof: %g <= %g\n", pseudolhs, pseudoact); 6879 SCIP_CALL( undoBdchgsProof(set, transprob, SCIPtreeGetCurrentDepth(tree), pseudocoefs, pseudolhs, pseudoact, 6902 SCIP_CALL( SCIPconflictFlushConss(conflict, blkmem, set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue, cliquetable) ); 6930 /** gets number of calls to pseudo solution conflict analysis that yield at least one conflict constraint */ 6950 /** gets total number of literals in conflict constraints created in pseudo solution conflict analysis */ 6970 /** gets total number of literals in reconvergence constraints created in pseudo solution conflict analysis */ 6982 SCIP_CONFLICT* conflict, /**< the conflict analysis data for which all clocks should be enabled or disabled */
void SCIPconflictEnableOrDisableClocks(SCIP_CONFLICT *conflict, SCIP_Bool enable) Definition: conflict.c:6981 SCIP_Longint SCIPconflictGetNStrongbranchSuccess(SCIP_CONFLICT *conflict) Definition: conflict.c:6697 static SCIP_Bool bdchginfoIsResolvable(SCIP_BDCHGINFO *bdchginfo) Definition: conflict.c:2460 SCIP_Real SCIPbdchginfoGetRelaxedBound(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17777 static SCIP_RETCODE addSideRemoval(SCIP_SET *set, SCIP_ROW *row, SCIP_Real lpiinfinity, int **sidechginds, SCIP_Real **sidechgoldlhss, SCIP_Real **sidechgoldrhss, SCIP_Real **sidechgnewlhss, SCIP_Real **sidechgnewrhss, int *sidechgssize, int *nsidechgs) Definition: conflict.c:4400 void SCIPconflicthdlrSetInit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINIT((*conflictinit))) Definition: conflict.c:662 SCIP_Longint SCIPconflictGetNLocalChgBds(SCIP_CONFLICT *conflict) Definition: conflict.c:2422 SCIP_Real SCIPconflicthdlrGetTime(SCIP_CONFLICTHDLR *conflicthdlr) Definition: conflict.c:782 Definition: type_result.h:33 SCIP_RETCODE SCIPconflictAnalyzeStrongbranch(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_CLIQUETABLE *cliquetable, SCIP_COL *col, SCIP_Bool *downconflict, SCIP_Bool *upconflict) Definition: conflict.c:6446 #define BMSfreeBlockMemoryArrayNull(mem, ptr, num) Definition: memory.h:422 SCIP_Longint SCIPconflictGetNPropConflictConss(SCIP_CONFLICT *conflict) Definition: conflict.c:4313 Definition: struct_var.h:97 SCIP_BDCHGIDX * SCIPbdchginfoGetIdx(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17708 SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5238 void SCIPconflicthdlrSetData(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_CONFLICTHDLRDATA *conflicthdlrdata) Definition: conflict.c:629 static int conflictCalcMaxsize(SCIP_SET *set, SCIP_PROB *prob) Definition: conflict.c:1625 void SCIPhistoryIncVSIDS(SCIP_HISTORY *history, SCIP_BRANCHDIR dir, SCIP_Real weight) Definition: history.c:487 SCIP_RETCODE SCIPconflictAddBound(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx) Definition: conflict.c:2982 SCIP_RETCODE SCIPvarIncVSIDS(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real weight) Definition: var.c:14255 SCIP_PROP * SCIPbdchginfoGetInferProp(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17742 SCIP_RETCODE SCIPconflicthdlrExec(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set, SCIP_NODE *node, SCIP_NODE *validnode, SCIP_BDCHGINFO **bdchginfos, SCIP_Real *relaxedbds, int nbdchginfos, SCIP_Bool resolved, SCIP_RESULT *result) Definition: conflict.c:575 SCIP_BOUNDCHGTYPE SCIPbdchginfoGetChgtype(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17668 SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas) Definition: lpi_clp.cpp:2721 internal methods for branch and bound tree static SCIP_BDCHGINFO * conflictRemoveCand(SCIP_CONFLICT *conflict) Definition: conflict.c:3300 static SCIP_Bool isBoundchgUseless(SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo) Definition: conflict.c:2825 SCIP_Longint SCIPconflictGetNPropSuccess(SCIP_CONFLICT *conflict) Definition: conflict.c:4303 void SCIPconflicthdlrSetExit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXIT((*conflictexit))) Definition: conflict.c:673 SCIP_Bool SCIPsetIsFeasEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5578 void SCIPconflicthdlrSetInitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINITSOL((*conflictinitsol))) Definition: conflict.c:684 SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictConss(SCIP_CONFLICT *conflict) Definition: conflict.c:6389 static SCIP_RETCODE undoBdchgsDualfarkas(SCIP_SET *set, SCIP_PROB *prob, SCIP_LP *lp, int currentdepth, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, SCIP_LPBDCHGS *oldlpbdchgs, SCIP_LPBDCHGS *relaxedlpbdchgs, SCIP_Bool *valid, SCIP_Bool *resolve) Definition: conflict.c:4951 SCIP_Longint SCIPconflictGetNAppliedGlobalConss(SCIP_CONFLICT *conflict) Definition: conflict.c:2402 SCIP_Longint SCIPconflictGetNBoundexceedingLPIterations(SCIP_CONFLICT *conflict) Definition: conflict.c:6429 static void lpbdchgsReset(SCIP_LPBDCHGS *lpbdchgs, int ncols) Definition: conflict.c:820 SCIP_BDCHGINFO * SCIPvarGetBdchgInfo(SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15718 void SCIPgmlWriteArc(FILE *file, unsigned int source, unsigned int target, const char *label, const char *color) Definition: misc.c:437 static SCIP_RETCODE conflictCreateTmpBdchginfo(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_Real oldbound, SCIP_Real newbound, SCIP_BDCHGINFO **bdchginfo) Definition: conflict.c:877 SCIP_Longint SCIPconflictGetNPseudoReconvergenceLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:6971 SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval) Definition: lpi_clp.cpp:3593 internal methods for clocks and timing issues SCIP_Longint SCIPconflictGetNGlobalChgBds(SCIP_CONFLICT *conflict) Definition: conflict.c:2392 Definition: type_result.h:49 SCIP_Real SCIPvarGetBdAtIndex(SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15981 SCIP_Longint SCIPconflictGetNPseudoConflictLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:6951 SCIP_RETCODE SCIPbdchginfoCreate(SCIP_BDCHGINFO **bdchginfo, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_Real oldbound, SCIP_Real newbound) Definition: var.c:15562 void SCIPconflicthdlrSetCopy(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTCOPY((*conflictcopy))) Definition: conflict.c:640 SCIP_Longint SCIPconflictGetNInfeasibleLPSuccess(SCIP_CONFLICT *conflict) Definition: conflict.c:6299 SCIP_Longint SCIPconflictGetNPropCalls(SCIP_CONFLICT *conflict) Definition: conflict.c:4293 SCIP_Longint npseudoreconvliterals Definition: struct_conflict.h:136 void SCIPgmlWriteNode(FILE *file, unsigned int id, const char *label, const char *nodetype, const char *fillcolor, const char *bordercolor) Definition: misc.c:295 Definition: struct_var.h:196 static SCIP_RETCODE lpbdchgsCreate(SCIP_LPBDCHGS **lpbdchgs, SCIP_SET *set, int ncols) Definition: conflict.c:798 Definition: struct_conflict.h:88 SCIP_Longint SCIPconflictGetNStrongbranchIterations(SCIP_CONFLICT *conflict) Definition: conflict.c:6747 static SCIP_RETCODE conflictsetCalcInsertDepth(SCIP_CONFLICTSET *conflictset, SCIP_SET *set, SCIP_TREE *tree) Definition: conflict.c:1396 interface methods for specific LP solvers static SCIP_RETCODE conflictAddConflictBound(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd) Definition: conflict.c:2782 SCIP_RETCODE SCIPvarScaleVSIDS(SCIP_VAR *var, SCIP_Real scalar) Definition: var.c:14341 Definition: type_lpi.h:52 datastructures for conflict analysis SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceConss(SCIP_CONFLICT *conflict) Definition: conflict.c:6329 SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:6339 SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi) Definition: lpi_clp.cpp:1830 static void skipRedundantBdchginfos(SCIP_VAR *var, int *lbchginfopos, int *ubchginfopos) Definition: conflict.c:4723 static SCIP_BDCHGINFO * conflictFirstCand(SCIP_CONFLICT *conflict) Definition: conflict.c:3344 SCIP_RETCODE SCIPconflictAnalyze(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, int validdepth, SCIP_Bool *success) Definition: conflict.c:4214 Definition: struct_message.h:35 SCIP_Longint SCIPconflictGetNPropConflictLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:4323 SCIP_Real SCIPbdchginfoGetNewbound(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17648 void SCIPconflicthdlrSetPriority(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set, int priority) Definition: conflict.c:736 SCIP_Bool SCIPbdchgidxIsEarlier(SCIP_BDCHGIDX *bdchgidx1, SCIP_BDCHGIDX *bdchgidx2) Definition: var.c:17618 SCIP_RETCODE SCIPconflicthdlrExitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set) Definition: conflict.c:551 SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss) Definition: lpi_clp.cpp:1567 Definition: struct_prob.h:38 SCIP_RETCODE SCIPnodeCutoff(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, BMS_BLKMEM *blkmem) Definition: tree.c:1122 static SCIP_RETCODE conflictAnalyzeLP(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_CLIQUETABLE *cliquetable, SCIP_Bool diving, int *iterations, int *nconss, int *nliterals, int *nreconvconss, int *nreconvliterals, SCIP_Bool marklpunsolved) Definition: conflict.c:5533 SCIP_Real SCIPvarGetLbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15737 Definition: struct_lp.h:106 static void conflictsetClear(SCIP_CONFLICTSET *conflictset) Definition: conflict.c:917 SCIP_RETCODE SCIPconflictFree(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem) Definition: conflict.c:2590 SCIP_Longint SCIPconflictGetNAppliedLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:2382 SCIP_Real SCIPlpGetPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob) Definition: lp.c:15256 static SCIP_RETCODE conflictAddBound(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd) Definition: conflict.c:2926 SCIP_RETCODE SCIPconflicthdlrCreate(SCIP_CONFLICTHDLR **conflicthdlr, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int priority, SCIP_DECL_CONFLICTCOPY((*conflictcopy)), SCIP_DECL_CONFLICTFREE((*conflictfree)), SCIP_DECL_CONFLICTINIT((*conflictinit)), SCIP_DECL_CONFLICTEXIT((*conflictexit)), SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)), SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)), SCIP_DECL_CONFLICTEXEC((*conflictexec)), SCIP_CONFLICTHDLRDATA *conflicthdlrdata) Definition: conflict.c:379 static SCIP_RETCODE conflictQueueBound(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd) Definition: conflict.c:2845 internal methods for handling parameter settings void SCIPconflicthdlrSetExitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol))) Definition: conflict.c:695 methods for creating output for visualization tools (VBC, BAK) void SCIPclockEnableOrDisable(SCIP_CLOCK *clck, SCIP_Bool enable) Definition: clock.c:250 SCIP_Real SCIPconflicthdlrGetSetupTime(SCIP_CONFLICTHDLR *conflicthdlr) Definition: conflict.c:772 SCIP_Real SCIPconflictGetGlobalApplTime(SCIP_CONFLICT *conflict) Definition: conflict.c:4273 void SCIPvarAdjustLb(SCIP_VAR *var, SCIP_SET *set, SCIP_Real *lb) Definition: var.c:6014 Definition: type_lp.h:37 SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:6737 SCIP_Real SCIPconflictGetPseudoTime(SCIP_CONFLICT *conflict) Definition: conflict.c:6911 SCIP_BDCHGINFO * SCIPvarGetBdchgInfoLb(SCIP_VAR *var, int pos) Definition: var.c:17457 SCIP_Longint SCIPconflictGetNInfeasibleLPConflictLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:6319 SCIP_Longint SCIPconflictGetNPropReconvergenceConss(SCIP_CONFLICT *conflict) Definition: conflict.c:4333 internal methods for LP management SCIP_Real SCIPconflictGetVarUb(SCIP_CONFLICT *conflict, SCIP_VAR *var) Definition: conflict.c:3284 Definition: struct_tree.h:122 internal methods for branching and inference history SCIP_Real SCIPconflictGetStrongbranchTime(SCIP_CONFLICT *conflict) Definition: conflict.c:6677 SCIP_Longint SCIPconflictGetNAppliedLocalLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:2442 Definition: struct_conflict.h:39 Definition: type_retcode.h:44 SCIP_Longint SCIPconflictGetNPseudoConflictConss(SCIP_CONFLICT *conflict) Definition: conflict.c:6941 Definition: struct_lp.h:123 SCIP_Bool SCIPsetIsGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5274 internal methods for propagators Definition: struct_set.h:56 static SCIP_Bool conflictsetIsRedundant(SCIP_CONFLICTSET *conflictset1, SCIP_CONFLICTSET *conflictset2) Definition: conflict.c:1443 #define SCIPdebugCheckConflict(blkmem, set, node, bdchginfos, relaxedbds, nliterals) Definition: debug.h:260 SCIP_VAR * SCIPbdchginfoGetInferVar(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17718 void SCIPhistoryScaleVSIDS(SCIP_HISTORY *history, SCIP_Real scalar) Definition: history.c:501 SCIP_RETCODE SCIPshrinkDisjunctiveVarSet(SCIP *scip, SCIP_VAR **vars, SCIP_Real *bounds, SCIP_Bool *boundtypes, SCIP_Bool *redundants, int nvars, int *nredvars, int *nglobalred, SCIP_Bool *setredundant, SCIP_Bool *glbinfeas, SCIP_Bool fullshortening) Definition: presolve.c:953 SCIP_BOUNDTYPE SCIPbdchginfoGetBoundtype(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17678 SCIP_RETCODE SCIPconflictAnalyzePseudo(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_CLIQUETABLE *cliquetable, SCIP_Bool *success) Definition: conflict.c:6769 void SCIPconflicthdlrSetFree(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTFREE((*conflictfree))) Definition: conflict.c:651 SCIP_Real SCIPcolCalcRedcost(SCIP_COL *col, SCIP_Real *dualsol) Definition: lp.c:3653 SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5220 SCIP_RETCODE SCIPconflicthdlrExit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set) Definition: conflict.c:496 SCIP_RETCODE SCIPconflicthdlrInitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set) Definition: conflict.c:527 Definition: struct_conflict.h:58 Definition: struct_lp.h:95 Definition: type_clock.h:34 static SCIP_RETCODE detectImpliedBounds(SCIP_SET *set, SCIP_PROB *prob, SCIP_CONFLICTSET *conflictset, int *nbdchgs, int *nredvars, SCIP_Bool *redundant) Definition: conflict.c:1793 static SCIP_RETCODE addCand(SCIP_SET *set, int currentdepth, SCIP_VAR *var, int lbchginfopos, int ubchginfopos, SCIP_Real proofcoef, SCIP_Real prooflhs, SCIP_Real proofact, SCIP_VAR ***cands, SCIP_Real **candscores, SCIP_Real **newbounds, SCIP_Real **proofactdeltas, int *candssize, int *ncands, int firstcand) Definition: conflict.c:4587 SCIP_Longint SCIPconflictGetNInfeasibleLPConflictConss(SCIP_CONFLICT *conflict) Definition: conflict.c:6309 SCIP_Longint ninflpreconvliterals Definition: struct_conflict.h:109 Definition: type_result.h:35 void SCIPhistoryIncNActiveConflicts(SCIP_HISTORY *history, SCIP_BRANCHDIR dir, SCIP_Real length) Definition: history.c:526 internal methods for storing and manipulating the main problem Definition: struct_cons.h:36 SCIP_Bool SCIPconflicthdlrIsInitialized(SCIP_CONFLICTHDLR *conflicthdlr) Definition: conflict.c:750 static SCIP_RETCODE conflictsetAddBounds(SCIP_CONFLICT *conflict, SCIP_CONFLICTSET *conflictset, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BDCHGINFO **bdchginfos, int nbdchginfos) Definition: conflict.c:1186 static SCIP_RETCODE conflictsetEnsureBdchginfosMem(SCIP_CONFLICTSET *conflictset, BMS_BLKMEM *blkmem, SCIP_SET *set, int num) Definition: conflict.c:1003 SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceConss(SCIP_CONFLICT *conflict) Definition: conflict.c:6409 Definition: type_retcode.h:42 SCIP_Bool SCIPsetIsRelEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:6057 SCIP_Real SCIPvarGetUbAtIndex(SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after) Definition: var.c:15859 Definition: type_lp.h:47 SCIP_CONFLICTHDLRDATA * conflicthdlrdata Definition: struct_conflict.h:50 SCIP_Longint SCIPconflictGetNPseudoReconvergenceConss(SCIP_CONFLICT *conflict) Definition: conflict.c:6961 Definition: type_var.h:73 SCIP_Longint SCIPconflictGetNAppliedLocalConss(SCIP_CONFLICT *conflict) Definition: conflict.c:2432 static SCIP_RETCODE conflictEnsureConflictsetsMem(SCIP_CONFLICT *conflict, SCIP_SET *set, int num) Definition: conflict.c:1505 static SCIP_RETCODE convertToActiveVar(SCIP_VAR **var, SCIP_SET *set, SCIP_BOUNDTYPE *boundtype, SCIP_Real *bound) Definition: conflict.c:2891 SCIP_Real SCIPconflictGetBoundexceedingLPTime(SCIP_CONFLICT *conflict) Definition: conflict.c:6359 static SCIP_RETCODE conflictsetCreate(SCIP_CONFLICTSET **conflictset, BMS_BLKMEM *blkmem) Definition: conflict.c:933 SCIP_Bool SCIPbdchginfoIsRedundant(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17786 Definition: type_var.h:42 SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs) Definition: lpi_clp.cpp:1007 SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi) Definition: lpi_clp.cpp:1821 Definition: type_var.h:44 SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval) Definition: lpi_clp.cpp:2634 SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceConss(SCIP_CONFLICT *conflict) Definition: conflict.c:6727 Definition: type_lpi.h:51 void SCIPsortedvecInsertIntPtrReal(int *intarray, void **ptrarray, SCIP_Real *realarray, int keyval, void *field1val, SCIP_Real field2val, int *len, int *pos) Definition: type_retcode.h:33 void SCIPgmlWriteEdge(FILE *file, unsigned int source, unsigned int target, const char *label, const char *color) Definition: misc.c:393 SCIP_RETCODE SCIPconflicthdlrFree(SCIP_CONFLICTHDLR **conflicthdlr, SCIP_SET *set) Definition: conflict.c:432 SCIP_Longint SCIPconflictGetNStrongbranchConflictLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:6717 struct SCIP_ConflicthdlrData SCIP_CONFLICTHDLRDATA Definition: type_conflict.h:40 internal methods for global SCIP settings SCIP_Bool SCIPsetIsFeasGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5666 SCIP_Longint SCIPconflictGetNPseudoSuccess(SCIP_CONFLICT *conflict) Definition: conflict.c:6931 SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi) Definition: lpi_clp.cpp:2374 SCIP_RETCODE SCIPsetAddIntParam(SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata) Definition: set.c:2455 SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5202 SCIP_RETCODE SCIPsetConflicthdlrPriority(SCIP *scip, SCIP_CONFLICTHDLR *conflicthdlr, int priority) Definition: scip.c:6127 static SCIP_RETCODE conflictsetAddBound(SCIP_CONFLICTSET *conflictset, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd) Definition: conflict.c:1116 const char * SCIPconflicthdlrGetName(SCIP_CONFLICTHDLR *conflicthdlr) Definition: conflict.c:706 SCIP_Longint SCIPconflictGetNInfeasibleLPCalls(SCIP_CONFLICT *conflict) Definition: conflict.c:6289 static SCIP_RETCODE conflictAddConflictset(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, int validdepth, SCIP_Bool diving, SCIP_Bool repropagate, SCIP_Bool *success, int *nliterals) Definition: conflict.c:3398 SCIP_Bool SCIPsetIsFeasLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5622 static SCIP_RETCODE undoBdchgsDualsol(SCIP_SET *set, SCIP_PROB *prob, SCIP_LP *lp, int currentdepth, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, SCIP_LPBDCHGS *oldlpbdchgs, SCIP_LPBDCHGS *relaxedlpbdchgs, SCIP_Bool *valid, SCIP_Bool *resolve) Definition: conflict.c:5159 Definition: type_lp.h:34 Definition: struct_prop.h:36 SCIP_Bool SCIPbdchginfoIsTighter(SCIP_BDCHGINFO *bdchginfo1, SCIP_BDCHGINFO *bdchginfo2) Definition: var.c:17811 SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost) Definition: lpi_clp.cpp:2652 static SCIP_RETCODE conflictAnalyzeRemainingBdchgs(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool diving, int *lbchginfoposs, int *ubchginfoposs, int *nconss, int *nliterals, int *nreconvconss, int *nreconvliterals) Definition: conflict.c:5405 SCIP_RETCODE SCIPclockCreate(SCIP_CLOCK **clck, SCIP_CLOCKTYPE clocktype) Definition: clock.c:160 internal methods for presolving SCIP_RETCODE SCIPconflicthdlrInit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set) Definition: conflict.c:459 Definition: type_var.h:74 internal methods for problem variables void SCIPsortedvecDelPosIntPtrReal(int *intarray, void **ptrarray, SCIP_Real *realarray, int pos, int *len) Definition: struct_var.h:104 public data structures and miscellaneous methods SCIP_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val) Definition: lpi_clp.cpp:3707 const char * SCIPconflicthdlrGetDesc(SCIP_CONFLICTHDLR *conflicthdlr) Definition: conflict.c:716 void SCIPnodePropagateAgain(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree) Definition: tree.c:1164 SCIP_RETCODE SCIPpropResolvePropagation(SCIP_PROP *prop, SCIP_SET *set, SCIP_VAR *infervar, int inferinfo, SCIP_BOUNDTYPE inferboundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedbd, SCIP_RESULT *result) Definition: prop.c:682 SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival) Definition: lpi_clp.cpp:3491 SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval) Definition: lpi_clp.cpp:3639 Definition: type_var.h:46 Definition: struct_lp.h:189 #define SCIPdebugCheckConflictFrontier(blkmem, set, node, bdchginfo, bdchginfos, relaxedbds, nliterals, bdchgqueue, forcedbdchgqueue) Definition: debug.h:261 methods for debugging 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) Definition: conflict.c:1643 SCIP_Bool SCIPprobAllColsInLP(SCIP_PROB *prob, SCIP_SET *set, SCIP_LP *lp) Definition: prob.c:2140 SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat) Definition: lpi_clp.cpp:2798 SCIP_Longint SCIPconflictGetNStrongbranchConflictConss(SCIP_CONFLICT *conflict) Definition: conflict.c:6707 static void conflictsetCalcConflictDepth(SCIP_CONFLICTSET *conflictset) Definition: conflict.c:1352 Definition: struct_reopt.h:113 static SCIP_DECL_PARAMCHGD(paramChgdConflicthdlrPriority) Definition: conflict.c:346 Definition: type_var.h:41 Definition: type_var.h:45 void SCIPsortLongPtrRealRealBool(SCIP_Longint *longarray, void **ptrarray, SCIP_Real *realarray, SCIP_Real *realarray2, SCIP_Bool *boolarray, int len) SCIP_BOUNDTYPE SCIPboundtypeOpposite(SCIP_BOUNDTYPE boundtype) Definition: lp.c:18826 static SCIP_RETCODE updateStatistics(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONFLICTSET *conflictset, int insertdepth) Definition: conflict.c:1674 static SCIP_RETCODE undoBdchgsProof(SCIP_SET *set, SCIP_PROB *prob, int currentdepth, SCIP_Real *proofcoefs, SCIP_Real prooflhs, SCIP_Real proofact, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, SCIP_LPBDCHGS *oldlpbdchgs, SCIP_LPBDCHGS *relaxedlpbdchgs, SCIP_Bool *resolve, SCIP_LPI *lpi) Definition: conflict.c:4755 static SCIP_Real conflictsetCalcScore(SCIP_CONFLICTSET *conflictset) Definition: conflict.c:1030 int SCIPconflictGetNConflicts(SCIP_CONFLICT *conflict) Definition: conflict.c:2362 SCIP_Real * SCIPvarGetMultaggrScalars(SCIP_VAR *var) Definition: var.c:16849 SCIP_Longint SCIPconflictGetNBoundexceedingLPCalls(SCIP_CONFLICT *conflict) Definition: conflict.c:6369 SCIP_RETCODE SCIPconflictInit(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob) Definition: conflict.c:2635 void SCIPsortIntPtrReal(int *intarray, void **ptrarray, SCIP_Real *realarray, int len) SCIP_BOUNDTYPE SCIPbdchginfoGetInferBoundtype(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17765 SCIP_Longint nboundlpreconvliterals Definition: struct_conflict.h:120 SCIP_Bool SCIPsetIsFeasLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5600 SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:6419 SCIP_RETCODE SCIPvarIncNActiveConflicts(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real length) Definition: var.c:14391 SCIP_Bool SCIPsetIsDualfeasPositive(SCIP_SET *set, SCIP_Real val) Definition: set.c:5912 static SCIP_RETCODE conflictsetCopy(SCIP_CONFLICTSET **targetconflictset, BMS_BLKMEM *blkmem, SCIP_CONFLICTSET *sourceconflictset, int nadditionalelems) Definition: conflict.c:953 SCIP_Longint SCIPconflictGetNPseudoCalls(SCIP_CONFLICT *conflict) Definition: conflict.c:6921 static void lpbdchgsFree(SCIP_LPBDCHGS **lpbdchgs, SCIP_SET *set) Definition: conflict.c:833 SCIP_CONFLICTHDLRDATA * SCIPconflicthdlrGetData(SCIP_CONFLICTHDLR *conflicthdlr) Definition: conflict.c:619 Definition: type_history.h:34 SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub) Definition: lpi_clp.cpp:941 static SCIP_RETCODE ensureSidechgsSize(SCIP_SET *set, int **sidechginds, SCIP_Real **sidechgoldlhss, SCIP_Real **sidechgoldrhss, SCIP_Real **sidechgnewlhss, SCIP_Real **sidechgnewrhss, int *sidechgssize, int num) Definition: conflict.c:4361 SCIP_Real SCIPconflictGetInfeasibleLPTime(SCIP_CONFLICT *conflict) Definition: conflict.c:6279 SCIP_RETCODE SCIPconflictCreate(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem, SCIP_SET *set) Definition: conflict.c:2513 SCIP_Real SCIPbdchginfoGetOldbound(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17638 void SCIPvisualFoundConflict(SCIP_VISUAL *visual, SCIP_STAT *stat, SCIP_NODE *node) Definition: visual.c:599 SCIP_Longint SCIPconflictGetNBoundexceedingLPSuccess(SCIP_CONFLICT *conflict) Definition: conflict.c:6379 Definition: type_history.h:35 internal methods for conflict analysis static SCIP_RETCODE conflictAddConflictCons(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_CLIQUETABLE *cliquetable, SCIP_CONFLICTSET *conflictset, int insertdepth, SCIP_Bool *success) Definition: conflict.c:2046 SCIP_RETCODE SCIPpqueueInsert(SCIP_PQUEUE *pqueue, void *elem) Definition: misc.c:991 void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...) Definition: scip.c:1281 Definition: type_retcode.h:40 SCIP_RETCODE SCIPpqueueCreate(SCIP_PQUEUE **pqueue, int initsize, SCIP_Real sizefac, SCIP_DECL_SORTPTRCOMP((*ptrcomp))) Definition: misc.c:945 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_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Real newbound, SCIP_BOUNDTYPE boundtype, SCIP_Bool probingchange) Definition: tree.c:1978 Definition: struct_lp.h:255 SCIP_Bool SCIPbdchgidxIsEarlierNonNull(SCIP_BDCHGIDX *bdchgidx1, SCIP_BDCHGIDX *bdchgidx2) Definition: var.c:17598 Definition: type_lp.h:48 static SCIP_RETCODE ensureCandsSize(SCIP_SET *set, SCIP_VAR ***cands, SCIP_Real **candscores, SCIP_Real **newbounds, SCIP_Real **proofactdeltas, int *candssize, int num) Definition: conflict.c:4550 static void conflictsetFree(SCIP_CONFLICTSET **conflictset, BMS_BLKMEM *blkmem) Definition: conflict.c:987 SCIP_Longint nboundlpconfliterals Definition: struct_conflict.h:116 static SCIP_RETCODE conflictInsertConflictset(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_CONFLICTSET **conflictset) Definition: conflict.c:1530 public methods for message output Definition: type_result.h:43 Definition: struct_implics.h:86 SCIP_RETCODE SCIPconflictAddRelaxedBound(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedbd) Definition: conflict.c:3043 SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5256 static SCIP_RETCODE addBdchg(SCIP_SET *set, SCIP_VAR *var, SCIP_Real newlb, SCIP_Real newub, SCIP_LPBDCHGS *oldlpbdchgs, SCIP_LPBDCHGS *relaxedlpbdchgs, SCIP_LPI *lpi) Definition: conflict.c:4469 internal methods for problem statistics Definition: lpi_clp.cpp:93 SCIP_Longint SCIPconflictGetNStrongbranchCalls(SCIP_CONFLICT *conflict) Definition: conflict.c:6687 SCIP_Longint SCIPconflictGetNInfeasibleLPIterations(SCIP_CONFLICT *conflict) Definition: conflict.c:6349 SCIP_Real SCIPconflictGetVarLb(SCIP_CONFLICT *conflict, SCIP_VAR *var) Definition: conflict.c:3267 SCIP_RETCODE SCIPconflictFlushConss(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_CLIQUETABLE *cliquetable) Definition: conflict.c:2184 Definition: struct_conflict.h:77 SCIP_RETCODE SCIPconflictIsVarUsed(SCIP_CONFLICT *conflict, SCIP_VAR *var, SCIP_SET *set, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool *used) Definition: conflict.c:3207 internal methods for constraints and constraint handlers static SCIP_Bool checkRedundancy(SCIP_SET *set, SCIP_CONFLICTSET *conflictset) Definition: conflict.c:1728 static SCIP_RETCODE conflictAnalyzeBoundexceedingLP(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_CLIQUETABLE *cliquetable, SCIP_Bool *success) Definition: conflict.c:6071 SCIP_Longint SCIPconflictGetNAppliedGlobalLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:2412 static SCIP_RETCODE conflictAnalyze(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool diving, int validdepth, SCIP_Bool mustresolve, int *nconss, int *nliterals, int *nreconvconss, int *nreconvliterals) Definition: conflict.c:3934 int SCIPbdchginfoGetInferInfo(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17753 SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations) Definition: lpi_clp.cpp:2753 void SCIPconflicthdlrEnableOrDisableClocks(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_Bool enable) Definition: conflict.c:760 SCIP_Bool SCIPsetIsFeasGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2) Definition: set.c:5644 Definition: type_lp.h:35 #define SCIPsetAllocCleanBufferArray(set, ptr, num) Definition: set.h:1799 static void conflictFreeTmpBdchginfos(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem) Definition: conflict.c:901 SCIP_Longint SCIPconflictGetNAppliedConss(SCIP_CONFLICT *conflict) Definition: conflict.c:2372 SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:6399 Definition: type_lp.h:33 SCIP_RETCODE SCIPlpiSetBase(SCIP_LPI *lpi, int *cstat, int *rstat) Definition: lpi_clp.cpp:2886 void SCIPbdchginfoFree(SCIP_BDCHGINFO **bdchginfo, BMS_BLKMEM *blkmem) Definition: var.c:15592 void SCIPvarAdjustUb(SCIP_VAR *var, SCIP_SET *set, SCIP_Real *ub) Definition: var.c:6031 static SCIP_Bool conflictMarkBoundCheckPresence(SCIP_CONFLICT *conflict, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd) Definition: conflict.c:2694 Definition: struct_stat.h:44 Definition: type_retcode.h:37 Definition: struct_tree.h:165 SCIP_Longint SCIPconflictGetNPropReconvergenceLiterals(SCIP_CONFLICT *conflict) Definition: conflict.c:4343 SCIP_Bool SCIPsetIsDualfeasNegative(SCIP_SET *set, SCIP_Real val) Definition: set.c:5923 SCIP_RETCODE SCIPconflictAnalyzeLP(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_CLIQUETABLE *cliquetable, SCIP_Bool *success) Definition: conflict.c:6141 SCIP_Real SCIPconflictGetPropTime(SCIP_CONFLICT *conflict) Definition: conflict.c:4283 common defines and data types used in all packages of SCIP static SCIP_RETCODE conflictAnalyzeInfeasibleLP(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_CLIQUETABLE *cliquetable, SCIP_Bool *success) Definition: conflict.c:6002 Definition: struct_event.h:204 SCIP_RETCODE SCIPvarGetProbvarSum(SCIP_VAR **var, SCIP_SET *set, SCIP_Real *scalar, SCIP_Real *constant) Definition: var.c:11906 Definition: type_retcode.h:43 static SCIP_RETCODE conflictResolveBound(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd, int validdepth, SCIP_Bool *resolved) Definition: conflict.c:3497 SCIP_RETCODE SCIPconflicthdlrCopyInclude(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set) Definition: conflict.c:360 static SCIP_RETCODE conflictEnsureTmpbdchginfosMem(SCIP_CONFLICT *conflict, SCIP_SET *set, int num) Definition: conflict.c:853 Definition: objbranchrule.h:33 static SCIP_RETCODE conflictCreateReconvergenceConss(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_TREE *tree, SCIP_Bool diving, int validdepth, SCIP_BDCHGINFO *firstuip, int *nreconvconss, int *nreconvliterals) Definition: conflict.c:3706 SCIP_CONS * SCIPbdchginfoGetInferCons(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17730 Definition: type_var.h:43 Definition: struct_branch.h:36 static SCIP_Bool bdchginfoIsInvalid(SCIP_CONFLICT *conflict, SCIP_BDCHGINFO *bdchginfo) Definition: conflict.c:1073 #define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum) Definition: memory.h:412 Definition: struct_lp.h:83 SCIP callable library. SCIP_BDCHGINFO * SCIPvarGetBdchgInfoUb(SCIP_VAR *var, int pos) Definition: var.c:17477 SCIP_Bool SCIPbdchginfoHasInferenceReason(SCIP_BDCHGINFO *bdchginfo) Definition: var.c:17797 Definition: type_var.h:72 int SCIPconflicthdlrGetPriority(SCIP_CONFLICTHDLR *conflicthdlr) Definition: conflict.c:726 SCIP_RETCODE SCIPconsResolvePropagation(SCIP_CONS *cons, SCIP_SET *set, SCIP_VAR *infervar, int inferinfo, SCIP_BOUNDTYPE inferboundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Real relaxedbd, SCIP_RESULT *result) Definition: cons.c:6890 Definition: type_var.h:56 |