OptaPlanner logo
  • Download
  • Learn
    • Documentation
    • Videos

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

Release Notes 6.4

We are happy to announce a 6.4 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
9.44.0.Final
Documentation
Documentation
9.44.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)
7.13 8.13 (and 7.67)

New and noteworthy

Generic API

The SolverFactory and Solver now optionally support a generic type parameter, to avoid the awkward cast to your Solution implementation:

    // Build solver
    SolverFactory<CloudBalance> solverFactory = SolverFactory.createFromXmlResource(
            "org/.../cloudBalancingSolverConfig.xml");
    Solver<CloudBalance> solver = solverFactory.buildSolver();

    // Solve it
    CloudBalance solvedCloudBalance = solver.solve(unsolvedCloudBalance);

The old style still works too, of course.

Statistical benchmarking

Statistical benchmarking allows you to rerun your single benchmarks multiple times. This can be useful to eliminate influences of the environment and verify the results of your benchmarks.

The report visualizes the results of the runs in the "Best score" table, and also compares the results of sub single benchmarks for each problem benchmark in a box plot chart:

sub single benchmark summary statistic

To enable it, add the following line with a positive integer as a parameter to your <inheritedSolverBenchmark> or to individual <solverBenchmark> elements.

<inheritedSolverBenchmark>
  <name>...</name>
  <solver>
    ...
  </solver>
  <subSingleCount>N</subSingleCount>
</inheritedSolverBenchmark>

Nearby Selection memory consumption reduced

When Nearby Selection is used in Local Search, it’s memory consumption is heavily reduced, especially when scaling out:

Nearby Selection memory consumption from 6.3 to 6.4

It can now scale above 10k+ entities on normal hardware, as long as any distributionSizeMaximum is configured.

Furthermore, it’s bootstrap performance is much better too for Local Search.

Kjar and KieContainer support

OptaPlanner now supports kjars, so it can consume a kjar produced by OptaPlanner Workbench or deploy a kjar to OptaPlanner Execution Server at runtime.

A kjar can now contain Solver configurations and the SolverFactory can now load them from it with a KieContainer. This allows to load a solver configuration or score rules at runtime that are not in the original classpath:

        KieServices kieServices = KieServices.Factory.get();
        ReleaseId releaseId = kieServices.newReleaseId("org.nqueens", "nqueens-kjar", "1.0.0");
        KieContainer kieContainer = kieServices.newKieContainer(releaseId);
        SolverFactory<NQueens> solverFactory = SolverFactory.createFromKieContainerXmlResource(
                kieContainer, "org/nqueens/solverConfig.solver");
        Solver<NQueens> solver = solverFactory.buildSolver();

A ksession defined in META-INF/kmodule.xml can now be referenced from a Solver configuration:

<solver>
  ...
  <scoreDirectorFactory>
    ...
    <ksessionName>nqueensKsession</ksessionName>
  </scoreDirectorFactory>
</solver>

New example: Meeting scheduling

Assign meetings of different durations to starting times and rooms.

Also see the blog about time scheduling design patterns.

Other improvements

  • Benchmark warm-ups now run in parallel threads, just like the actual benchmarks.

  • Apache Camel’s camel-optaplanner 2.16 supports async solving, daemon mode and ProblemFactChange processing. Contributed by Bilgin Ibryam.

  • A SolverFactory can now be cloned with cloneSolverFactory() to concurrently configure it dynamically per user request without parsing the solver config XML each time.

  • The examples application has switched to a more modern look and feel.

  • Several design patterns to deal with scheduling in time have been documented in the manual.

  • New Construction Heuristic: Allocate To Value From Queue

  • Various bugs resolved. See our issue tracker.

Workbench and Execution server

As mentioned in our blog, we’ve built first version of OptaPlanner Workbench and OptaPlanner Execution Server. Take a look at what it can do:

To try out OptaPlanner Workbench, download and deploy the KIE Workbench war and create a user with the role plannermgmt. Note that a user with the admin role currently doesn’t see OptaPlanner screens yet.

To try out OptaPlanner Execution Server, download and deploy the KIE Execution Server war and use the KIE and OptaPlanner REST API (both are currently documented in the Drools documentation). It’s enabled by default (although it can be disabled with a configuration property).

Upgrade your code to 6.4

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
  • 9.44.0.Final released
    Wed 6 September 2023
Upcoming events
    Add event / Archive
Latest blog posts
  • Scaling Up Vehicle Routing Problem with planning list variable and Nearby Selector
    Thu 27 April 2023
    Anna Dupliak
  • OptaPlanner 9 has been released
    Mon 24 April 2023
    Radovan Synek
  • OptaPlanner 9 is coming
    Tue 21 February 2023
    Lukáš Petrovický
  • Farewell - a new lead
    Tue 15 November 2022
    Geoffrey De Smet
  • Run OptaPlanner workloads on OpenShift, part II
    Wed 9 November 2022
    Radovan Synek
  • Bavet - A faster score engine for OptaPlanner
    Tue 6 September 2022
    Geoffrey De Smet
  • Run OptaPlanner workloads on OpenShift, part I.
    Thu 9 June 2022
    Radovan Synek
  • Blog archive
Latest videos
  • The Vehicle Routing Problem
    Fri 23 September 2022
    Geoffrey De Smet
  • Introduction to OptaPlanner AI constraint solver
    Thu 25 August 2022
    Anna Dupliak
  • On schedule: Artificial Intelligence plans that meet expectations
    Sat 23 July 2022
    Geoffrey De Smet
  • Host your OptaPlanner app on OpenShift (Kubernetes)
    Mon 7 February 2022
    Geoffrey De Smet
  • OptaPlanner - A fast, easy-to-use, open source AI constraint solver for software developers
    Mon 31 January 2022
  • Order picking planning with OptaPlanner
    Fri 31 December 2021
    Anna Dupliak
  • AI lesson scheduling on Quarkus with OptaPlanner
    Thu 18 November 2021
    Geoffrey De Smet
  • 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
CC by 3.0 | Privacy Policy
Sponsored by Red Hat