The fast, Open Source and easy-to-use solver
Extracto
Solve any constraint optimization problem easily, including the Vehicle Routing Problem, Employee Rostering, Maintenance Scheduling and many others.
Contenido
Solve planning and scheduling problems with OptaPlanner
A fast, easy-to-use, open source AI constraint solver for software developers
- Download and unzip.
-
Run
runQuickstarts.sh
(Linux/macOS)
orrunQuickstarts.bat
(Windows).
Requires JDK 11 or higher to run.
What can OptaPlanner do?
OptaPlanner optimizes plans and schedules with hard constraints and soft constraints.
It reduces costs substantially, improves service quality, fulfills employee wishes
and lowers carbon emissions.
Modern mathematical optimization
OptaPlanner is a lightweight, embeddable planning engine. It enables everyday programmers to solve optimization problems efficiently. Constraints apply on plain domain objects and can call existing code. It is Object Oriented Programming (OOP) and Functional Programming (FP) friendly. There’s no need to input constraints as mathematical equations.
OptaPlanner supports
- Continuous planning to weekly publish the schedule, 3 weeks before execution
- Non-disruptive replanning for changes to an already published schedule
- Real-time planning to react on real-time disruptions in the plan within milliseconds
- Overconstrained planning when there are too few resources to cover all the work
- Pinning so the user is still in control over the schedule
Under the hood, OptaPlanner combines sophisticated Artificial Intelligence optimization algorithms (such as Tabu Search, Simulated Annealing, Late Acceptance and other metaheuristics) with very efficient score calculation and other state-of-the-art constraint solving techniques for NP-complete or NP-hard problems.
Code example
To optimize a problem from Java™ code, add the optaplanner-core
jar and call Solver.solve()
:
SolverFactory<MyRoster> factory = SolverFactory.create(...);
// My domain specific class as input
MyRoster problem = ...;
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());
}
-
Thu 27 April 2023
Anna Dupliak
-
Mon 24 April 2023
Radovan Synek
-
Tue 21 February 2023
Lukáš Petrovický
-
Tue 15 November 2022
Geoffrey De Smet
-
Wed 9 November 2022
Radovan Synek
-
Tue 6 September 2022
Geoffrey De Smet
-
Thu 9 June 2022
Radovan Synek
Fuente: OptaPlanner