144 #define BOUNDSWITCH 0.51 145 #define USEVBDS FALSE 146 #define ALLOWLOCAL FALSE 147 #define FIXINTEGRALRHS FALSE 154 #ifdef SCIP_CONFGRAPH 161 static FILE* confgraphfile =
NULL;
163 static int confgraphnconflictsets = 0;
167 void confgraphWriteNode(
170 const char* nodetype,
171 const char* fillcolor,
172 const char* bordercolor
175 assert(confgraphfile !=
NULL);
177 SCIPgmlWriteNode(confgraphfile, (
unsigned int)(
size_t)idptr, label, nodetype, fillcolor, bordercolor);
182 void confgraphWriteEdge(
188 assert(confgraphfile !=
NULL);
190 #ifndef SCIP_CONFGRAPH_EDGE 191 SCIPgmlWriteArc(confgraphfile, (
unsigned int)(
size_t)source, (
unsigned int)(
size_t)target,
NULL, color);
193 SCIPgmlWriteEdge(confgraphfile, (
unsigned int)(
size_t)source, (
unsigned int)(
size_t)target,
NULL, color);
206 assert(conflict !=
NULL);
207 assert(confgraphfile ==
NULL);
212 confgraphfile = fopen(fname,
"w");
214 if( confgraphfile ==
NULL )
223 confgraphWriteNode(
NULL,
"conflict",
"ellipse",
"#ff0000",
"#000000");
225 confgraphcurrentbdchginfo =
NULL;
236 if( confgraphfile !=
NULL )
240 fclose(confgraphfile);
242 confgraphfile =
NULL;
243 confgraphnconflictsets = 0;
249 void confgraphAddBdchg(
253 const char* colors[] = {
288 confgraphWriteNode(bdchginfo, label,
"ellipse", colors[col],
"#000000");
289 confgraphWriteEdge(bdchginfo, confgraphcurrentbdchginfo,
"#000000");
294 void confgraphLinkBdchg(
298 confgraphWriteEdge(bdchginfo, confgraphcurrentbdchginfo,
"#000000");
303 void confgraphSetCurrentBdchg(
307 confgraphcurrentbdchginfo = bdchginfo;
312 void confgraphMarkConflictset(
319 assert(conflictset !=
NULL);
321 confgraphnconflictsets++;
323 confgraphWriteNode((
void*)(
size_t)confgraphnconflictsets, label,
"rectangle",
"#ff00ff",
"#000000");
325 confgraphWriteEdge((
void*)(
size_t)confgraphnconflictsets, conflictset->
bdchginfos[i],
"#ff00ff");
355 assert(paramdata !=
NULL);
369 assert(conflicthdlr !=
NULL);
371 assert(set->scip !=
NULL);
373 if( conflicthdlr->conflictcopy !=
NULL )
376 SCIP_CALL( conflicthdlr->conflictcopy(set->scip, conflicthdlr) );
404 assert(conflicthdlr !=
NULL);
405 assert(name !=
NULL);
406 assert(desc !=
NULL);
411 (*conflicthdlr)->priority = priority;
412 (*conflicthdlr)->conflictcopy = conflictcopy;
413 (*conflicthdlr)->conflictfree = conflictfree;
414 (*conflicthdlr)->conflictinit = conflictinit;
415 (*conflicthdlr)->conflictexit = conflictexit;
416 (*conflicthdlr)->conflictinitsol = conflictinitsol;
417 (*conflicthdlr)->conflictexitsol = conflictexitsol;
418 (*conflicthdlr)->conflictexec = conflictexec;
419 (*conflicthdlr)->conflicthdlrdata = conflicthdlrdata;
420 (*conflicthdlr)->initialized =
FALSE;
429 &(*conflicthdlr)->priority,
TRUE, priority, INT_MIN, INT_MAX,
430 paramChgdConflicthdlrPriority, (
SCIP_PARAMDATA*)(*conflicthdlr)) );
441 assert(conflicthdlr !=
NULL);
442 assert(*conflicthdlr !=
NULL);
443 assert(!(*conflicthdlr)->initialized);
447 if( (*conflicthdlr)->conflictfree !=
NULL )
449 SCIP_CALL( (*conflicthdlr)->conflictfree(set->scip, *conflicthdlr) );
468 assert(conflicthdlr !=
NULL);
477 if( set->misc_resetstat )
484 if( conflicthdlr->conflictinit !=
NULL )
489 SCIP_CALL( conflicthdlr->conflictinit(set->scip, conflicthdlr) );
505 assert(conflicthdlr !=
NULL);
515 if( conflicthdlr->conflictexit !=
NULL )
520 SCIP_CALL( conflicthdlr->conflictexit(set->scip, conflicthdlr) );
536 assert(conflicthdlr !=
NULL);
540 if( conflicthdlr->conflictinitsol !=
NULL )
545 SCIP_CALL( conflicthdlr->conflictinitsol(set->scip, conflicthdlr) );
560 assert(conflicthdlr !=
NULL);
564 if( conflicthdlr->conflictexitsol !=
NULL )
569 SCIP_CALL( conflicthdlr->conflictexitsol(set->scip, conflicthdlr) );
594 assert(conflicthdlr !=
NULL);
596 assert(bdchginfos !=
NULL || nbdchginfos == 0);
597 assert(result !=
NULL);
601 if( conflicthdlr->conflictexec !=
NULL )
606 SCIP_CALL( conflicthdlr->conflictexec(set->scip, conflicthdlr, node, validnode, bdchginfos, relaxedbds, nbdchginfos,
607 conftype, usescutoffbound, set->conf_separate, (
SCIPnodeGetDepth(validnode) > 0), set->conf_dynamic,
608 set->conf_removable, resolved, result) );
617 SCIPerrorMessage(
"execution method of conflict handler <%s> returned invalid result <%d>\n",
618 conflicthdlr->
name, *result);
631 assert(conflicthdlr !=
NULL);
642 assert(conflicthdlr !=
NULL);
653 assert(conflicthdlr !=
NULL);
655 conflicthdlr->conflictcopy = conflictcopy;
664 assert(conflicthdlr !=
NULL);
666 conflicthdlr->conflictfree = conflictfree;
675 assert(conflicthdlr !=
NULL);
677 conflicthdlr->conflictinit = conflictinit;
686 assert(conflicthdlr !=
NULL);
688 conflicthdlr->conflictexit = conflictexit;
697 assert(conflicthdlr !=
NULL);
699 conflicthdlr->conflictinitsol = conflictinitsol;
708 assert(conflicthdlr !=
NULL);
710 conflicthdlr->conflictexitsol = conflictexitsol;
718 assert(conflicthdlr !=
NULL);
720 return conflicthdlr->
name;
728 assert(conflicthdlr !=
NULL);
730 return conflicthdlr->
desc;
738 assert(conflicthdlr !=
NULL);
750 assert(conflicthdlr !=
NULL);
754 set->conflicthdlrssorted =
FALSE;
762 assert(conflicthdlr !=
NULL);
773 assert(conflicthdlr !=
NULL);
784 assert(conflicthdlr !=
NULL);
794 assert(conflicthdlr !=
NULL);
821 (*lpbdchgs)->nbdchgs = 0;
833 assert(lpbdchgs !=
NULL);
867 assert(conflict !=
NULL);
878 assert(num <= conflict->tmpbdchginfossize);
896 assert(conflict !=
NULL);
900 var, boundtype, oldbound, newbound) );
916 assert(conflict !=
NULL);
929 assert(conflictset !=
NULL);
948 assert(conflictset !=
NULL);
951 (*conflictset)->bdchginfos =
NULL;
952 (*conflictset)->relaxedbds =
NULL;
953 (*conflictset)->sortvals =
NULL;
954 (*conflictset)->bdchginfossize = 0;
972 assert(targetconflictset !=
NULL);
973 assert(sourceconflictset !=
NULL);
975 targetsize = sourceconflictset->
nbdchginfos + nadditionalelems;
980 (*targetconflictset)->bdchginfossize = targetsize;
986 (*targetconflictset)->nbdchginfos = sourceconflictset->
nbdchginfos;
987 (*targetconflictset)->validdepth = sourceconflictset->
validdepth;
988 (*targetconflictset)->insertdepth = sourceconflictset->
insertdepth;
989 (*targetconflictset)->conflictdepth = sourceconflictset->
conflictdepth;
990 (*targetconflictset)->repropdepth = sourceconflictset->
repropdepth;
991 (*targetconflictset)->usescutoffbound = sourceconflictset->
usescutoffbound;
992 (*targetconflictset)->conflicttype = sourceconflictset->
conflicttype;
1004 assert(conflictset !=
NULL);
1005 assert(*conflictset !=
NULL);
1022 assert(conflictset !=
NULL);
1023 assert(
set !=
NULL);
1035 assert(num <= conflictset->bdchginfossize);
1050 assert(conflictset !=
NULL);
1052 return -(
set->conf_weightsize * conflictset->
nbdchginfos 1053 +
set->conf_weightrepropdepth * conflictset->
repropdepth 1054 +
set->conf_weightvaliddepth * conflictset->
validdepth);
1073 score =
set->conf_proofscorefac * (1.0 - proofactdelta/(prooflhs - proofact));
1074 score =
MAX(score, 0.0);
1082 if( proofcoef > 0.0 )
1141 assert(bdchginfo !=
NULL);
1144 assert(var !=
NULL);
1194 assert(conflictset !=
NULL);
1195 assert(bdchginfo !=
NULL);
1207 assert(idx < INT_MAX/2);
1208 assert((
int)boundtype == 0 || (
int)boundtype == 1);
1209 sortval = 2*idx + (int)boundtype;
1218 assert(pos == conflictset->
nbdchginfos - 1 || sortval < sortvals[pos+1]);
1221 if( pos > 0 && sortval == sortvals[pos-1] )
1237 relaxedbds[pos-1] = boundtype ==
SCIP_BOUNDTYPE_LOWER ?
MAX(relaxedbds[pos-1], relaxedbd) :
MIN(relaxedbds[pos-1], relaxedbd);
1260 int confnbdchginfos;
1266 assert(conflict !=
NULL);
1267 assert(conflictset !=
NULL);
1268 assert(blkmem !=
NULL);
1269 assert(
set !=
NULL);
1270 assert(bdchginfos !=
NULL || nbdchginfos == 0);
1273 if( nbdchginfos == 0 )
1276 assert(bdchginfos !=
NULL);
1279 if( nbdchginfos == 1 )
1281 bdchginfo = bdchginfos[0];
1282 assert(bdchginfo !=
NULL);
1306 confsortvals = conflictset->
sortvals;
1311 for( i = 0; i < nbdchginfos; ++i )
1313 bdchginfo = bdchginfos[i];
1314 assert(bdchginfo !=
NULL);
1324 assert(idx < INT_MAX/2);
1326 assert((
int)boundtype == 0 || (
int)boundtype == 1);
1327 sortval = 2*idx + (int)boundtype;
1330 confbdchginfos[confnbdchginfos] = bdchginfo;
1332 confsortvals[confnbdchginfos] = sortval;
1343 assert(confnbdchginfos <= conflictset->nbdchginfos + nbdchginfos);
1351 SCIPsortIntPtrReal(confsortvals, (
void**)confbdchginfos, confrelaxedbds, confnbdchginfos);
1355 while( i < confnbdchginfos )
1360 if( confsortvals[k] == confsortvals[i] )
1367 confbdchginfos[k] = confbdchginfos[i];
1368 confrelaxedbds[k] = confrelaxedbds[i];
1369 confsortvals[k] = confsortvals[i];
1374 assert(confsortvals[k] == confsortvals[i]);
1377 confrelaxedbds[k] = (confsortvals[k] % 2 == 0) ?
MAX(confrelaxedbds[k], confrelaxedbds[i]) :
MIN(confrelaxedbds[k], confrelaxedbds[i]);
1390 confbdchginfos[k] = confbdchginfos[i];
1391 confrelaxedbds[k] = confrelaxedbds[i];
1392 confsortvals[k] = confsortvals[i];
1403 assert(k + 1 <= confnbdchginfos);
1420 assert(conflictset !=
NULL);
1432 if( depth > maxdepth[0] )
1434 maxdepth[1] = maxdepth[0];
1435 maxdepth[0] = depth;
1437 else if( depth > maxdepth[1] )
1438 maxdepth[1] = depth;
1440 assert(maxdepth[0] >= maxdepth[1]);
1467 assert(conflictset !=
NULL);
1468 assert(
set !=
NULL);
1469 assert(tree !=
NULL);
1476 assert(currentdepth == tree->
pathlen-1);
1486 depth =
MIN(depth, currentdepth+1);
1487 branchingincluded[depth] =
TRUE;
1512 assert(conflictset1 !=
NULL);
1513 assert(conflictset2 !=
NULL);
1527 assert(i2 == 0 || conflictset2->
sortvals[i2-1] < conflictset2->
sortvals[i2]);
1529 sortval = conflictset2->
sortvals[i2];
1533 assert(i1 == 0 || conflictset1->
sortvals[i1-1] < conflictset1->
sortvals[i1]);
1546 void conflictsetPrint(
1552 assert(conflictset !=
NULL);
1572 assert(conflict !=
NULL);
1573 assert(
set !=
NULL);
1584 assert(num <= conflict->conflictsetssize);
1603 assert(conflict !=
NULL);
1604 assert(
set !=
NULL);
1605 assert(conflictset !=
NULL);
1606 assert(*conflictset !=
NULL);
1607 assert((*conflictset)->validdepth <= (*conflictset)->insertdepth);
1608 assert(set->conf_allowlocal || (*conflictset)->validdepth == 0);
1614 if( set->conf_repropagate )
1615 (*conflictset)->insertdepth =
MIN((*conflictset)->insertdepth, (*conflictset)->repropdepth);
1617 (*conflictset)->repropdepth = INT_MAX;
1618 assert((*conflictset)->insertdepth <= (*conflictset)->repropdepth);
1620 SCIPsetDebugMsg(
set,
"inserting conflict set (valid: %d, insert: %d, conf: %d, reprop: %d):\n",
1621 (*conflictset)->validdepth, (*conflictset)->insertdepth, (*conflictset)->conflictdepth, (*conflictset)->repropdepth);
1622 SCIPdebug(conflictsetPrint(*conflictset));
1656 for( i = pos+1, j = pos+1; i < conflict->
nconflictsets; ++i )
1672 assert(j <= conflict->nconflictsets);
1675 #ifdef SCIP_CONFGRAPH 1676 confgraphMarkConflictset(*conflictset);
1679 *conflictset =
NULL;
1693 assert(
set !=
NULL);
1694 assert(prob !=
NULL);
1696 maxsize = (int)(set->conf_maxvarsfac * (prob->
nvars - prob->
ncontvars));
1697 maxsize =
MAX(maxsize, set->conf_minmaxvars);
1716 assert(var !=
NULL);
1717 assert(stat !=
NULL);
1744 if( insertdepth > 0 )
1755 for( i = 0; i < conflictlength; i++ )
1762 assert(stat !=
NULL);
1775 SCIP_CALL(
incVSIDS(var, blkmem,
set, stat, boundtype, bound, set->conf_conflictweight) );
1800 assert(
set !=
NULL);
1801 assert(conflictset !=
NULL);
1805 assert(bdchginfos !=
NULL);
1806 assert(relaxedbds !=
NULL);
1809 for( v = conflictset->
nbdchginfos - 1; v >= 0; --v )
1812 assert(var !=
NULL);
1819 bound = relaxedbds[v];
1872 int ntrivialredvars;
1877 assert(
set !=
NULL);
1878 assert(prob !=
NULL);
1880 assert(conflictset !=
NULL);
1881 assert(nbdchgs !=
NULL);
1882 assert(nredvars !=
NULL);
1900 assert(bdchginfos !=
NULL);
1901 assert(relaxedbds !=
NULL);
1902 assert(sortvals !=
NULL);
1908 ntrivialredvars = 0;
1913 for( v = nbdchginfos - 1; v >= 0; --v )
1916 bound = relaxedbds[v];
1921 bound += (isupper ? -1.0 : +1.0);
1929 bdchginfos[v] = bdchginfos[nbdchginfos - 1];
1930 relaxedbds[v] = relaxedbds[nbdchginfos - 1];
1931 sortvals[v] = sortvals[nbdchginfos - 1];
1937 assert(ntrivialredvars + nbdchginfos == conflictset->
nbdchginfos);
1939 SCIPsetDebugMsg(
set,
"trivially removed %d redundant of %d variables from conflictset (%p)\n", ntrivialredvars, conflictset->
nbdchginfos, (
void*)conflictset);
1940 conflictset->nbdchginfos = nbdchginfos;
1943 if( conflictset->nbdchginfos == 0 )
1947 if( conflictset->nbdchginfos > set->conf_maxvarsdetectimpliedbounds || conflictset->nbdchginfos == 1 )
1949 *nredvars = ntrivialredvars;
1962 for( v = 0; v < nbdchginfos; ++v )
1966 bounds[v] = relaxedbds[v];
1977 if( !boundtypes[v] )
1994 bounds[v] += ((!boundtypes[v]) ? +1.0 : -1.0);
2010 if( nbinimpls[v] == 0 )
2015 if( v == nbdchginfos && ((!set->conf_fullshortenconflict && nzeroimpls < 2) || (set->conf_fullshortenconflict && nzeroimpls < nbdchginfos)) )
2026 for( v = 0; v < nbdchginfos; ++v )
2029 if( v < nbdchginfos - 1 )
2038 for( v = 0; v < nbdchginfos; ++v )
2042 nbdchgs, redundant, &glbinfeas, set->conf_fullshortenconflict) );
2046 SCIPsetDebugMsg(
set,
"conflict set (%p) led to global infeasibility\n", (
void*) conflictset);
2053 SCIPsetDebugMsg(
set,
"conflict set (%p) led to %d global bound reductions\n", (
void*) conflictset, *nbdchgs);
2060 SCIPsetDebugMsg(
set,
"conflict set (%p) is redundant because at least one global reduction, fulfills the conflict constraint\n", (
void*)conflictset);
2064 else if( *nredvars > 0 )
2066 assert(bdchginfos == conflictset->bdchginfos);
2067 assert(relaxedbds == conflictset->relaxedbds);
2068 assert(sortvals == conflictset->sortvals);
2070 for( v = nbdchginfos - 1; v >= 0; --v )
2077 bdchginfos[v] = bdchginfos[nbdchginfos - 1];
2078 relaxedbds[v] = relaxedbds[nbdchginfos - 1];
2079 sortvals[v] = sortvals[nbdchginfos - 1];
2087 assert((*nredvars) + nbdchginfos == conflictset->nbdchginfos);
2089 SCIPsetDebugMsg(
set,
"removed %d redundant of %d variables from conflictset (%p)\n", (*nredvars), conflictset->nbdchginfos, (
void*)conflictset);
2090 conflictset->nbdchginfos = nbdchginfos;
2103 *nredvars += ntrivialredvars;
2131 assert(conflict !=
NULL);
2132 assert(tree !=
NULL);
2134 assert(conflictset !=
NULL);
2135 assert(conflictset->
validdepth <= insertdepth);
2136 assert(success !=
NULL);
2144 if( conflictset->
nbdchginfos > 1 && insertdepth == 0 )
2170 SCIPsetDebugMsg(
set,
" -> conflict set removed %d redundant variables (old nvars %d, new nvars = %d)\n", nredvars, oldnbdchginfos, conflictset->
nbdchginfos);
2171 SCIPsetDebugMsg(
set,
" -> conflict set led to %d global bound changes %s(cdpt:%d, fdpt:%d, confdpt:%d, len:%d):\n",
2174 conflictsetPrint(conflictset);
2203 assert(var !=
NULL);
2219 reopt, lp, branchcand, eventqueue, cliquetable, var, bound, boundtype,
FALSE) );
2230 for( h = 0; h <
set->nconflicthdlrs; ++h )
2245 SCIPsetDebugMsg(
set,
" -> call conflict handler <%s> (prio=%d) to create conflict set with %d bounds returned result %d\n",
2273 assert(conflict !=
NULL);
2274 assert(
set !=
NULL);
2275 assert(stat !=
NULL);
2276 assert(transprob !=
NULL);
2277 assert(tree !=
NULL);
2283 int nconflictsetsused;
2290 int maxconflictsets;
2295 maxconflictsets = (
set->conf_maxconss == -1 ? INT_MAX :
set->conf_maxconss);
2301 assert(focusdepth <= currentdepth);
2302 assert(currentdepth == tree->
pathlen-1);
2305 SCIPsetDebugMsg(
set,
"flushing %d conflict sets at focus depth %d (maxconflictsets: %d, maxsize: %d)\n",
2306 conflict->
nconflictsets, focusdepth, maxconflictsets, maxsize);
2312 nconflictsetsused = 0;
2313 cutoffdepth = INT_MAX;
2314 repropdepth = INT_MAX;
2315 repropconflictset =
NULL;
2316 for( i = 0; i < conflict->
nconflictsets && nconflictsetsused < maxconflictsets; ++i )
2321 assert(conflictset !=
NULL);
2332 SCIPsetDebugMsg(
set,
" -> ignoring conflict set with insertdepth %d >= cutoffdepth %d\n",
2342 SCIPsetDebugMsg(
set,
" -> empty conflict set in depth %d cuts off sub tree at depth %d\n",
2357 repropconflictset = conflictset;
2366 branchcand, eventqueue, cliquetable, conflictset, conflictset->
insertdepth, &success) );
2375 SCIPsetDebugMsg(
set,
" -> empty conflict set in depth %d cuts off sub tree at depth %d\n",
2379 reopt, lp, blkmem) );
2386 SCIPsetDebugMsg(
set,
" -> conflict set %d/%d added (cdpt:%d, fdpt:%d, insert:%d, valid:%d, conf:%d, reprop:%d, len:%d):\n",
2390 SCIPdebug(conflictsetPrint(conflictset));
2395 repropconflictset =
NULL;
2397 nconflictsetsused++;
2403 if( set->conf_repropagate && repropdepth < cutoffdepth && repropdepth < tree->pathlen )
2405 assert(0 <= repropdepth && repropdepth < tree->pathlen);
2406 assert((
int) tree->
path[repropdepth]->
depth == repropdepth);
2409 if( repropconflictset !=
NULL )
2414 assert(repropconflictset->
repropdepth == repropdepth);
2417 branchcand, eventqueue, cliquetable, repropconflictset, repropdepth, &success) );
2426 SCIPsetDebugMsg(
set,
" -> empty reprop conflict set in depth %d cuts off sub tree at depth %d\n",
2430 reopt, lp, blkmem) );
2436 SCIPsetDebugMsg(
set,
" -> additional reprop conflict set added (cdpt:%d, fdpt:%d, insert:%d, valid:%d, conf:%d, reprop:%d, len:%d):\n",
2440 SCIPdebug(conflictsetPrint(repropconflictset));
2448 SCIPsetDebugMsg(
set,
"marked node %p in depth %d to be repropagated due to conflicts found in depth %d\n",
2449 (
void*)tree->
path[repropdepth], repropdepth, focusdepth);
2471 assert(conflict !=
NULL);
2481 assert(conflict !=
NULL);
2491 assert(conflict !=
NULL);
2501 assert(conflict !=
NULL);
2511 assert(conflict !=
NULL);
2521 assert(conflict !=
NULL);
2531 assert(conflict !=
NULL);
2541 assert(conflict !=
NULL);
2551 assert(conflict !=
NULL);
2569 assert(bdchginfo !=
NULL);
2588 assert(bdchginfo1 !=
NULL);
2589 assert(bdchginfo2 !=
NULL);
2607 if( !set->conf_enable || !set->conf_useprop )
2611 if( set->nconflicthdlrs == 0 )
2624 assert(conflict !=
NULL);
2639 conflictBdchginfoComp) );
2641 conflictBdchginfoComp) );
2643 (*conflict)->conflictsets =
NULL;
2644 (*conflict)->conflictsetscores =
NULL;
2645 (*conflict)->tmpbdchginfos =
NULL;
2646 (*conflict)->conflictsetssize = 0;
2647 (*conflict)->nconflictsets = 0;
2648 (*conflict)->tmpbdchginfossize = 0;
2649 (*conflict)->ntmpbdchginfos = 0;
2650 (*conflict)->count = 0;
2651 (*conflict)->nglbchgbds = 0;
2652 (*conflict)->nappliedglbconss = 0;
2653 (*conflict)->nappliedglbliterals = 0;
2654 (*conflict)->nlocchgbds = 0;
2655 (*conflict)->nappliedlocconss = 0;
2656 (*conflict)->nappliedlocliterals = 0;
2657 (*conflict)->npropcalls = 0;
2658 (*conflict)->npropsuccess = 0;
2659 (*conflict)->npropconfconss = 0;
2660 (*conflict)->npropconfliterals = 0;
2661 (*conflict)->npropreconvconss = 0;
2662 (*conflict)->npropreconvliterals = 0;
2663 (*conflict)->ninflpcalls = 0;
2664 (*conflict)->ninflpsuccess = 0;
2665 (*conflict)->ninflpconfconss = 0;
2666 (*conflict)->ninflpconfliterals = 0;
2667 (*conflict)->ninflpreconvconss = 0;
2668 (*conflict)->ninflpreconvliterals = 0;
2669 (*conflict)->ninflpiterations = 0;
2670 (*conflict)->nboundlpcalls = 0;
2671 (*conflict)->nboundlpsuccess = 0;
2672 (*conflict)->nboundlpconfconss = 0;
2673 (*conflict)->nboundlpconfliterals = 0;
2674 (*conflict)->nboundlpreconvconss = 0;
2675 (*conflict)->nboundlpreconvliterals = 0;
2676 (*conflict)->nboundlpiterations = 0;
2677 (*conflict)->nsbcalls = 0;
2678 (*conflict)->nsbsuccess = 0;
2679 (*conflict)->nsbconfconss = 0;
2680 (*conflict)->nsbconfliterals = 0;
2681 (*conflict)->nsbreconvconss = 0;
2682 (*conflict)->nsbreconvliterals = 0;
2683 (*conflict)->nsbiterations = 0;
2684 (*conflict)->npseudocalls = 0;
2685 (*conflict)->npseudosuccess = 0;
2686 (*conflict)->npseudoconfconss = 0;
2687 (*conflict)->npseudoconfliterals = 0;
2688 (*conflict)->npseudoreconvconss = 0;
2689 (*conflict)->npseudoreconvliterals = 0;
2690 (*conflict)->ndualrayinfglobal = 0;
2691 (*conflict)->ndualrayinfsuccess = 0;
2692 (*conflict)->ndualrayinfseparoot = 0;
2693 (*conflict)->dualrayinfnnonzeros = 0;
2704 assert(conflict !=
NULL);
2705 assert(*conflict !=
NULL);
2706 assert((*conflict)->nconflictsets == 0);
2707 assert((*conflict)->ntmpbdchginfos == 0);
2709 #ifdef SCIP_CONFGRAPH 2736 assert(conflict !=
NULL);
2753 assert(conflict !=
NULL);
2754 assert(
set !=
NULL);
2755 assert(stat !=
NULL);
2756 assert(prob !=
NULL);
2775 if( conflict->
count == 0 )
2776 conflict->
count = 1;
2781 assert(0.0 < set->conf_scorefac && set->conf_scorefac <= 1.0);
2790 for( v = 0; v < prob->
nvars; ++v )
2801 #ifdef SCIP_CONFGRAPH 2803 SCIP_CALL( confgraphCreate(
set, conflict) );
2822 assert(conflict !=
NULL);
2826 assert(var !=
NULL);
2837 SCIPdebugMessage(
"ignoring redundant bound change <%s> >= %g since a stronger lower bound exist <%s> >= %g\n",
2868 SCIPdebugMessage(
"ignoring redundant bound change <%s> <= %g since a stronger upper bound exist <%s> <= %g\n",
2909 assert(conflict !=
NULL);
2916 SCIPsetDebugMsg(
set,
"putting bound change <%s> %s %g(%g) at depth %d to current conflict set\n",
2929 #ifdef SCIP_CONFGRAPH 2930 if( bdchginfo != confgraphcurrentbdchginfo )
2931 confgraphAddBdchg(bdchginfo);
2934 #ifdef SCIP_CONFGRAPH 2936 confgraphLinkBdchg(bdchginfo);
2971 assert(conflict !=
NULL);
2972 assert(
set !=
NULL);
2973 assert(bdchginfo !=
NULL);
2996 #ifdef SCIP_CONFGRAPH 2997 confgraphAddBdchg(bdchginfo);
3000 #ifdef SCIP_CONFGRAPH 3002 confgraphLinkBdchg(bdchginfo);
3036 (*bound) -= constant;
3057 assert(bdchginfo !=
NULL);
3060 SCIPsetDebugMsg(
set,
" -> adding bound <%s> %s %.15g(%.15g) [status:%d, type:%d, depth:%d, pos:%d, reason:<%s>, info:%d] to candidates\n",
3095 SCIP_CALL(
incVSIDS(var, blkmem,
set, stat, boundtype, relaxedbd, set->conf_conflictgraphweight) );
3113 assert(conflict !=
NULL);
3114 assert(stat !=
NULL);
3115 assert(var !=
NULL);
3135 for( i = 0; i < nvars; ++i )
3151 if( bdchginfo ==
NULL )
3176 assert(conflict !=
NULL);
3177 assert(stat !=
NULL);
3178 assert(var !=
NULL);
3207 if( bdchginfo ==
NULL )
3214 nbdchgs = (int) bdchginfo->
pos;
3215 assert(nbdchgs >= 0);
3220 if( set->conf_ignorerelaxedbd )
3235 relaxedbd =
MIN(relaxedbd, newbound);
3243 while( nbdchgs > 0 )
3255 SCIPsetDebugMsg(
set,
"lower bound change %d oldbd=%.15g, newbd=%.15g, depth=%d, pos=%d, redundant=%u\n",
3281 relaxedbd =
MAX(relaxedbd, newbound);
3289 while( nbdchgs > 0 )
3301 SCIPsetDebugMsg(
set,
"upper bound change %d oldbd=%.15g, newbd=%.15g, depth=%d, pos=%d, redundant=%u\n",
3345 assert(var !=
NULL);
3426 assert(conflict !=
NULL);
3454 #ifdef SCIP_CONFGRAPH 3455 confgraphSetCurrentBdchg(bdchginfo);
3469 assert(conflict !=
NULL);
3536 assert(conflict !=
NULL);
3538 assert(
set !=
NULL);
3539 assert(stat !=
NULL);
3540 assert(tree !=
NULL);
3541 assert(success !=
NULL);
3542 assert(nliterals !=
NULL);
3550 if( !set->conf_allowlocal && validdepth > 0 )
3555 assert(currentdepth == tree->
pathlen-1);
3556 assert(focusdepth <= currentdepth);
3558 assert(0 <= validdepth && validdepth <= currentdepth);
3570 SCIPsetDebugMsg(
set,
"adding %d variables from the queue as temporary conflict variables\n", nbdchginfos);
3576 SCIPsetDebugMsg(
set,
" -> conflict with %d literals found at depth %d is active in depth %d and valid in depth %d\n",
3585 if( !set->conf_settlelocal )
3589 SCIPsetDebugMsg(
set,
" -> final conflict set has %d literals\n", *nliterals);
3631 int nforcedbdchgqueue;
3635 assert(conflict !=
NULL);
3639 assert(conflict !=
NULL);
3642 assert(resolved !=
NULL);
3648 assert(actvar !=
NULL);
3654 SCIPsetDebugMsg(
set,
"processing next conflicting bound (depth: %d, valid depth: %d, bdchgtype: %s [%s], vartype: %d): [<%s> %s %g(%g)]\n",
3708 assert(infercons !=
NULL);
3724 assert(infervar !=
NULL);
3726 SCIPsetDebugMsg(
set,
"resolving bound <%s> %s %g(%g) [status:%d, type:%d, depth:%d, pos:%d]: <%s> %s %g [cons:<%s>(%s), info:%d]\n",
3740 if( actvar != infervar )
3757 assert(var == actvar);
3759 relaxedbd *= scalar;
3760 relaxedbd += constant;
3770 if( inferprop !=
NULL )
3784 assert(infervar !=
NULL);
3786 SCIPsetDebugMsg(
set,
"resolving bound <%s> %s %g(%g) [status:%d, depth:%d, pos:%d]: <%s> %s %g [prop:<%s>, info:%d]\n",
3802 assert(!(*resolved));
3818 assert((*resolved) || (nforcedbdchgqueue == 0 && nbdchgqueue == 0));
3840 int* nreconvliterals
3851 assert(conflict !=
NULL);
3852 assert(firstuip !=
NULL);
3853 assert(nreconvconss !=
NULL);
3854 assert(nreconvliterals !=
NULL);
3859 assert(currentdepth == tree->
pathlen-1);
3860 assert(focusdepth <= currentdepth);
3865 maxvaliddepth = (
set->conf_allowlocal ?
MIN(currentdepth-1, focusdepth) : 0);
3866 if( validdepth > maxvaliddepth )
3888 SCIPsetDebugMsg(
set,
"creating reconvergence constraint for UIP <%s> %s %g in depth %d pos %d\n",
3914 oppositeuipbound, &oppositeuip) );
3926 while( bdchginfo !=
NULL && validdepth <= maxvaliddepth )
3945 assert(bdchginfo !=
NULL);
3949 assert(bdchgdepth <= firstuipdepth);
3954 if( bdchgdepth > validdepth && bdchginfo != nextbdchginfo )
3960 assert(actvar !=
NULL);
3970 if( bdchginfo == uip
3971 || (bdchgdepth == firstuipdepth
3972 && nextbdchginfo !=
NULL 3981 else if( forceresolve )
3986 assert(bdchgdepth >= validdepth);
3987 validdepth = bdchgdepth;
3989 SCIPsetDebugMsg(
set,
"couldn't resolve forced bound change on <%s> -> new valid depth: %d\n",
3992 else if( bdchginfo != uip )
4002 assert(nextuip ==
NULL);
4003 nextuip = bdchginfo;
4020 assert(nextuip != uip);
4025 if( nextuip !=
NULL && nresolutions >= 2 && bdchginfo ==
NULL && validdepth <= maxvaliddepth )
4037 SCIPsetDebugMsg(
set,
"creating reconvergence constraint from UIP <%s> to UIP <%s> in depth %d with %d literals after %d resolutions\n",
4043 &success, &nlits) );
4047 (*nreconvliterals) += nlits;
4082 int* nreconvliterals
4093 int lastconsnresolutions;
4094 int lastconsresoldepth;
4096 assert(conflict !=
NULL);
4099 assert(
set !=
NULL);
4100 assert(stat !=
NULL);
4102 assert(nconss !=
NULL);
4103 assert(nliterals !=
NULL);
4104 assert(nreconvconss !=
NULL);
4105 assert(nreconvliterals !=
NULL);
4109 assert(currentdepth == tree->
pathlen-1);
4110 assert(focusdepth <= currentdepth);
4112 resolvedepth = ((
set->conf_fuiplevels >= 0 &&
set->conf_fuiplevels <= currentdepth)
4113 ? currentdepth - set->conf_fuiplevels + 1 : 0);
4114 assert(0 <= resolvedepth && resolvedepth <= currentdepth + 1);
4118 resolvedepth =
MIN(resolvedepth, currentdepth);
4120 SCIPsetDebugMsg(
set,
"analyzing conflict with %d+%d conflict candidates and starting conflict set of size %d in depth %d (resolvedepth=%d)\n",
4127 *nreconvliterals = 0;
4132 maxvaliddepth = (
set->conf_allowlocal ?
MIN(currentdepth-1, focusdepth) : 0);
4133 if( validdepth > maxvaliddepth )
4143 lastconsnresolutions = (mustresolve ? 0 : -1);
4144 lastconsresoldepth = (mustresolve ? currentdepth : INT_MAX);
4153 while( bdchginfo !=
NULL && validdepth <= maxvaliddepth )
4167 assert(0 <= bdchgdepth && bdchgdepth <= currentdepth);
4169 assert(bdchgdepth < tree->pathlen);
4170 assert(tree->
path[bdchgdepth] !=
NULL);
4184 assert(nresolutions >= lastconsnresolutions);
4187 if( nresolutions == lastconsnresolutions )
4188 lastconsresoldepth = bdchgdepth;
4189 else if( bdchgdepth < lastconsresoldepth && (set->conf_interconss == -1 || *nconss < set->conf_interconss) )
4195 SCIPsetDebugMsg(
set,
"creating intermediate conflictset after %d resolutions up to depth %d (valid at depth %d): %d conflict bounds, %d bounds in queue\n",
4200 &success, &nlits) );
4201 lastconsnresolutions = nresolutions;
4202 lastconsresoldepth = bdchgdepth;
4206 (*nliterals) += nlits;
4219 assert(bdchginfo !=
NULL);
4232 if( bdchgdepth > validdepth && bdchginfo != nextbdchginfo )
4238 assert(actvar !=
NULL);
4249 if( (mustresolve && nresolutions == 0)
4250 || (bdchgdepth >= resolvedepth
4251 && nextbdchginfo !=
NULL 4260 else if( forceresolve )
4265 assert(bdchgdepth >= validdepth);
4266 validdepth = bdchgdepth;
4268 SCIPsetDebugMsg(
set,
"couldn't resolve forced bound change on <%s> -> new valid depth: %d\n",
4278 assert(nfirstuips < 2*(currentdepth+1));
4279 firstuips[nfirstuips] = bdchginfo;
4301 if( bdchginfo ==
NULL 4302 && nresolutions > lastconsnresolutions
4303 && validdepth <= maxvaliddepth
4315 (*nliterals) += nlits;
4320 if( set->conf_reconvlevels != 0 && validdepth <= maxvaliddepth )
4325 reconvlevels = (
set->conf_reconvlevels == -1 ? INT_MAX :
set->conf_reconvlevels);
4326 for( i = 0; i < nfirstuips; ++i )
4332 validdepth, firstuips[i], nreconvconss, nreconvliterals) );
4364 int nreconvliterals;
4366 assert(conflict !=
NULL);
4368 assert(
set !=
NULL);
4369 assert(prob !=
NULL);
4371 if( success !=
NULL )
4392 &nconss, &nliterals, &nreconvconss, &nreconvliterals) );
4398 if( success !=
NULL )
4399 *success = (nconss > 0);
4412 assert(conflict !=
NULL);
4422 assert(conflict !=
NULL);
4432 assert(conflict !=
NULL);
4442 assert(conflict !=
NULL);
4452 assert(conflict !=
NULL);
4462 assert(conflict !=
NULL);
4472 assert(conflict !=
NULL);
4482 assert(conflict !=
NULL);
4507 assert(sidechginds !=
NULL);
4508 assert(sidechgoldlhss !=
NULL);
4509 assert(sidechgoldrhss !=
NULL);
4510 assert(sidechgnewlhss !=
NULL);
4511 assert(sidechgnewrhss !=
NULL);
4512 assert(sidechgssize !=
NULL);
4514 if( num > *sidechgssize )
4524 *sidechgssize = newsize;
4526 assert(num <= *sidechgssize);
4552 assert(sidechginds !=
NULL);
4553 assert(sidechgoldlhss !=
NULL);
4554 assert(sidechgoldrhss !=
NULL);
4555 assert(sidechgnewlhss !=
NULL);
4556 assert(sidechgnewrhss !=
NULL);
4557 assert(sidechgssize !=
NULL);
4558 assert(nsidechgs !=
NULL);
4567 sidechgssize, (*nsidechgs)+1) );
4568 assert(*nsidechgs < *sidechgssize);
4569 assert(*sidechginds !=
NULL);
4570 assert(*sidechgoldlhss !=
NULL);
4571 assert(*sidechgoldrhss !=
NULL);
4572 assert(*sidechgnewlhss !=
NULL);
4573 assert(*sidechgnewrhss !=
NULL);
4579 (*sidechgoldlhss)[*nsidechgs] = -lpiinfinity;
4580 (*sidechgnewlhss)[*nsidechgs] = -lpiinfinity;
4584 (*sidechgoldlhss)[*nsidechgs] = lhs - constant;
4585 (*sidechgnewlhss)[*nsidechgs] = -lpiinfinity;
4589 (*sidechgoldrhss)[*nsidechgs] = lpiinfinity;
4590 (*sidechgnewrhss)[*nsidechgs] = lpiinfinity;
4594 (*sidechgoldrhss)[*nsidechgs] = rhs - constant;
4595 (*sidechgnewrhss)[*nsidechgs] = lpiinfinity;
4614 assert(newlb <= newub);
4615 assert(oldlpbdchgs !=
NULL);
4616 assert(relaxedlpbdchgs !=
NULL);
4648 if( !relaxedlpbdchgs->
usedcols[c] )
4650 idx = relaxedlpbdchgs->
nbdchgs;
4661 assert(relaxedlpbdchgs->
bdchginds[idx] == c);
4664 assert(relaxedlpbdchgs->
bdchglbs[idx] >= newlb ||
4666 assert(relaxedlpbdchgs->
bdchgubs[idx] <= newub ||
4695 assert(cands !=
NULL);
4696 assert(candssize !=
NULL);
4698 if( num > *candssize )
4707 *candssize = newsize;
4709 assert(num <= *candssize);
4748 assert(
set !=
NULL);
4749 assert(var !=
NULL);
4750 assert(-1 <= lbchginfopos && lbchginfopos <= var->nlbchginfos);
4751 assert(-1 <= ubchginfopos && ubchginfopos <= var->nubchginfos);
4754 assert(cands !=
NULL);
4755 assert(candscores !=
NULL);
4756 assert(newbounds !=
NULL);
4757 assert(proofactdeltas !=
NULL);
4758 assert(candssize !=
NULL);
4759 assert(ncands !=
NULL);
4760 assert(*ncands <= *candssize);
4761 assert(0 <= firstcand && firstcand <= *ncands);
4764 if( proofcoef > 0.0 )
4766 assert(ubchginfopos >= 0);
4774 depth = currentdepth+1;
4788 assert(lbchginfopos >= 0);
4796 depth = currentdepth+1;
4810 proofactdelta = (newbound - oldbound)*proofcoef;
4811 assert(proofactdelta > 0.0);
4815 score =
calcBdchgScore(prooflhs, proofact, proofactdelta, proofcoef, depth, currentdepth, var,
set);
4826 assert(*cands !=
NULL);
4827 assert(*candscores !=
NULL);
4828 assert(*newbounds !=
NULL);
4829 assert(*proofactdeltas !=
NULL);
4831 SCIPsetDebugMsg(
set,
" -> local <%s> %s %g, relax <%s> %s %g, proofcoef=%g, dpt=%d, resolve=%u, delta=%g, score=%g\n",
4834 proofcoef, depth, resolvable, proofactdelta, score);
4837 for( i = *ncands; i > firstcand && score > (*candscores)[i-1]; --i )
4839 (*cands)[i] = (*cands)[i-1];
4840 (*candscores)[i] = (*candscores)[i-1];
4841 (*newbounds)[i] = (*newbounds)[i-1];
4842 (*proofactdeltas)[i] = (*proofactdeltas)[i-1];
4845 (*candscores)[i] = score;
4846 (*newbounds)[i] = newbound;
4847 (*proofactdeltas)[i] = proofactdelta;
4864 assert(var !=
NULL);
4865 assert(lbchginfopos !=
NULL);
4866 assert(ubchginfopos !=
NULL);
4867 assert(-1 <= *lbchginfopos && *lbchginfopos <= var->nlbchginfos);
4868 assert(-1 <= *ubchginfopos && *ubchginfopos <= var->nubchginfos);
4869 assert(*lbchginfopos == -1 || *lbchginfopos == var->
nlbchginfos 4872 assert(*ubchginfopos == -1 || *ubchginfopos == var->
nubchginfos 4876 if( *lbchginfopos >= 0 && *lbchginfopos < var->nlbchginfos && var->
lbchginfos[*lbchginfopos].
redundant )
4881 if( *ubchginfopos >= 0 && *ubchginfopos < var->nubchginfos && var->
ubchginfos[*ubchginfopos].
redundant )
4918 assert(prob !=
NULL);
4919 assert(proofcoefs !=
NULL);
4921 assert(curvarlbs !=
NULL);
4922 assert(curvarubs !=
NULL);
4923 assert(lbchginfoposs !=
NULL);
4924 assert(ubchginfoposs !=
NULL);
4926 if( resolve !=
NULL )
4930 nvars = prob->
nvars;
4931 assert(nvars == 0 || vars !=
NULL);
4942 for( v = 0; v < nvars; ++v )
4956 if( (lbchginfoposs[v] == -1 && ubchginfoposs[v] == -1) )
4958 proofcoefs[v] = 0.0;
4967 if( lbchginfoposs[v] >= 0 )
4969 SCIPsetDebugMsg(
set,
" -> relaxing variable <%s>[%g,%g] to [%g,%g]: proofcoef=%g, %g <= %g\n",
4971 proofcoefs[v], prooflhs, (*proofact));
4973 lbchginfoposs[v] = -1;
4980 if( ubchginfoposs[v] >= 0 )
4982 SCIPsetDebugMsg(
set,
" -> relaxing variable <%s>[%g,%g] to [%g,%g]: proofcoef=%g, %g <= %g\n",
4984 proofcoefs[v], prooflhs, (*proofact));
4986 ubchginfoposs[v] = -1;
4990 if( relaxed && oldlpbdchgs !=
NULL )
4992 SCIP_CALL(
addBdchg(
set, var, curvarlbs[v], curvarubs[v], oldlpbdchgs, relaxedlpbdchgs, lpi) );
4996 if( lbchginfoposs[v] >= 0 || ubchginfoposs[v] >= 0 )
4998 SCIP_CALL(
addCand(
set, currentdepth, var, lbchginfoposs[v], ubchginfoposs[v], proofcoefs[v],
4999 prooflhs, (*proofact), &cands, &candscores, &newbounds, &proofactdeltas, &candssize, &ncands, 0) );
5003 proofcoefs[v] = 0.0;
5010 for( i = 0; i < ncands; ++i )
5012 assert(proofactdeltas[i] > 0.0);
5022 assert(0 <= v && v < nvars);
5023 assert((lbchginfoposs[v] >= 0) != (ubchginfoposs[v] >= 0));
5025 SCIPsetDebugMsg(
set,
" -> relaxing variable <%s>[%g,%g] to [%g,%g]: proofcoef=%g, %g <= %g + %g\n",
5027 proofcoefs[v] > 0.0 ? curvarlbs[v] : newbounds[i],
5028 proofcoefs[v] > 0.0 ? newbounds[i] : curvarubs[v],
5029 proofcoefs[v], prooflhs, (*proofact), proofactdeltas[i]);
5034 &&
SCIPsetIsEQ(
set, proofactdeltas[i], (newbounds[i] - curvarubs[v])*proofcoefs[v]))
5036 &&
SCIPsetIsEQ(
set, proofactdeltas[i], (newbounds[i] - curvarlbs[v])*proofcoefs[v])));
5039 if( proofcoefs[v] > 0.0 )
5041 assert(ubchginfoposs[v] >= 0);
5042 assert(lbchginfoposs[v] == -1);
5043 curvarubs[v] = newbounds[i];
5048 assert(lbchginfoposs[v] >= 0);
5049 assert(ubchginfoposs[v] == -1);
5050 curvarlbs[v] = newbounds[i];
5053 if( oldlpbdchgs !=
NULL )
5055 SCIP_CALL(
addBdchg(
set, cands[i], curvarlbs[v], curvarubs[v], oldlpbdchgs, relaxedlpbdchgs, lpi) );
5057 (*proofact) += proofactdeltas[i];
5068 if( lbchginfoposs[v] >= 0 || ubchginfoposs[v] >= 0 )
5070 SCIP_CALL(
addCand(
set, currentdepth, cands[i], lbchginfoposs[v], ubchginfoposs[v], proofcoefs[v],
5071 prooflhs, (*proofact), &cands, &candscores, &newbounds, &proofactdeltas, &candssize, &ncands, i+1) );
5074 proofcoefs[v] = 0.0;
5090 #define NUMSTOP 9007199254740992.0 5114 assert(prob !=
NULL);
5118 assert(curvarlbs !=
NULL);
5119 assert(curvarubs !=
NULL);
5120 assert(lbchginfoposs !=
NULL);
5121 assert(ubchginfoposs !=
NULL);
5122 assert(valid !=
NULL);
5123 assert(resolve !=
NULL);
5137 curvarlbs, curvarubs, lbchginfoposs, ubchginfoposs, oldlpbdchgs, relaxedlpbdchgs, resolve, lpi) );
5187 assert(
set !=
NULL);
5188 assert(prob !=
NULL);
5192 assert(curvarlbs !=
NULL);
5193 assert(curvarubs !=
NULL);
5194 assert(lbchginfoposs !=
NULL);
5195 assert(ubchginfoposs !=
NULL);
5196 assert(valid !=
NULL);
5197 assert(resolve !=
NULL);
5212 nvars = prob->
nvars;
5213 assert(nrows == 0 || rows !=
NULL);
5263 for( r = 0; r < nrows; ++r )
5266 assert(row !=
NULL);
5269 assert(row == lp->
lpirows[r]);
5278 SCIPsetDebugMsg(
set,
" -> infeasible dual solution %g in row <%s>: lhs=%g, rhs=%g\n",
5289 for( i = 0; i < row->
len; ++i )
5292 assert(0 <= v && v < nvars);
5293 dualcoefs[v] -= dualsols[r] * row->
vals[i];
5300 if( dualsols[r] > 0.0 )
5303 duallhs += dualsols[r] * (row->
lhs - row->
constant);
5308 duallhs += dualsols[r] * (row->
rhs - row->
constant);
5310 SCIPsetDebugMsg(
set,
" -> global row <%s>[%g,%g]: dual=%g -> duallhs=%g\n",
5319 for( v = 0; v < nvars; ++v )
5338 assert(c == -1 || col == lp->
cols[c]);
5339 assert(c == -1 || col == lp->
lpicols[c]);
5345 capped_primsol = primsols[c];
5355 SCIPsetDebugMsg(
set,
" -> infeasible reduced costs %g in var <%s>: lb=%g, ub=%g\n",
5356 varredcosts[v],
SCIPvarGetName(var), curvarlbs[v], curvarubs[v]);
5362 dualcoefs[v] -= varredcosts[v];
5365 if( dualcoefs[v] > 0.0 )
5369 dualact += dualcoefs[v] * curvarubs[v];
5375 dualact += dualcoefs[v] * curvarlbs[v];
5378 SCIPsetDebugMsg(
set,
" -> final dual values: lhs=%g, act=%g\n", duallhs, dualact);
5385 curvarlbs, curvarubs, lbchginfoposs, ubchginfoposs, oldlpbdchgs, relaxedlpbdchgs, resolve, lpi) );
5419 int* nreconvliterals
5431 assert(prob !=
NULL);
5432 assert(lbchginfoposs !=
NULL);
5433 assert(ubchginfoposs !=
NULL);
5434 assert(nconss !=
NULL);
5435 assert(nliterals !=
NULL);
5436 assert(nreconvconss !=
NULL);
5437 assert(nreconvliterals !=
NULL);
5442 *nreconvliterals = 0;
5445 nvars = prob->
nvars;
5446 assert(nvars == 0 || vars !=
NULL);
5460 SCIPsetDebugMsg(
set,
"initial conflict set after undoing bound changes:\n");
5463 for( v = 0; v < nvars && nbdchgs < maxsize; ++v )
5466 assert(var !=
NULL);
5469 assert(-1 <= lbchginfoposs[v] && lbchginfoposs[v] <= var->
nlbchginfos);
5470 assert(-1 <= ubchginfoposs[v] && ubchginfoposs[v] <= var->
nubchginfos);
5501 SCIPsetDebugMsg(
set,
" force: <%s> %s %g [status: %d, type: %d, dive/strong]\n",
5517 if( lbchginfoposs[v] >= 0 )
5522 if( ubchginfoposs[v] >= 0 )
5535 nconss, nliterals, nreconvconss, nreconvliterals) );
5574 nvars = prob->
nvars;
5575 assert(nrows == 0 || rows !=
NULL);
5596 for( r = 0; r < nrows; ++r )
5599 assert(row !=
NULL);
5602 assert(row == lp->
lpirows[r]);
5621 if( dualfarkas[r] > 0.0 )
5633 (*farkaslhs) += dualfarkas[r] * (row->
lhs - row->
constant);
5648 (*farkaslhs) += dualfarkas[r] * (row->
rhs - row->
constant);
5661 for( i = 0; i < row->
len; ++i )
5664 assert(0 <= v && v < nvars);
5665 farkascoefs[v] += dualfarkas[r] * row->
vals[i];
5671 SCIPsetDebugMsg(
set,
" -> ignoring %s row <%s> with dual Farkas value %.10f (lhs=%g, rhs=%g)\n",
5680 for( v = 0; v < nvars; ++v )
5685 if( farkascoefs[v] > 0.0 )
5699 farkascoefs[v] = 0.0;
5702 (*farkasact) += farkascoefs[v] * curvarubs[v];
5705 curvarlbs[v], curvarubs[v], (*farkasact));
5707 else if( farkascoefs[v] < 0.0 )
5721 farkascoefs[v] = 0.0;
5724 (*farkasact) += farkascoefs[v] * curvarlbs[v];
5727 curvarlbs[v], curvarubs[v], (*farkasact));
5730 SCIPdebugMessage(
" -> farkaslhs=%g, farkasact=%g\n", *farkaslhs, (*farkasact));
5738 SCIPsetDebugMsg(
set,
" -> proof is not valid: %g <= %g\n", *farkaslhs, *farkasact);
5760 for( i = 0; i < nvarinds; i++ )
5766 minact += vals[v] * curvarlbs[v];
5768 minact += vals[v] * curvarubs[v];
5790 for( i = 0; i < nvars; i++ )
5792 assert(vars[i] !=
NULL);
5827 assert(transprob !=
NULL);
5828 assert(vals !=
NULL);
5829 assert(varused !=
NULL);
5830 assert(nvarinds !=
NULL);
5831 assert(varinds !=
NULL && *nvarinds >= 0);
5832 assert(rhs !=
NULL);
5833 assert(success !=
NULL);
5842 copy_nvarinds = (*nvarinds);
5845 SCALE,
NULL,
NULL, copy_vals, ©_rhs, copy_varinds, ©_nvarinds, &minact, copy_varused, success, &islocal) );
5872 SCIPsetDebugMsg(
set,
"-> after MIR: nvars=%d minact=%g rhs=%g violation=%g separoot=%u\n",
5873 copy_nvarinds, minact, copy_rhs, violation, separoot);
5878 if( *success && separoot )
5884 (*nvarinds) = copy_nvarinds;
5905 SCIPsetDebugMsg(
set,
"-> %s: minact=%g rhs=%g violation=%g\n",infostr !=
NULL ? infostr :
"" , minact, rhs, minact - rhs);
5908 #define debugPrintViolationInfo(...) 5950 for( i = 0; i < *nvarinds; i++ )
5970 SCIPsetDebugMsg(
set,
"-> tighten dual ray: nvars=%d (bin=%d, int=%d, cont=%d)",
5971 (*nvarinds), nbinvars, nintvars, ncontvars);
5975 if( ncontvars == (*nvarinds) )
5982 if( set->conf_applymir )
5984 SCIP_CALL(
applyMIR(
set, transprob, vals, varused, varinds, nvarinds, rhs, success) );
5996 for( i = 0; i < *nvarinds; )
5998 int idx = varinds[i];
6000 assert(vars[idx] !=
NULL);
6003 assert(varused[idx]);
6018 locbd = (vals[idx] < 0.0 ? curvarubs[idx] : curvarlbs[idx]);
6031 (*rhs) -= (glbbd * vals[idx]);
6036 varused[idx] =
FALSE;
6039 varinds[i] = varinds[(*nvarinds)-1];
6045 if( set->conf_applymir )
6047 SCIP_CALL(
applyMIR(
set, transprob, vals, varused, varinds, nvarinds, rhs, success) );
6053 SCIPsetDebugMsg(
set,
"-> final constraint after tightenDualray():\n");
6054 for( i = 0; i < *nvarinds; i++ )
6100 assert(conflict !=
NULL);
6101 assert(conflictstore !=
NULL);
6102 assert(vars !=
NULL);
6103 assert(vals !=
NULL);
6113 for( i = 0; i < nvars; i++ )
6118 normcons += (vals[i] * vals[i]);
6154 SCIPsetDebugMsg(
set,
"detect global infeasibility: lhs=%g, activity=%g, rhs=%g\n", lhs, activity, rhs);
6158 goto UPDATESTATISTICS;
6162 if( set->conf_minmaxvars < nnonzeros && nnonzeros > set->conf_maxvarsfac * transprob->
nvars )
6166 fillin += nnonzeros;
6171 SCIPsetDebugMsg(
set,
"check constraint: fill-in %g (nnz=%d), threshold %g, fdpt %d, cdpt %d\n", fillin,
6180 orthogonality = 1.0;
6182 orthogonality = 1.0 -
REALABS(prod) / (SQRT(normcons) * SQRT(normobj));
6184 if(
SCIPsetIsLT(
set, orthogonality, set->sepa_minortho) )
6201 if( upgdcons !=
NULL )
6217 SCIPsetDebugMsg(
set,
"added proof-constraint to node %p in depth 0 (npc %d)\n", (
void*)tree->
path[0],
6267 assert(tree !=
NULL);
6294 SCIPdebugMessage(
"detect global infeasibility at var <%s>: locdom=[%g,%g] glbdom=[%g,%g] new %s bound=%g\n",
6307 SCIP_CALL(
SCIPnodeAddBoundchg(tree->
root, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand,
6308 eventqueue, cliquetable, var, newbound, boundtype,
FALSE) );
6369 assert(
set !=
NULL);
6370 assert(transprob !=
NULL);
6371 assert(farkascoefs !=
NULL);
6374 ndualrayvars = transprob->
nvars;
6381 *globalinfeasible =
FALSE;
6387 mirrhs = -farkaslhs;
6388 for( v = 0; v < transprob->
nvars; v++ )
6394 varinds[nmirvars] = v;
6408 *globalinfeasible =
TRUE;
6415 assert(nmirvars >= 1);
6418 activity =
getMinActivity(mirvals, varinds, nmirvars, curvarlbs, curvarubs);
6429 if( nmirvars == 1 && !diving )
6432 branchcand, eventqueue, cliquetable, mirvars[varinds[0]], mirvals[varinds[0]], mirrhs, success) );
6437 SCIP_CALL(
tightenDualray(
set, transprob, mirvals, &mirrhs, varinds, &nmirvars, varused, curvarlbs, curvarubs,
6438 diving, &mirsuccess) );
6441 if( nmirvars == 1 && mirsuccess && !diving )
6444 branchcand, eventqueue, cliquetable, mirvars[varinds[0]], mirvals[varinds[0]], mirrhs, success) );
6456 blkmem, ndualrayvars, mirvars, mirvals, -
SCIPsetInfinity(
set), mirrhs, success) );
6458 else if( !set->conf_prefermir )
6462 blkmem, ndualrayvars, mirvars, farkascoefs, farkaslhs,
SCIPsetInfinity(
set), success) );
6526 assert(
set !=
NULL);
6545 ubchginfoposs, oldlpbdchgs, relaxedlpbdchgs, valid, &resolve, farkascoefs, (*farkaslhs), farkasactivity) );
6551 oldlpbdchgs, relaxedlpbdchgs, valid, &resolve) );
6557 solvelp = (
set->conf_maxlploops != 0 &&
set->conf_lpiterations != 0);
6559 if( (*valid) && resolve && solvelp )
6582 maxlploops = (
set->conf_maxlploops >= 0 ?
set->conf_maxlploops : INT_MAX);
6583 lpiterations = (
set->conf_lpiterations >= 0 ?
set->conf_lpiterations : INT_MAX);
6590 assert(nrows == 0 || rows !=
NULL);
6598 sidechgssize = nrows;
6605 for( r = 0 ; r < nrows; ++r )
6614 &sidechgnewlhss, &sidechgnewrhss, &sidechgssize, &nsidechgs) );
6628 globalinfeasible =
FALSE;
6629 while( (*valid) && resolve && nloops < maxlploops )
6633 assert(!globalinfeasible);
6638 SCIPdebugMessage(
"infeasible LP conflict analysis loop %d (changed col bounds: %d)\n", nloops, relaxedlpbdchgs->
nbdchgs);
6641 assert(relaxedlpbdchgs->
nbdchgs >= 0);
6642 if( relaxedlpbdchgs->
nbdchgs > 0 )
6671 (*iterations) += iter;
6674 SCIPdebugMessage(
" -> resolved LP in %d iterations (total: %" SCIP_LONGINT_FORMAT
") (infeasible:%u)\n",
6699 curvarlbs, curvarubs, valid) );
6706 if( set->conf_useinflp ==
'd' || set->conf_useinflp ==
'b' )
6713 SCIP_CALL(
performDualRayAnalysis(conflict,
set, stat, blkmem, origprob, transprob, tree, reopt, lp, branchcand,
6714 eventqueue, cliquetable, conflictstore, farkascoefs, (*farkaslhs), curvarlbs, curvarubs,
6715 lbchginfoposs, ubchginfoposs, diving, &globalinfeasible, dualraysuccess) );
6720 if( globalinfeasible )
6724 lbchginfoposs, ubchginfoposs, oldlpbdchgs, relaxedlpbdchgs, valid, &resolve,
6725 farkascoefs, (*farkaslhs), farkasactivity) );
6731 lbchginfoposs, ubchginfoposs, oldlpbdchgs, relaxedlpbdchgs, valid, &resolve) );
6734 assert(!resolve || (*valid));
6735 assert(!resolve || relaxedlpbdchgs->
nbdchgs > 0);
6736 SCIPdebugMessage(
" -> finished infeasible LP conflict analysis loop %d (iter: %d, nbdchgs: %d)\n",
6737 nloops, iter, relaxedlpbdchgs->
nbdchgs);
6740 SCIPdebugMessage(
"finished undoing bound changes after %d loops (valid=%u, nbdchgs: %d)\n",
6741 nloops, (*valid), oldlpbdchgs->
nbdchgs);
6744 if( oldlpbdchgs->
nbdchgs > 0 )
6757 if( oldlpbdchgs->
nbdchgs > 0 || nsidechgs > 0 )
6762 if ( marklpunsolved )
6814 int* nreconvliterals,
6832 assert(conflict !=
NULL);
6834 assert(
set !=
NULL);
6836 assert(stat !=
NULL);
6837 assert(transprob !=
NULL);
6841 assert(iterations !=
NULL);
6842 assert(nconss !=
NULL);
6843 assert(nliterals !=
NULL);
6844 assert(nreconvconss !=
NULL);
6845 assert(nreconvliterals !=
NULL);
6851 *nreconvliterals = 0;
6853 vars = transprob->
vars;
6854 nvars = transprob->
nvars;
6876 if( objval < lp->lpiuobjlim )
6903 (*iterations) += iter;
6906 SCIPdebugMessage(
" -> resolved objlim exceeding LP in %d iterations (total: %" SCIP_LONGINT_FORMAT
") (infeasible:%u, objlim: %u, optimal:%u)\n",
6929 if( objval < lp->lpiuobjlim )
6948 farkasactivity = 0.0;
6960 for( v = 0; v < nvars && valid; ++v )
7006 curvarubs, &valid) );
7012 globalinfeasible =
FALSE;
7019 SCIP_CALL(
performDualRayAnalysis(conflict,
set, stat, blkmem, origprob, transprob, tree, reopt, lp, branchcand,
7020 eventqueue, cliquetable, conflictstore, farkascoefs, farkaslhs, curvarlbs, curvarubs, lbchginfoposs,
7021 ubchginfoposs, diving, &globalinfeasible, dualraysuccess) );
7025 if( !globalinfeasible && (set->conf_useinflp ==
'c' || set->conf_useinflp ==
'b') )
7032 SCIPdebugMessage(
"analyzing conflict on infeasible LP (infeasible: %u, objlimexc: %u, optimal:%u) in depth %d (diving: %u)\n",
7040 SCIP_CALL(
runBoundHeuristic(conflict,
set, stat, origprob, transprob, tree, reopt, lp, lpi, branchcand,
7041 eventqueue, cliquetable, conflictstore, blkmem, farkascoefs, &farkaslhs, &farkasactivity, curvarlbs,
7042 curvarubs, lbchginfoposs, ubchginfoposs, iterations, diving, marklpunsolved, dualraysuccess, &valid) );
7049 lbchginfoposs, ubchginfoposs, nconss, nliterals, nreconvconss, nreconvliterals) );
7052 SCIP_CALL(
SCIPconflictFlushConss(conflict, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue, cliquetable) );
7093 int nreconvliterals;
7095 assert(conflict !=
NULL);
7096 assert(
set !=
NULL);
7100 assert(success ==
NULL || *success ==
FALSE);
7103 if( !set->conf_enable || set->conf_useinflp ==
'o' )
7107 if( set->nconflicthdlrs == 0 )
7110 SCIPsetDebugMsg(
set,
"analyzing conflict on infeasible LP in depth %d (solstat: %d, objchanged: %u)\n",
7120 SCIP_CALL(
conflictAnalyzeLP(conflict, conflictstore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
7121 cliquetable,
SCIPlpDiving(lp), &dualraysuccess, &iterations, &nconss, &nliterals, &nreconvconss, &nreconvliterals,
TRUE) );
7122 conflict->
ninflpsuccess += ((nconss > 0 || dualraysuccess) ? 1 : 0);
7128 if( success !=
NULL )
7129 *success = (nconss > 0);
7166 int nreconvliterals;
7168 assert(conflict !=
NULL);
7169 assert(
set !=
NULL);
7174 assert(success ==
NULL || *success ==
FALSE);
7177 if( !set->conf_enable || set->conf_useboundlp ==
'o')
7181 if( set->nconflicthdlrs == 0 )
7184 SCIPsetDebugMsg(
set,
"analyzing conflict on bound exceeding LP in depth %d (solstat: %d)\n",
7196 SCIP_CALL(
conflictAnalyzeLP(conflict, conflictstore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue,
7197 cliquetable,
SCIPlpDiving(lp), &dualraysuccess, &iterations, &nconss, &nliterals, &nreconvconss, &nreconvliterals,
TRUE) );
7198 conflict->
nboundlpsuccess += ((nconss > 0 || dualraysuccess) ? 1 : 0);
7204 if( success !=
NULL )
7205 *success = (nconss > 0);
7243 if( success !=
NULL )
7247 if( !set->conf_enable || (set->conf_useinflp ==
'o' && set->conf_useboundlp ==
'o') )
7275 for (c = 0; c < lp->
ncols; ++c)
7280 assert( col !=
NULL );
7286 for (r = 0; r < lp->
nrows; ++r)
7291 assert( row !=
NULL );
7308 SCIP_CALL(
conflictAnalyzeInfeasibleLP(conflict, conflictstore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp,
7309 branchcand, eventqueue, cliquetable, success) );
7313 SCIP_CALL(
conflictAnalyzeBoundexceedingLP(conflict, conflictstore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp,
7314 branchcand, eventqueue, cliquetable, success) );
7328 for (c = 0; c < lp->
ncols; ++c)
7333 assert( col !=
NULL );
7338 for (r = 0; r < lp->
nrows; ++r)
7343 assert( row !=
NULL );
7367 assert(conflict !=
NULL);
7377 assert(conflict !=
NULL);
7387 assert(conflict !=
NULL);
7397 assert(conflict !=
NULL);
7407 assert(conflict !=
NULL);
7417 assert(conflict !=
NULL);
7427 assert(conflict !=
NULL);
7437 assert(conflict !=
NULL);
7447 assert(conflict !=
NULL);
7457 assert(conflict !=
NULL);
7467 assert(conflict !=
NULL);
7477 assert(conflict !=
NULL);
7487 assert(conflict !=
NULL);
7497 assert(conflict !=
NULL);
7507 assert(conflict !=
NULL);
7517 assert(conflict !=
NULL);
7564 int nreconvliterals;
7566 assert(stat !=
NULL);
7571 assert(col !=
NULL);
7578 if( downconflict !=
NULL )
7579 *downconflict =
FALSE;
7580 if( upconflict !=
NULL )
7581 *upconflict =
FALSE;
7584 if( !set->conf_enable || !set->conf_usesb )
7588 if( set->nconflicthdlrs == 0 )
7614 if( newub >= col->
lb - 0.5 )
7616 SCIPsetDebugMsg(
set,
"analyzing conflict on infeasible downwards strongbranch for variable <%s>[%g,%g] in depth %d\n",
7646 SCIPsetDebugMsg(
set,
" -> resolved downwards strong branching LP in %d iterations\n", iter);
7649 SCIP_CALL(
conflictAnalyzeLP(conflict, conflictstore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand,
7650 eventqueue, cliquetable,
TRUE, &dualraysuccess, &iter, &nconss, &nliterals, &nreconvconss, &nreconvliterals,
FALSE) );
7651 conflict->
nsbsuccess += ((nconss > 0 || dualraysuccess) ? 1 : 0);
7657 if( downconflict !=
NULL )
7658 *downconflict = (nconss > 0);
7677 if( newlb <= col->ub + 0.5 )
7679 SCIPsetDebugMsg(
set,
"analyzing conflict on infeasible upwards strongbranch for variable <%s>[%g,%g] in depth %d\n",
7709 SCIPsetDebugMsg(
set,
" -> resolved upwards strong branching LP in %d iterations\n", iter);
7712 SCIP_CALL(
conflictAnalyzeLP(conflict, conflictstore, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand,
7713 eventqueue, cliquetable,
TRUE, &dualraysuccess, &iter, &nconss, &nliterals, &nreconvconss, &nreconvliterals,
FALSE) );
7714 conflict->
nsbsuccess += ((nconss > 0 || dualraysuccess) ? 1 : 0);
7720 if( upconflict !=
NULL )
7721 *upconflict = (nconss > 0);
7769 assert(conflict !=
NULL);
7779 assert(conflict !=
NULL);
7789 assert(conflict !=
NULL);
7799 assert(conflict !=
NULL);
7809 assert(conflict !=
NULL);
7819 assert(conflict !=
NULL);
7829 assert(conflict !=
NULL);
7839 assert(conflict !=
NULL);
7849 assert(conflict !=
NULL);
7859 assert(conflict !=
NULL);
7869 assert(conflict !=
NULL);
7915 assert(conflict !=
NULL);
7917 assert(
set !=
NULL);
7918 assert(stat !=
NULL);
7919 assert(transprob !=
NULL);
7924 if( success !=
NULL )
7928 if( !set->conf_enable || !set->conf_usepseudo )
7932 if( set->nconflicthdlrs == 0 )
7935 SCIPsetDebugMsg(
set,
"analyzing pseudo solution (obj: %g) that exceeds objective limit (%g)\n",
7945 vars = transprob->
vars;
7946 nvars = transprob->
nvars;
7947 assert(nvars == 0 || vars !=
NULL);
7975 for( v = 0; v < nvars; ++v )
7981 if( pseudocoefs[v] > 0.0 )
7982 pseudoact += pseudocoefs[v] * curvarubs[v];
7984 pseudoact += pseudocoefs[v] * curvarlbs[v];
7989 SCIPsetDebugMsg(
set,
" -> recalculated pseudo infeasibility proof: %g <= %g\n", pseudolhs, pseudoact);
7997 int nreconvliterals;
8001 curvarlbs, curvarubs, lbchginfoposs, ubchginfoposs,
NULL,
NULL,
NULL, lp->
lpi) );
8005 lbchginfoposs, ubchginfoposs, &nconss, &nliterals, &nreconvconss, &nreconvliterals) );
8011 if( success !=
NULL )
8012 *success = (nconss > 0);
8023 SCIP_CALL(
SCIPconflictFlushConss(conflict, blkmem,
set, stat, transprob, origprob, tree, reopt, lp, branchcand, eventqueue, cliquetable) );
8036 assert(conflict !=
NULL);
8046 assert(conflict !=
NULL);
8056 assert(conflict !=
NULL);
8066 assert(conflict !=
NULL);
8076 assert(conflict !=
NULL);
8086 assert(conflict !=
NULL);
8096 assert(conflict !=
NULL);
8108 assert(conflict !=
NULL);
enum SCIP_Result SCIP_RESULT
void SCIPconflictEnableOrDisableClocks(SCIP_CONFLICT *conflict, SCIP_Bool enable)
SCIP_Longint SCIPconflictGetNStrongbranchSuccess(SCIP_CONFLICT *conflict)
static SCIP_Bool bdchginfoIsResolvable(SCIP_BDCHGINFO *bdchginfo)
enum SCIP_BoundType SCIP_BOUNDTYPE
SCIP_CLOCK * propanalyzetime
SCIP_Real SCIPbdchginfoGetRelaxedBound(SCIP_BDCHGINFO *bdchginfo)
int SCIPpqueueNElems(SCIP_PQUEUE *pqueue)
SCIP_Bool SCIPconflicthdlrIsInitialized(SCIP_CONFLICTHDLR *conflicthdlr)
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)
void SCIPconflicthdlrSetInit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINIT((*conflictinit)))
SCIP_Longint ninflpconfliterals
SCIP_Longint SCIPconflictGetNLocalChgBds(SCIP_CONFLICT *conflict)
SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
SCIP_RETCODE SCIPconflictAnalyzeLP(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, 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)
#define BMSfreeBlockMemoryArrayNull(mem, ptr, num)
SCIP_Longint ninflpreconvconss
SCIP_Longint SCIPconflictGetNPropConflictConss(SCIP_CONFLICT *conflict)
const char * SCIPconflicthdlrGetDesc(SCIP_CONFLICTHDLR *conflicthdlr)
SCIP_Bool SCIPsetIsLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
static int conflictCalcMaxsize(SCIP_SET *set, SCIP_PROB *prob)
SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
void SCIPhistoryIncVSIDS(SCIP_HISTORY *history, SCIP_BRANCHDIR dir, SCIP_Real weight)
SCIP_RETCODE SCIPconflictAddBound(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx)
SCIP_RETCODE SCIPvarIncVSIDS(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real weight)
SCIP_PROP * SCIPbdchginfoGetInferProp(SCIP_BDCHGINFO *bdchginfo)
SCIP_Real SCIPgetVarUbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
static SCIP_RETCODE performDualRayAnalysis(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, BMS_BLKMEM *blkmem, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_CONFLICTSTORE *conflictstore, SCIP_Real *farkascoefs, SCIP_Real farkaslhs, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, SCIP_Bool diving, SCIP_Bool *globalinfeasible, SCIP_Bool *success)
SCIP_Bool SCIPlpDiving(SCIP_LP *lp)
SCIP_BDCHGINFO * SCIPvarGetBdchgInfoLb(SCIP_VAR *var, int pos)
SCIP_Longint SCIPconflictGetNDualrayInfeasibleNonzeros(SCIP_CONFLICT *conflict)
#define BMSfreeMemoryArrayNull(ptr)
SCIP_Real * SCIPvarGetMultaggrScalars(SCIP_VAR *var)
SCIP_RETCODE SCIPlpiGetDualfarkas(SCIP_LPI *lpi, SCIP_Real *dualfarkas)
internal methods for branch and bound tree
static SCIP_BDCHGINFO * conflictRemoveCand(SCIP_CONFLICT *conflict)
static SCIP_Bool isBoundchgUseless(SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo)
SCIP_Longint SCIPconflictGetNPropSuccess(SCIP_CONFLICT *conflict)
SCIP_Real SCIPgetVarLbAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
SCIP_Real SCIPbdchginfoGetOldbound(SCIP_BDCHGINFO *bdchginfo)
void SCIPconflicthdlrSetExit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXIT((*conflictexit)))
int SCIPconsGetValidDepth(SCIP_CONS *cons)
static SCIP_RETCODE runBoundHeuristic(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_LPI *lpi, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_CONFLICTSTORE *conflictstore, BMS_BLKMEM *blkmem, SCIP_Real *farkascoefs, SCIP_Real *farkaslhs, SCIP_Real *farkasactivity, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, int *lbchginfoposs, int *ubchginfoposs, int *iterations, SCIP_Bool diving, SCIP_Bool marklpunsolved, SCIP_Bool *dualraysuccess, SCIP_Bool *valid)
static SCIP_Real calcBdchgScore(SCIP_Real prooflhs, SCIP_Real proofact, SCIP_Real proofactdelta, SCIP_Real proofcoef, int depth, int currentdepth, SCIP_VAR *var, SCIP_SET *set)
#define SCIPsetAllocBuffer(set, ptr)
SCIP_Bool SCIPsetIsFeasEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
int SCIPvarGetNVlbs(SCIP_VAR *var)
SCIP_VAR * SCIPbdchginfoGetVar(SCIP_BDCHGINFO *bdchginfo)
#define SCIPsetDuplicateBufferArray(set, ptr, source, num)
void SCIPconflicthdlrSetInitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTINITSOL((*conflictinitsol)))
SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictConss(SCIP_CONFLICT *conflict)
SCIP_PARAMDATA * SCIPparamGetData(SCIP_PARAM *param)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_Longint SCIPconflictGetNAppliedGlobalConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNBoundexceedingLPIterations(SCIP_CONFLICT *conflict)
SCIP_CLOCK * conflictlptime
SCIP_Real SCIPconflicthdlrGetSetupTime(SCIP_CONFLICTHDLR *conflicthdlr)
static void lpbdchgsReset(SCIP_LPBDCHGS *lpbdchgs, int ncols)
void SCIPgmlWriteArc(FILE *file, unsigned int source, unsigned int target, const char *label, const char *color)
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)
SCIP_Longint SCIPconflictGetNPseudoReconvergenceLiterals(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPlpiGetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real *dval)
internal methods for clocks and timing issues
SCIP_Longint SCIPconflictGetNGlobalChgBds(SCIP_CONFLICT *conflict)
SCIP_BOUNDCHG * boundchgs
SCIP_Bool SCIPsetIsPositive(SCIP_SET *set, SCIP_Real val)
SCIP_Longint nappliedlocliterals
SCIP_VAR ** SCIPvarGetMultaggrVars(SCIP_VAR *var)
SCIP_CLOCK * inflpanalyzetime
struct SCIP_ParamData SCIP_PARAMDATA
SCIP_Longint SCIPconflictGetNPseudoConflictLiterals(SCIP_CONFLICT *conflict)
#define SCIPsetAllocCleanBufferArray(set, ptr, num)
SCIP_RETCODE SCIPbdchginfoCreate(SCIP_BDCHGINFO **bdchginfo, BMS_BLKMEM *blkmem, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_Real oldbound, SCIP_Real newbound)
void SCIPconflicthdlrSetCopy(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTCOPY((*conflictcopy)))
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Longint SCIPconflictGetNInfeasibleLPSuccess(SCIP_CONFLICT *conflict)
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)
SCIP_Longint nappliedglbliterals
SCIP_Longint SCIPconflictGetNPropCalls(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNDualrayInfSuccess(SCIP_CONFLICT *conflict)
SCIP_Longint npseudoreconvliterals
const char * SCIProwGetName(SCIP_ROW *row)
void SCIPgmlWriteNode(FILE *file, unsigned int id, const char *label, const char *nodetype, const char *fillcolor, const char *bordercolor)
static SCIP_RETCODE lpbdchgsCreate(SCIP_LPBDCHGS **lpbdchgs, SCIP_SET *set, int ncols)
SCIP_Longint SCIPconflictGetNStrongbranchIterations(SCIP_CONFLICT *conflict)
SCIP_Real SCIPconflicthdlrGetTime(SCIP_CONFLICTHDLR *conflicthdlr)
static SCIP_RETCODE conflictsetCalcInsertDepth(SCIP_CONFLICTSET *conflictset, SCIP_SET *set, SCIP_TREE *tree)
interface methods for specific LP solvers
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_Longint npropconfliterals
SCIP_Real SCIPsetInfinity(SCIP_SET *set)
SCIP_RETCODE SCIPconflictstoreAddDualraycons(SCIP_CONFLICTSTORE *conflictstore, SCIP_CONS *dualraycons, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *transprob, SCIP_REOPT *reopt)
static SCIP_RETCODE conflictAddConflictBound(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd)
int SCIPprobGetNVars(SCIP_PROB *prob)
SCIP_BDCHGINFO * ubchginfos
SCIP_Bool SCIPbdchgidxIsEarlier(SCIP_BDCHGIDX *bdchgidx1, SCIP_BDCHGIDX *bdchgidx2)
SCIP_Real SCIPvarGetRootSol(SCIP_VAR *var)
void SCIPconsMarkConflict(SCIP_CONS *cons)
void SCIPgmlWriteClosing(FILE *file)
SCIP_Longint nappliedglbconss
SCIP_Real SCIPvarGetLbLP(SCIP_VAR *var, SCIP_SET *set)
SCIP_RETCODE SCIPvarScaleVSIDS(SCIP_VAR *var, SCIP_Real scalar)
datastructures for conflict analysis
SCIP_Longint npseudoreconvconss
SCIP_Bool SCIPlpiWasSolved(SCIP_LPI *lpi)
void SCIPclockStop(SCIP_CLOCK *clck, SCIP_SET *set)
SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceConss(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNInfeasibleLPReconvergenceLiterals(SCIP_CONFLICT *conflict)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
SCIP_RETCODE SCIPlpiEndStrongbranch(SCIP_LPI *lpi)
static void skipRedundantBdchginfos(SCIP_VAR *var, int *lbchginfopos, int *ubchginfopos)
common methods used to generate and strengthen cuts
static SCIP_BDCHGINFO * conflictFirstCand(SCIP_CONFLICT *conflict)
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)
void SCIPclockStart(SCIP_CLOCK *clck, SCIP_SET *set)
SCIP_RETCODE SCIPconflicthdlrExec(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set, SCIP_NODE *node, SCIP_NODE *validnode, SCIP_BDCHGINFO **bdchginfos, SCIP_Real *relaxedbds, int nbdchginfos, SCIP_CONFTYPE conftype, SCIP_Bool usescutoffbound, SCIP_Bool resolved, SCIP_RESULT *result)
int SCIPconflictstoreGetNDualrays(SCIP_CONFLICTSTORE *conflictstore)
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, SCIP_Real *farkascoefs, SCIP_Real farkaslhs, SCIP_Real *farkasactivity)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIP_Bool SCIPsetIsZero(SCIP_SET *set, SCIP_Real val)
enum SCIP_Retcode SCIP_RETCODE
SCIP_Longint SCIPconflictGetNPropConflictLiterals(SCIP_CONFLICT *conflict)
int SCIPvarGetNVubs(SCIP_VAR *var)
int SCIPbdchginfoGetInferInfo(SCIP_BDCHGINFO *bdchginfo)
void SCIPconflicthdlrSetPriority(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set, int priority)
#define SCIPsetAllocBufferArray(set, ptr, num)
int SCIPtreeGetCurrentDepth(SCIP_TREE *tree)
int SCIPvarGetProbindex(SCIP_VAR *var)
void * SCIPpqueueFirst(SCIP_PQUEUE *pqueue)
SCIP_Longint dualrayinfnnonzeros
SCIP_RETCODE SCIPconflicthdlrExitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
int SCIPsetCalcMemGrowSize(SCIP_SET *set, int num)
SCIP_RETCODE SCIPlpiGetSides(SCIP_LPI *lpi, int firstrow, int lastrow, SCIP_Real *lhss, SCIP_Real *rhss)
SCIP_Longint npropsuccess
void SCIPpqueueFree(SCIP_PQUEUE **pqueue)
static void conflictsetClear(SCIP_CONFLICTSET *conflictset)
SCIP_ROW ** SCIPlpGetRows(SCIP_LP *lp)
SCIP_RETCODE SCIPconflictFree(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem)
SCIP_Longint SCIPconflictGetNAppliedLiterals(SCIP_CONFLICT *conflict)
SCIP_Real SCIPlpGetPseudoObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
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)
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)
int SCIPbdchgidxGetPos(SCIP_BDCHGIDX *bdchgidx)
static SCIP_RETCODE conflictQueueBound(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd)
internal methods for handling parameter settings
SCIP_Bool SCIPsetIsNegative(SCIP_SET *set, SCIP_Real val)
int SCIPnodeGetDepth(SCIP_NODE *node)
void SCIPconflicthdlrSetExitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTEXITSOL((*conflictexitsol)))
methods for creating output for visualization tools (VBC, BAK)
void SCIPclockEnableOrDisable(SCIP_CLOCK *clck, SCIP_Bool enable)
SCIP_Real SCIPconflictGetGlobalApplTime(SCIP_CONFLICT *conflict)
#define SCIPsetFreeBufferArray(set, ptr)
#define BMSfreeMemory(ptr)
void SCIPvarAdjustLb(SCIP_VAR *var, SCIP_SET *set, SCIP_Real *lb)
SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceLiterals(SCIP_CONFLICT *conflict)
SCIP_Bool SCIPlpiIsObjlimExc(SCIP_LPI *lpi)
SCIP_Real SCIPconflictGetPseudoTime(SCIP_CONFLICT *conflict)
#define SCIP_DECL_CONFLICTEXIT(x)
SCIP_Longint nappliedlocconss
SCIP_Longint SCIPconflictGetNInfeasibleLPConflictLiterals(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNPropReconvergenceConss(SCIP_CONFLICT *conflict)
SCIP_LPSOLSTAT SCIPlpGetSolstat(SCIP_LP *lp)
internal methods for LP management
int SCIPvarGetNCliques(SCIP_VAR *var, SCIP_Bool varfixing)
SCIP_Longint npseudosuccess
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_Real SCIPconflictGetVarUb(SCIP_CONFLICT *conflict, SCIP_VAR *var)
internal methods for branching and inference history
SCIP_Real SCIPconflictGetStrongbranchTime(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNAppliedLocalLiterals(SCIP_CONFLICT *conflict)
SCIP_Bool strongbranching
SCIP_Longint SCIPconflictGetNPseudoConflictConss(SCIP_CONFLICT *conflict)
SCIP_Longint ninflpiterations
SCIP_Longint SCIPconflictGetNDualrayInfGlobal(SCIP_CONFLICT *conflict)
SCIP_Bool SCIPconsIsGlobal(SCIP_CONS *cons)
int SCIPlpGetNCols(SCIP_LP *lp)
SCIP_Real SCIPvarGetUbLP(SCIP_VAR *var, SCIP_SET *set)
SCIP_Bool SCIPsetIsGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_HISTORY * glbhistorycrun
internal methods for propagators
SCIP_Longint npropreconvliterals
static SCIP_Bool conflictsetIsRedundant(SCIP_CONFLICTSET *conflictset1, SCIP_CONFLICTSET *conflictset2)
int SCIPtreeGetFocusDepth(SCIP_TREE *tree)
#define SCIPdebugCheckConflict(blkmem, set, node, bdchginfos, relaxedbds, nliterals)
void SCIPhistoryScaleVSIDS(SCIP_HISTORY *history, SCIP_Real scalar)
SCIP_Longint npropconfconss
SCIP_Longint nboundlpcalls
SCIP_Real SCIPgetVarBdAtIndex(SCIP *scip, SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
enum SCIP_BranchDir SCIP_BRANCHDIR
SCIP_Real conflictrelaxedub
SCIP_Bool SCIPbdchginfoIsTighter(SCIP_BDCHGINFO *bdchginfo1, SCIP_BDCHGINFO *bdchginfo2)
SCIP_RETCODE SCIPnodeCutoff(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_REOPT *reopt, SCIP_LP *lp, BMS_BLKMEM *blkmem)
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)
void SCIPconflicthdlrSetFree(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_DECL_CONFLICTFREE((*conflictfree)))
SCIP_Real SCIPcolCalcRedcost(SCIP_COL *col, SCIP_Real *dualsol)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
static SCIP_RETCODE createAndAddDualray(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, BMS_BLKMEM *blkmem, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool *success)
SCIP_RETCODE SCIPconflicthdlrExit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
SCIP_CLOCK * pseudoanalyzetime
SCIP_RETCODE SCIPconflicthdlrInitsol(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
SCIP_Real conflictrelaxedlb
static SCIP_RETCODE detectImpliedBounds(SCIP_SET *set, SCIP_PROB *prob, SCIP_CONFLICTSET *conflictset, int *nbdchgs, int *nredvars, SCIP_Bool *redundant)
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)
#define SCIP_DECL_CONFLICTINITSOL(x)
SCIP_CLOCK * boundlpanalyzetime
SCIP_Longint SCIPconflictGetNInfeasibleLPConflictConss(SCIP_CONFLICT *conflict)
SCIP_Longint ninflpreconvliterals
#define SCIP_DECL_CONFLICTEXEC(x)
SCIP_BDCHGINFO ** tmpbdchginfos
SCIP_CLOCK * conflicttime
#define BMSfreeMemoryArray(ptr)
void SCIPhistoryIncNActiveConflicts(SCIP_HISTORY *history, SCIP_BRANCHDIR dir, SCIP_Real length)
SCIP_BOUNDTYPE SCIPboundtypeOpposite(SCIP_BOUNDTYPE boundtype)
internal methods for storing and manipulating the main problem
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
static SCIP_RETCODE conflictsetAddBounds(SCIP_CONFLICT *conflict, SCIP_CONFLICTSET *conflictset, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BDCHGINFO **bdchginfos, int nbdchginfos)
static SCIP_RETCODE conflictsetEnsureBdchginfosMem(SCIP_CONFLICTSET *conflictset, BMS_BLKMEM *blkmem, SCIP_SET *set, int num)
SCIP_Bool SCIPbdchgidxIsEarlierNonNull(SCIP_BDCHGIDX *bdchgidx1, SCIP_BDCHGIDX *bdchgidx2)
SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceConss(SCIP_CONFLICT *conflict)
void SCIPclockReset(SCIP_CLOCK *clck)
SCIP_Longint nconflictlpiterations
SCIP_RETCODE SCIPupgradeConsLinear(SCIP *scip, SCIP_CONS *cons, SCIP_CONS **upgdcons)
SCIP_Bool SCIPsetIsRelEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIProwIsLocal(SCIP_ROW *row)
SCIP_CONFLICTHDLRDATA * conflicthdlrdata
SCIP_Longint SCIPconflictGetNPseudoReconvergenceConss(SCIP_CONFLICT *conflict)
SCIP_Bool SCIPlpiHasDualRay(SCIP_LPI *lpi)
SCIP_Longint SCIPconflictGetNAppliedLocalConss(SCIP_CONFLICT *conflict)
const char * SCIPconsGetName(SCIP_CONS *cons)
static SCIP_RETCODE conflictEnsureConflictsetsMem(SCIP_CONFLICT *conflict, SCIP_SET *set, int num)
static SCIP_RETCODE convertToActiveVar(SCIP_VAR **var, SCIP_SET *set, SCIP_BOUNDTYPE *boundtype, SCIP_Real *bound)
SCIP_Longint npropreconvconss
static SCIP_Real conflictsetCalcScore(SCIP_CONFLICTSET *conflictset, SCIP_SET *set)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Real SCIPconflictGetBoundexceedingLPTime(SCIP_CONFLICT *conflict)
static SCIP_RETCODE conflictsetCreate(SCIP_CONFLICTSET **conflictset, BMS_BLKMEM *blkmem)
SCIP_Real SCIPclockGetTime(SCIP_CLOCK *clck)
SCIP_Real SCIPlpiInfinity(SCIP_LPI *lpi)
SCIP_Real SCIPsetFeasCeil(SCIP_SET *set, SCIP_Real val)
#define SCIPsetReallocBufferArray(set, ptr, num)
SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
SCIP_RETCODE SCIPlpiStartStrongbranch(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetObjval(SCIP_LPI *lpi, SCIP_Real *objval)
SCIP_Longint SCIPconflictGetNStrongbranchReconvergenceConss(SCIP_CONFLICT *conflict)
SCIP_HISTORY * glbhistory
void SCIPsortedvecInsertIntPtrReal(int *intarray, void **ptrarray, SCIP_Real *realarray, int keyval, void *field1val, SCIP_Real field2val, int *len, int *pos)
SCIP_Longint nconflictlps
void SCIPgmlWriteEdge(FILE *file, unsigned int source, unsigned int target, const char *label, const char *color)
SCIP_RETCODE SCIPconflicthdlrFree(SCIP_CONFLICTHDLR **conflicthdlr, SCIP_SET *set)
SCIP_Longint SCIPconflictGetNStrongbranchConflictLiterals(SCIP_CONFLICT *conflict)
struct SCIP_ConflicthdlrData SCIP_CONFLICTHDLRDATA
SCIP_DECL_SORTPTRCOMP(SCIPconflicthdlrComp)
internal methods for global SCIP settings
SCIP_Bool SCIPlpiIsOptimal(SCIP_LPI *lpi)
SCIP_Bool SCIPbdchginfoHasInferenceReason(SCIP_BDCHGINFO *bdchginfo)
SCIP_Bool SCIPsetIsFeasGE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
int SCIPlpGetNRows(SCIP_LP *lp)
SCIP_Real SCIPconflictstoreGetAvgNnzDualray(SCIP_CONFLICTSTORE *conflictstore)
SCIP_Longint ndualrayinfseparoot
#define SCIP_DECL_CONFLICTCOPY(x)
SCIP_Longint SCIPconflictGetNPseudoSuccess(SCIP_CONFLICT *conflict)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
SCIP_Bool SCIPlpiIsPrimalInfeasible(SCIP_LPI *lpi)
SCIP_Bool SCIPbdchginfoIsRedundant(SCIP_BDCHGINFO *bdchginfo)
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)
SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_LPI * SCIPlpGetLPI(SCIP_LP *lp)
static SCIP_RETCODE conflictsetAddBound(SCIP_CONFLICTSET *conflictset, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd)
static SCIP_Bool isSeparatingRootLPSol(SCIP_SET *set, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real side, int nvars, SCIP_Bool islhs)
SCIP_Longint SCIPconflictGetNInfeasibleLPCalls(SCIP_CONFLICT *conflict)
SCIP_BDCHGIDX * SCIPbdchginfoGetIdx(SCIP_BDCHGINFO *bdchginfo)
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)
void * SCIPpqueueRemove(SCIP_PQUEUE *pqueue)
SCIP_CLOCK * sbanalyzetime
static SCIP_RETCODE getFarkasProof(SCIP_SET *set, SCIP_PROB *prob, SCIP_LP *lp, SCIP_LPI *lpi, SCIP_Real *farkascoefs, SCIP_Real *farkaslhs, SCIP_Real *farkasact, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, SCIP_Bool *valid)
SCIP_Bool SCIPsetIsFeasLE(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
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)
static SCIP_RETCODE tightenSingleVar(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, BMS_BLKMEM *blkmem, SCIP_PROB *origprob, SCIP_PROB *transprob, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_Real val, SCIP_Real rhs, SCIP_Bool *success)
#define BMSduplicateMemoryArray(ptr, source, num)
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
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)
SCIP_RETCODE SCIPclockCreate(SCIP_CLOCK **clck, SCIP_CLOCKTYPE clocktype)
methods commonly used for presolving
SCIP_Longint nboundlpsuccess
SCIP_RETCODE SCIPconflicthdlrInit(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
void SCIPvarAdjustBd(SCIP_VAR *var, SCIP_SET *set, SCIP_BOUNDTYPE boundtype, SCIP_Real *bd)
static SCIP_RETCODE conflictAnalyzeBoundexceedingLP(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, 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)
SCIP_CONFLICTSET * conflictset
#define BMSfreeBlockMemory(mem, ptr)
SCIP_Longint nboundlpreconvconss
internal methods for problem variables
void SCIPsortedvecDelPosIntPtrReal(int *intarray, void **ptrarray, SCIP_Real *realarray, int pos, int *len)
SCIP_Bool SCIPsetIsIntegral(SCIP_SET *set, SCIP_Real val)
public data structures and miscellaneous methods
SCIP_Bool SCIPlpiIsInfinity(SCIP_LPI *lpi, SCIP_Real val)
void SCIPnodePropagateAgain(SCIP_NODE *node, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree)
#define SCIPsetFreeBuffer(set, ptr)
SCIP_Real SCIPsetSumepsilon(SCIP_SET *set)
#define BMSallocBlockMemoryArray(mem, ptr, num)
int SCIPconflicthdlrGetPriority(SCIP_CONFLICTHDLR *conflicthdlr)
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)
SCIP_RETCODE SCIPlpiSetIntpar(SCIP_LPI *lpi, SCIP_LPPARAM type, int ival)
int SCIPbdchginfoGetPos(SCIP_BDCHGINFO *bdchginfo)
static const char * paramname[]
SCIP_Bool SCIPconflictApplicable(SCIP_SET *set)
SCIP_Bool SCIPvarIsInLP(SCIP_VAR *var)
SCIP_RETCODE SCIPlpiSetRealpar(SCIP_LPI *lpi, SCIP_LPPARAM type, SCIP_Real dval)
void SCIPclockFree(SCIP_CLOCK **clck)
SCIP_Bool SCIPlpDivingObjChanged(SCIP_LP *lp)
int SCIPvarGetNLocksUp(SCIP_VAR *var)
SCIP_RETCODE SCIPconflictAnalyzeStrongbranch(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, 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)
#define SCIPdebugCheckConflictFrontier(blkmem, set, node, bdchginfo, bdchginfos, relaxedbds, nliterals, bdchgqueue, forcedbdchgqueue)
SCIP_CONFTYPE conflicttype
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)
SCIP_PQUEUE * forcedbdchgqueue
SCIP_Bool SCIPprobAllColsInLP(SCIP_PROB *prob, SCIP_SET *set, SCIP_LP *lp)
SCIP_RETCODE SCIPlpiGetBase(SCIP_LPI *lpi, int *cstat, int *rstat)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_Real SCIPbdchginfoGetNewbound(SCIP_BDCHGINFO *bdchginfo)
SCIP_Longint SCIPconflictGetNStrongbranchConflictConss(SCIP_CONFLICT *conflict)
static void conflictsetCalcConflictDepth(SCIP_CONFLICTSET *conflictset)
static SCIP_DECL_PARAMCHGD(paramChgdConflicthdlrPriority)
void SCIPsortLongPtrRealRealBool(SCIP_Longint *longarray, void **ptrarray, SCIP_Real *realarray, SCIP_Real *realarray2, SCIP_Bool *boolarray, int len)
void ** SCIPpqueueElems(SCIP_PQUEUE *pqueue)
static SCIP_Real getMinActivity(SCIP_Real *vals, int *varinds, int nvarinds, SCIP_Real *curvarlbs, SCIP_Real *curvarubs)
SCIP_Longint ndualrayinfglobal
static SCIP_RETCODE updateStatistics(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONFLICTSET *conflictset, int insertdepth)
#define BMScopyMemoryArray(ptr, source, num)
int SCIPconflictGetNConflicts(SCIP_CONFLICT *conflict)
SCIP_COL * SCIPvarGetCol(SCIP_VAR *var)
SCIP_Longint SCIPconflictGetNBoundexceedingLPCalls(SCIP_CONFLICT *conflict)
void SCIPsortIntPtrReal(int *intarray, void **ptrarray, SCIP_Real *realarray, int len)
Constraint handler for linear constraints in their most general form, .
int SCIPvarGetMultaggrNVars(SCIP_VAR *var)
SCIP_Longint nboundlpreconvliterals
SCIP_Longint nsbconfconss
SCIP_Bool SCIPsetIsFeasLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Longint nsbconfliterals
SCIP_Longint SCIPconflictGetNBoundexceedingLPReconvergenceLiterals(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPvarIncNActiveConflicts(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Real length)
SCIP_Longint nboundlpiterations
#define debugPrintViolationInfo(...)
SCIP_Bool SCIPprobIsTransformed(SCIP_PROB *prob)
SCIP_BOUNDTYPE SCIPbdchginfoGetInferBoundtype(SCIP_BDCHGINFO *bdchginfo)
const char * SCIPpropGetName(SCIP_PROP *prop)
SCIP_BDCHGINFO * SCIPvarGetBdchgInfoUb(SCIP_VAR *var, int pos)
SCIP_Longint npseudoconfliterals
SCIP_Longint ninflpconfconss
SCIP_BDCHGINFO * SCIPvarGetBdchgInfo(SCIP_VAR *var, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool after)
SCIP_Bool SCIPsetIsDualfeasPositive(SCIP_SET *set, SCIP_Real val)
static SCIP_RETCODE conflictsetCopy(SCIP_CONFLICTSET **targetconflictset, BMS_BLKMEM *blkmem, SCIP_CONFLICTSET *sourceconflictset, int nadditionalelems)
int SCIPparamGetInt(SCIP_PARAM *param)
SCIP_Longint SCIPconflictGetNPseudoCalls(SCIP_CONFLICT *conflict)
static void lpbdchgsFree(SCIP_LPBDCHGS **lpbdchgs, SCIP_SET *set)
SCIP_RETCODE SCIPcutsApplyMIR(SCIP *scip, SCIP_Real boundswitch, SCIP_Bool usevbds, SCIP_Bool allowlocal, SCIP_Bool fixintegralrhs, int *boundsfortrans, SCIP_BOUNDTYPE *boundtypesfortrans, SCIP_Real minfrac, SCIP_Real maxfrac, SCIP_Real scale, SCIP_Real *mksetcoefs, SCIP_Bool *mksetcoefsvalid, SCIP_Real *mircoef, SCIP_Real *mirrhs, int *varinds, int *nvarinds, SCIP_Real *minact, SCIP_Bool *varused, SCIP_Bool *success, SCIP_Bool *islocal)
SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
SCIP_RETCODE SCIPcreateConsLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Real SCIPsetFeasFloor(SCIP_SET *set, SCIP_Real val)
SCIP_Real SCIProwGetConstant(SCIP_ROW *row)
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)
SCIP_DOMCHGBOUND domchgbound
void SCIPconflicthdlrSetData(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_CONFLICTHDLRDATA *conflicthdlrdata)
SCIP_Real SCIPconflictGetInfeasibleLPTime(SCIP_CONFLICT *conflict)
SCIP_RETCODE SCIPconflictCreate(SCIP_CONFLICT **conflict, BMS_BLKMEM *blkmem, SCIP_SET *set)
int SCIPcolGetNNonz(SCIP_COL *col)
int SCIPvarGetNLocksDown(SCIP_VAR *var)
void SCIPvisualFoundConflict(SCIP_VISUAL *visual, SCIP_STAT *stat, SCIP_NODE *node)
void SCIPcutsCleanupRow(SCIP *scip, SCIP_Real *coefs, SCIP_Real *rhs, SCIP_Bool *varused, int *varinds, int *nvarinds, SCIP_Bool islocal)
SCIP_Longint SCIPconflictGetNBoundexceedingLPSuccess(SCIP_CONFLICT *conflict)
static SCIP_RETCODE conflictAnalyzeLP(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, 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, SCIP_Bool *dualraysuccess, int *iterations, int *nconss, int *nliterals, int *nreconvconss, int *nreconvliterals, SCIP_Bool marklpunsolved)
static SCIP_RETCODE tightenDualray(SCIP_SET *set, SCIP_PROB *transprob, SCIP_Real *vals, SCIP_Real *rhs, int *varinds, int *nvarinds, SCIP_Bool *varused, SCIP_Real *curvarlbs, SCIP_Real *curvarubs, SCIP_Bool diving, SCIP_Bool *success)
SCIP_VAR * SCIPcolGetVar(SCIP_COL *col)
SCIP_Longint lastconflictnode
internal methods for conflict analysis
#define SCIPsetFreeCleanBufferArray(set, ptr)
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)
SCIP_RETCODE SCIPlpiSetBase(SCIP_LPI *lpi, const int *cstat, const int *rstat)
SCIP_RETCODE SCIPpqueueInsert(SCIP_PQUEUE *pqueue, void *elem)
static const SCIP_Real scalars[]
SCIP_RETCODE SCIPpqueueCreate(SCIP_PQUEUE **pqueue, int initsize, SCIP_Real sizefac, SCIP_DECL_SORTPTRCOMP((*ptrcomp)))
void SCIPsetSortConflicthdlrs(SCIP_SET *set)
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)
int SCIPbdchginfoGetDepth(SCIP_BDCHGINFO *bdchginfo)
static SCIP_RETCODE conflictAnalyzeInfeasibleLP(SCIP_CONFLICT *conflict, SCIP_CONFLICTSTORE *conflictstore, 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)
static SCIP_RETCODE ensureCandsSize(SCIP_SET *set, SCIP_VAR ***cands, SCIP_Real **candscores, SCIP_Real **newbounds, SCIP_Real **proofactdeltas, int *candssize, int num)
SCIP_Longint nsbreconvliterals
static void conflictsetFree(SCIP_CONFLICTSET **conflictset, BMS_BLKMEM *blkmem)
SCIP_Longint nboundlpconfliterals
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
static SCIP_RETCODE conflictInsertConflictset(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_CONFLICTSET **conflictset)
const char * SCIPconflicthdlrGetName(SCIP_CONFLICTHDLR *conflicthdlr)
public methods for message output
SCIP_RETCODE SCIPconflictInit(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_CONFTYPE conftype, SCIP_Bool usescutoffbound)
SCIP_Real * conflictsetscores
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)
SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
int SCIProwGetLPPos(SCIP_ROW *row)
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)
internal methods for problem statistics
enum SCIP_ConflictType SCIP_CONFTYPE
SCIP_VAR * SCIPbdchginfoGetInferVar(SCIP_BDCHGINFO *bdchginfo)
SCIP_Longint npseudocalls
SCIP_Longint SCIPconflictGetNStrongbranchCalls(SCIP_CONFLICT *conflict)
SCIP_Longint SCIPconflictGetNInfeasibleLPIterations(SCIP_CONFLICT *conflict)
SCIP_Real SCIPconflictGetVarLb(SCIP_CONFLICT *conflict, SCIP_VAR *var)
#define SCIPsetDebugMsgPrint
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)
SCIP_VAR ** SCIPprobGetVars(SCIP_PROB *prob)
SCIP_RETCODE SCIPconflictIsVarUsed(SCIP_CONFLICT *conflict, SCIP_VAR *var, SCIP_SET *set, SCIP_BOUNDTYPE boundtype, SCIP_BDCHGIDX *bdchgidx, SCIP_Bool *used)
#define BMSallocMemory(ptr)
#define BMSreallocMemoryArray(ptr, num)
#define SCIP_DECL_CONFLICTINIT(x)
internal methods for constraints and constraint handlers
static SCIP_Bool checkRedundancy(SCIP_SET *set, SCIP_CONFLICTSET *conflictset)
SCIP_Longint nsbiterations
SCIP_Longint SCIPconflictGetNAppliedGlobalLiterals(SCIP_CONFLICT *conflict)
SCIP_Longint nboundlpconfconss
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)
SCIP_CONS * SCIPbdchginfoGetInferCons(SCIP_BDCHGINFO *bdchginfo)
int SCIPvarGetIndex(SCIP_VAR *var)
SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations)
void SCIPconflicthdlrEnableOrDisableClocks(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_Bool enable)
SCIP_Bool SCIPsetIsFeasGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Longint npseudoconfconss
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)
static void conflictFreeTmpBdchginfos(SCIP_CONFLICT *conflict, BMS_BLKMEM *blkmem)
SCIP_Longint SCIPconflictGetNAppliedConss(SCIP_CONFLICT *conflict)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Longint SCIPconflictGetNBoundexceedingLPConflictLiterals(SCIP_CONFLICT *conflict)
void SCIPgmlWriteOpening(FILE *file, SCIP_Bool directed)
void SCIPbdchginfoFree(SCIP_BDCHGINFO **bdchginfo, BMS_BLKMEM *blkmem)
SCIP_BDCHGINFO ** bdchginfos
void SCIPvarAdjustUb(SCIP_VAR *var, SCIP_SET *set, SCIP_Real *ub)
static SCIP_Bool conflictMarkBoundCheckPresence(SCIP_CONFLICT *conflict, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd)
#define BMSallocBlockMemory(mem, ptr)
SCIP_Longint SCIPconflictGetNPropReconvergenceLiterals(SCIP_CONFLICT *conflict)
SCIP_Bool SCIPsetIsDualfeasNegative(SCIP_SET *set, SCIP_Real val)
SCIP_BOUNDTYPE SCIPbdchginfoGetBoundtype(SCIP_BDCHGINFO *bdchginfo)
unsigned int usescutoffbound
SCIP_CONFLICTSET ** conflictsets
#define BMSclearMemoryArray(ptr, num)
SCIP_Real SCIPconflictGetPropTime(SCIP_CONFLICT *conflict)
common defines and data types used in all packages of SCIP
struct BMS_BlkMem BMS_BLKMEM
SCIP_RETCODE SCIPvarGetProbvarSum(SCIP_VAR **var, SCIP_SET *set, SCIP_Real *scalar, SCIP_Real *constant)
#define SCIP_DECL_CONFLICTFREE(x)
static SCIP_RETCODE conflictResolveBound(SCIP_CONFLICT *conflict, SCIP_SET *set, SCIP_BDCHGINFO *bdchginfo, SCIP_Real relaxedbd, int validdepth, SCIP_Bool *resolved)
SCIP_CONFLICTHDLRDATA * SCIPconflicthdlrGetData(SCIP_CONFLICTHDLR *conflicthdlr)
SCIP_RETCODE SCIPconflicthdlrCopyInclude(SCIP_CONFLICTHDLR *conflicthdlr, SCIP_SET *set)
static SCIP_RETCODE applyMIR(SCIP_SET *set, SCIP_PROB *transprob, SCIP_Real *vals, SCIP_Bool *varused, int *varinds, int *nvarinds, SCIP_Real *rhs, SCIP_Bool *success)
static SCIP_RETCODE conflictEnsureTmpbdchginfosMem(SCIP_CONFLICT *conflict, SCIP_SET *set, int num)
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)
SCIP_RETCODE SCIPsetConflicthdlrPriority(SCIP *scip, SCIP_CONFLICTHDLR *conflicthdlr, int priority)
void SCIPpqueueClear(SCIP_PQUEUE *pqueue)
int SCIPcolGetLPPos(SCIP_COL *col)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
const char * SCIPprobGetName(SCIP_PROB *prob)
SCIP_Longint ndualrayinfsuccess
static void conflictClear(SCIP_CONFLICT *conflict)
static SCIP_Bool bdchginfoIsInvalid(SCIP_CONFLICT *conflict, SCIP_BDCHGINFO *bdchginfo)
SCIP_Longint nsbreconvconss
#define BMSreallocBlockMemoryArray(mem, ptr, oldnum, newnum)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_BDCHGINFO * lbchginfos
SCIP_Longint ninflpsuccess
#define SCIP_DECL_CONFLICTEXITSOL(x)
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)
SCIP_BOUNDCHGTYPE SCIPbdchginfoGetChgtype(SCIP_BDCHGINFO *bdchginfo)