Skip to content

INFORMSJoC/2025.1663

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

INFORMS Journal on Computing Logo

A preconditioned augmented Lagrangian method for solving semidefinite programming problems

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.

Cite

To cite the contents of this repository, please cite both the paper and this code repository, using their respective DOIs:

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},
}

Description

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.

Building

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;

Replicating

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

Benchmark Data

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.

Full Dataset Download Locations

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.

Results

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.

Ongoing Development

SDPFp is being developed on an ongoing basis at the author's GitHub site: TTYmath/SDPFp.

Support

For support in using this software, please submit an issue at TTYmath/SDPFp/issues.

Questions may also be sent to ttydp123@gmail.com.

License

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.

About

No description, website, or topics provided.

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors