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](https://timefold.ai/docs/timefold-solver/latest/using-timefold-solver/modeling-planning-problems#planningListVariableAllowingUnassigned). 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](https://timefold.ai/docs/timefold-solver/latest/enterprise-edition/enterprise-edition#automaticNodeSharing). 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](https://timefold.ai/docs/timefold-solver/latest/enterprise-edition/enterprise-edition#_nearby_selection_with_a_list_variable), 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](https://timefold.ai/docs/timefold-solver/latest/upgrade-and-migration/upgrade-to-latest-version) 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](https://github.com/zepfred))
- Geoffrey De Smet
- GitHub
- Lukáš Petrovický ([triceo](https://github.com/triceo))
- Pieter De Schepper
- dependabot[bot] ([dependabot[bot]](https://github.com/apps/dependabot))
- marinier
_Timefold Solver Community Edition_ is an open source project, and you are more than welcome to contribute as well!
For more, see [Contributing](https://github.com/TimefoldAI/timefold-solver/blob/main/CONTRIBUTING.adoc).
Should your business need to scale to truly massive data sets or require enterprise-grade support,
check out [_Timefold Solver Enterprise Edition_](https://timefold.ai/pricing).
How to use Timefold Solver
To see Timefold Solver in action, check out [the quickstarts](https://github.com/TimefoldAI/timefold-quickstarts).
[//]: (Ideally we'd show the pom.xml snippet, but a JReleaser bug would remove all whitespace from it.)
[//]: (See https://github.com/jreleaser/jreleaser/issues/1142)
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.