Skip to content

Follow-up: make WORK_LIMIT handling consistent in strong branching pseudo-costs #1471

Description

@coderabbitai

Summary

There is a pre-existing inconsistency in cpp/src/branch_and_bound/pseudo_costs.cpp around how dual_status_t::WORK_LIMIT is handled in strong-branching and reliability-branching code paths.

Today, some merge/validation logic treats WORK_LIMIT as a usable Dual Simplex outcome, but the corresponding objective-computation paths do not consistently compute and propagate an objective for that status. That can lead to a WORK_LIMIT result being selected as a Dual Simplex contribution while still carrying a NaN objective, which then prevents the expected pseudo-cost update.

Why this matters

Strong branching and reliability branching rely on consistent status/objective handling to produce valid pseudo-cost updates and branch scoring. If WORK_LIMIT is considered a valid partial result, the code should compute and carry the corresponding objective everywhere that status is accepted.

Affected area

  • cpp/src/branch_and_bound/pseudo_costs.cpp

Relevant logic includes:

  • is_dual_simplex_done(...)
  • strong branching result handling in strong_branch_helper(...)
  • trial branching result handling in trial_branching(...)
  • merge logic in merge_sb_result(...)

Requested follow-up

Make WORK_LIMIT handling consistent across all Dual Simplex strong-branching paths in cpp/src/branch_and_bound/pseudo_costs.cpp.

Specifically:

  • If WORK_LIMIT is intended to be a usable Dual Simplex result, include it everywhere the code currently accepts other usable partial outcomes such as ITERATION_LIMIT and CUTOFF.
  • Ensure the objective value is computed and propagated for WORK_LIMIT in the same places where that status is considered mergeable/consumable.
  • Verify that the resulting pseudo-cost update paths no longer silently skip valid WORK_LIMIT outcomes due to NaN objectives.

Acceptance criteria

  • WORK_LIMIT is handled consistently in status validation, objective computation, and merge logic for the affected strong-branching code paths.
  • No path can merge/select a Dual Simplex WORK_LIMIT result while leaving its objective as NaN.
  • The follow-up is handled separately from PR Refactor: mathematical_optimization namespace #1446 because this is a pre-existing issue.

Backlinks

Requested by @mlubin.

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