[] = { 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192 };
183assert(ecaggr !=
NULL);
184assert(nquadvars > 0);
185assert(nquadterms >= nquadvars);
189(*ecaggr)->nvars = 0;
190(*ecaggr)->nterms = 0;
191(*ecaggr)->varsize = nquadvars;
192(*ecaggr)->termsize = nquadterms;
211assert(ecaggr !=
NULL);
251assert(ecaggr->
nterms+ 1 <= ((ecaggr->
nvars+ 1) * ecaggr->
nvars) / 2);
258 for( i = 0; i < ecaggr->
nvars&& (idx1 == -1 || idx2 == -1); ++i )
260 if( ecaggr->
vars[i] ==
x)
262 if( ecaggr->
vars[i] ==
y)
266assert(idx1 != -1 && idx2 != -1);
287assert(ecaggr !=
NULL);
291 for( i = 0; i < ecaggr->
nvars; ++i )
296 for( i = 0; i < ecaggr->
nterms; ++i )
320assert(nlrowaggr !=
NULL);
321assert(linvars !=
NULL|| nlinvars == 0);
322assert(lincoefs !=
NULL|| nlinvars == 0);
323assert(nlinvars >= 0);
343 for( i = 0; i < nlrowaggr->
nlinvars; ++i )
360assert(nlrowaggr !=
NULL);
361assert(linvar !=
NULL);
392assert(nlrowaggr !=
NULL);
393assert(quadvar !=
NULL);
412assert(nlrowaggr !=
NULL);
450assert(nlrow !=
NULL);
451assert(nlrowaggr !=
NULL);
452assert(quadvar2aggr !=
NULL);
464(*nlrowaggr)->nlrow = nlrow;
465(*nlrowaggr)->rhsaggr = rhsaggr;
469(*nlrowaggr)->quadvars =
NULL;
470(*nlrowaggr)->nquadvars = 0;
471(*nlrowaggr)->quadvarssize = 0;
472(*nlrowaggr)->quadvar2aggr =
NULL;
473(*nlrowaggr)->remtermcoefs =
NULL;
474(*nlrowaggr)->remtermvars1 =
NULL;
475(*nlrowaggr)->remtermvars2 =
NULL;
476(*nlrowaggr)->nremterms = 0;
488 for( i = 0; i < nquadvars; ++i )
503 if( lincoef != 0.0 )
508 if( quadvar2aggr[i] >= 0)
509++aggrnvars[ quadvar2aggr[i] ];
511idx1 = quadvar2aggr[i];
521 for( j = 0; j < nadjbilin; ++j )
530 if( qterm1 != qterm )
533idx2 = quadvar2aggr[pos2];
536 if( idx1 >= 0 && idx2 >= 0 && idx1 == idx2 )
542assert((*nlrowaggr)->nquadvars == nquadvars);
551(*nlrowaggr)->remtermsize = nremterms;
553(*nlrowaggr)->necaggr = nfound;
555 for( i = 0; i < nfound; ++i )
561 for( i = 0; i < nquadvars; ++i )
565idx = quadvar2aggr[i];
581 for( i = 0; i < nquadvars; ++i )
595idx1 = quadvar2aggr[i];
607 SCIPdebugMsg(
scip,
"add term %e *%d^2 to the remaining part\n", coef, idx1);
610 for( j = 0; j < nadjbilin; ++j )
621 if( qterm1 != qterm )
626idx2 = quadvar2aggr[pos2];
630 if( idx1 >= 0 && idx2 >= 0 && idx1 == idx2 )
633 SCIPdebugMsg(
scip,
"add term %e *%d*%d to aggr. %d\n", coef, i, pos2, idx1);
638 SCIPdebugMsg(
scip,
"add term %e *%d*%d to the remaining part\n", coef, i, pos2);
660assert(nlrowaggr !=
NULL);
661assert(*nlrowaggr !=
NULL);
662(*nlrowaggr)->nlrow =
NULL;
663assert((*nlrowaggr)->quadvars !=
NULL);
664assert((*nlrowaggr)->nquadvars > 0);
665assert((*nlrowaggr)->nremterms >= 0);
677 if( (*nlrowaggr)->nlinvars > 0 )
684 for( i = 0; i < (*nlrowaggr)->necaggr; ++i )
710 for( i = 0; i < nlrowaggr->
nremterms; ++i )
713 for( i = 0; i < nlrowaggr->
nlinvars; ++i )
717 for( i = 0; i < nlrowaggr->
necaggr; ++i )
734assert(sepadata !=
NULL);
750assert(sepadata !=
NULL);
753 if( sepadata->nlrowaggrs !=
NULL)
757 for( i = sepadata->nnlrowaggrs - 1; i >= 0; --i )
764sepadata->nlrowaggrs =
NULL;
765sepadata->nnlrowaggrs = 0;
766sepadata->nlrowaggrssize = 0;
780assert(sepadata !=
NULL);
781assert(*sepadata !=
NULL);
787 if( (*sepadata)->lpi !=
NULL)
790(*sepadata)->lpisize = 0;
809assert(sepadata !=
NULL);
810assert(nlrowaggr !=
NULL);
812 if( sepadata->nlrowaggrssize == 0 )
815sepadata->nlrowaggrssize = 2;
817 else if( sepadata->nlrowaggrssize < sepadata->nnlrowaggrs + 1 )
820sepadata->nlrowaggrssize *= 2;
821assert(sepadata->nlrowaggrssize >= sepadata->nnlrowaggrs + 1);
824sepadata->nlrowaggrs[ sepadata->nnlrowaggrs ] = nlrowaggr;
825++(sepadata->nnlrowaggrs);
828 for( i = 0; i < nlrowaggr->
necaggr; ++i )
829sepadata->maxecsize =
MAX(sepadata->maxecsize, nlrowaggr->
ecaggr[i]->
nvars);
834++(sepadata->nrhsnlrowaggrs);
836++(sepadata->nlhsnlrowaggrs);
858 return MIN(ub - val, val - lb) / (ub - lb);
896assert(subscip !=
NULL);
897assert(forwardarcs !=
NULL);
898assert(backwardarcs !=
NULL);
899assert(nedges !=
NULL);
900assert(sepadata->minaggrsize <= sepadata->maxaggrsize);
920 for( i = 0; i < nquadexprs; ++i )
933 SCIPdebugMsg(
scip,
"edge {%d,%d} = {%s,%s} coeff=%e edgeweight=0\n", i, i,
947 for( j = 0 ; j < nadjbilin; ++j )
958 if( qterm1 != qterm )
961edgeweight = nodeweights[i] + nodeweights[pos2];
962 SCIPdebugMsg(
scip,
"edge {%d,%d} = {%s,%s} coeff=%e edgeweight=%e\n", i, pos2,
979assert(noddcyclearcs < 2*nbilinexprs-1);
980oddcyclearcs[noddcyclearcs++] = forwardarcs[i];
981oddcyclearcs[noddcyclearcs++] = backwardarcs[i];
986assert(noddcyclearcs < 2*nbilinexprs-1);
987oddcyclearcs[noddcyclearcs++] = forwardarcs[i];
988oddcyclearcs[noddcyclearcs++] = backwardarcs[i];
1002assert(*
narcs> 0);
1016 for( i = 0; i < *
narcs; ++i )
1028 for( i = 0; i <
nnodes; ++i )
1035 for( i = 0; i < nquadexprs; ++i )
1048 for( j = 0 ; j < nadjbilin; ++j )
1056 if( qterm1 != qterm )
1068assert(arcidx == *
narcs);
1070 for( i = 0; i <
nnodes; ++i )
1097assert(subscip !=
NULL);
1098assert(nlrow !=
NULL);
1099assert(forwardarcs !=
NULL);
1100assert(backwardarcs !=
NULL);
1101assert(quadvar2aggr !=
NULL);
1102assert(nedges !=
NULL);
1114 for( i = 0; i < nquadexprs; ++i )
1126 if( quadvar2aggr[i] != -1 )
1134 for( j = 0 ; j < nadjbilin; ++j )
1142 if( qterm1 != qterm )
1145 if( quadvar2aggr[i] != -1 || quadvar2aggr[pos2] != -1 )
1177assert(subscip !=
NULL);
1178assert(nlrow !=
NULL);
1179assert(forwardarcs !=
NULL);
1180assert(backwardarcs !=
NULL);
1181assert(quadvar2aggr !=
NULL);
1182assert(nfoundsofar >= 0);
1187assert(sol !=
NULL);
1194 for( i = 0; i < nquadexprs; ++i )
1209assert(quadvar2aggr[i] == -1 || quadvar2aggr[i] == nfoundsofar);
1210quadvar2aggr[i] = nfoundsofar;
1216 for( j = 0; j < nadjbilin; ++j )
1224 if( qterm1 != qterm )
1230assert(quadvar2aggr[i] == -1 || quadvar2aggr[i] == nfoundsofar);
1231assert(quadvar2aggr[pos2] == -1 || quadvar2aggr[pos2] == nfoundsofar);
1233quadvar2aggr[i] = nfoundsofar;
1234quadvar2aggr[pos2] = nfoundsofar;
1254assert(subscip !=
NULL);
1255assert(aggrleft !=
NULL);
1256assert(found !=
NULL);
1257assert(nedges >= 0);
1262 if(
SCIPisLE(subscip, timelimit, 0.0) )
1322assert(graph !=
NULL);
1323assert(nlrow !=
NULL);
1336 for( i = 0; i < nquadexprs; ++i )
1341nodeweight = 100 + (int)(100 * nodeweights[i]);
1352 for( i = 0; i < nquadexprs; ++i )
1361 for( j = 0; j < nadjbilin; ++j )
1370 if( qterm1 != qterm )
1373#ifdef SCIP_DEBUG_DETAILED 1420 int* maxcliquenodes;
1422 intnmaxcliquenodes;
1423 intmaxcliqueweight;
1429assert(graph !=
NULL);
1430assert(nfoundsofar >= 0);
1431assert(foundaggr !=
NULL);
1432assert(foundclique !=
NULL);
1435*foundaggr =
FALSE;
1436*foundclique =
FALSE;
1440assert(nquadexprs == tcliqueGetNNodes(graph));
1443 for( i = 0; i < nquadexprs; ++i )
1445 if( quadvar2aggr[i] != -1 )
1459 if( status !=
TCLIQUE_OPTIMAL|| nmaxcliquenodes < sepadata->minaggrsize )
1462*foundclique =
TRUE;
1463aggrsize =
MIN(sepadata->maxaggrsize, nmaxcliquenodes);
1466 for( i = 0; i < aggrsize; ++i )
1478 for( i = 0; i < nquadexprs; ++i )
1497 for( j = 0; j < nadjbilin; ++j )
1506 if( qterm1 != qterm )
1523 for( i = 0; i < aggrsize; ++i )
1524 if( degrees[i] == 2 )
1528 if( noddcycleedges == 0 || (aggrsize == 3 && noddcycleedges == 2) || (aggrsize == 4 && ntwodegrees == 4) )
1529*foundaggr =
FALSE;
1534 for( i = 0; i < aggrsize; ++i )
1536quadvar2aggr[ maxcliquenodes[i] ] = *foundaggr ? nfoundsofar : -2;
1537 SCIPdebugMsg(
scip,
"%s %d\n", *foundaggr ?
"aggregate node: ":
"exclude node: ", maxcliquenodes[i]);
1543 if( cliquemap !=
NULL)
1579assert(subscip !=
NULL);
1580assert(quadvar2aggr !=
NULL);
1581assert(nfound !=
NULL);
1600 for( i = 0; i < nquadvars; ++i )
1609quadvar2aggr[i] = -1;
1616assert(nedges >= 0);
1632 if( nedges < sepadata->minaggrsize )
1639 if( timelimit <= 0.0 )
1671 if( graph ==
NULL)
1678&foundaggr, &foundclique),
tcliqueFree(&graph) );
1682assert(foundclique);
1693 SCIPdebugMsg(
scip,
"did not find a clique to exclude -> leave aggregation search\n");
1699 if( nunsucces >= sepadata->maxstallrounds && *nfound == 0 )
1701 SCIPdebugMsg(
scip,
"did not find an e.c. aggregation for %d iterations\n", nunsucces);
1713 for( i = 0; i < nquadvars; ++i )
1720 if( graph !=
NULL)
1724 for( i = 0; i <
narcs; ++i )
1767retcode =
doSeachEcAggr(
scip, subscip, sepadata, nlrow, sol, rhsaggr, quadvar2aggr, nfound);
1796 intninterestingnodes;
1801assert(rhscandidate !=
NULL);
1802assert(lhscandidate !=
NULL);
1804*rhscandidate =
TRUE;
1805*lhscandidate =
TRUE;
1818takerow = nquadvars >= sepadata->minaggrsize;
1822*rhscandidate =
FALSE;
1823*lhscandidate =
FALSE;
1829*rhscandidate =
FALSE;
1831*lhscandidate =
FALSE;
1835ninterestingnodes = 0;
1839 for( i = 0; i < nquadvars; ++i )
1856 for( j = 0; j < nadjbilin; ++j )
1866 if( qterm1 != qterm )
1879 if( degrees[i] == 2 )
1880++ninterestingnodes;
1881 if( degrees[pos2] == 2 )
1882++ninterestingnodes;
1891 SCIPdebugMsg(
scip,
"nlrow contains: %d edges\n", nposedges + nnegedges);
1894 if( nposedges + nnegedges > sepadata->maxbilinterms || nposedges + nnegedges < sepadata->minaggrsize
1895|| ninterestingnodes < sepadata->minaggrsize )
1897*rhscandidate =
FALSE;
1898*lhscandidate =
FALSE;
1903 if( nposedges == 0 || (nposedges + nnegedges == 3 && (nposedges % 2) == 0) )
1904*rhscandidate =
FALSE;
1905 if( nnegedges == 0 || (nposedges + nnegedges == 3 && (nnegedges % 2) == 0) )
1906*lhscandidate =
FALSE;
1926assert(nlrow !=
NULL);
1927assert(sepadata !=
NULL);
1930 SCIPdebugMsg(
scip,
"search for edge-concave aggregation for the nonlinear row: \n");
1936 SCIPdebugMsg(
scip,
"rhs candidate = %u lhs candidate = %u\n", rhscandidate, lhscandidate);
1938 if( !rhscandidate && !lhscandidate )
1958assert(nlrow !=
NULL);
1978assert(nlrow !=
NULL);
2006 for( i = 0; i < nvars; ++i )
2028 unsigned intncorner;
2032assert(ecaggr !=
NULL);
2033assert(fvals !=
NULL);
2034assert(facet !=
NULL);
2040val = facet[ecaggr->
nvars];
2041 for( i = 0; i < (
unsigned int) ecaggr->
nvars; ++i )
2045maxviolation =
MAX(val - fvals[0], maxviolation);
2049 for( i = 1; i < ncorner; ++i )
2055gray = i ^ (i >> 1);
2060 while( (diff >>= 1) != 0 )
2069maxviolation =
MAX(val - fvals[gray], maxviolation);
2075 SCIPdebugMsg(
scip,
"maximum violation of facet: %2.8e\n", maxviolation);
2082facet[ecaggr->
nvars] -= maxviolation;
2107assert(sepadata !=
NULL);
2108assert(sepadata->nnlrowaggrs > 0);
2111 if( sepadata->lpi !=
NULL&& sepadata->lpisize >= sepadata->maxecsize )
2115 if( sepadata->lpi !=
NULL)
2118sepadata->lpi =
NULL;
2121assert(sepadata->lpi ==
NULL);
2123sepadata->lpisize = sepadata->maxecsize;
2125nrows = sepadata->maxecsize + 1;
2127nnonz = (ncols * (nrows + 1)) / 2;
2139 for( i = 0; i < ncols; ++i )
2156 if( (
a& i) != 0 )
2175 SCIPdebugMsg(
scip,
" val[%d][%d] = 1 (position %d)\n", nrows - 1, i, k);
2184assert(nrows <= ncols);
2209assert(ecaggr !=
NULL);
2214 for( i = 0; i < ecaggr->
nterms; ++i )
2225assert(idx1 >= 0 && idx1 < ecaggr->nvars);
2226assert(idx2 >= 0 && idx2 < ecaggr->nvars);
2231val += coef * bound1 * bound2;
2253val =
MIN(val, ub);
2254val =
MAX(val, lb);
2256val = (val - lb) / (ub - lb);
2257assert(val >= 0.0 && val <= 1.0);
2305assert(sepadata !=
NULL);
2306assert(ecaggr !=
NULL);
2307assert(facet !=
NULL);
2308assert(facetval !=
NULL);
2309assert(success !=
NULL);
2310assert(ecaggr->
nvars<= sepadata->maxecsize);
2318assert(sepadata->lpi !=
NULL);
2319assert(sepadata->lpisize >= ecaggr->
nvars);
2325assert(ncorner <= ncols);
2326assert(ecaggr->
nvars+ 1 <= nrows);
2327assert(nrows <= ncols);
2340 for( i = 0; i < ncols; ++i )
2342fvals[i] = i < ncorner ?
evalCorner(ecaggr, i) : 0.0;
2347ub[i] = i < ncorner ? 1.0 : 0.0;
2348 SCIPdebugMsg(
scip,
"bounds of LP col %d = [%e, %e]; obj = %e\n", i, lb[i], ub[i], fvals[i]);
2352perturbation = 0.001;
2353 for( i = 0; i < nrows; ++i )
2356 if( i < ecaggr->nvars )
2360 x= ecaggr->
vars[i];
2361assert(
x!=
NULL);
2366side[i] += side[i] > perturbation ? -perturbation : perturbation;
2367perturbation /= 1.2;
2371side[i] = (i == nrows - 1) ? 1.0 : 0.0;
2403 if( ecaggr->
nvars+ 1 == ncols )
2416 for( i = 0; i < ecaggr->
nvars; ++i )
2417facet[i] = dualsol[i];
2420facet[ecaggr->
nvars] = dualsol[nrows - 1];
2427 for( i = 0; i < ecaggr->
nvars; ++i )
2446 for( i = 0; i < ecaggr->
nvars; ++i )
2456facet[ecaggr->
nvars] -= (facet[i] * varlb) / (varub - varlb);
2459facet[i] = facet[i] / (varub - varlb);
2466*facetval += facet[ecaggr->
nvars];
2505assert(cut !=
NULL);
2506assert(facet !=
NULL);
2507assert(vars !=
NULL);
2509assert(cutconstant !=
NULL);
2510assert(cutactivity !=
NULL);
2511assert(success !=
NULL);
2515 for( i = 0; i < nvars; ++i )
2541*cutconstant += facet[nvars];
2542*cutactivity += facet[nvars];
2562assert(cut !=
NULL);
2563assert(
x!=
NULL);
2566assert(cutconstant !=
NULL);
2567assert(cutactivity !=
NULL);
2568assert(success !=
NULL);
2584*cutconstant += activity;
2593*cutactivity += activity;
2614assert(cut !=
NULL);
2615assert(
x!=
NULL);
2616assert(
y!=
NULL);
2618assert(cutconstant !=
NULL);
2619assert(cutactivity !=
NULL);
2620assert(success !=
NULL);
2659*cutactivity += lincoef * refpoint + linconst;
2660*cutconstant += linconst;
2693*cutactivity += lincoefx * refpointx + lincoefy * refpointy + linconst;
2694*cutconstant += linconst;
2735assert(separated !=
NULL);
2736assert(cutoff !=
NULL);
2737assert(nlrowaggr->
necaggr> 0);
2741*separated =
FALSE;
2749sepadata->dynamiccuts) );
2753cutconstant = nlrowaggr->
constant;
2757bestfacetsize = sepadata->maxaggrsize + 1;
2773 for( i = 0; i < nlrowaggr->
necaggr; ++i )
2778ecaggr = nlrowaggr->
ecaggr[i];
2779assert(ecaggr !=
NULL);
2785found ?
"yes":
"no");
2789printFacet(
scip, ecaggr->
vars, ecaggr->
nvars, bestfacet, bestfacetval);
2805 for( i = 0; i < nlrowaggr->
nremterms; ++i )
2813assert(
x!=
NULL);
2814assert(
y!=
NULL);
2824 for( i = 0; i < nlrowaggr->
nlinvars; ++i )
2831assert(
x!=
NULL);
2841 SCIPdebugMsg(
scip,
"cut activity = %e rhs(nlrow) = %e\n", cutactivity, nlrowaggr->
rhs);
2863 if(
SCIPisGE(
scip, cutactivity - nlrowaggr->
rhs, sepadata->minviolation) )
2870 if( !(*cutoff) && !islocalcut )
2898assert(nlrowaggr !=
NULL);
2906 for( i = 0; i < nlrowaggr->
nquadvars; ++i )
2909assert(var !=
NULL);
2915 SCIPdebugMsg(
scip,
"nlrow aggregation contains unbounded variables\n");
2922 SCIPdebugMsg(
scip,
"nlrow aggregation contains fixed variables in an e.c. aggregation\n");
2950 if( sepadata->nnlrowaggrs == 0 )
2957nmaxcuts = depth == 0 ? sepadata->maxsepacutsroot : sepadata->maxsepacuts;
2961 for( i = 0; i < sepadata->nnlrowaggrs && ncuts < nmaxcuts && !
SCIPisStopped(
scip); ++i )
2967nlrowaggr = sepadata->nlrowaggrs[i];
2968assert(nlrowaggr !=
NULL);
2976 SCIPdebugMsg(
scip,
"try to compute a cut for nonlinear row aggregation %d\n", i);
2980 SCIPdebugMsg(
scip,
"found a cut: %s cutoff: %s\n", separated ?
"yes":
"no", cutoff ?
"yes":
"no");
3011assert(sepa !=
NULL);
3027assert(sepadata !=
NULL);
3042assert(sepadata !=
NULL);
3045#ifdef SCIP_STATISTIC 3055sepadata->searchedforaggr =
FALSE;
3070assert(sepadata !=
NULL);
3078 if( sepadata->maxaggrsize < sepadata->minaggrsize )
3093 if( sepadata->maxdepth >= 0 && depth > sepadata->maxdepth )
3098 if( (depth == 0 && sepadata->maxroundsroot >= 0 && ncalls >= sepadata->maxroundsroot)
3099|| (depth > 0 && sepadata->maxrounds >= 0 && ncalls >= sepadata->maxrounds) )
3103 if( !sepadata->searchedforaggr )
3115sepadata->searchedforaggr =
TRUE;
3148assert(sepa !=
NULL);
3157 "separating/" SEPA_NAME "/dynamiccuts",
3158 "should generated cuts be removed from the LP if they are no longer tight?",
3163 "maximal number of eccuts separation rounds per node (-1: unlimited)",
3167 "separating/" SEPA_NAME "/maxroundsroot",
3168 "maximal number of eccuts separation rounds in the root node (-1: unlimited)",
3173 "maximal depth at which the separator is applied (-1: unlimited)",
3177 "separating/" SEPA_NAME "/maxsepacuts",
3178 "maximal number of edge-concave cuts separated per separation round",
3182 "separating/" SEPA_NAME "/maxsepacutsroot",
3183 "maximal number of edge-concave cuts separated per separation round in the root node",
3187 "maximal coef. range of a cut (max coef. divided by min coef.) in order to be added to LP relaxation",
3191 "minimal violation of an edge-concave cut to be separated",
3195 "separating/" SEPA_NAME "/minaggrsize",
3196 "search for edge-concave aggregations of at least this size",
3200 "separating/" SEPA_NAME "/maxaggrsize",
3201 "search for edge-concave aggregations of at most this size",
3205 "separating/" SEPA_NAME "/maxbilinterms",
3206 "maximum number of bilinear terms allowed to be in a quadratic constraint",
3210 "separating/" SEPA_NAME "/maxstallrounds",
3211 "maximum number of unsuccessful rounds in the edge-concave aggregation search",
Constraint handler for XOR constraints, .
#define SCIP_CALL_TERMINATE(retcode, x, TERM)
#define SCIP_CALL_FINALLY(x, y)
void SCIPaddSquareLinearization(SCIP *scip, SCIP_Real sqrcoef, SCIP_Real refpoint, SCIP_Bool isint, SCIP_Real *lincoef, SCIP_Real *linconstant, SCIP_Bool *success)
void SCIPaddSquareSecant(SCIP *scip, SCIP_Real sqrcoef, SCIP_Real lb, SCIP_Real ub, SCIP_Real *lincoef, SCIP_Real *linconstant, SCIP_Bool *success)
SCIP_RETCODE SCIPaddCoefLinear(SCIP *scip, SCIP_CONS *cons, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPcreateConsBasicXor(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_Bool rhs, int nvars, SCIP_VAR **vars)
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_Bool SCIPisStopped(SCIP *scip)
SCIP_RETCODE SCIPfree(SCIP **scip)
SCIP_RETCODE SCIPcreate(SCIP **scip)
SCIP_STATUS SCIPgetStatus(SCIP *scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
int SCIPgetNVars(SCIP *scip)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
SCIP_RETCODE SCIPsetObjsense(SCIP *scip, SCIP_OBJSENSE objsense)
SCIP_RETCODE SCIPcreateProbBasic(SCIP *scip, const char *name)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
SCIP_RETCODE SCIPhashmapCreate(SCIP_HASHMAP **hashmap, BMS_BLKMEM *blkmem, int mapsize)
SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsertInt(SCIP_HASHMAP *hashmap, void *origin, int image)
SCIP_RETCODE SCIPlpiChgSides(SCIP_LPI *lpi, int nrows, const int *ind, const SCIP_Real *lhs, const SCIP_Real *rhs)
SCIP_RETCODE SCIPlpiAddRows(SCIP_LPI *lpi, int nrows, const SCIP_Real *lhs, const SCIP_Real *rhs, char **rownames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
SCIP_RETCODE SCIPlpiChgBounds(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *lb, const SCIP_Real *ub)
SCIP_RETCODE SCIPlpiFree(SCIP_LPI **lpi)
SCIP_RETCODE SCIPlpiGetSol(SCIP_LPI *lpi, SCIP_Real *objval, SCIP_Real *primsol, SCIP_Real *dualsol, SCIP_Real *activity, SCIP_Real *redcost)
SCIP_RETCODE SCIPlpiSolveDual(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiAddCols(SCIP_LPI *lpi, int ncols, const SCIP_Real *obj, const SCIP_Real *lb, const SCIP_Real *ub, char **colnames, int nnonz, const int *beg, const int *ind, const SCIP_Real *val)
SCIP_RETCODE SCIPlpiSolvePrimal(SCIP_LPI *lpi)
SCIP_RETCODE SCIPlpiCreate(SCIP_LPI **lpi, SCIP_MESSAGEHDLR *messagehdlr, const char *name, SCIP_OBJSEN objsen)
SCIP_RETCODE SCIPlpiChgObj(SCIP_LPI *lpi, int ncols, const int *ind, const SCIP_Real *obj)
SCIP_RETCODE SCIPlpiGetNCols(SCIP_LPI *lpi, int *ncols)
SCIP_RETCODE SCIPlpiGetNRows(SCIP_LPI *lpi, int *nrows)
#define SCIPdebugMsgPrint
SCIP_MESSAGEHDLR * SCIPgetMessagehdlr(SCIP *scip)
void SCIPaddBilinMcCormick(SCIP *scip, SCIP_Real bilincoef, SCIP_Real lbx, SCIP_Real ubx, SCIP_Real refpointx, SCIP_Real lby, SCIP_Real uby, SCIP_Real refpointy, SCIP_Bool overestimate, SCIP_Real *lincoefx, SCIP_Real *lincoefy, SCIP_Real *linconstant, SCIP_Bool *success)
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 SCIPsetHeuristics(SCIP *scip, SCIP_PARAMSETTING paramsetting, SCIP_Bool quiet)
SCIP_RETCODE SCIPsetIntParam(SCIP *scip, const char *name, int value)
SCIP_RETCODE SCIPgetRealParam(SCIP *scip, const char *name, SCIP_Real *value)
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 SCIPsetRealParam(SCIP *scip, const char *name, SCIP_Real value)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_RETCODE SCIPaddPoolCut(SCIP *scip, SCIP_ROW *row)
SCIP_Real SCIPgetCutEfficacy(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
SCIP_Bool SCIPisCutEfficacious(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
void SCIPexprGetQuadraticBilinTerm(SCIP_EXPR *expr, int termidx, SCIP_EXPR **expr1, SCIP_EXPR **expr2, SCIP_Real *coef, int *pos2, SCIP_EXPR **prodexpr)
SCIP_Bool SCIPexprAreQuadraticExprsVariables(SCIP_EXPR *expr)
void SCIPexprGetQuadraticData(SCIP_EXPR *expr, SCIP_Real *constant, int *nlinexprs, SCIP_EXPR ***linexprs, SCIP_Real **lincoefs, int *nquadexprs, int *nbilinexprs, SCIP_Real **eigenvalues, SCIP_Real **eigenvectors)
SCIP_Bool SCIPisExprVar(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcheckExprQuadratic(SCIP *scip, SCIP_EXPR *expr, SCIP_Bool *isquadratic)
SCIP_VAR * SCIPgetVarExprVar(SCIP_EXPR *expr)
void SCIPexprGetQuadraticQuadTerm(SCIP_EXPR *quadexpr, int termidx, SCIP_EXPR **expr, SCIP_Real *lincoef, SCIP_Real *sqrcoef, int *nadjbilin, int **adjbilin, SCIP_EXPR **sqrexpr)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
#define SCIPensureBlockMemoryArray(scip, ptr, arraysizeptr, minsize)
#define SCIPallocClearBufferArray(scip, ptr, num)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPallocBlockMemory(scip, ptr)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, num)
SCIP_Bool SCIPisNLPConstructed(SCIP *scip)
int SCIPgetNNLPNlRows(SCIP *scip)
SCIP_NLROW ** SCIPgetNLPNlRows(SCIP *scip)
SCIP_Real SCIPnlrowGetRhs(SCIP_NLROW *nlrow)
SCIP_Real SCIPnlrowGetLhs(SCIP_NLROW *nlrow)
int SCIPnlrowGetNLinearVars(SCIP_NLROW *nlrow)
SCIP_VAR ** SCIPnlrowGetLinearVars(SCIP_NLROW *nlrow)
SCIP_Real SCIPnlrowGetConstant(SCIP_NLROW *nlrow)
SCIP_EXPR * SCIPnlrowGetExpr(SCIP_NLROW *nlrow)
SCIP_Bool SCIPnlrowIsInNLP(SCIP_NLROW *nlrow)
SCIP_Real * SCIPnlrowGetLinearCoefs(SCIP_NLROW *nlrow)
SCIP_RETCODE SCIPprintNlRow(SCIP *scip, SCIP_NLROW *nlrow, FILE *file)
SCIP_Real SCIPgetRowMaxCoef(SCIP *scip, SCIP_ROW *row)
SCIP_Real SCIPgetRowMinCoef(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPcacheRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPflushRowExtensions(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
const char * SCIProwGetName(SCIP_ROW *row)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_RETCODE SCIPcreateEmptyRowSepa(SCIP *scip, SCIP_ROW **row, SCIP_SEPA *sepa, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
int SCIProwGetRank(SCIP_ROW *row)
SCIP_RETCODE SCIPchgRowRhs(SCIP *scip, SCIP_ROW *row, SCIP_Real rhs)
SCIP_Real SCIPgetRowSolActivity(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_RETCODE SCIPincludeSepaBasic(SCIP *scip, SCIP_SEPA **sepa, const char *name, const char *desc, int priority, int freq, SCIP_Real maxbounddist, SCIP_Bool usessubscip, SCIP_Bool delay, SCIP_DECL_SEPAEXECLP((*sepaexeclp)), SCIP_DECL_SEPAEXECSOL((*sepaexecsol)), SCIP_SEPADATA *sepadata)
const char * SCIPsepaGetName(SCIP_SEPA *sepa)
int SCIPsepaGetNCallsAtNode(SCIP_SEPA *sepa)
SCIP_RETCODE SCIPsetSepaFree(SCIP *scip, SCIP_SEPA *sepa, SCIP_DECL_SEPAFREE((*sepafree)))
SCIP_RETCODE SCIPsetSepaExitsol(SCIP *scip, SCIP_SEPA *sepa, SCIP_DECL_SEPAEXITSOL((*sepaexitsol)))
SCIP_SEPADATA * SCIPsepaGetData(SCIP_SEPA *sepa)
void SCIPsepaSetData(SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata)
SCIP_RETCODE SCIPsetSepaCopy(SCIP *scip, SCIP_SEPA *sepa, SCIP_DECL_SEPACOPY((*sepacopy)))
SCIP_SOL * SCIPgetBestSol(SCIP *scip)
SCIP_RETCODE SCIPprintSol(SCIP *scip, SCIP_SOL *sol, FILE *file, SCIP_Bool printzeros)
int SCIPgetNSols(SCIP *scip)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_RETCODE SCIPfreeTransform(SCIP *scip)
SCIP_RETCODE SCIPsolve(SCIP *scip)
SCIP_Real SCIPgetSolvingTime(SCIP *scip)
SCIP_Real SCIPgetTotalTime(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
int SCIPgetDepth(SCIP *scip)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPvarGetIndex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPcreateVarBasic(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype)
SCIP_RETCODE SCIPincludeSepaEccuts(SCIP *scip)
int SCIPsnprintf(char *t, int len, const char *s,...)
#define BMSclearMemory(ptr)
#define BMSclearMemoryArray(ptr, num)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
internal methods for NLP management
#define SCIPstatisticMessage
SCIP_RETCODE SCIPincludeDefaultPlugins(SCIP *scip)
static SCIP_RETCODE doSeachEcAggr(SCIP *scip, SCIP *subscip, SCIP_SEPADATA *sepadata, SCIP_NLROW *nlrow, SCIP_SOL *sol, SCIP_Bool rhsaggr, int *quadvar2aggr, int *nfound)
static SCIP_RETCODE ecaggrAddBilinTerm(SCIP *scip, SCIP_ECAGGR *ecaggr, SCIP_VAR *x, SCIP_VAR *y, SCIP_Real coef)
static SCIP_RETCODE sepadataCreate(SCIP *scip, SCIP_SEPADATA **sepadata)
static SCIP_RETCODE searchEcAggrWithMIP(SCIP *subscip, SCIP_Real timelimit, int nedges, SCIP_Bool *aggrleft, SCIP_Bool *found)
static SCIP_RETCODE nlrowaggrCreate(SCIP *scip, SCIP_NLROW *nlrow, SCIP_NLROWAGGR **nlrowaggr, int *quadvar2aggr, int nfound, SCIP_Bool rhsaggr)
static SCIP_DECL_SEPAFREE(sepaFreeEccuts)
static SCIP_RETCODE ecaggrAddQuadvar(SCIP_ECAGGR *ecaggr, SCIP_VAR *x)
static SCIP_Real transformValue(SCIP *scip, SCIP_Real lb, SCIP_Real ub, SCIP_Real val)
#define CLIQUE_MAXFIRSTNODEWEIGHT
static SCIP_RETCODE separateCuts(SCIP *scip, SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata, int depth, SCIP_SOL *sol, SCIP_RESULT *result)
#define DEFAULT_DYNAMICCUTS
static SCIP_RETCODE addFacetToCut(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut, SCIP_Real *facet, SCIP_VAR **vars, int nvars, SCIP_Real *cutconstant, SCIP_Real *cutactivity, SCIP_Bool *success)
static SCIP_RETCODE sepadataAddNlrowaggr(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_NLROWAGGR *nlrowaggr)
static SCIP_RETCODE findAndStoreEcAggregations(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_NLROW *nlrow, SCIP_SOL *sol)
static SCIP_RETCODE nlrowaggrAddLinearTerm(SCIP *scip, SCIP_NLROWAGGR *nlrowaggr, SCIP_VAR *linvar, SCIP_Real lincoef)
#define DEFAULT_MAXROUNDSROOT
static SCIP_RETCODE updateMIP(SCIP *subscip, SCIP_NLROW *nlrow, SCIP_VAR **forwardarcs, SCIP_VAR **backwardarcs, int *quadvar2aggr, int *nedges)
static SCIP_RETCODE searchEcAggr(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_NLROW *nlrow, SCIP_SOL *sol, SCIP_Bool rhsaggr, int *quadvar2aggr, int *nfound)
static SCIP_RETCODE nlrowaggrAddQuadraticVar(SCIP *scip, SCIP_NLROWAGGR *nlrowaggr, SCIP_VAR *quadvar)
static SCIP_RETCODE addBilinearTermToCut(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut, SCIP_VAR *x, SCIP_VAR *y, SCIP_Real coeff, SCIP_Real *cutconstant, SCIP_Real *cutactivity, SCIP_Bool *success)
static SCIP_Bool isPossibleToComputeCut(SCIP *scip, SCIP_SOL *sol, SCIP_NLROWAGGR *nlrowaggr)
static SCIP_Real phi(SCIP *scip, SCIP_Real val, SCIP_Real lb, SCIP_Real ub)
#define DEFAULT_MINVIOLATION
static SCIP_RETCODE sepadataFreeNlrows(SCIP *scip, SCIP_SEPADATA *sepadata)
#define CLIQUE_BACKTRACKFREQ
#define CLIQUE_MAXNTREENODES
static SCIP_RETCODE nlrowaggrFree(SCIP *scip, SCIP_NLROWAGGR **nlrowaggr)
static SCIP_RETCODE nlrowaggrAddRemBilinTerm(SCIP_NLROWAGGR *nlrowaggr, SCIP_VAR *x, SCIP_VAR *y, SCIP_Real coef)
static SCIP_RETCODE addLinearTermToCut(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut, SCIP_VAR *x, SCIP_Real coeff, SCIP_Real *cutconstant, SCIP_Real *cutactivity, SCIP_Bool *success)
static SCIP_RETCODE storeAggrFromMIP(SCIP *subscip, SCIP_NLROW *nlrow, SCIP_VAR **forwardarcs, SCIP_VAR **backwardarcs, int *quadvar2aggr, int nfoundsofar)
static SCIP_DECL_SEPAEXITSOL(sepaExitsolEccuts)
#define DEFAULT_MAXSEPACUTSROOT
static SCIP_DECL_SEPACOPY(sepaCopyEccuts)
static SCIP_DECL_SEPAEXECLP(sepaExeclpEccuts)
static SCIP_RETCODE computeCut(SCIP *scip, SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata, SCIP_NLROWAGGR *nlrowaggr, SCIP_SOL *sol, SCIP_Bool *separated, SCIP_Bool *cutoff)
static SCIP_RETCODE sepadataFree(SCIP *scip, SCIP_SEPADATA **sepadata)
#define DEFAULT_MAXAGGRSIZE
static SCIP_RETCODE createTcliqueGraph(SCIP_NLROW *nlrow, TCLIQUE_GRAPH **graph, SCIP_Real *nodeweights)
static SCIP_RETCODE ecaggrFree(SCIP *scip, SCIP_ECAGGR **ecaggr)
#define SEPA_MAXBOUNDDIST
static SCIP_RETCODE createLP(SCIP *scip, SCIP_SEPADATA *sepadata)
#define DEFAULT_MINAGGRSIZE
static SCIP_RETCODE computeConvexEnvelopeFacet(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_SOL *sol, SCIP_ECAGGR *ecaggr, SCIP_Real *facet, SCIP_Real *facetval, SCIP_Bool *success)
static SCIP_RETCODE createMIP(SCIP *scip, SCIP *subscip, SCIP_SEPADATA *sepadata, SCIP_NLROW *nlrow, SCIP_Bool rhsaggr, SCIP_VAR **forwardarcs, SCIP_VAR **backwardarcs, SCIP_Real *nodeweights, int *nedges, int *narcs)
static SCIP_Bool checkRikun(SCIP *scip, SCIP_ECAGGR *ecaggr, SCIP_Real *fvals, SCIP_Real *facet)
#define DEFAULT_MAXSEPACUTS
#define DEFAULT_MAXSTALLROUNDS
#define SUBSCIP_NODELIMIT
#define DEFAULT_MAXBILINTERMS
#define DEFAULT_MAXROUNDS
static SCIP_RETCODE searchEcAggrWithCliques(SCIP *scip, TCLIQUE_GRAPH *graph, SCIP_SEPADATA *sepadata, SCIP_NLROW *nlrow, int *quadvar2aggr, int nfoundsofar, SCIP_Bool rhsaggr, SCIP_Bool *foundaggr, SCIP_Bool *foundclique)
static SCIP_RETCODE ecaggrCreateEmpty(SCIP *scip, SCIP_ECAGGR **ecaggr, int nquadvars, int nquadterms)
static SCIP_Real evalCorner(SCIP_ECAGGR *ecaggr, int k)
#define DEFAULT_CUTMAXRANGE
static SCIP_RETCODE isCandidate(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_NLROW *nlrow, SCIP_Bool *rhscandidate, SCIP_Bool *lhscandidate)
static const int poweroftwo[]
static SCIP_RETCODE nlrowaggrStoreLinearTerms(SCIP *scip, SCIP_NLROWAGGR *nlrowaggr, SCIP_VAR **linvars, SCIP_Real *lincoefs, int nlinvars)
edge concave cut separator
void tcliqueChangeWeight(TCLIQUE_GRAPH *tcliquegraph, int node, TCLIQUE_WEIGHT weight)
void tcliqueFree(TCLIQUE_GRAPH **tcliquegraph)
enum TCLIQUE_Status TCLIQUE_STATUS
void tcliqueMaxClique(TCLIQUE_GETNNODES((*getnnodes)), TCLIQUE_GETWEIGHTS((*getweights)), TCLIQUE_ISEDGE((*isedge)), TCLIQUE_SELECTADJNODES((*selectadjnodes)), TCLIQUE_GRAPH *tcliquegraph, TCLIQUE_NEWSOL((*newsol)), TCLIQUE_DATA *tcliquedata, int *maxcliquenodes, int *nmaxcliquenodes, TCLIQUE_WEIGHT *maxcliqueweight, TCLIQUE_WEIGHT maxfirstnodeweight, TCLIQUE_WEIGHT minweight, int maxntreenodes, int backtrackfreq, int maxnzeroextensions, int fixednode, int *ntreenodes, TCLIQUE_STATUS *status)
TCLIQUE_Bool tcliqueFlush(TCLIQUE_GRAPH *tcliquegraph)
struct TCLIQUE_Graph TCLIQUE_GRAPH
TCLIQUE_Bool tcliqueCreate(TCLIQUE_GRAPH **tcliquegraph)
TCLIQUE_Bool tcliqueAddNode(TCLIQUE_GRAPH *tcliquegraph, int node, TCLIQUE_WEIGHT weight)
TCLIQUE_Bool tcliqueAddEdge(TCLIQUE_GRAPH *tcliquegraph, int node1, int node2)
@ SCIP_PARAMSETTING_AGGRESSIVE
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
struct SCIP_SepaData SCIP_SEPADATA
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4