We've really been cooking this time! With so much goodness available in this release, an upgrade may just be worth the few seconds it will take.
- Coarse-grained moves in Neighborhoods: With the recent improvements to Neighborhoods, we have been able to introduce many advanced moves, such as pillar moves or sublist moves. The API continues to evolve towards feature parity with move selectors!
- Significant performance improvements for shadow variables: Heavy users of shadow variables, especially together with list variables and especially with our Enterprise Edition, are likely to experience an order of magnitude improvement in move speed of their solvers. Find out how to access these improvements.
- Environment mode now configurable per-phase: if you ever needed to run your local search with
FULL_ASSERTbut your Construction Heuristic was slowing you down, you can now enable the strong assertion mode for any phase individually - so your CH stays fast, and your assertions only run with LS. - Improved performance overall: we now have more efficient undo moves, and generally use less memory.
Changelog
🚀 Features
- 23b2725 neighborhoods: introduce coarse-grained generic moves (#2610)
- 7645b21 add environment mode per phase (#2595)
- dd3689b (service) store execution profile in metadata (#2631)
🐛 Fixes
- 0316e48 update all unassigned values when multiple were unassigned (#2689)
- 51c05a6 revapi check should include all reference types (#2670)
- 87ba4c0 define timefold-maven-plugin version in parent pom.xml
- 787a7d7 use the same tag keyset everywhere (#2650)
- bf594ee mark ModelConvertor parameters and returns as non-null (#2507) (#2519)
- c645629 prevent overriding the solver version by models
- 753871a improved handling of logging for platform authentication (#2628)
- 9d8a59c false positive warnings for new properties (#2617)
🔄️ Changes
- 05408ce bavet: speed up ifExists+join preload (#2662)
- ae5816a shadows: replace the declarative change queue with an int heap (#2660)
- 32e6401 shadows: decrease allocations in shadow variable processing (#2642)
- 023d49f shadows: improve move evaluation speed by ignoring calculating the score for inconsistent solutions (#2630)
- c7f863f recording fewer, cheaper move undo steps (#2649)
- 022d34d standardize handling of BigDecimal in scores (#2646)
🧰 Tasks
- 74e9375 rename Example maturity level to Template (#2661)
- bf9c203 introduce revapi check for solver-service (#2664)
📝 Documentation
- b4bfe08 improve enterprise license docs (#2654)
- ad2d0ff link Vehicle Routing Problem on first mention in VRP quickstart (#2645)
- bfb02ea clarify single use of PlanningListVariable per solution. (#2632)
- 3b0b3a2 demo data add note on decoupling and return type (#2627)
- 9d02391 document updating multiple fields with custom shadow variables (#2619)
Contributors
We'd like to thank the following people for their contributions:
- Christopher Chianelli (@Christopher-Chianelli)
- Diogo Ferreira (@diogodanielsoaresferreira)
- Frederico Gonçalves (@zepfred)
- Lukas Downes (@LDWNS)
- Lars Beckmann (@larsbeck)
- Lukáš Petrovický (@triceo)
- Maciej Swiderski (@mswiderski)
- Marek Winkler (@winklerm)
- Radovan Synek (@rsynek)
- Tom Cools (@TomCools)
- Vikas Prasad (@vikas-prasad-cx)
- @fodzal
- Lee Carlon (@lee-carlon)
Timefold Solver Community Edition is an open source project, and you are more than welcome to contribute as well!
For more, see Contributing.
Timefold also offers commercial editions of the solver, which include additional features such as explainability, the ability to scale out to the biggest datasets, and enterprise-grade support.
Find out more about the different editions.
How to use Timefold Solver
To see Timefold Solver in action, check out the quickstarts.
With Maven or Gradle, add the ai.timefold.solver : timefold-solver-core : 2.7.0 dependency in your pom.xml to get started.
You can also import the Timefold Solver Bom (ai.timefold.solver : timefold-solver-bom : 2.7.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.