New features
pmp2sdp
New sampling algorithm (see https://arxiv.org/abs/2509.14307 and #255 for details):
- Choose sample points to minimize interpolation errors on the positive real line, and choose bilinear bases consistent with the choice of sample points and sample scalings. This leads to lower condition numbers (i.e. lower
--precisionrequired) and better accuracy. - Allow to downsample the PMP by specifying
"reducedPrefactor"(or"reducedSamplePoints"and"reducedSampleScalings") in pmp.json. Reduced prefactor has fewer poles than the original one, which means fewer sample points.
Changes in pmp.json schema:
- Added optional fields:
"reducedPrefactor","reducedSamplePoints"and"reducedSampleScalings" - Optional field
"bilinearBasis"is made obsolete and replaced with"bilinearBasis_0"and"bilinearBasis_1". If"bilinearBasis"is specified, it is used for both"bilinearBasis_0"and"bilinearBasis_1". "DampedRational"is renamed to"prefactor". Old name is left for backward compatibility.
pmp2sdp now also writes sdp/pmp_info.json, containing block_path, prefactor, reducedPrefactor, samplePoints, sampleScalings, reducedSampleScalings. This information (in particular sample points) can be used to plot c - B.y. See #256.
sdpb
sdpbprints the functionalc - B.ytoout/c_minus_By/c_minus_By.json. It can be used e.g. for computing spectrum. See #256.
spectrum
spectrum is rewritten to use a new algorithm and interface.
NB: it now requires input files pmp_info.json and c_minus_By.json, and thus is incompatible with SDPB 3.0.0 and older versions.
See details in #274.
New algorithm
Find minima of a polynomial det (c-B.y) using MPSolve. This makes finding zeros faster and more reliable than an old custom mesh algorithm.
Updated command-line options
Changed spectrum command-line options (call spectrum --help for details):
- Instead of PMP file
--input path/to/pmp.nsv, you should provide--pmpInfo path/to/sdp/pmp_info.json - If
--lambda=false, you may omit--solutionand specify only--cMinusBy(Path toc_minus_By.jsonwith the block vector(c - B.y)) - Added option
--maxZeroto ignore zeros that are too large.--maxZero 0means no limit. --meshThresholdis marked is obsolete.
Bugfixes
- spectrum: Fix incorrect lambda computations for matrices 3x3 and larger #267.
- spectrum: Find isolated zeros #153.
- Fix #282 Deleting too many zeros in DampedRational in SDPB.m #283.
- Fix #258
BigInt_Shared_Memory_Syrk_Context::restore_and_reduce()fails due to inconsistent output split factors (introduced in 3.0.0) #259. - Fix #251 pmp2sdp fails for 2 input files with objectives when running on 1 core #252.
Other improvements
- Fix compilation for FLINT 3.2+ #244
- Fix compilation for Boost 1.88+ #279
- Other compilation fixes #246, #247, #278
- Find dependencies paths via pkg-config #243
- Print versions for all libraries #241
- Improved logging
New dependencies
- MPSolve (3.2.2 or later)
List of merged PRs
- Fix #214 sdpb --version: Print versions for all libraries used, add
approx_objective --verbosity, remove unused code by @vasdommes in #241 - Fix #242 Get dependency paths from pkg-config by @vasdommes in #243
- Fix FLINT 3.2 compilation, improve debug output, Yale HPC installation by @vasdommes in #244
- Do not call create_directories() if parent path is empty by @vasdommes in #245
- Fix preprocessor directive by @cbehan in #246
- Build fix for tests by @cbehan in #247
- Fix #251 pmp2sdp fails for 2 input files with objectives when running on 1 core by @vasdommes in #252
- Minor fixes: less verbose warnings, compilation error for old libarchive by @vasdommes in #253
- New PMP sampling algorithm by @vasdommes in #255
- Print (c - B.y) vector to SDPB output folder and pmp_info.json to SDP folder by @vasdommes in #256
- Fix #258 BigInt_Shared_Memory_Syrk_Context::restore_and_reduce() fails due to inconsistent output split factors by @vasdommes in #259
- Tests for pmp_info.json and related fixes by @vasdommes in #262
- Fix #261 Test c_minus_By.json in integration tests by @vasdommes in #263
- pmp2sdp: small fixes and improvements by @vasdommes in #264
- Fix #265 Incorrect lambda computations for matrices 3x3 and larger by @vasdommes in #267
- Minor fixes and refactoring by @vasdommes in #269
- Fix swap for Block_Info by @vasdommes in #270
- Fix #271 write_distmatrix() works incorrectly for DistMatrix<T,STAR,STAR> by @vasdommes in #272
- spectrum: new interface and zero-finding algorithm by @vasdommes in #274
- Fix #282 Deleting too many zeros in DampedRational in SDPB.m by @vasdommes in #283
- Support Boost 1.89 by @vasdommes in #279
- Minor fixes: simplify
copy_matrix, checktimecommand, print MPSolve version, improve warnings by @vasdommes in #284 - Update documentation for 3.1.0 by @vasdommes in #286
Full Changelog: 3.0.0...3.1.0