Skip to main content

ADMM - Automatic Decomposition Method by MindOpt

Project description

ADMM: Automatic Decomposition Method by MindOpt

PyPI version Documentation Status License: MIT Build and Publish

ADMM (Automatic Decomposition Method by MindOpt) is a Python library for building and solving structured optimization models. You describe objectives and constraints in a natural mathematical style, and ADMM turns that model into an efficient numerical solve through automatic canonicalization, decomposition, and a high-performance C++ backend.

The core idea is simple: model the problem, not the solver internals. ADMM is designed for formulations that combine linear or quadratic terms, smooth fitting losses, nonsmooth regularization, affine constraints, matrix structure, and custom proximal terms.

For convex models, ADMM targets the global optimum. Through user-defined proximal extensions, it also supports selected nonconvex formulations such as exact sparsity, rank constraints, and manifold-style projections, where the solver acts as a practical local method.

Features

  • Model-first optimization workflow: Write the mathematics directly and let ADMM handle canonicalization, decomposition, and solver orchestration automatically.
  • Rich structured problem support: Combine linear and quadratic objectives, smooth losses, nonsmooth regularizers, affine constraints, and matrix-valued structure such as symmetry and PSD constraints.
  • Beyond standard convex modeling: 48 ready-to-use UDF classes ship out of the box — from L0 sparsity and rank constraints to Cauchy, Welsch, and Tukey robust losses, KL divergence, logistic regression, and graph Laplacian smoothing. For any new smooth loss, supply just eval + grad and the C++ backend solves the proximal subproblem automatically.
  • Built for real applications: Use the same interface for portfolio optimization, sparse and regularized learning, covariance estimation, semidefinite modeling, compressed sensing, and signal or image processing.
  • NumPy-friendly Python API: Work naturally with scalars, vectors, and matrices in a concise Python interface instead of hand-coding low-level updates.
  • Fast backend, practical deployment: Run on a C++ backend with Python bindings across Linux, macOS, and Windows.

When to Use ADMM

ADMM is a strong fit when your model combines several structured ingredients in one formulation, such as:

  • linear or quadratic objectives
  • smooth fitting terms such as least squares, logistic regression, or Huber loss
  • nonsmooth regularization such as L1 or nuclear norm
  • affine equality or inequality constraints
  • structural constraints on variables such as nonnegativity, symmetry, or PSD
  • matrix-valued objectives such as trace, log-determinant, or Frobenius norm
  • custom proximal terms for advanced nonconvex modeling
  • custom smooth losses via gradient-based UDFs (Cauchy, log-cosh, quantile regression, etc.)

Installation

From PyPI

pip install admm

This will automatically install all dependencies including admmlib (the pre-built admm C++ core dependency library).

From Source

git clone https://github.com/alibaba-damo-academy/admm.git
cd admm
pip install . -r requirements.txt

Quick Start

The following example shows a mean-variance portfolio optimization problem:

min    -mu^T w + gamma * w^T Sigma w
s.t.   sum(w) = 1,   w >= 0

The corresponding ADMM code:

import admm
import numpy as np

n = 20
mu = np.abs(np.random.randn(n))
F = np.random.randn(n + 3, n)              # random factor matrix
Sigma = F.T @ F + 0.1 * np.eye(n)          # covariance matrix (PSD)
gamma = 0.5                                # risk-aversion parameter

model = admm.Model()
w = admm.Var("w", n)
model.setObjective(-mu.T @ w + gamma * (w.T @ Sigma @ w))
model.addConstr(admm.sum(w) == 1)
model.addConstr(w >= 0)
model.optimize()

print(f"status: {model.StatusString}")
print(f"obj:    {model.ObjVal:.6f}")

Examples

The examples/ folder contains 40 standalone scripts covering every documented use case — from basic LP/QP to UDF-based nonconvex models and gradient-based smooth losses. Each script runs independently:

python examples/portfolio_optimization.py
python examples/sparse_logistic_regression.py
python examples/udf_l0_norm.py

See examples/README.md for the full list.

User-Defined Proximal Functions

The udf/ folder ships 48 ready-to-use UDF classes — 15 proximal operators for nonconvex and convex penalties (L0, rank, manifold projections, etc.) and 33 gradient-based smooth losses covering robust M-estimators (Cauchy, Welsch, Tukey, Geman-McClure, etc.), classification losses (logistic, hinge, cross-entropy), divergences (KL, Itakura-Saito, χ²), barriers (log barrier, negative entropy), and structural penalties (smooth TV, graph Laplacian) — that go beyond standard convex modeling tools.

ADMM supports two UDF paths — supply the proximal operator (argmin) or just the gradient (grad):

# Path 1: argmin — closed-form proximal operator (nonconvex penalties, indicators)
from udf.L0Norm import L0Norm
model.setObjective(0.5 * admm.sum(admm.square(x - y)) + lam * L0Norm(x))
# Path 2: grad — gradient only (smooth custom losses)
from udf.CauchyLoss import CauchyLoss
model.setObjective(CauchyLoss(A @ x - b, c=2.0))

The grad path lets you add any differentiable custom loss without deriving a proximal formula — the C++ backend handles the proximal solve via gradient descent with backtracking line search.

See udf/README.md for the full class list, how to write your own, and how to contribute.

Documentation

Building from Source

Prerequisites

  • Python >= 3.10
  • C++ compiler (GCC, Clang, or MSVC)
  • Cython >= 0.29.0, setuptools >= 61, NumPy >= 1.20.0, SciPy >= 1.7.0
  • admmlib >= 2026.4.9 (pre-built C++ core dependency)
  • xelatex / latexmk (only needed for PDF documentation)

Supported Platforms

  • Linux: x86_64 (GCC)
  • macOS: ARM64 (Apple Silicon, Clang)
  • Windows: x86_64 (MSVC)

Build and Install

pip install . -r requirements.txt

Run Tests

pytest tests/                    # all tests
pytest tests/test_ut.py          # unit tests
pytest tests/test_admm.py        # application tests
pytest tests/test_udf.py         # user-defined function tests (argmin path)
pytest tests/test_udf_grad.py    # user-defined function tests (grad path)
pytest tests/test_doc.py         # documentation example tests

Build Documentation Locally

cd docs
bash build.sh

Open docs/_build/html/index.html in your browser. To build HTML only (without LaTeX/PDF):

cd docs
python -c "import genrst; genrst.writeRst()"
python -m sphinx -b dirhtml ./ ./_build/html

Contributing

We welcome contributions! Please see CONTRIBUTING.md for guidelines, including how to contribute new user-defined proximal function classes under udf/.

Citing ADMM

If you use ADMM in your research or work, please cite:

