Skip to content

Releases: TimefoldAI/timefold-solver

Timefold Solver 1.17.0

10 Dec 14:20
e474d86
Compare
Choose a tag to compare

In this, the last release of 2024, we are bringing mostly small fixes and improvements. But we are also...

Introducing Preview Features!

Preview features are developed to the same standard of quality as the rest of Timefold Solver. They are fully specced out, implemented and documented. However, their APIs and behavior are not yet considered stable - we can change them in the future, and we may even remove them if they don't prove themselves. And to make that decision, we need your feedback!

Diversified Late Acceptance Search (DLAS)

We're kicking off the previous features with an improvement to our local search implementation! Diversified Late Acceptance Search is a tweak to the standard Late Acceptance Hill Climbing and if we're right about it, it will get you better solutions to your optimization problems, and it will get there faster.

Please try it out and let us know what your experience is - did your solver reach better solutions than before? How much better? Have you suffered any issues after switching to DLAS? We want to know!

Changelog

🚀 Features

  • c6c30e9 Add Diversified Late Acceptance approach (#1253), closes #1253
  • 9c6f7b4 Add method to SolverConfig for setting unimproved termination limit

🐛 Fixes

  • 3a1ef62 Ensure the sort manner is applied to the default CH config (#1258), closes #1258
  • 9d7a502 Off-by-one error when choosing element locations
  • 07cc41d Use a stable recipe order for NullableRecipe.getRecipeList()
  • 28201ef Recurse through @DeepPlanningCloned classes to discover all @DeepPlanningCloned classes (#1237), closes #1208 #1237

🧰 Tasks

📝 Documentation

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

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

Timefold Solver 1.16.0

12 Nov 15:51
Compare
Choose a tag to compare

Looks like Christmas came early this year! This release of your favorite solver is packed to the brim with cool new features.

Featured update: Nullness annotations on public API

Users of Kotlin rejoice! All public APIs of Timefold Solver have now been null-marked using JSpecify. This means you should now be able to remove some of those pesky Elvis operators from your code. Both Java and Kotlin users will also be able to benefit from IDE support, warning of improper use and handling of null.

This has been a big change and we are doubly excited about it, because it was entirely contributed by a member of our growing community! Our thanks go out to Peter Laggner (@greyhairredbear), for the time and effort he spent delivering this. We hope he'll enjoy some Timefold-branded tokens of appreciation we've sent his way.

But that's not all we have in store for you!

  • Due to some improvements to the solver, we no longer require you to implement undo moves for your Custom moves; you can safely delete them from your codebase, just like we did with ours.
  • We have also updated the Score Analysis API to optionally skip listing all justifications, which will help users with massive datasets.
  • We have a brand new documentation website with some refreshed content.

And last but not least, we've been making smaller improvements and bugfixes here and there, as per usual. Enjoy the latest and greatest Timefold Solver, and stay in touch!

Changelog

🚀 Features

🐛 Fixes

📝 Documentation

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

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

Timefold Solver 1.15.0

08 Oct 12:04
Compare
Choose a tag to compare

Fall is here and the days are getting shorter, but the release cadence of Timefold Solver is still once a month!

This time, we've brought a whole bunch of smaller improvements and bug fixes. We've extended our Recommendations API, made the recently introduced Ruin and Recreate move more reliable, and improved our Python experience.

Changelog

🚀 Features

🐛 Fixes

  • 23d64bd Don't pick a move if CH terminates prematurely (#1132), closes #1132
  • 753b6f9 Don't restart solver termination in Ruin and Recreate
  • c416a8b Don't override value with loop variable
  • 141b70f Cast classmethods' first argument to PythonLikeType in 3.10, use same instances for Enum values
  • f24fb28 Pop off result of setattr and delattr in generic case
  • 1482036 Generate override methods when parent's parameters have a different signature

🧰 Tasks

📝 Documentation

  • 1b910cb Updated intro with planning content

Contributors

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

  • Christopher Chianelli
  • Frederico Gonçalves (@zepfred)
  • Lukáš Petrovický
  • Matej Čimbora
  • 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.

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

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

Timefold Solver 1.14.0

17 Sep 12:35
Compare
Choose a tag to compare

Summer vacations are over, the big announcements 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, 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!

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

🐛 Fixes

📝 Documentation

Contributors

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

  • Christopher Chianelli
  • Frederico Gonçalves (@zepfred)
  • Geoffrey De Smet
  • Lukáš Petrovický
  • Rutger Lubbers
  • Tobias Wasner (@wasnertobias)

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.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.

Timefold Solver 1.13.0

13 Aug 12:48
Compare
Choose a tag to compare

As the summer sun is slowly baking us, so have we baked something new for you. Timefold Solver 1.13.0 brings new features as well as the usual assortment of bug fixes and improvements.

Featured Update: Constraint Weight Overrides

We bring you a smaller an improved API for setting weights for your constraints. Where previously you had to write a lot of boilerplate to provide an entire ConstraintConfiguration implementation, specifying a constraint weight is now as easy as adding a Map to your planning solution!

Besides that, we are introducing a new type of shadow variable - one that can be updated by a simple method, as opposed to introducing an entire VariableListener. This allows for easy updates to the tail chains of a list variable.

As always, all of these updates are available for all of our Java, Python and Kotlin users.

Changelog

🚀 Features

🐛 Fixes

  • 3ffb49b Address scale equal to NaN
  • ec49da1 Respect merge function in toMap() collector
  • d01cd42 Avoid duplicating nearby configuration
  • ecae569 Proper casts in Python load_balance collector

🔄️ Changes

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
and read our documentation.

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.

Timefold Solver 1.12.0

09 Jul 14:38
Compare
Choose a tag to compare

Summer is here, but we're not resting! Not all of us anyway. This release brings features, as well as an assortment of bug fixes and enhancements.

Featured update: Fairness and Load Balancing

Providing optimized schedules is only one part of the problem. And if our employees see that our schedule isn't being fair to them, because Ann is getting three times as many shifts as Dan is, they will not be very happy and the business will struggle. The business may even run into labour law issues.

That is why we are introducing a load balancing collector for Constraint Streams. You can read all about it in Fairness and load balancing section of the documentation.

Besides that, we have added some quality of life improvements:

  • ScoreAnalysis now provides more information about itself, including a useful textual summary of the analysis.
  • The solver can now trigger an event when the first initialized solution shows up, letting you know when the construction heuristic ends and local search begins.

All of these improvements and bugfixes are also available in Timefold Solver for Python. Have you checked it out yet?

Changelog

🚀 Features

🐛 Fixes

  • e7fae26 Only include tail chain move when using a single var (#936), closes #936
  • d5ed7e1 Do not fail on solution/entity classes as interfaces (#934), closes #934
  • 24b3240 Continue the warmup when one configuration fails
  • 03ed42c Update the best score image of the benchmark section
  • 5690ec6 Fail fast when local search starts from an uninitialized solution

Contributors

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

  • Christopher Chianelli
  • Frederico Gonçalves (@zepfred)
  • Lukáš Petrovický (@triceo)
  • 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.

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

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

Timefold Solver 1.11.0

19 Jun 15:41
Compare
Choose a tag to compare

Nearly a year ago, we released Timefold Solver 1.0 for Java, the first step on our journey to rid the world of wasteful planning. Today, the journey continues as we announce Timefold Solver for Python!

In this first Beta release, we give the Python ecosystem access to Timefold Solver and all of its features. We invite you to try out our new Python quickstarts and let us know what you think. Do you like the APIs? Does it integrate well with your Python projects? How's the performance? We need your feedback!

Timefold Solver for Python will move out of Beta once we've heard back from enough of you. While in Beta, we reserve the right to change APIs and to add or remove functionality based on user feedback. Once we leave Beta, we will provide the same backwards compatibility guarantees as with the Java solver.

And speaking of the Java solver, we haven't forgotten about it either. In this release, we've been mostly fixing bugs and making small tweaks here and there. Going forward, we've got plenty of interesting things in store for the Java and Python solvers, as they will evolve together from now on.

Changelog

🐛 Fixes

  • 30980b7 Make the nearbyDistanceMeterClass a visitable class for GIZMO
  • 73bfaa6 Use custom thread factory class in SolverManager (#875), closes #875
  • d7a5404 Disable nearby configuration for CH

🧰 Tasks

  • 9c76f53 Update docs on which time and date types to use

📝 Documentation

  • 62603f7 Fix a typo in toConsecutiveSequences example
  • e558697 Fix typos in connected ranges
  • 83abce6 Fix typos in collectors
  • d64b634 Fix ConstraintCollectors.average() example

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 in Java or Kotlin

To see Timefold Solver in action, check out the quickstarts.

With Maven or Gradle, add the ai.timefold.solver : timefold-solver-core : 1.11.0 dependency in your pom.xml to get started.

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

Timefold Solver 1.10.0

14 May 08:20
Compare
Choose a tag to compare

In the May '24 release of Timefold Solver, we’ve focused on making everything more stable and reliable. Here’s what’s new:

  • Connected Ranges Collector: This new feature helps manage and penalize the use of resources over time.
  • Legacy Examples to Quickstarts: We’ve turned old examples into quickstart guides for easier use.
  • Throttling Best Solution Consumer: For our Enterprise Edition users, we’ve added a feature to prevent integrations from being overloaded by solver events.
  • Maven Repository Authentication: We’re preparing to require authentication for our Enterprise Edition binaries. We’ll notify customers in advance to ensure a smooth transition. Community Edition users won’t be affected, as their binaries will remain freely available on Maven Central.

Changelog

🚀 Features

🐛 Fixes

  • 6c4e2e6 Properly detect value ranges with wildcard types (#838), closes #838
  • c373c2b Remove too eager fail-fast in concat node's retract (#831), closes #831
  • fdeb06a Forbid pinning uninitialized entities when unassigned not allowed (#821), closes #821
  • b5ff711 Make unassigned location the last element destination

🔄️ Changes

  • 5443347 Minor perf improvements to Constraint Streams (#830), closes #830

🧰 Tasks

📝 Documentation

  • 5bfa796 Document the throttling feature of Enterprise Edition
  • 4f19adb Correct property name for node sharing in Spring
  • e7f9bb2 Fix list variable unassigned values documentation

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

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

Timefold Solver 1.9.0

09 Apr 07:21
Compare
Choose a tag to compare

Introducing Timefold Solver’s latest release: Broadening Horizons Across Industries.

In our pursuit to cater to a wider array of planning challenges, we have added new quickstarts in our latest release. Tailored to meet the dynamic needs of various industries and use-cases.

These quickstarts are designed to jump-start your planning processes, offering a fast track to deploying sophisticated scheduling and allocation solutions.

Enterprise Edition

Our customers gain an edge with the introduction of Nearby Selection in Construction Heuristics. This powerful feature enhances the solver’s capability to generate better initial solutions by considering proximity in decision-making, thereby optimizing operational efficiency and resource utilization across your projects.

And as always, this release also includes significant bug fixes and quality of life improvements for all users.

Changelog

🚀 Features

🐛 Fixes

  • 3ab0480 Enable Nearby selection for Construction Heuristics (#767), closes #767
  • c6f1e4f Benchmark duplicated metrics (#761), closes #163 #761
  • a7e7a19 Unimproved terminations skip construction heuristic (#755), closes #755
  • 493723e Add rebase support to NoChangeMove and ListUnassignMove

🧰 Tasks

📝 Documentation

Contributors

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

  • Christopher Chianelli
  • Frederico Gonçalves (@zepfred)
  • Geoffrey De Smet
  • Lukáš Petrovický (@triceo)
  • Radovan Synek

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

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

Timefold Solver 1.8.1

26 Mar 12:28
Compare
Choose a tag to compare

This is a hotfix release for Timefold customers. Please update if all of the following applies to you:

  • You use list variables with unassigned values,
  • you use multi-threaded solving,
  • and you use construction heuristics.

If any one of the above doesn't apply to you, you do not need to update to Timefold Solver 1.8.1 and can wait for the regularly scheduled release next month.

Changelog

🐛 Fixes

  • 43e52bd add rebase support to NoChangeMove and ListUnassignMove