__ ___________ __ / |/ / _/ __ \_____/ /____ _____ / \ / /|_/ // // /_/ / ___/ __/ _ \/ ___/ ◉ ◉ / / / // // ____(__ ) /_/ __/ / /| |\ /_/ /_/___/_/ /____/\__/\___/_/ ◉ ◉ ◉ ◉ {≈≈≈} globally optimal · locally hip
v0.2.1 · Now on PyPI · 5 platforms · EPL-2.0

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 GitHub
🎉
NEW IN 0.2.0
Easier installs, smarter solves, hardened correctness
  • Python wheels on PyPIpip install mipster across Linux, macOS, Windows; runtime CPU dispatch (AVX2 / Haswell / NEON)
  • Native installers — Windows .exe (NSIS), macOS .pkg, Linux .deb/.rpm/Arch packages
  • LP auto-tuning (-lpMethod=auto) — random-forest based, 1.36× geomean LP speedup
  • FeasibilityJump heuristic at root and in the tree, plus Racing LP portfolio
  • Soundness fixes in CglFlowCover, CglProbing, CglKnapsackCover, CglTwoMIR, postprocess
  • New diagnostic tools: mipster_diag (auto-triage of wrong-optimal) and mipster_validate_sol
Read the full changelog →

⬇ Download

🐍
Python — pip install
Self-contained wheels for Linux x86_64/aarch64, macOS x86_64/arm64, Windows x86_64
pip install mipster
Runtime CPU dispatch (AVX2 / Haswell / NEON) · No system dependencies · View on PyPI →
🏷
All Releases
Previous versions, release notes, checksums

✨ Features

🚀 Strong Default Performance

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.

🏎 Hardware-Optimised Builds

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.

⚡ Racing LP Portfolio

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.

🤖 Native ML Support

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.

🔌 Clean C API

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.

⚖️ EPL-2.0 License

Same open-source license as upstream COIN-OR CBC. Use freely in academic and commercial settings. No GPL dependencies.

🚀 Quick Start

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

🤝 Contributing

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.

🔧 Set Up Your Environment

Clone the repo, set a handful of environment variables (MIPSTER_PREFIX, MIPSTER_INSTANCES, …), and build the full solver stack with a single script.

📐 Build & Install

One autotools monorepo. ./configster --opt --install configures, builds, and installs CoinUtils → Clp → Cgl → Cbc in the right order.

🧪 Run Benchmark Experiments

Use scripts/run_experiments.sh with MIPLIB 2017 instances. Compare results, generate PDF reports, and profile performance — all scripted.

✏️ Code Style

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.

🐛 Debug Builds

AddressSanitizer and ThreadSanitizer builds available via ./configster --debug --sanitizer=asan. Every CI run tests the ASan binary against the benchmark suite.

🐛 Debug Bugs

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.

📬 Submit a PR

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.

Read the Contributing Guide →