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):

pip install -r docs/requirements.txt
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}
}

Troubleshooting

ImportError after installing admm

If import admm fails after a successful pip install admm, the most likely cause is that admmlib was not installed correctly. admmlib ships the native C library that admm depends on at runtime, and is normally installed automatically as a dependency.

To check whether admmlib is installed:

pip show admmlib

If it is missing, reinstall it explicitly:

pip install --force-reinstall admmlib

If the problem persists, please open an issue with the output of pip install admm -v and your platform information.

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.2604110923

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.2604110923
File Size Uploaded
admm-1.0.2604110923.tar.gz 749.5 kB Details

Built distributions (wheels)

Table of built distributions (wheels) for admm 1.0.2604110923
File
admm-1.0.2604110923-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details
admm-1.0.2604110923-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.2604110923-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details
admm-1.0.2604110923-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details
admm-1.0.2604110923-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.2604110923-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
admm-1.0.2604110923-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details
admm-1.0.2604110923-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.2604110923-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
admm-1.0.2604110923-cp310-cp310-win_amd64.whl CPython 3.10 CPython 3.10 Windows x86-64 Details
admm-1.0.2604110923-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.2604110923-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.2604110923.tar.gz

Download URL admm-1.0.2604110923.tar.gz
Size 749.5 kB
Tags Source
SHA-256 checksum
How to use checksums
ec165380e86e02edd52d846b109f6f6f951a61d99201007e243e72aa3136a23e
BLAKE2b-256 checksum
How to use checksums
44e3e234dd6abcb361e4a62b128658764c53c93063063682057f0a4fac95e0e7
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.2604110923-cp313-cp313-win_amd64.whl

Download URL admm-1.0.2604110923-cp313-cp313-win_amd64.whl
Size 294.4 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
091e8b6a116d9d58c36e06c7d864e48ee887b4c9de31e02633115f4b56fd5fc0
BLAKE2b-256 checksum
How to use checksums
859cb91098480485107f5ee0f6dbf72e5ce68053407d629d0142817044f8cecb
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.2604110923-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL admm-1.0.2604110923-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
15dfe7668b07f5bac98fb3e95d401d586f747fdb1832efea1d500270baa68a71
BLAKE2b-256 checksum
How to use checksums
e67fcf49db323561b73b1394de493fd85597e28dcb6c10beedd503434bdb933b
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.2604110923-cp313-cp313-macosx_11_0_arm64.whl

Download URL admm-1.0.2604110923-cp313-cp313-macosx_11_0_arm64.whl
Size 308.8 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
745f74bdadc834212ac8d3ce76fb799a6b1d4cfcfc0cf155ace67d0b944c2b85
BLAKE2b-256 checksum
How to use checksums
a2c5608d738335558e1928cd4f2302c2d561bfe26885fcc5da30f56f89769672
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.2604110923-cp312-cp312-win_amd64.whl

Download URL admm-1.0.2604110923-cp312-cp312-win_amd64.whl
Size 293.4 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
38f297373c48eda94cf6941f9f90c1c84aaef7dbaaf1f86da0938ba779b6fc26
BLAKE2b-256 checksum
How to use checksums
1961847a73bfeba9f83cfd921ae2f4b625e864606252ce61e8b970f93034a679
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.2604110923-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL admm-1.0.2604110923-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
0c72ad9da26c1eb60afc16eb9ebcfac8ddf4dda2364d491e09476d4031068a66
BLAKE2b-256 checksum
How to use checksums
82c8023da0495f163abb65140e42f40789ef7f69bdd4cad9588dce039960b0cb
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.2604110923-cp312-cp312-macosx_11_0_arm64.whl

Download URL admm-1.0.2604110923-cp312-cp312-macosx_11_0_arm64.whl
Size 310.9 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
85269c76839e6e58a6ceb8cfc8cf214990f416e10311382a15b31359495add7a
BLAKE2b-256 checksum
How to use checksums
7fe94281d0b1d47b8b8bf14e49a2b52888066d9a62f861d48d16f9ba79288546
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.2604110923-cp311-cp311-win_amd64.whl

Download URL admm-1.0.2604110923-cp311-cp311-win_amd64.whl
Size 317.4 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
9afb660fe7afd0b42a6813aaa93decf0e4025a700dd06dc1e867ff156897df51
BLAKE2b-256 checksum
How to use checksums
5cbb7d4e612aed835221bff3ec724133cce313b84f6617a542a4e85ed637747b
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.2604110923-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL admm-1.0.2604110923-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
8064062325ffc5719171918f564c4e1d8276f7d2be15dd7e65c13ba4672975a2
BLAKE2b-256 checksum
How to use checksums
dcdc43ad99cc36106f40c4e08e78ac25278ff8ea9854d82d4aa13f3fc715761f
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.2604110923-cp311-cp311-macosx_11_0_arm64.whl

Download URL admm-1.0.2604110923-cp311-cp311-macosx_11_0_arm64.whl
Size 319.4 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
4241031025c398c3c529227b70d89bc1f615c4a2c6f2ed7d01a83b79ece7e1fe
BLAKE2b-256 checksum
How to use checksums
bb4d616f4d89363ae49508831411a0823c98cf1ef3c8a9e28964383e79ec2b85
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.2604110923-cp310-cp310-win_amd64.whl

Download URL admm-1.0.2604110923-cp310-cp310-win_amd64.whl
Size 316.0 kB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
17a2cbf1d40f82366db5cd69248584fa74ff1c1e339dc588288a5e935fee9094
BLAKE2b-256 checksum
How to use checksums
b0b4d72531f70b00564110cb25cf1d01fe394446dcffc77d1ba0c62b60bc4fbe
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.2604110923-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL admm-1.0.2604110923-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
41fd64642cb98738a758f3a3467d6426e17578aacafec9bb607f08d2e4d5f93d
BLAKE2b-256 checksum
How to use checksums
6205e7d6b906a380ec545d59a17fec2c992138dd5f5504e41baa9f22cbe40a99
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.2604110923-cp310-cp310-macosx_11_0_arm64.whl

Download URL admm-1.0.2604110923-cp310-cp310-macosx_11_0_arm64.whl
Size 325.0 kB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
8138582f538f0e50300f6e70e088789930b028e103f82feea7f62c86050f04e2
BLAKE2b-256 checksum
How to use checksums
cc9f3aa987a667f94735b3083eaffe1ec52af44556272cd09df9e224c5265d12
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