SymbolicRegression.jl

Distributed High-Performance Symbolic Regression in Julia

APACHE-2.0 License

Stars
523
Committers
17

Bot releases are visible (Hide)

SymbolicRegression.jl - v0.24.4 Latest Release

Published by github-actions[bot] 6 months ago

SymbolicRegression v0.24.4

Diff since v0.24.3

Merged pull requests:

  • feat: use ? for wildcard units instead of (#307) (@MilesCranmer)
  • refactor: fix some more type instabilities (#308) (@MilesCranmer)
  • refactor: remove unused Tricks dependency (#309) (@MilesCranmer)
  • Add option to force dimensionless constants (#310) (@MilesCranmer)
SymbolicRegression.jl - v0.24.3

Published by github-actions[bot] 6 months ago

SymbolicRegression v0.24.3

Diff since v0.24.2

Merged pull requests:

  • 40% speedup (for default settings) via more parallelism inside workers (#304) (@MilesCranmer)

Closed issues:

  • Silence warnings for Optim.jl (#255)
SymbolicRegression.jl - v0.24.2

Published by github-actions[bot] 6 months ago

SymbolicRegression v0.24.2

Diff since v0.24.1

Merged pull requests:

  • Bump julia-actions/setup-julia from 1 to 2 (#300) (@dependabot[bot])
  • [pre-commit.ci] pre-commit autoupdate (#301) (@pre-commit-ci[bot])
  • A small update on examples.md for 1-based indexing (#302) (@liuyxpp)
  • Fixes for Julia 1.11 (#303) (@MilesCranmer)

Closed issues:

  • API Overhaul (#187)
  • [Feature]: Training on high dimensions X (#299)
SymbolicRegression.jl - v0.24.1

Published by MilesCranmer 7 months ago

What's Changed

Full Changelog: https://github.com/MilesCranmer/SymbolicRegression.jl/compare/v0.24.0...v0.24.1

SymbolicRegression.jl - v0.24.0

Published by MilesCranmer 7 months ago

What's Changed

  • Experimental support for program synthesis / graph-like expressions instead of trees (https://github.com/MilesCranmer/SymbolicRegression.jl/pull/271)
    • BREAKING: many types now have a third type parameter, declaring the type of node. For example, PopMember{T,L} is now PopMember{T,L,N} for N the type of expression.
    • Can now specify a node_type in creation of Options. This node_type <: AbstractExpressionNode can be a GraphNode which will result in expressions that care share nodes – and therefore have a lower complexity.
    • Two new mutations: form_connection and break_connection – which control the merging and breaking of shared nodes in expressions. These are experimental.
  • BREAKING: The Dataset struct has had many of its field declared immutable (for memory safety). If you had relied on the mutability of the struct to set parameters after initializing it, you will need to modify your code.
  • BREAKING: LoopVectorization.jl moved to a package extension. Need to install it separately (https://github.com/MilesCranmer/SymbolicRegression.jl/pull/287).
  • DEPRECATED: Now prefer to use new keyword-based constructors for nodes:
Node{T}(feature=...)        # leaf referencing a particular feature column
Node{T}(val=...)            # constant value leaf
Node{T}(op=1, l=x1)         # operator unary node, using the 1st unary operator
Node{T}(op=1, l=x1, r=1.5)  # binary unary node, using the 1st binary operator

rather than the previous constructors Node(op, l, r) and Node(T; val=...) (though those will still work; just with a depwarn).

  • Bumper.jl support added. Passing bumper=true to Options() will result in using bump-allocation for evaluation which can get speeds equivalent to LoopVectorization and sometimes even better due to better management of allocations. (https://github.com/MilesCranmer/SymbolicRegression.jl/pull/287)
  • Upgraded Optim.jl to 1.9.
  • Upgraded DynamicQuantities to 0.13
  • Upgraded DynamicExpressions to 0.16
  • The main search loop has been greatly refactored for readability and improved type inference. It now looks like this (down from a monolithic ~1000 line function)
function _equation_search(
    datasets::Vector{D}, ropt::RuntimeOptions, options::Options, saved_state
) where {D<:Dataset}
    _validate_options(datasets, ropt, options)
    state = _create_workers(datasets, ropt, options)
    _initialize_search!(state, datasets, ropt, options, saved_state)
    _warmup_search!(state, datasets, ropt, options)
    _main_search_loop!(state, datasets, ropt, options)
    _tear_down!(state, ropt, options)
    return _format_output(state, ropt)
end

Full Changelog: https://github.com/MilesCranmer/SymbolicRegression.jl/compare/v0.23.3...v0.24.0

SymbolicRegression.jl - v0.23.3

Published by github-actions[bot] 8 months ago

SymbolicRegression v0.23.3

Diff since v0.23.2

Merged pull requests:

  • Bump peter-evans/create-or-update-comment from 3 to 4 (#283) (@dependabot[bot])
  • Bump peter-evans/find-comment from 2 to 3 (#284) (@dependabot[bot])
  • Bump peter-evans/create-pull-request from 5 to 6 (#286) (@dependabot[bot])
SymbolicRegression.jl - v0.23.2

Published by github-actions[bot] 8 months ago

SymbolicRegression v0.23.2

Diff since v0.23.1

Merged pull requests:

  • Formatting overhaul (#278) (@MilesCranmer)
  • Avoid julia-formatter on pre-commit.ci (#279) (@MilesCranmer)
  • Make it easier to select expression from Pareto front for evaluation (#289) (@MilesCranmer)

Closed issues:

  • Garbage collection too passive on worker processes (#237)
  • How can I set the maximum number of nests? (#285)
SymbolicRegression.jl - v0.23.1

Published by MilesCranmer 10 months ago

What's Changed

New Contributors

Full Changelog: https://github.com/MilesCranmer/SymbolicRegression.jl/compare/v0.23.0...v0.23.1

SymbolicRegression.jl - v0.23.0

Published by github-actions[bot] 10 months ago

SymbolicRegression v0.23.0

Diff since v0.22.5

Merged pull requests:

  • Automatically set heap size hint on workers (#270) (@MilesCranmer)

Closed issues:

  • How do I set up a basis function consisting of three different inputs x, y, z? (#268)
SymbolicRegression.jl - v0.22.5

Published by github-actions[bot] 10 months ago

SymbolicRegression v0.22.5

Diff since v0.22.4

Merged pull requests:

  • CompatHelper: bump compat for DynamicQuantities to 0.7, (keep existing compat) (#259) (@github-actions[bot])
  • Create cond operator (#260) (@MilesCranmer)
  • Add [compat] entry for Documenter (#261) (@MilesCranmer)
  • CompatHelper: bump compat for DynamicQuantities to 0.10 (#264) (@github-actions[bot])
SymbolicRegression.jl - v0.22.4

Published by github-actions[bot] about 1 year ago

SymbolicRegression v0.22.4

Diff since v0.22.3

Merged pull requests:

  • Hotfix for breaking change in Optim.jl (#256) (@MilesCranmer)
  • Fix worldage issues by avoiding static_hasmethod when not needed (#258) (@MilesCranmer)
SymbolicRegression.jl - v0.22.3

Published by MilesCranmer about 1 year ago

What's Changed

Full Changelog: https://github.com/MilesCranmer/SymbolicRegression.jl/compare/v0.22.2...v0.22.3

SymbolicRegression.jl - v0.22.2

Published by github-actions[bot] about 1 year ago

SymbolicRegression v0.22.2

Diff since v0.22.1

Merged pull requests:

  • Expand aqua test suite (#246) (@MilesCranmer)
  • Return more descriptive errors for poorly defined operators (#247) (@MilesCranmer)
SymbolicRegression.jl - v0.22.1

Published by github-actions[bot] about 1 year ago

SymbolicRegression v0.22.1

Diff since v0.22.0

SymbolicRegression.jl - v0.22.0

Published by MilesCranmer about 1 year ago

What's Changed

  • (Algorithm modification) Evaluate on fixed batch when building per-population hall of fame in https://github.com/MilesCranmer/SymbolicRegression.jl/pull/243
    • This only affects searches that use batching=true. It results in improved searches on large datasets, as the "winning expression" is not biased towards an expression that landed on a lucky batch.
    • Note that this only occurs within an iteration. Evaluation on the entire dataset still happens at the end of an iteration and those loss measurements are used for absolute comparison between expressions.
  • (Algorithm modification) Deprecates the fast_cycle feature in #243. Use of this parameter will have no effect.
    • Was removed to ease maintenance burden and because it doesn't have a use. This feature was created early on in development as a way to get parallelism within a population. It is no longer useful as you can parallelize across populations.
  • Add Aqua.jl to test suite in https://github.com/MilesCranmer/SymbolicRegression.jl/pull/245
  • CompatHelper: bump compat for DynamicExpressions to 0.12, (keep existing compat) in https://github.com/MilesCranmer/SymbolicRegression.jl/pull/242
    • Is able to avoids method invalidations when using operators to construct expressions manually by modifying a global constant mapping of operator => index, rather than @eval-ing new operators.
    • This only matters if you were using operators to build trees, like x1 + x2. All internal search code uses Node() explicitly to build expressions, so did not rely on method invalidation at any point.
  • Renames some parameters in https://github.com/MilesCranmer/SymbolicRegression.jl/pull/234
    • npop => population_size
    • npopulations => populations
    • This is just to match PySR's API. Also note that the deprecated parameters will still work, and there will not be a warning unless you are running with --depwarn=yes.
  • Ensure that predict uses units if trained with them in https://github.com/MilesCranmer/SymbolicRegression.jl/pull/244
    • If you train on a dataset that has physical units, this ensures that MLJ.predict will output predictions in the same units. Before this change, MLJ.predict would return numerical arrays with no units.

Full Changelog: https://github.com/MilesCranmer/SymbolicRegression.jl/compare/v0.21.5...v0.22.0

SymbolicRegression.jl - v0.21.5

Published by MilesCranmer about 1 year ago

SymbolicRegression.jl - v0.21.4

Published by github-actions[bot] about 1 year ago

SymbolicRegression v0.21.4

Diff since v0.21.3

Closed issues:

  • [Cleanup] Better implementation of batching (#88)

Merged pull requests:

  • CompatHelper: bump compat for LossFunctions to 0.11, (keep existing compat) (#238) (@github-actions[bot])
  • Enable compatibility with MLJTuning.jl (#239) (@MilesCranmer)
SymbolicRegression.jl - v0.21.3

Published by MilesCranmer about 1 year ago

What's Changed

Full Changelog: https://github.com/MilesCranmer/SymbolicRegression.jl/compare/v0.21.2...v0.21.3

SymbolicRegression.jl - v0.21.2

Published by MilesCranmer about 1 year ago

SymbolicRegression.jl - v0.21.1

Published by MilesCranmer about 1 year ago

What's Changed

Full Changelog: https://github.com/MilesCranmer/SymbolicRegression.jl/compare/v0.21.0...v0.21.1

Package Rankings
Top 9.62% on Juliahub.com
Badges
Extracted from project README
version Dev Discussions Paper CI Coverage Status
Related Projects