anchor.diff:  Depending on the use case, some optimization algorithms perform better than others, but it's impossible to tell in advance. **With OptaPlanner, it is easy to switch the optimization algorithm**, by changing the solver configuration in a few lines of XML or code.
   
   
  +[[requirements]]
  +== Requirements
  +
  +OptaPlanner is _open source_ software, released under http://www.apache.org/licenses/LICENSE-2.0.html[the Apache Software License 2.0].
  +This license is very liberal and allows reuse for commercial purposes.
  +Read http://www.apache.org/foundation/licence-FAQ.html#WhatDoesItMEAN[the layman's explanation].
  +
  +OptaPlanner is 100% pure Java^TM^ and runs on any JVM 1.6 or higher. It <<integration,integrates very easily>> with other Java^TM^ technologies.
  +OptaPlanner is available in <<useWithMavenGradleEtc,the Maven Central Repository>>.
  +
  +Planner works on any Java Virtual Machine and is compatible with Standard Java, Enterprise Java, and all JVM languages.
  +
  +image::Chapter-Planner_introduction/compatibility.png[align="center"]
  +
  +
  +
  +[[governance]]
  +== Governance
  +
  +
  +[[statusOfOptaPlanner]]
  +=== Status of OptaPlanner
  +
  +OptaPlanner is stable, reliable and scaleable. It has been heavily tested with unit, integration, and stress tests, and is used in production throughout the world. One example handles over 50 000 variables with 5000 variables each, multiple constraint types and billions of possible constraint matches. 
  +
  +
  +[[releaseNotes]]
  +=== Release Notes
  +
  +We release a `Beta` or `CR` version every few weeks and a `Final` version every few months. https://www.optaplanner.org/download/releaseNotes/[Read the release notes of each release on our website.]
  +
  +
  +[[backwardsCompatibility]]
  +=== Backwards Compatibility
  +
  +OptaPlanner separates its API and implementation:
  +
  +* **Public API**: All classes in the package namespace *org.optaplanner.core.api* are 100% *backwards compatible* in future releases (especially minor and hotfix releases). In rare circumstances, if the major version number changes, a few specific classes might have a few backwards incompatible changes, but those will be clearly documented in https://www.optaplanner.org/download/upgradeRecipe/[the upgrade recipe].
  +* **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**.
  +* **Implementation classes**: All classes in the package namespace *org.optaplanner.core.impl* are _not_ backwards compatible: they will change in future major or minor releases (but probably not in hotfix releases). https://www.optaplanner.org/download/upgradeRecipe/[The upgrade recipe] describes every such relevant change and on how to quickly deal with it when upgrading to a newer version.
  +
  +
  +[NOTE]
  +====
  +This documentation covers some `impl` classes too.
  +Those documented `impl` classes are reliable and safe to use (unless explicitly marked as experimental in this documentation), but we're just not entirely comfortable yet to write their signatures in stone.
  +====
  +
  +
  +[[communityAndSupport]]
  +=== Community and Support
  +
  +For news and articles, check https://www.optaplanner.org/blog/[our blog], Google+ (https://plus.google.com/+OptaPlannerOrg[OptaPlanner], https://plus.google.com/+GeoffreyDeSmet[Geoffrey De Smet]) and twitter (https://twitter.com/OptaPlanner[OptaPlanner], https://twitter.com/GeoffreyDeSmet[Geoffrey De Smet]).
  +*If OptaPlanner helps you, help us by blogging or tweeting about it!*
  +
  +Public questions are welcome on https://www.optaplanner.org/community/forum.html[our community forum].
  +Bugs and feature requests are welcome in https://issues.jboss.org/browse/PLANNER[our issue tracker].
  +Pull requests are very welcome on GitHub and get priority treatment! By open sourcing your improvements, you 'll benefit from our peer review and from our improvements made on top of your improvements.
  +
  +Red Hat sponsors OptaPlanner development by employing the core team.
  +For enterprise support and consulting, take a look at https://www.optaplanner.org/community/product.html[the BRMS and BPM Suite products] (which contain OptaPlanner) or https://www.redhat.com/en/about/contact/sales[contact Red Hat].
  +
  +
  +[[relationshipWithKie]]
  +=== Relationship with Drools and jBPM
  +
  +OptaPlanner is part of the http://www.kiegroup.org[KIE group of projects].
  +It releases regularly (often once or twice per month) together with the http://www.drools.org/[Drools] rule engine and the http://www.jbpm.org/[jBPM] workflow engine.
  +
  +image::Chapter-Planner_introduction/kieFunctionalityOverview.png[align="center"]
  +
  +See <<architectureOverview,the architecture overview>> to learn more about the optional integration with Drools.
  +
  +
   [[_downloadandruntheexamples]]
   == Download and Run the Examples
   
  
