60#define OBJSCALE_MAXDNOM 1000000LL
61#define OBJSCALE_MAXSCALE 1000000.0
62#define OBJSCALE_MAXFINALSCALE 1000.0
89 assert(num <= prob->varssize);
113 assert(num <= prob->fixedvarssize);
137 assert(num <= prob->deletedvarssize);
166 assert(num <= prob->consssize);
181 return (name !=
NULL && name[0] !=
'\0');
194 return (name !=
NULL && name[0] !=
'\0');
235 SCIP_CALL(
SCIPprobCreate(prob, blkmem,
set, name,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
NULL,
FALSE) );
240 SCIP_CALL( sourceprob->probcopy(
set->scip, sourcescip, sourceprob->
probdata, varmap, consmap, &targetdata, original, global, &
result) );
255 (*prob)->probdelorig = sourceprob->probdelorig;
256 (*prob)->probtrans = sourceprob->probtrans;
257 (*prob)->probdeltrans = sourceprob->probdeltrans;
258 (*prob)->probinitsol = sourceprob->probinitsol;
259 (*prob)->probexitsol = sourceprob->probexitsol;
260 (*prob)->probcopy = sourceprob->probcopy;
292 (*prob)->probdata = probdata;
293 (*prob)->probcopy = probcopy;
294 (*prob)->probdelorig = probdelorig;
295 (*prob)->probtrans = probtrans;
296 (*prob)->probdeltrans = probdeltrans;
297 (*prob)->probinitsol = probinitsol;
298 (*prob)->probexitsol = probexitsol;
299 if(
set->misc_usevartable )
303 SCIPhashGetKeyVar, SCIPhashKeyEqString, SCIPhashKeyValString,
NULL) );
306 (*prob)->varnames =
NULL;
307 (*prob)->vars =
NULL;
308 (*prob)->varssize = 0;
310 (*prob)->nbinvars = 0;
311 (*prob)->nintvars = 0;
312 (*prob)->nbinimplvars = 0;
313 (*prob)->nintimplvars = 0;
314 (*prob)->ncontimplvars = 0;
315 (*prob)->ncontvars = 0;
316 (*prob)->ncolvars = 0;
317 (*prob)->fixedvars =
NULL;
318 (*prob)->fixedvarssize = 0;
319 (*prob)->nfixedvars = 0;
320 (*prob)->deletedvars =
NULL;
321 (*prob)->deletedvarssize = 0;
322 (*prob)->ndeletedvars = 0;
323 (*prob)->nobjvars = 0;
324 if(
set->misc_useconstable )
328 SCIPhashGetKeyCons, SCIPhashKeyEqString, SCIPhashKeyValString,
NULL) );
331 (*prob)->consnames =
NULL;
332 (*prob)->conss =
NULL;
333 (*prob)->origcheckconss =
NULL;
334 (*prob)->consssize = 0;
336 (*prob)->maxnconss = 0;
337 (*prob)->startnvars = 0;
338 (*prob)->startnconss = 0;
341 (*prob)->objisintegral =
FALSE;
342 (*prob)->transformed = transformed;
343 (*prob)->nlpenabled =
FALSE;
344 (*prob)->permuted =
FALSE;
345 (*prob)->consschecksorted =
FALSE;
346 (*prob)->conscompression =
FALSE;
348 (*prob)->objoffset = 0.0;
349 (*prob)->objscale = 1.0;
350 if(
set->exact_enable )
360 (*prob)->objoffsetexact =
NULL;
361 (*prob)->objscaleexact =
NULL;
375 prob->probdelorig = probdelorig;
386 prob->probtrans = probtrans;
397 prob->probdeltrans = probdeltrans;
408 prob->probinitsol= probinitsol;
419 prob->probexitsol= probexitsol;
430 prob->probcopy= probcopy;
454 while( (*prob)->nconss > 0 )
461 if( (*prob)->transformed )
466 for(
h = 0;
h <
set->nconshdlrs; ++
h )
480 if( (*prob)->transformed )
482 if( (*prob)->probdeltrans !=
NULL )
484 SCIP_CALL( (*prob)->probdeltrans(
set->scip, &(*prob)->probdata) );
489 if( (*prob)->probdelorig !=
NULL )
491 SCIP_CALL( (*prob)->probdelorig(
set->scip, &(*prob)->probdata) );
496 for( v = (*prob)->nvars - 1; v >= 0; --v )
505 unreleasedvar =
TRUE;
515 for( v = (*prob)->nfixedvars - 1; v >= 0; --v )
524 unreleasedvar =
TRUE;
538 if( (*prob)->consnames !=
NULL )
540 if( (*prob)->varnames !=
NULL )
542 if( (*prob)->objscaleexact !=
NULL )
544 if( (*prob)->objoffsetexact !=
NULL )
586 source->probinitsol, source->probexitsol, source->probcopy,
NULL,
TRUE) );
599 for( v = 0; v < source->
nvars; ++v )
613 if( source->probtrans !=
NULL )
618 (*target)->probdata = source->
probdata;
629 for(
h = 0;
h <
set->nconshdlrs; ++
h )
643 SCIP_CALL(
SCIPprobCheckObjIntegral(*target, source, blkmem,
set, stat, primal, tree, reopt, lp, eventqueue, eventfilter) );
649 (*target)->permuted = source->
permuted;
670 for( v = 0; v < prob->
nvars; ++v )
711 assert(nbinvars + nintvars + nbinimplvars + nintimplvars + ncontimplvars + ncontvars ==
nvars);
713 SCIPdebugMessage(
"entering sorting with respect to original block structure! \n");
724 if( nbinimplvars > 0 )
725 SCIPsortPtr((
void**)&
vars[nbinvars + nintvars], SCIPvarComp, nbinimplvars);
728 if( nintimplvars > 0 )
729 SCIPsortPtr((
void**)&
vars[nbinvars + nintvars + nbinimplvars], SCIPvarComp, nintimplvars);
732 if( ncontimplvars > 0 )
733 SCIPsortPtr((
void**)&
vars[nbinvars + nintvars + nbinimplvars + nintimplvars], SCIPvarComp, ncontimplvars);
737 SCIPsortPtr((
void**)&
vars[nbinvars + nintvars + nbinimplvars + nintimplvars + ncontimplvars], SCIPvarComp, ncontvars);
740 for( v = 0; v <
nvars; ++v )
742 vars[v]->probindex = v;
798 int insertpos = prob->
nvars;
800 int binimplstart = intstart + prob->
nintvars;
811 if( insertpos > contstart )
813 prob->
vars[insertpos] = prob->
vars[contstart];
815 insertpos = contstart;
817 assert(insertpos == contstart);
826 if( insertpos > contimplstart )
828 prob->
vars[insertpos] = prob->
vars[contimplstart];
830 insertpos = contimplstart;
832 assert(insertpos == contimplstart);
840 if( insertpos > intimplstart )
842 prob->
vars[insertpos] = prob->
vars[intimplstart];
844 insertpos = intimplstart;
846 assert(insertpos == intimplstart);
854 if( insertpos > binimplstart )
856 prob->
vars[insertpos] = prob->
vars[binimplstart];
858 insertpos = binimplstart;
860 assert(insertpos == binimplstart);
869 if( insertpos > intstart )
871 prob->
vars[insertpos] = prob->
vars[intstart];
873 insertpos = intstart;
875 assert(insertpos == intstart);
954 binimplstart = intstart + prob->
nintvars;
1006 if( freepos < intstart-1 )
1009 prob->
vars[freepos] = prob->
vars[intstart-1];
1011 freepos = intstart-1;
1013 if( freepos < binimplstart-1 )
1016 prob->
vars[freepos] = prob->
vars[binimplstart-1];
1018 freepos = binimplstart-1;
1020 if( freepos < intimplstart-1 )
1023 prob->
vars[freepos] = prob->
vars[intimplstart-1];
1025 freepos = intimplstart-1;
1027 if( freepos < contimplstart-1 )
1030 prob->
vars[freepos] = prob->
vars[contimplstart-1];
1032 freepos = contimplstart-1;
1034 if( freepos < contstart-1 )
1037 prob->
vars[freepos] = prob->
vars[contstart-1];
1039 freepos = contstart-1;
1041 if( freepos < prob->
nvars-1 )
1046 freepos = prob->
nvars-1;
1119 if(
var->scip !=
set->scip )
1146 SCIPsetDebugMsg(
set,
"added variable <%s> to problem (%d variables: %d binary, %d integer, %d continuous; %d implied)\n",
1204 SCIPsetDebugMsg(
set,
"deleting variable <%s> from problem (%d variables: %d binary, %d integer, %d continuous; %d implied)\n",
1254 for(
i = 0;
i <
set->nconshdlrs; ++
i )
1331 if( branchcand !=
NULL )
1349 if( branchcand !=
NULL )
1385 if( branchcand !=
NULL )
1403 if( branchcand !=
NULL )
1495 if( currentcons == cons )
1763 if(
set->nactivepricers != 0 ||
set->nactivebenders != 0 )
1771 for( v = 0; v < transprob->
nvars; ++v )
1790 if( v == transprob->
nvars )
1795 SCIP_CALL(
SCIPprimalUpdateObjoffset(primal, blkmem,
set, stat, eventqueue, eventfilter, transprob, origprob, tree, reopt, lp) );
1824 if(
set->exact_enable )
1825 return probCheckObjIntegralExact(transprob, origprob, blkmem,
set, stat, primal, tree, reopt, lp, eventqueue,
1833 if(
set->nactivepricers != 0 ||
set->nactivebenders != 0 )
1841 for( v = 0; v < transprob->
nvars; ++v )
1860 if( v == transprob->
nvars )
1865 SCIP_CALL(
SCIPprimalUpdateObjoffset(primal, blkmem,
set, stat, eventqueue, eventfilter, transprob, origprob, tree, reopt, lp) );
1950 if(
set->nactivepricers != 0 ||
set->nactivebenders != 0 || !
set->misc_scaleobj )
1956 for( v = nints; v < transprob->
nvars; ++v )
1967 if( v == transprob->
nvars )
1978 for( v = 0; v < nints; ++v )
1983 intscalar, &success) );
1991 for( v = 0; v < nints; ++v )
2000 for( v = 0; v < nints; ++v )
2013 SCIP_CALL(
SCIPprimalUpdateObjoffsetExact(primal, blkmem,
set, stat, eventqueue, eventfilter, transprob, origprob, tree, reopt, lp) );
2047 if(
set->nactivepricers != 0 ||
set->nactivebenders != 0 || !
set->misc_scaleobj )
2050 if(
set->exact_enable )
2052 SCIP_CALL(
probScaleObjExact(transprob, origprob, blkmem,
set, stat, primal, tree, reopt, lp, eventqueue,
2060 for( v = nints; v < transprob->
nvars; ++v )
2071 if( v == transprob->
nvars )
2081 for( v = 0; v < nints; ++v )
2086 &intscalar, &success) );
2088 SCIPsetDebugMsg(
set,
"integral objective scalar: success=%u, intscalar=%g\n", success, intscalar);
2098 for( v = 0; v < nints && gcd != 1; ++v )
2112 else if( absobj > 0 )
2126 for( v = 0; v < nints; ++v )
2140 for( v = 0; v < nints; ++v )
2151 SCIP_CALL(
SCIPprimalUpdateObjoffset(primal, blkmem,
set, stat, eventqueue, eventfilter, transprob, origprob, tree, reopt, lp) );
2180 for( v = 0; v < prob->
nvars; ++v )
2220 for( v = 0; v < prob->
nvars; ++v )
2271 if( -lbrootredcost > ubrootredcost )
2273 rootredcost = lbrootredcost;
2278 rootredcost = ubrootredcost;
2318 for( v = 0; v < prob->
nvars; ++v )
2322 if( prob->probinitsol !=
NULL )
2351 if( prob->probexitsol !=
NULL )
2361 if( prob->
ncolvars > 0 || restart )
2363 for( v = 0; v < prob->
nvars; ++v )
2431#ifdef SCIP_MORE_DEBUG
2437 for( v = prob->
nvars - 1; v >= 0; --v )
2455 for( v = prob->
nvars - 1; v >= 0; --v )
2480 for( v = 0; v < prob->
nvars; v++ )
2507 for( v = 0; v < prob->
nvars; v++ )
2636 SCIPerrorMessage(
"Cannot find variable if variable-names hashtable was disabled (due to parameter <misc/usevartable>)\n");
2655 SCIPerrorMessage(
"Cannot find constraint if constraint-names hashtable was disabled (due to parameter <misc/useconstable>)\n");
2674 for( v = 0; v < prob->
nvars; ++v )
2696 SCIPmessageFPrintInfo(messagehdlr, file,
" Variables : %d (%d binary, %d integer, %d continuous)\n",
2698 SCIPmessageFPrintInfo(messagehdlr, file,
" Implied int vars : %d (%d binary, %d integer, %d continuous)\n",
2701 SCIPmessageFPrintInfo(messagehdlr, file,
" Objective : %s, %d non-zeros (abs.min = %g, abs.max = %g)\n",
2753#undef SCIPprobIsPermuted
2754#undef SCIPprobMarkPermuted
2755#undef SCIPprobIsTransformed
2756#undef SCIPprobIsObjIntegral
2757#undef SCIPprobAllColsInLP
2758#undef SCIPprobGetObjlim
2759#undef SCIPprobGetData
2760#undef SCIPprobGetName
2761#undef SCIPprobGetNVars
2762#undef SCIPprobGetNBinVars
2763#undef SCIPprobGetNIntVars
2764#undef SCIPprobGetNImplVars
2765#undef SCIPprobGetNContVars
2766#undef SCIPprobGetVars
2767#undef SCIPprobGetNFixedVars
2768#undef SCIPprobGetFixedVars
2769#undef SCIPprobGetStartNVars
2770#undef SCIPprobGetNConss
2771#undef SCIPprobGetConss
2772#undef SCIPprobGetMaxNConss
2773#undef SCIPprobGetStartNConss
2774#undef SCIPprobGetObjsense
2775#undef SCIPprobGetObjoffset
2776#undef SCIPprobGetObjscale
2777#undef SCIPprobGetObjoffsetExact
2778#undef SCIPprobGetObjscaleExact
2779#undef SCIPisConsCompressedEnabled
2780#undef SCIPprobEnableConsCompression
SCIP_RETCODE SCIPbranchcandRemoveVar(SCIP_BRANCHCAND *branchcand, SCIP_VAR *var)
SCIP_RETCODE SCIPbranchcandUpdateVar(SCIP_BRANCHCAND *branchcand, SCIP_SET *set, SCIP_VAR *var)
internal methods for branching rules and branching candidate storage
SCIP_RETCODE SCIPconflictstoreTransform(SCIP_CONFLICTSTORE *conflictstore, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_TREE *tree, SCIP_PROB *transprob, SCIP_REOPT *reopt)
internal methods for storing conflicts
SCIP_RETCODE SCIPconsAddLocks(SCIP_CONS *cons, SCIP_SET *set, SCIP_LOCKTYPE locktype, int nlockspos, int nlocksneg)
void SCIPconsCapture(SCIP_CONS *cons)
void SCIPconsSetLocal(SCIP_CONS *cons, SCIP_Bool local)
SCIP_RETCODE SCIPconsDeactivate(SCIP_CONS *cons, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPconshdlrLockVars(SCIP_CONSHDLR *conshdlr, SCIP_SET *set)
SCIP_RETCODE SCIPconsResetAge(SCIP_CONS *cons, SCIP_SET *set)
SCIP_RETCODE SCIPconsTransform(SCIP_CONS *origcons, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_CONS **transcons)
SCIP_RETCODE SCIPconsRelease(SCIP_CONS **cons, BMS_BLKMEM *blkmem, SCIP_SET *set)
SCIP_RETCODE SCIPconshdlrUnlockVars(SCIP_CONSHDLR *conshdlr, SCIP_SET *set)
SCIP_RETCODE SCIPconsActivate(SCIP_CONS *cons, SCIP_SET *set, SCIP_STAT *stat, int depth, SCIP_Bool focusnode)
SCIP_RETCODE SCIPconshdlrDelVars(SCIP_CONSHDLR *conshdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
internal methods for constraints and constraint handlers
SCIP_RETCODE SCIPdatatreeInsertLong(SCIP_DATATREE *datatree, SCIP_SET *set, BMS_BLKMEM *blkmem, const char *name, SCIP_Longint value)
SCIP_RETCODE SCIPdatatreeInsertString(SCIP_DATATREE *datatree, SCIP_SET *set, BMS_BLKMEM *blkmem, const char *name, const char *value)
SCIP_RETCODE SCIPdatatreeInsertReal(SCIP_DATATREE *datatree, SCIP_SET *set, BMS_BLKMEM *blkmem, const char *name, SCIP_Real value)
internal methods for handling data trees
#define SCIP_HASHSIZE_NAMES_SMALL
#define SCIP_HASHSIZE_NAMES
#define SCIP_LONGINT_FORMAT
SCIP_RETCODE SCIPeventCreateVarAdded(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var)
SCIP_RETCODE SCIPeventqueueAdd(SCIP_EVENTQUEUE *eventqueue, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTFILTER *eventfilter, SCIP_EVENT **event)
SCIP_RETCODE SCIPeventCreateVarDeleted(SCIP_EVENT **event, BMS_BLKMEM *blkmem, SCIP_VAR *var)
internal methods for managing events
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)
void * SCIPhashtableRetrieve(SCIP_HASHTABLE *hashtable, void *key)
SCIP_RETCODE SCIPhashtableRemove(SCIP_HASHTABLE *hashtable, void *element)
SCIP_RETCODE SCIPhashtableInsert(SCIP_HASHTABLE *hashtable, void *element)
SCIP_Longint SCIPcalcGreComDiv(SCIP_Longint val1, SCIP_Longint val2)
SCIP_RETCODE SCIPcalcIntegralScalarExact(BMS_BUFMEM *buffer, SCIP_RATIONAL **vals, int nvals, SCIP_Real maxscale, SCIP_RATIONAL *intscalar, SCIP_Bool *success)
SCIP_RETCODE SCIPcalcIntegralScalar(SCIP_Real *vals, int nvals, SCIP_Real mindelta, SCIP_Real maxdelta, SCIP_Longint maxdnom, SCIP_Real maxscale, SCIP_Real *intscalar, SCIP_Bool *success)
SCIP_Real SCIPcolGetPrimsol(SCIP_COL *col)
SCIP_BASESTAT SCIPcolGetBasisStatus(SCIP_COL *col)
SCIP_Bool SCIPconshdlrNeedsCons(SCIP_CONSHDLR *conshdlr)
SCIP_Bool SCIPconsIsChecked(SCIP_CONS *cons)
SCIP_Bool SCIPconsIsActive(SCIP_CONS *cons)
const char * SCIPconsGetName(SCIP_CONS *cons)
SCIP_RETCODE SCIPrationalCreateBlock(BMS_BLKMEM *blkmem, SCIP_RATIONAL **rational)
void SCIPrationalMult(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
void SCIPrationalAdd(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
SCIP_Real SCIPrationalGetReal(SCIP_RATIONAL *rational)
void SCIPrationalFreeBlock(BMS_BLKMEM *mem, SCIP_RATIONAL **rational)
#define SCIPrationalDebugMessage
void SCIPrationalDiv(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
SCIP_Bool SCIPrationalIsAbsInfinity(SCIP_RATIONAL *rational)
void SCIPrationalSetReal(SCIP_RATIONAL *res, SCIP_Real real)
void SCIPrationalFreeBuffer(BMS_BUFMEM *bufmem, SCIP_RATIONAL **rational)
void SCIPrationalDiff(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_RATIONAL *op2)
SCIP_Bool SCIPrationalIsPositive(SCIP_RATIONAL *rational)
SCIP_RETCODE SCIPrationalCreateBuffer(BMS_BUFMEM *bufmem, SCIP_RATIONAL **rational)
SCIP_Bool SCIPrationalIsZero(SCIP_RATIONAL *rational)
void SCIPrationalSetRational(SCIP_RATIONAL *res, SCIP_RATIONAL *src)
SCIP_Bool SCIPrationalIsIntegral(SCIP_RATIONAL *rational)
SCIP_Bool SCIPrationalIsEQReal(SCIP_RATIONAL *rat, SCIP_Real real)
SCIP_RETCODE SCIPrationalCreateBufferArray(BMS_BUFMEM *mem, SCIP_RATIONAL ***rational, int size)
void SCIPrationalMultReal(SCIP_RATIONAL *res, SCIP_RATIONAL *op1, SCIP_Real op2)
void SCIPrationalFreeBufferArray(BMS_BUFMEM *mem, SCIP_RATIONAL ***ratbufarray, int size)
SCIP_COL * SCIPvarGetCol(SCIP_VAR *var)
SCIP_Real SCIPvarGetSol(SCIP_VAR *var, SCIP_Bool getlpval)
SCIP_VAR * SCIPvarGetNegatedVar(SCIP_VAR *var)
SCIP_Bool SCIPvarIsBinary(SCIP_VAR *var)
SCIP_VARSTATUS SCIPvarGetStatus(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbLocal(SCIP_VAR *var)
int SCIPvarGetNLocksDown(SCIP_VAR *var)
SCIP_Real SCIPvarGetObj(SCIP_VAR *var)
SCIP_VARTYPE SCIPvarGetType(SCIP_VAR *var)
void SCIPvarSetBestRootSol(SCIP_VAR *var, SCIP_Real rootsol, SCIP_Real rootredcost, SCIP_Real rootlpobjval)
int SCIPvarGetNUses(SCIP_VAR *var)
int SCIPvarGetProbindex(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Bool SCIPvarIsDeletable(SCIP_VAR *var)
SCIP_Bool SCIPvarIsIntegral(SCIP_VAR *var)
SCIP_Bool SCIPvarIsTransformedOrigvar(SCIP_VAR *var)
SCIP_Real SCIPvarGetPseudoSol(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbLocal(SCIP_VAR *var)
SCIP_Bool SCIPvarIsRelaxationOnly(SCIP_VAR *var)
SCIP_IMPLINTTYPE SCIPvarGetImplType(SCIP_VAR *var)
int SCIPvarGetNLocksUp(SCIP_VAR *var)
SCIP_RATIONAL * SCIPvarGetObjExact(SCIP_VAR *var)
void SCIPsortPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len)
int SCIPsnprintf(char *t, int len, const char *s,...)
assert(minobj< SCIPgetCutoffbound(scip))
SCIP_Bool SCIPlpIsSolBasic(SCIP_LP *lp)
SCIP_LPSOLSTAT SCIPlpGetSolstat(SCIP_LP *lp)
void SCIPlpStoreRootObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
SCIP_Real SCIPlpGetColumnObjval(SCIP_LP *lp)
SCIP_RETCODE SCIPlpUpdateAddVar(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var)
SCIP_Bool SCIPlpIsRelax(SCIP_LP *lp)
SCIP_Real SCIPlpGetObjval(SCIP_LP *lp, SCIP_SET *set, SCIP_PROB *prob)
SCIP_RETCODE SCIPlpUpdateDelVar(SCIP_LP *lp, SCIP_SET *set, SCIP_VAR *var)
SCIP_Real SCIPcolGetRedcost(SCIP_COL *col, SCIP_STAT *stat, SCIP_LP *lp)
SCIP_Bool SCIPlpIsDualReliable(SCIP_LP *lp)
int SCIPlpGetNCols(SCIP_LP *lp)
void SCIPlpSetRootLPIsRelax(SCIP_LP *lp, SCIP_Bool isrelax)
internal methods for LP management
SCIP_RETCODE SCIPlpExactUpdateAddVar(SCIP_LPEXACT *lpexact, SCIP_SET *set, SCIP_VAR *var)
internal methods for exact LP management
#define BMSfreeMemory(ptr)
#define BMSreallocMemoryArray(ptr, num)
#define BMSduplicateMemoryArray(ptr, source, num)
#define BMSfreeMemoryArray(ptr)
struct BMS_BlkMem BMS_BLKMEM
#define BMSfreeMemoryArrayNull(ptr)
#define BMSallocMemory(ptr)
void SCIPmessageFPrintWarning(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
void SCIPmessageFPrintInfo(SCIP_MESSAGEHDLR *messagehdlr, FILE *file, const char *formatstr,...)
void SCIPmessagePrintInfo(SCIP_MESSAGEHDLR *messagehdlr, const char *formatstr,...)
SCIP_RETCODE SCIPprimalUpdateObjoffsetExact(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp)
SCIP_RETCODE SCIPprimalUpdateObjoffset(SCIP_PRIMAL *primal, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp)
internal methods for collecting primal CIP solutions and primal informations
void SCIPprobSetDelorig(SCIP_PROB *prob,)
void SCIPprobSetExitsol(SCIP_PROB *prob,)
static SCIP_RETCODE probScaleObjExact(SCIP_PROB *transprob, SCIP_PROB *origprob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
void SCIPprobPrintStatistics(SCIP_PROB *prob, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr, FILE *file)
void SCIPprobSetCopy(SCIP_PROB *prob,)
SCIP_RETCODE SCIPprobCollectStatistics(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_DATATREE *datatree)
static SCIP_RETCODE probRemoveVar(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_CLIQUETABLE *cliquetable, SCIP_SET *set, SCIP_VAR *var, SCIP_Bool isupgraded)
static SCIP_RETCODE probEnsureVarsMem(SCIP_PROB *prob, SCIP_SET *set, int num)
SCIP_Bool SCIPprobIsPermuted(SCIP_PROB *prob)
SCIP_RETCODE SCIPprobExitPresolve(SCIP_PROB *prob, SCIP_SET *set)
void SCIPprobUpdateNObjVars(SCIP_PROB *prob, SCIP_SET *set, SCIP_Real oldobj, SCIP_Real newobj)
int SCIPprobGetNContVars(SCIP_PROB *prob)
SCIP_RETCODE SCIPprobAddConsName(SCIP_PROB *prob, SCIP_CONS *cons)
SCIP_RETCODE SCIPprobTransform(SCIP_PROB *source, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_CONFLICTSTORE *conflictstore, SCIP_PROB **target)
SCIP_CONS ** SCIPprobGetConss(SCIP_PROB *prob)
int SCIPprobGetNFixedVars(SCIP_PROB *prob)
static SCIP_RETCODE probCheckObjIntegralExact(SCIP_PROB *transprob, SCIP_PROB *origprob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
void SCIPprobInvalidateDualbound(SCIP_PROB *prob)
SCIP_RETCODE SCIPprobAddVarName(SCIP_PROB *prob, SCIP_VAR *var)
void SCIPprobInternObjvalExact(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_RATIONAL *objval, SCIP_RATIONAL *objvalint)
void SCIPprobSetObjIntegral(SCIP_PROB *prob)
SCIP_RETCODE SCIPprobVarChangedStatus(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_BRANCHCAND *branchcand, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var)
const char * SCIPprobGetName(SCIP_PROB *prob)
static int probProvidePos(SCIP_PROB *prob, SCIP_VARTYPE vartype, SCIP_IMPLINTTYPE impltype)
SCIP_Real SCIPprobGetObjoffset(SCIP_PROB *prob)
int SCIPprobGetNConss(SCIP_PROB *prob)
int SCIPprobGetNObjVars(SCIP_PROB *prob, SCIP_SET *set)
SCIP_Real SCIPprobGetAbsMinObjCoef(SCIP_PROB *prob, SCIP_SET *set)
static SCIP_RETCODE probEnsureConssMem(SCIP_PROB *prob, SCIP_SET *set, int num)
static void probInsertVar(SCIP_PROB *prob, SCIP_VAR *var)
SCIP_RETCODE SCIPprobPerformVarDeletions(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand)
void SCIPprobSetTrans(SCIP_PROB *prob,)
SCIP_Real SCIPprobGetAbsMaxObjCoef(SCIP_PROB *prob, SCIP_SET *set)
SCIP_RETCODE SCIPprobRemoveVarName(SCIP_PROB *prob, SCIP_VAR *var)
static SCIP_RETCODE probEnsureFixedvarsMem(SCIP_PROB *prob, SCIP_SET *set, int num)
int SCIPprobGetStartNConss(SCIP_PROB *prob)
SCIP_Real SCIPprobGetObjlim(SCIP_PROB *prob, SCIP_SET *set)
void SCIPprobUpdateDualbound(SCIP_PROB *prob, SCIP_Real newbound)
SCIP_RETCODE SCIPprobInitSolve(SCIP_PROB *prob, SCIP_SET *set)
void SCIPprobMarkNConss(SCIP_PROB *prob)
SCIP_RATIONAL * SCIPprobGetObjoffsetExact(SCIP_PROB *prob)
SCIP_OBJSENSE SCIPprobGetObjsense(SCIP_PROB *prob)
void SCIPprobPrintPseudoSol(SCIP_PROB *prob, SCIP_SET *set, SCIP_MESSAGEHDLR *messagehdlr)
int SCIPprobGetStartNVars(SCIP_PROB *prob)
#define OBJSCALE_MAXSCALE
SCIP_RETCODE SCIPprobSetName(SCIP_PROB *prob, const char *name)
void SCIPprobSetData(SCIP_PROB *prob, SCIP_PROBDATA *probdata)
#define OBJSCALE_MAXFINALSCALE
SCIP_Real SCIPprobGetObjscale(SCIP_PROB *prob)
void SCIPprobAddObjoffset(SCIP_PROB *prob, SCIP_Real addval)
SCIP_RETCODE SCIPprobChgVarImplType(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_IMPLINTTYPE impltype)
SCIP_VAR * SCIPprobFindVar(SCIP_PROB *prob, const char *name)
int SCIPprobGetNImplVars(SCIP_PROB *prob)
static SCIP_Bool varHasName(SCIP_VAR *var)
SCIP_RETCODE SCIPprobExitSolve(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp, SCIP_Bool restart)
SCIP_RETCODE SCIPprobCreate(SCIP_PROB **prob, BMS_BLKMEM *blkmem, SCIP_SET *set, 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, SCIP_Bool transformed)
void SCIPprobSetObjlim(SCIP_PROB *prob, SCIP_Real objlim)
SCIP_VAR ** SCIPprobGetFixedVars(SCIP_PROB *prob)
SCIP_RETCODE SCIPprobDelVar(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_VAR *var, SCIP_Bool *deleted)
SCIP_Bool SCIPprobIsObjIntegral(SCIP_PROB *prob)
SCIP_RETCODE SCIPprobAddVar(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter, SCIP_VAR *var)
void SCIPprobEnableConsCompression(SCIP_PROB *prob)
SCIP_CONS * SCIPprobFindCons(SCIP_PROB *prob, const char *name)
void SCIPprobMarkPermuted(SCIP_PROB *prob)
SCIP_RETCODE SCIPprobRemoveConsName(SCIP_PROB *prob, SCIP_CONS *cons)
int SCIPprobGetNIntVars(SCIP_PROB *prob)
SCIP_RETCODE SCIPprobDelCons(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons)
int SCIPprobGetNVars(SCIP_PROB *prob)
SCIP_PROBDATA * SCIPprobGetData(SCIP_PROB *prob)
void SCIPprobSetInitsol(SCIP_PROB *prob,)
SCIP_RETCODE SCIPprobChgVarType(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_BRANCHCAND *branchcand, SCIP_EVENTQUEUE *eventqueue, SCIP_CLIQUETABLE *cliquetable, SCIP_VAR *var, SCIP_VARTYPE vartype)
static SCIP_RETCODE probEnsureDeletedvarsMem(SCIP_PROB *prob, SCIP_SET *set, int num)
SCIP_Real SCIPprobExternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
void SCIPprobResortVars(SCIP_PROB *prob)
SCIP_RETCODE SCIPprobFree(SCIP_PROB **prob, SCIP_MESSAGEHDLR *messagehdlr, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
SCIP_RETCODE SCIPprobCopy(SCIP_PROB **prob, BMS_BLKMEM *blkmem, SCIP_SET *set, const char *name, SCIP *sourcescip, SCIP_PROB *sourceprob, SCIP_HASHMAP *varmap, SCIP_HASHMAP *consmap, SCIP_Bool original, SCIP_Bool global)
SCIP_RETCODE SCIPprobScaleObj(SCIP_PROB *transprob, SCIP_PROB *origprob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
SCIP_RETCODE SCIPprobAddCons(SCIP_PROB *prob, SCIP_SET *set, SCIP_STAT *stat, SCIP_CONS *cons)
SCIP_RETCODE SCIPprobCheckObjIntegral(SCIP_PROB *transprob, SCIP_PROB *origprob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_PRIMAL *primal, SCIP_TREE *tree, SCIP_REOPT *reopt, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_EVENTFILTER *eventfilter)
int SCIPprobGetMaxNConss(SCIP_PROB *prob)
SCIP_RETCODE SCIPprobResetBounds(SCIP_PROB *prob, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
void SCIPprobSetDualbound(SCIP_PROB *prob, SCIP_Real dualbound)
void SCIPprobStoreRootSol(SCIP_PROB *prob, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp, SCIP_Bool roothaslp)
int SCIPprobGetNBinVars(SCIP_PROB *prob)
SCIP_RATIONAL * SCIPprobGetObjscaleExact(SCIP_PROB *prob)
SCIP_VAR ** SCIPprobGetVars(SCIP_PROB *prob)
void SCIPprobSetDeltrans(SCIP_PROB *prob,)
SCIP_Bool SCIPprobAllColsInLP(SCIP_PROB *prob, SCIP_SET *set, SCIP_LP *lp)
void SCIPprobUpdateBestRootSol(SCIP_PROB *prob, SCIP_SET *set, SCIP_STAT *stat, SCIP_LP *lp)
static SCIP_Bool consHasName(SCIP_CONS *cons)
SCIP_Bool SCIPprobIsTransformed(SCIP_PROB *prob)
void SCIPprobExternObjvalExact(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_RATIONAL *objval, SCIP_RATIONAL *objvalext)
SCIP_Bool SCIPprobIsConsCompressionEnabled(SCIP_PROB *prob)
void SCIPprobAddObjoffsetExact(SCIP_PROB *prob, SCIP_RATIONAL *addval)
void SCIPprobSetObjsense(SCIP_PROB *prob, SCIP_OBJSENSE objsense)
SCIP_Real SCIPprobInternObjval(SCIP_PROB *transprob, SCIP_PROB *origprob, SCIP_SET *set, SCIP_Real objval)
SCIP_RETCODE SCIPprobSortConssCheck(SCIP_PROB *prob)
internal methods for storing and manipulating the main problem
public methods for managing constraints
public methods for LP management
public methods for message output
public data structures and miscellaneous methods
methods for sorting joint arrays of various types
public methods for problem variables
wrapper for rational number arithmetic
SCIP_Bool SCIPsetIsFeasEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPsetFeasFloor(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsDualfeasNegative(SCIP_SET *set, SCIP_Real val)
SCIP_Real SCIPsetEpsilon(SCIP_SET *set)
SCIP_Bool SCIPsetIsEQ(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_STAGE SCIPsetGetStage(SCIP_SET *set)
SCIP_Real SCIPsetInfinity(SCIP_SET *set)
SCIP_Bool SCIPsetIsLT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsInfinity(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsDualfeasPositive(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsGT(SCIP_SET *set, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPsetIsIntegral(SCIP_SET *set, SCIP_Real val)
SCIP_Bool SCIPsetIsZero(SCIP_SET *set, SCIP_Real val)
int SCIPsetCalcMemGrowSize(SCIP_SET *set, int num)
SCIP_Bool SCIPsetIsFeasIntegral(SCIP_SET *set, SCIP_Real val)
internal methods for global SCIP settings
#define SCIPsetFreeBufferArray(set, ptr)
#define SCIPsetAllocBufferArray(set, ptr, num)
void SCIPstatComputeRootLPBestEstimate(SCIP_STAT *stat, SCIP_SET *set, SCIP_Real rootlpobjval, SCIP_VAR **vars, int nvars)
internal methods for problem statistics
SCIP_CONSSETCHG * addconssetchg
unsigned int updatedeactivate
SCIP_Bool consschecksorted
SCIP_RATIONAL * objoffsetexact
SCIP_CONS ** origcheckconss
SCIP_RATIONAL * objscaleexact
SCIP_HASHTABLE * consnames
SCIP_Bool conscompression
SCIP_HASHTABLE * varnames
SCIP_Longint nactiveconssadded
datastructures for constraints and constraint handlers
data structures for LP management
datastructures for storing and manipulating the main problem
datastructures for global SCIP settings
datastructures for problem statistics
datastructures for problem variables
struct SCIP_BranchCand SCIP_BRANCHCAND
struct SCIP_ConflictStore SCIP_CONFLICTSTORE
struct SCIP_Cons SCIP_CONS
struct SCIP_Datatree SCIP_DATATREE
struct SCIP_EventFilter SCIP_EVENTFILTER
struct SCIP_EventQueue SCIP_EVENTQUEUE
struct SCIP_Event SCIP_EVENT
struct SCIP_CliqueTable SCIP_CLIQUETABLE
enum SCIP_BaseStat SCIP_BASESTAT
struct SCIP_Messagehdlr SCIP_MESSAGEHDLR
struct SCIP_HashMap SCIP_HASHMAP
struct SCIP_Primal SCIP_PRIMAL
#define SCIP_DECL_PROBCOPY(x)
#define SCIP_DECL_PROBDELTRANS(x)
#define SCIP_DECL_PROBEXITSOL(x)
struct SCIP_ProbData SCIP_PROBDATA
struct SCIP_Prob SCIP_PROB
#define SCIP_DECL_PROBDELORIG(x)
#define SCIP_DECL_PROBTRANS(x)
#define SCIP_DECL_PROBINITSOL(x)
enum SCIP_Objsense SCIP_OBJSENSE
struct SCIP_Rational SCIP_RATIONAL
struct SCIP_Reopt SCIP_REOPT
enum SCIP_Result SCIP_RESULT
enum SCIP_Retcode SCIP_RETCODE
@ SCIP_STAGE_TRANSFORMING
struct SCIP_Stat SCIP_STAT
struct SCIP_Tree SCIP_TREE
enum SCIP_ImplintType SCIP_IMPLINTTYPE
@ SCIP_VARTYPE_CONTINUOUS
@ SCIP_VARSTATUS_ORIGINAL
@ SCIP_VARSTATUS_MULTAGGR
@ SCIP_VARSTATUS_AGGREGATED
enum SCIP_Vartype SCIP_VARTYPE
SCIP_RETCODE SCIPvarResetBounds(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat)
SCIP_RETCODE SCIPvarChgObj(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_Real newobj)
SCIP_Real SCIPvarGetImplRedcost(SCIP_VAR *var, SCIP_SET *set, SCIP_Bool varfixing, SCIP_STAT *stat, SCIP_PROB *prob, SCIP_LP *lp)
void SCIPvarInitSolve(SCIP_VAR *var)
SCIP_RETCODE SCIPvarTransform(SCIP_VAR *origvar, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_STAT *stat, SCIP_OBJSENSE objsense, SCIP_VAR **transvar)
SCIP_RETCODE SCIPvarRelease(SCIP_VAR **var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_LP *lp)
SCIP_RETCODE SCIPvarRemove(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_CLIQUETABLE *cliquetable, SCIP_SET *set, SCIP_Bool final, SCIP_Bool keepimplics)
void SCIPvarCapture(SCIP_VAR *var)
void SCIPvarStoreRootSol(SCIP_VAR *var, SCIP_Bool roothaslp)
SCIP_RETCODE SCIPvarChgType(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_VARTYPE vartype)
void SCIPvarUpdateBestRootSol(SCIP_VAR *var, SCIP_SET *set, SCIP_Real rootsol, SCIP_Real rootredcost, SCIP_Real rootlpobjval)
SCIP_RETCODE SCIPvarChgImplType(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PRIMAL *primal, SCIP_LP *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_IMPLINTTYPE impltype)
void SCIPvarMarkDeleted(SCIP_VAR *var)
SCIP_RETCODE SCIPvarLoose(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_EVENTQUEUE *eventqueue, SCIP_PROB *prob, SCIP_LP *lp)
SCIP_RETCODE SCIPvarCopyExactData(BMS_BLKMEM *blkmem, SCIP_VAR *targetvar, SCIP_VAR *sourcevar, SCIP_Bool negateobj)
void SCIPvarSetProbindex(SCIP_VAR *var, int probindex)
SCIP_RETCODE SCIPvarChgObjExact(SCIP_VAR *var, BMS_BLKMEM *blkmem, SCIP_SET *set, SCIP_PROB *prob, SCIP_PRIMAL *primal, SCIP_LPEXACT *lp, SCIP_EVENTQUEUE *eventqueue, SCIP_RATIONAL *newobj)
internal methods for problem variables