OptaPlanner logo
  • Download
  • Learn
    • Documentation
    • Videos
    • Slides
    • Training

    • Use cases
    • Compatibility
    • Testimonials and case studies
  • Get help
  • Blog
  • Source
  • Team
  • Services
  • KIE
    • Drools
    • OptaPlanner
    • jBPM
    • Kogito
  • Star
  • T
  • L
  • F
  • YT
Fork me on GitHub

Release Notes 6.1

We are happy to announce a 6.1 Final release of OptaPlanner. OptaPlanner is a lightweight, embeddable planning engine written in Java™ to solve AI constraint optimization problems efficiently. Use cases include Vehicle Routing, Employee Rostering, Maintenance Scheduling, Task Assignment, School Timetabling, Cloud Optimization, Conference Scheduling and many more.

Download
Download
8.14.0.Final
Documentation
Documentation
8.14.0.Final
Status of OptaPlanner
  • Stable: Lots of unit, integration and stress tests
  • Reliable: Used across the world in production
  • Scalable: To billions of constraint matches with minimal RAM and CPU time
  • Documented: Read the detailed reference manual and the many examples
  • Open Source: Apache License 2.0
Note for Red Hat Decision Manager customers

The RHDM version differs from the OptaPlanner version:

RHDM version OptaPlanner version
7.8 7.39
7.9 7.44
7.1 7.48
7.11 8.5 (and 7.52)
7.12 8.11 (and 7.59)

New and noteworthy

Public API

There is now a public API:

  • Public API: All classes in the package namespace org.optaplanner.core.api are 100% backwards compatible in future releases.

  • Impl classes: All classes in the package namespace org.optaplanner.core.impl are not backwards compatible: they might change in future releases. The recipe called UpgradeFromPreviousVersionRecipe.txt describes every such change and on how to quickly deal with it when upgrading to a newer version. That recipe file is included in every release zip.

  • XML configuration: The XML solver configuration is backwards compatible for all elements, except for elements that require the use of non-public API classes. The XML solver configuration is defined by the classes in the package namespace org.optaplanner.core.config.

Performance speedups

  • EntitySelector caching speedup for large datasets: Benchmarked on MachineReassignment’s B datasets.

    • Tabu Search: +3% on average, +4% on largest

    • Late Acceptance: +234% (x3.34) on average, +430% (x5.3) on largest

  • Generic cloning speedup for large datasets: Benchmarked on MachineReassignment’s B datasets.

    • Tabu Search: +18% on average, +24% on largest

    • Late Acceptance: +23% on average, +121% (x2.21) on largest

Declarative value ranges

When the planning value range of a planning variable is a number (such as int, double or BigDecimal), you can now declare the range by its bounds, instead of enumerating all values in the range.

So instead of reserving 5000 memory spaces for all the integer values:

    @ValueRangeProvider(id = "delayRange")
    public List<Integer> getDelayRange() {
        List<Integer> = new ArrayList<Integer>(5000);
        for (int i = 0; i < 5000; i++) {
            delayRange.add(i);
        }
        return delayRange;
    }

You can now just reserve 2 memory spaces for the bounds of those integer values:

    @ValueRangeProvider(id = "delayRange")
    public CountableValueRange<Integer> getDelayRange() {
        return ValueRangeFactory.createIntValueRange(0, 5000);
    }

New Construction Heuristic: Cheapest Insertion

A new Construction Heuristic that takes considerably longer than First Fit, First Fit Decreasing, but often has better results.

  <constructionHeuristic>
    <constructionHeuristicType>CHEAPEST_INSERTION</constructionHeuristicType>
  </constructionHeuristic>

New Exhaustive Search: Branch And Bound

Branch And Bound is a smart version of Brute Force. It also explores nodes in an exponential search tree, but it investigates more promising nodes first and prunes away worthless nodes. Configure it like this:

  <exhaustiveSearch>
    <exhaustiveSearchType>BRANCH_AND_BOUND</exhaustiveSearchType>
  </exhaustiveSearch>

