Repository navigation
Add SMS++ as a Lagrangian relaxation solver - #12
Merged
Merged
Conversation
fontanf
force-pushed
the
add-smspp-solver
branch
2 times, most recently
from
September 2, 2026 17:28
6ee5bf5 to
9b77d5b
Compare
Adds a GENERALIZEDASSIGNMENTSOLVER_USE_SMSPP build option and wires SMS++ into both Lagrangian relaxation algorithms (assignment and knapsack relaxations) as an alternative solver for the multiplier update subproblem, alongside dlib and ConicBundle. Bumps mathoptsolverscmake and enables SMS++ in CI. Getting this working on all three CI platforms required several supporting fixes, most of them for issues that only surfaced on Windows: - macOS: SMS++'s vendored CMakeLists.txt calls a plain find_package(Boost) and links against Boost::boost. Our FetchContent'd Boost only defines per-component targets, and Boost::headers is just an (essentially empty) meta package rather than an aggregate of every component's headers, so Boost::boost is now defined linked against every fetched library instead, letting SMS++ find whichever Boost headers it needs (including several header-only libraries -- algorithm, any, bimap, function, functional, multi_array, preprocessor -- added to BOOST_INCLUDE_LIBRARIES since SMS++ #includes them directly). - Ubuntu/macOS: install Eigen3 and netCDF-cxx (libeigen3-dev/ libnetcdf-c++4-dev on Ubuntu, eigen/netcdf-cxx via brew on macOS), which SMS++'s CMakeLists.txt requires unconditionally but which aren't present by default on CI runners. - Ubuntu: run `apt-get update` before `apt-get install`, since the runner image's cached package list pointed at a bzip2/libbz2-dev version that had since been pruned from the security mirror. - Windows: install netCDF-cxx4 and BZip2 via vcpkg (using the x64-windows-static triplet, to match this project's static CRT), wired in via CMAKE_PREFIX_PATH rather than the full vcpkg toolchain file, which globally wraps add_library()/find_package() and breaks unrelated FetchContent'd dependencies. - Bumps mathoptsolverscmake to fontanf/mathoptsolverscmake#11, which fixes several Windows-only issues in the SMS++/BundleSolver integration: a vendored FindCoinUtils.cmake's unconditional BZip2 requirement, Eigen3 not being installed by default, a broken GETOPT_LIBRARY-NOTFOUND link, vendored netCDF(Cxx) find modules that only work with the full vcpkg toolchain file, and CMake's own FindZLIB.cmake not recognizing vcpkg's static-triplet library name ("zs.lib"). Verified with full local builds and passing CI on all three platforms (Ubuntu, macOS, Windows).
fontanf
force-pushed
the
add-smspp-solver
branch
from
September 3, 2026 05:11
f3616d2 to
3eb84ff
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
GENERALIZEDASSIGNMENTSOLVER_USE_SMSPPbuild optionTest plan
-DGENERALIZEDASSIGNMENTSOLVER_USE_SMSPP=ONlagrangian-relaxation-assignment --solver smsppandlagrangian-relaxation-knapsack --solver smsppproduce correct bounds on sample instances