73#include "scip/cons_alldifferent.h"
76#define READER_NAME "fznreader"
77#define READER_DESC "file reader for FlatZinc format"
78#define READER_EXTENSION "fzn"
81#define FZN_BUFFERLEN 65536
82#define FZN_INIT_LINELEN 65536
83#define FZN_MAX_PUSHEDTOKENS 1
148struct SCIP_ReaderData
167#define CREATE_CONSTRAINT(x) SCIP_RETCODE x (SCIP* scip, FZNINPUT* fzninput, const char* fname, char** ftokens, int nftokens, SCIP_Bool* created)
249 return (
void*) constant->name;
270 for(
i = nelements - 1;
i >= 0; --
i )
301 if( strlen(token) == 1 && *token ==
c )
315 if( strlen(name) == 4 && strncmp(name,
"true", 4) == 0 )
320 else if( strlen(name) == 1 && strncmp(name,
"1", 1) == 0 )
326 else if( strlen(name) == 5 && strncmp(name,
"false", 5) == 0 )
331 else if( strlen(name) == 1 && strncmp(name,
"0", 1) == 0 )
351 if( strlen(name) == 0 || !isalpha((
unsigned char)name[0]) )
357 if( !isalnum((
unsigned char)name[
i]) && name[
i] !=
'_' )
378 if( isdigit((
unsigned char)
c) )
380 else if( firstchar && (
c ==
'+' ||
c ==
'-') )
382 else if( (*exptype ==
FZN_EXP_NONE) && !(*hasdot) && (
c ==
'.') && (isdigit((
unsigned char)nextc)))
387 else if( !firstchar && (*exptype ==
FZN_EXP_NONE) && (
c ==
'e' ||
c ==
'E') )
389 if( nextc ==
'+' || nextc ==
'-' )
394 else if( isdigit((
unsigned char)nextc) )
419 if( strlen(token1) != strlen(token2) )
422 return !strncmp(token1, token2, strlen(token2) );
440 fzninput->linebuf[fzninput->linebufsize - 2] =
'\0';
442 fzninput->linepos = 0;
443 fzninput->bufpos = 0;
445 if(
SCIPfgets(fzninput->linebuf, fzninput->linebufsize, fzninput->file) ==
NULL )
448 fzninput->linenumber++;
450 while( fzninput->linebuf[fzninput->linebufsize - 2] !=
'\0' )
457 fzninput->linebuf[newsize-2] =
'\0';
458 if (
SCIPfgets(fzninput->linebuf + fzninput->linebufsize - 1, newsize - fzninput->linebufsize + 1, fzninput->file) ==
NULL )
460 fzninput->linebufsize = newsize;
463 fzninput->linebuf[fzninput->linebufsize - 1] =
'\0';
464 fzninput->comment =
FALSE;
472 if( commentstart !=
NULL )
474 *commentstart =
'\0';
475 *(commentstart+1) =
'\0';
476 fzninput->comment =
TRUE;
498 assert(fzninput->bufpos < fzninput->linebufsize);
508 if( fzninput->npushedtokens > 0 )
510 SCIPswapPointers((
void**)&fzninput->token, (
void**)&fzninput->pushedtokens[fzninput->npushedtokens-1]);
511 fzninput->npushedtokens--;
512 SCIPdebugMsg(
scip,
"(line %d) read token again: '%s'\n", fzninput->linenumber, fzninput->token);
517 buf = fzninput->linebuf;
520 if( buf[fzninput->bufpos] ==
'\0' )
527 assert(fzninput->bufpos == 0);
529 buf = fzninput->linebuf;
537 assert(fzninput->bufpos < fzninput->linebufsize);
543 if( buf[fzninput->bufpos] ==
'.' && buf[fzninput->bufpos+1] ==
'.')
547 fzninput->bufpos += 2;
548 fzninput->linepos += 2;
549 fzninput->token[0] =
'.';
550 fzninput->token[1] =
'.';
552 else if(
isValueChar(buf[fzninput->bufpos], buf[fzninput->bufpos+1],
TRUE, &hasdot, &exptype) )
558 assert(tokenlen < fzninput->linebufsize);
560 fzninput->token[tokenlen] = buf[fzninput->bufpos];
564 assert(fzninput->bufpos < fzninput->linebufsize);
566 while(
isValueChar(buf[fzninput->bufpos], buf[fzninput->bufpos+1],
FALSE, &hasdot, &exptype) );
568 fzninput->hasdot = hasdot;
576 assert(tokenlen < fzninput->linebufsize);
577 fzninput->token[tokenlen] = buf[fzninput->bufpos];
583 if(tokenlen == 1 && fzninput->token[0] ==
':' && buf[fzninput->bufpos] ==
':')
585 fzninput->token[tokenlen] = buf[fzninput->bufpos];
592 if( tokenlen == 1 &&
isTokenChar(fzninput->token[0]) )
598 assert(tokenlen < fzninput->linebufsize);
599 fzninput->token[tokenlen] =
'\0';
601 SCIPdebugMsg(
scip,
"(line %d) read token: '%s'\n", fzninput->linenumber, fzninput->token);
615 SCIPswapPointers((
void**)&fzninput->pushedtokens[fzninput->npushedtokens], (
void**)&fzninput->token);
616 fzninput->npushedtokens++;
627 return isChar(fzninput->token,
';');
642 val = strtod(token, &endptr);
643 if( endptr != token && *endptr ==
'\0' )
667 SCIPerrorMessage(
"Syntax error in line %d: %s found <%s>\n", fzninput->linenumber, msg, fzninput->token);
670 fzninput->haserror =
TRUE;
681 return (fzninput->haserror || !fzninput->valid);
693 (*readerdata)->vararrays =
NULL;
694 (*readerdata)->nvararrays = 0;
695 (*readerdata)->vararrayssize = 0;
710 nvararrays = readerdata->nvararrays;
711 vararrayssize = readerdata->vararrayssize;
713 if( vararrayssize == nvararrays )
715 if( vararrayssize == 0 )
727 readerdata->vararrayssize = vararrayssize;
742 nvararrays = fzninput->nvararrays;
743 vararrayssize = fzninput->vararrayssize;
745 if( vararrayssize == nvararrays )
747 if( vararrayssize == 0 )
759 fzninput->vararrayssize = vararrayssize;
774 nconstarrays = fzninput->nconstarrays;
775 constarrayssize = fzninput->constarrayssize;
777 if( constarrayssize == nconstarrays )
779 if( constarrayssize == 0 )
781 constarrayssize = 100;
786 constarrayssize *= 2;
791 fzninput->constarrayssize = constarrayssize;
854 (*target)->ndims = source->ndims;
855 (*target)->size = source->ndims;
886 (*vararray)->nvars =
nvars;
887 (*vararray)->type = type;
933 for(
c = 0;
c < fzninput->nvararrays; ++
c )
935 vararray = fzninput->vararrays[
c];
970 (*constarray)->nconstants = nconstants;
971 (*constarray)->type = type;
1006 for(
c = 0;
c < fzninput->nconstarrays; ++
c )
1008 constarray = fzninput->constarrays[
c];
1031 nvararrays = readerdata->nvararrays;
1034 assert(nvararrays < readerdata->vararrayssize);
1054 vararray->info = info;
1055 vararray->nvars = 1;
1056 vararray->type = type;
1058 readerdata->vararrays[nvararrays] = vararray;
1059 readerdata->nvararrays++;
1079 nvararrays = readerdata->nvararrays;
1082 assert(nvararrays < readerdata->vararrayssize);
1087 readerdata->vararrays[nvararrays] = vararray;
1088 readerdata->nvararrays++;
1108 nvararrays = fzninput->nvararrays;
1111 assert(nvararrays < fzninput->vararrayssize);
1116 fzninput->vararrays[nvararrays] = vararray;
1117 fzninput->nvararrays++;
1136 nconstarrays = fzninput->nconstarrays;
1139 assert(nconstarrays < fzninput->constarrayssize);
1144 fzninput->constarrays[nconstarrays] = constarray;
1145 fzninput->nconstarrays++;
1172 quadvars2, quadcoefs, lhs, rhs, initialconss,
TRUE,
TRUE,
TRUE,
TRUE,
FALSE,
FALSE, dynamicconss,
1216 const char* consname,
1241 else if( !
isValue(name1, &value1) )
1248 value1 = constant->value;
1257 else if( !
isValue(name2, &value2) )
1264 value2 = constant->value;
1268 lhs += (value2 - value1);
1271 rhs += (value2 - value1);
1306 if( constant ==
NULL )
1311 *idx = (int) constant->value;
1314 else if(
isValue(fzninput->token, &value) )
1351 syntaxError(
scip, fzninput,
"expecting at least a semicolon to close the statement");
1356 if(
isChar(fzninput->token,
'[') )
1414 *lhs = sidevalue + 1.0;
1419 *rhs = sidevalue - 1.0;
1422 syntaxError(
scip, fzninput,
"unknown relation in constraint identifier name");
1449 if(selements == *nelements)
1496 if( !
isValue(fzninput->token, lb) )
1523 if( fzninput->hasdot != (*type ==
FZN_FLOAT) )
1525 SCIPwarningMessage(
scip,
"lower bound and upper bound mismatch in value type, assume %s variable type\n",
1526 fzninput->hasdot ?
"an integer" :
"a continuous");
1550 (*info)->size = size;
1563 if( fzninput->haserror )
1568 if( nelements == size )
1573 (*info)->size = size;
1577 (*info)->lbs[nelements] = (int) lb;
1578 (*info)->ubs[nelements] = (int) ub;
1582 (*info)->ndims = nelements;
1601 if( output !=
NULL )
1626 syntaxError(
scip, fzninput,
"expected at least a semicolon to close statement");
1633 else if(
equalTokens(fzninput->token,
"output_array") && output !=
NULL)
1643 while( !
isChar(fzninput->token,
'=') );
1684 fzninput->valid =
FALSE;
1695 if( fzninput->haserror )
1711 const char* assignment
1727 if( linkVar ==
NULL )
1732 fixvalue = realvalue;
1733 else if( constant !=
NULL )
1734 fixvalue = constant->value;
1768 const char* assignment
1779 if( *constant !=
NULL )
1782 if( type != (*constant)->type )
1788 value = (*constant)->value;
1807 (*constant)->type = type;
1809 (*constant)->value = value;
1812 if( fzninput->sconstants == fzninput->nconstants )
1814 assert(fzninput->sconstants > 0);
1815 fzninput->sconstants *= 2;
1819 assert(fzninput->sconstants > fzninput->nconstants);
1820 fzninput->constants[fzninput->nconstants] = *constant;
1821 fzninput->nconstants++;
1858 *isvararray =
FALSE;
1878 assert(selements >= *nelements);
1913 syntaxError(
scip, fzninput,
"expected token <[> for array dimension");
1920 if( fzninput->haserror )
1923 if( type !=
FZN_INT || left != 1.0 || right <= 0.0 )
1929 *nelements = (int) right;
1933 syntaxError(
scip, fzninput,
"expected token <]> for array dimension");
2019 for( v = 0; v <
nvars; ++v )
2033 if(
isChar(fzninput->token,
'=') )
2105 for(
c = 0;
c < nconstants; ++
c )
2131 fzninput->comment =
TRUE;
2182 SCIPdebugMsg(
scip,
"found <%s> array named <%s> of type <%s> and size <%d> with bounds [%g,%g] (output %u)\n",
2183 isvararray ?
"variable" :
"constant", name,
2184 type ==
FZN_BOOL ?
"bool" : type ==
FZN_INT ?
"integer" :
"float", nelements, lb, ub, output);
2246 if(
isChar(fzninput->token,
'=') )
2305 const char* assignment
2308 if(
isValue(assignment, value) )
2319 if( constant ==
NULL )
2336 (*value) = constant->value;
2354 assert(*nvals <= sizevals);
2364 if(
isChar(fzninput->token,
'[') )
2381 if( sizevals <= *nvals + nelements )
2386 for(
c = 0;
c < nelements && !
hasError(fzninput); ++
c )
2391 (*vals)[(*nvals)] = value;
2407 if( constarray !=
NULL )
2410 if( sizevals <= *nvals + constarray->nconstants )
2415 for(
c = 0;
c < constarray->nconstants; ++
c )
2417 (*vals)[(*nvals)] = constarray->constants[
c]->value;
2431 if( vararray ==
NULL )
2438 if( sizevals <= *nvals + vararray->
nvars )
2443 for(
c = 0;
c < vararray->nvars; ++
c )
2447 var = vararray->vars[
c];
2457 syntaxError(
scip, fzninput,
"variable array contains unfixed variable");
2489 if(
isChar(fzninput->token,
'[') )
2502 if( sizevars <= *
nvars + nelements )
2507 for( v = 0; v < nelements; ++v )
2523 if( constant !=
NULL )
2526 value = constant->value;
2528 else if(!
isValue(elements[v], &value) )
2532 tmptoken = fzninput->token;
2533 fzninput->token = elements[v];
2536 fzninput->token = tmptoken;
2555 if( vararray !=
NULL )
2560 if( sizevars <= *nvars + vararray->
nvars )
2565 for( v = 0; v < vararray->nvars; ++v )
2567 (*vars)[(*nvars)] = vararray->vars[v];
2608 for( v = 0; v < 3; ++v )
2635 SCIP_CALL(
createQuadraticCons(
scip, name, 1, &
vars[2], &linval, 1, &
vars[0], &
vars[1], &quadval, rhs, rhs,
2636 fzninput->initialconss, fzninput->dynamicconss, fzninput->dynamicrows) );
2641 SCIP_CALL(
createQuadraticCons(
scip, name, 0,
NULL,
NULL, 1, &
vars[0], &
vars[1], &quadval, rhs, rhs,
2642 fzninput->initialconss, fzninput->dynamicconss, fzninput->dynamicrows));
2679 rhs = rhs - vals[0]*vals[1];
2730 assert(nelements == 3 || nelements == 2);
2883 fzninput->valid =
FALSE;
2900 fzninput->valid =
FALSE;
2917 if(
equalTokens(ftokens[0],
"bool") && nftokens == 2 )
2947 for( v = 0; v <
nvars; ++v )
2993 fzninput->valid =
FALSE;
3010 else if(
equalTokens(ftokens[1],
"bool") && nftokens == 3 )
3022 fzninput->valid =
FALSE;
3091 fzninput->valid =
FALSE;
3112 fzninput->valid =
FALSE;
3131 if( strlen(ftokens[nftokens - 1]) != 2 && nftokens != 2 )
3138 fzninput->valid =
FALSE;
3146 fzninput->valid =
FALSE;
3154 SCIPwarningMessage(
scip,
"constraints with '<' or '>' relation and continuous variables are not supported\n");
3155 fzninput->valid =
FALSE;
3307 int* durations =
NULL;
3308 int* demands =
NULL;
3351 for(
i = 0;
i < ndurations; ++
i )
3352 durations[
i] = (
int)vals[
i];
3367 for(
i = 0;
i < ndemads; ++
i )
3368 demands[
i] = (
int)vals[
i];
3384 capacity = (int)val;
3414 createCoercionOpCons,
3416 createLogicalOpCons,
3418 createComparisonOpCons,
3419 createAlldifferentOpCons,
3420 createCumulativeOpCons
3485 while( token !=
NULL )
3497 for(
i = 0;
i < ntokens; ++
i )
3508 SCIP_CALL( constypes[
c](
scip, fzninput, fname, tokens, ntokens, &created) );
3512 if( !
hasError(fzninput) && !created )
3514 fzninput->valid =
FALSE;
3515 SCIPwarningMessage(
scip,
"Line %d: Constraint <%s> is not supported yet.\n", fzninput->linenumber, fname);
3519 for(
i = ntokens - 1;
i >= 0 ; --
i )
3597 else if( constant !=
NULL )
3599 SCIPdebugMsg(
scip,
"optimizing a constant is equal to a satisfiability problem!\n");
3677 for( v = 0; v <
nvars; ++v )
3688 syntaxError(
scip, fzninput,
"unknown identifier expression for a objective function");
3701 const char* filename
3709 fzninput->file =
SCIPfopen(filename,
"r");
3710 if( fzninput->file ==
NULL )
3740 else if(
equalTokens(fzninput->token,
"constraint") )
3764 fzninput->valid =
FALSE;
3815 if( fzninput->comment )
3888 if( requiredsize > *
nvars )
3906 for( v = 0; v < *
nvars; ++v )
3916 *constant += (*scalars)[v];
3917 (*scalars)[v] *= -1.0;
3938 buffer[bufferpos] =
'\0';
3951 const char* extension
3964 extlen = (int)strlen(extension);
3965 newpos = (*bufferpos) + extlen;
3966 if( newpos >= (*bufferlen) )
3968 *bufferlen =
MAX( newpos, 2 * (*bufferlen) );
3974 (void)
SCIPstrncpy((*buffer) + (*bufferpos), extension, extlen + 1);
3975 *bufferpos = newpos;
4014 assert( strcmp(type,
"eq") == 0 || strcmp(type,
"le") == 0 || strcmp(type,
"ge") == 0 );
4017 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->consbuffer), &(fznoutput->consbufferlen), &(fznoutput->consbufferpos),
"constraint ") );
4022 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->consbuffer), &(fznoutput->consbufferlen), &(fznoutput->consbufferpos), buffer) );
4025 for( v = 0; v <
nvars-1; ++v )
4034 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->consbuffer), &(fznoutput->consbufferlen), &(fznoutput->consbufferpos), buffer) );
4048 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->consbuffer), &(fznoutput->consbufferlen), &(fznoutput->consbufferpos), buffer) );
4051 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->consbuffer), &(fznoutput->consbufferlen), &(fznoutput->consbufferpos),
"], [") );
4054 for( v = 0; v <
nvars-1; ++v )
4063 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->consbuffer), &(fznoutput->consbufferlen), &(fznoutput->consbufferpos), buffer) );
4076 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->consbuffer), &(fznoutput->consbufferlen), &(fznoutput->consbufferpos),buffer) );
4079 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->consbuffer), &(fznoutput->consbufferlen), &(fznoutput->consbufferpos),
"], ") );
4092 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->consbuffer), &(fznoutput->consbufferlen), &(fznoutput->consbufferpos),buffer) );
4114 int nactivevars = 0;
4131 nactivevars =
nvars;
4143 for( v = 0; v < nactivevars; ++v )
4144 activevals[v] = 1.0;
4160 for( v = 0; v < nactivevars && !hasfloats; v++ )
4165 var = activevars[v];
4173 for( v = 0; v < nactivevars; v++ )
4179 var = activevars[v];
4184 if( fznoutput->vardiscrete[idx] && !fznoutput->varhasfloat[idx] )
4189 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->varbuffer), &(fznoutput->varbufferlen), &(fznoutput->varbufferpos),buffer) );
4192 SCIP_CALL(
appendBuffer(
scip, &(fznoutput->castbuffer), &(fznoutput->castbufferlen), &(fznoutput->castbufferpos),buffer) );
4194 fznoutput->varhasfloat[idx] =
TRUE;
4204 SCIP_CALL(
printRow(
scip, fznoutput,
"eq", activevars, activevals, nactivevars, rhs - activeconstant, hasfloats) );
4211 SCIP_CALL(
printRow(
scip, fznoutput,
"ge", activevars, activevals, nactivevars, lhs - activeconstant, hasfloats) );
4217 SCIP_CALL(
printRow(
scip, fznoutput,
"le", activevars, activevals, nactivevars, rhs - activeconstant, hasfloats) );
4254 const char* conshdlrname;
4281 assert(implintlevel >= -2);
4282 assert(implintlevel <= 2);
4287 SCIPinfoMessage(
scip, file,
"%% Variables : %d (%d binary, %d integer, %d implicit integer, %d continuous)\n",
4288 nvars, nbinvars, nintvars, nimplvars, ncontvars);
4302 for( v = 0; v <
nvars; v++ )
4326 if( fznoutput.vardiscrete[v] )
4340 if( fznoutput.vardiscrete[v] )
4373 if( fznoutput.vardiscrete[v] )
4381 boundedvars[nboundedvars] = v;
4387 boundedvars[nboundedvars] = v;
4395 fznoutput.varbufferpos = 0;
4396 fznoutput.consbufferpos = 0;
4397 fznoutput.castbufferpos = 0;
4407 for( v = 0; v <
nvars; v++ )
4408 fznoutput.varhasfloat[v] =
FALSE;
4409 fznoutput.varbuffer[0] =
'\0';
4410 fznoutput.consbuffer[0] =
'\0';
4411 fznoutput.castbuffer[0] =
'\0';
4414 for(
c = 0;
c < nconss;
c++ )
4431 if( strcmp(conshdlrname,
"linear") == 0 )
4437 else if( strcmp(conshdlrname,
"setppc") == 0 )
4447 consvars,
NULL, nconsvars, 1.0, 1.0, transformed) );
4459 else if( strcmp(conshdlrname,
"logicor") == 0 )
4465 else if( strcmp(conshdlrname,
"knapsack") == 0 )
4475 for( v = 0; v < nconsvars; ++v )
4483 else if( strcmp(conshdlrname,
"varbound") == 0 )
4496 consvars, consvals, 2,
4502 else if( strcmp(conshdlrname,
"cumulative") == 0 )
4509 SCIP_CALL(
appendBuffer(
scip, &(fznoutput.consbuffer), &(fznoutput.consbufferlen), &(fznoutput.consbufferpos),
"cumulative([") );
4511 for( v = 0; v < nconsvars; ++v )
4513 if( v < nconsvars - 1)
4518 SCIP_CALL(
appendBuffer(
scip, &(fznoutput.consbuffer), &(fznoutput.consbufferlen), &(fznoutput.consbufferpos), varname) );
4521 SCIP_CALL(
appendBuffer(
scip, &(fznoutput.consbuffer), &(fznoutput.consbufferlen), &(fznoutput.consbufferpos),
"], [") );
4525 for( v = 0; v < nconsvars; ++v )
4527 if( v < nconsvars - 1)
4532 SCIP_CALL(
appendBuffer(
scip, &(fznoutput.consbuffer), &(fznoutput.consbufferlen), &(fznoutput.consbufferpos), buffy) );
4535 SCIP_CALL(
appendBuffer(
scip, &(fznoutput.consbuffer), &(fznoutput.consbufferlen), &(fznoutput.consbufferpos),
"], [") );
4539 for( v = 0; v < nconsvars; ++v )
4541 if( v < nconsvars - 1)
4546 SCIP_CALL(
appendBuffer(
scip, &(fznoutput.consbuffer), &(fznoutput.consbufferlen), &(fznoutput.consbufferpos), buffy) );
4550 SCIP_CALL(
appendBuffer(
scip, &(fznoutput.consbuffer), &(fznoutput.consbufferlen), &(fznoutput.consbufferpos), buffy) );
4564 for( v = 0; v <
nvars; v++ )
4578 intobjvars[nintobjvars] = v;
4579 SCIPdebugMsg(
scip,
"variable <%s> at pos <%d,%d> has an integral obj: %f=%f*%f\n",
4586 if( fznoutput.vardiscrete[v] && !fznoutput.varhasfloat[v] )
4594 SCIP_CALL(
appendBuffer(
scip, &(fznoutput.castbuffer), &(fznoutput.castbufferlen), &(fznoutput.castbufferpos),buffer) );
4596 fznoutput.varhasfloat[v] =
TRUE;
4599 floatobjvars[nfloatobjvars] = v;
4606 if( fznoutput.varbufferpos > 0 )
4609 writeBuffer(
scip, file, fznoutput.varbuffer, fznoutput.varbufferpos );
4613 if( fznoutput.castbufferpos > 0 )
4616 writeBuffer(
scip, file, fznoutput.castbuffer, fznoutput.castbufferpos );
4619 if( nboundedvars > 0 )
4623 for( v = 0; v < nboundedvars; v++ )
4627 if( fznoutput.vardiscrete[boundedvars[v]] )
4658 if( fznoutput.consbufferpos > 0 )
4661 writeBuffer(
scip, file, fznoutput.consbuffer, fznoutput.consbufferpos );
4667 if( nintobjvars > 0 || nfloatobjvars > 0 || !
SCIPisZero(
scip, objoffset) )
4672 for( v = 0; v < nintobjvars; v++ )
4686 for( v = 0; v < nfloatobjvars; v++ )
4704 for( v = 0; v < nintobjvars; v++ )
4709 for( v = 0; v < nfloatobjvars; v++ )
4767 for( v = 0; v < readerdata->nvararrays; ++v )
4796 fzninput.file =
NULL;
4798 fzninput.linebuf[0] =
'\0';
4801 fzninput.token[0] =
'\0';
4808 fzninput.npushedtokens = 0;
4809 fzninput.linenumber = 1;
4810 fzninput.bufpos = 0;
4811 fzninput.linepos = 0;
4813 fzninput.comment =
FALSE;
4814 fzninput.haserror =
FALSE;
4815 fzninput.valid =
TRUE;
4816 fzninput.vararrays =
NULL;
4817 fzninput.nvararrays = 0;
4818 fzninput.vararrayssize = 0;
4819 fzninput.constarrays =
NULL;
4820 fzninput.nconstarrays = 0;
4821 fzninput.constarrayssize = 0;
4829 hashGetKeyVar, SCIPhashKeyEqString, SCIPhashKeyValString,
NULL) );
4832 hashGetKeyConstant, SCIPhashKeyEqString, SCIPhashKeyValString,
NULL) );
4835 fzninput.nconstants = 0;
4836 fzninput.sconstants = 10;
4842 for(
i = fzninput.nconstants - 1;
i >= 0; --
i )
4860 for(
i = 0;
i < fzninput.nvararrays; ++
i )
4867 for(
i = 0;
i < fzninput.nconstarrays; ++
i )
4876 if( fzninput.haserror || ! fzninput.valid )
4892 nvars, nbinvars, nintvars, nimplvars, ncontvars, conss, nconss,
result) );
4904 const char* varname;
4908 length = strlen(varname);
4912 SCIPwarningMessage(
scip,
"The name of variable <%d>: \"%s\" does not conform to the fzn standard.\n",
i, varname);
4917 legal = (strncmp(&varname[length-6],
"_float",6) != 0);
4920 SCIPwarningMessage(
scip,
"The name of variable <%d>: \"%s\" ends with \"_float\" which is not supported.\n",
i, varname);
4929 nvars, nbinvars, nintvars, nimplvars, ncontvars, conss, nconss,
result) );
4931 else if( transformed )
5001 vararrays = readerdata->vararrays;
5002 nvararrays = readerdata->nvararrays;
5005 SCIPsortPtr((
void**)vararrays, vararraysComp, nvararrays);
5007 for(
i = 0;
i < nvararrays; ++
i )
5009 vararray = vararrays[
i];
5010 info = vararray->info;
5011 vars = vararray->vars;
5012 nvars = vararray->nvars;
5013 type = vararray->type;
5015 if( info->ndims == 0 )
5029 for( v = 0; v < info->ndims; ++v )
5036 for( v = 0; v <
nvars; ++v )
Constraint handler for AND constraints, .
constraint handler for cumulative 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 "or" constraints, .
Constraint handler for the set partitioning / packing / covering constraints .
Constraint handler for variable bound constraints .
Constraint handler for XOR constraints, .
#define SCIP_STRINGEQ(name, reference, retcode)
#define SCIP_HASHSIZE_NAMES
#define SCIP_CALL_ABORT(x)
#define SCIP_LONGINT_FORMAT
SCIP_FILE * SCIPfopen(const char *path, const char *mode)
int SCIPfeof(SCIP_FILE *stream)
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)
int * SCIPgetDurationsCumulative(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsAnd(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *resvar, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_Real SCIPgetLhsLinear(SCIP *scip, SCIP_CONS *cons)
int SCIPgetNVarsLinear(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_RETCODE SCIPcreateConsXor(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_Bool rhs, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
SCIP_VAR ** SCIPgetVarsCumulative(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR ** SCIPgetVarsSetppc(SCIP *scip, SCIP_CONS *cons)
int * SCIPgetDemandsCumulative(SCIP *scip, SCIP_CONS *cons)
SCIP_VAR * SCIPgetVarVarbound(SCIP *scip, SCIP_CONS *cons)
SCIP_Longint * SCIPgetWeightsKnapsack(SCIP *scip, SCIP_CONS *cons)
int SCIPgetCapacityCumulative(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 ** SCIPgetVarsKnapsack(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsQuadraticNonlinear(SCIP *scip, SCIP_CONS **cons, const char *name, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, int nquadterms, SCIP_VAR **quadvars1, SCIP_VAR **quadvars2, SCIP_Real *quadcoefs, 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_RETCODE SCIPcreateConsOr(SCIP *scip, SCIP_CONS **cons, const char *name, SCIP_VAR *resvar, int nvars, SCIP_VAR **vars, SCIP_Bool initial, SCIP_Bool separate, SCIP_Bool enforce, SCIP_Bool check, SCIP_Bool propagate, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool dynamic, SCIP_Bool removable, SCIP_Bool stickingatnode)
int SCIPgetNVarsCumulative(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPcreateConsCumulative(SCIP *scip, SCIP_CONS **cons, const char *name, int nvars, SCIP_VAR **vars, int *durations, int *demands, int capacity, 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_SETPPCTYPE_PARTITIONING
@ SCIP_SETPPCTYPE_COVERING
@ SCIP_SETPPCTYPE_PACKING
SCIP_RETCODE SCIPprintSolReaderFzn(SCIP *scip, SCIP_SOL *sol, FILE *file)
SCIP_RETCODE SCIPincludeReaderFzn(SCIP *scip)
SCIP_RETCODE SCIPaddVar(SCIP *scip, SCIP_VAR *var)
SCIP_RETCODE SCIPaddCons(SCIP *scip, SCIP_CONS *cons)
SCIP_RETCODE SCIPfreeProb(SCIP *scip)
SCIP_RETCODE SCIPprintTransProblem(SCIP *scip, FILE *file, const char *extension, SCIP_Bool genericnames)
SCIP_RETCODE SCIPprintOrigProblem(SCIP *scip, FILE *file, const char *extension, SCIP_Bool genericnames)
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)
void SCIPhashtableFree(SCIP_HASHTABLE **hashtable)
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)
void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
#define SCIPdebugMsgPrint
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)
void SCIPswapPointers(void **pointer1, void **pointer2)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_CONSHDLR * SCIPconsGetHdlr(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsTransformed(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsEnabled(SCIP_CONS *cons)
SCIP_RETCODE SCIPreleaseCons(SCIP *scip, SCIP_CONS **cons)
#define SCIPfreeBuffer(scip, ptr)
#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)
#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)
#define SCIPduplicateBlockMemoryArray(scip, ptr, source, 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_READERDATA * SCIPreaderGetData(SCIP_READER *reader)
SCIP_RETCODE SCIPsetReaderWrite(SCIP *scip, SCIP_READER *reader,)
SCIP_READER * SCIPfindReader(SCIP *scip, const char *name)
SCIP_RETCODE SCIPsetReaderRead(SCIP *scip, SCIP_READER *reader,)
const char * SCIPreaderGetName(SCIP_READER *reader)
SCIP_RETCODE SCIPsetReaderFree(SCIP *scip, SCIP_READER *reader,)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Real SCIPinfinity(SCIP *scip)
SCIP_Bool SCIPisIntegral(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Real SCIPround(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasIntegral(SCIP *scip, SCIP_Real val)
SCIP_Longint SCIPconvertRealToLongint(SCIP *scip, SCIP_Real real)
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_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbOriginal(SCIP_VAR *var)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
int SCIPvarGetProbindex(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_Bool SCIPvarIsIntegral(SCIP_VAR *var)
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_IMPLINTTYPE SCIPvarGetImplType(SCIP_VAR *var)
SCIP_RETCODE SCIPprintVar(SCIP *scip, SCIP_VAR *var, FILE *file)
SCIP_RETCODE SCIPchgVarObj(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
void SCIPsortPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
void SCIPprintSysError(const char *message)
int SCIPstrncpy(char *t, const char *s, int size)
char * SCIPstrtok(char *s, const char *delim, char **ptrptr)
assert(minobj< SCIPgetCutoffbound(scip))
static const SCIP_Real scalars[]
memory allocation routines
#define BMSclearMemoryArray(ptr, num)
public methods for managing constraints
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
methods for sorting joint arrays of various types
public methods for input file readers
public methods for problem variables
static SCIP_Bool hasError(LPINPUT *lpinput)
static SCIP_Bool getNextLine(SCIP *scip, LPINPUT *lpinput)
static const char commentchars[]
static SCIP_Bool isTokenChar(char c)
static SCIP_RETCODE parseArrayAssignment(SCIP *scip, FZNINPUT *fzninput, char ***elements, int *nelements, int selements)
static SCIP_Bool equalTokens(const char *token1, const char *token2)
static void freeVararray(SCIP *scip, VARARRAY **vararray)
static void parseRange(SCIP *scip, FZNINPUT *fzninput, FZNNUMBERTYPE *type, SCIP_Real *lb, SCIP_Real *ub)
static SCIP_RETCODE getActiveVariables(SCIP *scip, SCIP_VAR ***vars, SCIP_Real **scalars, int *nvars, SCIP_Real *constant, SCIP_Bool transformed)
static SCIP_RETCODE parseConstantArray(SCIP *scip, FZNINPUT *fzninput, const char *name, int nconstants, FZNNUMBERTYPE type)
static SCIP_RETCODE parseLinking(SCIP *scip, FZNINPUT *fzninput, const char *name, const char *type, SCIP_Real sidevalue)
static void flattenAssignment(SCIP *scip, FZNINPUT *fzninput, char *assignment)
static SCIP_RETCODE parseName(SCIP *scip, FZNINPUT *fzninput, char *name, SCIP_Bool *output, DIMENSIONS **info)
static void freeConstarray(SCIP *scip, CONSTARRAY **constarray)
static SCIP_RETCODE createQuadraticCons(SCIP *scip, const char *name, int nlinvars, SCIP_VAR **linvars, SCIP_Real *lincoefs, int nquadterms, SCIP_VAR **quadvars1, SCIP_VAR **quadvars2, SCIP_Real *quadcoefs, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initialconss, SCIP_Bool dynamicconss, SCIP_Bool dynamicrows)
static SCIP_RETCODE parseAggregation(SCIP *scip, FZNINPUT *fzninput, const char *name, const char *type)
static SCIP_RETCODE copyDimensions(SCIP *scip, DIMENSIONS **target, DIMENSIONS *source)
static SCIP_RETCODE writeFzn(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)
static void parseValue(SCIP *scip, FZNINPUT *fzninput, SCIP_Real *value, const char *assignment)
static SCIP_RETCODE parseQuadratic(SCIP *scip, FZNINPUT *fzninput, const char *name)
static void freeStringBufferArray(SCIP *scip, char **array, int nelements)
static SCIP_RETCODE parseSolveItem(SCIP *scip, FZNINPUT *fzninput)
static void computeLinearConsSides(SCIP *scip, FZNINPUT *fzninput, const char *name, SCIP_Real sidevalue, SCIP_Real *lhs, SCIP_Real *rhs)
static SCIP_RETCODE readFZNFile(SCIP *scip, SCIP_READERDATA *readerdata, FZNINPUT *fzninput, const char *filename)
struct FznConstant FZNCONSTANT
static const char tokenchars[]
static SCIP_RETCODE parseConstantArrayAssignment(SCIP *scip, FZNINPUT *fzninput, SCIP_Real **vals, int *nvals, int sizevals)
static const int nconstypes
struct FznOutput FZNOUTPUT
static void writeBuffer(SCIP *scip, FILE *file, char *buffer, int bufferpos)
static SCIP_RETCODE createLinearCons(SCIP *scip, const char *name, int nvars, SCIP_VAR **vars, SCIP_Real *vals, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool initialconss, SCIP_Bool dynamicconss, SCIP_Bool dynamicrows)
static SCIP_Bool getNextLine(SCIP *scip, FZNINPUT *fzninput)
static SCIP_RETCODE fzninputAddConstarray(SCIP *scip, FZNINPUT *fzninput, const char *name, FZNCONSTANT **constants, int nconstants, FZNNUMBERTYPE type)
static void parseArrayType(SCIP *scip, FZNINPUT *fzninput, SCIP_Bool *isvararray, FZNNUMBERTYPE *type, SCIP_Real *lb, SCIP_Real *ub)
static SCIP_Bool isValue(const char *token, SCIP_Real *value)
static SCIP_RETCODE printLinearCons(SCIP *scip, FZNOUTPUT *fznoutput, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool transformed)
static SCIP_RETCODE ensureConstarrySizeFznInput(SCIP *scip, FZNINPUT *fzninput)
static void parseArrayIndex(SCIP *scip, FZNINPUT *fzninput, int *idx)
static void flattenFloat(SCIP *scip, SCIP_Real val, char *buffer)
struct ConstArray CONSTARRAY
static SCIP_Bool isBoolExp(const char *name, SCIP_Bool *value)
enum FznNumberType FZNNUMBERTYPE
static SCIP_RETCODE parseVariableArray(SCIP *scip, SCIP_READERDATA *readerdata, FZNINPUT *fzninput, const char *name, int nvars, FZNNUMBERTYPE type, SCIP_Real lb, SCIP_Real ub, DIMENSIONS *info)
enum FznExpType FZNEXPTYPE
static SCIP_RETCODE printRow(SCIP *scip, FZNOUTPUT *fznoutput, const char *type, SCIP_VAR **vars, SCIP_Real *vals, int nvars, SCIP_Real rhs, SCIP_Bool hasfloats)
static SCIP_RETCODE parseList(SCIP *scip, FZNINPUT *fzninput, char ***elements, int *nelements, int selements)
static SCIP_RETCODE ensureVararrySizeFznInput(SCIP *scip, FZNINPUT *fzninput)
static void freeDimensions(SCIP *scip, DIMENSIONS **dim)
static SCIP_RETCODE readerdataAddOutputvararray(SCIP *scip, SCIP_READERDATA *readerdata, const char *name, SCIP_VAR **vars, int nvars, FZNNUMBERTYPE type, DIMENSIONS *info)
static void parseArrayDimension(SCIP *scip, FZNINPUT *fzninput, int *nelements)
static SCIP_RETCODE createVariable(SCIP *scip, FZNINPUT *fzninput, SCIP_VAR **var, const char *name, SCIP_Real lb, SCIP_Real ub, FZNNUMBERTYPE type)
static SCIP_RETCODE parseConstraint(SCIP *scip, FZNINPUT *fzninput)
static SCIP_RETCODE parseConstant(SCIP *scip, FZNINPUT *fzninput, FZNNUMBERTYPE type)
static SCIP_Bool isValueChar(char c, char nextc, SCIP_Bool firstchar, SCIP_Bool *hasdot, FZNEXPTYPE *exptype)
#define CREATE_CONSTRAINT(x)
static void pushToken(FZNINPUT *fzninput)
static SCIP_RETCODE parsePredicate(SCIP *scip, FZNINPUT *fzninput)
static SCIP_RETCODE createConstantAssignment(SCIP *scip, FZNCONSTANT **constant, FZNINPUT *fzninput, const char *name, FZNNUMBERTYPE type, const char *assignment)
static SCIP_RETCODE createLinking(SCIP *scip, FZNINPUT *fzninput, const char *consname, const char *name1, const char *name2, SCIP_Real lhs, SCIP_Real rhs)
static SCIP_Bool isEndStatement(FZNINPUT *fzninput)
static SCIP_RETCODE readerdataAddOutputvar(SCIP *scip, SCIP_READERDATA *readerdata, SCIP_VAR *var, FZNNUMBERTYPE type)
static SCIP_RETCODE appendBuffer(SCIP *scip, char **buffer, int *bufferlen, int *bufferpos, const char *extension)
static SCIP_RETCODE readerdataCreate(SCIP *scip, SCIP_READERDATA **readerdata)
static VARARRAY * findVararray(FZNINPUT *fzninput, const char *name)
static SCIP_Bool isDelimChar(char c)
static SCIP_RETCODE createVararray(SCIP *scip, VARARRAY **vararray, const char *name, SCIP_VAR **vars, int nvars, FZNNUMBERTYPE type, DIMENSIONS *info)
static SCIP_Bool isChar(const char *token, char c)
struct Dimensions DIMENSIONS
static SCIP_Bool isIdentifier(const char *name)
static SCIP_RETCODE applyVariableAssignment(SCIP *scip, FZNINPUT *fzninput, SCIP_VAR *var, FZNNUMBERTYPE type, const char *assignment)
static void parseType(SCIP *scip, FZNINPUT *fzninput, FZNNUMBERTYPE *type, SCIP_Real *lb, SCIP_Real *ub)
static CONSTARRAY * findConstarray(FZNINPUT *fzninput, const char *name)
static void syntaxError(SCIP *scip, FZNINPUT *fzninput, const char *msg)
static SCIP_RETCODE ensureVararrySize(SCIP *scip, SCIP_READERDATA *readerdata)
#define FZN_MAX_PUSHEDTOKENS
static SCIP_RETCODE parseVariableArrayAssignment(SCIP *scip, FZNINPUT *fzninput, SCIP_VAR ***vars, int *nvars, int sizevars)
static const char delimchars[]
static void printValue(SCIP *scip, FILE *file, SCIP_Real value, FZNNUMBERTYPE type)
static SCIP_RETCODE parseVariable(SCIP *scip, SCIP_READERDATA *readerdata, FZNINPUT *fzninput)
static SCIP_Bool hasError(FZNINPUT *fzninput)
static SCIP_Bool isTokenChar(char c)
static SCIP_RETCODE createConstarray(SCIP *scip, CONSTARRAY **constarray, const char *name, FZNCONSTANT **constants, int nconstants, FZNNUMBERTYPE type)
static SCIP_RETCODE fzninputAddVararray(SCIP *scip, FZNINPUT *fzninput, const char *name, SCIP_VAR **vars, int nvars, FZNNUMBERTYPE type, DIMENSIONS *info)
static SCIP_RETCODE parseOutputDimensioninfo(SCIP *scip, FZNINPUT *fzninput, DIMENSIONS **info)
static SCIP_RETCODE parseArray(SCIP *scip, SCIP_READERDATA *readerdata, FZNINPUT *fzninput)
static SCIP_Bool getNextToken(SCIP *scip, FZNINPUT *fzninput)
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 solutions
public methods for querying solving statistics
public methods for SCIP variables
struct SCIP_Cons SCIP_CONS
struct SCIP_Conshdlr SCIP_CONSHDLR
enum SCIP_BoundType SCIP_BOUNDTYPE
#define SCIP_DECL_SORTPTRCOMP(x)
#define SCIP_DECL_HASHGETKEY(x)
struct SCIP_HashTable SCIP_HASHTABLE
enum SCIP_Objsense SCIP_OBJSENSE
#define SCIP_DECL_READERWRITE(x)
struct SCIP_ReaderData SCIP_READERDATA
struct SCIP_Reader SCIP_READER
#define SCIP_DECL_READERREAD(x)
#define SCIP_DECL_READERCOPY(x)
#define SCIP_DECL_READERFREE(x)
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_VARTYPE_CONTINUOUS
enum SCIP_Vartype SCIP_VARTYPE