BenchmarkAggregator

The BenchmarkAggregator in optaplanner-benchmark allows you to merge multiple benchmark reports into 1 report.

Contributed by Matej Čimbora.

Generic move improvements

  • New PillarChangeMove: A pillar is a set of planning entities which have the same planning value(s) for their planning variable(s). The PillarChangeMove selects 1 entity pillar and changes the value of 1 variable for all entities.

  • The pillar moves can now select subPillars too.

Other improvements

  • The Manners2009 example has been cleaned up and renamed to the Dinner Party example.

  • Decision Table example: the Dinner Party example now demonstrates how to use a Drools Decision Table (an XLS file) to allow users to define score rules.

  • New BestScoreFeasibleTermination: terminates when the best score is feasible. Contributed by Matej Čimbora.

  • Real-time planning improvements, such as a daemon mode.

Upgrade your code to 6.1

The best and easiest way to upgrade to this new version of OptaPlanner is by following the upgrade recipe.

New features in older releases

Read the previous release notes to learn about the new and noteworthy in previous releases.

Latest release
  • 8.14.0.Final released
    Wed 8 December 2021
Paid support and consulting

Want to talk to the experts? Red Hat offers certified binaries with enterprise consulting. Contact optaplanner-info for more information.

Upcoming events
  • DevConf.CZ
    Brno, Czech Republic (virtual) - Fri 28 January 2022
    • Artificial Intelligence on Quarkus: I love it when an OptaPlan comes together by Geoffrey De Smet
  • JFokus
    Stockholm, Sweden - Mon 7 February 2022
    • AI maintenance scheduling with OptaPlanner on Quarkus by Geoffrey De Smet
  • Add event / Archive
Latest blog posts
  • OptaPlanner documentation turns over a new leaf
    Tue 26 October 2021
    Radovan Synek
  • Order picking optimization in warehouses and supermarkets with OptaPlanner
    Thu 14 October 2021
    Walter Medvedeo
  • Monitor OptaPlanner solvers through Micrometer
    Tue 12 October 2021
    Christopher Chianelli
  • A new AI constraint solver for Python: OptaPy
    Tue 5 October 2021
    Christopher Chianelli
  • How much faster is Java 17?
    Wed 15 September 2021
    Geoffrey De Smet
  • Constraint Streams get some more love
    Thu 19 August 2021
    Lukáš Petrovický
  • Let’s OptaPlan your jBPM tasks (part 2) - BPM Task assigning in the cloud
    Mon 26 July 2021
    Walter Medvedeo
  • Blog archive
Latest videos
  • AI lesson scheduling on Quarkus with OptaPlanner
    Thu 18 November 2021
    Geoffrey De Smet
  • Maintenance scheduling
    Fri 12 November 2021
    Geoffrey De Smet
  • Optimized order picking in warehouses and supermarkets
    Tue 26 October 2021
    Walter Medvedeo
  • A modern OO/FP constraint solver
    Tue 14 September 2021
    Geoffrey De Smet
  • Business processes task optimization in Kogito
    Tue 7 September 2021
    Walter Medvedeo
  • School timetable optimization
    Mon 6 September 2021
    Geoffrey De Smet
  • Schedule incoming calls real-time
    Mon 23 August 2021
    Radovan Synek
  • Video archive

OptaPlanner is open. All dependencies of this project are available under the Apache Software License 2.0 or a compatible license. OptaPlanner is trademarked.

This website was built with JBake and is open source.

Community

  • Blog
  • Get Help
  • Team
  • Governance
  • Academic research

Code

  • Build from source
  • Issue tracker
  • Release notes
  • Upgrade recipes
  • Logo and branding

KIE projects

  • Drools rule engine
  • OptaPlanner constraint solver
  • jBPM workflow engine
  • Kogito Business Automation platform
CC by 3.0 | Privacy Policy
Sponsored by Red Hat