Toggle navigation OptaPlanner logo
  • Home
  • Download
  • Learn
    • Documentation
    • Videos
    • Slides
    • Training
    • Use cases
    • Testimonials and Case Studies
  • Get Help
  • Source
  • Services
  • @OptaPlanner Fb
Fork me on GitHub

Release Notes 6.1

We are happy to announce the 6.1 Final release of OptaPlanner. OptaPlanner is a lightweight, embeddable planning engine written in Java™ to solve constraint satisfaction problems efficiently. It is released alongside the Drools rule engine and the jBPM workflow engine.

Demo videos

Each of these videos demonstrates an example and/or a special feature:

  • Conference scheduling: Integration with Excel

  • Employee rostering: Web application in the cloud

  • Hospital bed planning: Overconstrained planning

  • Task assigning: Real-time and continuous planning

  • Meeting scheduling: Time grain design pattern

  • Investment portfolio optimization

  • Cheap power time scheduling

  • Exam timetabling: User defined score parametrization

  • Dinner party scheduling: Decision tables

  • Cloud optimization: Decision tables

  • Cloud optimization: Real time planning

  • Course scheduling: Immovable planning entities

  • Project job scheduling: Built-in hard constraints

  • Tennis club scheduling: Fairness and load balancing constraints

  • Vehicle routing with time windows: Shadow variables and real-time planning

  • Vehicle routing scoring: Score function flexibility

  • Employee rostering: Continuous planning

Download
Download
7.7.0.Final
Documentation
Documentation
7.7.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 Software License
Note for Red Hat customers

The BRMS / RHDM version does NOT match the OptaPlanner version:

BRMS / RHDM version OptaPlanner version
6.3 6.4
6.4 6.5
7.0 7.5

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.

Comments

Latest blog posts
  • Scheduling Voxxed Days Zurich 2018 with OptaPlanner
    Mon 19 February 2018
  • Java Reflection, but much faster
    Tue 9 January 2018
  • Does A.I. include constraint solvers?
    Thu 7 September 2017
  • Optimize your problems using KIE Execution Server
    Fri 18 August 2017
  • Visualize the score and the constraints
    Mon 13 March 2017
  • Formula for measuring unfairness
    Fri 3 February 2017
  • How to become US president with less than a quarter of the votes
    Tue 6 December 2016
Archive
Latest releases
  • 7.7.0.Final released
    Wed 4 April 2018
Upcoming events
  • Red Hat Summit
    San Francisco, CA, USA - Tue 8 May 2018
    • Employee shift rostering optimization A.I. with OptaPlanner by Geoffrey De Smet, Christopher Chianelli
    • Consulting Discovery Zone - Constraint Optimizer: "I bet you I'm better than a human" by Justin Goldsmith, Christian Witchger
  • Devoxx BE
    Antwerp, Belgium - Mon 12 November 2018
Add event / 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)
  • Release notes
  • Upgrade recipes
Sponsored by
Red Hat
More coder content at
Red Hat Developers
© Copyright 2006-2018, Red Hat, Inc. or third-party contributors - Privacy statement - Terms of use - Website info