Detailed Description
methods to initiate and conduct LP diving
Functions | |
SCIP_RETCODE | SCIPstartDive (SCIP *scip) |
SCIP_RETCODE | SCIPendDive (SCIP *scip) |
SCIP_RETCODE | SCIPchgCutoffboundDive (SCIP *scip, SCIP_Real newcutoffbound) |
SCIP_RETCODE | SCIPchgVarObjDive (SCIP *scip, SCIP_VAR *var, SCIP_Real newobj) |
SCIP_RETCODE | SCIPchgVarLbDive (SCIP *scip, SCIP_VAR *var, SCIP_Real newbound) |
SCIP_RETCODE | SCIPchgVarUbDive (SCIP *scip, SCIP_VAR *var, SCIP_Real newbound) |
SCIP_RETCODE | SCIPaddRowDive (SCIP *scip, SCIP_ROW *row) |
SCIP_RETCODE | SCIPchgRowLhsDive (SCIP *scip, SCIP_ROW *row, SCIP_Real newlhs) |
SCIP_RETCODE | SCIPchgRowRhsDive (SCIP *scip, SCIP_ROW *row, SCIP_Real newrhs) |
SCIP_Real | SCIPgetVarObjDive (SCIP *scip, SCIP_VAR *var) |
SCIP_Real | SCIPgetVarLbDive (SCIP *scip, SCIP_VAR *var) |
SCIP_Real | SCIPgetVarUbDive (SCIP *scip, SCIP_VAR *var) |
SCIP_RETCODE | SCIPsolveDiveLP (SCIP *scip, int itlim, SCIP_Bool *lperror, SCIP_Bool *cutoff) |
SCIP_Longint | SCIPgetLastDivenode (SCIP *scip) |
SCIP_Bool | SCIPinDive (SCIP *scip) |
Function Documentation
◆ SCIPstartDive()
SCIP_RETCODE SCIPstartDive | ( | SCIP * | scip | ) |
initiates LP diving, making methods SCIPchgVarObjDive(), SCIPchgVarLbDive(), and SCIPchgVarUbDive() 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:
See SCIP_STAGE for a complete list of all possible solving stages.
- Note
- diving is allowed even if the current LP is not flushed, not solved, or not solved to optimality; be aware that solving the (first) diving LP may take longer than expect and that the latter two cases could stem from numerical troubles during the last LP solve; because of this, most users will want to call this method only if SCIPgetLPSolstat(scip) == SCIP_LPSOLSTAT_OPTIMAL
- Parameters
-
scip SCIP data structure
Definition at line 2124 of file scip_lp.c.
References FALSE, Scip::lp, Scip::mem, NULL, SCIP_Mem::probmem, Scip::relaxation, SCIP_CALL, SCIP_INVALIDCALL, SCIP_NODETYPE_FOCUSNODE, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPgetCurrentNode(), SCIPisRelaxSolValid(), SCIPlpDiving(), SCIPlpStartDive(), SCIPnodeGetType(), SCIPtreeHasCurrentNodeLP(), SCIPtreeIsFocusNodeLPConstructed(), SCIPtreeProbing(), SCIPtreeStoreRelaxSol(), Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), and solveLp().
◆ SCIPendDive()
SCIP_RETCODE SCIPendDive | ( | SCIP * | scip | ) |
quits LP diving and resets bounds and objective values of columns to the current node's values
- 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
Definition at line 2173 of file scip_lp.c.
References SCIP_Primal::cutoffbound, SCIP_Lp::cutoffbound, SCIP_Tree::cutoffdelayed, Scip::eventfilter, Scip::eventqueue, FALSE, SCIP_Tree::focusnode, Scip::lp, Scip::mem, Scip::messagehdlr, NULL, SCIP_Prob::nvars, Scip::origprob, Scip::primal, SCIP_Tree::probdiverelaxstored, SCIP_Mem::probmem, Scip::relaxation, Scip::reopt, SCIP_Lp::resolvelperror, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPlpEndDive(), SCIPlpIsRelax(), SCIPlpIsSolved(), SCIPlpSetCutoffbound(), SCIPnodeUpdateLowerboundLP(), SCIPtreeCutoff(), SCIPtreeIsFocusNodeLPConstructed(), SCIPtreeRestoreRelaxSol(), Scip::set, Scip::stat, Scip::transprob, Scip::tree, TRUE, and SCIP_Prob::vars.
Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), and solveLp().
◆ SCIPchgCutoffboundDive()
SCIP_RETCODE SCIPchgCutoffboundDive | ( | SCIP * | scip, |
SCIP_Real | newcutoffbound | ||
) |
changes cutoffbound in current dive
- 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 newcutoffbound new cutoffbound
Definition at line 2230 of file scip_lp.c.
References FALSE, Scip::lp, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPlpSetCutoffbound(), Scip::set, Scip::transprob, and TRUE.
◆ SCIPchgVarObjDive()
SCIP_RETCODE SCIPchgVarObjDive | ( | SCIP * | scip, |
SCIP_VAR * | var, | ||
SCIP_Real | newobj | ||
) |
changes variable's objective value in current dive
- 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 change the objective value for newobj new objective value
Definition at line 2260 of file scip_lp.c.
References FALSE, Scip::lp, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPlpMarkDivingObjChanged(), SCIPlpSetCutoffbound(), SCIPsetInfinity(), SCIPvarChgObjDive(), Scip::set, Scip::transprob, and TRUE.
Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), and updateVariableRounding().
◆ SCIPchgVarLbDive()
SCIP_RETCODE SCIPchgVarLbDive | ( | SCIP * | scip, |
SCIP_VAR * | var, | ||
SCIP_Real | newbound | ||
) |
changes variable's lower bound in current dive
- 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 change the bound for newbound new value for bound
Definition at line 2301 of file scip_lp.c.
References FALSE, Scip::lp, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPvarChgLbDive(), Scip::set, and TRUE.
Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), and solveLp().
◆ SCIPchgVarUbDive()
SCIP_RETCODE SCIPchgVarUbDive | ( | SCIP * | scip, |
SCIP_VAR * | var, | ||
SCIP_Real | newbound | ||
) |
changes variable's upper bound in current dive
- 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 change the bound for newbound new value for bound
Definition at line 2333 of file scip_lp.c.
References FALSE, Scip::lp, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPvarChgUbDive(), Scip::set, and TRUE.
Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), and solveLp().
◆ SCIPaddRowDive()
SCIP_RETCODE SCIPaddRowDive | ( | SCIP * | scip, |
SCIP_ROW * | row | ||
) |
adds a row to the LP in current dive
- 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 2365 of file scip_lp.c.
References Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, NULL, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage(), SCIPerrorMessage, SCIPlpAddRow(), SCIPlpDiving(), SCIPnodeGetDepth(), SCIPtreeGetCurrentNode(), Scip::set, Scip::tree, and TRUE.
◆ SCIPchgRowLhsDive()
SCIP_RETCODE SCIPchgRowLhsDive | ( | SCIP * | scip, |
SCIP_ROW * | row, | ||
SCIP_Real | newlhs | ||
) |
changes row lhs in current dive, change will be undone after diving ends, for permanent changes use SCIPchgRowLhs()
- 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 change the lhs for newlhs new value for lhs
Definition at line 2404 of file scip_lp.c.
References Scip::eventqueue, FALSE, Scip::lp, Scip::mem, NULL, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIP_SIDETYPE_LEFT, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPlpRecordOldRowSideDive(), SCIProwChgLhs(), Scip::set, and TRUE.
Referenced by SCIP_DECL_BRANCHEXECLP().
◆ SCIPchgRowRhsDive()
SCIP_RETCODE SCIPchgRowRhsDive | ( | SCIP * | scip, |
SCIP_ROW * | row, | ||
SCIP_Real | newrhs | ||
) |
changes row rhs in current dive, change will be undone after diving ends, for permanent changes use SCIPchgRowRhs()
- 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 change the lhs for newrhs new value for rhs
Definition at line 2437 of file scip_lp.c.
References Scip::eventqueue, FALSE, Scip::lp, Scip::mem, NULL, SCIP_Mem::probmem, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIP_SIDETYPE_RIGHT, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPlpRecordOldRowSideDive(), SCIProwChgRhs(), Scip::set, and TRUE.
Referenced by SCIP_DECL_BRANCHEXECLP().
◆ SCIPgetVarObjDive()
gets variable's objective value in current dive
- Returns
- the variable's objective value in current dive.
- 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 2469 of file scip_lp.c.
References FALSE, Scip::lp, NULL, SCIP_CALL_ABORT, SCIP_INVALID, SCIPABORT, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPvarGetObjLP(), and TRUE.
Referenced by SCIP_DECL_HEUREXEC().
◆ SCIPgetVarLbDive()
gets variable's lower bound in current dive
- Returns
- the variable's lower bound in current dive.
- 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 2498 of file scip_lp.c.
References FALSE, Scip::lp, NULL, SCIP_CALL_ABORT, SCIP_INVALID, SCIPABORT, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPvarGetLbLP(), Scip::set, and TRUE.
Referenced by SCIP_DECL_HEUREXEC().
◆ SCIPgetVarUbDive()
gets variable's upper bound in current dive
- Returns
- the variable's upper bound in current dive.
- 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 2527 of file scip_lp.c.
References FALSE, Scip::lp, NULL, SCIP_CALL_ABORT, SCIP_INVALID, SCIPABORT, SCIPcheckStage(), SCIPerrorMessage, SCIPlpDiving(), SCIPvarGetUbLP(), Scip::set, and TRUE.
Referenced by SCIP_DECL_HEUREXEC().
◆ SCIPsolveDiveLP()
SCIP_RETCODE SCIPsolveDiveLP | ( | SCIP * | scip, |
int | itlim, | ||
SCIP_Bool * | lperror, | ||
SCIP_Bool * | cutoff | ||
) |
solves the LP of the current dive; 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:
See SCIP_STAGE for a complete list of all possible solving stages.
- Note
- be aware that the LP solve may take longer than expected if SCIPgetLPSolstat(scip) != SCIP_LPSOLSTAT_OPTIMAL, compare the explanation of SCIPstartDive()
- 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 diving LP was infeasible or the objective limit was reached (or NULL, if not needed)
Definition at line 2560 of file scip_lp.c.
References Scip::branchcand, Scip::cliquetable, Scip::conflict, Scip::conflictstore, Scip::eventfilter, Scip::eventqueue, FALSE, Scip::lp, Scip::mem, Scip::messagehdlr, SCIP_Set::misc_exactsolve, NULL, Scip::origprob, SCIP_Mem::probmem, Scip::reopt, SCIP_CALL, SCIP_INVALIDCALL, SCIP_Longint, SCIP_LPSOLSTAT_INFEASIBLE, SCIP_LPSOLSTAT_OBJLIMIT, SCIP_LPSOLSTAT_OPTIMAL, SCIP_OKAY, SCIPcheckStage(), SCIPconflictAnalyzeLP(), SCIPerrorMessage, SCIPgetCutoffbound(), SCIPgetLPObjval(), SCIPisGE(), SCIPlpDiving(), SCIPlpDivingObjChanged(), SCIPlpDivingRowsChanged(), SCIPlpGetSolstat(), SCIPlpSolveAndEval(), SCIPprobAllColsInLP(), Scip::set, Scip::stat, Scip::transprob, Scip::tree, and TRUE.
Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), and solveLp().
◆ SCIPgetLastDivenode()
SCIP_Longint SCIPgetLastDivenode | ( | SCIP * | scip | ) |
returns the number of the node in the current branch and bound run, where the last LP was solved in diving or probing mode
- Returns
- the number of the node in the current branch and bound run, where the last LP was solved in diving or probing mode.
- 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 2627 of file scip_lp.c.
References FALSE, SCIP_Stat::lastdivenode, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), Scip::stat, and TRUE.
Referenced by SCIP_DECL_HEUREXEC(), and SCIPperformGenericDivingAlgorithm().
◆ SCIPinDive()
returns whether we are in diving mode
- Returns
- whether we are in diving mode.
- 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 2657 of file scip_lp.c.
References FALSE, Scip::lp, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPlpDiving(), and TRUE.
Referenced by SCIP_DECL_PROPEXEC(), SCIP_DECL_RELAXEXEC(), SCIPtightenVarLb(), SCIPtightenVarUb(), storeAllBilinearTerms(), and updateSubproblemLowerbound().