85#define BRANCHRULE_NAME "lookahead"
86#define BRANCHRULE_DESC "full strong branching over multiple levels"
87#define BRANCHRULE_PRIORITY 0
88#define BRANCHRULE_MAXDEPTH -1
89#define BRANCHRULE_MAXBOUNDDIST 1.0
91#define DEFAULT_USEBINARYCONSTRAINTS FALSE
92#define DEFAULT_ADDCLIQUE FALSE
93#define DEFAULT_ADDBINCONSROW 0
95#define DEFAULT_USEDOMAINREDUCTION TRUE
96#define DEFAULT_MERGEDOMAINREDUCTIONS FALSE
97#define DEFAULT_PREFERSIMPLEBOUNDS FALSE
98#define DEFAULT_ONLYVIOLDOMREDS FALSE
99#define DEFAULT_MAXNVIOLATEDCONS 1
101#define DEFAULT_MAXNVIOLATEDBINCONS 0
104#define DEFAULT_MAXNVIOLATEDDOMREDS 1
106#define DEFAULT_STOREUNVIOLATEDSOL TRUE
108#define DEFAULT_REEVALAGE 10LL
110#define DEFAULT_REEVALAGEFSB 10LL
112#define DEFAULT_RECURSIONDEPTH 2
113#define DEFAULT_ADDNONVIOCONS FALSE
115#define DEFAULT_PROPAGATE TRUE
117#define DEFAULT_USELEVEL2DATA TRUE
118#define DEFAULT_APPLYCHILDBOUNDS FALSE
119#define DEFAULT_ENFORCEMAXDOMREDS FALSE
120#define DEFAULT_UPDATEBRANCHINGRESULTS FALSE
121#define DEFAULT_MAXPROPROUNDS 0
123#define DEFAULT_ABBREVIATED TRUE
124#define DEFAULT_MAXNCANDS 4
125#define DEFAULT_MAXNDEEPERCANDS 2
127#define DEFAULT_REUSEBASIS TRUE
129#define DEFAULT_ABBREVPSEUDO FALSE
131#define DEFAULT_LEVEL2AVGSCORE FALSE
132#define DEFAULT_LEVEL2ZEROSCORE FALSE
133#define DEFAULT_SCORINGFUNCTION 'a'
134#define DEFAULT_DEEPERSCORINGFUNCTION 'x'
135#define DEFAULT_SCORINGSCORINGFUNCTION 'd'
136#define DEFAULT_MINWEIGHT 0.8
138#define DEFAULT_WORSEFACTOR -1.0
139#define DEFAULT_FILTERBYMAXGAIN FALSE
143#define LABdebugMessage(scip,lvl,...) do \
146 SCIPverbMessage(scip, lvl, NULL, "[%s:%-4d] ", __FILE__, __LINE__); \
147 stage = SCIPgetStage(scip); \
148 if( stage == SCIP_STAGE_INIT ) \
150 SCIPverbMessage(scip, lvl, NULL, "Init : "); \
152 else if( stage == SCIP_STAGE_FREE ) \
154 SCIPverbMessage(scip, lvl, NULL, "Free : "); \
156 else if( SCIPinProbing(scip) ) \
158 SCIPverbMessage(scip, lvl, NULL, "%*sDepth %i: ", \
159 2 * SCIPgetProbingDepth(scip), "", SCIPgetProbingDepth(scip)); \
163 SCIPverbMessage(scip, lvl, NULL, "Base : "); \
165 SCIPverbMessage(scip, lvl, NULL, __VA_ARGS__); \
170#define LABdebugMessagePrint(scip,lvl,...) do \
172 SCIPverbMessage(scip, lvl, NULL, __VA_ARGS__); \
176#define LABdebugMessage(scip,lvl,...)
206 (*warmstartinfo)->lpistate =
NULL;
207 (*warmstartinfo)->lpinorms =
NULL;
208 (*warmstartinfo)->primalfeas =
FALSE;
209 (*warmstartinfo)->dualfeas =
FALSE;
239 if( (*warmstartinfo)->lpistate !=
NULL )
244 if( (*warmstartinfo)->lpinorms !=
NULL )
276 (*candidate)->downwarmstartinfo =
NULL;
277 (*candidate)->upwarmstartinfo =
NULL;
278 (*candidate)->branchvar =
NULL;
322 (*candidate)->upwarmstartinfo !=
NULL, (*candidate)->downwarmstartinfo !=
NULL);
514 targetdecision->
updb = sourcedecision->
updb;
517 targetdecision->
score = sourcedecision->
score;
572 if( (*decision)->boundssize != 0 )
762 "level 2 result: <%s> %s %g + <%s> %s %g: lpval: %.9g, inf: %d, valid: %d\n",
768#define level2resultPrint(scip,result)
822 (*data)->level2results =
NULL;
825 (*data)->nlevel2results = 0;
826 (*data)->level2resultssize = 0;
827 (*data)->branchvar1 = 0;
828 (*data)->branchvar2 = 0;
829 (*data)->branchdir1 = 0;
830 (*data)->branchdir2 = 0;
845 while( (*data)->nlevel2results > 0 )
847 --(*data)->nlevel2results;
850 assert((*data)->nlevel2results == 0);
852 if( (*data)->level2results !=
NULL )
954 result->lpobjval = lpobjval;
1051#if defined(SCIP_DEBUG) || defined(SCIP_STATISTIC)
1052#define MAXRESULT SCIP_DELAYNODE
1056const char* getStatusString(
1066 return "SCIP_DIDNOTRUN";
1068 return "SCIP_DELAYED";
1070 return "SCIP_DIDNOTFIND";
1072 return "SCIP_FEASIBLE";
1074 return "SCIP_INFEASIBLE";
1076 return "SCIP_UNBOUNDED";
1078 return "SCIP_CUTOFF";
1080 return "SCIP_SEPARATED";
1082 return "SCIP_NEWROUND";
1084 return "SCIP_REDUCEDDOM";
1086 return "SCIP_CONSADDED";
1088 return "SCIP_CONSCHANGED";
1090 return "SCIP_BRANCHED";
1092 return "SCIP_SOLVELP";
1094 return "SCIP_FOUNDSOL";
1096 return "SCIP_SUSPENDED";
1098 return "SCIP_SUCCESS";
1100 return "SCIP_DELAYNODE";
1109#ifdef SCIP_STATISTIC
1116 int* nsinglecutoffs;
1126 int* noldbranchused;
1128 int* noldbranchusedfsb;
1134 int* cutoffafterfsb;
1136 int* domredafterfsb;
1138 int nsinglecandidate;
1139 int nsingleafterfilter;
1155 int ncutoffproofnodes;
1156 int ndomredproofnodes;
1166 STATISTICS* statistics
1172 assert(statistics->recursiondepth > 0);
1174 statistics->nsinglecandidate = 0;
1175 statistics->nsingleafterfilter = 0;
1176 statistics->noldcandidate = 0;
1177 statistics->nlperrorcalls = 0;
1178 statistics->nlimitcalls = 0;
1179 statistics->ntotalresults = 0;
1180 statistics->nbinconst = 0;
1181 statistics->nbinconstvio = 0;
1182 statistics->ndomredvio = 0;
1183 statistics->ndepthreached = 0;
1184 statistics->ndomred = 0;
1185 statistics->ndomredcons = 0;
1186 statistics->ncutoffproofnodes = 0;
1187 statistics->ndomredproofnodes = 0;
1188 statistics->ncliquesadded = 0;
1190 for(
i = 0;
i <= MAXRESULT;
i++)
1192 statistics->nresults[
i] = 0;
1195 for(
i = 0;
i < statistics->recursiondepth;
i++ )
1197 statistics->noldbranchused[
i] = 0;
1198 statistics->noldbranchusedfsb[
i] = 0;
1199 statistics->npropdomred[
i] = 0;
1200 statistics->nfullcutoffs[
i] = 0;
1201 statistics->nlpssolved[
i] = 0;
1202 statistics->nlpssolvedfsb[
i] = 0;
1203 statistics->nduplicatelps[
i] = 0;
1204 statistics->nlpiterations[
i] = 0;
1205 statistics->nlpiterationsfsb[
i] = 0;
1206 statistics->nsinglecutoffs[
i] = 0;
1207 statistics->stopafterfsb[
i] = 0;
1208 statistics->cutoffafterfsb[
i] = 0;
1209 statistics->domredafterfsb[
i] = 0;
1212 for(
i = 0;
i < statistics->maxnbestcands;
i++ )
1214 statistics->chosenfsbcand[
i] = 0;
1220void statisticsPrint(
1222 STATISTICS* statistics
1227 assert(statistics->recursiondepth > 0);
1230 if( statistics->ntotalresults > 0 )
1236 for(
i = 1;
i <= MAXRESULT;
i++ )
1241 statistics->nresults[
i]);
1244 for(
i = 0;
i < statistics->maxnbestcands;
i++ )
1246 if( statistics->chosenfsbcand[
i] > 0 )
1249 i+1, statistics->chosenfsbcand[
i]);
1253 for(
i = 0;
i < statistics->recursiondepth;
i++ )
1256 i, statistics->stopafterfsb[
i], statistics->cutoffafterfsb[
i], statistics->domredafterfsb[
i]);
1258 i, statistics->nfullcutoffs[
i], statistics->nsinglecutoffs[
i]);
1260 i, statistics->nlpssolved[
i], statistics->nlpssolvedfsb[
i], statistics->nduplicatelps[
i]);
1263 statistics->nlpiterationsfsb[
i]);
1265 " propagation.\n",
i, statistics->npropdomred[
i]);
1267 i, statistics->noldbranchused[
i], statistics->noldbranchusedfsb[
i]);
1271 statistics->nsinglecandidate, statistics->nsingleafterfilter);
1273 statistics->noldcandidate);
1275 statistics->nlperrorcalls);
1277 statistics->nlimitcalls);
1280 statistics->ndomredcons);
1282 statistics->nbinconst, statistics->nbinconstvio);
1284 statistics->ndomred, statistics->ndomredvio);
1286 statistics->ncliquesadded);
1288 statistics->ncutoffproofnodes);
1290 statistics->ndomredproofnodes);
1297 int ncutoffproofnodes;
1304 LOCALSTATISTICS** localstats
1312 (*localstats)->ncutoffproofnodes = 0;
1319void localStatisticsFree(
1321 LOCALSTATISTICS** localstats
1332struct SCIP_BranchruleData
1334 CONFIGURATION* config;
1335 PERSISTENTDATA* persistent;
1337#ifdef SCIP_STATISTIC
1338 STATISTICS* statistics;
1372 (*conslist)->nelements = 0;
1373 (*conslist)->memorysize = startsize;
1374 (*conslist)->nviolatedcons = 0;
1426 for(
i = 0;
i < (*conslist)->nelements;
i++ )
1467 (*list)->nbinaryvars = 0;
1468 (*list)->memorysize = startsize;
1582 assert(ncandidates >= 0);
1586 if( ncandidates > 0 )
1591 (*candidatelist)->candidates =
NULL;
1593 (*candidatelist)->ncandidates = ncandidates;
1634 (*candidatelist)->candidates[
i] = candidate;
1654 assert((*candidatelist)->ncandidates > 0 || (*candidatelist)->candidates ==
NULL);
1656 if( (*candidatelist)->candidates !=
NULL )
1658 for(
i = (*candidatelist)->ncandidates - 1;
i >= 0;
i-- )
1660 CANDIDATE* cand = (*candidatelist)->candidates[
i];
1687 assert(nindices <= candidatelist->ncandidates);
1715#ifdef SCIP_STATISTIC
1716 int* lowerboundnproofs;
1717 int* upperboundnproofs;
1744#ifdef SCIP_STATISTIC
1749 for( v = 0; v < ntotalvars; ++v )
1756 (*domreds)->nviolatedvars = 0;
1757 (*domreds)->nchangedvars = 0;
1758 (*domreds)->nsimplebounds = 0;
1773#ifdef SCIP_STATISTIC
1809 (*status)->addedbinconss =
FALSE;
1810 (*status)->depthtoosmall =
FALSE;
1811 (*status)->lperror =
FALSE;
1812 (*status)->cutoff =
FALSE;
1813 (*status)->domred =
FALSE;
1814 (*status)->domredcutoff =
FALSE;
1815 (*status)->limitreached =
FALSE;
1816 (*status)->maxnconsreached =
FALSE;
1884 (*scorecontainer)->nbestsortedcands = maxncands;
1885 (*scorecontainer)->scoresum = 0.0;
1886 (*scorecontainer)->nsetscores = 0;
1891 for(
i = 0;
i < ntotalvars;
i++ )
1893 (*scorecontainer)->scores[
i] = -1.0;
1894 (*scorecontainer)->downgains[
i] = -1.0;
1895 (*scorecontainer)->upgains[
i] = -1.0;
1916 int right = ncandidates - 1;
1921 assert(ncandidates >= 0);
1923 while( left <= right )
1925 int mid = left + ((right - left) / 2);
1929 if( midcand !=
NULL)
1936 midscore = scorecontainer->
scores[midindex];
1962 assert(insertpoint >= 0);
1997 if( scorecontainer->
scores[probindex] < -0.5 )
2004 scorecontainer->
scoresum += (score - scorecontainer->
scores[probindex]);
2007 scorecontainer->
scores[probindex] = score;
2008 scorecontainer->
downgains[probindex] = downgain;
2009 scorecontainer->
upgains[probindex] = upgain;
2021 if( droppedcandidate !=
NULL )
2073 int* ndeepestcutoffs,
2078#ifdef SCIP_STATISTIC
2079 ,STATISTICS* statistics
2080 ,LOCALSTATISTICS* localstats
2096#ifdef SCIP_STATISTIC
2109#ifdef SCIP_STATISTIC
2110 assert(nproofnodes >= 0);
2118 if(
SCIPisLT(
scip, domainreductions->lowerbounds[varindex], lowerbound) )
2122 domainreductions->lowerbounds[varindex] = lowerbound;
2123 domainreductions->nchangedvars++;
2125 domainreductions->nsimplebounds++;
2126#ifdef SCIP_STATISTIC
2127 domainreductions->lowerboundnproofs[varindex] = nproofnodes;
2132 if(
SCIPisEQ(
scip, domainreductions->lowerbounds[varindex], lowerbound) &&
2133 (force || domainreductions->lowerboundnproofs[varindex] > nproofnodes) )
2134 domainreductions->lowerboundnproofs[varindex] = nproofnodes;
2143 if(
SCIPisFeasGT(
scip, domainreductions->lowerbounds[varindex], basesolutionval)
2144 && !domainreductions->baselpviolated[varindex] )
2146 domainreductions->baselpviolated[varindex] =
TRUE;
2147 domainreductions->nviolatedvars++;
2161#ifdef SCIP_STATISTIC
2174#ifdef SCIP_STATISTIC
2175 assert(nproofnodes >= 0);
2183 if(
SCIPisLE(
scip, domainreductions->upperbounds[varindex], upperbound) )
2185#ifdef SCIP_STATISTIC
2187 if(
SCIPisEQ(
scip, domainreductions->upperbounds[varindex], upperbound) &&
2188 (force || domainreductions->upperboundnproofs[varindex] > nproofnodes) )
2189 domainreductions->upperboundnproofs[varindex] = nproofnodes;
2196 domainreductions->upperbounds[varindex] = upperbound;
2197 domainreductions->nchangedvars++;
2199 domainreductions->nsimplebounds++;
2200#ifdef SCIP_STATISTIC
2201 domainreductions->upperboundnproofs[varindex] = nproofnodes;
2210 if(
SCIPisFeasLT(
scip, domainreductions->upperbounds[varindex], basesolutionval)
2211 && !domainreductions->baselpviolated[varindex] )
2213 domainreductions->baselpviolated[varindex] =
TRUE;
2214 domainreductions->nviolatedvars++;
2226 int maxstoredomreds,
2252#ifdef SCIP_STATISTIC
2255 domreds->lowerboundnproofs[
i],
FALSE);
2263#ifdef SCIP_STATISTIC
2265 domreds->upperboundnproofs[
i],
FALSE);
2280 int maxstoredomreds,
2326#ifdef SCIP_STATISTIC
2328 MIN(4, downdomreds->lowerboundnproofs[
i] + updomreds->lowerboundnproofs[
i] + 2),
FALSE);
2340#ifdef SCIP_STATISTIC
2342 MIN(4, downdomreds->upperboundnproofs[
i] + updomreds->upperboundnproofs[
i] + 2),
FALSE);
2362#ifdef SCIP_STATISTIC
2363 ,STATISTICS* statistics
2370#if defined(SCIP_DEBUG) || defined(SCIP_STATISTIC)
2371 int nboundsadded = 0;
2372 int nboundsaddedvio = 0;
2380#ifdef SCIP_STATISTIC
2385 *domredcutoff =
FALSE;
2397 for(
i = 0;
i < nprobvars && !(*domredcutoff);
i++ )
2428#if defined(SCIP_DEBUG) || defined(SCIP_STATISTIC)
2436 *domredcutoff =
TRUE;
2440 else if( tightened )
2444#if defined(SCIP_DEBUG) || defined(SCIP_STATISTIC)
2447#ifdef SCIP_STATISTIC
2450 statistics->ndomredproofnodes += domreds->lowerboundnproofs[
i];
2453#if defined(SCIP_DEBUG) || defined(SCIP_STATISTIC)
2479#if defined(SCIP_DEBUG) || defined(SCIP_STATISTIC)
2487 *domredcutoff =
TRUE;
2491 else if( tightened )
2495#if defined(SCIP_DEBUG) || defined(SCIP_STATISTIC)
2498#ifdef SCIP_STATISTIC
2501 statistics->ndomredproofnodes += domreds->upperboundnproofs[
i];
2504#if defined(SCIP_DEBUG) || defined(SCIP_STATISTIC)
2517#ifdef SCIP_STATISTIC
2518 statistics->ndomred += nboundsadded;
2519 statistics->ndomredvio += nboundsaddedvio;
2523 "base lp.\n", nboundsadded, nboundsaddedvio);
2755 "old bounds=[<%g>..<%g>], new bounds=[<%g>..<%g>]\n",
SCIPvarGetName(branchvar), newbound, oldlowerbound,
2756 oldupperbound, oldlowerbound, newbound);
2761 "old bounds=[<%g>..<%g>], new bounds=[<%g>..<%g>]\n",
SCIPvarGetName(branchvar), newbound, oldlowerbound,
2762 oldupperbound, newbound, oldupperbound);
2766 if( (downbranching && newbound < oldlowerbound - 0.5)
2767 || (!downbranching && newbound > oldupperbound + 0.5) )
2818 if( ndomredsfound > 0 )
2823 if( domreds !=
NULL )
2833 for(
i = 0;
i < nproblemvars;
i++ )
2842#ifdef SCIP_STATISTIC
2854 if( !resultdata->
cutoff )
2910 char* constraintname,
2941 check,
propagate, local, modifiable, dynamic, removable, stickingatnode) );
2952 char* constraintname
2964 for(
i = 1;
i < nbinaryvars;
i++ )
2970 oldlen = strlen(constraintname);
2987#ifdef SCIP_STATISTIC
2988 ,STATISTICS* statistics
3022 violated = (lhssum < 1);
3039#ifdef SCIP_STATISTIC
3043 statistics->ndomredcons++;
3061#ifdef SCIP_STATISTIC
3062 ,STATISTICS* statistics
3068#ifdef SCIP_STATISTIC
3069 int nvioconsadded = 0;
3090#ifdef SCIP_STATISTIC
3096 for( v = 0; v <
nvars; ++v )
3126#ifdef SCIP_STATISTIC
3149#ifdef SCIP_STATISTIC
3150 statistics->ncliquesadded++;
3157 *boundchange =
TRUE;
3166 if( nconsadded > 0 )
3170#ifdef SCIP_STATISTIC
3171 statistics->nbinconst += nconsadded;
3172 statistics->nbinconstvio += nvioconsadded;
3227 if( !branchfurther )
3230 return branchfurther;
3299 downgain =
MAX(downbranchingresult->
dualbound - *oldlpobjval, 0);
3300 upgain =
MAX(upbranchingresult->
dualbound - *oldlpobjval, 0);
3368#ifdef SCIP_STATISTIC
3369 ,STATISTICS* statistics
3370 ,LOCALSTATISTICS* localstats
3385#ifdef SCIP_STATISTIC
3387 binconsdata, candidatelist, decision, scorecontainer, level2data, 1,
3389 statistics, localstats,
NULL,
NULL) );
3392 binconsdata, candidatelist, decision, scorecontainer, level2data, 1,
3405void printCandidates(
3419 LABdebugMessagePrint(
scip, lvl,
"[");
3421 for(
i = 0;
i < ncands;
i++ )
3431 LABdebugMessagePrint(
scip, lvl,
", ");
3434 LABdebugMessagePrint(
scip, lvl,
"]\n");
3460 if( !downbranchingresult->
cutoff )
3461 downgain =
MAX(downgain, downbranchingresult->
dualbound - lpobjval);
3462 if( !upbranchingresult->
cutoff )
3463 upgain =
MAX(upgain, upbranchingresult->
dualbound - lpobjval);
3465 downgain = 100.0 * downgain;
3466 upgain = 100.0 * upgain;
3472 if( downbranchingresult->
cutoff )
3473 downgain = 2 * upgain;
3474 if( upbranchingresult->
cutoff )
3475 upgain = 2 * downgain;
3506 if( !downbranchingresult->
cutoff )
3507 downgain =
MAX(downgain, downbranchingresult->
objval - lpobjval);
3508 if( !upbranchingresult->
cutoff )
3509 upgain =
MAX(upgain, upbranchingresult->
objval - lpobjval);
3511 downgain = 100.0 * downgain;
3512 upgain = 100.0 * upgain;
3518 if( downbranchingresult->
cutoff )
3519 downgain = 2 * upgain;
3520 if( upbranchingresult->
cutoff )
3521 upgain = 2 * downgain;
3528 if( !downbranchingresult->
cutoff )
3530 if( !upbranchingresult->
cutoff )
3533 downgain = 100.0 * downgain;
3534 upgain = 100.0 * upgain;
3540 if( downbranchingresult->
cutoff )
3541 downgain = 2 * upgain;
3542 if( upbranchingresult->
cutoff )
3543 upgain = 2 * downgain;
3573 downscore = sqrt(downbranchingresult->
deeperscore);
3579 if( downbranchingresult->
cutoff )
3580 downscore = 2 * upscore;
3581 if( upbranchingresult->
cutoff )
3582 upscore = 2 * downscore;
3604 int ntotaldowngains;
3616 totaldowngains = downbranchingresult->
totalgains;
3617 totalupgains = upbranchingresult->
totalgains;
3621 downscore = sqrt(downbranchingresult->
deeperscore);
3627 if( downbranchingresult->
cutoff )
3628 downscore = 2 * upscore;
3629 if( upbranchingresult->
cutoff )
3630 upscore = 2 * downscore;
3634 downscore = sqrt(totaldowngains/ntotaldowngains);
3635 upscore = sqrt(totalupgains/ntotalupgains);
3665 if( !downbranchingresult->
cutoff )
3666 downgain =
MAX(0, downbranchingresult->
dualbound - lpobjval);
3667 if( !upbranchingresult->
cutoff )
3668 upgain =
MAX(0, upbranchingresult->
dualbound - lpobjval);
3672 if( downbranchingresult->
cutoff )
3674 if( upbranchingresult->
cutoff )
3683 if( downbranchingresult->
cutoff )
3685 if( upbranchingresult->
cutoff )
3706 int nlowestlevelcutoffs;
3707 int ntotaldowngains;
3714 bestdowngain = downbranchingresult->
bestgain;
3715 bestupgain = upbranchingresult->
bestgain;
3716 totaldowngains = downbranchingresult->
totalgains;
3717 totalupgains = upbranchingresult->
totalgains;
3721 return bestdowngain + bestupgain + (totaldowngains/ntotaldowngains + totalupgains/ntotalupgains)*nlowestlevelcutoffs;
3740 int ntotaldowngains;
3747 bestdowngain = downbranchingresult->
bestgain;
3748 bestupgain = upbranchingresult->
bestgain;
3749 totaldowngains = downbranchingresult->
totalgains;
3750 totalupgains = upbranchingresult->
totalgains;
3754 return config->
minweight*
MIN(bestdowngain, bestupgain) + (1.0 - config->
minweight)*
MAX(bestdowngain, bestupgain) + (totaldowngains/ntotaldowngains + totalupgains/ntotalupgains)*nlowestlevelcutoffs;
3770 int nlowestlevelcutoffs;
3775 nlowestlevelcutoffs = 0;
3780 if( !downbranchingresult->
cutoff )
3783 downgain =
MAX(downgain, downbranchingresult->
dualbound - lpobjval);
3785 if( !upbranchingresult->
cutoff )
3788 upgain =
MAX(upgain, upbranchingresult->
dualbound - lpobjval);
3795 if( downbranchingresult->
cutoff )
3798 downgain = 2 * upgain;
3800 if( upbranchingresult->
cutoff )
3803 upgain = 2 * downgain;
3808 downgain = downgain/gap;
3809 upgain = upgain/gap;
3842 factor = factor * factor;
3847 if( !downbranchingresult->
cutoff )
3849 downgain =
MAX(downgain, downbranchingresult->
dualbound - lpobjval);
3851 if( !upbranchingresult->
cutoff )
3853 upgain =
MAX(upgain, upbranchingresult->
dualbound - lpobjval);
3860 if( downbranchingresult->
cutoff )
3862 downgain = 2 * upgain;
3864 if( upbranchingresult->
cutoff )
3866 upgain = 2 * downgain;
3871 downgain = downgain/gap;
3872 upgain = upgain/gap;
3892 char scoringfunction;
3907 switch( scoringfunction )
3937 assert(scoringfunction ==
'd');
3969void printCandidateList(
4008 assert(nbestcandidates <= candidatelist->ncandidates);
4020 movescore = scorecontainer->
scores[moveprobindex];
4023 nsorted =
MIN(
i, nbestcandidates);
4027 assert(insertionindex <= nsorted);
4032 if( insertionindex !=
i && insertionindex < nsorted )
4038 for( j = insertionindex; j < nsorted; j++ )
4044 reordercand = oldcand;
4053 "\n", candidatelist->
ncandidates, nbestcandidates);
4054 printCandidateList(
scip, candidatelist, scorecontainer);
4075 size =
MIN(downsize, upsize);
4077 return size >= reliable;
4106#ifdef SCIP_STATISTIC
4107 ,STATISTICS* statistics
4108 ,LOCALSTATISTICS* localstats
4113 int nunscoredcandidates = 0;
4114 int* candidateunscored;
4160 candidateunscored[nunscoredcandidates] =
i;
4161 nunscoredcandidates++;
4166 if( nunscoredcandidates > 0 )
4174 for(
i = 0;
i < nunscoredcandidates;
i++ )
4176 int candindex = candidateunscored[
i];
4192#ifdef SCIP_STATISTIC
4194 decision, scorecontainer, level2data, lpobjval, statistics, localstats) );
4197 decision, scorecontainer, level2data, lpobjval) );
4201 for(
i = 0;
i < nunscoredcandidates;
i++ )
4238#ifdef SCIP_STATISTIC
4239 ,STATISTICS* statistics
4240 ,LOCALSTATISTICS* localstats
4262#ifdef SCIP_STATISTIC
4264 decision, scorecontainer, level2data, lpobjval, statistics, localstats) );
4267 decision, scorecontainer, level2data, lpobjval) );
4290 for(
i = 1;
i < nusedcands; ++
i )
4305 if( bestmaxgain == 0.0 )
4309 for(
i = nusedcands - 1;
i >= 1; --
i )
4318 if(
i < nusedcands )
4331 for(
i = 1;
i < nusedcands; ++
i )
4376#ifdef SCIP_STATISTIC
4377 ,STATISTICS* statistics
4378 ,LOCALSTATISTICS* localstats
4396 branchvalfrac = candidate->
fracval;
4404 if( binconsdata !=
NULL && varisbinary )
4434 if( level2data !=
NULL )
4462#ifdef SCIP_STATISTIC
4463 statistics->nduplicatelps[probingdepth]++;
4476 "Use old %s branching result on var <%s> with 'val > %g' and bounds [<%g>..<%g>]: objval <%.9g>, cutoff <%d> "
4477 "(the parent objval was <%.9g>)\n",
4499#ifdef SCIP_STATISTIC
4500 statistics->nlpssolved[probingdepth]++;
4501 statistics->nlpiterations[probingdepth] += branchingresult->
niterations;
4505 statistics->nlpssolvedfsb[probingdepth]++;
4506 statistics->nlpiterationsfsb[probingdepth] += branchingresult->
niterations;
4517 else if( branchingresult->
cutoff )
4524 "<%.9g>)\n", branchingresult->
objval, localbaselpsolval);
4533 localgain =
MAX(0, branchingresult->
objval - localbaselpsolval);
4557 if( recursiondepth > 1 && !config->
inscoring )
4573#ifdef SCIP_STATISTIC
4574 LOCALSTATISTICS* deeperlocalstats;
4576 SCIP_CALL( localStatisticsAllocate(
scip, &deeperlocalstats) );
4582#ifdef SCIP_STATISTIC
4584 deeperdecision, scorecontainer, level2data, deeperlpobjval,
4585 statistics, localstats) );
4588 deeperdecision, scorecontainer, level2data, deeperlpobjval) );
4595 if( deeperstatus->
cutoff )
4606#ifdef SCIP_STATISTIC
4607 deeperlocalstats->ncutoffproofnodes = 0;
4609 binconsdata, candidatelist, deeperdecision, scorecontainer, level2data, recursiondepth - 1,
4613 statistics, deeperlocalstats,
NULL,
NULL) );
4616 binconsdata, candidatelist, deeperdecision, scorecontainer, level2data, recursiondepth - 1,
4634#ifdef SCIP_STATISTIC
4639 statistics->stopafterfsb[probingdepth+1]++;
4641 if( deeperstatus->
cutoff )
4643 statistics->cutoffafterfsb[probingdepth+1]++;
4645 else if( deeperstatus->
domred )
4647 statistics->domredafterfsb[probingdepth+1]++;
4652 if( deeperstatus->
cutoff )
4655#ifdef SCIP_STATISTIC
4656 localstats->ncutoffproofnodes += deeperlocalstats->ncutoffproofnodes;
4659 "cutoff\n", downbranching ?
"down" :
"up");
4664#ifdef SCIP_STATISTIC
4665 localStatisticsFree(
scip, &deeperlocalstats);
4676 if( recursiondepth == 1 && !config->
inscoring )
4680 if( branchingresult->
cutoff )
4686 if( binconsdata !=
NULL && varisbinary )
4692#ifdef SCIP_STATISTIC
4726 int* ndeepestcutoffs,
4733#ifdef SCIP_STATISTIC
4734 ,STATISTICS* statistics
4735 ,LOCALSTATISTICS* localstats
4764 assert(recursiondepth >= 1);
4765#ifdef SCIP_STATISTIC
4768 if( firstscoreptr !=
NULL )
4769 *firstscoreptr = -1.0;
4770 if( bestscoreptr !=
NULL )
4771 *bestscoreptr = -1.0;
4776 assert(probingdepth >= 0 && probingdepth < config->recursiondepth);
4784 decision->
downdb = lpobjval;
4786 decision->
updb = lpobjval;
4789 decision->
score = 0.0;
4806 stopafterinfeasible = !stopafterinfeasible;
4830 for(
i = 0,
c = start;
4863#ifdef SCIP_STATISTIC
4864 statistics->npropdomred[probingdepth]++;
4873#ifdef SCIP_STATISTIC
4877 localstats->ncutoffproofnodes = 0;
4888 useoldbranching =
TRUE;
4889#ifdef SCIP_STATISTIC
4891 statistics->noldbranchusedfsb[probingdepth]++;
4893 statistics->noldbranchused[probingdepth]++;
4914 for( k = 0; k < 2; ++k )
4920 localdomainreductions = down ? downdomainreductions : updomainreductions;
4921 localbranchingresult = down ? downbranchingresult : upbranchingresult;
4922 otherbranchingresult = down ? upbranchingresult : downbranchingresult;
4924#ifdef SCIP_STATISTIC
4926 recursiondepth, localdomainreductions, binconsdata, level2data, localbranchingresult, scorecontainer,
4927 down, statistics, localstats) );
4931 recursiondepth, localdomainreductions, binconsdata, level2data, localbranchingresult, scorecontainer,
4942 "The %s branching changed the cutoffbound and rendered the %s branching result infeasible.\n",
4943 down ?
"down" :
"up", down ?
"up" :
"down");
4946 if( stopafterinfeasible && k == 0 && localbranchingresult->
cutoff )
4954 "(gain=%.9g, valid=%u, inf=%u)\n", downbranchingresult->
dualbound,
4959 if( niterations !=
NULL )
4963 if( persistent !=
NULL && !upbranchingresult->
cutoff && !downbranchingresult->
cutoff && (config->
inscoring || probingdepth == 0) )
4966 upbranchingresult, lpobjval) );
4970 if( ndeepestcutoffs !=
NULL )
4973 if( ndeepestnodes !=
NULL )
4978 SCIP_Real scoringlpobjval = useoldbranching ? oldlpobjval : lpobjval;
4980 scoringlpobjval, baselpobjval);
4982#ifdef SCIP_STATISTIC
4983 if(
i == 0 && firstscoreptr !=
NULL )
4984 *firstscoreptr = score;
4992 *bestgain =
MAX(*bestgain, score);
4994 if( !downbranchingresult->
cutoff && !upbranchingresult->
cutoff )
4996 (*totalgains) += score;
5009#ifdef SCIP_STATISTIC
5010 statistics->nfullcutoffs[probingdepth]++;
5011 localstats->ncutoffproofnodes += 2;
5025#ifdef SCIP_STATISTIC
5026 assert(localstats->ncutoffproofnodes == 0 || localstats->ncutoffproofnodes == 2);
5028 2 + localstats->ncutoffproofnodes,
TRUE);
5040#ifdef SCIP_STATISTIC
5041 statistics->nsinglecutoffs[probingdepth]++;
5055#ifdef SCIP_STATISTIC
5056 assert(localstats->ncutoffproofnodes == 0 || localstats->ncutoffproofnodes == 2);
5058 2 + localstats->ncutoffproofnodes,
TRUE);
5070#ifdef SCIP_STATISTIC
5071 statistics->nsinglecutoffs[probingdepth]++;
5090 int maxstoredomreds = INT_MAX;
5099 updomainreductions);
5100 else if( upbranchingresult->
cutoff && !downbranchingresult->
cutoff )
5102 else if( downbranchingresult->
cutoff && !upbranchingresult->
cutoff )
5116 bestscoringlpobjval, baselpobjval);
5118 if( newscore > bestscore )
5120 bestscore = newscore;
5122#ifdef SCIP_STATISTIC
5123 if( bestscoreptr !=
NULL )
5124 *bestscoreptr = newscore;
5126 decision->
score = newscore;
5142#ifdef SCIP_STATISTIC
5143 if( bestscoreptr !=
NULL )
5144 *bestscoreptr = score;
5152 decision->
score = score;
5175 bestscorelowerbound = branchlb;
5176 bestscoreupperbound = branchub;
5177 bestscoringlpobjval = scoringlpobjval;
5187 MAX(downbranchingresult->
objval - scoringlpobjval, 0),
MAX(downbranchingresult->
dualbound - scoringlpobjval, 0),
5188 MAX(upbranchingresult->
objval - scoringlpobjval, 0),
MAX(upbranchingresult->
dualbound - scoringlpobjval, 0),
5200 downbranchingresult->
dualbound - scoringlpobjval, upbranchingresult->
dualbound - scoringlpobjval) );
5203 if( probingdepth == 0 && (binconsdata !=
NULL || domainreductions !=
NULL) && !useoldbranching
5209 if( binconsdata !=
NULL )
5224 if( domainreductions !=
NULL )
5257#ifdef SCIP_STATISTIC
5258 statistics->npropdomred[probingdepth]++;
5265 if( updomainreductions !=
NULL )
5327#ifdef SCIP_STATISTIC
5328 ,STATISTICS* statistics
5329 ,LOCALSTATISTICS* localstats
5339#ifdef SCIP_STATISTIC
5342 int chosencandnr = -1;
5351#ifdef SCIP_STATISTIC
5358 assert(recursiondepth > 0);
5366#ifdef SCIP_STATISTIC
5367 statistics->ndepthreached++;
5378 decision->
downdb = lpobjval;
5380 decision->
updb = lpobjval;
5387#ifdef SCIP_STATISTIC
5388 statistics->nsinglecandidate++;
5420#ifdef SCIP_STATISTIC
5422 decision, scorecontainer, level2data, lpobjval,
5423 statistics, localstats) );
5426 decision, scorecontainer, level2data, lpobjval) );
5433 decision->
downdb = lpobjval;
5435 decision->
updb = lpobjval;
5442#ifdef SCIP_STATISTIC
5443 statistics->nsingleafterfilter++;
5462#ifdef SCIP_STATISTIC
5464 decision, scorecontainer, level2data, recursiondepth, lpobjval, lpobjval,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
5465 statistics, localstats, &firstscore, &bestscore) );
5468 decision, scorecontainer, level2data, recursiondepth, lpobjval, lpobjval,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL) );
5471 if( level2data !=
NULL )
5490#ifdef SCIP_STATISTIC
5499 for( chosencandnr = 0; chosencandnr < candidatelist->
ncandidates; ++chosencandnr )
5506 assert(chosencandnr < candidatelist->ncandidates);
5512 int probingdepth = 0;
5515 statistics->stopafterfsb[probingdepth]++;
5519 statistics->cutoffafterfsb[probingdepth]++;
5523 statistics->domredafterfsb[probingdepth]++;
5535 if( domainreductions !=
NULL )
5542#ifdef SCIP_STATISTIC
5544 &status->
domred, statistics) );
5554 if( binconsdata !=
NULL )
5564#ifdef SCIP_STATISTIC
5580#if defined(SCIP_DEBUG) || defined(SCIP_STATISTIC)
5587#ifdef SCIP_STATISTIC
5589 statistics->nsingleafterfilter--;
5596#ifdef SCIP_STATISTIC
5598 statistics->nsingleafterfilter--;
5601 else if( status->
cutoff )
5612#ifdef SCIP_STATISTIC
5613 if( chosencandnr >= 0 )
5615 ++statistics->chosenfsbcand[chosencandnr];
5621 bestscore, firstscore);
5639 if( baselpsol !=
NULL )
5664 persistent = branchruledata->persistent;
5668 "nodes=%lld (old=%lld), iterations=%lld (old=%lld), lps=%lld (old=%lld)\n",
5701 assert(branchruledata->persistent->olddecision !=
NULL);
5710 SCIPvarGetName(branchruledata->persistent->olddecision->branchvar));
5713 branchruledata->persistent->olddecision->branchvar =
NULL;
5732 persistent = branchruledata->persistent;
5760 branchruledata->isinitialized =
FALSE;
5784 if( branchruledata->isinitialized &&
nvars == branchruledata->persistent->nvars )
5787 if( branchruledata->isinitialized )
5797 branchruledata->persistent->nvars =
nvars;
5798 branchruledata->persistent->oldntotalnodes = -1;
5799 branchruledata->persistent->oldnnodelpiterations = -1;
5800 branchruledata->persistent->oldnnodelps = -1;
5807 branchruledata->persistent->lastbranchid[
i] = -1;
5808 branchruledata->persistent->lastbranchnlps[
i] = 0;
5814 branchruledata->isinitialized =
TRUE;
5873 branchruledata->persistent->restartindex = 0;
5875#ifdef SCIP_STATISTIC
5882 recursiondepth = branchruledata->config->recursiondepth;
5884 if( maxncands > branchruledata->config->maxncands )
5885 maxncands = branchruledata->config->maxncands;
5905 branchruledata->statistics->recursiondepth = recursiondepth;
5906 branchruledata->statistics->maxnbestcands = maxncands;
5908 statisticsInit(branchruledata->statistics);
5922#ifdef SCIP_STATISTIC
5924 STATISTICS* statistics;
5929 statistics = branchruledata->statistics;
5932 statisticsPrint(
scip, statistics);
5964 if( branchruledata->isinitialized )
5990 config = branchruledata->config;
6005#ifdef SCIP_STATISTIC
6006 branchruledata->statistics->noldcandidate++;
6015#ifdef SCIP_STATISTIC
6016 LOCALSTATISTICS* localstats;
6036#ifdef SCIP_STATISTIC
6040 scorecontainer, candidatelist, branchruledata->statistics, localstats) );
6043 scorecontainer, candidatelist) );
6049#ifdef SCIP_STATISTIC
6050 branchruledata->statistics->ncutoffproofnodes += localstats->ncutoffproofnodes;
6059 else if( status->
domred )
6065#ifdef SCIP_STATISTIC
6066 ++branchruledata->statistics->nlperrorcalls;
6084#ifdef SCIP_STATISTIC
6087 ++branchruledata->statistics->nlimitcalls;
6132 "problem is infeasible.\n");
6141 "lookahead branching.\n");
6149#ifdef SCIP_STATISTIC
6150 localStatisticsFree(
scip, &localstats);
6155 if( scorecontainer !=
NULL )
6163#ifdef SCIP_STATISTIC
6166 branchruledata->statistics->ntotalresults++;
6167 branchruledata->statistics->nresults[*
result]++;
6174 sum = branchruledata->statistics->nsinglecandidate + branchruledata->statistics->nsingleafterfilter
6175 + branchruledata->statistics->noldcandidate + branchruledata->statistics->nlperrorcalls
6176 + branchruledata->statistics->nlimitcalls;
6178 for(
i = 0;
i < branchruledata->statistics->maxnbestcands;
i++ )
6180 sum += branchruledata->statistics->chosenfsbcand[
i];
6182 if( sum != branchruledata->statistics->nresults[
SCIP_BRANCHED] )
6184 printf(
"branched = %d != sum = %d (%d/%d/%d/%d/%d)\n",
6186 branchruledata->statistics->nsinglecandidate, branchruledata->statistics->nsingleafterfilter,
6187 branchruledata->statistics->noldcandidate,
6188 branchruledata->statistics->nlperrorcalls, branchruledata->statistics->nlimitcalls);
6195 branchruledata->statistics->ncutoffproofnodes, branchruledata->statistics->ndomredproofnodes);
6220 branchruledata->persistent->restartindex = 0;
6221 branchruledata->isinitialized =
FALSE;
6222 branchruledata->config->inscoring =
FALSE;
6240 "branching/lookahead/useimpliedbincons",
6241 "should binary constraints be collected and applied?",
6244 "branching/lookahead/addbinconsrow",
6245 "should binary constraints be added as rows to the base LP? (0: no, 1: separate, 2: as initial rows)",
6248 "how many constraints that are violated by the base lp solution should be gathered until the rule is stopped and "\
6249 "they are added? [0 for unrestricted]",
6252 "how many binary constraints that are violated by the base lp solution should be gathered until the rule is "\
6253 "stopped and they are added? [0 for unrestricted]",
6256 "how many domain reductions that are violated by the base lp solution should be gathered until the rule is "\
6257 "stopped and they are added? [0 for unrestricted]",
6260 "branching/lookahead/reevalage",
6261 "max number of LPs solved after which a previous prob branching results are recalculated",
6264 "branching/lookahead/reevalagefsb",
6265 "max number of LPs solved after which a previous FSB scoring results are recalculated",
6268 "the max depth of LAB.",
6271 "branching/lookahead/usedomainreduction",
6272 "should domain reductions be collected and applied?",
6275 "branching/lookahead/mergedomainreductions",
6276 "should domain reductions of feasible siblings should be merged?",
6279 "branching/lookahead/prefersimplebounds",
6280 "should domain reductions only be applied if there are simple bound changes?",
6283 "branching/lookahead/onlyvioldomreds",
6284 "should only domain reductions that violate the LP solution be applied?",
6287 "branching/lookahead/addnonviocons",
6288 "should binary constraints, that are not violated by the base LP, be collected and added?",
6291 "branching/lookahead/abbreviated",
6292 "toggles the abbreviated LAB.",
6295 "if abbreviated: The max number of candidates to consider at the node.",
6298 "if abbreviated: The max number of candidates to consider per deeper node.",
6301 "branching/lookahead/reusebasis",
6302 "if abbreviated: Should the information gathered to obtain the best candidates be reused?",
6305 "branching/lookahead/storeunviolatedsol",
6306 "if only non violating constraints are added, should the branching decision be stored till the next call?",
6309 "branching/lookahead/abbrevpseudo",
6310 "if abbreviated: Use pseudo costs to estimate the score of a candidate.",
6313 "branching/lookahead/level2avgscore",
6314 "should the average score be used for uninitialized scores in level 2?",
6317 "branching/lookahead/level2zeroscore",
6318 "should uninitialized scores in level 2 be set to 0?",
6321 "branching/lookahead/addclique",
6322 "add binary constraints with two variables found at the root node also as a clique",
6325 "branching/lookahead/propagate",
6326 "should domain propagation be executed before each temporary node is solved?",
6329 "branching/lookahead/uselevel2data",
6330 "should branching data generated at depth level 2 be stored for re-using it?",
6333 "branching/lookahead/applychildbounds",
6334 "should bounds known for child nodes be applied?",
6337 "branching/lookahead/enforcemaxdomreds",
6338 "should the maximum number of domain reductions maxnviolateddomreds be enforced?",
6341 "branching/lookahead/updatebranchingresults",
6342 "should branching results (and scores) be updated w.r.t. proven dual bounds?",
6345 "branching/lookahead/maxproprounds",
6346 "maximum number of propagation rounds to perform at each temporary node (-1: unlimited, 0: SCIP default)",
6349 "branching/lookahead/scoringfunction",
6350 "scoring function to be used at the base level",
6353 "branching/lookahead/deeperscoringfunction",
6354 "scoring function to be used at deeper levels",
6357 "branching/lookahead/scoringscoringfunction",
6358 "scoring function to be used during FSB scoring",
6361 "branching/lookahead/minweight",
6362 "if scoringfunction is 's', this value is used to weight the min of the gains of two child problems in the convex combination",
6365 "branching/lookahead/worsefactor",
6366 "if the FSB score is of a candidate is worse than the best by this factor, skip this candidate (-1: disable)",
6369 "branching/lookahead/filterbymaxgain",
6370 "should lookahead branching only be applied if the max gain in level 1 is not uniquely that of the best candidate?",
#define BRANCHRULE_PRIORITY
#define BRANCHRULE_MAXDEPTH
#define BRANCHRULE_MAXBOUNDDIST
#define DEFAULT_REEVALAGE
#define DEFAULT_MAXPROPROUNDS
#define DEFAULT_MAXNCANDS
static SCIP_RETCODE selectVarStart(SCIP *scip, CONFIGURATION *config, PERSISTENTDATA *persistent, STATUS *status, BRANCHINGDECISION *decision, SCORECONTAINER *scorecontainer, CANDIDATELIST *candidatelist)
static SCIP_Bool isCandidateReliable(SCIP *scip, SCIP_VAR *branchvar)
static SCIP_Bool warmStartInfoIsAvailable(WARMSTARTINFO *warmstartinfo)
static void domainReductionsFree(SCIP *scip, DOMAINREDUCTIONS **domreds)
#define DEFAULT_USEBINARYCONSTRAINTS
static SCIP_RETCODE branchingDecisionEnsureBoundArraysSize(SCIP *scip, BRANCHINGDECISION *decision, int nvars)
static void binConsDataFree(SCIP *scip, BINCONSDATA **consdata)
static void level2resultFree(SCIP *scip, LEVEL2RESULT **result)
static SCIP_RETCODE getOldBranching(SCIP *scip, PERSISTENTDATA *persistent, CONFIGURATION *config, SCIP_VAR *branchvar, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult, SCIP_Real *oldlpobjval)
#define DEFAULT_UPDATEBRANCHINGRESULTS
static SCIP_RETCODE scoreContainerCreate(SCIP *scip, SCORECONTAINER **scorecontainer, CONFIGURATION *config)
static SCIP_RETCODE applyDomainReductions(SCIP *scip, CONFIGURATION *config, SCIP_SOL *baselpsol, DOMAINREDUCTIONS *domreds, SCIP_Bool *domredcutoff, SCIP_Bool *domred)
#define DEFAULT_PROPAGATE
static SCIP_Real calculateScaledCutoffScore(BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult)
static SCIP_RETCODE level2dataEnsureSize(SCIP *scip, LEVEL2DATA *data)
#define DEFAULT_DEEPERSCORINGFUNCTION
static SCIP_RETCODE executeBranching(SCIP *scip, CONFIGURATION *config, SCIP_Bool downbranching, CANDIDATE *candidate, BRANCHINGRESULTDATA *resultdata, SCIP_SOL *baselpsol, DOMAINREDUCTIONS *domreds, STATUS *status)
static SCIP_RETCODE statusCreate(SCIP *scip, STATUS **status)
static void addLowerBound(SCIP *scip, SCIP_VAR *var, SCIP_Real lowerbound, SCIP_SOL *baselpsol, SCIP_Bool simplechange, DOMAINREDUCTIONS *domainreductions)
static SCIP_Real calculateScoreFromPseudocosts(SCIP *scip, CANDIDATE *lpcand)
#define DEFAULT_SCORINGFUNCTION
static void createBinaryConstraintName(SCIP_VAR **binaryvars, int nbinaryvars, char *constraintname)
static SCIP_RETCODE executeBranchingRecursive(SCIP *scip, STATUS *status, CONFIGURATION *config, SCIP_SOL *baselpsol, CANDIDATE *candidate, SCIP_Real localbaselpsolval, SCIP_Real baselpobjval, int recursiondepth, DOMAINREDUCTIONS *domainreductions, BINCONSDATA *binconsdata, LEVEL2DATA *level2data, BRANCHINGRESULTDATA *branchingresult, SCORECONTAINER *scorecontainer, SCIP_Bool downbranching)
static void binaryVarListDrop(BINARYVARLIST *list)
#define DEFAULT_USELEVEL2DATA
static SCIP_Bool areBoundsChanged(SCIP *scip, SCIP_VAR *var, SCIP_Real lowerbound, SCIP_Real upperbound)
static SCIP_Bool isBranchFurther(STATUS *status, SCIP_Bool checkdomreds)
#define DEFAULT_ENFORCEMAXDOMREDS
static SCIP_RETCODE branchingResultDataCreate(SCIP *scip, BRANCHINGRESULTDATA **resultdata)
static SCIP_RETCODE domainReductionsCreate(SCIP *scip, DOMAINREDUCTIONS **domreds)
static SCIP_RETCODE copyCurrentSolution(SCIP *scip, SCIP_SOL **lpsol)
#define DEFAULT_ABBREVIATED
static SCIP_RETCODE warmStartInfoFree(SCIP *scip, WARMSTARTINFO **warmstartinfo)
#define DEFAULT_MERGEDOMAINREDUCTIONS
static void branchingResultDataCopy(BRANCHINGRESULTDATA *sourcedata, BRANCHINGRESULTDATA *targetdata)
static SCIP_RETCODE applyBinaryConstraints(SCIP *scip, SCIP_NODE *basenode, CONSTRAINTLIST *conslist, CONFIGURATION *config, SCIP_Bool *consadded, SCIP_Bool *cutoff, SCIP_Bool *boundchange)
static SCIP_RETCODE scoreContainerFree(SCIP *scip, SCORECONTAINER **scorecontainer)
#define DEFAULT_ADDCLIQUE
#define DEFAULT_REEVALAGEFSB
static SCIP_RETCODE constraintListCreate(SCIP *scip, CONSTRAINTLIST **conslist, int startsize)
static SCIP_Real calculateScoreFromDeeperscoreAndCutoffs(SCIP *scip, SCIP_VAR *branchvar, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult)
static void scoreContainterResetBestSortedCands(SCORECONTAINER *scorecontainer)
static SCIP_Bool isUsePreviousResult(SCIP *scip, SCIP_BRANCHRULEDATA *branchruledata)
static SCIP_RETCODE ensureScoresPresent(SCIP *scip, STATUS *status, PERSISTENTDATA *persistent, CONFIGURATION *config, SCIP_SOL *baselpsol, DOMAINREDUCTIONS *domainreductions, BINCONSDATA *binconsdata, CANDIDATELIST *allcandidates, BRANCHINGDECISION *decision, SCORECONTAINER *scorecontainer, LEVEL2DATA *level2data, SCIP_Real lpobjval)
static SCIP_RETCODE candidateCreate(SCIP *scip, CANDIDATE **candidate)
#define DEFAULT_MAXNDEEPERCANDS
static SCIP_RETCODE candidateListCreate(SCIP *scip, CANDIDATELIST **candidatelist, int ncandidates)
static SCIP_Bool isBranchFurtherLoopDecrement(STATUS *status, int *loopcounter)
static void binaryVarListAppend(SCIP *scip, BINARYVARLIST *list, SCIP_VAR *vartoadd)
#define level2resultPrint(scip, result)
static SCIP_Bool level2resultEqual(LEVEL2RESULT *result1, LEVEL2RESULT *result2)
static SCIP_Real calculateScore(SCIP *scip, CONFIGURATION *config, SCIP_VAR *branchvar, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult, SCIP_Real lpobjval, SCIP_Real baselpobjval)
static SCIP_RETCODE usePreviousResult(SCIP *scip, SCIP_BRANCHRULEDATA *branchruledata, SCIP_RESULT *result)
static SCIP_RETCODE level2resultCreateFromData(SCIP *scip, LEVEL2DATA *data, LEVEL2RESULT **result)
static SCIP_RETCODE candidateListKeep(SCIP *scip, CANDIDATELIST *candidatelist, int nindices)
static SCIP_RETCODE filterCandidates(SCIP *scip, STATUS *status, PERSISTENTDATA *persistent, CONFIGURATION *config, SCIP_SOL *baselpsol, DOMAINREDUCTIONS *domainreductions, BINCONSDATA *binconsdata, CANDIDATELIST *candidatelist, BRANCHINGDECISION *decision, SCORECONTAINER *scorecontainer, LEVEL2DATA *level2data, SCIP_Real lpobjval)
#define DEFAULT_APPLYCHILDBOUNDS
static SCIP_Real calculateScoreFromResult2(SCIP *scip, SCIP_VAR *branchvar, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult, SCIP_Real lpobjval)
static SCIP_RETCODE initBranchruleData(SCIP *scip, SCIP_BRANCHRULEDATA *branchruledata)
#define DEFAULT_MINWEIGHT
static int findInsertionPoint(SCIP *scip, SCORECONTAINER *scorecontainer, SCIP_Real scoretoinsert, CANDIDATE **candidates, int ncandidates)
static SCIP_RETCODE candidateFree(SCIP *scip, CANDIDATE **candidate)
static SCIP_RETCODE candidateListGetAllFractionalCandidates(SCIP *scip, CANDIDATELIST **candidatelist)
#define DEFAULT_ADDBINCONSROW
static SCIP_RETCODE selectVarRecursive(SCIP *scip, STATUS *status, PERSISTENTDATA *persistent, CONFIGURATION *config, SCIP_SOL *baselpsol, DOMAINREDUCTIONS *domainreductions, BINCONSDATA *binconsdata, CANDIDATELIST *candidatelist, BRANCHINGDECISION *decision, SCORECONTAINER *scorecontainer, LEVEL2DATA *level2data, int recursiondepth, SCIP_Real lpobjval, SCIP_Real baselpobjval, SCIP_Longint *niterations, int *ndeepestcutoffs, SCIP_Real *bestgain, SCIP_Real *totalgains, int *ntotalgains, int *ndeepestnodes)
static void binaryVarListFree(SCIP *scip, BINARYVARLIST **list)
static SCIP_RETCODE getNIterationsLastLP(SCIP *scip, SCIP_Longint *iterations)
static SCIP_RETCODE binConsDataCreate(SCIP *scip, BINCONSDATA **consdata, int maxdepth, int nstartcons)
static SCIP_RETCODE candidateStoreWarmStartInfo(SCIP *scip, CANDIDATE *candidate, SCIP_Bool down)
#define DEFAULT_LEVEL2AVGSCORE
static SCIP_RETCODE branchOnVar(SCIP *scip, CONFIGURATION *config, BRANCHINGDECISION *decision)
static void statusFree(SCIP *scip, STATUS **status)
static SCIP_RETCODE level2dataCreate(SCIP *scip, LEVEL2DATA **data)
static void applyDeeperDomainReductions(SCIP *scip, SCIP_SOL *baselpsol, int maxstoredomreds, DOMAINREDUCTIONS *targetdomreds, DOMAINREDUCTIONS *downdomreds, DOMAINREDUCTIONS *updomreds)
static void level2dataFree(SCIP *scip, LEVEL2DATA **data)
static SCIP_Bool isUseOldBranching(SCIP *scip, PERSISTENTDATA *persistent, CONFIGURATION *config, SCIP_VAR *branchvar)
static void addUpperBound(SCIP *scip, SCIP_VAR *var, SCIP_Real upperbound, SCIP_SOL *baselpsol, SCIP_Bool simplechange, DOMAINREDUCTIONS *domainreductions)
static SCIP_RETCODE freePersistent(SCIP *scip, SCIP_BRANCHRULEDATA *branchruledata)
static void branchingDecisionFree(SCIP *scip, BRANCHINGDECISION **decision)
static SCIP_RETCODE level2dataGetResult(SCIP *scip, LEVEL2DATA *data, LEVEL2RESULT **result)
static SCIP_RETCODE candidateFreeWarmStartInfo(SCIP *scip, CANDIDATE *candidate)
static SCIP_Real calculateScoreFromDeeperscore(SCIP *scip, SCIP_VAR *branchvar, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult)
static void branchingDecisionCopy(BRANCHINGDECISION *sourcedecision, BRANCHINGDECISION *targetdecision)
SCIP_RETCODE SCIPincludeBranchruleLookahead(SCIP *scip)
static SCIP_RETCODE scoreContainerSetScore(SCIP *scip, SCORECONTAINER *scorecontainer, CANDIDATE *cand, SCIP_Real score, SCIP_Real downgain, SCIP_Real upgain)
#define DEFAULT_REUSEBASIS
static void constraintListFree(SCIP *scip, CONSTRAINTLIST **conslist)
static SCIP_RETCODE addBinaryConstraint(SCIP *scip, CONFIGURATION *config, BINCONSDATA *binconsdata, SCIP_SOL *baselpsol)
#define DEFAULT_RECURSIONDEPTH
static SCIP_RETCODE candidateListFree(SCIP *scip, CANDIDATELIST **candidatelist)
static SCIP_Real calculateWeightedCutoffScore(CONFIGURATION *config, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult)
#define DEFAULT_USEDOMAINREDUCTION
static SCIP_RETCODE warmStartInfoCreate(SCIP *scip, WARMSTARTINFO **warmstartinfo)
static SCIP_Bool isStoreDecision(CONFIGURATION *config, BINCONSDATA *binconsdata, DOMAINREDUCTIONS *domainreductions)
#define DEFAULT_MAXNVIOLATEDCONS
static void applySingleDeeperDomainReductions(SCIP *scip, SCIP_SOL *baselpsol, int maxstoredomreds, DOMAINREDUCTIONS *targetdomreds, DOMAINREDUCTIONS *domreds)
static CANDIDATE * scoreContainerUpdateSortOrder(SCORECONTAINER *scorecontainer, CANDIDATE *candidate, int insertpoint)
static SCIP_RETCODE constraintListAppend(SCIP *scip, CONSTRAINTLIST *list, SCIP_VAR **consvars, int nconsvars, SCIP_Bool violated)
static SCIP_RETCODE binaryVarListCreate(SCIP *scip, BINARYVARLIST **list, int startsize)
static SCIP_RETCODE createBinaryConstraint(SCIP *scip, CONFIGURATION *config, SCIP_CONS **constraint, char *constraintname, SCIP_VAR **consvars, int nconsvars)
static SCIP_Bool candidateHasWarmStartInfo(CANDIDATE *candidate, SCIP_Bool down)
#define DEFAULT_SCORINGSCORINGFUNCTION
static void branchingResultDataFree(SCIP *scip, BRANCHINGRESULTDATA **resultdata)
#define LABdebugMessage(scip, lvl,...)
static SCIP_RETCODE updateOldBranching(SCIP *scip, PERSISTENTDATA *persistent, CONFIGURATION *config, SCIP_VAR *branchvar, SCIP_Real branchval, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult, SCIP_Real lpobjval)
#define DEFAULT_STOREUNVIOLATEDSOL
static SCIP_Bool isCurrentNodeCutoff(SCIP *scip)
#define DEFAULT_WORSEFACTOR
#define DEFAULT_MAXNVIOLATEDBINCONS
static SCIP_RETCODE level2dataStoreResult(SCIP *scip, LEVEL2DATA *data, SCIP_Real lpobjval, SCIP_Bool cutoff, SCIP_Bool valid, SCIP_Bool *duplicate)
#define DEFAULT_ABBREVPSEUDO
#define DEFAULT_PREFERSIMPLEBOUNDS
static SCIP_Real calculateWeightedGain(SCIP *scip, CONFIGURATION *config, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult, SCIP_Real lpobjval)
#define DEFAULT_FILTERBYMAXGAIN
static void branchingResultDataInit(SCIP *scip, BRANCHINGRESULTDATA *resultdata)
static SCIP_Real calculateRelCutoffScore(SCIP *scip, SCIP_VAR *branchvar, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult, SCIP_Real lpobjval)
static SCIP_Real calculateCutoffScore(SCIP *scip, SCIP_VAR *branchvar, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult, SCIP_Real lpobjval)
static void sortFirstCandidatesByScore(SCIP *scip, CANDIDATELIST *candidatelist, SCORECONTAINER *scorecontainer, int nbestcandidates)
#define DEFAULT_ONLYVIOLDOMREDS
static SCIP_RETCODE branchingDecisionCreate(SCIP *scip, BRANCHINGDECISION **decision)
static SCIP_Real calculateScoreFromResult(SCIP *scip, SCIP_VAR *branchvar, BRANCHINGRESULTDATA *downbranchingresult, BRANCHINGRESULTDATA *upbranchingresult, SCIP_Real lpobjval)
static SCIP_RETCODE getFSBResult(SCIP *scip, STATUS *status, PERSISTENTDATA *persistent, CONFIGURATION *config, SCIP_SOL *baselpsol, DOMAINREDUCTIONS *domainreductions, BINCONSDATA *binconsdata, CANDIDATELIST *candidatelist, BRANCHINGDECISION *decision, SCORECONTAINER *scorecontainer, LEVEL2DATA *level2data, SCIP_Real lpobjval)
#define DEFAULT_ADDNONVIOCONS
static SCIP_Bool branchingDecisionIsValid(BRANCHINGDECISION *decision)
static void branchingDecisionInit(SCIP *scip, BRANCHINGDECISION *decision)
static SCIP_RETCODE candidateLoadWarmStartInfo(SCIP *scip, CANDIDATE *candidate, SCIP_Bool down)
#define DEFAULT_MAXNVIOLATEDDOMREDS
#define DEFAULT_LEVEL2ZEROSCORE
lookahead LP branching rule
Constraint handler for logicor constraints (equivalent to set covering, but algorithms are suited fo...
#define SCIP_MAXTREEDEPTH
#define SCIP_LONGINT_FORMAT
SCIP_RETCODE SCIPcreateConsLogicor(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, 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_Bool SCIPisStopped(SCIP *scip)
int SCIPgetNContVars(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
int SCIPgetNContImplVars(SCIP *scip)
SCIP_RETCODE SCIPlpiFreeNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
SCIP_Bool SCIPlpiIsPrimalFeasible(SCIP_LPI *lpi)
SCIP_Bool SCIPlpiIsDualFeasible(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiGetNorms(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPINORMS **lpinorms)
SCIP_RETCODE SCIPlpiFreeState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_RETCODE SCIPlpiGetIterations(SCIP_LPI *lpi, int *iterations)
SCIP_RETCODE SCIPlpiGetState(SCIP_LPI *lpi, BMS_BLKMEM *blkmem, SCIP_LPISTATE **lpistate)
SCIP_RETCODE SCIPupdateNodeLowerbound(SCIP *scip, SCIP_NODE *node, SCIP_Real newbound)
SCIP_RETCODE SCIPupdateLocalLowerbound(SCIP *scip, SCIP_Real newbound)
SCIP_RETCODE SCIPaddConsNode(SCIP *scip, SCIP_NODE *node, SCIP_CONS *cons, SCIP_NODE *validnode)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
SCIP_RETCODE SCIPgetBoolParam(SCIP *scip, const char *name, SCIP_Bool *value)
SCIP_RETCODE SCIPaddLongintParam(SCIP *scip, const char *name, const char *desc, SCIP_Longint *valueptr, SCIP_Bool isadvanced, SCIP_Longint defaultvalue, SCIP_Longint minvalue, SCIP_Longint maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddCharParam(SCIP *scip, const char *name, const char *desc, char *valueptr, SCIP_Bool isadvanced, char defaultvalue, const char *allowedvalues, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddIntParam(SCIP *scip, 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_RETCODE SCIPaddRealParam(SCIP *scip, const char *name, const char *desc, SCIP_Real *valueptr, SCIP_Bool isadvanced, SCIP_Real defaultvalue, SCIP_Real minvalue, SCIP_Real maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
SCIP_RETCODE SCIPsetBranchruleInit(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
SCIP_RETCODE SCIPsetBranchruleExit(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
SCIP_RETCODE SCIPincludeBranchruleBasic(SCIP *scip, SCIP_BRANCHRULE **branchruleptr, const char *name, const char *desc, int priority, int maxdepth, SCIP_Real maxbounddist, SCIP_BRANCHRULEDATA *branchruledata)
const char * SCIPbranchruleGetName(SCIP_BRANCHRULE *branchrule)
SCIP_BRANCHRULEDATA * SCIPbranchruleGetData(SCIP_BRANCHRULE *branchrule)
SCIP_RETCODE SCIPsetBranchruleCopy(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
SCIP_RETCODE SCIPsetBranchruleExecLp(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
SCIP_RETCODE SCIPsetBranchruleExitsol(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
void SCIPbranchruleSetData(SCIP_BRANCHRULE *branchrule, SCIP_BRANCHRULEDATA *branchruledata)
SCIP_RETCODE SCIPsetBranchruleFree(SCIP *scip, SCIP_BRANCHRULE *branchrule,)
SCIP_RETCODE SCIPbranchVarVal(SCIP *scip, SCIP_VAR *var, SCIP_Real val, SCIP_NODE **downchild, SCIP_NODE **eqchild, SCIP_NODE **upchild)
SCIP_RETCODE SCIPgetLPBranchCands(SCIP *scip, SCIP_VAR ***lpcands, SCIP_Real **lpcandssol, SCIP_Real **lpcandsfrac, int *nlpcands, int *npriolpcands, int *nfracimplvars)
SCIP_Real SCIPgetBranchScore(SCIP *scip, SCIP_VAR *var, SCIP_Real downgain, SCIP_Real upgain)
int SCIPgetNPseudoBranchCands(SCIP *scip)
SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_Bool SCIPisExact(SCIP *scip)
int SCIPgetNLPRows(SCIP *scip)
SCIP_RETCODE SCIPgetLPI(SCIP *scip, SCIP_LPI **lpi)
SCIP_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
SCIP_Bool SCIPallColsInLP(SCIP *scip)
SCIP_Real SCIPgetLPObjval(SCIP *scip)
#define SCIPfreeBuffer(scip, ptr)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
#define SCIPallocMemoryArray(scip, ptr, num)
#define SCIPallocClearBufferArray(scip, ptr, num)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPallocMemory(scip, ptr)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPfreeMemoryArray(scip, ptr)
#define SCIPfreeMemory(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPallocBuffer(scip, ptr)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
SCIP_Real SCIPnodeGetLowerbound(SCIP_NODE *node)
SCIP_Longint SCIPnodeGetNumber(SCIP_NODE *node)
SCIP_Real SCIPnodeGetEstimate(SCIP_NODE *node)
int SCIPgetProbingDepth(SCIP *scip)
SCIP_RETCODE SCIPchgVarUbProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_RETCODE SCIPsetProbingLPState(SCIP *scip, SCIP_LPISTATE **lpistate, SCIP_LPINORMS **lpinorms, SCIP_Bool primalfeas, SCIP_Bool dualfeas)
SCIP_RETCODE SCIPchgVarLbProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_RETCODE SCIPpropagateProbing(SCIP *scip, int maxproprounds, SCIP_Bool *cutoff, SCIP_Longint *ndomredsfound)
SCIP_RETCODE SCIPbacktrackProbing(SCIP *scip, int probingdepth)
SCIP_Bool SCIPinProbing(SCIP *scip)
SCIP_RETCODE SCIPnewProbingNode(SCIP *scip)
SCIP_RETCODE SCIPsolveProbingLP(SCIP *scip, int itlim, SCIP_Bool *lperror, SCIP_Bool *cutoff)
SCIP_RETCODE SCIPcreateLPSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur)
SCIP_RETCODE SCIPunlinkSol(SCIP *scip, SCIP_SOL *sol)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Longint SCIPgetNNodeZeroIterationLPs(SCIP *scip)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
SCIP_Longint SCIPgetNTotalNodes(SCIP *scip)
SCIP_Longint SCIPgetNNodeLPIterations(SCIP *scip)
SCIP_Longint SCIPgetNLPs(SCIP *scip)
SCIP_Real SCIPgetCutoffbound(SCIP *scip)
SCIP_Longint SCIPgetNNodeLPs(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisRelGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPfeasCeil(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPfeasFloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPceil(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPsumepsilon(SCIP *scip)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisSumLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
int SCIPgetCutoffdepth(SCIP *scip)
int SCIPgetDepth(SCIP *scip)
SCIP_NODE * SCIPgetCurrentNode(SCIP *scip)
SCIP_RETCODE SCIPtightenVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_RETCODE SCIPaddClique(SCIP *scip, SCIP_VAR **vars, SCIP_Bool *values, int nvars, SCIP_Bool isequation, SCIP_Bool *infeasible, int *nbdchgs)
SCIP_Real SCIPgetVarPseudocostCountCurrentRun(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir)
SCIP_RETCODE SCIPendStrongbranch(SCIP *scip)
SCIP_Bool SCIPvarIsImpliedIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarUbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound)
SCIP_RETCODE SCIPtightenVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound, SCIP_Bool force, SCIP_Bool *infeasible, SCIP_Bool *tightened)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Longint SCIPgetVarStrongbranchNode(SCIP *scip, SCIP_VAR *var)
SCIP_Real SCIPadjustedVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real ub)
SCIP_Longint SCIPgetVarStrongbranchLPAge(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPsetVarStrongbranchData(SCIP *scip, SCIP_VAR *var, SCIP_Real lpobjval, SCIP_Real primsol, SCIP_Real down, SCIP_Real up, SCIP_Bool downvalid, SCIP_Bool upvalid, SCIP_Longint iter, int itlim)
SCIP_Real SCIPgetVarPseudocostVal(SCIP *scip, SCIP_VAR *var, SCIP_Real solvaldelta)
SCIP_Real SCIPadjustedVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real lb)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_RETCODE SCIPgetNegatedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **negvar)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPupdateVarPseudocost(SCIP *scip, SCIP_VAR *var, SCIP_Real solvaldelta, SCIP_Real objdelta, SCIP_Real weight)
SCIP_RETCODE SCIPchgVarLbNode(SCIP *scip, SCIP_NODE *node, SCIP_VAR *var, SCIP_Real newbound)
SCIP_RETCODE SCIPtryStrongbranchLPSol(SCIP *scip, SCIP_Bool *foundsol, SCIP_Bool *cutoff)
SCIP_RETCODE SCIPgetVarStrongbranchLast(SCIP *scip, SCIP_VAR *var, SCIP_Real *down, SCIP_Real *up, SCIP_Bool *downvalid, SCIP_Bool *upvalid, SCIP_Real *solval, SCIP_Real *lpobjval)
SCIP_Bool SCIPisStrongbranchDownFirst(SCIP *scip, SCIP_VAR *var)
void SCIPenableVarHistory(SCIP *scip)
SCIP_RETCODE SCIPstartStrongbranch(SCIP *scip, SCIP_Bool enablepropagation)
int SCIPsnprintf(char *t, int len, const char *s,...)
SCIPfreeSol(scip, &heurdata->sol))
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_Bool propagate
interface methods for specific LP solvers
memory allocation routines
#define BMScopyMemoryArray(ptr, source, num)
#define BMSclearMemoryArray(ptr, num)
struct BMS_BlkMem BMS_BLKMEM
public methods for branching rules
public methods for message output
public data structures and miscellaneous methods
public methods for branch and bound tree
public methods for problem variables
public methods for branching rule plugins and branching
public methods for constraint handler plugins and constraints
public methods for exact solving
public methods for the LP relaxation, rows and columns
public methods for memory management
public methods for message handling
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for global and local (sub)problems
public methods for the probing mode
public methods for solutions
public methods for querying solving statistics
public methods for the branch-and-bound tree
public methods for SCIP variables
static SCIP_RETCODE separate(SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
Main separation function.
CONSTRAINTLIST * conslist
BINARYVARLIST * binaryvars
SCIP_Real * downlowerbounds
SCIP_Real * upupperbounds
SCIP_Real * uplowerbounds
SCIP_Real * downupperbounds
WARMSTARTINFO * downwarmstartinfo
WARMSTARTINFO * upwarmstartinfo
SCIP_Bool applychildbounds
SCIP_Bool usedomainreduction
SCIP_Bool storeunviolatedsol
SCIP_Longint reevalagefsb
SCIP_Bool mergedomainreductions
SCIP_Bool onlyvioldomreds
SCIP_Bool prefersimplebounds
char deeperscoringfunction
char scoringscoringfunction
SCIP_Bool enforcemaxdomreds
SCIP_Bool updatebranchingresults
SCIP_Bool level2zeroscore
SCIP_Bool filterbymaxgain
SCIP_Shortbool * baselpviolated
LEVEL2RESULT ** level2results
SCIP_Longint * lastbranchid
SCIP_Longint oldnnodelpiterations
SCIP_Longint * lastbranchnlps
BRANCHINGDECISION * olddecision
SCIP_Real * lastbranchlpobjval
SCIP_Longint oldntotalnodes
BRANCHINGRESULTDATA ** lastbranchdownres
BRANCHINGRESULTDATA ** lastbranchupres
CANDIDATE ** bestsortedcands
SCIP_Bool maxnconsreached
#define SCIP_DECL_BRANCHEXECLP(x)
#define SCIP_DECL_BRANCHINIT(x)
#define SCIP_DECL_BRANCHCOPY(x)
#define SCIP_DECL_BRANCHEXIT(x)
#define SCIP_DECL_BRANCHFREE(x)
struct SCIP_Branchrule SCIP_BRANCHRULE
struct SCIP_BranchruleData SCIP_BRANCHRULEDATA
#define SCIP_DECL_BRANCHEXITSOL(x)
struct SCIP_Cons SCIP_CONS
@ SCIP_BRANCHDIR_DOWNWARDS
enum SCIP_LPSolStat SCIP_LPSOLSTAT
@ SCIP_LPSOLSTAT_NOTSOLVED
@ SCIP_LPSOLSTAT_TIMELIMIT
@ SCIP_LPSOLSTAT_UNBOUNDEDRAY
@ SCIP_LPSOLSTAT_INFEASIBLE
@ SCIP_LPSOLSTAT_ITERLIMIT
struct SCIP_LPiState SCIP_LPISTATE
struct SCIP_LPiNorms SCIP_LPINORMS
enum SCIP_VerbLevel SCIP_VERBLEVEL
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
struct SCIP_Node SCIP_NODE