Toggle navigation OptaPlanner logo
  • Home
  • Download
  • Learn
    • Documentation
    • Videos
    • Slides
    • Training
    • Use cases
    • Compatibility
    • Testimonials and case studies
  • Get help
  • Source
  • Team
  • Services
  • Star
  • @OptaPlanner
  • Fb
Fork me on GitHub

Release Notes 6.0

We are happy to announce a 6.0 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.3.0.Final
Documentation
Documentation
8.3.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.7 7.33
7.8 7.39
7.9 7.44

New and noteworthy

Drools Planner renamed to OptaPlanner

OptaPlanner is the new name for Drools Planner. For more information, see the full announcement.

Faster and easier scoreDRL

The new constraint match system is:

  • Faster: The average calculate count per seconds increases between 7% and 40% on average per use case.

  • Easier to read and write

  • Less error-prone: It’s much harder to cause score corruption in your DRL.

Before:

    rule "conflictingLecturesSameCourseInSamePeriod"
        when
            ...
        then
            insertLogical(new IntConstraintOccurrence("conflictingLecturesSameCourseInSamePeriod", ConstraintType.HARD,
                    -1,
                    $leftLecture, $rightLecture));
    end

After:

    rule "conflictingLecturesSameCourseInSamePeriod"
        when
            ...
        then
            scoreHolder.addHardConstraintMatch(kcontext, -1);
    end

Notice that you don’t need to repeat the rule name or the causes (the lectures) no more. OptaPlanner figures out it itself through the kcontext variable. Drools automatically exposes the kcontext variable in the RHS, so you don’t need any extra code for it.

You also no longer need to hack the API’s to get a list of all ConstraintOcurrence’s: the `ConstraintMatch objects (and their totals per constraint) are available directly on the ScoreDirector API.

For more information, see this blog post and the reference manual.

Construction heuristics now use selectors

The construction heuristics now use the selector architecture so they support selection filtering, etc. Sorting can be overwritten at a configuration level (very handy for benchmarking).

In use cases with multiple planning variables (for example period, room and teacher), you can now switch to a far more scalable configuration.

Automatic solution cloning

Implementing the `Solution’s planning clone method is now optional. This means there’s less boilerplate code to write and it’s harder to cause score corruption in your code.

For more information, see this blog post and the reference manual.

New built-in scores

There are new built-in score definitions, such as: HardMediumSoftScore (3 score levels), BendableScore (configurable number of score levels), HardSoftLongScore, HardSoftDoubleScore, HardSoftBigDecimalScore, …​

Planning Variable Listener (shadow variables)

A planning variable can now have a listener which updates a shadow planning variable.

A shadow planning variable is a variable that is never changed directly, but can be calculated based on the state of the genuine planning variables. For example: in VRP with time windows, the arrivalTime at a customer can be calculated based on the previous customers of that vehicle.

Bi-directional variable relationship for chained variables

A shadow planning variable can now be mappedBy a genuine variable. OptaPlanner will automatically update the shadow variable if the genuine variable is changed. Currently this is only supported for chained variables.

TSP and VRP: Chained variables are more scalable

Several improvements have made use cases like TSP and VRP more scalable. The code has been optimized to run significantly faster. Also, <subChainSelector> now supports <maximumSubChainSize> to scale out better.

New metaheuristic: Step Counting Hill Climbing

Step Counting Hill Climbing is easy to configure and has good results. Generally, it behaves and feels a lot like Late Acceptance. Try it out with the Benchmarker.

Benchmarker improvements

  • Best solution mutation statistic: shows for every new best solution found, how many variables needed to change to improve the last best solution.

  • Step score statistic: shows how the step score evolves over time.

  • The Benchmarker now highlights infeasible solutions with an orange exclamation mark.

  • The Benchmarker now shows standard deviation per solver configuration (thanks to Miroslav Svitok).

