Overview
What unifier does, where it stops, and how this documentation is organised.
unifier is a Rust crate for constraint satisfaction problems (CSP) and constraint optimization problems (COP): integer variables with domains, constraints between them and, for optimization, weighted objectives. Typical instances are scheduling, timetabling and resource allocation.
These problems are generally NP-hard, so there is no single best algorithm. unifier ships several interchangeable solver strategies and is designed as an anytime solver: find a valid solution fast, improve it, and stop whenever a time limit, node budget or cancellation says so.
What it covers
- A constraint graph of variables, domains, constraints and objectives, validated before any solver sees it.
- Sixteen built-in constraints in 0.3.2, including the global constraints
AllDifferent,NoOverlapandCumulativewith dedicated propagation. - Hard/soft scoring: hard constraints decide feasibility, weighted soft terms on three lexicographic levels rank feasible solutions.
- Five solvers: Backtracking, Branch & Bound, Local Search, Large Neighbourhood Search and a parallel portfolio.
- Scheduling primitives (
Interval,Activity,Resource,Group) that compile into constraints. - An incremental feasibility check that evaluates only the constraints touched by a change.
Where it stops
The crate is early (0.3.x). Not covered yet: general unsat cores, serde-based model or
solution serialization, a command-line interface, and independent verification against
production-scale scheduling scenarios. Evaluate it accordingly before relying on it for
production planning.
How the docs are organised
- Getting started: add the crate and solve a first model.
- Guides: modelling, solvers and how unifier relates to pathwise.
- Reference: an overview of the public modules. Item-level documentation lives on docs.rs.