No summer heat can stop us here at Timefold! Solver 1.25.0 brings some long-awaited features, as well as the usual batch of bugfixes and small improvements.
This release also no longer includes Python support; read the full announcement to find out more.
Featured update: List variable supports value ranges on entities
It is now possible to declare @ValueRangeProvider
on planning entities, even if you're using list variables. This allows you to remove many uses of selector filtering, and in some of our experiments, it significantly sped up construction heuristics because of that.
Declarative shadow variables finalizing soon
We have introduced optional value alignment, to opt in to increased performance in certain cases.
We have also refactored loop handling, making the @ShadowVariableLooped
marker field be updated before the variable itself. But it also doesn't matter anymore, since we can now guarantee that - if the variable is looped - the updater will never be called, and therefore referencing the marker inside of the updater makes no sense. The use of the marker is therefore exclusively limited to constraints, as it will indicate entities whose values can not be trusted.
We have also added more documentation around performance and loops. With these changes, there is only a very short list of things that we still need to do before we can finish this preview feature. Fingers crossed, declarative shadow variables will be promoted to a regular feature in the next release of Timefold Solver.
Changelog
🚀 Features
🐛 Fixes
- 72d48c2 Centralize the ownership of ValueRangeManager to avoid subtle bugs (#1716)
- 471ecca Correctly identify variable access as INDIRECT if accessed after a fact
- d9cc89a Pass SolverConfig enabled preview set to ConstraintVerifier on creation
🔄️ Changes
- 79806ca Improve entity range for list variables (#1722)
- 790a10d Improve Nearby logic for entity ranges (#1729)
- ee2410f Simplify handling of @ShadowVariableLooped (#1726)
🧰 Tasks
- 16e2464 Move streams change moves for list variable (#1727)
- 7ec00b1 Move streams value range on entity for basic vars (#1707)
- fbe8204 Move Python Solver to new repo (#1693)
📝 Documentation
Contributors
We'd like to thank the following people for their contributions:
- Christopher Chianelli (@Christopher-Chianelli)
- Frederico Gonçalves (@zepfred)
- Makai Mann (@makaimann)
- Lukáš Petrovický (@triceo)
Timefold Solver Community Edition is an open source project, and you are more than welcome to contribute as well!
For more, see Contributing.
Should your business need to scale to truly massive data sets or require enterprise-grade support,
check out Timefold Solver Enterprise Edition.
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 : 1.25.0
dependency in your pom.xml
to get started.
You can also import the Timefold Solver Bom (ai.timefold.solver : timefold-solver-bom : 1.25.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.