Skip to content

Commit

Permalink
docs: fix indenting in changelog
Browse files Browse the repository at this point in the history
  • Loading branch information
MilesCranmer committed Nov 15, 2024
1 parent 9c9b1b9 commit fbc4d5f
Showing 1 changed file with 28 additions and 30 deletions.
58 changes: 28 additions & 30 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,36 +11,35 @@ New URL: https://ai.damtp.cam.ac.uk/symbolicregression
Summary of major recent changes, described in more detail below:

1. Changed the core expression type from `Node{T} → Expression{T,Node{T},Metadata{...}}`
- This gives us new features, improves user hackability, and greatly improves ergonomics!
- This gives us new features, improves user hackability, and greatly improves ergonomics!
2. Created "_Template Expressions_", for fitting expressions under a user-specified functional form (`TemplateExpression <: AbstractExpression`)
- Template expressions are quite flexible: they are a meta-expression that wraps multiple other expressions, and combines them using a user-specified function.
- This enables **vector expressions** - in other words, you can learn multiple components of a vector, simultaneously, with a single expression! Or more generally, you can learn expressions onto any Julia struct.
- (Note that this still does not permit learning using non-scalar operators, though we are working on that!)
- Template expressions also make use of colored strings to represent each part in the printout, to improve readability.
- Template expressions are quite flexible: they are a meta-expression that wraps multiple other expressions, and combines them using a user-specified function.
- This enables **vector expressions** - in other words, you can learn multiple components of a vector, simultaneously, with a single expression! Or more generally, you can learn expressions onto any Julia struct.
- (Note that this still does not permit learning using non-scalar operators, though we are working on that!)
- Template expressions also make use of colored strings to represent each part in the printout, to improve readability.
3. Created "_Parametric Expressions_", for custom functional forms with per-class parameters: (`ParametricExpression <: AbstractExpression`)
- This lets you fit expressions that act as _models of multiple systems_, with per-system parameters!
- This lets you fit expressions that act as _models of multiple systems_, with per-system parameters!
4. Introduced a variety of new abstractions for user extensibility (**and to support new research on symbolic regression!**)
- `AbstractExpression`, for increased flexibility in custom expression types.
- `mutate!` and `AbstractMutationWeights`, for user-defined mutation operators.
- `AbstractSearchState`, for holding custom metadata during searches.
- `AbstractOptions` and `AbstractRuntimeOptions`, for customizing pretty much everything else in the library via multiple dispatch. Please make an issue/PR if you would like any particular internal functions be declared `public` to enable stability across versions for your tool.
- Many of these were motivated to modularize the implementation of [LaSR](https://github.com/trishullab/LibraryAugmentedSymbolicRegression.jl), an LLM-guided version of SymbolicRegression.jl, so it can sit as a modular layer on top of SymbolicRegression.jl.
- `AbstractExpression`, for increased flexibility in custom expression types.
- `mutate!` and `AbstractMutationWeights`, for user-defined mutation operators.
- `AbstractSearchState`, for holding custom metadata during searches.
- `AbstractOptions` and `AbstractRuntimeOptions`, for customizing pretty much everything else in the library via multiple dispatch. Please make an issue/PR if you would like any particular internal functions be declared `public` to enable stability across versions for your tool.
- Many of these were motivated to modularize the implementation of [LaSR](https://github.com/trishullab/LibraryAugmentedSymbolicRegression.jl), an LLM-guided version of SymbolicRegression.jl, so it can sit as a modular layer on top of SymbolicRegression.jl.
5. Added TensorBoardLogger.jl and other logging integrations via `SRLogger`
6. Support for Zygote.jl and Enzyme.jl within the constant optimizer, specified using the `autodiff_backend` option
7. Other changes:
- Fundamental improvements to the underlying evolutionary algorithm
- New mutation operators introduced, `swap_operands` and `rotate_tree` – both of which seem to help kick the evolution out of local optima.
- New hyperparameter defaults created, based on a Pareto front volume calculation, rather than simply accuracy of the best expression.
- Changed output file handling
- Major refactoring of the codebase to improve readability and modularity
- Identified and fixed a major internal bug involving unexpected aliasing produced by the crossover operator
- Segmentation faults caused by this are a likely culprit for some crashes reported during multi-day multi-node searches.
- Introduced a new test for aliasing throughout the entire search state to prevent this from happening again.
- Improved progress bar and StyledStrings integration.
- Julia 1.10 is now the minimum supported Julia version.
- Other small features
- Also see the "Update Guide" below for more details on upgrading.

- Fundamental improvements to the underlying evolutionary algorithm
- New mutation operators introduced, `swap_operands` and `rotate_tree` – both of which seem to help kick the evolution out of local optima.
- New hyperparameter defaults created, based on a Pareto front volume calculation, rather than simply accuracy of the best expression.
- Changed output file handling
- Major refactoring of the codebase to improve readability and modularity
- Identified and fixed a major internal bug involving unexpected aliasing produced by the crossover operator
- Segmentation faults caused by this are a likely culprit for some crashes reported during multi-day multi-node searches.
- Introduced a new test for aliasing throughout the entire search state to prevent this from happening again.
- Improved progress bar and StyledStrings integration.
- Julia 1.10 is now the minimum supported Julia version.
- Other small features
- Also see the "Update Guide" below for more details on upgrading.

Note that some of these features were recently introduced in patch releases since they were backwards compatible. I am noting them here for visibility.

Expand Down Expand Up @@ -300,7 +299,6 @@ best_expr = r.equations[r.best_idx]

</details>


</details>

### 4. Introduced a variety of new abstractions for user extensibility
Expand Down Expand Up @@ -359,7 +357,7 @@ end
Base.propertynames(options::MyOptions) = (NEW_OPTIONS_KEYS..., fieldnames(SymbolicRegression.Options)...)
```

These new abstractions provide users with greater flexibility in defining the structure and behavior of expressions, nodes, and the search process itself. These are also of course used as the basis for alternate behavior such as `ParametricExpression` and `TemplateExpression`.
These new abstractions provide users with greater flexibility in defining the structure and behavior of expressions, nodes, and the search process itself. These are also of course used as the basis for alternate behavior such as `ParametricExpression` and `TemplateExpression`.

</details>

Expand Down Expand Up @@ -441,12 +439,12 @@ The output directory can be customized via the `output_directory` option (defaul
- Default `niterations` increased from 10 to 50, as many users seem to be unaware that this is small (and meant for testing), even in publications. I think this 50 is still low, but it should be a more accurate default for those who don't tune.
- `MLJ.fit!(mach)` now records the number of iterations used, and, should `mach.model.niterations` be changed after the fit, the number of iterations passed to `equation_search` will be reduced accordingly.
- Fundamental improvements to the underlying evolutionary algorithm
- New mutation operators introduced, `swap_operands` and `rotate_tree` – both of which seem to help kick the evolution out of local optima.
- New hyperparameter defaults created, based on a Pareto front volume calculation, rather than simply accuracy of the best expression.
- New mutation operators introduced, `swap_operands` and `rotate_tree` – both of which seem to help kick the evolution out of local optima.
- New hyperparameter defaults created, based on a Pareto front volume calculation, rather than simply accuracy of the best expression.
- Major refactoring of the codebase to improve readability and modularity
- Identified and fixed a major internal bug involving unexpected aliasing produced by the crossover operator
- Segmentation faults caused by this are a likely culprit for some crashes reported during multi-day multi-node searches.
- Introduced a new test for aliasing throughout the entire search state to prevent this from happening again.
- Segmentation faults caused by this are a likely culprit for some crashes reported during multi-day multi-node searches.
- Introduced a new test for aliasing throughout the entire search state to prevent this from happening again.
- Improved progress bar and StyledStrings integration.
- Julia 1.10 is now the minimum supported Julia version.
- Also see the "Update Guide" below for more details on upgrading.
Expand Down

2 comments on commit fbc4d5f

@MilesCranmer
Copy link
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@JuliaRegistrator
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Registration pull request created: JuliaRegistries/General/119539

Tip: Release Notes

Did you know you can add release notes too? Just add markdown formatted text underneath the comment after the text
"Release notes:" and it will be added to the registry PR, and if TagBot is installed it will also be added to the
release that TagBot creates. i.e.

@JuliaRegistrator register

Release notes:

## Breaking changes

- blah

To add them here just re-invoke and the PR will be updated.

Tagging

After the above pull request is merged, it is recommended that a tag is created on this repository for the registered package version.

This will be done automatically if the Julia TagBot GitHub Action is installed, or can be done manually through the github interface, or via:

git tag -a v1.0.0 -m "<description of version>" fbc4d5f6392681e9d71157bee026ed4ecea98d7e
git push origin v1.0.0

Please sign in to comment.