Skip to content

Releases: TimefoldAI/timefold-solver

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

Timefold Solver Community Edition 1.8.0

12 Mar 08:59
Compare
Choose a tag to compare

Spring is in the air, and so is another release of Timefold Solver. And this time, it's a big one! For the Community Edition, we have prepared the following features:

  • List variables now allow for unassigned values. Say goodbye to the "dummy vehicle" pattern, say hello to the performance improvements that come from it!
  • Spring Boot users among you can now easily generate native images, as was already possible for Quarkus.
  • ConstraintVerifier can now test for justifications and indictments, allowing you to write tests that will give you even more confidence in your constraints than was possible before.
  • We have exposed new metrics that allow you to better monitor the currently running solver(s).
  • We have brought the usual bugfixes and dependency upgrades.

On top of all that, our Enterprise Edition customers can enjoy some exclusive goodies:

  • Automatic node sharing. Use cases with a large number of complex constraints may run much faster without any changes to your code. In our benchmarks, we have seen improvements in score calculation speed of up to 100 % on some data sets.
  • Nearby Selection can now be enabled with a single switch in your configuration, as opposed to the cumbersome configuration of old. If you're still not using Nearby Selection for your large routing problems, you're missing out on cost savings coming from significantly improved solutions!

Going forward, we will be publishing an Upgrade Recipe to let you know of any things you may or may not run into when upgrading to the latest version of Timefold Solver. It's a good read!

Changelog

🚀 Features

  • a0ce0e2 Support unassigned elements for list variables, closes #573
  • 8462888 Add support for Spring Boot native image, closes #609
  • 53f83bd Automatic node sharing for ConstraintProvider, closes #685
  • 31f66ad Add the nearby-distance-meter-class property for Quarkus and Spring, closes #687
  • 3211f8c Enable Nearby Selection for non-empty move selectors configuration, closes #684
  • 55c373b Add Nearby configuration by exception, closes #673
  • fb946aa Support getting score calculation count and speed for SolverJob, closes #621
  • 388490b Expose entity, variable and value counts in the logs and metrics, closes #671
  • 14b7b68 Add penalty methods for long and BigDecimal values without match weighter, closes #656
  • 82a9a68 Extend SingleConstraintAssertion to check Justification/indictment, closes #659
  • d2e24d2 Add withClassLoader(...) method to SolverConfig, closes #691 #695

🐛 Fixes

  • b8fdd8d Do not recalculate problem size statistics in Benchmarker
  • 6916ba7 Pass provided ClassLoader to ServiceLoader, closes #690 #692

🧰 Tasks

  • 307630c Improve error messages from loading YAML files, closes #637

📝 Documentation

  • 207e122 Add upgrade and migration section, closes #686

Contributors

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

  • Christopher Chianelli
  • Frederico Gonçalves (@zepfred)
  • Geoffrey De Smet
  • GitHub
  • Lukáš Petrovický (@triceo)
  • Pieter De Schepper
  • dependabot[bot] (@dependabot[bot])
  • marinier

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

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

13 Feb 10:53
Compare
Choose a tag to compare

In this release of Timefold Solver, we focused mostly on bugfixes, improvements to documentation and to the quickstarts.
The release also brings the usual assortment of small tweaks and dependency upgrades.

Featured update: We've made it possible to inject more than one SolverManager in your Quarkus and Spring Boot applications, a feature often requested by the community.

Changelog

