Skip to content

MIP Row and Objective Scaling#906

Merged
rapids-bot[bot] merged 90 commits intoNVIDIA:release/26.04from
akifcorduk:scaling_test
Apr 3, 2026
Merged

MIP Row and Objective Scaling#906
rapids-bot[bot] merged 90 commits intoNVIDIA:release/26.04from
akifcorduk:scaling_test

Conversation

@akifcorduk
Copy link
Copy Markdown
Contributor

@akifcorduk akifcorduk commented Feb 25, 2026

mip_scaling_strategy.cu implements a GPU-accelerated row-scaling and objective-scaling strategy for MIP problems that improves numerical conditioning before solving.

Objective scaling (scale_objective): scales small objective coefficients up so the smallest nonzero magnitude reaches a minimum threshold (~1e-2), guarded by a max-coefficient cap to avoid blowing up large values.

Iterative row scaling (scale_problem): runs up to 8 iterations of per-row scaling to reduce the log2-spread of row infinity norms across the constraint matrix. Each iteration:

  • Computes a median-based target norm (excluding big-M and zero-RHS rows for outlier robustness)
  • Picks a per-row scaling factor clamped to [1/32, 32], with tighter [1/16, 1] limits for big-M rows and rows that are already numerically large
  • Preserves integer coefficient integrality for integer variables by preferring power-of-two scaling factors (exact in IEEE 754) or integer-GCD-preserving multipliers
  • Tracks cumulative scaling per row within a [1/256, 256] band
  • Stops early when the spread improvement stalls below a relative tolerance

The current optimal setup is with only row scaling, that's why I have left row scaling only as default.

This also fixes a bug of setting lower bound of an approximate PDLP and Barrier solution. Now we set the bound only if the relaxation solution is fully feasible on absolute per row tolerances. With main+bug fix, number of infinite mip_gaps are 5-6 instances, with scaling it is only 1. So, scaling is able find 4-5 instances in with the absolute feasible root relaxation (does not necessarily mean basic solution in dual simplex).

Overall we are able to find 2 more optimal solutions compared to main + lower bound bug fix. And ~1% mip gap improvement.

Summary by CodeRabbit

  • New Features

    • MIP row-scaling enabled by default for improved numeric robustness.
    • Solver returns partial results early when time limits are reached; time-limit enforcement is more proactive.
    • New selectable MIP scaling configurations with logging of the selected scaling setup.
  • Bug Fixes

    • Fixed inconsistent unscaling and feasibility handling to prevent mismatched solution states.
  • Chores

    • Removed a deprecated MIP configuration option.
    • Consolidated and replaced the scaling strategy; tests and build updated accordingly.

@akifcorduk akifcorduk changed the title Scaling test MIP Row and Objective Scaling Apr 2, 2026
Copy link
Copy Markdown
Contributor

@chris-maes chris-maes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. Thanks Akif

akifcorduk and others added 8 commits April 2, 2026 14:32
<!--

Thank you for contributing to cuOpt :)

Here are some guidelines to help the review process go smoothly.

Many thanks in advance for your cooperation!

Note: The pull request title will be included in the CHANGELOG.
-->


## Description
There were failure due to increase in wheel size, so bumping the wheel
size limit for libcuopt


https://github.com/NVIDIA/cuopt/actions/runs/23821469086/job/69435078088?pr=1015
## Checklist

- [x] I am familiar with the [Contributing
Guidelines](https://github.com/NVIDIA/cuopt/blob/HEAD/CONTRIBUTING.md).
- Testing
   - [ ] New or existing tests cover these changes
   - [ ] Added tests
   - [ ] Created an issue to follow-up
   - [x] NA
- Documentation
   - [ ] The documentation is up to date with these changes
   - [ ] Added new documentation
   - [x] NA
@Iroy30 Iroy30 self-requested a review April 3, 2026 16:26
Copy link
Copy Markdown
Member

@Iroy30 Iroy30 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

lgtm on python

@akifcorduk
Copy link
Copy Markdown
Contributor Author

/merge

@rapids-bot rapids-bot bot merged commit 140c684 into NVIDIA:release/26.04 Apr 3, 2026
207 of 209 checks passed
This was referenced Apr 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

improvement Improves an existing functionality non-breaking Introduces a non-breaking change P0

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants