A high-performance, single-build MIP solver — a streamlined fork of COIN-OR CBC with a clean C API and strong default performance.
⬇ Download View on GitHubpip install mipster across Linux, macOS, Windows; runtime CPU dispatch (AVX2 / Haswell / NEON).exe (NSIS), macOS .pkg, Linux .deb/.rpm/Arch packages-lpMethod=auto) — random-forest based, 1.36× geomean LP speedupCglFlowCover, CglProbing, CglKnapsackCover, CglTwoMIR, postprocessmipster_diag (auto-triage of wrong-optimal) and mipster_validate_solpip install mipster
Conflict-graph preprocessing, Bron–Kerbosch clique cuts, odd-wheel separation, and an aggressive cut-and-branch loop. Tuned for set packing, covering, and partitioning constraints common in column-generation formulations.
Every release ships multiple ISA-tuned variants — AVX2 on Intel/AMD, Haswell on macOS x86_64, ARMv8.2 NEON on aarch64 — plus a portable baseline. CPUID auto-dispatch at startup picks the fastest binary your CPU can run; no recompilation needed.
Multiple LP configurations race in parallel via -racingLP on; the first to finish wins. Data-driven K=2 / K=3 portfolios from k-fold cross-validation. Exploits all available cores on the LP relaxation.
Random-forest based -lpMethod=auto picks the best LP algorithm per instance (1.36× geomean speedup). Built-in CbcInstanceFeatures exports OsiFeatures values to CSV for offline tuning and clustering.
A comprehensive C interface callable from Python (via CFFI/ctypes), Julia, Rust, and any language with C FFI. Binary and source compatible with COIN-OR CBC.
Same open-source license as upstream COIN-OR CBC. Use freely in academic and commercial settings. No GPL dependencies.
From Python (no compilation needed):
pip install mipster
# Use mipster as a backend in python-mip:
python -c "from mip import Model; m = Model(solver_name='mipster'); ..."
From the command line, after installing your platform's package:
# Solve a MPS file
mipster problem.mps -solve
# Set a 5-minute time limit
mipster problem.mps -sec 300 -solve
# Write solution to file
mipster problem.mps -solve -solu solution.txt
# Show all parameters
mipster --help
Using the C API:
#include <mipster/Cbc_C_Interface.h>
Cbc_Model *m = Cbc_newModel();
Cbc_readMps(m, "problem.mps");
Cbc_solve(m);
printf("Objective: %f\n", Cbc_getObjValue(m));
Cbc_deleteModel(m);
Compile with:
cc myprogram.c $(pkg-config --cflags --libs mipster) -o myprogram
Contributions are welcome — from bug fixes and new cut generators to benchmark experiments and documentation. See the full Contributing Guide for step-by-step instructions.
Clone the repo, set a handful of environment variables (MIPSTER_PREFIX, MIPSTER_INSTANCES, …), and build the full solver stack with a single script.
One autotools monorepo. ./configster --opt --install configures, builds, and installs CoinUtils → Clp → Cgl → Cbc in the right order.
Use scripts/run_experiments.sh with MIPLIB 2017 instances. Compare results, generate PDF reports, and profile performance — all scripted.
WebKit-based clang-format, 2-space indent, no column limit. Run ./format-all-sources.sh before committing. C++ with no RTTI and minimal STL in hot paths.
AddressSanitizer and ThreadSanitizer builds available via ./configster --debug --sanitizer=asan. Every CI run tests the ASan binary against the benchmark suite.
If MIPster claims the wrong optimal or declares an instance infeasible when it isn't,
use mipster_diag to pinpoint the culprit.
It runs a focused debugCuts pass and — optionally — a 13-config feature sweep,
producing clean, actionable output in minutes.
Open an issue to discuss the change first, then submit a pull request against master. Please include a brief description of the motivation and any benchmark impact.