Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3,119 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

MIPster — Mixed-Integer Programming Solver

    __  ___________       __                   ◉
   /  |/  /  _/ __ \_____/ /____  _____       / \
  / /|_/ // // /_/ / ___/ __/ _ \/ ___/      ◉   ◉
 / /  / // // ____(__  ) /_/  __/ /         /|   |\
/_/  /_/___/_/   /____/\__/\___/_/         ◉ ◉   ◉ ◉
    {≈≈≈}  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


Download

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

Goals

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

Non-Goals

  • Supporting multiple LP solver backends (only CLP, already embedded).
  • Supporting multiple sparse linear system libraries for the barrier solver (only AMD is kept).

What Changed from Upstream CBC

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

Code removed

  • 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 clp binary (~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 0 dead-code blocks — hundreds of commented-out code blocks removed throughout.
  • MSVC-specific workarounds — Windows builds use MinGW/GCC; MSVC-only code removed.
  • CoinUtils, Clp, Cgl as separate projects — all merged into a single unified build.

Building

Requirements: a C++17 compiler (GCC or Clang), make, and optionally AMD (SuiteSparse) for the barrier LP method.

./configure
make -j$(nproc)
sudo make install

This produces the mipster binary and the libmipster library.

Optional: AMD (barrier solver Cholesky)

If SuiteSparse/AMD is installed:

./configure --with-amd

Usage

# 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 --help

MIPster reads .mps, .lp, .mps.gz, and .lp.gz files directly.


C API

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 myapp

Contributing

Contributions are welcome! See CONTRIBUTING.md for a full guide covering environment setup, building, running benchmark experiments, and code style.

Quick links:

License

MIPster is licensed under the Eclipse Public License 2.0 (EPL-2.0), the same license as COIN-OR CBC.


Acknowledgements

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.

About

MIPster — a lightweight, streamlined Mixed-Integer Programming solver forked from COIN-OR CBC

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages