Skip to content

Add LBB relaxed NLP node solver - #3946

Closed
bernalde wants to merge 1 commit into
Pyomo:mainfrom
SECQUOIA:fix/issue-3945-lbb-node-solver
Closed

Add LBB relaxed NLP node solver#3946
bernalde wants to merge 1 commit into
Pyomo:mainfrom
SECQUOIA:fix/issue-3945-lbb-node-solver

Conversation

@bernalde

@bernalde bernalde commented May 11, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Add an explicit relaxed_nlp_solver / relaxed_nlp_solver_args role for GDPopt LBB transformed node subproblems that have no unfixed discrete variables.
  • Keep the existing MINLP/local-MINLP default when relaxed_nlp_solver is unset, preserving LBB's current global-bounding behavior for nonconvex nodes.
  • Reuse GDPopt's existing unfixed-discrete-variable detector for LBB node dispatch and apply the same dispatch to optional local node screening.
  • Tighten MindtPy's no-discrete short-circuit to mean no unfixed discrete variables and add a GOA regression for fixed-discrete NLP routing.

Coordination

Tests

  • pytest -q pyomo/contrib/gdpopt/tests/test_LBB.py::TestGDPoptLBBNodeSolverDispatch pyomo/contrib/mindtpy/tests/test_mindtpy_no_discrete.py::TestMindtPyShortCircuitRouting::test_goa_short_circuit_fixed_discrete_nlp_uses_nlp_solver
    • Result: 5 passed in 0.99s
  • pytest -q pyomo/contrib/gdpopt/tests/test_LBB.py pyomo/contrib/mindtpy/tests/test_mindtpy_no_discrete.py
    • Result: 35 passed, 9 skipped, 2 deselected in 1.70s
  • pytest -q pyomo/contrib/gdpopt/tests
    • Result: 78 passed, 35 skipped, 5 deselected in 46.45s
  • python -m black --check pyomo/contrib/gdpopt/branch_and_bound.py pyomo/contrib/gdpopt/tests/test_LBB.py pyomo/contrib/mindtpy/algorithm_base_class.py pyomo/contrib/mindtpy/tests/test_mindtpy_no_discrete.py
    • Result: 4 files would be left unchanged

Notes

  • The full repository test suite was not run locally. The broader GDPopt test directory and the relevant MindtPy no-discrete tests were run.
  • Black emitted its Python 3.13/Python 3.14 parser safety-check warning but exited successfully.

Closes #3945

@bernalde

Copy link
Copy Markdown
Contributor Author

Coordination note for #3942:

#3942 and this PR fix different bugs. #3942 fixes the LBB time-limit result path for #3941; this PR fixes continuous-node solver dispatch for #3945. This PR does not supersede #3942.

I checked the combined patches with git merge-tree. The runtime changes are independent, but both PRs add imports/tests near the top of pyomo/contrib/gdpopt/tests/test_LBB.py, so this PR will likely need a small refresh/rebase if #3942 lands first.

Recommendation: merge #3942 first, then refresh this branch to resolve the test_LBB.py import/test insertion conflict.

@mrmundt

mrmundt commented May 12, 2026

Copy link
Copy Markdown
Contributor

@bernalde - Required legal acknowledgement was deleted and tests are failing. Please feel free to reopen with the correct template once tests are passing.

@mrmundt mrmundt closed this May 12, 2026
@bernalde bernalde mentioned this pull request Aug 15, 2026
13 tasks
@bernalde

Copy link
Copy Markdown
Contributor Author

Replaced by #4012.

This PR was closed because its description did not follow the repository pull request template — the AI-Use Disclosure and Legal Acknowledgement sections were absent. GitHub would not allow it to be reopened, so the work continues in a new PR.

#4012 carries over the implementation and tests from here unchanged, rebased onto current main, with a description built from .github/PULL_REQUEST_TEMPLATE.md with all sections intact.

The coordination note from this thread still applies, with the numbers updated: #4012 touches pyomo/contrib/gdpopt/tests/test_LBB.py near the same imports as #4010 (the replacement for #3942). The runtime changes are independent. The recommendation is unchanged — merge #4010 first, then rebase #4012 to resolve the small test-file conflict.

Issue #3945 remains open. The discussion here remains the historical record; this branch was left untouched so the diff stays readable.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

GDPopt LBB routes continuous node subproblems through minlp_solver

2 participants