JBoss.orgCommunity Documentation

Drools Planner User Guide

Version 5.3.0.Beta1


1. Planner introduction
1.1. What is Drools Planner?
1.2. Status of Drools Planner
1.3. Getting Drools Planner and running the examples
1.3.1. Getting the release package and running the examples
1.3.2. Get it with maven
1.3.3. Build it from source
1.4. Questions, issues and blog
2. Use cases and examples
2.1. Introduction
2.2. The n queens example
2.2.1. Problem statement
2.2.2. Solution(s)
2.2.3. Screenshot
2.2.4. Problem size
2.2.5. Domain class diagram
2.3. The Manners 2009 example
2.3.1. Problem statement
2.4. The Traveling Salesman Problem (TSP) example
2.4.1. Problem statement
2.5. The Traveling Tournament Problem (TTP) example
2.5.1. Problem statement
2.5.2. Simple and smart implementation
2.5.3. Problem size
2.6. Cloud balancing
2.6.1. Problem statement
2.7. The ITC 2007 curriculum course example
2.7.1. Problem statement
2.8. The ITC 2007 examination example
2.8.1. Problem statement
2.8.2. Problem size
2.8.3. Domain class diagram
2.9. The patient admission scheduling (PAS) example (hospital bed planning)
2.9.1. Problem statement
2.10. The INRC 2010 nurse rostering example
2.10.1. Problem statement
3. Planner configuration
3.1. Types of solvers
3.1.1. Simplex
3.1.2. Genetic algorithms
3.1.3. Local search (tabu search, simulated annealing, ...)
3.2. The size of real world problems
3.3. The Solver interface
3.4. Building a Solver
3.4.1. Environment mode
3.5. The Solution interface
3.5.1. The getScore and setScore methods
3.5.2. The getFacts method
3.5.3. The cloneSolution method
3.6. The starting solution
3.6.1. A simple filler algorithm
3.7. Solving a problem
4. Score calculation with a rule engine
4.1. Rule based score calculation
4.2. Defining the score rules source
4.2.1. A scoreDrl resource on the classpath
4.2.2. A RuleBase (possibly defined by Guvnor)
4.3. Implementing a score rule
4.4. Delta based score calculation
4.5. The ScoreDefinition interface
4.5.1. Implementing a custom Score
4.6. Tips and tricks
5. Optimization algorithms
5.1. Introduction
5.2. Algorithms overview
5.3. SolverPhase
5.4. Which optimization algorithms should I use?
5.5. Custom SolverPhase
6. Exact methods
6.1. Overview
6.2. Brute Force
6.2.1. Algorithm description
6.2.2. Configuration
6.3. Branch and bound
6.3.1. Algorithm description
6.3.2. Configuration
7. Construction heuristics
7.1. Overview
7.2. First Fit
7.2.1. Algorithm description
7.2.2. Configuration
7.3. First Fit Decreasing
7.3.1. Algorithm description
7.3.2. Configuration
7.4. Best Fit
7.4.1. Algorithm description
7.4.2. Configuration
7.5. Best Fit Decreasing
7.5.1. Algorithm description
7.5.2. Configuration
7.6. Cheapest insertion
7.6.1. Algorithm description
7.6.2. Configuration
8. Local search solver
8.1. Overview
8.2. A move
8.3. Move generation
8.4. A step
8.5. Getting stuck in local optima
8.6. Deciding the next step
8.6.1. Selector
8.6.2. Acceptor
8.6.3. Forager
8.7. Best solution
8.8. Termination
8.8.1. TimeMillisSpendTermination
8.8.2. StepCountTermination
8.8.3. ScoreAttainedTermination
8.8.4. UnimprovedStepCountTermination
8.8.5. Combining Terminations
8.8.6. Another thread can ask a Solver to terminate early
8.9. Using a custom Selector, Acceptor, Forager or Termination
9. Benchmarking and tweaking
9.1. Finding the best configuration
9.2. Building a Benchmarker
9.2.1. Building a basic Benchmarker
9.2.2. Warming up the hotspot compiler
9.3. Summary statistics
9.3.1. Best score summary
9.4. Statistics per data set (graph and CSV)
9.4.1. Best score over time statistic (graph and CSV)
9.4.2. Calculate count per second statistic (graph and CSV)
9.4.3. Memory use statistic (graph and CSV)
10. Repeated planning
10.1. Introduction to repeated planning
10.2. Backup planning
10.3. Continuous planning (windowed planning)
10.4. Real-time planning (event based planning)
Index