Skip to content

How should INFEASIBLE and OBJLIMIT probing LPs be handled when computing a custom branching score? #1243

Description

@adecholaA1

Hello,

I am implementing a custom branching rule in PySCIPOpt where candidate branches are evaluated by solving two probing LPs.

For an OPTIMAL probing LP, I compute the gain as:

gain = max(child_lp_obj - parent_lp_obj, 0.0)

However, I am unsure about the correct SCIP-compatible treatment of the following two cases:

SCIP_LPSOLSTAT.INFEASIBLE
SCIP_LPSOLSTAT.OBJLIMIT

My questions are:

  1. When a probing LP is INFEASIBLE, what numerical value should be used as its gain when calling getBranchScoreMultiple()?

  2. When a probing LP returns OBJLIMIT, should the gain be computed using SCIP's cutoff bound?

  3. What should be used for an INFEASIBLE child before any incumbent exists and therefore before there is a finite cutoff bound?

  4. In PySCIPOpt 5.4.1, Model.getCutoffbound() does not seem to be exposed. Is there another way to access SCIP's current cutoff bound?

  5. Is getObjVal(original=False) equivalent to the cutoff bound once an incumbent exists, or can SCIP's internal cutoff bound differ from the incumbent objective?

I would like my custom probing-based branching score to reproduce SCIP's native strong-branching treatment of these cases as closely as possible.

Thank you!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions