Skip to main content

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

Metadata

Release files for admm 1.0.2604112007

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for admm 1.0.2604112007
File Size Uploaded
admm-1.0.2604112007.tar.gz 748.5 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for admm 1.0.2604112007
File
admm-1.0.2604112007-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
admm-1.0.2604112007-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ x86-64 Details
admm-1.0.2604112007-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
admm-1.0.2604112007-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
admm-1.0.2604112007-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64 Details
admm-1.0.2604112007-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
admm-1.0.2604112007-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
admm-1.0.2604112007-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ x86-64 Details
admm-1.0.2604112007-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
admm-1.0.2604112007-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
admm-1.0.2604112007-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ x86-64 Details
admm-1.0.2604112007-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details

Total release size: 12.8 MB

Release files / admm-1.0.2604112007.tar.gz

Download URL admm-1.0.2604112007.tar.gz
Size 748.5 kB
Tags Source
SHA-256 checksum
How to use checksums
1c438e29a8ccf18576e227f54e2371302107baaaa53912ab1ad2b6adde8787fe
BLAKE2b-256 checksum
How to use checksums
4aec2dc5449c8d8b4fc2de0e407353ce8b71cfea19668644066a5f1aba46c098
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp313-cp313-win_amd64.whl

Download URL admm-1.0.2604112007-cp313-cp313-win_amd64.whl
Size 294.0 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
75d5452b07379ca844b175d831ae301c5f2b520e297a2317e882e66e8a594ffb
BLAKE2b-256 checksum
How to use checksums
d7b6308a3bac434dd56749f1b296ef74a2a1d1e6c14b7f39cf3db26fb2f3ac22
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL admm-1.0.2604112007-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.4 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
2bd48dc85320d4f96c6f5527dc037607dd7e3e02b4259d20c3371d268957398b
BLAKE2b-256 checksum
How to use checksums
f2fc0d694db8fc99412115b4297435f8f0a616c715f271175ab94d54e5766864
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp313-cp313-macosx_11_0_arm64.whl

Download URL admm-1.0.2604112007-cp313-cp313-macosx_11_0_arm64.whl
Size 308.4 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
03da311c43554c4efee78b3304b000373f897736ed7251fa035b1b17feffad46
BLAKE2b-256 checksum
How to use checksums
60f0811e5622d079546a58d1db0857e5fcbaa8ee987a03522ad130254da93871
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp312-cp312-win_amd64.whl

Download URL admm-1.0.2604112007-cp312-cp312-win_amd64.whl
Size 293.0 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
dff9a76788831bed58b164c063c463c0b8e62de8f24d0e7620f3953dc7a461c1
BLAKE2b-256 checksum
How to use checksums
6258ed4704a65160339fc1d1f8b30322d63daf2bb3045cf53bf27ec3cfab4ce2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL admm-1.0.2604112007-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.4 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
27d4bc99783e4a3a8ebae7407caa22b1a462b5a422667187fd84e46915c0b86e
BLAKE2b-256 checksum
How to use checksums
6e4e81a0512ead3f3be22050923fe41d60044be6c15669c331d663b3c51dbfcf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp312-cp312-macosx_11_0_arm64.whl

Download URL admm-1.0.2604112007-cp312-cp312-macosx_11_0_arm64.whl
Size 310.6 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2dcb2ecd4edd4b96ac38207d17cc35edfcc09b121d72a10912afd3bd0861729d
BLAKE2b-256 checksum
How to use checksums
21b433146a147b8db7d1738338de25d33f675c8e64e23e90f7f3a07083d3af3a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp311-cp311-win_amd64.whl

Download URL admm-1.0.2604112007-cp311-cp311-win_amd64.whl
Size 317.0 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
a03e632fca5119c98d44a0f4d96840b7480385706f566bfc4d8ac18ca7d22bce
BLAKE2b-256 checksum
How to use checksums
531eb7845841b0b09ceb4fef2eea7e84d0d58999877e529c5686b9946da82f41
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL admm-1.0.2604112007-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.5 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
837b8f2c38b864e5f3e82e4449c17feb744cb206c10b2faacd8dba9bf38339d5
BLAKE2b-256 checksum
How to use checksums
6970ba39f472113f44617d0e3b7f911026776386a9a9553b1e830e2d6763ecbf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp311-cp311-macosx_11_0_arm64.whl

Download URL admm-1.0.2604112007-cp311-cp311-macosx_11_0_arm64.whl
Size 319.1 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
2d84c18f3849eb65b12458dacf1152c44e11fbf32788947bd06baba737a75402
BLAKE2b-256 checksum
How to use checksums
aac6ea2c8c1eea72d204c0b2b2f72f9c2956a86b068204d6d3c337355af55d98
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp310-cp310-win_amd64.whl

Download URL admm-1.0.2604112007-cp310-cp310-win_amd64.whl
Size 315.7 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
6b7755b63c1ecc1390740c355d79145b5faf92a9fca6c97b18093ff32583c3d7
BLAKE2b-256 checksum
How to use checksums
96e71a5a9a546ad0ff6d50434524807d7fc93255cea517a15533e4eb06a0fdc5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL admm-1.0.2604112007-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 2.3 MB
Tags CPython 3.10 Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
e16dff734be9eb0b9445d6054a9f9a7ca321356c40b439a6ac0ee666d5bbf42e
BLAKE2b-256 checksum
How to use checksums
ed9e0ce14ad19d3939be4d11c637e936332ca22434a73300f6cd7ce8399508d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12

Release files / admm-1.0.2604112007-cp310-cp310-macosx_11_0_arm64.whl

Download URL admm-1.0.2604112007-cp310-cp310-macosx_11_0_arm64.whl
Size 324.6 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
304636ffdc556d7cd7257871b303698413bf57b31be844b0a0429f887e5660eb
BLAKE2b-256 checksum
How to use checksums
c5b3cd7920873231f9767178f447ba60086c5930123f77f9540f7acfab36a00b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.13.12
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page