This archive is distributed in association with the INFORMS Journal on Computing under the BSD 3-Clause License.
The software and documentation in this repository are a snapshot of the code archive associated with the paper A preconditioned augmented Lagrangian method for solving semidefinite programming problems by Tianyun Tang and Kim-Chuan Toh.
The current development and public release repository for SDPFp is
TTYmath/SDPFp.
Please use that repository for newer versions and support after publication.
To cite the contents of this repository, please cite both the paper and this code repository, using their respective DOIs:
- Paper DOI: 10.1287/ijoc.2025.1663
- Code DOI: 10.1287/ijoc.2025.1663.cd
Below is the BibTeX for citing this snapshot of the code repository.
@misc{TangToh2026SDPFpCode,
author = {Tianyun Tang and Kim-Chuan Toh},
publisher = {INFORMS Journal on Computing},
title = {{A preconditioned augmented Lagrangian method for solving semidefinite programming problems}},
year = {2026},
doi = {10.1287/ijoc.2025.1663.cd},
url = {https://github.com/INFORMSJoC/2025.1663},
note = {Available for download at https://github.com/INFORMSJoC/2025.1663},
}This repository contains SDPFp, a MATLAB package for solving low-rank semidefinite programming problems arising in the numerical experiments of the paper.
The main solver is located in src/SDPFp. The package contains:
src/SDPFp/sdpfplus.m: main solver interface.src/SDPFp/Start_up.m: MATLAB path setup script.src/SDPFp/Demo.m: self-contained representative examples with randomly generated data.src/SDPFp/Main: internal solver routines, operators, preprocessing files, utilities, and MEX installer files.src/SDPFp/third_party: third-party-derived files grouped by source, each with the corresponding license information.src/SDPFp/SDPFplus_User_Guide.pdf: user guide.scripts/paper_experiments: SDPFp-only paper experiment scripts, organized one folder per problem class.results: LaTeX table sources, figure source files, and representative experiment log.data/README.md: external dataset sources and expected local data layout.
The experiments reported in the paper were run using MATLAB R2021b on a workstation with an Intel Xeon E5-2680 v3 @ 2.50GHz processor and 128GB RAM.
Start MATLAB and run:
cd('/path/to/2025.1663/src/SDPFp');
Start_up;The package uses several MEX routines for acceleration. Precompiled MEX binaries are not included in this archive; users should compile the MEX routines locally with a MATLAB-supported C compiler:
cd('/path/to/2025.1663/src/SDPFp/Main/mexfun');
Installmex(1);
cd('/path/to/2025.1663/src/SDPFp');
Start_up;The archive includes a self-contained representative experiment script using randomly generated data. It is intended to verify installation and demonstrate the solver interface.
To run the representative experiments:
cd('/path/to/2025.1663');
run('scripts/representative_experiments/run_representative_experiments.m');The script runs src/SDPFp/Demo.m and saves a console log to:
results/representative_experiments_log.txt
The demo examples include:
- Box-constrained quadratic programming relaxation
- Community detection SDP relaxation
- Density estimation SDP
- Nearest correlation matrix problem
- Matrix completion SDP
- MaxCut SDP relaxation
- Minimum bisection SDP relaxation
- Quadratic assignment DNN relaxation
- Lovasz theta problem
- DNN variant of the theta problem
The paper uses both generated instances and external benchmark collections. External benchmark files are not redistributed in this repository, because they are maintained by third parties and may have their own licenses or terms of use. Instead, this archive provides the exact instance lists and download locations.
Put downloaded benchmark data under a local directory and tell MATLAB where to find it by setting:
setenv('SDPFP_DATA_ROOT','/path/to/local/benchmark/data');If SDPFP_DATA_ROOT is not set, the scripts look under data inside this
repository. Detailed paths and script-specific instructions are in
data/README.md.
No external benchmark input files are redistributed under data/. The rank-1
tensor experiments are generated directly by the archive scripts using a
self-contained implementation of the specific moment/SOS SDP constructions
needed for the paper instances, following Nie and Wang's formulation
Semidefinite Relaxations for Best Rank-1 Tensor Approximations.
To run the paper experiment scripts on external benchmark instances, download
the files from the sources below and place them under the directory specified
by SDPFP_DATA_ROOT.
| Paper experiment | Full data source | Expected local location |
|---|---|---|
| Gset graph instance | Gset collection | Convert the graph to a MATLAB adjacency file and place it under $SDPFP_DATA_ROOT/GraphData/, or place a Gset text file under a local folder and set the corresponding script variable. |
| Lovasz theta and theta-plus coding-theory graphs | N. J. A. Sloane's independent-set challenge graphs. The original AT&T page is no longer live; an archived source page lists the files. For example, 1dc.1024.txt.gz is archived. |
Put gzipped DIMACS files under $SDPFP_DATA_ROOT/DIMACS/, or converted MATLAB adjacency files under $SDPFP_DATA_ROOT/GraphData/. |
| Quadratic assignment DNN relaxations | QAPLIB | Put QAPLIB .dat files under $SDPFP_DATA_ROOT/QAPLIB/. |
| Two-electron reduced-density-matrix SDPs | RDM SDP collection | Put the selected SDPA sparse 1t2p .dat-s files under $SDPFP_DATA_ROOT/t2p.molecules/. |
| Hans Mittelmann SDP benchmarks | Hans Mittelmann SDP benchmark collection | Put selected SDPA sparse .dat-s files under $SDPFP_DATA_ROOT/Hans-Mittelman/. |
| Rank-1 tensor approximation | Generated directly by scripts/paper_experiments/rank1_tensor/generate_rank1_tensor_sdp.m, following Semidefinite Relaxations for Best Rank-1 Tensor Approximations. |
No download is needed; each instance is generated in memory before SDPFp is called. |
| Density estimation, HNCor, and graph equipartition | These data are generated by the paper experiment scripts with fixed random seeds. | No download is needed. The scripts generate the instances directly. |
The exact instance names appearing in the paper tables, together with more
detailed placement instructions, are listed in data/README.md.
For example, after downloading the coding-theory graph 1dc.1024.txt.gz, place
it at:
$SDPFP_DATA_ROOT/DIMACS/1dc.1024.txt.gz
and run:
thetaInstances = {'1dc.1024'};
run('scripts/paper_experiments/theta/run_theta.m');
thetaPlusInstances = {'1dc.1024'};
run('scripts/paper_experiments/theta_plus/run_theta_plus.m');If thetaInstances or thetaPlusInstances is not set, the theta scripts loop
over all coding-theory graph files found under SDPFP_DATA_ROOT.
The paper contains numerical tables for several SDP problem classes. This
archive includes instructions for obtaining external benchmark collections and
for generating the rank-1 tensor SDP inputs in memory. The file
data/README.md describes where those datasets can be
obtained and how they enter the experiments.
The directory scripts/paper_experiments contains
one folder per paper experiment class. Each folder contains a runner and a
README describing the tested problem, any reference or data source, the local
data placement, and the run command.
The directory results contains the LaTeX table
sources and figure source files used in the paper, together with the
representative experiment log. See
results/README.md for details.
SDPFp is being developed on an ongoing basis at the author's GitHub site:
TTYmath/SDPFp.
For support in using this software, please submit an issue at
TTYmath/SDPFp/issues.
Questions may also be sent to ttydp123@gmail.com.
The original SDPFp code in this archive is distributed under the BSD 3-Clause
License. See LICENSE.
Third-party-derived files are grouped by source under src/SDPFp/third_party/:
src/SDPFp/third_party/SDPT3: files derived from SDPT3, with the corresponding GPL-2.0 license copy.src/SDPFp/third_party/SDPNAL: files derived from SDPNAL or SDPNAL+, with the corresponding GPL-2.0 license copy and SDPNAL+ copyright notice.
Files outside these third-party directories were created by the authors solely
for this project, except for standard license texts and documentation excerpts
that explicitly identify their source. See
THIRD-PARTY-NOTICES.md for details.
