__ ___________ __ ◉
/ |/ / _/ __ \_____/ /____ _____ / \
/ /|_/ // // /_/ / ___/ __/ _ \/ ___/ ◉ ◉
/ / / // // ____(__ ) /_/ __/ / /| |\
/_/ /_/___/_/ /____/\__/\___/_/ ◉ ◉ ◉ ◉
{≈≈≈} globally optimal · locally hip
MIPster is a high-performance open-source solver for Mixed-Integer Linear Programming (MIP/MILP) problems. It is a streamlined fork of COIN-OR CBC, redesigned for simplicity, performance, and ease of integration.
🌐 Project Website · 📦 Latest Release
| Platform | Installer / Package | Tarball |
|---|---|---|
| Linux x86_64 (Ubuntu 22.04+, Fedora 35+, RHEL 9+) | .deb · .rpm · Arch | .tar.gz |
| Linux aarch64 (ARM64, Raspberry Pi 5, AWS Graviton) | .deb · .rpm | .tar.gz |
| macOS Apple Silicon (M1, M2, M3, M4) | .pkg | .tar.gz |
| macOS Intel (x86_64, macOS 13+) | .pkg | .tar.gz |
| Windows x86_64 (Windows 10/11) | .exe installer | .zip |
- Strong default performance — particularly on problems with set packing, covering, and partitioning constraints, as commonly found in column-generation formulations.
- Good parallel performance — opportunistic parallel LP solving via a racing portfolio of LP configurations.
- Comprehensive C API — a clean C interface callable from virtually any language, including Python (via CFFI), Julia, and others.
- Lightweight codebase — experimental features that do not consistently improve performance on a broad set of instances are removed, not accumulated.
- Simple build system — a single
./configure && make && sudo make install; no multi-project orchestration required. - Modern C++ — new code targets C++17.
- Supporting multiple LP solver backends (only CLP, already embedded).
- Supporting multiple sparse linear system libraries for the barrier solver (only AMD is kept).
MIPster started from the CBC 3.x development branch and underwent significant consolidation:
| Upstream (5 projects) | MIPster | |
|---|---|---|
| Projects / build systems | 5 (CoinUtils, Osi, Clp, Cgl, Cbc) | 1 |
| Source lines (C++/headers) | ~660,000 | ~551,000 |
| External dependencies | ~10 optional | 1 optional (AMD) |
| Solver binary | cbc |
mipster |
- Aboca / AbcSimplex (~35,000 lines) — experimental parallel simplex code.
- GLPK / GMPL support — LP/MIP format parsing via GLPK (GPL-licensed).
- Multiple Cholesky solvers — CHOLMOD (GPL), MUMPS, WSMP (proprietary), Pardiso (proprietary), Taucs; only AMD (BSD-licensed) is kept for the barrier method.
- ClpPdco / ClpLsqr (~1,900 lines) — interior-point solver for regularized least-squares problems; not used in MIP solving.
- Standalone
clpbinary (~4,400 lines) — CLP is now an internal library. - Osi abstraction layer — the solver-independent LP interface is embedded directly; no longer a separate project.
- All
#if 0dead-code blocks — hundreds of commented-out code blocks removed throughout. - MSVC-specific workarounds — Windows builds use MinGW/GCC; MSVC-only code removed.
CoinUtils,Clp,Cglas separate projects — all merged into a single unified build.
Requirements: a C++17 compiler (GCC or Clang), make, and optionally AMD (SuiteSparse) for the barrier LP method.
./configure
make -j$(nproc)
sudo make installThis produces the mipster binary and the libmipster library.
If SuiteSparse/AMD is installed:
./configure --with-amd# Solve a MPS file
mipster problem.mps -solve
# With a time limit (seconds)
mipster problem.mps -sec 300 -solve
# Write solution to file
mipster problem.mps -solve -writeSolution solution.txt
# Interactive help
mipster --helpMIPster reads .mps, .lp, .mps.gz, and .lp.gz files directly.
MIPster exposes the same C API symbols as CBC (Cbc_newModel, Cbc_solve, etc.), so porting existing CBC C code requires only a change to the include path and link flags:
#include <mipster/Cbc_C_Interface.h>
Cbc_Model *model = Cbc_newModel();
Cbc_readMps(model, "problem.mps");
Cbc_solve(model);
printf("Objective: %f\n", Cbc_getObjValue(model));
Cbc_deleteModel(model);Compile with pkg-config:
cc myapp.c $(pkg-config --cflags --libs mipster) -o myappContributions are welcome! See CONTRIBUTING.md for a full guide covering environment setup, building, running benchmark experiments, and code style.
Quick links:
- Set up your dev environment → Prerequisites & clone
- Build MIPster → Section 3
- Run benchmark experiments → Section 5
- Submit a change → Section 8
MIPster is licensed under the Eclipse Public License 2.0 (EPL-2.0), the same license as COIN-OR CBC.
MIPster is built on top of COIN-OR CBC, CLP, CGL, OSI, and CoinUtils. We are grateful to the entire COIN-OR community for building and maintaining these foundations.