|
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
heur_shiftandpropagate.c
Go to the documentation of this file.
22 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
29 #define HEUR_DESC "Pre-root heuristic to expand an auxiliary branch-and-bound tree and apply propagation techniques"
42 #define DEFAULT_ONLYWITHOUTSOL TRUE /**< Should heuristic only be executed if no primal solution was found, yet? */
43 #define DEFAULT_NPROPROUNDS 10 /**< The default number of propagation rounds for each propagation used */
45 #define DEFAULT_CUTOFFBREAKER 15 /**< fixed maximum number of allowed cutoffs before the heuristic stops */
49 #define DEFAULT_COLLECTSTATS TRUE /**< should variable statistics be collected during probing? */
50 #define DEFAULT_STOPAFTERFEASIBLE TRUE /**< Should the heuristic stop calculating optimal shift values when no more rows are violated? */
52 #define SORTKEYS "nrtuv"/**< options sorting key: (n)orms down, norms (u)p, (v)iolated rows decreasing,
54 #define DEFAULT_NOZEROFIXING FALSE /**< should variables with a zero shifting value be delayed instead of being fixed? */
55 #define DEFAULT_FIXBINLOCKS TRUE /**< should binary variables with no locks in one direction be fixed to that direction? */
56 #define DEFAULT_NORMALIZE TRUE /**< should coefficients and left/right hand sides be normalized by max row coeff? */
57 #define DEFAULT_UPDATEWEIGHTS FALSE /**< should row weight be increased every time the row is violated? */
58 #define DEFAULT_IMPLISCONTINUOUS TRUE /**< should implicit integer variables be treated as continuous variables? */
74 SCIP_Bool onlywithoutsol; /**< Should heuristic only be executed if no primal solution was found, yet? */
77 int cutoffbreaker; /**< the number of cutoffs before heuristic execution is stopped, or -1 for no
85 SCIP_Bool stopafterfeasible; /**< Should the heuristic stop calculating optimal shift values when no
88 SCIP_Bool nozerofixing; /**< should variables with a zero shifting value be delayed instead of being fixed? */
89 SCIP_Bool fixbinlocks; /**< should binary variables with no locks in one direction be fixed to that direction? */
90 SCIP_Bool normalize; /**< should coefficients and left/right hand sides be normalized by max row coeff? */
92 SCIP_Bool impliscontinuous; /**< should implicit integer variables be treated as continuous variables? */
106 {
111 };
123 TRANSFORMSTATUS* transformstatus; /**< information about transform status of every discrete variable */
127 SCIP_Real* upperbounds; /**< the upper bounds of every non-continuous variable after transformation*/
128 SCIP_Real* transformshiftvals; /**< values by which original discrete variable bounds were shifted */
154 /** returns whether a given variable is counted as discrete, depending on the parameter impliscontinuous */
161 return SCIPvarIsIntegral(var) && (SCIPvarGetType(var) != SCIP_VARTYPE_IMPLINT || !impliscontinuous);
164 /** returns whether a given column is counted as discrete, depending on the parameter impliscontinuous */
171 return SCIPcolIsIntegral(col) && (!impliscontinuous || SCIPvarGetType(SCIPcolGetVar(col)) != SCIP_VARTYPE_IMPLINT);
380 /* if both lower and upper bound are -infinity and infinity, resp., this is reflected by a free transform status.
381 * If the lower bound is already zero, this is reflected by identity transform status. In both cases, none of the
410 /* determine the upper bound for this variable in heuristic transformation (lower bound is implicit; always 0) */
451 SCIPdebugMessage("Variable <%s> at colpos %d transformed. LB <%g> --> <%g>, UB <%g> --> <%g>\n",
455 /** initializes copy of the original coefficient matrix and applies heuristic specific adjustments: normalizing row
456 * vectors, transforming variable domains such that lower bound is zero, and relaxing continuous variables.
565 SCIPdebugMessage(" %s : lhs=%g, rhs=%g, maxval=%g \n", SCIProwGetName(row), matrix->lhs[i], matrix->rhs[i], maxval);
571 /* modify the lhs and rhs w.r.t to the rows constant and normalize by 1-norm, i.e divide the lhs and rhs by the
585 * Maxval may be zero if the constraint contains no variables but is modifiable, hence not redundant
596 /* in case of empty rows with a 0 < lhs <= 0.0 or 0.0 <= rhs < 0 we deduce the infeasibility of the problem */
597 if( nrowlpnonz == 0 && (SCIPisFeasPositive(scip, matrix->lhs[i]) || SCIPisFeasNegative(scip, matrix->rhs[i])) )
652 /* loop over all rows with nonzero coefficients in the column, transform them and add them to the heuristic matrix */
704 SCIPdebugMessage("Matrix initialized for %d discrete variables with %d cols, %d rows and %d nonzero entries\n",
822 assert((violatedrowpos[i] == -1 && SCIPisFeasGE(scip, rhs[i], 0.0) && SCIPisFeasGE(scip, -lhs[i], 0.0))
823 || (violatedrowpos[i] >= 0 &&(SCIPisFeasLT(scip, rhs[i], 0.0) || SCIPisFeasLT(scip, -lhs[i], 0.0))));
848 /* check if original variable has different bounds and transform solution value correspondingly */
864 * @todo if there is already an incumbent solution, try considering the objective cutoff as additional constraint */
927 /* for a feasible row, determine the minimum integer value within the bounds of the variable by which it has to be
937 * i.e. a positive coefficient for a "<="-constraint, a negative coefficient for a ">="-constraint.
944 /* if the variable has no lock in the current row, it can still help to increase the slack of this row;
952 /* check if the least violating shift lies within variable bounds and set corresponding array values */
965 /* for a violated row, determine the minimum integral value within the bounds of the variable by which it has to be
974 /* if coefficient has the right sign to make row feasible, determine the minimum integer to shift variable
982 /* check if the minimum feasibility recovery shift lies within variable bounds and set corresponding array
999 /* in case that the variable cannot affect the feasibility of any row, in particular it cannot violate
1015 /* best shifting step is calculated by summing up the violation changes for each relevant step and
1016 * taking the one which leads to the minimum sum. This sum measures the balance of feasibility recovering and
1018 * note, the sums for smaller steps have to be taken into account for all bigger steps, i.e., the sums can be
1025 /* if we reached the last entry for the current step value, we have finished computing its sum and
1059 if( SCIPisFeasLT(scip, -(matrix->lhs[rowindex]), 0.0) || SCIPisFeasLT(scip, matrix->rhs[rowindex], 0.0) )
1089 /** updates transformation of a given variable by taking into account current local bounds. if the bounds have changed
1090 * since last update, updating the heuristic specific upper bound of the variable, its current transformed solution value
1099 SCIP_Real* transformshiftval, /**< value, by which the variable has been shifted during transformation */
1167 assert(SCIPisFeasLE(scip, ABS(lb), ABS(ub)) || matrix->transformstatus[varindex] == TRANSFORMSTATUS_NEG);
1171 /* if the bound, by which the variable was shifted, has changed, deltashift is different from zero, which requires
1184 /* go through rows, update the rows w.r.t. the influence of the changed transformation of the variable */
1210 updateViolations(scip, matrix, rows[i], violatedrows, violatedrowpos, nviolatedrows, heurdata->rowweights, heurdata->updateweights);
1223 {
1307 " SHIFTANDPROPAGATE PROBING : %d probings, %lld domain reductions, ncutoffs: %d , LP iterations: %lld \n ",
1317 /** initialization method of primal heuristic(called after problem was transformed). We only need this method for
1489 /* we have to collect the number of different variable types before we start probing since during probing variable
1531 SCIP_CALL( initMatrix(scip, matrix, heurdata, heurdata->normalize, &nmaxrows, heurdata->relax, &initialized, &infeasible) );
1540 /* the number of discrete LP column variables can be less than the actual number of variables, if, e.g., there
1545 SCIPdebugMessage(" Not all discrete variables are in the current LP. Shiftandpropagate execution terminated\n");
1604 checkViolations(scip, matrix, violatedrows, violatedrowpos, &nviolatedrows, &nredundantrows, violatedvarrows);
1607 /* sort variables w.r.t. the sorting key parameter. Sorting is indirect, all matrix column data
1676 SCIPdebugMessage("Variables sorted (upwards) w.r.t their number of currently infeasible rows!\n");
1685 SCIPpermuteIntArray(&permutation[nbinvars], nbinvars - 1, ndiscvars - nbinvars - 1, &heurdata->randseed);
1716 SCIP_CALL( SCIPcatchVarEvent(scip, var, SCIP_EVENTTYPE_BOUNDCHANGED, eventhdlr, eventdatas[c], NULL) );
1724 SCIPdebugMessage("SHIFT_AND_PROPAGATE heuristic starts main loop with %d violations and %d remaining variables!\n",
1729 /* loop over variables, shift them according to shifting criteria and try to reduce the global infeasibility */
1762 updateTransformation(scip, matrix, heurdata, permutedvarindex, &(matrix->transformshiftvals[permutedvarindex]),
1783 /* check whether the variable is binary and has no locks in one direction, so that we want to fix it to the
1786 if( heurdata->fixbinlocks && SCIPvarIsBinary(var) && (SCIPvarGetNLocksUp(var) == 0 || SCIPvarGetNLocksDown(var) == 0) )
1798 /* only apply the computationally expensive best shift selection, if there is a violated row left */
1802 SCIP_CALL( getOptimalShiftingValue(scip, matrix, permutedvarindex, 1, heurdata->rowweights, steps, violationchange,
1814 SCIP_CALL( getOptimalShiftingValue(scip, matrix, permutedvarindex, -1, heurdata->rowweights, steps, violationchange,
1829 /* if zero optimal shift values are forbidden by the user parameter, delay the variable by marking it suspicious */
1843 /* if propagation is enabled, fix the variable to the new solution value and propagate the fixation
1852 SCIPdebugMessage(" Shift %g(%g originally) is optimal, propagate solution\n", optimalshiftvalue, origsolval);
1857 SCIPdebugMessage("Propagation finished! <%lld> domain reductions %s, <%d> probing depth\n", ndomredsfound, cutoff ? "CUTOFF" : "",
1880 /* if the variable were to be set to one of its bounds, repropagate by tightening this bound by 1.0
1893 /* if the tightened bound again leads to a cutoff, both subproblems are proven infeasible and the heuristic
1910 /* if the tightened bound again leads to a cutoff, both subproblems are proven infeasible and the heuristic
1928 SCIPdebugMessage(" Suspicious variable! Postponed from pos <%d> to position <%d>\n", c, lastindexofsusp);
1945 SCIPdebugMessage("Heuristic finished with %d remaining violations and %d remaining variables!\n",
1948 /* if constructed solution might be feasible, go through the queue of suspicious variables and set the solution
1966 /* update the transformation of the variable, since the bound might have changed after the last update. */
1968 updateTransformation(scip, matrix, heurdata, permutedvarindex, &(matrix->transformshiftvals[permutedvarindex]),
1971 /* retransform the solution value from the heuristic transformed space, set the solution value accordingly */
1977 SCIP_CALL( SCIPfixVarProbing(scip, var, origsolval) ); /* only to ensure that some assertions can be made later */
1979 SCIPdebugMessage(" Remaining variable <%s> set to <%g>; %d Violations\n", SCIPvarGetName(var), origsolval,
2011 SCIPdebugMessage(" -> old LP iterations: %"SCIP_LONGINT_FORMAT"\n", SCIPgetNLPIterations(scip));
2014 * errors in the LP solver should not kill the overall solving process, if the LP is just needed for a heuristic.
2015 * hence in optimized mode, the return code is caught and a warning is printed, only in debug mode, SCIP will stop.
2023 SCIPwarningMessage(scip, "Error while solving LP in SHIFTANDPROPAGATE heuristic; LP solve terminated with code <%d>\n",
2031 SCIPdebugMessage(" -> new LP iterations: %"SCIP_LONGINT_FORMAT"\n", SCIPgetNLPIterations(scip));
2054 /* @todo: maybe bounds don't need to be checked, in this case put an assert concerning stored ?????????? */
2062 SCIPstatisticMessage(" Shiftandpropagate solution value: %16.9g \n", SCIPgetSolOrigObj(scip, sol));
2086 SCIP_CALL( SCIPdropVarEvent(scip, var, SCIP_EVENTTYPE_BOUNDCHANGED, eventhdlr, eventdatas[c], -1) );
2161 updateTransformation(scip, matrix, eventhdlrdata->heurdata, colpos, &(matrix->transformshiftvals[colpos]),
2162 lb, ub, eventhdlrdata->violatedrows, eventhdlrdata->violatedrowpos, eventhdlrdata->nviolatedrows);
2211 SCIP_CALL( SCIPaddIntParam(scip, "heuristics/"HEUR_NAME"/nproprounds", "The number of propagation rounds used for each propagation",
2213 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/relax", "Should continuous variables be relaxed?",
2215 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/probing", "Should domains be reduced by probing?",
2217 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/onlywithoutsol", "Should heuristic only be executed if no primal solution was found, yet?",
2219 SCIP_CALL( SCIPaddIntParam(scip, "heuristics/"HEUR_NAME"/cutoffbreaker", "The number of cutoffs before heuristic stops",
2221 SCIP_CALL( SCIPaddCharParam(scip, "heuristics/"HEUR_NAME"/sortkey", "the key for variable sorting: (n)orms down, norms (u)p, (v)iolations down, viola(t)ions up, or (r)andom",
2223 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/sortvars", "Should variables be sorted for the heuristic?",
2225 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/"HEUR_NAME"/collectstats", "should variable statistics be collected during probing?",
2227 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/stopafterfeasible", "Should the heuristic stop calculating optimal shift values when no more rows are violated?",
2229 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/preferbinaries", "Should binary variables be shifted first?",
2231 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/nozerofixing", "should variables with a zero shifting value be delayed instead of being fixed?",
2233 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/fixbinlocks", "should binary variables with no locks in one direction be fixed to that direction?",
2235 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/normalize", "should coefficients and left/right hand sides be normalized by max row coeff?",
2237 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/updateweights", "should row weight be increased every time the row is violated?",
2239 SCIP_CALL( SCIPaddBoolParam(scip, "heuristics/shiftandpropagate/impliscontinuous", "should implicit integer variables be treated as continuous variables?",
void SCIPsortRealInt(SCIP_Real *realarray, int *intarray, int len) SCIP_RETCODE SCIPsolveProbingLP(SCIP *scip, int itlim, SCIP_Bool *lperror, SCIP_Bool *cutoff) Definition: scip.c:29936 Definition: type_result.h:33 Definition: type_result.h:47 preroot heuristic that alternatingly fixes variables and propagates domains Definition: struct_scip.h:52 static void relaxVar(SCIP *scip, SCIP_VAR *var, CONSTRAINTMATRIX *matrix, SCIP_Bool normalize) Definition: heur_shiftandpropagate.c:249 SCIP_RETCODE SCIPsetHeurCopy(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURCOPY((*heurcopy))) Definition: scip.c:7014 SCIP_RETCODE SCIPbacktrackProbing(SCIP *scip, int probingdepth) Definition: scip.c:29573 void SCIPwarningMessage(SCIP *scip, const char *formatstr,...) Definition: scip.c:1206 SCIP_Bool SCIPisFeasLT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38667 static SCIP_DECL_HEUREXEC(heurExecShiftandpropagate) Definition: heur_shiftandpropagate.c:1386 Definition: heur_shiftandpropagate.c:110 Definition: struct_var.h:196 SCIP_RETCODE SCIPsetSolVal(SCIP *scip, SCIP_SOL *sol, SCIP_VAR *var, SCIP_Real val) Definition: scip.c:31639 SCIP_RETCODE SCIPincludeHeurBasic(SCIP *scip, SCIP_HEUR **heur, const char *name, const char *desc, char dispchar, int priority, int freq, int freqofs, int maxdepth, unsigned int timingmask, SCIP_Bool usessubscip, SCIP_DECL_HEUREXEC((*heurexec)), SCIP_HEURDATA *heurdata) Definition: scip.c:6969 SCIP_RETCODE SCIPpropagateProbing(SCIP *scip, int maxproprounds, SCIP_Bool *cutoff, SCIP_Longint *ndomredsfound) Definition: scip.c:29766 static SCIP_DECL_EVENTEXEC(eventExecShiftandpropagate) Definition: heur_shiftandpropagate.c:2129 static void freeMatrix(SCIP *scip, CONSTRAINTMATRIX **matrix) Definition: heur_shiftandpropagate.c:712 SCIP_RETCODE SCIPincludeEventhdlrBasic(SCIP *scip, SCIP_EVENTHDLR **eventhdlrptr, const char *name, const char *desc, SCIP_DECL_EVENTEXEC((*eventexec)), SCIP_EVENTHDLRDATA *eventhdlrdata) Definition: scip.c:7209 static void checkViolations(SCIP *scip, CONSTRAINTMATRIX *matrix, int *violatedrows, int *violatedrowpos, int *nviolatedrows, int *nredundantrows, int *violatedvarrows) Definition: heur_shiftandpropagate.c:761 Definition: type_var.h:53 void SCIPsortDownIntInt(int *intarray1, int *intarray2, int len) void SCIPsortDownRealInt(SCIP_Real *realarray, int *intarray, int len) SCIP_RETCODE SCIPgetLPColsData(SCIP *scip, SCIP_COL ***cols, int *ncols) Definition: scip.c:24369 Definition: struct_lp.h:123 Definition: struct_sol.h:50 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) Definition: scip.c:3388 SCIP_RETCODE SCIPaddIntParam(SCIP *scip, const char *name, const char *desc, int *valueptr, SCIP_Bool isadvanced, int defaultvalue, int minvalue, int maxvalue, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata) Definition: scip.c:3414 static SCIP_DECL_HEUREXIT(heurExitShiftandpropagate) Definition: heur_shiftandpropagate.c:1292 SCIP_RETCODE SCIPcatchVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int *filterpos) Definition: scip.c:33378 static void updateTransformation(SCIP *scip, CONSTRAINTMATRIX *matrix, SCIP_HEURDATA *heurdata, int varindex, SCIP_Real *transformshiftval, SCIP_Real lb, SCIP_Real ub, int *violatedrows, int *violatedrowpos, int *nviolatedrows) Definition: heur_shiftandpropagate.c:1095 static SCIP_Bool varIsDiscrete(SCIP_VAR *var, SCIP_Bool impliscontinuous) Definition: heur_shiftandpropagate.c:157 Definition: type_result.h:35 void SCIPsortIntInt(int *intarray1, int *intarray2, int len) static void transformVariable(SCIP *scip, CONSTRAINTMATRIX *matrix, SCIP_HEURDATA *heurdata, int colpos) Definition: heur_shiftandpropagate.c:352 static SCIP_Bool colIsDiscrete(SCIP_COL *col, SCIP_Bool impliscontinuous) Definition: heur_shiftandpropagate.c:167 SCIP_RETCODE SCIPcreateSol(SCIP *scip, SCIP_SOL **sol, SCIP_HEUR *heur) Definition: scip.c:30856 SCIP_Bool SCIPisFeasEQ(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38648 Definition: type_var.h:42 Definition: type_retcode.h:33 SCIP_RETCODE SCIPgetLPRowsData(SCIP *scip, SCIP_ROW ***rows, int *nrows) Definition: scip.c:24447 void SCIPsortPtr(void **ptrarray, SCIP_DECL_SORTPTRCOMP((*ptrcomp)), int len) SCIP_EVENTHDLRDATA * SCIPeventhdlrGetData(SCIP_EVENTHDLR *eventhdlr) Definition: event.c:288 static SCIP_DECL_HEURINIT(heurInitShiftandpropagate) Definition: heur_shiftandpropagate.c:1322 SCIP_Bool SCIPisFeasGT(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38705 Definition: struct_heur.h:36 Definition: type_lp.h:34 Definition: type_var.h:55 Definition: heur_shiftandpropagate.c:108 SCIP_RETCODE SCIPincludeHeurShiftandpropagate(SCIP *scip) Definition: heur_shiftandpropagate.c:2173 Definition: type_var.h:54 Definition: struct_lp.h:188 SCIP_RETCODE SCIPfixVarProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval) Definition: scip.c:29709 static SCIP_RETCODE initMatrix(SCIP *scip, CONSTRAINTMATRIX *matrix, SCIP_HEURDATA *heurdata, SCIP_Bool normalize, int *nmaxrows, SCIP_Bool relax, SCIP_Bool *initialized, SCIP_Bool *infeasible) Definition: heur_shiftandpropagate.c:460 static void getColumnData(CONSTRAINTMATRIX *matrix, int colindex, SCIP_Real **valpointer, int **indexpointer, int *ncolvals) Definition: heur_shiftandpropagate.c:216 SCIP_RETCODE SCIPsetHeurExit(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEUREXIT((*heurexit))) Definition: scip.c:7062 SCIP_RETCODE SCIPsetHeurInit(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURINIT((*heurinit))) Definition: scip.c:7046 SCIP_RETCODE SCIPdropVarEvent(SCIP *scip, SCIP_VAR *var, SCIP_EVENTTYPE eventtype, SCIP_EVENTHDLR *eventhdlr, SCIP_EVENTDATA *eventdata, int filterpos) Definition: scip.c:33424 static SCIP_DECL_HEURCOPY(heurCopyShiftandpropagate) Definition: heur_shiftandpropagate.c:1372 static SCIP_Real retransformVariable(SCIP *scip, CONSTRAINTMATRIX *matrix, SCIP_VAR *var, int varindex, SCIP_Real solvalue) Definition: heur_shiftandpropagate.c:833 const char * SCIPeventhdlrGetName(SCIP_EVENTHDLR *eventhdlr) Definition: event.c:278 static void getRowData(CONSTRAINTMATRIX *matrix, int rowindex, SCIP_Real **valpointer, SCIP_Real *lhs, SCIP_Real *rhs, int **indexpointer, int *nrowvals) Definition: heur_shiftandpropagate.c:177 SCIP_RETCODE SCIPchgVarUbProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound) Definition: scip.c:29674 SCIP_Bool SCIPisFeasLE(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38686 SCIP_RETCODE SCIPsetHeurFree(SCIP *scip, SCIP_HEUR *heur, SCIP_DECL_HEURFREE((*heurfree))) Definition: scip.c:7030 Definition: heur_shiftandpropagate.c:109 SCIP_RETCODE SCIPaddCharParam(SCIP *scip, const char *name, const char *desc, char *valueptr, SCIP_Bool isadvanced, char defaultvalue, const char *allowedvalues, SCIP_DECL_PARAMCHGD((*paramchgd)), SCIP_PARAMDATA *paramdata) Definition: scip.c:3498 SCIP_RETCODE SCIPchgVarLbProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound) Definition: scip.c:29640 void SCIPpermuteIntArray(int *array, int begin, int end, unsigned int *randseed) Definition: misc.c:7367 SCIP_RETCODE SCIPprintRow(SCIP *scip, SCIP_ROW *row, FILE *file) Definition: scip.c:26010 static SCIP_DECL_SORTPTRCOMP(heurSortColsShiftandpropagate) Definition: heur_shiftandpropagate.c:1223 SCIP_Bool SCIPisFeasGE(SCIP *scip, SCIP_Real val1, SCIP_Real val2) Definition: scip.c:38724 Definition: heur_shiftandpropagate.c:111 Definition: type_lp.h:33 static SCIP_DECL_HEURFREE(heurFreeShiftandpropagate) Definition: heur_shiftandpropagate.c:1347 SCIP_RETCODE SCIPtrySol(SCIP *scip, SCIP_SOL *sol, SCIP_Bool printreason, SCIP_Bool checkbounds, SCIP_Bool checkintegrality, SCIP_Bool checklprows, SCIP_Bool *stored) Definition: scip.c:32978 Definition: struct_event.h:185 static SCIP_RETCODE getOptimalShiftingValue(SCIP *scip, CONSTRAINTMATRIX *matrix, int varindex, int direction, int *rowweights, SCIP_Real *steps, int *violationchange, SCIP_Real *beststep, int *rowviolations) Definition: heur_shiftandpropagate.c:867 static void updateViolations(SCIP *scip, CONSTRAINTMATRIX *matrix, int rowindex, int *violatedrows, int *violatedrowpos, int *nviolatedrows, int *rowweights, SCIP_Bool updateweights) Definition: heur_shiftandpropagate.c:1043 SCIP_RETCODE SCIPprintSol(SCIP *scip, SCIP_SOL *sol, FILE *file, SCIP_Bool printzeros) Definition: scip.c:32161 Definition: type_var.h:56 |