Skip to main content

Solve global polynomial optimization problems of either commutative variables or noncommutative operators through a semidefinite programming (SDP) relaxation

Project description

Ncpol2sdpa

Ncpol2sdpa is a tool to convert a polynomial optimization problem of either commutative or noncommutative variables to a sparse semidefinite programming (SDP) problem that can be processed by the SDPA family of solvers, MOSEK, or further processed by PICOS to solve the problem by CVXOPT . The optimization problem can be unconstrained or constrained by equalities and inequalities. This relaxation is also known as the NPA hierarchy.

The objective is to be able to solve very large scale optimization problems. Example applications include:

The implementation has an intuitive syntax for entering problems and it scales for a larger number of noncommutative variables using a sparse representation of the SDP problem.

Dependencies

The implementation requires SymPy and Numpy. The code is compatible with both Python 2 and 3, but using version 3 incurs a major decrease in performance.

While the default CPython interpreter is sufficient for small to medium-scale problems, execution time becomes excessive for larger problems. The code is compatible with Pypy. Using it yields a 10-20x speedup. If you use Pypy, you will need the Pypy fork of Numpy.

By default, Ncpol2sdpa does not require a solver, but then it will not be able to solve a generated relaxation either. Install any supported solver and it will be detected automatically.

Optional dependencies include:

  • SDPA is a possible target solver.

  • SciPy allows faster execution with the default CPython interpreter.

  • PICOS is necessary for using the Cvxopt solver and for converting the problem to a PICOS instance.

  • MOSEK Python module is necessary to work with the MOSEK solver.

  • Cvxopt is required by both Chompack and PICOS.

  • Chompack improves the sparsity of the chordal graph extension.

Usage

Documentation is available on Read the Docs. The following code replicates the toy example from Pironio, S.; Navascues, M. & Acin, A. Convergent relaxations of polynomial optimization problems with noncommuting variables SIAM Journal on Optimization, SIAM, 2010, 20, 2157-2180.

from ncpol2sdpa import generate_operators, SdpRelaxation

# Number of operators
n_vars = 2
# Level of relaxation
level = 2

# Get Hermitian operators
X = generate_operators('X', n_vars, hermitian=True)

# Define the objective function
obj = X[0] * X[1] + X[1] * X[0]

# Inequality constraints
inequalities = [-X[1] ** 2 + X[1] + 0.5 >= 0]

# Simple monomial substitutions
substitutions = {X[0]**2: X[0]}

# Obtain SDP relaxation
sdpRelaxation = SdpRelaxation(X)
sdpRelaxation.get_relaxation(level, objective=obj, inequalities=inequalities,
                             substitutions=substitutions)
sdpRelaxation.solve()
print(sdpRelaxation.primal, sdpRelaxation.dual, sdpRelaxation.status)

Further examples are found in the documentation.

Installation

The code is available on PyPI, hence it can be installed by

$ sudo pip install ncpol2sdpa

If you want the latest git version, follow the standard procedure for installing Python modules after cloning the repository:

$ sudo python setup.py install

Acknowledgment

This work is supported by the European Commission Seventh Framework Programme under Grant Agreement Number FP7-601138 PERICLES, by the Red Espanola de Supercomputacion grants number FI-2013-1-0008 and FI-2013-3-0004, and by the Swedish National Infrastructure for Computing projects SNIC 2014/2-7 and SNIC 2015/1-162.

More Information

For more information refer to the following manuscript:

Wittek, P. (2015). Algorithm 950: Ncpol2sdpa—Sparse Semidefinite Programming Relaxations for Polynomial Optimization Problems of Noncommuting Variables. ACM Transactions on Mathematical Software, 41(3), 21. PDF

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ncpol2sdpa-1.10.tar.gz (1.1 MB view details)

Uploaded Source

File details

Details for the file ncpol2sdpa-1.10.tar.gz.

File metadata

  • Download URL: ncpol2sdpa-1.10.tar.gz
  • Upload date:
  • Size: 1.1 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for ncpol2sdpa-1.10.tar.gz
Algorithm Hash digest
SHA256 4f76f2799c1c6e51a1f0d6713ec132bf3d9c10fdef22b6427fd54a94eded7433
MD5 efde165ed6711df19a003798a9917d6f
BLAKE2b-256 4d2a3a3a88e01a96b32af8fe2f2367d4789cc8b5daac7633e539e2074f257b55

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page