79#define HEUR_NAME "dks"
80#define HEUR_DESC "decomposition kernel search"
81#define HEUR_DISPCHAR 'D'
82#define HEUR_PRIORITY -1102500
85#define HEUR_MAXDEPTH 0
86#define HEUR_TIMING SCIP_HEURTIMING_AFTERLPNODE
87#define HEUR_USESSUBSCIP TRUE
89#define DEFAULT_MAXBUCKS 20
90#define DEFAULT_KERNELSIZEFACTOR 2.0
91#define DEFAULT_ADDUSECONSS TRUE
92#define DEFAULT_LINKBUCKSIZE TRUE
93#define DEFAULT_TRANSLBKERNEL TRUE
94#define DEFAULT_LESSLOCKSKERNEL FALSE
95#define DEFAULT_USETRANSPROB TRUE
96#define DEFAULT_BUCKMAXGAP 0.01
97#define DEFAULT_MAXLINKSCORE 1.0
98#define DEFAULT_MAXBUCKFRAC 0.10
99#define DEFAULT_MAXNODES 5000LL
100#define DEFAULT_USETWOLEVEL TRUE
101#define DEFAULT_USEDECOMP TRUE
102#define DEFAULT_USEBESTSOL TRUE
103#define DEFAULT_REDCOSTSORT TRUE
104#define DEFAULT_PRIMALONLY FALSE
105#define DEFAULT_REDCOSTLOGSORT TRUE
106#define DEFAULT_OBJCUTOFF TRUE
107#define DEFAULT_RUNBINPROBSONLY FALSE
188 int nlinkscoreconss = 0;
189 int nlinkscorevars = 0;
195 for( v = 0; v <
nvars; v++ )
203 else if( *nblocklabels < nblocks && blocklabels !=
NULL )
208 for(
b = 0;
b < *nblocklabels;
b++ )
210 if( blocklabels[
b] == varlabels[v] )
219 blocklabels[(*nblocklabels)++] = varlabels[v];
224 for( v = 0; v < nconss; v++ )
249 int* bw_ncontkernelvars,
250 int* bw_ncontnonkernelvars,
252 int* bw_nnonkernelvars,
253 int* bw_nintkernelvars,
254 int* bw_nintnonkernelvars,
255 int* ncontkernelvars,
256 int* ncontnonkernelvars,
260 int* nintnonkernelvars,
292 block = block2index[
MAX(varlabels[
i] + blklbl_offset, 0)];
301 bw_nkernelvars[block]++;
306 bw_nnonkernelvars[block]++;
318 if( nintkernelvars !=
NULL )
320 if( bw_nintkernelvars !=
NULL )
321 bw_nintkernelvars[block]++;
326 bw_nkernelvars[block]++;
333 if( nintnonkernelvars !=
NULL )
334 (*nintnonkernelvars)++;
335 if( bw_nintnonkernelvars !=
NULL )
336 bw_nintnonkernelvars[block]++;
341 bw_nnonkernelvars[block]++;
352 (*ncontkernelvars)++;
353 bw_ncontkernelvars[block]++;
357 (*ncontnonkernelvars)++;
358 bw_ncontnonkernelvars[block]++;
385 int* bw_contkernelcount,
386 int* bw_contnonkernelcount,
388 int* bw_nonkernelcount,
389 int* bw_intkernelcount,
390 int* bw_intnonkernelcount,
391 int* bw_ncontkernelvars,
392 int* bw_ncontnonkernelvars,
394 int* bw_nnonkernelvars,
395 int* bw_nintkernelvars,
396 int* bw_nintnonkernelvars,
432 block_index = block2index[
MAX(varlabels[
i] + blklbl_offset, 0)];
440 binintvars[j++] =
vars[
i];
444 n = bw_kernelcount[block_index];
446 assert(n < bw_nkernelvars[block_index] + bw_nnonkernelvars[block_index]);
447 bw_kernelvars[block_index][n] =
vars[
i];
448 bw_kernelcount[block_index]++;
452 n = bw_nonkernelcount[block_index];
454 assert(n < bw_nkernelvars[block_index] + bw_nnonkernelvars[block_index]);
455 bw_nonkernelvars[block_index][n] =
vars[
i];
456 bw_nonkernelcount[block_index]++;
465 binintvars[j++] =
vars[
i];
472 if( bw_intkernelcount !=
NULL )
474 m = bw_intkernelcount[block_index];
477 assert(m < bw_nintkernelvars[block_index] + bw_nintnonkernelvars[block_index]);
478 if( bw_intkernelvars !=
NULL )
479 bw_intkernelvars[block_index][m] =
vars[
i];
480 bw_intkernelcount[block_index]++;
485 m = bw_kernelcount[block_index];
487 assert(m < bw_nkernelvars[block_index] + bw_nnonkernelvars[block_index]);
488 bw_kernelvars[block_index][m] =
vars[
i];
489 bw_kernelcount[block_index]++;
496 if( bw_intnonkernelcount !=
NULL )
498 m = bw_intnonkernelcount[block_index];
501 assert(m < bw_nintkernelvars[block_index] + bw_nintnonkernelvars[block_index]);
502 if( bw_intnonkernelvars !=
NULL )
503 bw_intnonkernelvars[block_index][m] =
vars[
i];
504 bw_intnonkernelcount[block_index]++;
509 m = bw_nonkernelcount[block_index];
511 assert(m < bw_nkernelvars[block_index] + bw_nnonkernelvars[block_index]);
512 bw_nonkernelvars[block_index][m] =
vars[
i];
513 bw_nonkernelcount[block_index]++;
524 l = bw_contkernelcount[block_index];
526 assert(l < bw_ncontkernelvars[block_index] + bw_ncontnonkernelvars[block_index]);
527 bw_contkernelvars[block_index][l] =
vars[
i];
528 bw_contkernelcount[block_index]++;
532 l = bw_contnonkernelcount[block_index];
534 assert(l < bw_ncontkernelvars[block_index] + bw_ncontnonkernelvars[block_index]);
535 bw_contnonkernelvars[block_index][l] =
vars[
i];
536 bw_contnonkernelcount[block_index]++;
555 int* bw_ncontnonkernelvars,
556 int* bw_nnonkernelvars,
557 int* bw_nintnonkernelvars,
571 for(
b = 0;
b < nblocks + 1;
b++ )
576 for(
i = 0;
i < bw_ncontnonkernelvars[
b];
i++ )
581 (*bw_cont_redcost)[
b][
i] = 0.0;
584 for(
i = 0;
i < bw_nnonkernelvars[
b];
i++ )
589 (*bw_redcost)[
b][
i] = 0.0;
592 SCIPsortRealPtr((*bw_cont_redcost)[
b], (
void**)bw_contnonkernelvars[
b], bw_ncontnonkernelvars[
b]);
599 for(
i = 0;
i < bw_nintnonkernelvars[
b];
i++ )
604 (*bw_int_redcost)[
b][
i] = 0.0;
607 SCIPsortRealPtr((*bw_int_redcost)[
b], (
void**)bw_intnonkernelvars[
b], bw_nintnonkernelvars[
b]);
627 if( *bw_cont_redcost !=
NULL )
629 for(
b = 0;
b < nblocks + 1;
b++ )
631 if( (*bw_cont_redcost)[
b] !=
NULL )
638 if( *bw_redcost !=
NULL )
640 for(
b = 0;
b < nblocks + 1;
b++ )
642 if( (*bw_redcost)[
b] !=
NULL )
649 if( *bw_int_redcost !=
NULL )
651 for(
b = 0;
b < nblocks + 1;
b++ )
653 if( (*bw_int_redcost)[
b] !=
NULL )
675 SCIP_Real redcostlb = pow(base, (
double)(currentindex - 1));
676 SCIP_Real redcostub = pow(base, (
double)currentindex);
679 SCIP_Real shifted_redcost = redcost - redcostmin + 1.0;
689 if( currentindex == 1 )
691 return lessequalmaxcost;
692 else if ( currentindex == nbuckets )
694 return greatermincost;
697 return greatermincost && lessequalmaxcost;
708 int* bw_ncontnonkernelvars,
709 int* bw_nnonkernelvars,
710 int* bw_nintnonkernelvars,
753 for(
b = 0;
b < nblocks + 1;
b++ )
755 if( bw_ncontnonkernelvars[
b] > 0 )
758 tmp_max = bw_cont_redcost[
b][bw_ncontnonkernelvars[
b] - 1];
759 tmp_min = bw_cont_redcost[
b][0];
764 contbases[
b] = (
SCIP_Real) pow(tmp_max - tmp_min + 1.0, 1.0/nbuckets);
770 if( bw_nnonkernelvars[
b] > 0 )
773 tmp_max = bw_redcost[
b][bw_nnonkernelvars[
b] - 1];
774 tmp_min = bw_redcost[
b][0];
779 bases[
b] = (
SCIP_Real) pow(tmp_max - tmp_min + 1.0, 1.0/nbuckets);
787 if( bw_nintnonkernelvars[
b] > 0 )
790 tmp_max = bw_int_redcost[
b][bw_nintnonkernelvars[
b] - 1];
791 tmp_min = bw_int_redcost[
b][0];
795 intbases[
b] = (
SCIP_Real) pow(tmp_max - tmp_min + 1.0, 1.0/nbuckets);
805 for( k = 1; k < nbuckets + 1; k++ )
807 bucket = &(*bucketlist)->buckets[k];
814 for(
b = 0;
b < nblocks + 1;
b++ )
819 for( l = 0; l < bw_ncontnonkernelvars[
b]; l++ )
825 for( l = 0; l < bw_nnonkernelvars[
b]; l++ )
833 for( l = 0; l < bw_nintnonkernelvars[
b]; l++ )
848 contbucklength += tocontvars - fromcontvars;
849 bucklength += tovars - fromvars;
856 intbucklength += tointvars - fromintvars;
876 for(
b = 0;
b < nblocks + 1;
b++ )
881 for( l = 0; l < bw_ncontnonkernelvars[
b]; l++ )
887 for( l = 0; l < bw_nnonkernelvars[
b]; l++ )
895 for( l = 0; l < bw_nintnonkernelvars[
b]; l++ )
911 for( l = 0; l < tocontvars - fromcontvars; l++ )
912 bucket->
contbucketvars[j++] = bw_contnonkernelvars[
b][fromcontvars + l];
913 for( l = 0; l < tovars - fromvars; l++ )
914 bucket->
bucketvars[n++] = bw_nonkernelvars[
b][fromvars + l];
922 for( l = 0; l < tointvars - fromintvars; l++ )
923 bucket->
intbucketvars[m++] = bw_intnonkernelvars[
b][fromintvars + l];
928 assert(j == contbucklength);
931 assert(m == intbucklength);
1038 (*bucketlist)->scip =
scip;
1039 (*bucketlist)->nbuckets = 0;
1056 scip = (*bucketlist)->scip;
1059 if( (*bucketlist)->buckets !=
NULL )
1163 if( newcons !=
NULL )
1172 if( newcons !=
NULL )
1183 SCIPdebugMsg(
scip,
"In heur_dks: failed to copy some constraints to subscip, continue anyway\n");
1221 for(
i = 0;
i < nsubvars;
i++ )
1284 for(
b = 0;
b < nbuckets + 1;
b++ )
1287 assert((*bucketlist)->nbuckets ==
b + 1);
1289 bucket = &(*bucketlist)->buckets[
b];
1297 assert(nbuckets + 1 == (*bucketlist)->nbuckets);
1307 int ncontkernelvars,
1323 for( j = 0; j < ncontkernelvars; j++ )
1325 if( contkernelvars[j] !=
NULL &&
var == contkernelvars[j] )
1344 for( j = 0; j < nkernelvars; j++ )
1346 if( kernelvars[j] !=
NULL &&
var == kernelvars[j] )
1354 for( j = 0; j < nintkernelvars; j++ )
1356 if( intkernelvars[j] !=
NULL &&
var == intkernelvars[j] )
1392 int* ncontkernelvars,
1393 int maxcontkernelsize,
1398 int* nintkernelvars,
1399 int maxintkernelsize,
1410 int nnewcontkernelvars;
1412 int nnewintkernelvars;
1416 contkvars = *contkernelvars;
1417 kvars = *kernelvars;
1418 intkvars = *intkernelvars;
1425 nnewintkernelvars = 0;
1426 nnewcontkernelvars = 0;
1427 for( n = 0; n < *ncontkernelvars; n++ )
1429 if( contkvars[n] ==
NULL )
1450 (*contkernelvars)[nnewcontkernelvars++] = contkvars[n];
1453 contkvars[n] =
NULL;
1458 for( n = 0; n < *nkernelvars; n++ )
1460 if( kvars[n] ==
NULL )
1480 (*kernelvars)[nnewkernelvars++] = kvars[n];
1483 (*kernelvars)[nnewkernelvars++] = kvars[n];
1492 nnewintkernelvars = 0;
1494 for( n = 0; n < *nintkernelvars; n++ )
1496 if( intkvars[n] ==
NULL )
1517 (*intkernelvars)[nnewintkernelvars++] = intkvars[n];
1552 (*contkernelvars)[nnewcontkernelvars++] = bucket->
contbucketvars[n];
1557 *ncontkernelvars = nnewcontkernelvars;
1585 (*kernelvars)[nnewkernelvars++] = bucket->
bucketvars[n];
1593 (*kernelvars)[nnewkernelvars++] = bucket->
bucketvars[n];
1598 *nkernelvars = nnewkernelvars;
1628 (*intkernelvars)[nnewintkernelvars++] = bucket->
intbucketvars[n];
1632 *nintkernelvars = nnewintkernelvars;
1723 if( subvars !=
NULL )
1726 if( coeffs !=
NULL )
1815 int* varlabels =
NULL;
1816 int* conslabels =
NULL;
1817 int* block2index =
NULL;
1818 int* blocklabels =
NULL;
1819 int* bw_ncontkernelvars =
NULL;
1820 int* bw_ncontnonkernelvars =
NULL;
1821 int* bw_nkernelvars =
NULL;
1822 int* bw_nnonkernelvars =
NULL;
1823 int* bw_nintkernelvars =
NULL;
1824 int* bw_nintnonkernelvars =
NULL;
1825 int* bw_contkernelcount =
NULL;
1826 int* bw_contnonkernelcount =
NULL;
1827 int* bw_kernelcount =
NULL;
1828 int* bw_nonkernelcount =
NULL;
1829 int* bw_intkernelcount =
NULL;
1830 int* bw_intnonkernelcount =
NULL;
1838 int ncontkernelvars;
1839 int ncontnonkernelvars;
1843 int nintnonkernelvars;
1878 ncontkernelvars = 0;
1879 ncontnonkernelvars = 0;
1883 nintnonkernelvars = 0;
1888#ifdef DKS_WRITE_PROBLEMS
1932 if( tempvar !=
NULL )
1958 if( ndecomps > 0 &&
heurdata->usedecomp )
1961 decomp = alldecomps[0];
1969 SCIPdebugMsg(
scip,
"No decompositions available or wanted, going ahead without decomp\n");
1975 if(
nvars == 0 || nconss == 0 )
1986 SCIPdebugMsg(
scip,
"do not run dks if continuous variables or only integer variables are present\n");
2002 if( ndecomps > 0 &&
heurdata->usedecomp )
2013 nblocks,
nvars, nconss) );
2014 if( linkscore >
heurdata->maxlinkscore )
2020 if( nblocklabels > 0 )
2025 if( blocklabels[0] == 0 )
2038 for(
b = 0;
b < nblocklabels;
b++ )
2039 block2index[blocklabels[
b] + blklbl_offset] =
b + 1;
2046 for( v = 0; v <
nvars; v++ )
2072 if( nbinvars == 0 || nintvars == 0 || !
heurdata->usetwolevel )
2076 bw_ncontkernelvars, bw_ncontnonkernelvars, bw_nkernelvars, bw_nnonkernelvars,
NULL,
NULL,
2077 &ncontkernelvars, &ncontnonkernelvars, &nkernelvars, &nnonkernelvars,
NULL,
NULL,
2078 block2index, varlabels, blklbl_offset,
nvars) );
2083 if( nkernelvars == 0 )
2085 SCIPdebugMsg(
scip,
"No suitable variables for dks found. Leaving heuristic. \n");
2088 else if( nkernelvars > nnonkernelvars )
2090 SCIPdebugMsg(
scip,
"There are more kernel variables than not in the kernel\n");
2102 bw_ncontkernelvars, bw_ncontnonkernelvars, bw_nkernelvars, bw_nnonkernelvars, bw_nintkernelvars,
2103 bw_nintnonkernelvars, &ncontkernelvars, &ncontnonkernelvars, &nkernelvars, &nnonkernelvars,
2104 &nintkernelvars, &nintnonkernelvars, block2index, varlabels, blklbl_offset,
nvars) );
2106 SCIPdebugMsg(
scip,
"%d initial bin kernel vars\n%d initial int kernel vars\n", nkernelvars, nintkernelvars);
2108 if( nkernelvars == 0 )
2110 if( nintkernelvars == 0 )
2112 SCIPdebugMsg(
scip,
"No suitable variables for the construction of a kernel. Leaving heuristic. \n");
2118 nkernelvars = nintkernelvars;
2119 nnonkernelvars += nintnonkernelvars;
2121 nintnonkernelvars = 0;
2124 for(
b = 0;
b < nblocks + 1;
b++ )
2126 bw_nkernelvars[
b] = bw_nintkernelvars[
b];
2127 bw_nnonkernelvars[
b] += bw_nintnonkernelvars[
b];
2128 bw_nintnonkernelvars[
b] = 0;
2134 else if( nintkernelvars == 0 )
2137 nnonkernelvars += nintnonkernelvars;
2138 nintnonkernelvars = 0;
2141 for(
b = 0;
b < nblocks + 1;
b++ )
2143 bw_nnonkernelvars[
b] += bw_nintnonkernelvars[
b];
2144 bw_nintnonkernelvars[
b] = 0;
2149 else if( nkernelvars > nnonkernelvars || nintkernelvars > nintnonkernelvars )
2151 SCIPdebugMsg(
scip,
"There are more kernel variables than not in the kernel\n");
2167 for(
b = 0;
b < nblocks + 1;
b++ )
2169 int contblocksize = bw_ncontkernelvars[
b] + bw_ncontnonkernelvars[
b];
2170 int blocksize = bw_nkernelvars[
b] + bw_nnonkernelvars[
b];
2184 intblocksize = bw_nintkernelvars[
b] + bw_nintnonkernelvars[
b];
2191 if( (
int)
SCIPfloor(
scip,
heurdata->kernelsizefactor * ncontkernelvars) < (ncontkernelvars + ncontnonkernelvars) )
2194 maxcontkernelsize = ncontkernelvars + ncontnonkernelvars;
2196 if( (
int)
SCIPfloor(
scip,
heurdata->kernelsizefactor * ncontnonkernelvars) < (ncontkernelvars + ncontnonkernelvars) )
2199 maxcontnonkernelsize = ncontkernelvars + ncontnonkernelvars;
2201 if( (
int)
SCIPfloor(
scip,
heurdata->kernelsizefactor * nkernelvars) < (nkernelvars + nnonkernelvars) )
2204 maxkernelsize = nkernelvars + nnonkernelvars;
2206 if( (
int)
SCIPfloor(
scip,
heurdata->kernelsizefactor * nnonkernelvars) < (nkernelvars + nnonkernelvars) )
2209 maxnonkernelsize = nkernelvars + nnonkernelvars;
2226 maxintkernelsize = 0;
2232 if( (
int)
SCIPfloor(
scip,
heurdata->kernelsizefactor * nintkernelvars) < (nintkernelvars + nintnonkernelvars) )
2235 maxintkernelsize = nintkernelvars + nintnonkernelvars;
2237 if( (
int)
SCIPfloor(
scip,
heurdata->kernelsizefactor * nintnonkernelvars) < (nintkernelvars + nintnonkernelvars) )
2240 maxintnonkernelsize = nintkernelvars + nintnonkernelvars;
2252 bw_contkernelvars, bw_contnonkernelvars, bw_kernelvars, bw_nonkernelvars,
2253 bw_intkernelvars, bw_intnonkernelvars, bestcurrsol, lbvarmap, twolevel, usebestsol,
2255 bw_contnonkernelcount, bw_kernelcount, bw_nonkernelcount, bw_intkernelcount,
2256 bw_intnonkernelcount, bw_ncontkernelvars, bw_ncontnonkernelvars, bw_nkernelvars, bw_nnonkernelvars,
2257 bw_nintkernelvars, bw_nintnonkernelvars, block2index, varlabels, blklbl_offset,
nvars,
nbinintvars) );
2263 bw_contkernelvars, bw_contnonkernelvars, bw_kernelvars, bw_nonkernelvars,
NULL,
NULL,
2264 bestcurrsol, lbvarmap, twolevel, usebestsol,
heurdata->usetransprob,
2265 heurdata->translbkernel, bw_contkernelcount, bw_contnonkernelcount, bw_kernelcount,
2266 bw_nonkernelcount,
NULL,
NULL, bw_ncontkernelvars, bw_ncontnonkernelvars, bw_nkernelvars, bw_nnonkernelvars,
2274 &bw_cont_redcost, &bw_redcost, &bw_int_redcost, bw_ncontnonkernelvars, bw_nnonkernelvars,
2275 bw_nintnonkernelvars, twolevel, nblocks) );
2288 for(
b = 0;
b < nblocks + 1;
b++ )
2291 if( bw_nintnonkernelvars[
b] > 0 && bw_nintkernelvars[
b] > 0 )
2296 if( bw_nnonkernelvars[
b] > 0 && bw_nkernelvars[
b] > 0 )
2303 nbuckets += (int)intratio;
2308 nbuckets += (int)binratio;
2317 for(
b = 0;
b < nblocks + 1;
b++ )
2319 if( bw_nnonkernelvars[
b] > 0 && bw_nkernelvars[
b] > 0 )
2327 if( nusedratios > 0 )
2347 bw_contnonkernelvars, bw_nonkernelvars, bw_intnonkernelvars,
2348 bw_ncontnonkernelvars, bw_nnonkernelvars, bw_nintnonkernelvars,
2349 bw_cont_redcost, bw_redcost, bw_int_redcost,
2350 twolevel,
heurdata->redcostlogsort, iters - 1, nblocks) );
2357 for(
b = 0;
b < nblocks + 1;
b++ )
2359 for( l = 0; l < bw_ncontkernelvars[
b]; l++ )
2360 contkernelvars[j++] = bw_contkernelvars[
b][l];
2362 for( l = 0; l < bw_nkernelvars[
b]; l++ )
2363 kernelvars[n++] = bw_kernelvars[
b][l];
2367 for( l = 0; l < bw_nintkernelvars[
b]; l++ )
2368 intkernelvars[m++] = bw_intkernelvars[
b][l];
2371 assert(j == ncontkernelvars);
2372 assert(n == nkernelvars);
2374 assert(m == nintkernelvars);
2380 for( k = 0; k < iters; k++ )
2392 bucket = &bucketlist->
buckets[k];
2416 intkernelvars, nintkernelvars,
var, &found) );
2438 else if( ub >= 0.0 )
2464#ifdef DKS_WRITE_PROBLEMS
2476 subtimelimit = totaltimelimit - timeused;
2477 if( subtimelimit > 1.0 )
2490 if( 1LL > nodes_evenly_dist )
2493 nnodes = nodes_evenly_dist;
2514 if( bucket->
number == 0 )
2524 mipgap += (
heurdata->buckmaxgap / iters) * gapfactor;
2532 mipgap -= (
heurdata->buckmaxgap / iters) * gapfactor;
2554 nbestbucket = bucket->
number;
2561 &kernelvars, &nkernelvars, (
int)maxkernelsize, &intkernelvars, &nintkernelvars, (
int)maxintkernelsize,
2567 SCIPdebugMsg(
scip,
"Bucket reached node limit. No optimal solution available.\n");
2578#ifdef DKS_KERNEL_INFO
2579 fclose(variable_info);
2584 if( nbestbucket > -1 )
2591 bestbucket = &bucketlist->
buckets[nbestbucket];
2595 if( bestsol ==
NULL )
2597 SCIPdebugMsg(
scip,
"Function SCIPgetBestSol() has returned a NULL pointer\n");
2636 if( bucketconss !=
NULL )
2639 if( bw_intnonkernelcount !=
NULL )
2642 if( bw_intkernelcount !=
NULL )
2645 if( intnonkernelvars !=
NULL )
2648 if( intkernelvars !=
NULL )
2651 if( bw_nonkernelcount !=
NULL )
2654 if( bw_kernelcount !=
NULL )
2657 if( bw_contnonkernelcount !=
NULL )
2660 if( bw_contkernelcount !=
NULL )
2663 if( binintvars !=
NULL )
2666 if( nonkernelvars !=
NULL )
2669 if( kernelvars !=
NULL )
2672 if( contnonkernelvars !=
NULL )
2675 if( contkernelvars !=
NULL )
2678 if( bw_intkernelvars !=
NULL )
2680 for(
b = nblocks;
b >= 0;
b-- )
2682 if( bw_intnonkernelvars[
b] !=
NULL )
2684 if( bw_intkernelvars[
b] !=
NULL )
2689 if( bw_kernelvars !=
NULL )
2691 for(
b = nblocks;
b >= 0;
b-- )
2693 if( bw_nonkernelvars[
b] !=
NULL )
2695 if( bw_kernelvars[
b] !=
NULL )
2700 if( bw_contkernelvars !=
NULL )
2702 for(
b = nblocks;
b >= 0;
b-- )
2704 if( bw_contnonkernelvars[
b] !=
NULL )
2706 if( bw_contkernelvars[
b] !=
NULL )
2711 if( bw_intnonkernelvars !=
NULL )
2714 if( bw_intkernelvars !=
NULL )
2717 if( bw_nonkernelvars !=
NULL )
2720 if( bw_kernelvars !=
NULL )
2723 if( bw_contnonkernelvars !=
NULL )
2726 if( bw_contkernelvars !=
NULL )
2729 if( bw_nintnonkernelvars !=
NULL )
2732 if( bw_nintkernelvars !=
NULL )
2735 if( bw_nnonkernelvars !=
NULL )
2738 if( bw_nkernelvars !=
NULL )
2741 if( bw_ncontnonkernelvars !=
NULL )
2744 if( bw_ncontkernelvars !=
NULL )
2747 if( block2index !=
NULL )
2749 if( nblocklabels > 0 )
2758 if( blocklabels !=
NULL )
2761 if( conslabels !=
NULL )
2764 if( varlabels !=
NULL )
2769 if( lbvarmap !=
NULL )
2772 if( bucketlist !=
NULL )
2774 for( k = bucketlist->
nbuckets - 1; k >= 1; k-- )
2782 if( bucketlist !=
NULL )
2824 "maximal number of buckets to be investigated",
2828 "factor with which the initial kernel size can grow max",
2832 "should a constraint be added ensuring that bucket variables are used?",
2836 "should the linking variables in the kernel influence the size of the buckets?",
2840 "should a variable with different lower bound in transformed and original problem be in the kernel?",
2844 "should a variable with max one uplock and one downlock be in the kernel?",
2848 "should dks use the transformed problem?",
2852 "defines the maximum mipgap a bucket can be solved to",
2856 "defines a bound to the linkscore of the decomp",
2860 "defines a maximal share of bin/int variables for a bucket to be respected",
2864 "maximum number of nodes to regard in all subproblems",
2868 "should a two level bucket structure be used if possible?",
2872 "should a decomposition be used if given?",
2876 "should the best solution instead of the LP solution be used?",
2880 "should the bucket variables be sorted by reduced costs in the LP solution?",
2884 "should the heuristic terminate after the first primal solution is found?",
2888 "should the bucket variables be sorted logarithmically by reduced costs in the LP solution?",
2892 "should the next solution at least satisfy the old objective?",
2896 "should the heuristic be used only for binary problems or problems with integer and binary variables?",
Constraint handler for linear constraints in their most general form, .
#define SCIP_CALL_ABORT(x)
SCIP_RETCODE SCIPcreateConsBasicLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs)
SCIP_RETCODE SCIPcopyPlugins(SCIP *sourcescip, SCIP *targetscip, SCIP_Bool copyreaders, SCIP_Bool copypricers, SCIP_Bool copyconshdlrs, SCIP_Bool copyconflicthdlrs, SCIP_Bool copypresolvers, SCIP_Bool copyrelaxators, SCIP_Bool copyseparators, SCIP_Bool copycutselectors, SCIP_Bool copypropagators, SCIP_Bool copyheuristics, SCIP_Bool copyeventhdlrs, SCIP_Bool copynodeselectors, SCIP_Bool copybranchrules, SCIP_Bool copyiisfinders, SCIP_Bool copydisplays, SCIP_Bool copydialogs, SCIP_Bool copytables, SCIP_Bool copyexprhdlrs, SCIP_Bool copynlpis, SCIP_Bool passmessagehdlr, SCIP_Bool *valid)
SCIP_RETCODE SCIPcopyVars(SCIP *sourcescip, SCIP *targetscip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_VAR **fixedvars, SCIP_Real *fixedvals, int nfixedvars, SCIP_Bool global)
SCIP_RETCODE SCIPgetConsCopy(SCIP *sourcescip, SCIP *targetscip, SCIP_CONS *sourcecons, SCIP_CONS **targetcons, SCIP_CONSHDLR *sourceconshdlr, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, const char *name, 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 global, SCIP_Bool *valid)
SCIP_RETCODE SCIPcopyProb(SCIP *sourcescip, SCIP *targetscip, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool global, const char *name)
SCIP_RETCODE SCIPtranslateSubSol(SCIP *scip, SCIP *subscip, SCIP_SOL *subsol, SCIP_HEUR *heur, SCIP_VAR **subvars, SCIP_SOL **newsol)
SCIP_RETCODE SCIPcopyParamSettings(SCIP *sourcescip, SCIP *targetscip)
SCIP_RETCODE SCIPcopyLimits(SCIP *sourcescip, SCIP *targetscip)
void SCIPgetDecomps(SCIP *scip, SCIP_DECOMP ***decomps, int *ndecomps, SCIP_Bool original)
int SCIPdecompGetNBlocks(SCIP_DECOMP *decomp)
void SCIPdecompGetConsLabels(SCIP_DECOMP *decomp, SCIP_CONS **conss, int *labels, int nconss)
void SCIPdecompGetVarsLabels(SCIP_DECOMP *decomp, SCIP_VAR **vars, int *labels, int nvars)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreate(SCIP **scip)
SCIP_STATUS SCIPgetStatus(SCIP *scip)
int SCIPgetNIntVars(SCIP *scip)
const char * SCIPgetProbName(SCIP *scip)
SCIP_RETCODE SCIPwriteOrigProblem(SCIP *scip, const char *filename, const char *extension, SCIP_Bool genericnames)
SCIP_RETCODE SCIPsetObjlimit(SCIP *scip, SCIP_Real objlimit)
int SCIPgetNBinImplVars(SCIP *scip)
int SCIPgetNOrigBinVars(SCIP *scip)
SCIP_RETCODE SCIPgetVarsData(SCIP *scip, SCIP_VAR ***vars, int *nvars, int *nbinvars, int *nintvars, int *nimplvars, int *ncontvars)
int SCIPgetNOrigConss(SCIP *scip)
SCIP_VAR ** SCIPgetOrigVars(SCIP *scip)
int SCIPgetNOrigIntVars(SCIP *scip)
SCIP_CONS ** SCIPgetConss(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNConss(SCIP *scip)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
int SCIPgetNOrigVars(SCIP *scip)
int SCIPgetNOrigBinImplVars(SCIP *scip)
int SCIPgetNOrigIntImplVars(SCIP *scip)
int SCIPgetNIntImplVars(SCIP *scip)
SCIP_CONS ** SCIPgetOrigConss(SCIP *scip)
SCIP_RETCODE SCIPwriteTransProblem(SCIP *scip, const char *filename, const char *extension, SCIP_Bool genericnames)
int SCIPgetNBinVars(SCIP *scip)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
void * SCIPhashmapEntryGetImage(SCIP_HASHMAPENTRY *entry)
SCIP_Real SCIPhashmapGetImageReal(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapSetImageReal(SCIP_HASHMAP *hashmap, void *origin, SCIP_Real image)
int SCIPhashmapGetNEntries(SCIP_HASHMAP *hashmap)
SCIP_HASHMAPENTRY * SCIPhashmapGetEntry(SCIP_HASHMAP *hashmap, int entryidx)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
void * SCIPhashmapEntryGetOrigin(SCIP_HASHMAPENTRY *entry)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
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_Bool SCIPisParamFixed(SCIP *scip, const char *name)
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 SCIPsetLongintParam(SCIP *scip, const char *name, SCIP_Longint value)
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 SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_RETCODE SCIPsetSubscipsOff(SCIP *scip, SCIP_Bool quiet)
SCIP_RETCODE SCIPgetRealParam(SCIP *scip, const char *name, SCIP_Real *value)
SCIP_RETCODE SCIPunfixParam(SCIP *scip, const char *name)
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 SCIPsetBoolParam(SCIP *scip, const char *name, SCIP_Bool value)
SCIP_RETCODE SCIPsetRealParam(SCIP *scip, const char *name, SCIP_Real value)
SCIP_RETCODE SCIPincludeHeurDKS(SCIP *scip)
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_Bool SCIPconsIsDynamic(SCIP_CONS *cons)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsInitial(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsEnforced(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsPropagated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsModifiable(SCIP_CONS *cons)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_Bool SCIPconsIsSeparated(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsRemovable(SCIP_CONS *cons)
SCIP_RETCODE SCIPsetHeurFree(SCIP *scip, SCIP_HEUR *heur,)
SCIP_HEURDATA * SCIPheurGetData(SCIP_HEUR *heur)
SCIP_RETCODE SCIPincludeHeurBasic(SCIP *scip, SCIP_HEUR **heur, const char *name, const char *desc, char dispchar, int priority, int freq, int freqofs, int maxdepth, SCIP_HEURTIMING timingmask, SCIP_Bool usessubscip, SCIP_DECL_HEUREXEC((*heurexec)), SCIP_HEURDATA *heurdata)
SCIP_RETCODE SCIPsetHeurCopy(SCIP *scip, SCIP_HEUR *heur,)
const char * SCIPheurGetName(SCIP_HEUR *heur)
void SCIPheurSetData(SCIP_HEUR *heur, SCIP_HEURDATA *heurdata)
SCIP_LPSOLSTAT SCIPgetLPSolstat(SCIP *scip)
SCIP_Longint SCIPgetMemExternEstim(SCIP *scip)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
SCIP_Longint SCIPgetMemUsed(SCIP *scip)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
#define SCIPallocClearBlockMemoryArray(scip, ptr, num)
#define SCIPallocClearBufferArray(scip, ptr, num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBufferArrayNull(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
SCIP_RETCODE SCIPprintSol(SCIP *scip, SCIP_SOL *sol, FILE *file, SCIP_Bool printzeros)
int SCIPgetNSols(SCIP *scip)
SCIP_RETCODE SCIPtrySolFree(SCIP *scip, SCIP_SOL **sol, SCIP_Bool printreason, SCIP_Bool completely, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *stored)
SCIP_Real SCIPgetSolOrigObj(SCIP *scip, SCIP_SOL *sol)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_RETCODE SCIPfreeTransform(SCIP *scip)
SCIP_RETCODE SCIPsolve(SCIP *scip)
SCIP_Longint SCIPgetNNodes(SCIP *scip)
SCIP_Real SCIPgetCutoffbound(SCIP *scip)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
SCIP_Real SCIPgetTotalTime(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPfloor(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(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 SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_RETCODE SCIPvarGetOrigvarSum(SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbOriginal(SCIP_VAR *var)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPvarGetProbindex(SCIP_VAR *var)
SCIP_Real SCIPvarGetLPSol(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Real SCIPgetVarRedcost(SCIP *scip, SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPfixVar(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval, SCIP_Bool *infeasible, SCIP_Bool *fixed)
void SCIPsortRealPtr(SCIP_Real *realarray, void **ptrarray, int len)
void SCIPsortInt(int *intarray, int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
static SCIP_RETCODE fillBuckets(SCIP *scip, BUCKETLIST **bucketlist, SCIP_VAR ***bw_contnonkernelvars, SCIP_VAR ***bw_nonkernelvars, SCIP_VAR ***bw_intnonkernelvars, int *bw_ncontnonkernelvars, int *bw_nnonkernelvars, int *bw_nintnonkernelvars, SCIP_Real **bw_cont_redcost, SCIP_Real **bw_redcost, SCIP_Real **bw_int_redcost, SCIP_Bool twolevel, SCIP_Bool redcostlogsort, int nbuckets, int nblocks)
static SCIP_RETCODE searchKernelAndBucket(BUCKET *bucket, SCIP_VAR **contkernelvars, int ncontkernelvars, SCIP_VAR **kernelvars, int nkernelvars, SCIP_VAR **intkernelvars, int nintkernelvars, SCIP_VAR *var, SCIP_Bool *found)
static SCIP_RETCODE fillKernels(SCIP *scip, SCIP_VAR **vars, SCIP_VAR **binintvars, SCIP_VAR ***bw_contkernelvars, SCIP_VAR ***bw_contnonkernelvars, SCIP_VAR ***bw_kernelvars, SCIP_VAR ***bw_nonkernelvars, SCIP_VAR ***bw_intkernelvars, SCIP_VAR ***bw_intnonkernelvars, SCIP_SOL *bestcurrsol, SCIP_HASHMAP *lbvarmap, SCIP_Bool twolevel, SCIP_Bool usebestsol, SCIP_Bool usetransprob, SCIP_Bool usetranslb, int *bw_contkernelcount, int *bw_contnonkernelcount, int *bw_kernelcount, int *bw_nonkernelcount, int *bw_intkernelcount, int *bw_intnonkernelcount, int *bw_ncontkernelvars, int *bw_ncontnonkernelvars, int *bw_nkernelvars, int *bw_nnonkernelvars, int *bw_nintkernelvars, int *bw_nintnonkernelvars, int *block2index, int *varlabels, int blklbl_offset, int nvars, int nbinintvars)
#define DEFAULT_OBJCUTOFF
#define DEFAULT_LINKBUCKSIZE
#define DEFAULT_BUCKMAXGAP
#define DEFAULT_ADDUSECONSS
static SCIP_RETCODE reducedCostSort(SCIP *scip, SCIP_VAR ***bw_contnonkernelvars, SCIP_VAR ***bw_nonkernelvars, SCIP_VAR ***bw_intnonkernelvars, SCIP_Real ***bw_cont_redcost, SCIP_Real ***bw_redcost, SCIP_Real ***bw_int_redcost, int *bw_ncontnonkernelvars, int *bw_nnonkernelvars, int *bw_nintnonkernelvars, SCIP_Bool twolevel, int nblocks)
#define DEFAULT_KERNELSIZEFACTOR
#define DEFAULT_TRANSLBKERNEL
struct Bucketlist BUCKETLIST
static SCIP_RETCODE createBucketlistAndBuckets(SCIP *scip, SCIP_Bool usetransprob, int nbuckets, BUCKETLIST **bucketlist, SCIP_Bool *success)
static SCIP_RETCODE freeBucketArrays(SCIP *scip, BUCKET *bucket, SCIP_Bool twolevel)
#define DEFAULT_REDCOSTLOGSORT
static SCIP_RETCODE initBucket(BUCKETLIST *bucketlist)
#define DEFAULT_MAXLINKSCORE
#define DEFAULT_USETWOLEVEL
static SCIP_RETCODE getLinkingScoreAndBlocklabels(int *blocklabels, int *varlabels, int *conslabels, SCIP_Real *linkscore, int *nblocklabels, int nblocks, int nvars, int nconss)
static SCIP_RETCODE adjustKernelVars(SCIP *scip, BUCKET *bucket, SCIP_VAR ***contkernelvars, int *ncontkernelvars, int maxcontkernelsize, SCIP_VAR ***kernelvars, int *nkernelvars, int maxkernelsize, SCIP_VAR ***intkernelvars, int *nintkernelvars, int maxintkernelsize, SCIP_Bool twolevel)
#define DEFAULT_MAXBUCKFRAC
static SCIP_RETCODE freeBucket(SCIP *scip, BUCKET *bucket)
static SCIP_RETCODE freeRedcostArrays(SCIP *scip, SCIP_Real ***bw_cont_redcost, SCIP_Real ***bw_redcost, SCIP_Real ***bw_int_redcost, int nblocks)
static SCIP_RETCODE bucketCreateSubscip(BUCKET *bucket, SCIP_Bool usetransprob, SCIP_Bool *success)
#define DEFAULT_USEBESTSOL
#define DEFAULT_REDCOSTSORT
static SCIP_RETCODE countKernelVariables(SCIP *scip, SCIP_VAR **vars, SCIP_SOL *bestcurrsol, SCIP_HASHMAP *lbvarmap, SCIP_Bool twolevel, SCIP_Bool usebestsol, SCIP_Bool usetransprob, SCIP_Bool usetranslb, int *bw_ncontkernelvars, int *bw_ncontnonkernelvars, int *bw_nkernelvars, int *bw_nnonkernelvars, int *bw_nintkernelvars, int *bw_nintnonkernelvars, int *ncontkernelvars, int *ncontnonkernelvars, int *nkernelvars, int *nnonkernelvars, int *nintkernelvars, int *nintnonkernelvars, int *block2index, int *varlabels, int blklbl_offset, int nvars)
#define DEFAULT_PRIMALONLY
static SCIP_RETCODE freeBucketlist(BUCKETLIST **bucketlist, int nbuckets)
static SCIP_RETCODE addUseConstraint(BUCKET *bucket)
static SCIP_RETCODE initBucketlist(SCIP *scip, BUCKETLIST **bucketlist, int nbuckets)
#define DEFAULT_USEDECOMP
#define DEFAULT_LESSLOCKSKERNEL
#define DEFAULT_RUNBINPROBSONLY
static SCIP_Bool isInCurrentLogBucket(SCIP *scip, SCIP_Real base, SCIP_Real redcost, SCIP_Real redcostmin, int currentindex, int nbuckets)
#define DEFAULT_USETRANSPROB
assert(minobj< SCIPgetCutoffbound(scip))
methods commonly used by primal heuristics
memory allocation routines
public methods for managing constraints
public methods for managing events
wrapper functions to map file i/o to standard or zlib file i/o
public methods for primal heuristics
public methods for LP management
public methods for message output
public data structures and miscellaneous methods
methods for selecting (weighted) k-medians
public methods for primal CIP solutions
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 problem copies
public methods for decompositions
public methods for event handler plugins and event handlers
public methods for primal heuristic plugins and divesets
public methods for the LP relaxation, rows and columns
public methods for memory management
public methods for message handling
public methods for node selector plugins
public methods for numerical tolerances
public methods for SCIP parameter handling
public methods for global and local (sub)problems
public methods for random numbers
public methods for solutions
public methods for querying solving statistics
public methods for statistics table plugins
public methods for timing
public methods for the branch-and-bound tree
public methods for SCIP variables
internal methods for storing primal CIP solutions
SCIP_VAR ** intbucketvars
SCIP_VAR ** contbucketvars
struct SCIP_Cons SCIP_CONS
struct SCIP_Conshdlr SCIP_CONSHDLR
#define SCIP_DECOMP_LINKVAR
struct SCIP_Decomp SCIP_DECOMP
#define SCIP_DECOMP_LINKCONS
#define SCIP_DECL_HEURCOPY(x)
struct SCIP_HeurData SCIP_HEURDATA
struct SCIP_Heur SCIP_HEUR
#define SCIP_DECL_HEURFREE(x)
#define SCIP_DECL_HEUREXEC(x)
struct SCIP_HashMap SCIP_HASHMAP
struct SCIP_HashMapEntry SCIP_HASHMAPENTRY
enum SCIP_Retcode SCIP_RETCODE
enum SCIP_Status SCIP_STATUS
@ SCIP_VARTYPE_CONTINUOUS