Detailed Description
methods to initiate and control the probing mode of SCIP
Function Documentation
◆ SCIPinProbing()
SCIP_EXPORT SCIP_Bool SCIPinProbing | ( | SCIP * | scip | ) |
returns whether we are in probing mode; probing mode is activated via SCIPstartProbing() and stopped via SCIPendProbing()
- Returns
- TRUE, if SCIP is currently in probing mode, otherwise FALSE
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure
Definition at line 88 of file scip_probing.c.
References FALSE, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPtreeProbing(), Scip::tree, and TRUE.
Referenced by analyzeConflict(), analyzeConflictOne(), analyzeConflictZero(), applyGenVBounds(), applyProbingVar(), applyVbounds(), checkRedundancy(), consdataDeletePos(), execGenVBounds(), filterCandidates(), filterExistingLP(), fixIntegerVariable(), fixIntegerVariableLb(), fixIntegerVariableUb(), getFSBResult(), performRandRounding(), polishSolution(), processBinvarFixings(), propagateAllConss(), propagateBounds(), propagateBoundsCons(), propagateBoundsTightenVarLb(), propagateBoundsTightenVarUb(), propagateCons(), propagateConstraintSides(), propagateFullOrbitopeCons(), propagatePackingPartitioningCons(), propIndicator(), reformulate(), removeFixedBinvars(), resolveNLPWithTighterFeastol(), resolvePropagationCoretimes(), SCIP_DECL_CONSPRESOL(), SCIP_DECL_CONSPROP(), SCIP_DECL_EVENTEXEC(), SCIP_DECL_PRESOLEXEC(), SCIP_DECL_PROPEXEC(), SCIP_DECL_PROPPRESOL(), SCIP_DECL_RELAXEXEC(), SCIPaddDiveBoundChange(), SCIPapplyLockFixings(), SCIPbendersExec(), SCIPbendersFreeSubproblem(), SCIPbendersSetMastervarsCont(), SCIPbendersSetupSubproblem(), SCIPbendersSolveSubproblem(), SCIPbendersSolveSubproblemCIP(), SCIPbendersSolveSubproblemLP(), SCIPchgVarLb(), SCIPchgVarLbGlobal(), SCIPchgVarUb(), SCIPchgVarUbGlobal(), SCIPgetDiveBoundChangeData(), SCIPgetDiveBoundChanges(), SCIPgetVarStrongbranchWithPropagation(), SCIPinferVarLbCons(), SCIPinferVarLbProp(), SCIPinferVarUbCons(), SCIPinferVarUbProp(), SCIPisObjChangedProbing(), SCIPrelaxExec(), SCIPsnprintfProbingStats(), SCIPstartStrongbranch(), SCIPtightenVarLb(), SCIPtightenVarLbGlobal(), SCIPtightenVarUb(), SCIPtightenVarUbGlobal(), SCIPupdateDivesetStats(), solveBilinearLP(), solveIndependentCons(), solveSubproblem(), storeAllBilinearTerms(), tightenBounds(), tightenedLinkvar(), updateSubproblemLowerbound(), and varProcessBoundChanges().
◆ SCIPstartProbing()
SCIP_EXPORT SCIP_RETCODE SCIPstartProbing | ( | SCIP * | scip | ) |
initiates probing, making methods SCIPnewProbingNode(), SCIPbacktrackProbing(), SCIPchgVarLbProbing(), SCIPchgVarUbProbing(), SCIPfixVarProbing(), SCIPpropagateProbing(), and SCIPsolveProbingLP() available
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Note
- The collection of variable statistics is turned off during probing. If these statistics should be collected during probing use the method SCIPenableVarHistory() to turn the collection explicitly on.
- Parameters
-
scip SCIP data structure
Definition at line 110 of file scip_probing.c.
References FALSE, Scip::lp, Scip::mem, NULL, SCIP_Mem::probmem, Scip::relaxation, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPstatDisableVarHistory(), SCIPswapPointers(), SCIPtreeProbing(), SCIPtreeStartProbing(), Scip::sepastore, Scip::sepastoreprobing, Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
Referenced by applyBoundHeur(), applyCompletesol(), applyOptcumulative(), applyVbounds(), executeStrongBranching(), fixAndPropagate(), performRandRounding(), performStrongbranchSOS1(), propagateCons(), SCIP_DECL_HEUREXEC(), SCIPapplyProbingVar(), SCIPbendersComputeSubproblemLowerbound(), SCIPbendersSetupSubproblem(), SCIPbendersSolveSubproblem(), SCIPperformGenericDivingAlgorithm(), selectVarMultAggrBranching(), tryOneOpt(), trySolCandidate(), and updateSubproblemLowerbound().
◆ SCIPnewProbingNode()
SCIP_EXPORT SCIP_RETCODE SCIPnewProbingNode | ( | SCIP * | scip | ) |
creates a new probing sub node, whose changes can be undone by backtracking to a higher node in the probing path with a call to SCIPbacktrackProbing(); using a sub node for each set of probing bound changes can improve conflict analysis
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure
Definition at line 156 of file scip_probing.c.
References FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_MAXDEPTHLEVEL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPtreeCreateProbingNode(), SCIPtreeProbing(), SCIPwarningMessage(), Scip::set, Scip::tree, and TRUE.
Referenced by applyCliqueFixings(), applyOptcumulativeFixings(), applyVboundsFixings(), executeStrongBranching(), performFixing(), performRandRounding(), performStrongbranchWithPropagation(), propagateCons(), SCIP_DECL_HEUREXEC(), SCIPapplyLockFixings(), SCIPperformGenericDivingAlgorithm(), selectVarMultAggrBranching(), solveBilinearLP(), tightenVariables(), tryOneOpt(), and trySolCandidate().
◆ SCIPgetProbingDepth()
SCIP_EXPORT int SCIPgetProbingDepth | ( | SCIP * | scip | ) |
returns the current probing depth
- Returns
- the probing depth, i.e. the number of probing sub nodes existing in the probing path
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure
Definition at line 189 of file scip_probing.c.
References FALSE, SCIP_CALL_ABORT, SCIPABORT, SCIPcheckStage(), SCIPerrorMessage, SCIPtreeGetProbingDepth(), SCIPtreeProbing(), Scip::tree, and TRUE.
Referenced by applyBoundHeur(), applyCliqueFixings(), applyOptcumulativeFixings(), applyVboundsFixings(), ensureScoresPresent(), executeBranchingRecursive(), filterCandidates(), fixAndPropagate(), getFSBResult(), SCIP_DECL_HEUREXEC(), SCIPapplyLockFixings(), SCIPendStrongbranch(), SCIPperformGenericDivingAlgorithm(), SCIPsnprintfProbingStats(), selectVarRecursive(), and tightenVariables().
◆ SCIPbacktrackProbing()
SCIP_EXPORT SCIP_RETCODE SCIPbacktrackProbing | ( | SCIP * | scip, |
int | probingdepth | ||
) |
undoes all changes to the problem applied in probing up to the given probing depth; the changes of the probing node of the given probing depth are the last ones that remain active; changes that were applied before calling SCIPnewProbingNode() cannot be undone
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure probingdepth probing depth of the node in the probing path that should be reactivated
Definition at line 216 of file scip_probing.c.
References Scip::branchcand, Scip::cliquetable, Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, Scip::origprob, Scip::primal, SCIP_Mem::probmem, Scip::reopt, SCIP_CALL, SCIP_INVALIDCALL, SCIP_INVALIDDATA, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPtreeBacktrackProbing(), SCIPtreeGetProbingDepth(), SCIPtreeProbing(), Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
Referenced by applyBoundHeur(), applyCliqueFixings(), applyOptcumulativeFixings(), applyVboundsFixings(), executeBranchingRecursive(), fixAndPropagate(), performStrongbranchWithPropagation(), SCIP_DECL_HEUREXEC(), SCIPapplyLockFixings(), SCIPperformGenericDivingAlgorithm(), selectVarMultAggrBranching(), solveBilinearLP(), tightenVariables(), and tryOneOpt().
◆ SCIPendProbing()
SCIP_EXPORT SCIP_RETCODE SCIPendProbing | ( | SCIP * | scip | ) |
quits probing and resets bounds and constraints to the focus node's environment
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure
Definition at line 251 of file scip_probing.c.
References Scip::branchcand, Scip::cliquetable, Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, Scip::messagehdlr, NULL, Scip::origprob, Scip::primal, SCIP_Mem::probmem, Scip::relaxation, Scip::reopt, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPsepastoreGetNCuts(), SCIPstatEnableVarHistory(), SCIPswapPointers(), SCIPtreeEndProbing(), SCIPtreeProbing(), Scip::sepastore, Scip::sepastoreprobing, Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
Referenced by applyBoundHeur(), applyCompletesol(), applyOptcumulative(), applyVbounds(), executeStrongBranching(), fixAndPropagate(), performRandRounding(), performStrongbranchSOS1(), propagateCons(), SCIP_DECL_HEUREXEC(), SCIPapplyProbingVar(), SCIPbendersFreeSubproblem(), SCIPbendersSetMastervarsCont(), SCIPbendersSolveSubproblemCIP(), SCIPperformGenericDivingAlgorithm(), selectVarMultAggrBranching(), tryOneOpt(), trySolCandidate(), and updateSubproblemLowerbound().
◆ SCIPchgVarLbProbing()
SCIP_EXPORT SCIP_RETCODE SCIPchgVarLbProbing | ( | SCIP * | scip, |
SCIP_VAR * | var, | ||
SCIP_Real | newbound | ||
) |
injects a change of variable's lower bound into current probing node; the same can also be achieved with a call to SCIPchgVarLb(), but in this case, the bound change would be treated like a deduction instead of a branching decision
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure var variable to change the bound for newbound new value for bound
Definition at line 292 of file scip_probing.c.
References Scip::branchcand, Scip::cliquetable, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, Scip::origprob, SCIP_Mem::probmem, Scip::reopt, SCIP_BOUNDTYPE_LOWER, SCIP_CALL, SCIP_INVALIDCALL, SCIP_NODETYPE_PROBINGNODE, SCIP_OKAY, SCIP_STAGE_SOLVING, SCIPcheckStage(), SCIPerrorMessage, SCIPgetStage(), SCIPisInfinity(), SCIPnodeAddBoundchg(), SCIPnodeGetType(), SCIPtreeGetCurrentNode(), SCIPtreeProbing(), SCIPvarAdjustLb(), SCIPvarGetLbLocal(), SCIPvarGetName(), SCIPwarningMessage(), Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
Referenced by applyVboundsFixings(), chgProbingBound(), performFixing(), performRandRounding(), performStrongbranchSOS1(), performStrongbranchWithPropagation(), SCIP_DECL_HEUREXEC(), SCIPapplyProbingVar(), SCIPperformGenericDivingAlgorithm(), tryOneOpt(), and trySolCandidate().
◆ SCIPchgVarUbProbing()
SCIP_EXPORT SCIP_RETCODE SCIPchgVarUbProbing | ( | SCIP * | scip, |
SCIP_VAR * | var, | ||
SCIP_Real | newbound | ||
) |
injects a change of variable's upper bound into current probing node; the same can also be achieved with a call to SCIPchgVarUb(), but in this case, the bound change would be treated like a deduction instead of a branching decision
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure var variable to change the bound for newbound new value for bound
Definition at line 336 of file scip_probing.c.
References Scip::branchcand, Scip::cliquetable, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, Scip::origprob, SCIP_Mem::probmem, Scip::reopt, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_INVALIDCALL, SCIP_NODETYPE_PROBINGNODE, SCIP_OKAY, SCIP_STAGE_SOLVING, SCIPcheckStage(), SCIPerrorMessage, SCIPgetStage(), SCIPisInfinity(), SCIPnodeAddBoundchg(), SCIPnodeGetType(), SCIPtreeGetCurrentNode(), SCIPtreeProbing(), SCIPvarAdjustUb(), SCIPvarGetName(), SCIPvarGetUbLocal(), SCIPwarningMessage(), Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
Referenced by applyVboundsFixings(), chgProbingBound(), performFixing(), performRandRounding(), performStrongbranchSOS1(), performStrongbranchWithPropagation(), SCIP_DECL_HEUREXEC(), SCIPapplyProbingVar(), SCIPperformGenericDivingAlgorithm(), tryOneOpt(), and trySolCandidate().
◆ SCIPgetVarObjProbing()
SCIP_EXPORT SCIP_Real SCIPgetVarObjProbing | ( | SCIP * | scip, |
SCIP_VAR * | var | ||
) |
gets variable's objective value in current probing
- Returns
- the variable's objective value in current probing.
- Precondition
- This method can be called if
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
- Parameters
-
scip SCIP data structure var variable to get the bound for
Definition at line 379 of file scip_probing.c.
References FALSE, NULL, SCIP_CALL_ABORT, SCIP_INVALID, SCIPcheckStage(), SCIPerrorMessage, SCIPtreeProbing(), SCIPvarGetObjLP(), Scip::tree, and TRUE.
Referenced by filterExistingLP(), and SCIPpropagateProbing().
◆ SCIPfixVarProbing()
SCIP_EXPORT SCIP_RETCODE SCIPfixVarProbing | ( | SCIP * | scip, |
SCIP_VAR * | var, | ||
SCIP_Real | fixedval | ||
) |
injects a change of variable's bounds into current probing node to fix the variable to the specified value; the same can also be achieved with a call to SCIPfixVar(), but in this case, the bound changes would be treated like deductions instead of branching decisions
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure var variable to change the bound for fixedval value to fix variable to
Definition at line 409 of file scip_probing.c.
References Scip::branchcand, Scip::cliquetable, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, Scip::origprob, SCIP_Mem::probmem, Scip::reopt, SCIP_BOUNDTYPE_LOWER, SCIP_BOUNDTYPE_UPPER, SCIP_CALL, SCIP_INVALIDCALL, SCIP_NODETYPE_PROBINGNODE, SCIP_OKAY, SCIP_Real, SCIPcheckStage(), SCIPerrorMessage, SCIPnodeAddBoundchg(), SCIPnodeGetType(), SCIPsetIsEQ(), SCIPsetIsGT(), SCIPsetIsLT(), SCIPtreeGetCurrentNode(), SCIPtreeProbing(), SCIPvarAdjustLb(), SCIPvarAdjustUb(), SCIPvarGetLbLocal(), SCIPvarGetUbLocal(), Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
Referenced by applyBoundHeur(), applyCliqueFixings(), applyOptcumulativeFixings(), applyVboundsFixings(), chgProbingBound(), fixVariable(), performStrongbranchSOS1(), propagateCons(), SCIP_DECL_HEUREXEC(), and SCIPapplyLockFixings().
◆ SCIPchgVarObjProbing()
SCIP_EXPORT SCIP_RETCODE SCIPchgVarObjProbing | ( | SCIP * | scip, |
SCIP_VAR * | var, | ||
SCIP_Real | newobj | ||
) |
changes (column) variable's objective value during probing mode
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages: - The variable needs to be a column variable.
- Parameters
-
scip SCIP data structure var variable to change the objective for newobj new objective function value
Definition at line 465 of file scip_probing.c.
References SCIP_Lp::cutoffbound, SCIP_Node::data, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, SCIP_Probingnode::nchgdobjs, SCIP_Probingnode::origobjvals, SCIP_Probingnode::origobjvars, Scip::primal, SCIP_Node::probingnode, SCIP_Tree::probingsumchgdobjs, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_NODETYPE_PROBINGNODE, SCIP_OKAY, SCIP_Real, SCIPallocMemoryArray, SCIPcheckStage(), SCIPerrorMessage, SCIPisEQ(), SCIPisInfinity(), SCIPlpDivingObjChanged(), SCIPlpMarkDivingObjChanged(), SCIPlpSetCutoffbound(), SCIPnodeGetType(), SCIPreallocMemoryArray, SCIPsetInfinity(), SCIPtreeGetCurrentNode(), SCIPtreeMarkProbingObjChanged(), SCIPtreeProbing(), SCIPtreeProbingObjChanged(), SCIPvarChgObj(), SCIPvarGetObj(), Scip::set, Scip::transprob, Scip::tree, and TRUE.
Referenced by filterExistingLP(), SCIPbendersSetupSubproblem(), solveBilinearLP(), and updateSubproblemLowerbound().
◆ SCIPisObjChangedProbing()
SCIP_EXPORT SCIP_Bool SCIPisObjChangedProbing | ( | SCIP * | scip | ) |
returns whether the objective function has changed during probing mode
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure
Definition at line 543 of file scip_probing.c.
References FALSE, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPinProbing(), SCIPtreeProbingObjChanged(), Scip::tree, and TRUE.
◆ SCIPpropagateProbing()
SCIP_EXPORT SCIP_RETCODE SCIPpropagateProbing | ( | SCIP * | scip, |
int | maxproprounds, | ||
SCIP_Bool * | cutoff, | ||
SCIP_Longint * | ndomredsfound | ||
) |
applies domain propagation on the probing sub problem, that was changed after SCIPstartProbing() was called; the propagated domains of the variables can be accessed with the usual bound accessing calls SCIPvarGetLbLocal() and SCIPvarGetUbLocal(); the propagation is only valid locally, i.e. the local bounds as well as the changed bounds due to SCIPchgVarLbProbing(), SCIPchgVarUbProbing(), and SCIPfixVarProbing() are used for propagation
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
applies domain propagation on the probing sub problem, that was changed after SCIPstartProbing() was called; the propagated domains of the variables can be accessed with the usual bound accessing calls SCIPvarGetLbLocal() and SCIPvarGetUbLocal(); the propagation is only valid locally, i.e. the local bounds as well as the changed bounds due to SCIPchgVarLbProbing(), SCIPchgVarUbProbing(), and SCIPfixVarProbing() are used for propagation
- Note
- Conflict analysis can run if the propagation finds infeasibilities. SCIPpropagateProbing can even find globally valid bound changes. For this reason, the function restores the original objective (i.e. undoes the changes done by SCIPchgVarObjProbing before performing the propagation, as the propagators don't know that the objective might have changed. Thus, SCIPpropagateProbing can have an effect on the problem after probing ends.
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure maxproprounds maximal number of propagation rounds (-1: no limit, 0: parameter settings) cutoff pointer to store whether the probing node can be cut off ndomredsfound pointer to store the number of domain reductions found, or NULL
Definition at line 571 of file scip_probing.c.
References Scip::branchcand, Scip::cliquetable, Scip::conflict, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, SCIP_Stat::nprobboundchgs, SCIP_Stat::nprobholechgs, NULL, Scip::origprob, Scip::primal, SCIP_Tree::probingobjchanged, SCIP_Tree::probingsumchgdobjs, SCIP_Mem::probmem, Scip::reopt, SCIP_Bool, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIP_PROPTIMING_ALWAYS, SCIP_Real, SCIPallocBufferArray, SCIPcheckStage(), SCIPerrorMessage, SCIPfreeBufferArray, SCIPgetDepth(), SCIPgetNVars(), SCIPgetVarObjProbing(), SCIPgetVars(), SCIPisEQ(), SCIPlpMarkDivingObjChanged(), SCIPlpUnmarkDivingObjChanged(), SCIPpropagateDomains(), SCIPtreeProbing(), SCIPvarChgObj(), Scip::set, Scip::stat, Scip::transprob, Scip::tree, TRUE, and SCIP_Var::unchangedobj.
Referenced by applyBoundHeur(), applyCliqueFixings(), applyOptcumulativeFixings(), applyVboundsFixings(), executeStrongBranching(), performFixing(), performRandRounding(), performStrongbranchSOS1(), performStrongbranchWithPropagation(), propagateCons(), SCIP_DECL_HEUREXEC(), SCIPapplyLockFixings(), SCIPapplyProbingVar(), SCIPperformGenericDivingAlgorithm(), tightenVariables(), tryOneOpt(), and trySolCandidate().
◆ SCIPpropagateProbingImplications()
SCIP_EXPORT SCIP_RETCODE SCIPpropagateProbingImplications | ( | SCIP * | scip, |
SCIP_Bool * | cutoff | ||
) |
applies domain propagation on the probing sub problem, that was changed after SCIPstartProbing() was called; only propagations of the binary variables fixed at the current probing node that are triggered by the implication graph and the clique table are applied; the propagated domains of the variables can be accessed with the usual bound accessing calls SCIPvarGetLbLocal() and SCIPvarGetUbLocal(); the propagation is only valid locally, i.e. the local bounds as well as the changed bounds due to SCIPchgVarLbProbing(), SCIPchgVarUbProbing(), and SCIPfixVarProbing() are used for propagation
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure cutoff pointer to store whether the probing node can be cut off
Definition at line 677 of file scip_probing.c.
References Scip::branchcand, Scip::cliquetable, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, Scip::origprob, SCIP_Mem::probmem, Scip::reopt, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPnodePropagateImplics(), SCIPtreeGetCurrentNode(), SCIPtreeProbing(), Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
Referenced by SCIPapplyProbingVar().
◆ SCIPsolveProbingLP()
SCIP_EXPORT SCIP_RETCODE SCIPsolveProbingLP | ( | SCIP * | scip, |
int | itlim, | ||
SCIP_Bool * | lperror, | ||
SCIP_Bool * | cutoff | ||
) |
solves the LP at the current probing node (cannot be applied at preprocessing stage); no separation or pricing is applied
The LP has to be constructed before (you can use SCIPisLPConstructed() or SCIPconstructLP()).
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
solves the LP at the current probing node (cannot be applied at preprocessing stage); no separation or pricing is applied
The LP has to be constructed before (you can use SCIPisLPConstructed() or SCIPconstructLP()).
- Note
- if the LP is infeasible or the objective limit is reached, and if all columns are in the LP and no external pricers exist then conflict analysis will be run. This can have an effect on the problem after probing ends.
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure itlim maximal number of LP iterations to perform, or -1 for no limit lperror pointer to store whether an unresolved LP error occurred cutoff pointer to store whether the probing LP was infeasible or the objective limit was reached (or NULL, if not needed)
Definition at line 810 of file scip_probing.c.
References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), solveProbingLP(), and TRUE.
Referenced by applyBoundHeur(), applyVbounds(), performStrongbranchSOS1(), performStrongbranchWithPropagation(), polishSolution(), SCIP_DECL_HEUREXEC(), SCIPbendersComputeSubproblemLowerbound(), SCIPbendersSolveSubproblemLP(), selectVarMultAggrBranching(), solveBilinearLP(), solveLP(), tryOneOpt(), trySolCandidate(), and updateSubproblemLowerbound().
◆ SCIPsolveProbingLPWithPricing()
SCIP_EXPORT SCIP_RETCODE SCIPsolveProbingLPWithPricing | ( | SCIP * | scip, |
SCIP_Bool | pretendroot, | ||
SCIP_Bool | displayinfo, | ||
int | maxpricerounds, | ||
SCIP_Bool * | lperror, | ||
SCIP_Bool * | cutoff | ||
) |
solves the LP at the current probing node (cannot be applied at preprocessing stage) and applies pricing until the LP is solved to optimality; no separation is applied
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed . See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
solves the LP at the current probing node (cannot be applied at preprocessing stage) and applies pricing until the LP is solved to optimality; no separation is applied
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure pretendroot should the pricers be called as if we were at the root node? displayinfo should info lines be displayed after each pricing round? maxpricerounds maximal number of pricing rounds (-1: no limit); a finite limit means that the LP might not be solved to optimality! lperror pointer to store whether an unresolved LP error occurred cutoff pointer to store whether the probing LP was infeasible or the objective limit was reached (or NULL, if not needed)
Definition at line 834 of file scip_probing.c.
References FALSE, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), solveProbingLP(), and TRUE.
Referenced by executeStrongBranching().
◆ SCIPsetProbingLPState()
SCIP_EXPORT SCIP_RETCODE SCIPsetProbingLPState | ( | SCIP * | scip, |
SCIP_LPISTATE ** | lpistate, | ||
SCIP_LPINORMS ** | lpinorms, | ||
SCIP_Bool | primalfeas, | ||
SCIP_Bool | dualfeas | ||
) |
sets the LP state for the current probing node
- Note
- state and norms are stored at the node and later released by SCIP; therefore, the pointers are set to NULL by the method
- the pointers to state and norms must not be NULL; however, they may point to a NULL pointer if the respective information should not be set
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure lpistate pointer to LP state information (like basis information) lpinorms pointer to LP pricing norms information primalfeas primal feasibility when LP state information was stored dualfeas dual feasibility when LP state information was stored
Definition at line 867 of file scip_probing.c.
References FALSE, Scip::lp, Scip::mem, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPtreeProbing(), SCIPtreeSetProbingLPState(), Scip::tree, and TRUE.
◆ SCIPaddRowProbing()
SCIP_EXPORT SCIP_RETCODE SCIPaddRowProbing | ( | SCIP * | scip, |
SCIP_ROW * | row | ||
) |
adds a row to the LP in the current probing node
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
- Parameters
-
scip SCIP data structure row row to be added
Definition at line 898 of file scip_probing.c.
References Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, NULL, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPlpAddRow(), SCIPnodeGetDepth(), SCIPtreeGetCurrentNode(), SCIPtreeProbing(), Scip::set, Scip::tree, and TRUE.
Referenced by solveBilinearLP().
◆ SCIPapplyCutsProbing()
SCIP_EXPORT SCIP_RETCODE SCIPapplyCutsProbing | ( | SCIP * | scip, |
SCIP_Bool * | cutoff | ||
) |
applies the cuts in the separation storage to the LP and clears the storage afterwards; this method can only be applied during probing; the user should resolve the probing LP afterwards in order to get a new solution
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure cutoff pointer to store whether an empty domain was created
Definition at line 938 of file scip_probing.c.
References Scip::branchcand, Scip::cliquetable, Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, Scip::origprob, SCIP_Mem::probmem, Scip::reopt, SCIP_CALL, SCIP_EFFICIACYCHOICE_LP, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPsepastoreApplyCuts(), SCIPtreeProbing(), Scip::sepastore, Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
◆ SCIPsolveProbingRelax()
SCIP_EXPORT SCIP_RETCODE SCIPsolveProbingRelax | ( | SCIP * | scip, |
SCIP_Bool * | cutoff | ||
) |
solves relaxation(s) at the current probing node (cannot be applied at preprocessing stage); no separation or pricing is applied
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
- Parameters
-
scip SCIP data structure cutoff pointer to store whether a relaxation was infeasible or the objective limit was reached (or NULL, if not needed)
Definition at line 967 of file scip_probing.c.
References FALSE, NULL, r, SCIP_CALL, SCIP_CONSADDED, SCIP_CUTOFF, SCIP_DIDNOTRUN, SCIP_INVALIDCALL, SCIP_INVALIDRESULT, SCIP_OKAY, SCIP_Real, SCIP_REDUCEDDOM, SCIP_SEPARATED, SCIP_SUCCESS, SCIP_SUSPENDED, SCIPcheckStage(), SCIPdebugMsg, SCIPerrorMessage, SCIPinfinity(), SCIPrelaxExec(), SCIPrelaxGetName(), SCIPsetSortRelaxs(), SCIPtreeGetCurrentDepth(), SCIPtreeProbing(), Scip::set, Scip::stat, Scip::tree, and TRUE.
◆ SCIPsnprintfProbingStats()
SCIP_EXPORT char* SCIPsnprintfProbingStats | ( | SCIP * | scip, |
char * | strbuf, | ||
int | len | ||
) |
print statistics of probing
- Parameters
-
scip SCIP data structure strbuf string buffer len length of string buffer
Definition at line 1035 of file scip_probing.c.
References BMSclearMemoryArray, NULL, SCIPgetDepth(), SCIPgetNBinVars(), SCIPgetNImplVars(), SCIPgetNIntVars(), SCIPgetNVars(), SCIPgetProbingDepth(), SCIPgetVars(), SCIPinProbing(), SCIPisEQ(), SCIPsnprintf(), SCIPvarGetLbLocal(), and SCIPvarGetUbLocal().
Referenced by applyBoundHeur(), applyVbounds(), and SCIP_DECL_HEUREXEC().
◆ SCIPgetDivesetScore()
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 | ||
) |
stores the candidate score and preferred rounding direction for a candidate variable
gets the candidate score and preferred rounding direction for a candidate variable
- Parameters
-
scip SCIP data structure diveset general diving settings divetype represents different methods for a dive set to explore the next children divecand the candidate for which the branching direction is requested divecandsol LP solution value of the candidate divecandfrac fractionality of the candidate candscore pointer to store the candidate score roundup pointer to store whether preferred direction for diving is upwards
Definition at line 1110 of file scip_probing.c.
References FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPdivesetGetScore(), Scip::set, and TRUE.
Referenced by getDiveBdChgsSOS1conflictgraph(), getDiveBdChgsSOS1constraints(), SCIP_DECL_CONSGETDIVEBDCHGS(), and selectNextDiving().
◆ SCIPupdateDivesetLPStats()
SCIP_EXPORT void SCIPupdateDivesetLPStats | ( | SCIP * | scip, |
SCIP_DIVESET * | diveset, | ||
SCIP_Longint | niterstoadd, | ||
SCIP_DIVECONTEXT | divecontext | ||
) |
update diveset LP statistics, should be called after every LP solved by this diving heuristic
- Parameters
-
scip SCIP data structure diveset diving settings niterstoadd additional number of LP iterations to be added divecontext context for diving statistics
Definition at line 1135 of file scip_probing.c.
References NULL, SCIPdivesetUpdateLPStats(), and Scip::stat.
Referenced by solveLP().
◆ SCIPupdateDivesetStats()
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 | ||
) |
update diveset statistics and global diveset statistics
- Parameters
-
scip SCIP data structure diveset diveset to be reset nprobingnodes the number of probing nodes explored this time nbacktracks the number of backtracks during probing this time nsolsfound the number of solutions found nbestsolsfound the number of best solutions found nconflictsfound number of new conflicts found this time leavewassol was a solution found at the leaf? divecontext context for diving statistics
Definition at line 1149 of file scip_probing.c.
References NULL, SCIPdivesetUpdateStats(), SCIPgetDepth(), SCIPinProbing(), and Scip::stat.
Referenced by SCIPperformGenericDivingAlgorithm().
◆ SCIPgetDiveBoundChanges()
SCIP_EXPORT SCIP_RETCODE SCIPgetDiveBoundChanges | ( | SCIP * | scip, |
SCIP_DIVESET * | diveset, | ||
SCIP_SOL * | sol, | ||
SCIP_Bool * | success, | ||
SCIP_Bool * | infeasible | ||
) |
enforces a probing/diving solution by suggesting bound changes that maximize the score w.r.t. the current diving settings
the process is guided by the enforcement priorities of the constraint handlers and the scoring mechanism provided by the dive set. Constraint handlers may suggest diving bound changes in decreasing order of their enforcement priority, based on the solution values in the solution sol
and the current local bounds of the variables. A diving bound change is a triple (variable,branching direction,value) and is used inside SCIPperformGenericDivingAlgorithm().
After a successful call, SCIP holds two arrays of suggested dive bound changes, one for the preferred child and one for the alternative.
- See also
- SCIPgetDiveBoundChangeData() for retrieving the dive bound change suggestions.
The method stops after the first constraint handler was successful
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
- Parameters
-
scip SCIP data structure diveset diving settings to control scoring sol current solution of diving mode success pointer to store whether constraint handler successfully found a variable infeasible pointer to store whether the current node was detected to be infeasible
Definition at line 1192 of file scip_probing.c.
References SCIP_Set::conshdlrs_enfo, FALSE, SCIP_Set::nconshdlrs, NULL, SCIP_CALL, SCIP_OKAY, SCIP_Real, SCIPcheckStage(), SCIPclearDiveBoundChanges(), SCIPconshdlrGetDiveBoundChanges(), SCIPinProbing(), SCIPtreeGetDiveBoundChangeData(), Scip::set, Scip::tree, and TRUE.
Referenced by selectNextDiving().
◆ SCIPaddDiveBoundChange()
SCIP_EXPORT SCIP_RETCODE SCIPaddDiveBoundChange | ( | SCIP * | scip, |
SCIP_VAR * | var, | ||
SCIP_BRANCHDIR | dir, | ||
SCIP_Real | value, | ||
SCIP_Bool | preferred | ||
) |
adds a diving bound change to the diving bound change storage of SCIP together with the information if this is a bound change for the preferred direction or not
- Returns
- SCIP_OKAY is returned if everything worked. Otherwise a suitable error code is passed. See SCIP_RETCODE for a complete list of error codes.
- Precondition
- This method can be called if
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
- Parameters
-
scip SCIP data structure var variable to apply the bound change to dir direction of the bound change value value to adjust this variable bound to preferred is this a bound change for the preferred child?
Definition at line 1254 of file scip_probing.c.
References FALSE, Scip::mem, NULL, SCIP_Mem::probmem, SCIP_CALL, SCIP_OKAY, SCIPcheckStage(), SCIPinProbing(), SCIPtreeAddDiveBoundChange(), Scip::tree, and TRUE.
Referenced by getDiveBdChgsSOS1conflictgraph(), getDiveBdChgsSOS1constraints(), SCIP_DECL_CONSGETDIVEBDCHGS(), and selectNextDiving().
◆ SCIPgetDiveBoundChangeData()
SCIP_EXPORT void SCIPgetDiveBoundChangeData | ( | SCIP * | scip, |
SCIP_VAR *** | variables, | ||
SCIP_BRANCHDIR ** | directions, | ||
SCIP_Real ** | values, | ||
int * | ndivebdchgs, | ||
SCIP_Bool | preferred | ||
) |
get the dive bound change data for the preferred or the alternative direction
- Precondition
- This method can be called if
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
- Parameters
-
scip SCIP data structure variables pointer to store variables for the specified direction directions pointer to store the branching directions values pointer to store bound change values ndivebdchgs pointer to store the number of dive bound changes preferred should the dive bound changes for the preferred child be output?
Definition at line 1280 of file scip_probing.c.
References FALSE, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPinProbing(), SCIPtreeGetDiveBoundChangeData(), Scip::tree, and TRUE.
Referenced by SCIPperformGenericDivingAlgorithm().
◆ SCIPclearDiveBoundChanges()
SCIP_EXPORT void SCIPclearDiveBoundChanges | ( | SCIP * | scip | ) |
clear the dive bound change data structures
- Precondition
- This method can be called if
scip
is in one of the following stages:
See SCIP_STAGE for a complete list of all possible solving stages.
- Parameters
-
scip SCIP data structure
Definition at line 1307 of file scip_probing.c.
References FALSE, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPtreeClearDiveBoundChanges(), Scip::tree, and TRUE.
Referenced by SCIPgetDiveBoundChanges(), and selectNextDiving().