44#define CONSHDLR_NAME "fixedvar"
45#define CONSHDLR_DESC "check bounds of original variables that are not active in transformed problem"
46#define CONSHDLR_ENFOPRIORITY -7000000
47#define CONSHDLR_CHECKPRIORITY -7000000
48#define CONSHDLR_EAGERFREQ -1
50#define CONSHDLR_NEEDSCONS FALSE
53#define DEFAULT_ENABLED TRUE
54#define DEFAULT_SUBSCIPS TRUE
55#define DEFAULT_PREFERCUT TRUE
62struct SCIP_ConshdlrData
84#define assertSmallViolation(lb, val, ub) (assert((val) >= (lb) - 0.5 && (val) <= (ub) + 0.5));
190 assert(conshdlrdata->varssize == 0);
191 assert(conshdlrdata->nvars == 0);
193 if( !conshdlrdata->enabled )
228 assert(conshdlrdata->nvars < conshdlrdata->varssize);
229 conshdlrdata->vars[conshdlrdata->nvars++] =
vars[
i];
246 conshdlrdata->varssize = 0;
247 conshdlrdata->nvars = 0;
271 for(
i = 0;
i < conshdlrdata->nvars; ++
i )
278 var = conshdlrdata->vars[
i];
336 SCIPwarningMessage(
scip,
"Declaring solution with violated bound in original problem as feasible because attempts to enforce the bound have failed. We are very sorry.\n");
359 for(
i = 0;
i < conshdlrdata->nvars; ++
i )
366 var = conshdlrdata->vars[
i];
425 for(
i = 0;
i < conshdlrdata->nvars; ++
i )
432 var = conshdlrdata->vars[
i];
470 if( !conshdlrdata->enabled )
480 nvars = conshdlrdata->nvars;
481 vars = conshdlrdata->vars;
511 SCIPdebugMsg(
scip,
"lower bound of <%s> [%g,%g] violated, solution value <%g>\n",
516 SCIPinfoMessage(
scip,
NULL,
"solution violates lower bound of fixed variable <%s> [%g,%g], solution value <%g>\n",
531 SCIPdebugMsg(
scip,
"upper bound of <%s> [%g,%g] violated, solution value <%g>\n",
536 SCIPinfoMessage(
scip,
NULL,
"solution violates upper bound of fixed variable <%s> [%g,%g], solution value <%g>\n",
580 consEnfolpFixedvar, consEnfopsFixedvar, consCheckFixedvar, consLockFixedvar,
593 "whether to check and enforce bounds on fixed variables",
597 "whether to act on subSCIPs",
601 "whether to prefer separation over tightening LP feastol in enforcement",
#define CONSHDLR_NEEDSCONS
#define CONSHDLR_CHECKPRIORITY
#define CONSHDLR_EAGERFREQ
#define CONSHDLR_ENFOPRIORITY
#define assertSmallViolation(lb, val, ub)
static SCIP_RETCODE addCut(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Bool *success, SCIP_Bool *cutoff)
#define DEFAULT_PREFERCUT
constraint handler that checks bounds on fixed variables
SCIP_RETCODE SCIPincludeConshdlrFixedvar(SCIP *scip)
SCIP_STAGE SCIPgetStage(SCIP *scip)
SCIP_VAR ** SCIPgetOrigVars(SCIP *scip)
int SCIPgetNOrigVars(SCIP *scip)
int SCIPgetNFixedVars(SCIP *scip)
void SCIPinfoMessage(SCIP *scip, FILE *file, const char *formatstr,...)
void SCIPwarningMessage(SCIP *scip, const char *formatstr,...)
SCIP_RETCODE SCIPaddBoolParam(SCIP *scip, const char *name, const char *desc, SCIP_Bool *valueptr, SCIP_Bool isadvanced, SCIP_Bool defaultvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata)
void SCIPconshdlrSetData(SCIP_CONSHDLR *conshdlr, SCIP_CONSHDLRDATA *conshdlrdata)
SCIP_RETCODE SCIPsetConshdlrFree(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPsetConshdlrEnforelax(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPincludeConshdlrBasic(SCIP *scip, SCIP_CONSHDLR **conshdlrptr, const char *name, const char *desc, int enfopriority, int chckpriority, int eagerfreq, SCIP_Bool needscons, SCIP_DECL_CONSENFOLP((*consenfolp)), SCIP_DECL_CONSENFOPS((*consenfops)), SCIP_DECL_CONSCHECK((*conscheck)), SCIP_DECL_CONSLOCK((*conslock)), SCIP_CONSHDLRDATA *conshdlrdata)
const char * SCIPconshdlrGetName(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrCopy(SCIP *scip, SCIP_CONSHDLR *conshdlr, SCIP_DECL_CONSHDLRCOPY((*conshdlrcopy)),)
SCIP_RETCODE SCIPsetConshdlrInitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_CONSHDLRDATA * SCIPconshdlrGetData(SCIP_CONSHDLR *conshdlr)
SCIP_RETCODE SCIPsetConshdlrExitsol(SCIP *scip, SCIP_CONSHDLR *conshdlr,)
SCIP_RETCODE SCIPaddRow(SCIP *scip, SCIP_ROW *row, SCIP_Bool forcecut, SCIP_Bool *infeasible)
void SCIPsetLPFeastol(SCIP *scip, SCIP_Real newfeastol)
SCIP_Real SCIPgetLPFeastol(SCIP *scip)
#define SCIPallocClearBlockMemory(scip, ptr)
#define SCIPallocBlockMemoryArray(scip, ptr, num)
#define SCIPfreeBlockMemory(scip, ptr)
#define SCIPfreeBlockMemoryArrayNull(scip, ptr, num)
SCIP_RETCODE SCIPcreateEmptyRowConshdlr(SCIP *scip, SCIP_ROW **row, SCIP_CONSHDLR *conshdlr, const char *name, SCIP_Real lhs, SCIP_Real rhs, SCIP_Bool local, SCIP_Bool modifiable, SCIP_Bool removable)
SCIP_RETCODE SCIPaddVarToRow(SCIP *scip, SCIP_ROW *row, SCIP_VAR *var, SCIP_Real val)
SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file)
SCIP_Real SCIPgetRowSolFeasibility(SCIP *scip, SCIP_ROW *row, SCIP_SOL *sol)
SCIP_RETCODE SCIPreleaseRow(SCIP *scip, SCIP_ROW **row)
SCIP_Real SCIPgetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var)
SCIP_Bool SCIPisPositive(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisInfinity(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Bool SCIPisFeasNegative(SCIP *scip, SCIP_Real val)
SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2)
SCIP_Real SCIPepsilon(SCIP *scip)
SCIP_Bool SCIPvarIsActive(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbOriginal(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbGlobal(SCIP_VAR *var)
const char * SCIPvarGetName(SCIP_VAR *var)
SCIP_Real SCIPvarGetUbOriginal(SCIP_VAR *var)
SCIP_Real SCIPvarGetLbGlobal(SCIP_VAR *var)
SCIP_RETCODE SCIPgetTransformedVar(SCIP *scip, SCIP_VAR *var, SCIP_VAR **transvar)
int SCIPsnprintf(char *t, int len, const char *s,...)
assert(minobj< SCIPgetCutoffbound(scip))
#define SCIP_DECL_CONSENFOLP(x)
#define SCIP_DECL_CONSINITSOL(x)
struct SCIP_ConshdlrData SCIP_CONSHDLRDATA
#define SCIP_DECL_CONSENFORELAX(x)
#define SCIP_DECL_CONSENFOPS(x)
#define SCIP_DECL_CONSLOCK(x)
struct SCIP_Conshdlr SCIP_CONSHDLR
#define SCIP_DECL_CONSCHECK(x)
#define SCIP_DECL_CONSHDLRCOPY(x)
#define SCIP_DECL_CONSEXITSOL(x)
#define SCIP_DECL_CONSFREE(x)
enum SCIP_Retcode SCIP_RETCODE