positive.code: [[whatIsOptaPlanner]]
  == What is OptaPlanner?
  
  *https://www.optaplanner.org[OptaPlanner] is a lightweight, embeddable constraint satisfaction engine which optimizes planning problems.* It solves use cases such as:
  
  * **Employee shift rostering**: timetabling nurses, repairmen, ...
  * **Agenda scheduling**: scheduling meetings, appointments, maintenance jobs, advertisements, ...
  * **Educational timetabling**: scheduling lessons, courses, exams, conference presentations, ...
  * **Vehicle routing**: planning vehicles (trucks, trains, boats, airplanes, ...) with freight and/or people
  * **Bin packing**: filling containers, trucks, ships and storage warehouses, but also cloud computers nodes, ...
  * **Job shop scheduling**: planning car assembly lines, machine queue planning, workforce task planning, ...
  * **Cutting stock**: minimizing waste while cutting paper, steel, carpet, ...
  * **Sport scheduling**: planning football leagues, baseball leagues, ...
  * **Financial optimization**: investment portfolio optimization, risk spreading, ...
  
  image::Chapter-Planner_introduction/useCaseOverview.png[align="center"]
  
  Every organization faces planning problems: provide products or services with a limited set of _constrained_ resources (employees, assets, time and money). OptaPlanner optimizes such planning to do more business with less resources.
  This is known as _Constraint Satisfaction Programming_ (which is part of the _Operations Research_ discipline).
  
  image::Chapter-Planner_introduction/whatIsAPlanningProblem.png[align="center"]
  
  OptaPlanner helps normal Java^TM^
   programmers solve constraint satisfaction problems efficiently.
  Under the hood, it combines optimization heuristics and metaheuristics with very efficient score calculation.
  
  
  [[requirements]]
  == Requirements
  
  OptaPlanner is _open source_ software, released under http://www.apache.org/licenses/LICENSE-2.0.html[the Apache Software License 2.0].
  This license is very liberal and allows reuse for commercial purposes.
  Read http://www.apache.org/foundation/licence-FAQ.html#WhatDoesItMEAN[the layman's explanation].
  
  OptaPlanner is 100% pure Java^TM^
   and runs on any JVM 1.6 or higher.
  It <<integration,integrates very easily>> with other Java^TM^
   technologies.
  OptaPlanner is available in <<useWithMavenGradleEtc,the Maven Central Repository>>.
  
  image::Chapter-Planner_introduction/compatibility.png[align="center"]
  
  
  [[whatIsAPlanningProblem]]
  == What is a Planning Problem?
  
  
  [[aPlanningProblemIsNPCompleteOrNPHard]]
  
negative.code: 
  * A _positive soft constraint (or reward)_ should be fulfilled if possible. For example: __Teacher B likes to teach on Monday morning__.
  
  Some basic problems (such as <<nQueens,N queens>>) only have hard constraints.
  Some problems have three or more levels of constraints, for example hard, medium and soft constraints.
  
  These constraints define the _score calculation_ (AKA __fitness function__) of a planning problem.
  Each solution of a planning problem can be graded with a score. **With OptaPlanner, score constraints are written in an Object Oriented language, such as Java^TM^ code or Drools rules**.
  