@software{admm2026,
  title  = {{ADMM}: {A}utomatic {D}ecomposition {M}ethod by {MindOpt}},
  author = {{MindOpt Team, Alibaba DAMO Academy}},
  year   = {2026},
  url    = {https://github.com/alibaba-damo-academy/admm},
  note   = {Open-source Python library for structured optimization}
}

License

This project is licensed under the MIT License - see the LICENSE file for details.

Acknowledgments

This project is maintained by the MindOpt Team at Alibaba DAMO Academy.

Support

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

admm-1.0.2604112007.tar.gz (748.5 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

admm-1.0.2604112007-cp313-cp313-win_amd64.whl (294.0 kB view details)

Uploaded CPython 3.13Windows x86-64

admm-1.0.2604112007-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

admm-1.0.2604112007-cp313-cp313-macosx_11_0_arm64.whl (308.4 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

admm-1.0.2604112007-cp312-cp312-win_amd64.whl (293.0 kB view details)

Uploaded CPython 3.12Windows x86-64

admm-1.0.2604112007-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.4 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

admm-1.0.2604112007-cp312-cp312-macosx_11_0_arm64.whl (310.6 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

admm-1.0.2604112007-cp311-cp311-win_amd64.whl (317.0 kB view details)

Uploaded CPython 3.11Windows x86-64

admm-1.0.2604112007-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

admm-1.0.2604112007-cp311-cp311-macosx_11_0_arm64.whl (319.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

admm-1.0.2604112007-cp310-cp310-win_amd64.whl (315.7 kB view details)

Uploaded CPython 3.10Windows x86-64

admm-1.0.2604112007-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.3 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

admm-1.0.2604112007-cp310-cp310-macosx_11_0_arm64.whl (324.6 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

File details

Details for the file admm-1.0.2604112007.tar.gz.

File metadata

  • Download URL: admm-1.0.2604112007.tar.gz
  • Upload date:
  • Size: 748.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for admm-1.0.2604112007.tar.gz
Algorithm Hash digest
SHA256 1c438e29a8ccf18576e227f54e2371302107baaaa53912ab1ad2b6adde8787fe
MD5 193d3a890adbe8a0956cef8a1c1784c1
BLAKE2b-256 4aec2dc5449c8d8b4fc2de0e407353ce8b71cfea19668644066a5f1aba46c098

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 75d5452b07379ca844b175d831ae301c5f2b520e297a2317e882e66e8a594ffb
MD5 47355dc1156d34aa49455868c5118f95
BLAKE2b-256 d7b6308a3bac434dd56749f1b296ef74a2a1d1e6c14b7f39cf3db26fb2f3ac22

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2bd48dc85320d4f96c6f5527dc037607dd7e3e02b4259d20c3371d268957398b
MD5 44b34c5b3dcd153b5e84dcb3a12375e5
BLAKE2b-256 f2fc0d694db8fc99412115b4297435f8f0a616c715f271175ab94d54e5766864

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 03da311c43554c4efee78b3304b000373f897736ed7251fa035b1b17feffad46
MD5 bdc3c6e3254f60140aad445e30fd0f1d
BLAKE2b-256 60f0811e5622d079546a58d1db0857e5fcbaa8ee987a03522ad130254da93871

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 dff9a76788831bed58b164c063c463c0b8e62de8f24d0e7620f3953dc7a461c1
MD5 f86749ec008185cc4c0502ae4e62d9ec
BLAKE2b-256 6258ed4704a65160339fc1d1f8b30322d63daf2bb3045cf53bf27ec3cfab4ce2

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 27d4bc99783e4a3a8ebae7407caa22b1a462b5a422667187fd84e46915c0b86e
MD5 7c0a4a40eb7fdb03db41e407468e05e1
BLAKE2b-256 6e4e81a0512ead3f3be22050923fe41d60044be6c15669c331d663b3c51dbfcf

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2dcb2ecd4edd4b96ac38207d17cc35edfcc09b121d72a10912afd3bd0861729d
MD5 2a62bc50710ea59af0bd9da5be33964b
BLAKE2b-256 21b433146a147b8db7d1738338de25d33f675c8e64e23e90f7f3a07083d3af3a

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a03e632fca5119c98d44a0f4d96840b7480385706f566bfc4d8ac18ca7d22bce
MD5 1735b769a9a4fbe7824ffb0aa14c33ea
BLAKE2b-256 531eb7845841b0b09ceb4fef2eea7e84d0d58999877e529c5686b9946da82f41

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 837b8f2c38b864e5f3e82e4449c17feb744cb206c10b2faacd8dba9bf38339d5
MD5 0c096b2d440e0006ac5d5a5ac5681a07
BLAKE2b-256 6970ba39f472113f44617d0e3b7f911026776386a9a9553b1e830e2d6763ecbf

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 2d84c18f3849eb65b12458dacf1152c44e11fbf32788947bd06baba737a75402
MD5 e62fc83669e32c4dd0687d6968444c7f
BLAKE2b-256 aac6ea2c8c1eea72d204c0b2b2f72f9c2956a86b068204d6d3c337355af55d98

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 6b7755b63c1ecc1390740c355d79145b5faf92a9fca6c97b18093ff32583c3d7
MD5 6e114b677a5237b5f45678567201c07d
BLAKE2b-256 96e71a5a9a546ad0ff6d50434524807d7fc93255cea517a15533e4eb06a0fdc5

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e16dff734be9eb0b9445d6054a9f9a7ca321356c40b439a6ac0ee666d5bbf42e
MD5 1a60426c0e08a30f7da2c6c2c13e7ab7
BLAKE2b-256 ed9e0ce14ad19d3939be4d11c637e936332ca22434a73300f6cd7ce8399508d8

See more details on using hashes here.

File details

Details for the file admm-1.0.2604112007-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for admm-1.0.2604112007-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 304636ffdc556d7cd7257871b303698413bf57b31be844b0a0429f887e5660eb
MD5 a712f86f3cc3a72db92d6bed4ac0a904
BLAKE2b-256 c5b3cd7920873231f9767178f447ba60086c5930123f77f9540f7acfab36a00b

See more details on using hashes here.

Supported by

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