Releases: StevenBtw/solvOR
Release 0.6.1
Release 0.6.0
[0.6.0] - 2026-02-01
Rust acceleration! Optional Rust backend for graph algorithms with 3-60x speedup, ported from Grafeo.
Added
-
Rust Backend: Optional high-performance Rust implementations via PyO3. Algorithms automatically use Rust when available, with seamless Python fallback. Use
backend="rust"orbackend="python"to force a specific implementation. -
Algorithms with Rust backends:
floyd_warshall- All-pairs shortest paths (45-60x speedup)bellman_ford- Negative weight shortest paths (10-20x speedup)dijkstra_edges- Single-source shortest paths (5-10x speedup)bfs_edges,dfs_edges- Graph traversal (3-5x speedup)pagerank_edges- Node importance ranking (10-15x speedup)strongly_connected_components_edges,topological_sort_edges- Dependency analysis (5-10x speedup)kruskal- Minimum spanning tree (5-10x speedup)
-
Two API styles for graph algorithms:
- Callback-based (
dijkstra,bfs, etc.) - Flexible, works with any node type, pure Python - Edge-list (
dijkstra_edges,bfs_edges, etc.) - Integer nodes 0..n-1, Rust-accelerated
- Callback-based (
-
Performance documentation: New Performance page with benchmarks, backend usage guide, and API comparison.
-
Backend Infrastructure:
solvor/rust/- Backend detection, routing, and adaptersrust/- Rust crate with PyO3 bindings- Multi-platform wheel builds (Linux, macOS, Windows) via GitHub Actions
-
Developer Tooling:
- Added prek for fast pre-commit hooks (Rust-based, uv-compatible)
Changed
- Build System: Switched from hatchling to maturin for mixed Python/Rust builds.
- CI: New
publish.ymlworkflow builds wheels for all platforms. - Code Organization: Moved Rust backend utilities to
solvor/rust/module.
Full Changelog: v0.5.5...v0.6.0
Release 0.5.5
[0.5.5] - 2026-01-31
Added
- Branch-and-Price: Added
solve_bp()for optimal integer solutions via branch-and-price. Combines column generation with branch-and-bound to find provably optimal integer solutions. Same interface assolve_cg()with additional B&B parameters (max_nodes,gap_tol).
Full Changelog: v0.5.4...v0.5.5
Version 0.5.4
[0.5.4] - 2026-01-24
Added
-
Column Generation: Added
solve_cg()for problems with exponentially many variables. Implements Dantzig-Wolfe decomposition with LP master problem and customizable pricing. Built-in cutting stock mode with knapsack pricing, or provide your own pricing function for bin packing, vehicle routing, crew scheduling, graph coloring, etc. -
OR-Tools Examples:* 24 converted examples showing solvOR as drop-in replacement for Google OR-Tools Organized by category:
- Linear Solver (13): LP, MIP, assignment, bin packing, knapsack problems using
solve_lp,solve_milp,solve_hungarian,solve_bin_pack - CP-SAT (7): Constraint satisfaction using
Modelandsolve_job_shop- simple CSP, N-Queens, nurse scheduling, job shop, solution enumeration - Graph (2): Max flow and linear sum assignment using
max_flow,solve_hungarian - Algorithms (2): Knapsack problems using
solve_knapsack
- Linear Solver (13): LP, MIP, assignment, bin packing, knapsack problems using
*All converted examples where generated using AI.
- OR-Tools Documentation: New index page at
docs/examples/ortools.mdwith benchmark comparisons. solvOR often faster for small problems (pure Python startup vs C++ overhead), competitive on medium problems, OR-Tools wins on large problems as expected.
Changed
- MILP: Greedy rounding + LNS heuristics for binary MIPs. Enable with
lns_iterationsparameter.
Fixed
- Bugfix for
simplex.py.
Full Changelog: v0.5.3...v0.5.4
Version 0.5.3
[0.5.3] - 2025-12-29
Some small QoL improvements and ported all the graph algoeithmes from another project (AutoMate) which now relies on solvOR.
Added
- Graph analysis:
topological_sort,strongly_connected_components,condensefor dependency ordering and cycle detection.pagerankfor node importance.louvainfor community detection.articulation_points,bridgesfor finding critical connections.kcore_decomposition,kcorefor core/periphery analysis. - Version: Added
__version__to package.
Changed
- CI: Parallelized lint/typecheck jobs, added publish version tag verification.
- Exports: Added
Progress,ProgressCallbackto public API. - Refactor: Extracted
reconstruct_pathto utils (shared by dijkstra, bfs, a_star).
Fixed
- Flow solvers: Now track iterations correctly.
- Exports: Fixed missing
__all__in utils/validate.py.
Full Changelog: v0.5.2...v0.5.3
Version 0.5.2
[0.5.2] - 2025-12-28
Who let de docs out!
solvOR went through some nice changes. CP got amputated, LP got more company, docs got a full checkup, CI got faster.
Added
- CI docs test:
test_docs.pyrunsmkdocs build --strictto catch missing type hints and broken links before they reach main. - Interior point: Added
solve_lp_interior()for linear programming. Primal-dual method with Mehrotra predictor-corrector. Alternative to simplex method.
Fixed
- README: Fixed incorrect
solve_vrptwexample (wrong parameter names, missing customer IDs).
Changed
- CP refactor: Extracted SAT encoding to
cp_encoder.py(cp.py went from 861 to 428 lines, much easier to read now).Model.solve()defaults tosolver="auto"which picks DFS for simple constraints and SAT for globals (circuit, no_overlap, cumulative, sum_*). Force a specific solver withsolver="dfs"orsolver="sat". Also,IntVarnow supports multiplication (x * 3,3 * x) for expressions liketimeslot * n_rooms + room. - Module docstrings: Standardized all 18 solvor docstrings with consistent format: "How it works" section, "Use this for" bullets, "Parameters" section, r"""string. Same style, so easier when scanning the different solvors.
- solvOR.ai documentation: Added "How It Works" sections explaining the math behind 16 algorithms (simplex, interior point, dijkstra, bellman-ford, floyd-warshall, A*, anneal, tabu, genetic, PSO, DE, BFGS, knapsack, bin-packing, SAT, DLX). Also added references, tips, and full signature sections.
- Tests: Removed tests with weak assertions, improved edge case coverage. No bugs found (yet).
- CI/pre-commit: Turned on uv cache, removed redundant type checks across Python versions, added no-commit-to-branch for main.
- README: Added docs badge.
Full Changelog: v0.5.1...v0.5.2
Version 0.5.1
[0.5.1] - 2025-12-27
Fixed
- Documentation consistency pass: Reviewed all 29 solvors and 7 extended examples against MkDocs pages. Fixed parameter name mismatches, incorrect signatures, and outdated solution formats across 15+ documentation files.
What's Changed
- minor fixes by @StevenBtw in #44
- Multiple docs improvements and fixes by @StevenBtw in #45
- Updated changelog by @StevenBtw in #46
Full Changelog: v0.5.0...v0.5.1
Version 0.5.0
[0.5.0] - 2025-12-26
solvOR is now in beta!
Documentation finally has a proper home. Moved everything from the wiki to MkDocs, deployed at solver.ai. The wiki now just points there.
Added
-
Documentation site at solver.ai. MkDocs with Material theme, dark mode by default (as it should be). Getting started, algorithm reference (40+ pages), cookbook with 18 worked examples, API docs, troubleshooting.
-
GitHub Actions workflow for docs, auto-deploys to GitHub Pages on push to main.
Changed
-
BREAKING:
evolve()renamedmax_gentomax_iterfor consistency. Update your code:evolve(..., max_gen=100)→evolve(..., max_iter=100) -
Resultis now generic (Result[T]), so type checkers actually know what.solutioncontains. Less red underscores in the IDE. -
Test coverage now statistically significant at 95%, added tests for adam learning rate schedules, genetic adaptive mutation, validation utilities.
-
Internal cleanup:
Evaluatorclass andreport_progress()insolvor/utils/helpers.py, deduplicated boilerplate across 12 solver files. No API changes for this one. -
Wiki retired, all content now lives at solver.ai. The wiki just points there.
What's Changed
- Version 0.5.0 by @StevenBtw in #42
- Codecov fix in ci by @StevenBtw in #43
Full Changelog: v0.4.8...v0.5.0
Version 0.4.8
[0.4.8] - 2025-12-25
Examples! Finally they all work (and can be used as extra tests! optional for now). Also some last changes to solvors that didn't play nice with some of the wikipedia examples. 0.5.0 will be next, which will be considered a "beta" where 0.4.x releases are "alpha". Development cycle will slow down after that, extra maintainers are welcome!
Added
-
We need examples, lots of examples:
quick_examples/minimal working code for every solver, copy-paste readyclassic/TSP, knapsack, bin packing, job shop, VRP benchmarkspuzzles/sudoku, n-queens, zebra puzzle, pentomino, magic squarelinear_programming/diet problem, portfolio optimization, blendingmachine_learning/gradient descent for regression (yes it works)real_world/nurse scheduling that actually respects constraints
-
py.typedmarker for type checker support
Changed
-
WIKILEAKS: Wiki completely up to date, using quick examples from the repo now for consistency. Lots of copy-pasting.
-
Full tests overhaul: Tests reorganized into
tests/solvers/andtests/examples/, grouped example tests into folder categories. More copy-pasting. -
CI simplified the per-solver conditional testing was clever but unmaintainable, just run everything now, tweaked some of the slower tests.
-
Input validation added to graph algorithms and MILP: bellman_ford, floyd_warshall, mst and milp now tell you what's wrong instead of crashing.
-
Extra parameters: I don't want to add too many parameters and complexity, but added warm_start to milp and a solution limit. Added
allow_forest=Truefor kruskals, which returns minimum spanning forest instead of giving up. -
README & CONTRIBUTING: Up-to-date again, were lagging behind with new solvers and parameters, CI changes and more. Should be consistent with the repo's content again.
Full Changelog: v0.4.7...v0.4.8
Version 0.4.7
[0.4.7] - 2025-12-25
Added a changelog (this file), a whole lot of solvors and some much needed optimizations, working on some more examples, but they need a bit more work still.
This could have been a 0.5.0 release, if it wasn't for the examples, readme and wiki. Will probably add the examples in the next release, then 0.5.0 with extra tests and more polish (readme/wiki/etc.).
Added
Santa's been busy, a lot more solvors, focussing on more real world problems, good for some examples I want to add later.
-
job_shopjob shop scheduling -
vrpvehicle routing problem -
lnslarge neighborhood search -
differential_evolutionevolution strategy for continuous optimization -
particle_swarmswarm intelligence (just peer pressure for algorithms), also includes "velocity clamping" so particles don't yeet into infinity, which the textbook examples apparently do -
knapsackthe classic packing problem -
bin_packfit items into bins -
CHANGELOG.mdto keep track of what was done when for future entertainment/troubleshooting
Changed
-
bayesian_opta lot of upgrades, including:- Acquisition optimization now tries multiple starting points (was single-shot before)
- Progress callbacks for monitoring long runs
- Cholesky decomposition instead of Gaussian elimination, more stable numerically
- Fixed status reporting when hitting iteration limit
-
adamadded learning rate schedules:- Supports constant, step, cosine, and warmup decay
-
solve_exact_coveradded secondary columns:- Optional constraints, covered at most once, but not required
-
evolvenow with adaptive mutation:- Mutation rate responds to progress and increases when stuck, decreases when improving
Full Changelog: v0.4.6...v0.4.7