Skip to content

Releases: StevenBtw/solvOR

Release 0.6.1

01 Feb 13:35
dc75dd9

Choose a tag to compare

What's Changed

Full Changelog: v0.6.0...v0.6.1

Release 0.6.0

01 Feb 13:23
a0309a9

Choose a tag to compare

[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" or backend="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
  • Performance documentation: New Performance page with benchmarks, backend usage guide, and API comparison.

  • Backend Infrastructure:

    • solvor/rust/ - Backend detection, routing, and adapters
    • rust/ - 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.yml workflow 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

31 Jan 21:26
56df7a1

Choose a tag to compare

[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 as solve_cg() with additional B&B parameters (max_nodes, gap_tol).

Full Changelog: v0.5.4...v0.5.5

Version 0.5.4

24 Jan 19:59
3c4a5e0

Choose a tag to compare

[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 Model and solve_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

*All converted examples where generated using AI.

  • OR-Tools Documentation: New index page at docs/examples/ortools.md with 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_iterations parameter.

Fixed

  • Bugfix for simplex.py.

Full Changelog: v0.5.3...v0.5.4

Version 0.5.3

29 Dec 21:57
cd3634a

Choose a tag to compare

[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, condense for dependency ordering and cycle detection. pagerank for node importance. louvain for community detection. articulation_points, bridges for finding critical connections. kcore_decomposition, kcore for core/periphery analysis.
  • Version: Added __version__ to package.

Changed

  • CI: Parallelized lint/typecheck jobs, added publish version tag verification.
  • Exports: Added Progress, ProgressCallback to public API.
  • Refactor: Extracted reconstruct_path to 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

28 Dec 15:18

Choose a tag to compare

[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.py runs mkdocs build --strict to 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_vrptw example (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 to solver="auto" which picks DFS for simple constraints and SAT for globals (circuit, no_overlap, cumulative, sum_*). Force a specific solver with solver="dfs" or solver="sat". Also, IntVar now supports multiplication (x * 3, 3 * x) for expressions like timeslot * 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

27 Dec 04:40

Choose a tag to compare

[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

Full Changelog: v0.5.0...v0.5.1

Version 0.5.0

26 Dec 17:11

Choose a tag to compare

[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() renamed max_gen to max_iter for consistency. Update your code: evolve(..., max_gen=100)evolve(..., max_iter=100)

  • Result is now generic (Result[T]), so type checkers actually know what .solution contains. 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: Evaluator class and report_progress() in solvor/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

Full Changelog: v0.4.8...v0.5.0

Version 0.4.8

26 Dec 14:01

Choose a tag to compare

[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 ready
    • classic/ TSP, knapsack, bin packing, job shop, VRP benchmarks
    • puzzles/ sudoku, n-queens, zebra puzzle, pentomino, magic square
    • linear_programming/ diet problem, portfolio optimization, blending
    • machine_learning/ gradient descent for regression (yes it works)
    • real_world/ nurse scheduling that actually respects constraints
  • py.typed marker 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/ and tests/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=True for 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

25 Dec 22:27

Choose a tag to compare

[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_shop job shop scheduling

  • vrp vehicle routing problem

  • lns large neighborhood search

  • differential_evolution evolution strategy for continuous optimization

  • particle_swarm swarm intelligence (just peer pressure for algorithms), also includes "velocity clamping" so particles don't yeet into infinity, which the textbook examples apparently do

  • knapsack the classic packing problem

  • bin_pack fit items into bins

  • CHANGELOG.md to keep track of what was done when for future entertainment/troubleshooting

Changed

  • bayesian_opt a 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
  • adam added learning rate schedules:

    • Supports constant, step, cosine, and warmup decay
  • solve_exact_cover added secondary columns:

    • Optional constraints, covered at most once, but not required
  • evolve now with adaptive mutation:

    • Mutation rate responds to progress and increases when stuck, decreases when improving

Full Changelog: v0.4.6...v0.4.7