JBoss.orgCommunity Documentation
- 1. OptaPlanner Introduction
- 1.1. What is OptaPlanner?
- 1.2. Requirements
- 1.3. What is a Planning Problem?
- 1.3.1. A Planning Problem is NP-complete or NP-hard
- 1.3.2. A Planning Problem Has (Hard and Soft) Constraints
- 1.3.3. A Planning Problem Has a Huge Search Space
- 1.4. Download and Run the Examples
- 1.4.1. Get the Release .zip and Run the Examples
- 1.4.2. Run the Examples in an IDE (IntelliJ, Eclipse, NetBeans)
- 1.4.3. Use OptaPlanner with Maven, Gradle, Ivy, Buildr or ANT
- 1.4.4. Build OptaPlanner from Source
- 1.5. Governance
- 1.5.1. Status of OptaPlanner
- 1.5.2. Backwards Compatibility
- 1.5.3. Community and Support
- 1.5.4. Relationship with Drools and jBPM
- 2. Quick Start
- 2.1. Cloud Balancing Tutorial
- 2.1.1. Problem Description
- 2.1.2. Problem Size
- 2.1.3. Domain Model Design
- 2.1.4. Main Method
- 2.1.5. Solver Configuration
- 2.1.6. Domain Model Implementation
- 2.1.7. Score Configuration
- 2.1.8. Beyond this Tutorial
- 3. Use Cases and Examples
- 3.1. Examples Overview
- 3.2. Basic Examples
- 3.2.1. N Queens
- 3.2.2. Cloud Balancing
- 3.2.3. Traveling Salesman (TSP - Traveling Salesman Problem)
- 3.2.4. Dinner Party
- 3.2.5. Tennis Club Scheduling
- 3.2.6. Meeting Scheduling
- 3.3. Real Examples
- 3.3.1. Course Timetabling (ITC 2007 Track 3 - Curriculum Course Scheduling)
- 3.3.2. Machine Reassignment (Google ROADEF 2012)
- 3.3.3. Vehicle Routing
- 3.3.4. Project Job Scheduling
- 3.3.5. Hospital Bed Planning (PAS - Patient Admission Scheduling)
- 3.4. Difficult Examples
- 3.4.1. Exam Timetabling (ITC 2007 track 1 - Examination)
- 3.4.2. Employee Rostering (INRC 2010 - Nurse Rostering)
- 3.4.3. Traveling Tournament Problem (TTP)
- 3.4.4. Cheap Time Scheduling
- 3.4.5. Investment asset class allocation (portfolio optimization)
- 4. Planner Configuration
- 4.1. Overview
- 4.2. Solver Configuration
- 4.2.1. Solver Configuration by XML
- 4.2.2. Solver Configuration by Java API
- 4.2.3. Annotations Configuration
- 4.3. Model a Planning Problem
- 4.3.1. Is This Class a Problem Fact or Planning Entity?
- 4.3.2. Problem Fact
- 4.3.3. Planning Entity
- 4.3.4. Planning Variable
- 4.3.5. Planning Value and Planning Value Range
- 4.3.6. Shadow Variable
- 4.3.7. Planning Problem and Planning Solution
- 4.4. Use the
Solver
- 4.4.1. The
Solver
Interface - 4.4.2. Solving a Problem
- 4.4.3. Environment Mode: Are There Bugs in my Code?
- 4.4.4. Logging Level: What is the
Solver
Doing? - 4.4.5. Random Number Generator
- 5. Score Calculation
- 5.1. Score Terminology
- 5.1.1. What is a Score?
- 5.1.2. Score Constraint Signum (Positive or Negative)
- 5.1.3. Score Constraint Weight
- 5.1.4. Score Constraint Level (hard, soft, ...)
- 5.1.5. Pareto Scoring (AKA Multi-objective Optimization Scoring)
- 5.1.6. Combining Score Techniques
- 5.1.7.
Score
interface - 5.1.8. Avoid Floating Point Numbers in Score Calculation
- 5.2. Choose a Score Definition
- 5.2.1. SimpleScore
- 5.2.2. HardSoftScore (Recommended)
- 5.2.3. HardMediumSoftScore
- 5.2.4. BendableScore
- 5.2.5. Implementing a Custom Score
- 5.3. Calculate the
Score
- 5.3.1. Score Calculation Types
- 5.3.2. Easy Java Score Calculation
- 5.3.3. Incremental Java Score Calculation
- 5.3.4. Drools Score Calculation
- 5.3.5. InitializingScoreTrend
- 5.3.6. Invalid Score Detection
- 5.4. Score Calculation Performance Tricks
- 5.4.1. Overview
- 5.4.2. Average Calculation Count Per Second
- 5.4.3. Incremental Score Calculation (with Deltas)
- 5.4.4. Avoid Calling Remote Services During Score Calculation
- 5.4.5. Pointless Constraints
- 5.4.6. Built-in Hard Constraint
- 5.4.7. Other Score Calculation Performance Tricks
- 5.4.8. Score Trap
- 5.4.9. stepLimit Benchmark
- 5.4.10. Fairness Score Constraints
- 5.5. Explaining the Score: Using Score Calculation Outside the
Solver
- 6. Optimization Algorithms
- 6.1. Search Space Size in the Real World
- 6.2. Does Planner Find the Optimal Solution?
- 6.3. Architecture Overview
- 6.4. Optimization Algorithms Overview
- 6.5. Which Optimization Algorithms Should I Use?
- 6.6. Power tweaking or default parameter values
- 6.7. Solver Phase
- 6.8. Scope Overview
- 6.9. Termination
- 6.9.1. TimeMillisSpentTermination
- 6.9.2. UnimprovedTimeMillisSpentTermination
- 6.9.3. BestScoreTermination
- 6.9.4. BestScoreFeasibleTermination
- 6.9.5. StepCountTermination
- 6.9.6. UnimprovedStepCountTermination
- 6.9.7. CalculateCountTermination
- 6.9.8. Combining Multiple Terminations
- 6.9.9. Asynchronous Termination from Another Thread
- 6.10. SolverEventListener
- 6.11. Custom Solver Phase
- 7.
Move
and Neighborhood Selection - 7.1.
Move
and Neighborhood Introduction - 7.1.1. What is a
Move
? - 7.1.2. What is a
MoveSelector
? - 7.1.3. Subselecting of Entities, Values and Other Moves
- 7.2. Generic MoveSelectors
- 7.2.1.
changeMoveSelector
- 7.2.2. swapMoveSelector
- 7.2.3. pillarChangeMoveSelector
- 7.2.4. pillarSwapMoveSelector
- 7.2.5. tailChainSwapMoveSelector or 2-opt (chained variables only)
- 7.2.6. subChainChangeMoveSelector (chained variables only)
- 7.2.7. subChainSwapMoveSelector (chained variables only)
- 7.3. Combining Multiple
MoveSelector
s - 7.3.1. unionMoveSelector
- 7.3.2. cartesianProductMoveSelector
- 7.4. EntitySelector
- 7.5. ValueSelector
- 7.6. General
Selector
Features - 7.6.1.
CacheType
: Create Moves Ahead of Time or Just In Time - 7.6.2. SelectionOrder: Original, Sorted, Random, Shuffled or Probabilistic
- 7.6.3. Recommended Combinations of
CacheType
and SelectionOrder
- 7.6.4. Filtered Selection
- 7.6.5. Sorted Selection
- 7.6.6. Probabilistic Selection
- 7.6.7. Limited Selection
- 7.6.8. Mimic Selection (Record/Replay)
- 7.6.9. Nearby Selection
- 7.7. Custom Moves
- 7.7.1. Which Move Types Might be Missing in my Implementation?
- 7.7.2. Custom Moves Introduction
- 7.7.3. The Interface
Move
- 7.7.4.
MoveListFactory
: the Easy Way to Generate Custom Moves - 7.7.5.
MoveIteratorFactory
: Generate Custom Moves Just in Time
- 8. Exhaustive Search
- 8.1. Overview
- 8.2. Brute Force
- 8.2.1. Algorithm Description
- 8.2.2. Configuration
- 8.3. Branch And Bound
- 8.3.1. Algorithm Description
- 8.3.2. Configuration
- 8.4. Scalability of Exhaustive Search
- 9. Construction Heuristics
- 9.1. Overview
- 9.2. First Fit
- 9.2.1. Algorithm Description
- 9.2.2. Configuration
- 9.3. First Fit Decreasing
- 9.3.1. Algorithm Description
- 9.3.2. Configuration
- 9.4. Weakest Fit
- 9.4.1. Algorithm Description
- 9.4.2. Configuration
- 9.5. Weakest Fit Decreasing
- 9.5.1. Algorithm Description
- 9.5.2. Configuration
- 9.6. Strongest Fit
- 9.6.1. Algorithm Description
- 9.6.2. Configuration
- 9.7. Strongest Fit Decreasing
- 9.7.1. Algorithm Description
- 9.7.2. Configuration
- 9.8. Allocate Entity From Queue
- 9.8.1. Algorithm Description
- 9.8.2. Configuration
- 9.8.3. Multiple Variables
- 9.8.4. Multiple Entity Classes
- 9.8.5. Pick Early Type
- 9.9. Allocate To Value From Queue
- 9.9.1. Algorithm Description
- 9.9.2. Configuration
- 9.10. Cheapest Insertion
- 9.10.1. Algorithm Description
- 9.10.2. Configuration
- 9.11. Regret Insertion
- 9.11.1. Algorithm Description
- 9.11.2. Configuration
- 9.12. Allocate From Pool
- 9.12.1. Algorithm Description
- 9.12.2. Configuration
- 10. Local Search
- 10.1. Overview
- 10.2. Local Search Concepts
- 10.2.1. Step by Step
- 10.2.2. Decide the Next Step
- 10.2.3. Acceptor
- 10.2.4. Forager
- 10.3. Hill Climbing (Simple Local Search)
- 10.3.1. Algorithm Description
- 10.3.2. Stuck in Local Optima
- 10.3.3. Configuration
- 10.4. Tabu Search
- 10.4.1. Algorithm Description
- 10.4.2. Configuration
- 10.5. Simulated Annealing
- 10.5.1. Algorithm Description
- 10.5.2. Configuration
- 10.6. Late Acceptance
- 10.6.1. Algorithm Description
- 10.6.2. Configuration
- 10.7. Step Counting Hill Climbing
- 10.7.1. Algorithm Description
- 10.7.2. Configuration
- 10.8. Strategic Oscillation
- 10.8.1. Algorithm Description
- 10.8.2. Configuration
- 10.9. Using a Custom Termination, MoveSelector, EntitySelector, ValueSelector or Acceptor
- 11. Evolutionary Algorithms
- 11.1. Overview
- 11.2. Evolutionary Strategies
- 11.3. Genetic Algorithms
- 12. Hyperheuristics
- 12.1. Overview
- 13. Partitioned Search
- 13.1. Overview
- 14. Benchmarking And Tweaking
- 14.1. Find The Best
Solver
Configuration - 14.2. Benchmark Configuration
- 14.2.1. Add Dependency On
optaplanner-benchmark
- 14.2.2. Build And Run A
PlannerBenchmark
- 14.2.3. SolutionFileIO: Input And Output Of Solution Files
- 14.2.4. Warming Up The HotSpot Compiler
- 14.2.5. Benchmark Blueprint: A Predefined Configuration
- 14.2.6. Write The Output Solution Of Benchmark Runs
- 14.2.7. Benchmark Logging
- 14.3. Benchmark Report
- 14.3.1. HTML Report
- 14.3.2. Ranking The
Solver
s
- 14.4. Summary Statistics
- 14.4.1. Best Score Summary (Graph And Table)
- 14.4.2. Best Score Scalability Summary (Graph)
- 14.4.3. Best Score Distribution Summary (Graph)
- 14.4.4. Winning Score Difference Summary (Graph And Table)
- 14.4.5. Worst Score Difference Percentage (ROI) Summary (Graph and Table)
- 14.4.6. Average Calculation Count Summary (Graph and Table)
- 14.4.7. Time Spent Summary (Graph And Table)
- 14.4.8. Time Spent Scalability Summary (Graph)
- 14.4.9. Best Score Per Time Spent Summary (Graph)
- 14.5. Statistic Per Dataset (Graph And CSV)
- 14.5.1. Enable A Problem Statistic
- 14.5.2. Best Score Over Time Statistic (Graph And CSV)
- 14.5.3. Step Score Over Time Statistic (Graph And CSV)
- 14.5.4. Calculate Count Per Second Statistic (Graph And CSV)
- 14.5.5. Best Solution Mutation Over Time Statistic (Graph And CSV)
- 14.5.6. Move Count Per Step Statistic (Graph And CSV)
- 14.5.7. Memory Use Statistic (Graph And CSV)
- 14.6. Statistic Per Single Benchmark (Graph And CSV)
- 14.6.1. Enable A Single Statistic
- 14.6.2. Constraint Match Total Best Score Over Time Statistic (Graph And CSV)
- 14.6.3. Constraint Match Total Step Score Over Time Statistic (Graph And CSV)
- 14.6.4. Picked Move Type Best Score Diff Over Time Statistic (Graph And CSV)
- 14.6.5. Picked Move Type Step Score Diff Over Time Statistic (Graph And CSV)
- 14.7. Advanced Benchmarking
- 14.7.1. Benchmarking Performance Tricks
- 14.7.2. Statistical Benchmarking
- 14.7.3. Template Based Benchmarking And Matrix Benchmarking
- 14.7.4. Benchmark Report Aggregation
- 15. Repeated Planning
- 15.1. Introduction to Repeated Planning
- 15.2. Backup Planning
- 15.3. Overconstrained Planning
- 15.4. Continuous Planning (Windowed Planning)
- 15.4.1. Immovable Planning Entities
- 15.4.2. Nonvolatile Replanning to minimize disruption (Semi-movable Planning Entities)
- 15.5. Real-time Planning
- 15.5.1.
ProblemFactChange
- 15.5.2. Daemon:
solve()
Does Not Return
- 16. Integration
- 16.1. Overview
- 16.2. Persistent Storage
- 16.2.1. Database: JPA and Hibernate
- 16.2.2. XML or JSON: XStream
- 16.2.3. XML or JSON: JAXB
- 16.3. SOA and ESB
- 16.3.1. Camel and Karaf
- 16.4. Other Environments
- 16.4.1. JBoss Modules, WildFly and JBoss EAP
- 16.4.2. OSGi
- 16.4.3. Android
- 16.5. Integration with Human Planners (Politics)
- 17. Design Patterns
- 17.1. Design Patterns Introduction
- 17.2. Assigning Time to Planning Entities
- 17.2.1. Timeslot Pattern: Assign to a Fixed-Length Timeslot
- 17.2.2. TimeGrain Pattern: Assign to a Starting TimeGrain
- 17.2.3. Chained Through Time Pattern: Assign in a Chain that Determines Starting Time
- 17.3. Multi-stage planning
- 18. Development
- 18.1. Methodology Overview
- 18.2. Development guidelines