🚀 Features

  • 9009fa4 Support multiple SolverManager instances in Spring Boot (#564, #590)

🐛 Fixes

  • 964adbd Recommended Fit API needs to ignore any unassigned entities/values (#618), closes #581 #618
  • 5c3bcdf Nearby selection pinning support (#614), closes #614
  • a9d7c62 Pass all subclasses of Throwable to the exception handler in SolverManager
  • 693e321 Ensuring the spent termination property is read in the Quarkus environment (#600), closes #600
  • d9122e6 Avoid eager initialization of the Benchmark resources

📝 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)

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

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

Timefold Solver Community Edition 1.6.0

10 Jan 15:19
Compare
Choose a tag to compare

New year, new release, new goodness!

Featured Update - Pinning on list variables, enhancing our support for real-time planning:

  • With a new @PlanningPinToIndex annotation, you can tell the solver that a certain portion of the list variable is pinned and shouldn't be moved.
  • For example, for a list of customers that a vehicle will visit, this allows you to model situations where certain visits have either already happened, or where the vehicle is already too far into the trip that it would not be practical for it to turn back.
  • Previously, pinning was only available for the chained variable. With this, we are ramping up our efforts to bring list variable, which is easier to both understand and implement, on par with the chain variable in terms of features. Stay tuned for more on this front!

Other Enhancements:

  • Solver termination can now be overridden without creating a new instance of Solver or SolverManager, look for the SolverConfigOverride class.
  • The usual assortment of bugfixes and performance improvements.
  • Improvements all over the documentation and quickstarts.
  • Dependency upgrades.

Changelog

🚀 Features

🐛 Fixes

  • 67d4448 Avoid exception when analysing uninitialized solution (#536), closes #536
  • a5c3960 Fail fast when @DeepPlanningClone on a record
  • 69e3e55 Make MatchAnalysis implement Comparable to fix score corruption analysis (#527), closes #527
  • 2b35c89 Updating the School Timetabling quickstarts documentation (#494), closes #98 #494
  • 10ba396 Non-existent methods referenced for score explanation
  • a8e7a8a Filter trivial 2-opt moves and make KOptListMove public (#485), closes #480 #485
  • 0357f3e Do not set shadow variables to null when calculating from scratch in TRACED_FULL_ASSERT (#484), closes #478 #484

🔄️ Changes

📝 Documentation

  • d4a5e1c Add Quickstart code examples for Kotlin (#541), closes #541
  • 490490a Rename variable names for collection types (#499), closes #499
  • aaa0ebc Use tabs where possible to have better distinction between Maven and Gradle
  • 85dd7d9 Maintenance scheduling class diagram rename tagSet to reality
  • c8c28a0 Add chapter on CS performance

Contributors

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

  • Christopher Chianelli
  • Frederico Gonçalves (@zepfred)
  • Geoffrey De Smet
  • GitHub
  • Lukáš Petrovický (@triceo)
  • M.Thimm
  • Peter Laggner
  • Pieter De Schepper
  • Radovan Synek
  • dependabot[bot] (@dependabot[bot])

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

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

07 Dec 10:32
Compare
Choose a tag to compare

For our final release of 2023, we’ve prepared some exciting things!

Featured Update - Recommended Fit API, a game-changer for appointment scheduling.

  • Use case: Imagine you are an operator on a phone line, or an AI chatbot. A customer asks you for an appointment with a sales representative. Where do you put that appointment in their busy calendar?
  • Timefold Solver now provides superfast sub-second response times, while still taking all your constraints into account!
  • Result: Operators can receive a list of appointment choices, ranked from best fit to worst, for informed decision-making. Ensuring they can make an informed choice that has the least potential to disrupt the schedule as a whole.

Other Enhancements:

Changelog

🚀 Features

  • ab44aa6 Introduce the Recommended Fit API, closes #432
  • dccbda3 Promote consecutive sequence collector to public API, closes #426
  • 4415f4d Add constraint weight to ScoreAnalysis, closes #416
  • 86d58e6 Report missing before/after calls on undo corruption, closes #433
  • 926bb11 Report shadow variables that differ after recalculating from scratch when undo corruption occurs, closes #430
  • 176188b Identify Solver version and edition in Benchmarker, Spring and Quarkus, closes #411

🐛 Fixes

  • d8cf97c Shadow entities should be annotated with @PlanningEntityCollectionProperty, closes #445
  • ae617f4 Example app logo transparency
  • 6f0603f Support repeatable annotations like ShadowVariable in Quarkus

🧰 Tasks

  • 139da4d Replace ready/due time by min/max start/end time, closes #436 #438

📝 Documentation

  • 6de79ff Move development section from user guide to Github CONTRIBUTING
  • 663f22d Restructure chapters on using and configuring solver

Contributors

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

  • Christopher Chianelli
  • Geoffrey De Smet
  • Lukáš Petrovický (@triceo)
  • Pieter De Schepper
  • Radovan Synek
  • dependabot[bot] (@dependabot[bot])

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, just add the ai.timefold.solver : timefold-solver-core : 1.5.0 dependency in your pom.xml to get started.

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

04 Dec 11:06
Compare
Choose a tag to compare

End of life

Timefold Solver 0.8.42 is the final release in the 0.8.x line. As both Quarkus 2.x and Spring Boot 2.x reached their public end of life, Timefold can no longer guarantee timely resolution to any current and future security vulnerabilities. We ask users to upgrade to Timefold Solver 1.x, which is actively maintained and will continue so for many years to come.

OptaPlanner 8.x compatibility

At the time of Timefold Solver 0.8.42 release (December 4, 2023), the latest available release of OptaPlanner 8.x was 8.44.0.Final, released three months ago (September 6, 2023). Timefold Solver 0.8.42 is functionally identical with OptaPlanner 8.44.0.Final, but it brings additional bugfixes, performance improvements and dependency upgrades to fix security vulnerabilities.

Changelog

5d6bd81 fix: example app logo transparency
da64374 fix: Support repeatable annotations like ShadowVariable in Quarkus
706df9f fix: Make empty app check also test for planning entities in spring
b1cb26d fix: Do not fail-fast in spring boot extension if there no @PlanningSolution or @PlanningEntity classes
5abd3d4 fix: depend on spring-boot-starter in the starter module
0179616 fix: Deep clone unknown classes in GIZMO solution cloner
647fc2e deps: bump version.ch.qos.logback to 1.2.13
240e826 deps: bump version.org.apache.poi to 5.2.5
6b493cf deps: bump version.org.springframework.boot to 2.7.18
51a587a deps: bump version.io.quarkus to 2.16.12.Final

Timefold Solver Community Edition 1.4.0

08 Nov 07:27
Compare
Choose a tag to compare

It's time for another monthly release of Timefold Solver Community Edition!

Featured Update - JSON-friendly score explanations:

  • Even wondered what does a score of -3hard/-5soft actually mean? Wonder no more!
  • Timefold Solver can now break down the score all the way to individual constraint matches.
  • It can also compute differences between any two solutions.
  • And finally, it can easily send them over the wire from the backend to the frontend.

Furthermore you can now generate a Spring Boot app and include the Timefold Solver dependency without it failing if there's no @PlanningSolution or @PlanningEntity classes.

On top of that, we have the usual assortment of performance improvements, bug fixes and dependency upgrades.

Changelog

🚀 Features

🐛 Fixes

  • 479843b Do not fail-fast in spring boot extension if there no @PlanningSolution or @PlanningEntity classes (#397), closes #388 #397
  • 4b04bb5 depend on spring-boot-starter in the starter module
  • 07954c6 invalidate computed variables in Project Job Scheduling correctly (#371), closes #371
  • e54309d Enable constraint matching when metrics dictate

🔄️ Changes

  • bedeb54 replace stream with a loop on the hot path
  • 4e63393 Implement node sharing for groupBy (#401), closes #401
  • 7ecaebf Implement node sharing for expand, map and flattenLast (#376), closes #376
  • 823dde1 Implement node sharing for ifExists and ifNotExists (#375), closes #375
  • 45f0346 Use lambda constants in CS to allow for more node sharing (#374), closes #374

🧰 Tasks

  • 1dd4dcd Move implementations of Collectors outside of ConstraintCollectors (#392), closes #392
  • 29247f9 rationalize Spring dependencies
  • 2855c34 don't use Javadoc tags in Spring Boot properties, closes #387
  • 21ee1b3 remove trailing newlines from exception messages

📝 Documentation

  • 2f5c7e6 move information about Enterprise Edition to a new section (#404), closes #404

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, just add the ai.timefold.solver : timefold-solver-core : 1.4.0 dependency in your pom.xml to get started.

You can also import the Timefold Solver Bom (ai.timefold.solver : timefold-solver-bom : 1.4.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. They exclude 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 Community Edition 1.3.0

18 Oct 13:26
Compare
Choose a tag to compare

Another release, another better version of Timefold Solver Community Edition!

Featured Update - Constraint Stream Concatenation:

  • Merge away! Combine multiple streams seamlessly.
  • Implement intricate constraints with ease.

Besides the usual bug fixes and dependency upgrades, we also have a smoother experience with improved support for Java’s record types.

Changelog

🚀 Features

  • da28a81 Add concat operation to constraint streams
  • 2c56079 improve support for Java records (#308), closes #308

🐛 Fixes

  • 471a959 Deep clone unknown classes in GIZMO solution cloner (#341), closes #341
  • e4d990c Always propagate map's update even if mapped value does not change
  • 5d78bfd exhaustive search must not skip non-doable moves

🔄️ Changes

  • 8c64199 GIZMO should not check for unknown classes in Quarkus (#346), closes #346

🧰 Tasks

  • 8d5864d Migrate to new Quarkus Dev UI
  • eca54d2 fail fast on combination of basic variables & list variables on a single entity (#338), closes #338

📝 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,
just add the ai.timefold.solver : timefold-solver-core : 1.3.0 dependency in your pom.xml to get started.

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