$ account kiegroup
OptaPlanner is a Java library for constraint satisfaction optimization, solving planning and scheduling problems such as employee rostering, vehicle routing, and cloud resource allocation. The architecture is modular: a core engine provides heuristic search algorithms (construction heuristics, local search, exhaustive search) and incremental score calculation via two constraint stream implementations (Bavet, a custom tuple-based engine, and Drools, a rule-based engine). The public API centers on annotations (@PlanningSolution, @PlanningEntity, @PlanningVariable) and interfaces (ConstraintProvider, SolverFactory, SolverManager). Key entry points include SolverFactory.create() to build a solver, Solver.solve() to run optimization, and ConstraintVerifier for testing constraints. Data flows involve defining a domain model with planning entities and variables, providing constraints as a ConstraintProvider, and the solver iterating through moves while evaluating scores incrementally. External dependencies include Drools (optional), Quarkus or Spring Boot for integration, Jackson/JAXB for serialization, and JPA for persistence. The repository also includes a benchmarking module, a Kubernetes operator, and extensive example applications.