Releases: TeamXcelerator/xcelerator-solver
Release list
Xcelerator Solver v0.1.0 - deterministic symbolic regression, now on crates.io
Xcelerator Solver is a symbolic regression engine written in Rust. Given a CSV of data and an explicit, user-declared pool of operators and constants, it searches for the simplest formula that fits the data within a chosen error threshold.
Why deterministic matters. Most symbolic regression tools (e.g. genetic-programming-based approaches) are stochastic: run twice, get two different answers, and there is no guarantee the simplest fitting formula was even considered. Xcelerator Solver uses Bottom-Up Enumeration (BUE): it builds every expression of complexity 1, then every expression of complexity 2 built from those, and so on. Because it enumerates in order of increasing complexity, the first formula found at any given error threshold is guaranteed to be the simplest one that fits - every run on the same input produces the same output.
Why the pool is explicit. There is no implicit constant search or open-ended term generation. You declare exactly which variables, constants (including Pi, e, gamma, Catalan, or bare numeric literals), and operators (arithmetic, trig, erf, tgamma, lgamma, and more) are in play. This keeps results interpretable - there is never a mystery constant like 3.14159... hiding in an output formula; if Pi shows up, it is because you put Pi in the pool.
Arbitrary precision. With --features hp, every expression is evaluated using MPFR arbitrary-precision arithmetic via the rug crate, at a user-specified digit count. Named constants are computed directly at target precision rather than promoted from f64, so precision-sensitive fits (e.g. searching for a formula that needs to hold to 50+ significant digits) do not silently degrade.
A concrete example. Given six points for y = 2*x + 1:
Rank Expression Train MAPE % Val MAPE % Complexity
1 1 + 2 * x 0.000000 0.000000 5
2 1 + x + x 0.000000 0.000000 5
Both are exact - BUE surfaces every equivalent form at the minimal complexity, not just one.
What's in v0.1.0 (initial public release).
- Bottom-Up Enumeration search engine (Generator -> Evaluator -> Aggregator pipeline)
- MAPE / MAE / RMSE error metrics
- Optional arbitrary-precision evaluation via MPFR (
rug) - Pinned sub-expressions: require every candidate to contain a specific structural sub-term (e.g.
4*Pi/ln(N)), without over-constraining the rest of the search - Composite terms: pre-built sub-expressions usable as single atoms
- Full unary/binary operator set including trig, hyperbolic, inverse trig, and special functions (
erf,tgamma,lgamma) - Rayon-based parallel evaluation with a configurable thread cap
- 5 worked examples, 173 tests
cargo add xcelerator-solver