New examples

  • VRP with time windows: The VRP example can now also handle the capacitated vehicle routing problem with time windows.

  • Project job scheduling: A form of job shop scheduling, for example to schedule the production of diverse books, cars or other products to machines and employees (thanks to Lukáš Petrovický)

Example improvements

  • The GUI’s of course scheduling, exam scheduling, hospital bed planning and sport scheduling have been improved.

  • The optaplanner examples Swing GUI has been redesigned to take up less space.

  • A webapp variant of the cloud balancing example has been added to optaplanner-webexamples.war (thanks to Frederic Hornain).

Other improvements

  • Domain classes that extend/implement a @PlanningEntity class or interface can now be used as planning entities.

  • Nullable variables support improved and fixed.

  • Late Acceptance improved.

  • Ratio based entity tabu (thanks to Lukáš Petrovický).

  • Drools properties can now be optionally specified in the solver configuration XML.

  • Mimic selection: useful to create a cartesian product selection of 2 change move selectors that move different variables of the same entity.

  • KieBase support, for example to integrate decision tables or scorecards.

  • OSGi support out-of-the-box in the optaplanner jars.

Upgrade your code to 6.0

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.

Comments

Visit our forum to comment
Latest release
  • 8.3.0.Final released
    Fri 5 March 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
  • KIE Live
    Worldwide - Tue 9 March 2021
    • Testing your constraints with OptaPlanner by Lukáš Petrovický, Karina Varela, Alex Porcelli
  • Javaland
    Worldwide - Tue 16 March 2021
    • AI on Quarkus: I love it when an OptaPlan comes together by Geoffrey De Smet
  • Red Hat Webinar
    Worldwide - Wed 24 March 2021
    • AI planning: Top 3 use cases and benefits by Ronald Meuwsen, Geoffrey De Smet
  • SouJava MOTU
    Worldwide - Thu 15 April 2021
    • Planejamento de Recursos com OptaPlanner by Karina Varela, Otávio Santana
Add event / Archive
Latest blog posts
  • Optimizing COVID-19 vaccination appointment scheduling
    Thu 4 March 2021
     Paul Brown
  • How much faster is Java 15?
    Tue 26 January 2021
     Michal Tomčo
  • Solve the facility location problem
    Fri 9 October 2020
     Jiří Locker
  • OptaPlanner Week 2020 recordings
    Mon 7 September 2020
     Geoffrey De Smet
  • Let’s OptaPlan your jBPM tasks (part 1) - Integrating the two worlds
    Fri 3 July 2020
     Walter Medvedeo
  • AI versus Covid-19: How Java helps nurses and doctors in this fight
    Fri 8 May 2020
     Christopher Chianelli
  • Workflow processes with AI scheduling
    Tue 5 May 2020
     Christopher Chianelli
Blog archive
Latest videos
  • YT Maintenance scheduling
    Wed 24 February 2021
     Julian Cui
  • YT Vaccination appointment scheduling
    Wed 3 February 2021
     Geoffrey De Smet
  • YT Shadow variables
    Tue 19 January 2021
     Geoffrey De Smet
  • YT Domain modeling and design patterns
    Tue 17 November 2020
     Geoffrey De Smet
  • YT Quarkus insights: AI constraint solving
    Tue 20 October 2020
     Geoffrey De Smet
  • YT AI in kotlin
    Wed 23 September 2020
     Geoffrey De Smet
  • YT Planning agility: continuous planning, real-time planning and more
    Thu 3 September 2020
     Geoffrey De Smet
Video archive

KIE projects

  • Drools rule engine
  • OptaPlanner constraint solver
  • jBPM workflow engine

Community

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

Code

  • Build from source
  • Submit a bug
  • License (Apache-2.0)
  • Release notes
  • Upgrade recipes
Sponsored by
Red Hat
More coder content at
Red Hat Developers
© Copyright 2006-2021, Red Hat, Inc. or third-party contributors - Privacy statement - Terms of use - Website info