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

What is OptaPlanner?

OptaPlanner is a constraint solver. It optimizes business resource planning use cases, such as Vehicle Routing, Employee Rostering, Cloud Optimization, Task Assignment, Job Scheduling, Bin Packing and many more. Every organization faces such scheduling puzzles: assign a limited set of constrained resources (employees, assets, time and money) to provide products or services. OptaPlanner delivers more efficient plans to improve service quality and reduce costs.

OptaPlanner is a lightweight, embeddable planning engine. It enables normal Java™ programmers to solve optimization problems efficiently. It is also compatible with other JVM languages (such as Kotlin and Scala). Constraints apply on plain domain objects and can reuse existing code. There’s no need to input them as mathematical equations. Under the hood, OptaPlanner combines sophisticated optimization heuristics and metaheuristics (such as Tabu Search, Simulated Annealing and Late Acceptance) with very efficient score calculation.

OptaPlanner is open source software, released under the Apache Software License. It is written in 100% pure Java™, runs on any JVM and is available in the Maven Central repository too.

- - -
Download
Download OptaPlanner
7.13.0.Final

Try the examples now:

  1. Download the zip and unzip it
  2. On Linux/Mac, run examples/runExamples.sh
    On Windows, run examples/runExamples.bat
Requires Java™ to run.
Documentation
Read documentation
7.13.0.Final

Read the Quick Start chapter.

  • Video
  • Use cases
  • Usage
  • Integration
  • Compatibility
  • Scalability
Use case overview
Usage
Integration
Compatibility
Scalability
  • OptaPlanner Engine
  • Workbench
  • Execution Server

To optimize a problem from Java™ code, add the optaplanner-core jar and call Solver.solve():

// My domain specific class as input
MyRoster problem = ...;

SolverFactory<MyRoster> factory = SolverFactory
    .createFromXmlResource(".../mySolverConfig.xml");
Solver<MyRoster> solver = factory.buildSolver();

// My domain specific class as output
MyRoster solution = solver.solve(problem);

for (MyShift shift : solution.getShifts()) {
  // Each shift is now assigned to an employee
  assertNotNull(shift.getEmployee());
}
Workbench
Execution Server
Latest blog posts
  • Unit testing constraints with business input from Excel or LibreOffice
    Tue 21 August 2018
  • How to defeat gerrymandering and create fair elections
    Wed 25 July 2018
  • A giant leap forward with multithreaded incremental solving
    Tue 3 July 2018
  • Behind the scenes of Red Hat Summit 2018 scheduling
    Wed 23 May 2018
  • 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
Archive
Latest releases
  • 7.13.0.Final released
    Fri 19 October 2018
Upcoming events
  • Devoxx BE
    Antwerp, Belgium - Mon 12 November 2018
    • The battle of 2 automated conference talk scheduling algorithms for Devoxx by Geoffrey De Smet, Piotr Krzemiński, Viktor Tymoshenko
  • Red Hat Summit
    Boston, MA, USA - Tue 7 May 2019
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