scip_probing.h
Go to the documentation of this file.
29 /*---+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
54 /** returns whether we are in probing mode; probing mode is activated via SCIPstartProbing() and stopped
75 /** initiates probing, making methods SCIPnewProbingNode(), SCIPbacktrackProbing(), SCIPchgVarLbProbing(),
76 * SCIPchgVarUbProbing(), SCIPfixVarProbing(), SCIPpropagateProbing(), and SCIPsolveProbingLP() available
78 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
85 * @note The collection of variable statistics is turned off during probing. If these statistics should be collected
93 /** creates a new probing sub node, whose changes can be undone by backtracking to a higher node in the probing path
97 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
123 * the changes of the probing node of the given probing depth are the last ones that remain active;
126 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
136 int probingdepth /**< probing depth of the node in the probing path that should be reactivated */
141 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
153 /** injects a change of variable's lower bound into current probing node; the same can also be achieved with a call to
154 * SCIPchgVarLb(), but in this case, the bound change would be treated like a deduction instead of a branching decision
156 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
170 /** injects a change of variable's upper bound into current probing node; the same can also be achieved with a call to
171 * SCIPchgVarUb(), but in this case, the bound change would be treated like a deduction instead of a branching decision
173 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
202 /** injects a change of variable's bounds into current probing node to fix the variable to the specified value;
203 * the same can also be achieved with a call to SCIPfixVar(), but in this case, the bound changes would be treated
206 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
222 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
258 /** applies domain propagation on the probing sub problem, that was changed after SCIPstartProbing() was called;
259 * the propagated domains of the variables can be accessed with the usual bound accessing calls SCIPvarGetLbLocal()
260 * and SCIPvarGetUbLocal(); the propagation is only valid locally, i.e. the local bounds as well as the changed
261 * bounds due to SCIPchgVarLbProbing(), SCIPchgVarUbProbing(), and SCIPfixVarProbing() are used for propagation
263 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
273 int maxproprounds, /**< maximal number of propagation rounds (-1: no limit, 0: parameter settings) */
275 SCIP_Longint* ndomredsfound /**< pointer to store the number of domain reductions found, or NULL */
278 /** applies domain propagation on the probing sub problem, that was changed after SCIPstartProbing() was called;
279 * only propagations of the binary variables fixed at the current probing node that are triggered by the implication
281 * the propagated domains of the variables can be accessed with the usual bound accessing calls SCIPvarGetLbLocal()
282 * and SCIPvarGetUbLocal(); the propagation is only valid locally, i.e. the local bounds as well as the changed
283 * bounds due to SCIPchgVarLbProbing(), SCIPchgVarUbProbing(), and SCIPfixVarProbing() are used for propagation
285 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
303 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
318 /** solves the LP at the current probing node (cannot be applied at preprocessing stage) and applies pricing
321 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed . See \ref
341 * @note state and norms are stored at the node and later released by SCIP; therefore, the pointers are set
344 * @note the pointers to state and norms must not be NULL; however, they may point to a NULL pointer if the
347 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
365 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
380 * this method can only be applied during probing; the user should resolve the probing LP afterwards
383 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
395 /** solves relaxation(s) at the current probing node (cannot be applied at preprocessing stage);
398 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
424 SCIP_DIVETYPE divetype, /**< represents different methods for a dive set to explore the next children */
432 /** update diveset LP statistics, should be called after every LP solved by this diving heuristic */
455 /** enforces a probing/diving solution by suggesting bound changes that maximize the score w.r.t. the current diving settings
457 * the process is guided by the enforcement priorities of the constraint handlers and the scoring mechanism provided by
459 * Constraint handlers may suggest diving bound changes in decreasing order of their enforcement priority, based on the
460 * solution values in the solution @p sol and the current local bounds of the variables. A diving bound change
461 * is a triple (variable,branching direction,value) and is used inside SCIPperformGenericDivingAlgorithm().
463 * After a successful call, SCIP holds two arrays of suggested dive bound changes, one for the preferred child
470 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
483 SCIP_Bool* success, /**< pointer to store whether constraint handler successfully found a variable */
484 SCIP_Bool* infeasible /**< pointer to store whether the current node was detected to be infeasible */
487 /** adds a diving bound change to the diving bound change storage of SCIP together with the information if this is a
490 * @return \ref SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See \ref
SCIP_EXPORT SCIP_RETCODE SCIPapplyCutsProbing(SCIP *scip, SCIP_Bool *cutoff)
Definition: scip_probing.c:938
SCIP_EXPORT SCIP_RETCODE SCIPfixVarProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real fixedval)
Definition: scip_probing.c:409
Definition: struct_scip.h:59
SCIP_EXPORT SCIP_RETCODE SCIPnewProbingNode(SCIP *scip)
Definition: scip_probing.c:156
SCIP_EXPORT SCIP_RETCODE SCIPsolveProbingRelax(SCIP *scip, SCIP_Bool *cutoff)
Definition: scip_probing.c:967
SCIP_EXPORT SCIP_RETCODE SCIPpropagateProbingImplications(SCIP *scip, SCIP_Bool *cutoff)
Definition: scip_probing.c:677
Definition: struct_var.h:198
SCIP_EXPORT char * SCIPsnprintfProbingStats(SCIP *scip, char *strbuf, int len)
Definition: scip_probing.c:1035
SCIP_EXPORT SCIP_RETCODE SCIPgetDiveBoundChanges(SCIP *scip, SCIP_DIVESET *diveset, SCIP_SOL *sol, SCIP_Bool *success, SCIP_Bool *infeasible)
Definition: scip_probing.c:1192
type definitions for return codes for SCIP methods
SCIP_EXPORT SCIP_RETCODE SCIPsolveProbingLPWithPricing(SCIP *scip, SCIP_Bool pretendroot, SCIP_Bool displayinfo, int maxpricerounds, SCIP_Bool *lperror, SCIP_Bool *cutoff)
Definition: scip_probing.c:834
SCIP_EXPORT SCIP_RETCODE SCIPaddDiveBoundChange(SCIP *scip, SCIP_VAR *var, SCIP_BRANCHDIR dir, SCIP_Real value, SCIP_Bool preferred)
Definition: scip_probing.c:1254
SCIP_EXPORT SCIP_RETCODE SCIPgetDivesetScore(SCIP *scip, SCIP_DIVESET *diveset, SCIP_DIVETYPE divetype, SCIP_VAR *divecand, SCIP_Real divecandsol, SCIP_Real divecandfrac, SCIP_Real *candscore, SCIP_Bool *roundup)
Definition: scip_probing.c:1110
Definition: lpi_cpx.c:188
type definitions for LP management
Definition: struct_sol.h:64
SCIP_EXPORT SCIP_Bool SCIPisObjChangedProbing(SCIP *scip)
Definition: scip_probing.c:543
type definitions for primal heuristics
SCIP_EXPORT SCIP_RETCODE SCIPsetProbingLPState(SCIP *scip, SCIP_LPISTATE **lpistate, SCIP_LPINORMS **lpinorms, SCIP_Bool primalfeas, SCIP_Bool dualfeas)
Definition: scip_probing.c:867
type definitions for SCIP's main datastructure
type definitions for specific LP solvers interface
SCIP_EXPORT SCIP_RETCODE SCIPaddRowProbing(SCIP *scip, SCIP_ROW *row)
Definition: scip_probing.c:898
type definitions for problem variables
SCIP_EXPORT SCIP_RETCODE SCIPbacktrackProbing(SCIP *scip, int probingdepth)
Definition: scip_probing.c:216
SCIP_EXPORT SCIP_Real SCIPgetVarObjProbing(SCIP *scip, SCIP_VAR *var)
Definition: scip_probing.c:379
Definition: struct_heur.h:58
SCIP_EXPORT SCIP_RETCODE SCIPpropagateProbing(SCIP *scip, int maxproprounds, SCIP_Bool *cutoff, SCIP_Longint *ndomredsfound)
Definition: scip_probing.c:571
Definition: struct_lp.h:192
type definitions for storing primal CIP solutions
SCIP_EXPORT void SCIPupdateDivesetStats(SCIP *scip, SCIP_DIVESET *diveset, int nprobingnodes, int nbacktracks, SCIP_Longint nsolsfound, SCIP_Longint nbestsolsfound, SCIP_Longint nconflictsfound, SCIP_Bool leavewassol, SCIP_DIVECONTEXT divecontext)
Definition: scip_probing.c:1149
SCIP_EXPORT void SCIPclearDiveBoundChanges(SCIP *scip)
Definition: scip_probing.c:1307
Definition: lpi_clp.cpp:123
SCIP_EXPORT SCIP_RETCODE SCIPchgVarLbProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
Definition: scip_probing.c:292
type definitions for branching and inference history
SCIP_EXPORT SCIP_RETCODE SCIPchgVarUbProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newbound)
Definition: scip_probing.c:336
common defines and data types used in all packages of SCIP
Definition: objbenders.h:33
SCIP_EXPORT void SCIPgetDiveBoundChangeData(SCIP *scip, SCIP_VAR ***variables, SCIP_BRANCHDIR **directions, SCIP_Real **values, int *ndivebdchgs, SCIP_Bool preferred)
Definition: scip_probing.c:1280
SCIP_EXPORT void SCIPupdateDivesetLPStats(SCIP *scip, SCIP_DIVESET *diveset, SCIP_Longint niterstoadd, SCIP_DIVECONTEXT divecontext)
Definition: scip_probing.c:1135
SCIP_EXPORT SCIP_RETCODE SCIPsolveProbingLP(SCIP *scip, int itlim, SCIP_Bool *lperror, SCIP_Bool *cutoff)
Definition: scip_probing.c:810
SCIP_EXPORT SCIP_RETCODE SCIPchgVarObjProbing(SCIP *scip, SCIP_VAR *var, SCIP_Real newobj)
Definition: scip_probing.c:465