Summer vacations are over, the [big announcements](https://timefold.ai/press/timefold-secures-6-million-to-expand-planning-ai-platform) are made, and now we're back with another release of Timefold Solver!
Featured Update: Ruin and Recreate Move
Is your solver getting stuck in local optima, no longer improving the solution? Then you may benefit from the ["Ruin and Recreate" move](https://docs.timefold.ai/timefold-solver/latest/optimization-algorithms/move-selector-reference#ruinRecreateMoveSelector), which destroys part of the solution and rebuilds it all over again. Our experiments show that this can often help the solver escape local optima, so why don't you give it a try? And when you do, we'd love to hear what your own experience with this new move was - [come talk to us](https://github.com/TimefoldAI/timefold-solver/discussions)!
Besides that, we are bringing the usual bunch of bug fixes and improvements. As always, all of these are available for all of our Java, Python and Kotlin users.
Changelog
🚀 Features
- 85e6812 introduce a Ruin And Recreate move (1010), closes 1010
- ff6ae02 Add missing `of` methods to scores in Python (1055), closes 1055
- 6c7416c Add chained variable support to Python
- df74d42 improve JVM exceptions (1037), closes 1037
🐛 Fixes
- f09a244 Prevent excessive logging of constraint weights
- 037450f Allow relative imports in translated functions (1081), closes 967 1081
- 5f44f32 Show Python traceback when constructing constraints fail (1082), closes 969 1082
- 7149abe Initialize nested selectors correctly
- 96c3da0 Allow PlanningId to be defined on interfaces (1060), closes 1060
- 274dadd Use inserted range when retracting range in `toConnectedRanges` (1056), closes 953 1056
📝 Documentation
- 3b01463 Fix InverseRelationShadowVariable code snippet (1066), closes 1066
- 716e45e Add Python examples (1047), closes 1047
Contributors
We'd like to thank the following people for their contributions:
- Christopher Chianelli
- Frederico Gonçalves ([zepfred](https://github.com/zepfred))
- Geoffrey De Smet
- Lukáš Petrovický
- Rutger Lubbers
- Tobias Wasner ([wasnertobias](https://github.com/wasnertobias))
_Timefold Solver Community Edition_ is an open source project, and you are more than welcome to contribute as well!
For more, see [Contributing](https://github.com/TimefoldAI/timefold-solver/blob/main/CONTRIBUTING.adoc).
Should your business need to scale to truly massive data sets or require enterprise-grade support,
check out [_Timefold Solver Enterprise Edition_](https://timefold.ai/pricing).
How to use Timefold Solver
To see Timefold Solver in action, check out [the quickstarts](https://github.com/TimefoldAI/timefold-quickstarts).
[//]: (Ideally we'd show the pom.xml snippet, but a JReleaser bug would remove all whitespace from it.)
[//]: (See https://github.com/jreleaser/jreleaser/issues/1142)
With Maven or Gradle, add the `ai.timefold.solver : timefold-solver-core : 1.14.0` dependency in your `pom.xml` to get started.
You can also import the Timefold Solver Bom (`ai.timefold.solver : timefold-solver-bom : 1.14.0`)
to avoid duplicating version numbers when adding other Timefold Solver dependencies later on.
Additional notes
The changelog and the list of contributors above are automatically generated.
It excludes contributions to certain areas of the repository, such as CI and build automation.
This is done for the sake of brevity and to make the user-facing changes stand out more.