Skip to content

Timefold Solver 1.26.0

Choose a tag to compare

@timefold-release timefold-release released this 10 Sep 13:40

A new month, a new Timefold Solver release packed with excitement! We have done many performance improvements around value ranges, and also fixed some important bugs. But most importantly, declarative shadow variables are now part of our public API.

This is a big milestone, and we want to thank everyone who provided their feedback as we were evolving the feature out there in public. The magic of open source in action! For those who were using the feature even while it was in preview, we want to point out the changes we've made in this release, which are likely to affect you:

  • All annotations related to the feature moved to their final place in the public API, specifically to the ai.timefold.solver.core.api.domain.variable package.
  • ShadowVariableLooped annotation was renamed to ShadowVariablesInconsistent.
  • This annotation was also made optional. If you don't need it in your model or for your constraints, you need not include it.
  • In constraints, forEach() and forEachIncludingUnassigned() now filter out every inconsistent (formerly looped) entity. To include them in your constraints, use forEachUnfiltered() instead.

SBOMs

Timefold Solver releases now come with SBOMs to help with supply chain security. You can find our SBOMs in Maven Central alongside our binaries, such as SBOM for Solver core.

Changelog

🚀 Features

  • 14bc23c Finalize declarative shadow variables (#1775)
  • e856684 Add high-level aggregation methods to BenchmarkAggregator (#1777)

🐛 Fixes

  • 7d21b3a Avoid removing iterators prematurely (#1779)
  • 1a86e96 Review nullability annotations around SolutionManager (#1757)
  • 2d4b566 Start the termination counter at the first step (#1736)
  • a2d0e73 Address Quarkus warning about recorders not being injected as RuntimeValue

🔄️ Changes

  • 8008ccd Allow using builtin variable after builtin variable source in declarative shadow variables (#1734)
  • eda0ba8 Improve entity value range logic for basic variables (#1750)
  • 72e7021 Create filtering value range selectors as early as possible (#1738)

🧰 Tasks

  • aff9401 ForEach and forEachUnassigned exclude inconsistent entities by default (#1764)
  • c4fe983 Fail-fast if shadow variables has a source-induced loop in their graph (#1758), closes #1675
  • 4c3c9fe Make @ShadowVariablesInconsistent optional (#1778)
  • b701ef9 Move streams support for swap moves (#1765)
  • c5ab8c3 Rename @ShadowVariableLooped to @ShadowVariablesInconsistent (#1749)

📝 Documentation

  • fa96019 Rework structure for shadow variables (#1781)
  • ce15bc4 Add programmatic benchmark aggregation example to documentation (#1774)

Contributors

We'd like to thank the following people for their contributions:

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.26.0 dependency in your pom.xml to get started.

You can also import the Timefold Solver Bom (ai.timefold.solver : timefold-solver-bom : 1.26.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.