Skip to content

Add LBB relaxed NLP node solver#3946

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

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
Copy link
Copy Markdown
Contributor

@bernalde bernalde commented May 11, 2026

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.

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

1 participant