Scippy

    SCIP

    Solving Constraint Integer Programs

    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)
     
    SCIP_RETCODE SCIPgetLPDualDegeneracy (SCIP *scip, SCIP_Real *degeneracy, SCIP_Real *varconsratio)
     

    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
    scipSCIP data structure

    Definition at line 2206 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_NODETYPE_FOCUSNODE, SCIP_OKAY, SCIPcheckStage, SCIPerrorMessage, SCIPgetCurrentNode(), SCIPisRelaxSolValid(), SCIPlpDiving(), SCIPlpStartDive(), SCIPnodeGetType(), SCIPtreeHasCurrentNodeLP(), SCIPtreeIsFocusNodeLPConstructed(), SCIPtreeProbing(), SCIPtreeStoreRelaxSol(), and TRUE.

    Referenced by createLPWithSoftCuts(), SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), SCIPstartExactDive(), 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
    scipSCIP data structure

    Definition at line 2255 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage, SCIPerrorMessage, SCIPisExact(), SCIPlpDiving(), SCIPlpEndDive(), SCIPlpExactDiving(), SCIPlpIsRelax(), SCIPlpIsSolved(), SCIPlpSetCutoffbound(), SCIPnodeUpdateLowerboundLP(), SCIPtreeCutoff(), SCIPtreeIsFocusNodeLPConstructed(), SCIPtreeRestoreRelaxSol(), and TRUE.

    Referenced by deleteLPWithSoftCuts(), SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), SCIPendExactDive(), 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
    scipSCIP data structure
    newcutoffboundnew cutoffbound

    Definition at line 2313 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage, SCIPerrorMessage, SCIPlpDiving(), SCIPlpSetCutoffbound(), 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
    scipSCIP data structure
    varvariable to change the objective value for
    newobjnew objective value

    Definition at line 2343 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage, SCIPerrorMessage, SCIPlpDiving(), SCIPlpMarkDivingObjChanged(), SCIPlpSetCutoffbound(), SCIPsetInfinity(), SCIPvarChgObjDive(), and TRUE.

    Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), updateObjectiveVector(), 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
    scipSCIP data structure
    varvariable to change the bound for
    newboundnew value for bound

    Definition at line 2384 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage, SCIPerrorMessage, SCIPlpDiving(), SCIPvarChgLbDive(), and TRUE.

    Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_CONSCHECK(), 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
    scipSCIP data structure
    varvariable to change the bound for
    newboundnew value for bound

    Definition at line 2416 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage, SCIPerrorMessage, SCIPlpDiving(), SCIPvarChgUbDive(), and TRUE.

    Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_CONSCHECK(), 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
    scipSCIP data structure
    rowrow to be added

    Definition at line 2448 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIPcheckStage, SCIPerrorMessage, SCIPlpAddRow(), SCIPlpDiving(), SCIPnodeGetDepth(), SCIPtreeGetCurrentNode(), 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
    scipSCIP data structure
    rowrow to change the lhs for
    newlhsnew value for lhs

    Definition at line 2487 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIP_SIDETYPE_LEFT, SCIPcheckStage, SCIPerrorMessage, SCIPlpDiving(), SCIPlpRecordOldRowSideDive(), SCIProwChgLhs(), 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
    scipSCIP data structure
    rowrow to change the lhs for
    newrhsnew value for rhs

    Definition at line 2520 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL, SCIP_INVALIDCALL, SCIP_OKAY, SCIP_SIDETYPE_RIGHT, SCIPcheckStage, SCIPerrorMessage, SCIPlpDiving(), SCIPlpRecordOldRowSideDive(), SCIProwChgRhs(), and TRUE.

    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
    scipSCIP data structure
    varvariable to get the bound for

    Definition at line 2552 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL_ABORT, SCIP_INVALID, SCIPABORT, SCIPcheckStage, SCIPerrorMessage, SCIPlpDiving(), SCIPvarGetObjLP(), and TRUE.

    Referenced by SCIP_DECL_HEUREXEC(), and updateObjectiveVector().

    ◆ 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
    scipSCIP data structure
    varvariable to get the bound for

    Definition at line 2581 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL_ABORT, SCIP_INVALID, SCIPABORT, SCIPcheckStage, SCIPerrorMessage, SCIPlpDiving(), SCIPvarGetLbLP(), and TRUE.

    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
    scipSCIP data structure
    varvariable to get the bound for

    Definition at line 2610 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL_ABORT, SCIP_INVALID, SCIPABORT, SCIPcheckStage, SCIPerrorMessage, SCIPlpDiving(), SCIPvarGetUbLP(), 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
    scipSCIP data structure
    itlimmaximal number of LP iterations to perform, or -1 for no limit
    lperrorpointer to store whether an unresolved LP error occurred
    cutoffpointer to store whether the diving LP was infeasible or the objective limit was reached (or NULL, if not needed)

    Definition at line 2643 of file scip_lp.c.

    References FALSE, NULL, 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(), and TRUE.

    Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_HEUREXEC(), solveLagromoryLP(), 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
    scipSCIP data structure

    Definition at line 2710 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL_ABORT, SCIPcheckStage, 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
    scipSCIP data structure

    Definition at line 2740 of file scip_lp.c.

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

    Referenced by SCIP_DECL_BRANCHEXECLP(), SCIP_DECL_CONSCHECK(), SCIP_DECL_HEUREXEC(), SCIP_DECL_PROPEXEC(), SCIP_DECL_RELAXEXEC(), SCIPtightenVarLb(), SCIPtightenVarLbExact(), SCIPtightenVarUb(), SCIPtightenVarUbExact(), solveLp(), and updateSubproblemLowerbound().

    ◆ SCIPgetLPDualDegeneracy()

    SCIP_RETCODE SCIPgetLPDualDegeneracy ( SCIP scip,
    SCIP_Real degeneracy,
    SCIP_Real varconsratio 
    )

    computes two measures for dual degeneracy (dual degeneracy rate and variable-constraint ratio) based on the changes applied when reducing the problem to the optimal face

    returns the dual degeneracy rate, i.e., the share of nonbasic variables with reduced cost 0 and the variable-constraint ratio, i.e., the number of unfixed variables in relation to the basis size

    Parameters
    scipSCIP data structure
    degeneracypointer to store the dual degeneracy rate
    varconsratiopointer to store the variable-constraint ratio

    Definition at line 2757 of file scip_lp.c.

    References FALSE, NULL, SCIP_CALL, SCIP_OKAY, SCIPcheckStage, SCIPlpGetDualDegeneracy(), and TRUE.

    Referenced by checkExec(), execRelpscost(), and SCIP_DECL_SEPAEXECLP().