Skip to content

Track inconsistent WORK_LIMIT handling in dual-simplex strong branching #1472

Description

@coderabbitai

Summary
cpp/src/branch_and_bound/pseudo_costs.cpp handles simplex::dual_status_t::WORK_LIMIT inconsistently in the dual-simplex strong-branching / reliability-branching paths.

Today, some merge logic treats WORK_LIMIT as a usable dual-simplex result, but other status checks and objective-computation paths do not consistently include it. That can leave a branch marked as solved/usable while its objective remains unset (NaN), which can in turn cause pseudo-cost updates to be skipped or merged results to be inconsistent.

Current status
This appears to be a pre-existing issue. Based on discussion in #1446, it is not currently exercised in the deterministic-mode path, but it should still be patched for correctness and consistency.

Affected areas

  • cpp/src/branch_and_bound/pseudo_costs.cpp
  • Status helper:
    • is_dual_simplex_done(...)
  • Dual-simplex result handling in:
    • strong branching helper path
    • trial branching path
    • merge logic / result-consumption paths that already treat WORK_LIMIT as usable

Suggested fix
Make WORK_LIMIT handling consistent anywhere dual-simplex statuses are interpreted for:

  • “done/usable result” checks
  • objective extraction after a solve
  • merge logic between dual simplex and batch PDLP

Acceptance criteria

  • simplex::dual_status_t::WORK_LIMIT is handled consistently in all relevant status checks in cpp/src/branch_and_bound/pseudo_costs.cpp.
  • Any code path that treats WORK_LIMIT as a usable dual-simplex result also computes/propagates a valid objective value for it.
  • Strong-branching and reliability-branching flows cannot merge/select a dual-simplex result with NaN objective solely because the status was WORK_LIMIT.
  • Add or update a focused regression test if there is an existing test surface for this code path.

Backlinks

Requested by

Metadata

Metadata

Assignees

Labels

awaiting responseThis expects a response from maintainer or contributor depending on who requested in last comment.

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions