assert(sepadata !=
NULL);
116assert(auxvarxik !=
NULL);
117assert(auxvarxil !=
NULL);
118assert(auxvarxjk !=
NULL);
119assert(auxvarxjl !=
NULL);
120assert(auxvarxik != auxvarxil);
121assert(auxvarxjk != auxvarxjl);
127 if( sepadata->minorssize < 4 * (sepadata->nminors + 1) )
130assert(newsize >= 4 * (sepadata->nminors + 1));
134sepadata->minorssize = newsize;
138sepadata->minors[4 * sepadata->nminors] = auxvarxik;
139sepadata->minors[4 * sepadata->nminors + 1] = auxvarxil;
140sepadata->minors[4 * sepadata->nminors + 2] = auxvarxjk;
141sepadata->minors[4 * sepadata->nminors + 3] = auxvarxjl;
142sepadata->isdiagonal[4 * sepadata->nminors] = isauxvarxikdiag;
143sepadata->isdiagonal[4 * sepadata->nminors + 1] = isauxvarxildiag;
144sepadata->isdiagonal[4 * sepadata->nminors + 2] = isauxvarxjkdiag;
145sepadata->isdiagonal[4 * sepadata->nminors + 3] = isauxvarxjldiag;
146++(sepadata->nminors);
166assert(sepadata !=
NULL);
171 for( i = 0; i < 4 * sepadata->nminors; ++i )
173assert(sepadata->minors[i] !=
NULL);
182sepadata->nminors = 0;
183sepadata->minorssize = 0;
203assert(auxvarxik !=
NULL);
204assert(auxvarxil !=
NULL);
205assert(auxvarxjk !=
NULL);
206assert(auxvarxjl !=
NULL);
208*auxvarxik = sepadata->minors[4 * idx];
209*auxvarxil = sepadata->minors[4 * idx + 1];
210*auxvarxjk = sepadata->minors[4 * idx + 2];
211*auxvarxjl = sepadata->minors[4 * idx + 3];
213*isauxvarxikdiag = sepadata->isdiagonal[4 * idx];
214*isauxvarxildiag = sepadata->isdiagonal[4 * idx + 1];
215*isauxvarxjkdiag = sepadata->isdiagonal[4 * idx + 2];
216*isauxvarxjldiag = sepadata->isdiagonal[4 * idx + 3];
254assert(newsize > arr->
nvals+ 1);
303 int* rowvars =
NULL;
313assert(sepadata !=
NULL);
316 if( sepadata->detectedminors )
319assert(sepadata->minors ==
NULL);
320assert(sepadata->nminors == 0);
323sepadata->detectedminors =
TRUE;
348assert(cons !=
NULL);
350assert(root !=
NULL);
361 if( auxvar ==
NULL)
376assert(children[0] !=
NULL);
379assert(quadvar !=
NULL);
390assert(children[0] !=
NULL);
391assert(children[1] !=
NULL);
403 for( i = 0; i < nrowvars; ++i )
413 for( i = 0; i < nrowvars; ++i )
420 for( j = i + 1; j < nrowvars; ++j )
433 for( p = 0; p < ninter - 1; ++p )
437 for( q = p + 1; q < ninter; ++q )
473isauxvarikdiag =
TRUE;
475isauxvarildiag =
TRUE;
477isauxvarjkdiag =
TRUE;
479isauxvarjldiag =
TRUE;
482isauxvarikdiag, isauxvarildiag, isauxvarjkdiag, isauxvarjldiag) );
492 SCIPdebugMsg(
scip,
"found %d principal minors in total\n", sepadata->nminors);
523 for( i = 0; i < nrows; ++i )
525 if( basisind[i] >= 0 )
526map[basisind[i]] = i;
551 SCIP_Realeigenvectors[16] = {1.0, 1.0, 0.0, 0.0, 0.0, 0.0, -1.0, 1.0, -1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0};
552 SCIP_Realeigenvalues[4] = {0.5, 0.5, -0.5, -0.5};
553 SCIP_Realeigencoef = 0.7071067811865475244008443621048490;
570memset(coefs, 0, 5 *
sizeof(
SCIP_Real));
571memset(coefs4b, 0, 5 *
sizeof(
SCIP_Real));
583 for( i = 0; i < 4; ++i )
593 for( j = 0; j < 4; ++j )
595vdotray += eigencoef * eigenvectors[4 * i + j] * ray[j];
596vzlp += eigencoef * eigenvectors[4 * i + j] *
SCIPvarGetLPSol(vars[j]);
599 if( eigenvalues[i] > 0 )
602*d += eigenvalues[i] * vzlp * vdotray;
603*e += eigenvalues[i] *
SQR( vzlp );
607norm1 += eigenvalues[i] * (1 -
SQR( ad[posidx] )) *
SQR( vzlp );
608norm2 += sqrt( eigenvalues[i] ) * ad[posidx] * vzlp;
615*
a-= eigenvalues[i] *
SQR( vdotray );
616*
b-= 2.0 * eigenvalues[i] * vzlp * vdotray;
617*c -= eigenvalues[i] *
SQR( vzlp );
621coefs4b[0] -= eigenvalues[i] * (1 -
SQR( ad[negidx] )) *
SQR( vdotray );
622coefs4b[1] -= 2.0 * eigenvalues[i] * (1 -
SQR( ad[negidx] )) * vzlp * vdotray;
623coefs4b[2] -= eigenvalues[i] * (1 -
SQR( ad[negidx] )) *
SQR( vzlp );
624coefs4b[3] += sqrt( -eigenvalues[i] ) * ad[negidx] * vdotray;
625coefs4b[4] += sqrt( -eigenvalues[i] ) * ad[negidx] * vzlp;
633 if( sqrt( *c ) - sqrt( *e ) >= 0.0 )
635assert(sqrt( *c ) - sqrt( *e ) < 1e-6);
643coefscondition[0] = norm2 / sqrt( *e );
644coefscondition[1] = coefs4b[3];
645coefscondition[2] = coefs4b[4];
647coefs4b[0] *= norm1 / *e;
648coefs4b[1] *= norm1 / *e;
649coefs4b[2] *= norm1 / *e;
650coefs4b[3] *= norm2 / sqrt( *e );
651coefs4b[4] *= norm2 / sqrt( *e );
653coefs4b[3] += *d / sqrt( *e );
654coefs4b[4] += sqrt( *e );
656assert( sqrt( coefs4b[2] ) - coefs4b[4] < 0.0 );
666 for( i = 0; i < 3; ++i )
670absval =
ABS(coefs[i]);
673 if( absval != 0.0 && absval < min )
679#ifdef DEBUG_INTERSECTIONCUT 680printf(
"Bad numerics: max(A,B,C)/min(A,B,C) is too large (%g)\n", max / min);
688assert(sqrt( *c ) - *e < 0);
691#ifdef DEBUG_INTERSECTIONCUT 692 SCIPinfoMessage(
scip,
NULL,
"Restriction yields: a,b,c,d,e %g %g %g %g %g\n", coefs[0], coefs[1], coefs[2], coefs[3], coefs[4]);
710#ifdef INTERCUTS_DBLDBL 751 returnsqrt(
a* t * t +
b* t + c ) - ( d * t + e );
776curr = (lb + ub) / 2.0;
778#ifdef INTERCUT_MOREDEBUG 779printf(
"%d: lb,ub %.10f, %.10f. curr = %g -> phi at curr %g -> phi at lb %g \n", i, lb, ub, curr, phival,
evalPhiAtRay(
scip, lb,
a,
b, c, d, e));
806 return(coefscondition[0] * sqrt( coefs[0] *
SQR( tsol ) + coefs[1] * tsol + coefs[2] ) + coefscondition[1] *
807tsol + coefscondition[2]) <= 0.0;
834 if( sqrt(
a) <= d )
848e, -(c - e * e), bounds);
860#ifdef INTERCUT_MOREDEBUG 861printf(
"interval solution returned %g -> phival = %g, believe it\n", sol,
evalPhiAtRay(sol,
a,
b, c, d, e));
862printf(
"don't do bin search\n");
870#ifdef INTERCUT_MOREDEBUG 871printf(
"do bin search because phival is %g\n",
evalPhiAtRay(
scip, sol,
a,
b, c, d, e));
915assert(coefs !=
NULL);
920assert(coefs4b !=
NULL);
921assert(coefscondition !=
NULL);
938 if(
isCase4a(sol, coefs, coefscondition) )
948 return MAX(sol, sol4b);
960assert(col !=
NULL);
962#ifdef DEBUG_INTERCUTS_NUMERICS 998assert(row !=
NULL);
1004#ifdef DEBUG_INTERCUTS_NUMERICS 1034 for( i = 0; i < nnonz; i++ )
1049 int* basicvarpos2tableaurow,
1065 for( v = 0; v < 4; ++v )
1133 for( i = 0; i < ncols; ++i )
1161israynonzero =
FALSE;
1162 for( v = 0; v < 4; ++v )
1164 if( tableaurows[v] !=
NULL)
1165rays[(*nrays) * 4 + v] = factor * (
SCIPisZero(
scip, tableaurows[v][i]) ? 0.0 : tableaurows[v][i]);
1169rays[(*nrays) * 4 + v] = -factor;
1171rays[(*nrays) * 4 + v] = 0.0;
1174israynonzero = israynonzero || (rays[(*nrays) * 4 + v] != 0.0);
1178 if( ! israynonzero )
1185 if( *success ==
FALSE)
1192interpoints[*nrays] = interpoint;
1195rayslppos[*nrays] = i;
1242 for( i = 0; i < nrows; ++i )
1270israynonzero =
FALSE;
1271 for( v = 0; v < 4; ++v )
1277 if( tableaurows[v] !=
NULL)
1278rays[(*nrays) * 4 + v] = factor * (
SCIPisZero(
scip, tableaurows[v][idx]) ? 0.0 : tableaurows[v][idx]);
1282rays[(*nrays) * 4 + v] = 0.0;
1285israynonzero = israynonzero || (rays[(*nrays) * 4 + v] != 0.0);
1289 if( ! israynonzero )
1296 if( *success ==
FALSE)
1303interpoints[*nrays] = interpoint;
1306rayslppos[*nrays] = -i - 1;
1318-cutcoef, row, success) );
1337 for( i = 0; i < 4; ++i )
1353*coef = ray1[i] / ray2[i];
1383 for( i = 0; i < nrays; ++i )
1393currentrho = coef * interpoints[i];
1414alpha = (lb + ub) / 2.0;
1417 for( k = 0; k < 4; ++k )
1418newray[k] = alpha * rays[4 * i + k] - (1 - alpha) * rays[4 * idx + k];
1453currentrho = (alpha - 1) * interpoints[i] / alpha;
1456 if( currentrho < *rho )
1491 for( i = 0; i < nrays ; ++i )
1501 SCIP_CALL(
findRho(
scip, rays, nrays, i, interpoints, vars, &rho, usebounds, ad, success) );
1510lppos = rayslppos[i];
1519-cutcoef, rows[lppos], success) );
1529cutcoef, cols[lppos]) );
1550 int* basicvarpos2tableaurow,
1556 SCIP_VAR* vars[4] = {xik, xjl, xil, xjk};
1592 if( sepadata->usebounds )
1623 SCIP_CALL(
addCols(
scip, vars, tableaurows, rowprep, rays, &nrays, rayslppos, interpoints, sepadata->usebounds, ad, &success) );
1629 SCIP_CALL(
addRows(
scip, vars, tableaurows, rowprep, rays, &nrays, rayslppos, interpoints, sepadata->usebounds, ad, &success) );
1635 if( sepadata->usestrengthening )
1690 int* basicvarpos2tableaurow =
NULL;
1693assert(sepa !=
NULL);
1694assert(result !=
NULL);
1699assert(sepadata !=
NULL);
1702 if( sepadata->nminors == 0 )
1708 for( i = 0; i < sepadata->nminors && (*result !=
SCIP_CUTOFF); ++i )
1725 SCIP_CALL(
getMinorVars(sepadata, i, &auxvarxik, &auxvarxil, &auxvarxjk, &auxvarxjl, &isauxvarxikdiag,
1726&isauxvarxildiag, &isauxvarxjkdiag, &isauxvarxjldiag) );
1734det = solxik * solxjl - solxil * solxjk;
1739 if( basicvarpos2tableaurow ==
NULL)
1748assert(tableau !=
NULL);
1753&isauxvarxildiag, &isauxvarxjkdiag, &isauxvarxjldiag, basicvarpos2tableaurow, tableau, result) );
1759&isauxvarxikdiag, &isauxvarxjldiag, &isauxvarxjkdiag, basicvarpos2tableaurow, tableau, result) );
1764 if( basicvarpos2tableaurow ==
NULL)
1774 if( entry !=
NULL)
1798assert(sepa !=
NULL);
1815assert(sepadata !=
NULL);
1816assert(sepadata->minors ==
NULL);
1817assert(sepadata->nminors == 0);
1818assert(sepadata->minorssize == 0);
1836assert(sepadata !=
NULL);
1837assert(sepadata->randnumgen ==
NULL);
1854assert(sepadata !=
NULL);
1855assert(sepadata->randnumgen !=
NULL);
1879assert(sepadata !=
NULL);
1901assert(sepadata !=
NULL);
1906 if( (currentdepth == 0 && sepadata->maxroundsroot >= 0 && ncalls >= sepadata->maxroundsroot)
1907|| (currentdepth > 0 && sepadata->maxrounds >= 0 && ncalls >= sepadata->maxrounds) )
1942sepaExeclpMinor,
NULL,
1945assert(sepa !=
NULL);
1957 "separating/" SEPA_NAME "/usestrengthening",
1958 "whether to use strengthened intersection cuts to separate minors",
1963 "whether to also enforce nonegativity bounds of principle minors",
1968 "minimum required violation of a cut",
1973 "maximal number of separation rounds per node (-1: unlimited)",
1977 "separating/" SEPA_NAME "/maxroundsroot",
1978 "maximal number of separation rounds in the root node (-1: unlimited)",
constraint handler for nonlinear constraints specified by algebraic expressions
#define SCIPquadprecSqrtQ(r, a)
#define SCIPquadprecProdDD(r, a, b)
#define SCIPquadprecProdQD(r, a, b)
#define SCIPquadprecSumQD(r, a, b)
#define QUAD_ASSIGN(a, constant)
#define SCIPquadprecSquareD(r, a)
#define SCIPquadprecSumQQ(r, a, b)
#define SCIP_INTERVAL_INFINITY
private functions to work with algebraic expressions
power and signed power expression handlers
product expression handler
variable expression handler
void SCIPcomputeArraysIntersectionInt(int *array1, int narray1, int *array2, int narray2, int *intersectarray, int *nintersectarray)
SCIP_VAR * SCIPgetExprAuxVarNonlinear(SCIP_EXPR *expr)
SCIP_EXPR * SCIPgetExprNonlinear(SCIP_CONS *cons)
const char * SCIPgetProbName(SCIP *scip)
int SCIPgetNVars(SCIP *scip)
SCIP_VAR ** SCIPgetVars(SCIP *scip)
void SCIPhashmapFree(SCIP_HASHMAP **hashmap)
void * SCIPhashmapEntryGetImage(SCIP_HASHMAPENTRY *entry)
void * SCIPhashmapGetImage(SCIP_HASHMAP *hashmap, void *origin)
SCIP_RETCODE SCIPhashmapInsert(SCIP_HASHMAP *hashmap, void *origin, void *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)
SCIP_Bool SCIPhashmapExists(SCIP_HASHMAP *hashmap, void *origin)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
SCIP_Bool SCIPisIpoptAvailableIpopt(void)
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)
int SCIPcolGetLPPos(SCIP_COL *col)
SCIP_VAR * SCIPcolGetVar(SCIP_COL *col)
SCIP_Real SCIPcolGetPrimsol(SCIP_COL *col)
SCIP_BASESTAT SCIPcolGetBasisStatus(SCIP_COL *col)
int SCIPconshdlrGetNConss(SCIP_CONSHDLR *conshdlr)
SCIP_CONSHDLR * SCIPfindConshdlr(SCIP *scip, const char *name)
SCIP_CONS ** SCIPconshdlrGetConss(SCIP_CONSHDLR *conshdlr)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_Real SCIPgetCutEfficacy(SCIP *scip, SCIP_SOL *sol, SCIP_ROW *cut)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
int SCIPexprGetNChildren(SCIP_EXPR *expr)
SCIP_Real SCIPgetExponentExprPow(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprProduct(SCIP *scip, SCIP_EXPR *expr)
SCIP_Bool SCIPexpriterIsEnd(SCIP_EXPRITER *iterator)
SCIP_EXPR * SCIPexpriterRestartDFS(SCIP_EXPRITER *iterator, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcreateExpriter(SCIP *scip, SCIP_EXPRITER **iterator)
SCIP_Bool SCIPisExprPower(SCIP *scip, SCIP_EXPR *expr)
SCIP_EXPR * SCIPexpriterGetNext(SCIP_EXPRITER *iterator)
SCIP_EXPR ** SCIPexprGetChildren(SCIP_EXPR *expr)
void SCIPfreeExpriter(SCIP_EXPRITER **iterator)
SCIP_RETCODE SCIPexpriterInit(SCIP_EXPRITER *iterator, SCIP_EXPR *expr, SCIP_EXPRITER_TYPE type, SCIP_Bool allowrevisit)
SCIP_Real SCIPintervalGetInf(SCIP_INTERVAL interval)
SCIP_Bool SCIPintervalIsEmpty(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalSetBounds(SCIP_INTERVAL *resultant, SCIP_Real inf, SCIP_Real sup)
void SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real sqrcoeff, SCIP_Real lincoeff, SCIP_Real rhs, SCIP_INTERVAL xbnds)
SCIP_RETCODE SCIPgetLPBasisInd(SCIP *scip, int *basisind)
SCIP_ROW ** SCIPgetLPRows(SCIP *scip)
int SCIPgetNLPRows(SCIP *scip)
SCIP_RETCODE SCIPgetLPBInvARow(SCIP *scip, int r, SCIP_Real *binvrow, SCIP_Real *coefs, int *inds, int *ninds)
SCIP_COL ** SCIPgetLPCols(SCIP *scip)
int SCIPgetNLPCols(SCIP *scip)
SCIP_RETCODE SCIPgetLPBInvRow(SCIP *scip, int r, SCIP_Real *coefs, int *inds, int *ninds)
#define SCIPfreeBuffer(scip, ptr)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPallocBuffer(scip, ptr)
#define SCIPreallocBlockMemoryArray(scip, ptr, oldnum, newnum)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
#define SCIPfreeBufferArrayNull(scip, ptr)
#define SCIPallocBlockMemory(scip, ptr)
SCIP_Real SCIProwGetLhs(SCIP_ROW *row)
SCIP_COL ** SCIProwGetCols(SCIP_ROW *row)
SCIP_Real SCIProwGetRhs(SCIP_ROW *row)
int SCIProwGetNLPNonz(SCIP_ROW *row)
int SCIProwGetLPPos(SCIP_ROW *row)
SCIP_Real SCIPgetRowActivity(SCIP *scip, SCIP_ROW *row)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_Real SCIProwGetConstant(SCIP_ROW *row)
SCIP_Real * SCIProwGetVals(SCIP_ROW *row)
SCIP_BASESTAT SCIProwGetBasisStatus(SCIP_ROW *row)
SCIP_RETCODE SCIPsetSepaExit(SCIP *scip, SCIP_SEPA *sepa, SCIP_DECL_SEPAEXIT((*sepaexit)))
SCIP_RETCODE SCIPsetSepaInitsol(SCIP *scip, SCIP_SEPA *sepa, SCIP_DECL_SEPAINITSOL((*sepainitsol)))
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_RETCODE SCIPsetSepaInit(SCIP *scip, SCIP_SEPA *sepa, SCIP_DECL_SEPAINIT((*sepainit)))
SCIP_Real SCIPgetTotalTime(SCIP *scip)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasZero(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisHugeValue(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasNegative(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 SCIPisFeasPositive(SCIP *scip, SCIP_Real val)
int SCIPgetDepth(SCIP *scip)
SCIP_COL * SCIPvarGetCol(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_Real SCIPvarGetLPSol(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPcaptureVar(SCIP *scip, SCIP_VAR *var)
void SCIPfreeRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen)
SCIP_RETCODE SCIPcreateRandom(SCIP *scip, SCIP_RANDNUMGEN **randnumgen, unsigned int initialseed, SCIP_Bool useglobalseed)
void SCIPmergeRowprepTerms(SCIP *scip, SCIP_ROWPREP *rowprep)
void SCIProwprepAddConstant(SCIP_ROWPREP *rowprep, SCIP_Real constant)
SCIP_RETCODE SCIPgetRowprepRowSepa(SCIP *scip, SCIP_ROW **row, SCIP_ROWPREP *rowprep, SCIP_SEPA *sepa)
SCIP_RETCODE SCIPaddRowprepTerm(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_VAR *var, SCIP_Real coef)
SCIP_RETCODE SCIPcreateRowprep(SCIP *scip, SCIP_ROWPREP **rowprep, SCIP_SIDETYPE sidetype, SCIP_Bool local)
void SCIProwprepAddSide(SCIP_ROWPREP *rowprep, SCIP_Real side)
SCIP_RETCODE SCIPcleanupRowprep(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_SOL *sol, SCIP_Real minviol, SCIP_Real *viol, SCIP_Bool *success)
void SCIPfreeRowprep(SCIP *scip, SCIP_ROWPREP **rowprep)
SCIP_RETCODE SCIPincludeSepaInterminor(SCIP *scip)
void SCIPsortInt(int *intarray, int len)
#define BMSclearMemory(ptr)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
#define SCIPstatisticMessage
static SCIP_RETCODE insertIndex(SCIP *scip, SCIP_HASHMAP *rowmap, SCIP_VAR *row, SCIP_VAR *col, SCIP_VAR *auxvar, int *rowindices, int *nrows)
static SCIP_Real computeIntersectionPoint(SCIP *scip, SCIP_Bool usebounds, SCIP_Real *coefs, SCIP_Real *coefs4b, SCIP_Real *coefscondition)
#define DEFAULT_USEBOUNDS
static SCIP_DECL_SEPAINIT(sepaInitMinor)
#define DEFAULT_USESTRENGTHENING
static SCIP_RETCODE addRows(SCIP *scip, SCIP_VAR **vars, SCIP_Real **tableaurows, SCIP_ROWPREP *rowprep, SCIP_Real *rays, int *nrays, int *rayslppos, SCIP_Real *interpoints, SCIP_Bool usebounds, SCIP_Real *ad, SCIP_Bool *success)
static SCIP_RETCODE getMinorVars(SCIP_SEPADATA *sepadata, int idx, SCIP_VAR **auxvarxik, SCIP_VAR **auxvarxil, SCIP_VAR **auxvarxjk, SCIP_VAR **auxvarxjl, SCIP_Bool *isauxvarxikdiag, SCIP_Bool *isauxvarxildiag, SCIP_Bool *isauxvarxjkdiag, SCIP_Bool *isauxvarxjldiag)
static SCIP_DECL_SEPAEXECLP(sepaExeclpMinor)
static SCIP_RETCODE sepadataClear(SCIP *scip, SCIP_SEPADATA *sepadata)
static SCIP_RETCODE findRho(SCIP *scip, SCIP_Real *rays, int nrays, int idx, SCIP_Real *interpoints, SCIP_VAR **vars, SCIP_Real *rho, SCIP_Bool usebounds, SCIP_Real *ad, SCIP_Bool *success)
#define DEFAULT_MAXROUNDSROOT
static SCIP_RETCODE getTableauRows(SCIP *scip, SCIP_VAR **vars, int *basicvarpos2tableaurow, SCIP_HASHMAP *tableau, SCIP_Real **tableaurows, SCIP_Bool *success)
static SCIP_DECL_SEPAFREE(sepaFreeMinor)
static SCIP_DECL_SEPACOPY(sepaCopyMinor)
static SCIP_Real isCase4a(SCIP_Real tsol, SCIP_Real *coefs, SCIP_Real *coefscondition)
static SCIP_RETCODE addRowToCut(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_Real cutcoef, SCIP_ROW *row, SCIP_Bool *success)
static SCIP_RETCODE separateDeterminant(SCIP *scip, SCIP_SEPA *sepa, SCIP_SEPADATA *sepadata, SCIP_VAR *xik, SCIP_VAR *xil, SCIP_VAR *xjk, SCIP_VAR *xjl, SCIP_Bool *isxikdiag, SCIP_Bool *isxildiag, SCIP_Bool *isxjkdiag, SCIP_Bool *isxjldiag, int *basicvarpos2tableaurow, SCIP_HASHMAP *tableau, SCIP_RESULT *result)
static SCIP_DECL_SEPAEXITSOL(sepaExitsolMinor)
static SCIP_Real computeRoot(SCIP *scip, SCIP_Real *coefs)
static SCIP_Real evalPhiAtRay(SCIP *scip, SCIP_Real t, SCIP_Real a, SCIP_Real b, SCIP_Real c, SCIP_Real d, SCIP_Real e)
#define DEFAULT_MINCUTVIOL
static SCIP_RETCODE detectMinors(SCIP *scip, SCIP_SEPADATA *sepadata)
static SCIP_RETCODE sepadataAddMinor(SCIP *scip, SCIP_SEPADATA *sepadata, SCIP_VAR *auxvarxik, SCIP_VAR *auxvarxil, SCIP_VAR *auxvarxjk, SCIP_VAR *auxvarxjl, SCIP_Bool isauxvarxikdiag, SCIP_Bool isauxvarxildiag, SCIP_Bool isauxvarxjkdiag, SCIP_Bool isauxvarxjldiag)
#define SEPA_MAXBOUNDDIST
static SCIP_RETCODE addCols(SCIP *scip, SCIP_VAR **vars, SCIP_Real **tableaurows, SCIP_ROWPREP *rowprep, SCIP_Real *rays, int *nrays, int *rayslppos, SCIP_Real *interpoints, SCIP_Bool usebounds, SCIP_Real *ad, SCIP_Bool *success)
static SCIP_DECL_SEPAEXIT(sepaExitMinor)
static SCIP_DECL_SEPAINITSOL(sepaInitsolMinor)
#define BINSEARCH_MAXITERS
#define DEFAULT_MAXROUNDS
static SCIP_RETCODE computeNegCutcoefs(SCIP *scip, SCIP_VAR **vars, SCIP_Real *rays, int nrays, int *rayslppos, SCIP_Real *interpoints, SCIP_ROWPREP *rowprep, SCIP_Bool usebounds, SCIP_Real *ad, SCIP_Bool *success)
static void doBinarySearch(SCIP *scip, SCIP_Real a, SCIP_Real b, SCIP_Real c, SCIP_Real d, SCIP_Real e, SCIP_Real *sol)
static SCIP_RETCODE addColToCut(SCIP *scip, SCIP_ROWPREP *rowprep, SCIP_Real cutcoef, SCIP_COL *col)
static SCIP_RETCODE constructBasicVars2TableauRowMap(SCIP *scip, int *map)
static SCIP_RETCODE computeRestrictionToRay(SCIP *scip, SCIP_Real *ray, SCIP_VAR **vars, SCIP_Real *coefs, SCIP_Real *coefs4b, SCIP_Real *coefscondition, SCIP_Bool usebounds, SCIP_Real *ad, SCIP_Bool *success)
static SCIP_Bool raysAreDependent(SCIP *scip, SCIP_Real *ray1, SCIP_Real *ray2, SCIP_Real *coef)
static SCIP_RETCODE separatePoint(SCIP *scip, SCIP_SEPA *sepa, SCIP_RESULT *result)
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