66#define READER_NAME "pipreader"
67#define READER_DESC "file reader for polynomial mixed-integer programs in PIP format"
68#define READER_EXTENSION "pip"
74#define PIP_MAX_LINELEN 65536
75#define PIP_MAX_PUSHEDTOKENS 2
76#define PIP_INIT_MONOMIALSSIZE 128
77#define PIP_INIT_FACTORSSIZE 16
78#define PIP_MAX_PRINTLEN 561
79#define PIP_MAX_NAMELEN 256
80#define PIP_PRINTLEN 100
157 SCIPerrorMessage(
"Syntax error in line %d: %s ('%s')\n", pipinput->linenumber, msg, pipinput->token);
158 if( pipinput->linebuf[strlen(pipinput->linebuf)-1] ==
'\n' )
166 (void)
SCIPsnprintf(formatstr, 256,
" %%%ds\n", pipinput->linepos);
169 pipinput->haserror =
TRUE;
180 return pipinput->haserror;
214 if( isdigit((
unsigned char)
c) )
216 else if( (*exptype ==
PIP_EXP_NONE) && !(*hasdot) && (
c ==
'.') && isdigit((
unsigned char)nextc) )
221 else if( !firstchar && (*exptype ==
PIP_EXP_NONE) && (
c ==
'e' ||
c ==
'E') )
223 if( nextc ==
'+' || nextc ==
'-' )
228 else if( isdigit((
unsigned char)nextc) )
261 pipinput->linepos = 0;
263 if(
SCIPfgets(pipinput->linebuf, (
int)
sizeof(pipinput->linebuf), pipinput->file) ==
NULL )
265 pipinput->linenumber++;
269 pipinput->haserror =
TRUE;
280 if( commentstart !=
NULL )
282 *commentstart =
'\0';
283 *(commentstart+1) =
'\0';
300 *pointer1 = *pointer2;
320 if( pipinput->npushedtokens > 0 )
322 swapPointers(&pipinput->token, &pipinput->pushedtokens[pipinput->npushedtokens-1]);
323 pipinput->npushedtokens--;
324 SCIPdebugMsg(
scip,
"(line %d) read token again: '%s'\n", pipinput->linenumber, pipinput->token);
329 buf = pipinput->linebuf;
332 if( buf[pipinput->linepos] ==
'\0' )
340 assert(pipinput->linepos == 0);
351 if(
isValueChar(buf[pipinput->linepos], buf[pipinput->linepos+1],
TRUE, &hasdot, &exptype) )
359 pipinput->token[tokenlen] = buf[pipinput->linepos];
363 while(
isValueChar(buf[pipinput->linepos], buf[pipinput->linepos+1],
FALSE, &hasdot, &exptype) );
372 pipinput->token[tokenlen] = buf[pipinput->linepos];
375 if( tokenlen == 1 &&
isTokenChar(pipinput->token[0]) )
384 && (pipinput->token[tokenlen-1] ==
'<' || pipinput->token[tokenlen-1] ==
'>' || pipinput->token[tokenlen-1] ==
'=')
385 && buf[pipinput->linepos] ==
'=' )
389 else if( pipinput->token[tokenlen-1] ==
'=' && (buf[pipinput->linepos] ==
'<' || buf[pipinput->linepos] ==
'>') )
391 pipinput->token[tokenlen-1] = buf[pipinput->linepos];
396 pipinput->token[tokenlen] =
'\0';
398 SCIPdebugMsg(
scip,
"(line %d) read token: '%s'\n", pipinput->linenumber, pipinput->token);
412 swapPointers(&pipinput->pushedtokens[pipinput->npushedtokens], &pipinput->token);
413 pipinput->npushedtokens++;
425 swapPointers(&pipinput->pushedtokens[pipinput->npushedtokens], &pipinput->tokenbuf);
426 pipinput->npushedtokens++;
458 iscolon = (strcmp(pipinput->token,
":") == 0);
473 SCIPdebugMsg(
scip,
"(line %d) new section: OBJECTIVE\n", pipinput->linenumber);
483 SCIPdebugMsg(
scip,
"(line %d) new section: OBJECTIVE\n", pipinput->linenumber);
497 SCIPdebugMsg(
scip,
"(line %d) new section: CONSTRAINTS\n", pipinput->linenumber);
515 SCIPdebugMsg(
scip,
"(line %d) new section: CONSTRAINTS\n", pipinput->linenumber);
529 SCIPdebugMsg(
scip,
"(line %d) new section: CONSTRAINTS\n", pipinput->linenumber);
537 SCIPdebugMsg(
scip,
"(line %d) new section: BOUNDS\n", pipinput->linenumber);
549 SCIPdebugMsg(
scip,
"(line %d) new section: GENERALS\n", pipinput->linenumber);
558 SCIPdebugMsg(
scip,
"(line %d) new section: BINARIES\n", pipinput->linenumber);
582 assert(*sign == +1 || *sign == -1);
584 if( pipinput->token[1] ==
'\0' )
586 if( *pipinput->token ==
'+' )
588 else if( *pipinput->token ==
'-' )
619 val = strtod(pipinput->token, &endptr);
620 if( endptr != pipinput->token && *endptr ==
'\0' )
639 if( strcmp(pipinput->token,
"<") == 0 )
645 else if( strcmp(pipinput->token,
">") == 0 )
651 else if( strcmp(pipinput->token,
"=") == 0 )
691 if( created !=
NULL )
694 else if( created !=
NULL )
737 assert(*monomials !=
NULL || *monomialssize == 0);
739 if( minnmonomials <= *monomialssize )
744 if( *monomials !=
NULL )
752 if( *monomialscoef !=
NULL )
760 *monomialssize = newsize;
781 assert(*exponents !=
NULL || *factorssize == 0);
784 if( minnfactors <= *factorssize )
789 if( *exponents !=
NULL )
799 *factorssize = newsize;
864 if( strcmp(pipinput->token,
":") == 0 )
868 SCIPdebugMsg(
scip,
"(line %d) read constraint name: '%s'\n", pipinput->linenumber, name);
916 ((nfactors > 0 || havevalue) && (issign =
isSign(pipinput, &nextcoefsign))) )
921 if( coefsign * coef != 0.0 )
925 monomialscoef[nmonomials] = coefsign * coef;
931 constant += coefsign * coef;
934 if( monomialdegree > 1 )
960 coefsign = nextcoefsign;
961 SCIPdebugMsg(
scip,
"(line %d) read coefficient sign: %+d\n", pipinput->linenumber, coefsign);
969 if(
isSign(pipinput, &coefsign) )
971 SCIPdebugMsg(
scip,
"(line %d) read coefficient sign: %+d\n", pipinput->linenumber, coefsign);
973 if( nfactors > 0 || havevalue )
975 syntaxError(
scip, pipinput,
"sign can only be at beginning of monomial");
976 goto TERMINATE_READPOLYNOMIAL;
984 if( strcmp(pipinput->token,
"*") == 0 )
988 syntaxError(
scip, pipinput,
"cannot have '*' before first variable in monomial");
989 goto TERMINATE_READPOLYNOMIAL;
996 if( nmonomials > 0 && !havesign )
998 syntaxError(
scip, pipinput,
"expected sign ('+' or '-') or sense ('<' or '>')");
999 goto TERMINATE_READPOLYNOMIAL;
1003 if( strcmp(pipinput->token,
"^") == 0 )
1008 goto TERMINATE_READPOLYNOMIAL;
1012 syntaxError(
scip, pipinput,
"cannot have '^' before first variable in monomial");
1013 goto TERMINATE_READPOLYNOMIAL;
1015 exponents[nfactors-1] = exponent;
1017 monomialdegree += (int)exponent - 1;
1021 SCIPdebugMsg(
scip,
"(line %d) read exponent value %g for variable %s\n", pipinput->linenumber, exponent,
1029 SCIPdebugMsg(
scip,
"(line %d) read coefficient value: %g with sign %+d\n", pipinput->linenumber, coef, coefsign);
1034 goto TERMINATE_READPOLYNOMIAL;
1039 syntaxError(
scip, pipinput,
"coefficients can only be at the beginning of a monomial");
1040 goto TERMINATE_READPOLYNOMIAL;
1055 exponents[nfactors] = 1.0;
1062 syntaxError(
scip, pipinput,
"string ended before monomial has finished");
1063 goto TERMINATE_READPOLYNOMIAL;
1070 for(
i = 0;
i < nmonomials; ++
i )
1082 TERMINATE_READPOLYNOMIAL:
1138 if( constant != 0.0 )
1202 SCIP_CALL(
SCIPcreateConsNonlinear(
scip, &nonlinobjcons,
"nonlinobj", expr, lhs, rhs, initial,
separate, enforce, check,
propagate, local, modifiable, dynamic, removable) );
1259 syntaxError(
scip, pipinput,
"expected constraint sense '<=', '=', or '>='");
1269 if ( !
isSense(pipinput, &sense) )
1271 syntaxError(
scip, pipinput,
"expected constraint sense '<=', '=', or '>='");
1282 if (
isSign(pipinput, &sidesign) )
1295 sidevalue *= sidesign;
1298 initial = pipinput->initialconss;
1305 dynamic = pipinput->dynamicconss;
1306 removable = pipinput->dynamicrows;
1346 for(
i = 0;
i < nchildren; ++
i )
1363 SCIP_CALL(
SCIPcreateConsLinear(
scip, &cons, name, nchildren,
vars, coefs, lhs, rhs, initial,
separate, enforce,
1364 check,
propagate, local, modifiable, dynamic, removable,
FALSE) );
1371 SCIP_CALL(
SCIPcreateConsNonlinear(
scip, &cons, name, expr, lhs, rhs, initial,
separate, enforce, check,
propagate,
1372 local, modifiable, dynamic, removable) );
1378 SCIPdebugMsg(
scip,
"(line %d) created constraint: ", pipinput->linenumber);
1421 hassign =
isSign(pipinput, &sign);
1434 syntaxError(
scip, pipinput,
"expected bound sense '<=', '=', or '>='");
1478 if(
isSense(pipinput, &rightsense) )
1493 hassign =
isSign(pipinput, &sign);
1508 switch( rightsense )
1536 syntaxError(
scip, pipinput,
"variable with bound is marked as 'free'");
1646 const char* filename
1652 pipinput->file =
SCIPfopen(filename,
"r");
1653 if( pipinput->file ==
NULL )
1667 switch( pipinput->section )
1761 if( requiredsize > *
nvars )
1779 for( v = 0; v < *
nvars; ++v )
1789 *constant += (*scalars)[v];
1790 (*scalars)[v] *= -1.0;
1881 linebuffer[0] =
'\0';
1898 if( (*linecnt) > 0 )
1900 linebuffer[(*linecnt)] =
'\0';
1914 const char* extension
1927 (void) strncat(linebuffer, extension,
PIP_MAX_PRINTLEN - strlen(linebuffer));
1929 (*linecnt) += (int) strlen(extension);
1931 SCIPdebugMsg(
scip,
"linebuffer <%s>, length = %lu\n", linebuffer, (
unsigned long)strlen(linebuffer));
1943 const char* rowname,
1944 const char* rownameextension,
1964 assert( strcmp(type,
"=") == 0 || strcmp(type,
"<=") == 0 || strcmp(type,
">=") == 0 );
1973 if ( strlen(rowname) > 0 || strlen(rownameextension) > 0 )
1980 for( v = 0; v < nlinvars; ++v )
2001 if( quadexpr !=
NULL )
2009 int nbilinexprterms;
2021 nactivevars = nlinexprs;
2023 for( v = 0; v < nlinexprs; ++v )
2034 constant += activeconstant;
2037 for( v = 0; v < nactivevars; ++v )
2044 var = activevars[v];
2066 for( v = 0; v < nquadexprs; ++v )
2080 if( lincoef == 0.0 )
2094 for( v = 0; v < nquadexprs; ++v )
2108 if( sqrcoef == 0.0 )
2122 for( v = 0; v < nbilinexprterms; ++v )
2199 else if( coef == 1.0 && needsign )
2203 else if( coef == -1.0 )
2265 const char* rowname,
2266 const char* rownameextension,
2278 assert(strcmp(type,
"=") == 0 || strcmp(type,
"<=") == 0 || strcmp(type,
">=") == 0);
2287 if( strlen(rowname) > 0 || strlen(rownameextension) > 0 )
2333 const char* rowname,
2351 if( strlen(rowname) > 0 )
2381 const char* rowname,
2407 nactivevars = nlinvars;
2412 if( linvals !=
NULL )
2420 for( v = 0; v < nactivevars; ++v )
2421 activevals[v] = 1.0;
2435 rhs - activeconstant, transformed) );
2443 activevals, nactivevars, quadexpr, lhs - activeconstant, transformed) );
2449 activevals, nactivevars, quadexpr, rhs - activeconstant, transformed) );
2468 const char* rowname,
2512 int* nAggregatedVars,
2520 for (j = 0; j <
nvars; ++j)
2537 (*aggregatedVars)[(*nAggregatedVars)++] =
var;
2554 int nAggregatedVars,
2572 for (j = 0; j < nAggregatedVars; ++j)
2577 activevars[0] = aggregatedVars[j];
2578 activevals[0] = 1.0;
2579 activeconstant = 0.0;
2584 activevals[nactivevars] = -1.0;
2585 activevars[nactivevars] = aggregatedVars[j];
2590 SCIP_CALL(
printRow(
scip, file, consname,
"",
"=", activevars, activevals, nactivevars,
NULL, - activeconstant,
2624 if( isdigit((
unsigned char)name[0]) )
2627 for(
i = 0;
i < len; ++
i )
2630 if( isalnum((
unsigned char)name[
i]) )
2658 for( v = 0; v <
nvars; ++v )
2680 const char* conshdlrname;
2685 for(
c = 0;
c < nconss; ++
c )
2706 if( strcmp(conshdlrname,
"linear") == 0 )
2755 const char* conshdlrname;
2764 int nAggregatedVars;
2779 int nintegers =
nvars - ncontvars;
2782 nAggregatedVars = 0;
2794 assert(implintlevel >= -2);
2795 assert(implintlevel <= 2);
2800 SCIPinfoMessage(
scip, file,
"\\ Variables : %d (%d binary, %d integer, %d implicit integer, %d continuous)\n",
2801 nvars, nbinvars, nintvars, nimplvars, ncontvars);
2810 for (v = 0; v <
nvars; ++v)
2851 for (
c = 0;
c < nconss; ++
c)
2866 if( strcmp(conshdlrname,
"linear") == 0 )
2872 else if( strcmp(conshdlrname,
"setppc") == 0 )
2881 consvars,
NULL, nconsvars,
NULL, 1.0, 1.0, transformed) );
2893 else if ( strcmp(conshdlrname,
"logicor") == 0 )
2899 else if ( strcmp(conshdlrname,
"knapsack") == 0 )
2909 for( v = 0; v < nconsvars; ++v )
2917 else if ( strcmp(conshdlrname,
"varbound") == 0 )
2934 else if( strcmp(conshdlrname,
"nonlinear") == 0 )
2984 consNonlinear[nConsNonlinear++] = cons;
2987 if( simplifiedexpr !=
NULL )
2992 else if( strcmp(conshdlrname,
"and") == 0 )
2996 consAnd[nConsAnd++] = cons;
3012 for(
c = 0;
c < nConsNonlinear; ++
c )
3020 if( ntmpvars > tmpvarssize )
3032 for (
c = 0;
c < nConsAnd; ++
c)
3049 for (v = 0; v <
nvars; ++v)
3098 for (v = 0; v < nAggregatedVars; ++v)
3100 var = aggregatedVars[v];
3116 for( v = 0; v < nintegers; ++v )
3142 for( v = nbinvars; v < nintegers; ++v )
3226 nvars, nbinvars, nintvars, nimplvars, ncontvars, conss, nconss,
result) );
3259 const char* filename,
3274 pipinput.file =
NULL;
3275 pipinput.linebuf[0] =
'\0';
3276 pipinput.probname[0] =
'\0';
3277 pipinput.objname[0] =
'\0';
3279 pipinput.token[0] =
'\0';
3281 pipinput.tokenbuf[0] =
'\0';
3287 pipinput.npushedtokens = 0;
3288 pipinput.linenumber = 0;
3289 pipinput.linepos = 0;
3292 pipinput.haserror =
FALSE;
3314 if( pipinput.haserror )
Constraint handler for AND constraints, .
Constraint handler for knapsack constraints of the form , x binary and .
Constraint handler for linear constraints in their most general form, .
Constraint handler for logicor constraints (equivalent to set covering, but algorithms are suited fo...
constraint handler for nonlinear constraints specified by algebraic expressions
Constraint handler for the set partitioning / packing / covering constraints .
Constraint handler for variable bound constraints .
#define SCIP_STRINGEQ(name, reference, retcode)
variable expression handler
SCIP_FILE * SCIPfopen(const char *path, const char *mode)
int SCIPfclose(SCIP_FILE *fp)
char * SCIPfgets(char *s, int size, SCIP_FILE *stream)
int SCIPgetNVarsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetVbdcoefVarbound(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetRhsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetLhsLinear(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR * SCIPgetResultantAnd(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsAnd(SCIP *scip, SCIP_CONS *cons)
SCIP_Real * SCIPgetValsLinear(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR * SCIPgetVbdvarVarbound(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_EXPR * SCIPgetExprNonlinear(SCIP_CONS *cons)
SCIP_Real SCIPgetRhsNonlinear(SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable)
SCIP_VAR * SCIPgetVarVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_Longint * SCIPgetWeightsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_Longint SCIPgetCapacityKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetLhsVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_SETPPCTYPE SCIPgetTypeSetppc(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsLinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_VAR ** SCIPgetVarsLogicor(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetRhsVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsAnd(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_Real SCIPgetLhsNonlinear(SCIP_CONS *cons)
@ SCIP_SETPPCTYPE_PARTITIONING
@ SCIP_SETPPCTYPE_COVERING
@ SCIP_SETPPCTYPE_PACKING
SCIP_RETCODE SCIPcreateExprVar(SCIP *scip, SCIP_EXPR **expr, SCIP_VAR *var, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
void SCIPsetConstantExprSum(SCIP_EXPR *expr, SCIP_Real constant)
SCIP_RETCODE SCIPappendExprSumExpr(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPR *child, SCIP_Real childcoef)
SCIP_RETCODE SCIPcreateExprSum(SCIP *scip, SCIP_EXPR **expr, int nchildren, SCIP_EXPR **children, SCIP_Real *coefficients, SCIP_Real constant, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPwritePip(SCIP *scip, FILE *file, const char *name, SCIP_Bool transformed, SCIP_OBJSENSE objsense, SCIP_Real objscale, SCIP_Real objoffset, SCIP_VAR **vars, int nvars, int nbinvars, int nintvars, int nimplvars, int ncontvars, SCIP_CONS **conss, int nconss, SCIP_RESULT *result)
SCIP_RETCODE SCIPreadPip(SCIP *scip, SCIP_READER *reader, const char *filename, SCIP_RESULT *result)
SCIP_RETCODE SCIPincludeReaderPip(SCIP *scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPsetObjsense(SCIP *scip, SCIP_OBJSENSE objsense)
SCIP_RETCODE SCIPcreateProb(SCIP *scip, const char *name, SCIP_DECL_PROBDELORIG((*probdelorig)), SCIP_DECL_PROBTRANS((*probtrans)), SCIP_DECL_PROBDELTRANS((*probdeltrans)), SCIP_DECL_PROBINITSOL((*probinitsol)), SCIP_DECL_PROBEXITSOL((*probexitsol)), SCIP_DECL_PROBCOPY((*probcopy)), SCIP_PROBDATA *probdata)
int SCIPgetNTotalVars(SCIP *scip)
SCIP_VAR * SCIPfindVar(SCIP *scip, const char *name)
void SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
SCIP_Bool SCIPhashtableExists(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPhashtableCreate(SCIP_HASHTABLE **hashtable, BMS_BLKMEM *blkmem, int tablesize, SCIP_DECL_HASHGETKEY((*hashgetkey)), SCIP_DECL_HASHKEYEQ((*hashkeyeq)), SCIP_DECL_HASHKEYVAL((*hashkeyval)), void *userptr)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPverbMessage(SCIP *scip, SCIP_VERBLEVEL msgverblevel, FILE *file, const char *formatstr,...)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_RETCODE SCIPgetBoolParam(SCIP *scip, const char *name, SCIP_Bool *value)
SCIP_RETCODE SCIPgetIntParam(SCIP *scip, const char *name, int *value)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPgetConsNVars(SCIP *scip, SCIP_CONS *cons, int *nvars, SCIP_Bool *success)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_RETCODE SCIPprintCons(SCIP *scip, SCIP_CONS *cons, FILE *file)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
SCIP_RETCODE SCIPgetConsVars(SCIP *scip, SCIP_CONS *cons, SCIP_VAR **vars, int varssize, SCIP_Bool *success)
SCIP_Bool SCIPconsIsEnabled(SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
SCIP_RETCODE SCIPcreateExprMonomial(SCIP *scip, SCIP_EXPR **expr, int nfactors, SCIP_VAR **vars, SCIP_Real *exponents, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
int SCIPexprGetNChildren(SCIP_EXPR *expr)
void SCIPexprGetQuadraticBilinTerm(SCIP_EXPR *expr, int termidx, SCIP_EXPR **expr1, SCIP_EXPR **expr2, SCIP_Real *coef, int *pos2, SCIP_EXPR **prodexpr)
SCIP_Real SCIPgetExponentExprPow(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprProduct(SCIP *scip, SCIP_EXPR *expr)
SCIP_Bool SCIPisExprSum(SCIP *scip, SCIP_EXPR *expr)
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_Real * SCIPgetCoefsExprSum(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprValue(SCIP *scip, SCIP_EXPR *expr)
SCIP_Real SCIPgetCoefExprProduct(SCIP_EXPR *expr)
SCIP_RETCODE SCIPreleaseExpr(SCIP *scip, SCIP_EXPR **expr)
SCIP_Bool SCIPisExprVar(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPprintExpr(SCIP *scip, SCIP_EXPR *expr, FILE *file)
SCIP_Real SCIPgetValueExprValue(SCIP_EXPR *expr)
SCIP_Bool SCIPisExprPower(SCIP *scip, SCIP_EXPR *expr)
SCIP_RETCODE SCIPcheckExprQuadratic(SCIP *scip, SCIP_EXPR *expr, SCIP_Bool *isquadratic)
SCIP_EXPR ** SCIPexprGetChildren(SCIP_EXPR *expr)
SCIP_Real SCIPgetConstantExprSum(SCIP_EXPR *expr)
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)
SCIP_RETCODE SCIPduplicateExpr(SCIP *scip, SCIP_EXPR *expr, SCIP_EXPR **copyexpr, SCIP_DECL_EXPR_MAPEXPR((*mapexpr)), void *mapexprdata, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
SCIP_RETCODE SCIPsimplifyExpr(SCIP *scip, SCIP_EXPR *rootexpr, SCIP_EXPR **simplified, SCIP_Bool *changed, SCIP_Bool *infeasible, SCIP_DECL_EXPR_OWNERCREATE((*ownercreate)), void *ownercreatedata)
#define SCIPfreeBlockMemoryArray(scip, ptr, num)
BMS_BLKMEM * SCIPblkmem(SCIP *scip)
int SCIPcalcMemGrowSize(SCIP *scip, int num)
#define SCIPallocBufferArray(scip, ptr, num)
#define SCIPreallocBufferArray(scip, ptr, num)
#define SCIPfreeBufferArray(scip, ptr)
#define SCIPduplicateBufferArray(scip, ptr, source, num)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
SCIP_RETCODE SCIPsetReaderCopy(SCIP *scip, SCIP_READER *reader,)
SCIP_RETCODE SCIPincludeReaderBasic(SCIP *scip, SCIP_READER **readerptr, const char *name, const char *desc, const char *extension, SCIP_READERDATA *readerdata)
SCIP_RETCODE SCIPsetReaderWrite(SCIP *scip, SCIP_READER *reader,)
SCIP_RETCODE SCIPsetReaderRead(SCIP *scip, SCIP_READER *reader,)
const char * SCIPreaderGetName(SCIP_READER *reader)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(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_RETCODE SCIPvarGetOrigvarSum(SCIP_VAR **var, SCIP_Real *scalar, SCIP_Real *constant)
SCIP_VAR * SCIPvarGetNegatedVar(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarLb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbOriginal(SCIP_VAR *var)
SCIP_RETCODE SCIPchgVarUb(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
int SCIPvarGetIndex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbOriginal(SCIP_VAR *var)
SCIP_RETCODE SCIPreleaseVar(SCIP *scip, SCIP_VAR **var)
SCIP_RETCODE SCIPgetProbvarLinearSum(SCIP *scip, SCIP_VAR **vars, SCIP_Real *scalars, int *nvars, int varssize, SCIP_Real *constant, int *requiredsize)
SCIP_RETCODE SCIPchgVarType(SCIP *scip, SCIP_VAR *var, SCIP_VARTYPE vartype, SCIP_Bool *infeasible)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_RETCODE SCIPcreateVar(SCIP *scip, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, SCIP_Real obj, SCIP_VARTYPE vartype, SCIP_Bool initial, SCIP_Bool removable, SCIP_DECL_VARDELORIG((*vardelorig)), SCIP_DECL_VARTRANS((*vartrans)), SCIP_DECL_VARDELTRANS((*vardeltrans)), SCIP_DECL_VARCOPY((*varcopy)), SCIP_VARDATA *vardata)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_IMPLINTTYPE SCIPvarGetImplType(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 SCIPchgVarObj(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
int SCIPstrcasecmp(const char *s1, const char *s2)
int SCIPsnprintf(char *t, int len, const char *s,...)
void SCIPprintSysError(const char *message)
int SCIPstrncpy(char *t, const char *s, int size)
assert(minobj< SCIPgetCutoffbound(scip))
static SCIP_Bool propagate
static const SCIP_Real scalars[]
memory allocation routines
#define BMSclearMemoryArray(ptr, num)
public methods for managing constraints
public functions to work with algebraic expressions
wrapper functions to map file i/o to standard or zlib file i/o
struct SCIP_File SCIP_FILE
public methods for message output
#define SCIPdebugPrintCons(x, y, z)
public data structures and miscellaneous methods
public methods for NLP management
public methods for input file readers
public methods for problem variables
static SCIP_Bool hasError(LPINPUT *lpinput)
static const char commentchars[]
static SCIP_Bool isTokenChar(char c)
static const char tokenchars[]
static const char delimchars[]
static SCIP_Bool isExprSignomial(SCIP *scip, SCIP_EXPR *expr)
static SCIP_RETCODE getActiveVariables(SCIP *scip, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, SCIP_Real *constant, SCIP_Bool transformed)
static SCIP_RETCODE readPolynomial(SCIP *scip, PIPINPUT *pipinput, char *name, SCIP_EXPR **expr, SCIP_Bool *islinear, SCIP_Bool *newsection)
#define PIP_MAX_PUSHEDTOKENS
static SCIP_RETCODE getVariable(SCIP *scip, char *name, SCIP_Bool dynamiccols, SCIP_VAR **var, SCIP_Bool *created)
static void clearLine(char *linebuffer, int *linecnt)
static SCIP_Bool hasError(PIPINPUT *pipinput)
static SCIP_Bool isNewSection(SCIP *scip, PIPINPUT *pipinput)
static SCIP_Bool getNextToken(SCIP *scip, PIPINPUT *pipinput)
static SCIP_RETCODE readGenerals(SCIP *scip, PIPINPUT *pipinput)
static SCIP_RETCODE readStart(SCIP *scip, PIPINPUT *pipinput)
static SCIP_Bool isExprPolynomial(SCIP *scip, SCIP_EXPR *expr)
static SCIP_Bool isSign(PIPINPUT *pipinput, int *sign)
static SCIP_Bool getNextLine(SCIP *scip, PIPINPUT *pipinput)
static void checkVarnames(SCIP *scip, SCIP_VAR **vars, int nvars)
static SCIP_RETCODE ensureMonomialsSize(SCIP *scip, SCIP_EXPR ***monomials, SCIP_Real **monomialscoef, int *monomialssize, int minnmonomials)
static void printSignomial(SCIP *scip, FILE *file, char *linebuffer, int *linecnt, SCIP_EXPR *expr, SCIP_Real coef, SCIP_Bool needsign)
static const char namechars[]
static SCIP_RETCODE printAggregatedCons(SCIP *scip, FILE *file, SCIP_Bool transformed, int nvars, int nAggregatedVars, SCIP_VAR **aggregatedVars)
static SCIP_Bool isNameValid(const char *name)
static void swapTokenBuffer(PIPINPUT *pipinput)
static SCIP_Bool isValueChar(char c, char nextc, SCIP_Bool firstchar, SCIP_Bool *hasdot, PIPEXPTYPE *exptype)
static SCIP_RETCODE printNonlinearCons(SCIP *scip, FILE *file, const char *rowname, SCIP_EXPR *expr, SCIP_Real lhs, SCIP_Real rhs)
static SCIP_RETCODE collectAggregatedVars(int nvars, SCIP_VAR **vars, int *nAggregatedVars, SCIP_VAR ***aggregatedVars, SCIP_HASHTABLE **varAggregated)
static SCIP_RETCODE printQuadraticCons(SCIP *scip, FILE *file, const char *rowname, SCIP_VAR **linvars, SCIP_Real *linvals, int nlinvars, SCIP_EXPR *quadexpr, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool transformed)
static SCIP_RETCODE readBinaries(SCIP *scip, PIPINPUT *pipinput)
enum PipSection PIPSECTION
#define PIP_INIT_MONOMIALSSIZE
static SCIP_Bool isSense(PIPINPUT *pipinput, PIPSENSE *sense)
static void pushBufferToken(PIPINPUT *pipinput)
static void endLine(SCIP *scip, FILE *file, char *linebuffer, int *linecnt)
static void pushToken(PIPINPUT *pipinput)
static void syntaxError(SCIP *scip, PIPINPUT *pipinput, const char *msg)
static void printRowAnd(SCIP *scip, FILE *file, const char *rowname, SCIP_CONS *cons)
#define PIP_INIT_FACTORSSIZE
static SCIP_Bool isDelimChar(char c)
static SCIP_RETCODE readConstraints(SCIP *scip, PIPINPUT *pipinput)
static void swapPointers(char **pointer1, char **pointer2)
static void printRowNl(SCIP *scip, FILE *file, const char *rowname, const char *rownameextension, const char *type, SCIP_EXPR *expr, SCIP_Real rhs)
enum PipExpType PIPEXPTYPE
static SCIP_RETCODE printRow(SCIP *scip, FILE *file, const char *rowname, const char *rownameextension, const char *type, SCIP_VAR **linvars, SCIP_Real *linvals, int nlinvars, SCIP_EXPR *quadexpr, SCIP_Real rhs, SCIP_Bool transformed)
static SCIP_RETCODE readObjective(SCIP *scip, PIPINPUT *pipinput)
static SCIP_RETCODE ensureFactorsSize(SCIP *scip, SCIP_VAR ***vars, SCIP_Real **exponents, int *factorssize, int minnfactors)
static SCIP_Bool isValue(SCIP *scip, PIPINPUT *pipinput, SCIP_Real *value)
static void checkConsnames(SCIP *scip, SCIP_CONS **conss, int nconss, SCIP_Bool transformed)
static SCIP_RETCODE readPIPFile(SCIP *scip, PIPINPUT *pipinput, const char *filename)
static void appendLine(SCIP *scip, FILE *file, char *linebuffer, int *linecnt, const char *extension)
static SCIP_RETCODE readBounds(SCIP *scip, PIPINPUT *pipinput)
static SCIP_Bool isTokenChar(char c)
file reader for polynomial mixed-integer programs in PIP format
public methods for constraint handler plugins and constraints
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 reader plugins
public methods for SCIP variables
static SCIP_RETCODE separate(SCIP *scip, SCIP_SEPA *sepa, SCIP_SOL *sol, SCIP_RESULT *result)
Main separation function.
struct SCIP_Cons SCIP_CONS
struct SCIP_Conshdlr SCIP_CONSHDLR
struct SCIP_Expr SCIP_EXPR
#define SCIP_DECL_HASHKEYEQ(x)
#define SCIP_DECL_HASHGETKEY(x)
#define SCIP_DECL_HASHKEYVAL(x)
struct SCIP_HashTable SCIP_HASHTABLE
enum SCIP_Objsense SCIP_OBJSENSE
#define SCIP_DECL_READERWRITE(x)
struct SCIP_Reader SCIP_READER
#define SCIP_DECL_READERREAD(x)
#define SCIP_DECL_READERCOPY(x)
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_VARTYPE_CONTINUOUS
@ SCIP_VARSTATUS_ORIGINAL
@ SCIP_VARSTATUS_MULTAGGR
@ SCIP_VARSTATUS_AGGREGATED
enum SCIP_Varstatus SCIP_VARSTATUS