# SCIP

Solving Constraint Integer Programs

LP Diving

## 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)

## ◆ 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 2129 of file scip_lp.c.

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 2178 of file scip_lp.c.

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 2235 of file scip_lp.c.

## ◆ 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 2265 of file scip_lp.c.

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 2306 of file scip_lp.c.

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 2338 of file scip_lp.c.

Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), and solveLp().

 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 2370 of file scip_lp.c.

## ◆ 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 2409 of file scip_lp.c.

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 2442 of file scip_lp.c.

Referenced by SCIP_DECL_BRANCHEXECLP().

## ◆ SCIPgetVarObjDive()

 SCIP_Real SCIPgetVarObjDive ( SCIP * scip, SCIP_VAR * var )

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 2474 of file scip_lp.c.

Referenced by SCIP_DECL_HEUREXEC().

## ◆ SCIPgetVarLbDive()

 SCIP_Real SCIPgetVarLbDive ( SCIP * scip, SCIP_VAR * var )

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 2503 of file scip_lp.c.

Referenced by SCIP_DECL_HEUREXEC().

## ◆ SCIPgetVarUbDive()

 SCIP_Real SCIPgetVarUbDive ( SCIP * scip, SCIP_VAR * var )

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 2532 of file scip_lp.c.

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 2565 of file scip_lp.c.

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 2632 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()

 SCIP_Bool SCIPinDive ( SCIP * scip )

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 2662 of file scip_lp.c.

References FALSE, Scip::lp, NULL, SCIP_CALL_ABORT, SCIPcheckStage(), SCIPlpDiving(), and TRUE.