CINXE.COM
OptaPlanner - The fast, Open Source and easy-to-use solver
<!DOCTYPE html> <html lang="en"> <head> <script id="dpal" src="https://www.redhat.com/dtm.js" type="text/javascript"></script> <script async src="https://www.googletagmanager.com/gtag/js?id=G-KJ89NSGDQ9"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-KJ89NSGDQ9'); </script> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type"> <meta content="width=device-width, initial-scale=1" name="viewport"> <title>OptaPlanner - The fast, Open Source and easy-to-use solver</title> <meta content="Solve any constraint optimization problem easily, including the Vehicle Routing Problem, Employee Rostering, Maintenance Scheduling and many others." name="description"> <meta content="metaheuristic, heuristic, constraint satisfaction, constraint programming, operations research, NP-complete, NP-hard, optimization, planning, scheduling, java, open source, software, library, solver, tabu search, simulated annealing, pareto" name="keywords"> <link href="https://www.optaplanner.org/" rel="canonical"> <meta content="7maFZB6ae01GhEGx5Go9FO7fnTHZhY--_9rkLLawXbk" name="google-site-verification"> <meta content="The fast, Open Source and easy-to-use solver" property="og:title"> <meta content="Solve any constraint optimization problem easily, including the Vehicle Routing Problem, Employee Rostering, Maintenance Scheduling and many others." property="og:description"> <meta content="https://www.optaplanner.org/" property="og:url"> <meta content="OptaPlanner" property="og:site_name"> <meta content="website" property="og:type"> <meta content="https://www.optaplanner.org/headerFooter/optaPlannerIcon.png" property="og:image"> <meta content="summary" name="twitter:card"> <meta content="@OptaPlanner" name="twitter:site"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/css/bootstrap.min.css" integrity="sha384-F3w7mX95PdgyTmZZMECAngseQB83DfGTowi0iMjiWaeVhAn4FJkqJByhZMI3AhiU" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@fortawesome/fontawesome-free@5.15.4/css/all.min.css" integrity="sha256-mUZM63G8m73Mcidfrv5E+Y61y7a12O5mW4ezU3bxqW4=" crossorigin="anonymous"> <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/styles/default.min.css" integrity="sha256-CGf39SzxAmEe09Ojoh16/2xTRNleX9wBZcEXVnNqwSM=" crossorigin="anonymous"> <link rel="stylesheet" href="website/optaplannerWebsite.css"> <link href="favicon.ico" rel="shortcut icon"> </head> <body> <nav class="navbar sticky-top navbar-expand-lg navbar-light bg-light border-bottom shadow"> <div class="container"> <a class="navbar-brand" href=""> <img alt="OptaPlanner logo" src="headerFooter/optaPlannerLogo200px.png"> </a> <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarContent" aria-controls="navbarContent" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <div class="collapse navbar-collapse" id="navbarContent"> <ul class="navbar-nav me-auto mb-2 mb-lg-0"> <li class="nav-item"><a class="nav-link" href="download/download.html">Download</a></li> <li class="nav-item dropdown"> <a class="nav-link dropdown-toggle" href="#" id="navbarLearn" role="button" data-bs-toggle="dropdown" aria-expanded="false"> Learn </a> <ul class="dropdown-menu" aria-labelledby="navbarLearn"> <li><a class="dropdown-item" href="learn/documentation.html">Documentation</a></li> <li><a class="dropdown-item" href="learn/video.html">Videos</a></li> <li><hr class="dropdown-divider"></li> <li><a class="dropdown-item" href="learn/useCases/index.html">Use cases</a></li> <li><a class="dropdown-item" href="compatibility/index.html">Compatibility</a></li> <li><a class="dropdown-item" href="learn/testimonialsAndCaseStudies.html">Testimonials and case studies</a></li> </ul> </li> <li class="nav-item"><a class="nav-link" href="community/getHelp.html">Get help</a></li> <li class="nav-item"><a class="nav-link" href="blog/">Blog</a></li> <li class="nav-item"><a class="nav-link" href="code/sourceCode.html">Source</a></li> <li class="nav-item"><a class="nav-link" href="community/team.html">Team</a></li> <li class="nav-item"><a class="nav-link" href="product/services.html">Services</a></li> </ul> <ul class="navbar-nav"> <li class="p-2"><a aria-label="Star OptaPlanner on GitHub" class="github-button" data-show-count="true" href="https://github.com/kiegroup/optaplanner">Star</a></li> <li class="p-1"><a href="https://twitter.com/OptaPlanner" target="_blank" title="Follow OptaPlanner on Twitter"><img alt="T" src="headerFooter/twitterLogo.png"></a></li> <li class="p-1"><a href="https://www.linkedin.com/showcase/optaplanner" target="_blank" title="Follow OptaPlanner on LinkedIn"><img alt="L" src="headerFooter/linkedInLogo.png"></a></li> <li class="p-1"><a href="https://www.facebook.com/OptaPlanner" target="_blank" title="Follow OptaPlanner on Facebook"><img alt="F" src="headerFooter/facebookLogo.png"></a></li> <li class="p-1"><a href="https://www.youtube.com/channel/UCcpkOKpujFlM67D2h0RdaeQ" target="_blank" title="OptaPlanner YouTube channel"><img alt="YT" src="headerFooter/youtubeLogo.png" style="height: 16px"></a></li> </ul> </div> </div> </nav> <div class="body-without-header-footer"> <div class="forkMeOnGithub"> <a href="https://github.com/kiegroup/optaplanner"> <img alt="Fork me on GitHub" src="headerFooter/forkMeOnGithub.png"> </a> </div> <div class="container py-4"> <div class="row"> <div class="col-md-7"> <h1>Solve planning and scheduling problems with OptaPlanner</h1> <p class="lead">A fast, easy-to-use, open source AI constraint solver for software developers</p> <div class="d-flex justify-content-center" style="width: auto;"> <div class="card" style="cursor: pointer"> <a data-bs-toggle="modal" data-bs-target="#videoModal" data-youtube-id="bIvt9z-zVHo" data-video-title="OptaPlanner - A fast, easy-to-use, open source AI constraint solver for software developers"> <img class="card-img-top ratio ratio-16x9" src="https://img.youtube.com/vi/bIvt9z-zVHo/mqdefault.jpg" alt="Video thumbnail"> <div class="card-img-overlay d-flex justify-content-center align-items-center"> <i class="fas fa-play-circle fa-3x text-white bg-dark bg-opacity-25 rounded-pill p-1"></i> </div> </a> </div> </div> </div> <div class="col-md-5"> <div class="card bg-light mb-4"> <div class="text-center mt-2"><a class="btn btn-lg btn-success versionedButton" href="https://download.jboss.org/optaplanner/release/9.44.0.Final/optaplanner-distribution-9.44.0.Final.zip"><img alt="Download" src="download/download.png"> <div> <span>Try OptaPlanner</span><br/> <span class="small">Download 9.44.0.Final</span> </div> </a></div> <div class="card-body"> <ol class="mb-1"> <li>Download and unzip.</li> <li> Run <code>runQuickstarts.sh</code> (Linux/macOS)<br/> or <code>runQuickstarts.bat</code> (Windows). </li> </ol> <div class="text-center small"> Requires <a href="https://adoptium.net">JDK 11 or higher</a> to run. </div> </div> </div> <div class="card bg-light mb-4"> <div class="text-center mt-2"><a class="btn btn-lg btn-primary versionedButton" href="https://www.optaplanner.org/docs/optaplanner/latest/quickstart/quickstart.html"><img alt="Documentation" src="learn/documentation.png"> <div> <span>Get started</span><br/> <span class="small">User guide 9.44.0.Final</span> </div> </a></div> <div class="card-body"> <div class="text-center"> <a href="https://github.com/kiegroup/optaplanner-quickstarts"><i class="fab fa-github me-1 text-black"></i>Clone the Quickstarts code.</a> </div> </div> </div> <div class="card bg-light mb-4"> <div class="text-center p-4"> <a href="https://www.optaplanner.org/download/download.html#optaplanner8">Need legacy OptaPlanner 8?</a> </div> </div> </div> </div> <div class="mb-5"> <h2 class="mb-2">What can OptaPlanner do?</h2> <p>OptaPlanner optimizes plans and schedules with <i>hard constraints</i> and <i>soft constraints</i>.<br/> It <b>reduces costs</b> substantially, improves <b>service quality</b>, fulfills <b>employee wishes</b> and <b>lowers carbon emissions</b>.</p> <div class="row row-cols-2 row-cols-md-3 row-cols-lg-4 g-4"> <div class="col"> <div class="card h-100"> <div class="card-body d-flex flex-column"> <h5 class="card-title"><i class="fas fa-truck me-2"></i>Vehicle routing (VRP)</h5> <p class="card-text">Quicker routes for a fleet of vehicles.</p> <a class="stretched-link mt-auto" href="learn/useCases/vehicleRoutingProblem.html">Learn more</a> </div> </div> </div> <div class="col"> <div class="card h-100"> <div class="card-body d-flex flex-column"> <h5 class="card-title"><i class="fas fa-user-nurse me-2"></i>Employee rostering</h5> <p class="card-text">Assign shifts to employees by skills and availability.</p> <a class="stretched-link mt-auto" href="learn/useCases/employeeRostering.html">Learn more</a> </div> </div> </div> <div class="col"> <div class="card h-100"> <div class="card-body d-flex flex-column"> <h5 class="card-title"><i class="fas fa-wrench me-2"></i>Maintenance scheduling</h5> <p class="card-text">Timely upkeep of machinery and equipment.</p> <a class="stretched-link mt-auto" href="learn/useCases/maintenanceScheduling.html">Learn more</a> </div> </div> </div> <div class="col"> <div class="card h-100"> <div class="card-body d-flex flex-column"> <h5 class="card-title"><i class="fas fa-microphone me-2"></i>Conference scheduling</h5> <p class="card-text">Schedule speakers and talks by availability and topic.</p> <a class="stretched-link mt-auto" href="learn/useCases/conferenceScheduling.html">Learn more</a> </div> </div> </div> <div class="col"> <div class="card h-100"> <div class="card-body d-flex flex-column"> <h5 class="card-title"><i class="fas fa-graduation-cap me-2"></i>School timetabling</h5> <p class="card-text">Compacter schedules for teachers and students.</p> <a class="stretched-link mt-auto" href="learn/useCases/schoolTimetabling.html">Learn more</a> </div> </div> </div> <div class="col"> <div class="card h-100"> <div class="card-body d-flex flex-column"> <h5 class="card-title"><i class="fas fa-tasks me-2"></i>Task assignment</h5> <p class="card-text">Assign tasks by priority, skills and affinity.</p> <a class="stretched-link mt-auto" href="learn/useCases/taskAssignmentOptimization.html">Learn more</a> </div> </div> </div> <div class="col"> <div class="card h-100"> <div class="card-body d-flex flex-column"> <h5 class="card-title"><i class="fas fa-cloud me-2"></i>Cloud optimization</h5> <p class="card-text">Bin packing and defragmentation of cloud resources.</p> <a class="stretched-link mt-auto" href="learn/useCases/cloudOptimization.html">Learn more</a> </div> </div> </div> <div class="col"> <div class="card h-100"> <div class="card-body d-flex flex-column"> <h5 class="card-title"><i class="fas fa-industry me-2"></i>Job shop scheduling</h5> <p class="card-text">Reduce makespan for assembly lines.</p> <a class="stretched-link mt-auto" href="learn/useCases/jobShopScheduling.html">Learn more</a> </div> </div> </div> </div> </div> <div class="row mb-4"> <div class="col-md-6"> <h2>Modern mathematical optimization</h2> <p>OptaPlanner is <strong>a lightweight, embeddable planning engine</strong>. 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.</p> <span>OptaPlanner supports</span> <ul> <li><b>Continuous planning</b> to weekly publish the schedule, 3 weeks before execution</li> <li><b>Non-disruptive replanning</b> for changes to an already published schedule</li> <li><b>Real-time planning</b> to react on real-time disruptions in the plan within milliseconds</li> <li><b>Overconstrained planning</b> when there are too few resources to cover all the work</li> <li><b>Pinning</b> so the user is still in control over the schedule</li> </ul> <p>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.</p> </div> <div class="col-md-6"> <h2>Compatibility</h2> <span>OptaPlanner works directly from:</span> <ul> <li><a href="compatibility/java.html">Java<i class="fab fa-java ms-1"></i></a></li> <li><a href="compatibility/kotlin.html">Kotlin</a></li> <li><a href="compatibility/scala.html">Scala</a></li> <li><a href="compatibility/python.html">Python<i class="fab fa-python ms-1"></i> (experimental)</a></li> </ul> <span>OptaPlanner integrates seamlessly with:</span> <ul> <li><a href="compatibility/quarkus.html">Quarkus</a></li> <li><a href="compatibility/springBoot.html">Spring Boot</a></li> </ul> <span>OptaPlanner runs on:</span> <ul> <li><a href="compatibility/kubernetes-openshift.html">Kubernetes and OpenShift</a></li> <li>All major clouds</li> </ul> <p>OptaPlanner is <a href="code/license.html">open source software</a>, released under <a href="code/license.html">the Apache License</a>.</p> </div> </div> <div class="mb-4"> <h2>Code example</h2> <div class="row"> <div class="paragraph"> <p>To optimize a problem from Java™ code, add the <code>optaplanner-core</code> jar and call <code>Solver.solve()</code>:</p> </div> <div class="listingblock"> <div class="content"> <pre class="highlight"><code class="language-java" data-lang="java">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());
}</code></pre> </div> </div> <div class="paragraph"> <p><a href="https://github.com/kiegroup/optaplanner-quickstarts/tree/stable/hello-world#readme"><i class="fab fa-github me-1 text-black"></i>Try the hello world application.</a></p> </div> </div> </div> <div class="row"> <div class="col-md-4"> <div class="card mb-4"> <div class="card-header">Latest release</div> <div class="card-body"> <ul class="list-unstyled mb-0"> <li> <div class="title"> <a href="docs/optaplanner/latest/release-notes/release-notes.html#releaseNotes-9.x""> 9.44.0.Final released </a> </div> <div class="small"> Wed 6 September 2023 </div> </li> </ul> </div> </div> <div class="card mb-4"> <div class="card-header">Upcoming events</div> <div class="card-body"> <ul class="list-unstyled"> <div class="small float-end"> <a href="https://github.com/kiegroup/optaplanner-website/blob/main/optaplanner-website-root/data/events.yml">Add event</a> / <a href="community/eventsArchive.html">Archive</a> </div> </ul> </div> </div> </div> <div class="col-md-4"> <div class="card mb-4"> <div class="card-header">Latest blog posts</div> <div class="card-body"> <ul class="list-unstyled"> <li class="mb-2"> <div class="title"> <a href="blog/2023/04/27/BoostVRPListSelectorScalability.html">Scaling Up Vehicle Routing Problem with planning list variable and Nearby Selector</a> </div> <div class="small">Thu 27 April 2023</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/54cd5de3bdaf21a942e8d9d5fe95f647?s=20&d=mm"/> <span class="align-middle">Anna Dupliak</span> </span> </li> <li class="mb-2"> <div class="title"> <a href="blog/2023/04/24/OptaPlanner-9-released.html">OptaPlanner 9 has been released</a> </div> <div class="small">Mon 24 April 2023</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/f1b0cd1c06b5697dbc91f02ea00f3090?s=20&d=mm"/> <span class="align-middle">Radovan Synek</span> </span> </li> <li class="mb-2"> <div class="title"> <a href="blog/2023/02/21/OptaPlanner-9-is-coming.html">OptaPlanner 9 is coming</a> </div> <div class="small">Tue 21 February 2023</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/c950743f532471ac34022e92193563c3?s=20&d=mm"/> <span class="align-middle">Lukáš Petrovický</span> </span> </li> <li class="mb-2"> <div class="title"> <a href="blog/2022/11/15/Farewell.html">Farewell - a new lead</a> </div> <div class="small">Tue 15 November 2022</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/27147a6679a4bfb6461ff1c0ae10473e?s=20&d=mm"/> <span class="align-middle">Geoffrey De Smet</span> </span> </li> <li class="mb-2"> <div class="title"> <a href="blog/2022/11/09/dynamic-scaling-of-optaplanner-workloads-on-openshift.html">Run OptaPlanner workloads on OpenShift, part II</a> </div> <div class="small">Wed 9 November 2022</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/f1b0cd1c06b5697dbc91f02ea00f3090?s=20&d=mm"/> <span class="align-middle">Radovan Synek</span> </span> </li> <li class="mb-2"> <div class="title"> <a href="blog/2022/09/01/Bavet-a-faster-score-engine-for-OptaPlanner.html">Bavet - A faster score engine for OptaPlanner</a> </div> <div class="small">Tue 6 September 2022</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/27147a6679a4bfb6461ff1c0ae10473e?s=20&d=mm"/> <span class="align-middle">Geoffrey De Smet</span> </span> </li> <li class="mb-2"> <div class="title"> <a href="blog/2022/06/09/RunOptaPlannerWorkloadOnOpenShift.html">Run OptaPlanner workloads on OpenShift, part I.</a> </div> <div class="small">Thu 9 June 2022</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/f1b0cd1c06b5697dbc91f02ea00f3090?s=20&d=mm"/> <span class="align-middle">Radovan Synek</span> </span> </li> <div class="small float-end"> <a href="blog/index.html">Blog archive</a> </div> </ul> </div> </div> </div> <div class="col-md-4"> <div class="card mb-4"> <div class="card-header">Latest videos</div> <div class="card-body"> <ul class="list-unstyled"> <li class="mb-2"> <a style="cursor: pointer" data-bs-toggle="modal" data-bs-target="#videoModal" data-youtube-id="3Bgt4xC4a1M" data-video-title="The Vehicle Routing Problem"> <span><i class="fas fa-play-circle"></i></span> <span class="align-text-middle link-primary">The Vehicle Routing Problem</span> </a> <div class="small">Fri 23 September 2022</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/27147a6679a4bfb6461ff1c0ae10473e?s=20&d=mm"/> <span class="align-middle">Geoffrey De Smet</span> </span> </li> <li class="mb-2"> <a style="cursor: pointer" data-bs-toggle="modal" data-bs-target="#videoModal" data-youtube-id="A-TyjsHJTNM" data-video-title="Introduction to OptaPlanner AI constraint solver"> <span><i class="fas fa-play-circle"></i></span> <span class="align-text-middle link-primary">Introduction to OptaPlanner AI constraint solver</span> </a> <div class="small">Thu 25 August 2022</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/54cd5de3bdaf21a942e8d9d5fe95f647?s=20&d=mm"/> <span class="align-middle">Anna Dupliak</span> </span> </li> <li class="mb-2"> <a style="cursor: pointer" data-bs-toggle="modal" data-bs-target="#videoModal" data-youtube-id="ZEOf_GCdFB8" data-video-title="On schedule: Artificial Intelligence plans that meet expectations"> <span><i class="fas fa-play-circle"></i></span> <span class="align-text-middle link-primary">On schedule: Artificial Intelligence plans that meet expectations</span> </a> <div class="small">Sat 23 July 2022</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/27147a6679a4bfb6461ff1c0ae10473e?s=20&d=mm"/> <span class="align-middle">Geoffrey De Smet</span> </span> </li> <li class="mb-2"> <a style="cursor: pointer" data-bs-toggle="modal" data-bs-target="#videoModal" data-youtube-id="kFoaf696VpA" data-video-title="Host your OptaPlanner app on OpenShift (Kubernetes)"> <span><i class="fas fa-play-circle"></i></span> <span class="align-text-middle link-primary">Host your OptaPlanner app on OpenShift (Kubernetes)</span> </a> <div class="small">Mon 7 February 2022</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/27147a6679a4bfb6461ff1c0ae10473e?s=20&d=mm"/> <span class="align-middle">Geoffrey De Smet</span> </span> </li> <li class="mb-2"> <a style="cursor: pointer" data-bs-toggle="modal" data-bs-target="#videoModal" data-youtube-id="bIvt9z-zVHo" data-video-title="OptaPlanner - A fast, easy-to-use, open source AI constraint solver for software developers"> <span><i class="fas fa-play-circle"></i></span> <span class="align-text-middle link-primary">OptaPlanner - A fast, easy-to-use, open source AI constraint solver for software developers</span> </a> <div class="small">Mon 31 January 2022</div> </li> <li class="mb-2"> <a style="cursor: pointer" data-bs-toggle="modal" data-bs-target="#videoModal" data-youtube-id="784Au4PjTzg" data-video-title="Order picking planning with OptaPlanner"> <span><i class="fas fa-play-circle"></i></span> <span class="align-text-middle link-primary">Order picking planning with OptaPlanner</span> </a> <div class="small">Fri 31 December 2021</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/54cd5de3bdaf21a942e8d9d5fe95f647?s=20&d=mm"/> <span class="align-middle">Anna Dupliak</span> </span> </li> <li class="mb-2"> <a style="cursor: pointer" data-bs-toggle="modal" data-bs-target="#videoModal" data-youtube-id="HVDPxebpSvg" data-video-title="AI lesson scheduling on Quarkus with OptaPlanner"> <span><i class="fas fa-play-circle"></i></span> <span class="align-text-middle link-primary">AI lesson scheduling on Quarkus with OptaPlanner</span> </a> <div class="small">Thu 18 November 2021</div> <span> <img class="rounded me-1" src="https://www.gravatar.com/avatar/27147a6679a4bfb6461ff1c0ae10473e?s=20&d=mm"/> <span class="align-middle">Geoffrey De Smet</span> </span> </li> <div class="small float-end"> <a href="https://www.youtube.com/channel/UCcpkOKpujFlM67D2h0RdaeQ">Video archive</a> </div> </ul> </div> </div> </div> </div> </div> </div> <footer class="py-4 bg-black text-white-50"> <div class="container"> <div class="row"> <div class="col-md-4"> <p class="small">OptaPlanner is open. All dependencies of this project are available under the <a class="link-light" href="code/license.html">Apache Software License 2.0</a> or a compatible license. OptaPlanner is <a class="link-light" href="community/branding.html">trademarked</a>. </p> <p class="small"> This <a class="link-light" href="website/websiteInfo.html">website</a> was built with <a class="link-light" href="https://jbake.org">JBake</a> and is open source. </p> </div> <div class="col-md-4"> <h4>Community</h4> <ul class="ps-2 list-unstyled"> <li><a class="link-light" href="blog/">Blog</a></li> <li><a class="link-light" href="community/getHelp.html">Get Help</a></li> <li><a class="link-light" href="community/team.html">Team</a></li> <li><a class="link-light" href="community/governance.html">Governance</a></li> <li><a class="link-light" href="community/research.html">Academic research</a></li> </ul> </div> <div class="col-md-4"> <h4>Code</h4> <ul class="ps-2 list-unstyled"> <li><a class="link-light" href="code/sourceCode.html">Build from source</a></li> <li><a class="link-light" href="https://issues.redhat.com/projects/PLANNER">Issue tracker</a></li> <li><a class="link-light" href="docs/optaplanner/latest/release-notes/release-notes.html#releaseNotes-8.x">Release notes</a></li> <li><a class="link-light" href="download/upgradeRecipe/">Upgrade recipes</a></li> <li><a class="link-light" href="community/branding.html">Logo and branding</a></li> </ul> </div> </div> <div class="d-flex justify-content-evenly align-items-center"> <div> <i class="fab fa-creative-commons"></i><i class="fab fa-creative-commons-by"></i> <a class="link-light link-underlined" href="https://creativecommons.org/licenses/by/3.0/" target="_blank">CC by 3.0</a> | <a class="link-light link-underlined" href="https://www.redhat.com/en/about/privacy-policy">Privacy Policy</a> </div> <div> <span class="me-2 text-white">Sponsored by</span> <a href="https://www.redhat.com/" target="_blank"><img style="width: 6rem" src="https://www.redhat.com/profiles/rh/themes/redhatdotcom/img/logo.svg" alt="Red Hat"></a> </div> </div> </div> </footer> <div class="modal fade" id="videoModal" tabindex="-1" aria-labelledby="videoModalLabel" aria-hidden="true"> <div class="modal-dialog modal-xl modal-dialog-centered"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title"></h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-body"> <div class="ratio ratio-16x9" id="player-container"> </div> </div> </div> </div> </div> <script src="https://cdn.jsdelivr.net/npm/jquery@3.6.0/dist/jquery.slim.min.js" integrity="sha256-u7e5khyithlIdTpu22PHhENmPcRdFiHRjhAuHcs05RI=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.1/dist/js/bootstrap.bundle.min.js" integrity="sha384-/bQdsTh/da6pkI1MST/rWKFNjaCP5gBSY4sEBT38Q/9RBh9AH40zEOg7Hlq2THRZ" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/highlight.min.js" integrity="sha256-mfS2sXKEV8eehy39UH7+7BwaoUaIe2TuLO2DXS+c2mI=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/languages/asciidoc.min.js" integrity="sha256-gnB2LPAmHPkrj3czfog5GdIu4aByzcKeTUzC2agNMzM=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/languages/properties.min.js" integrity="sha256-1XSLaVD2dn/eCICDUx1DYprsC4UAEa4weDLYY/458wU=" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.2.0/build/languages/gradle.min.js" integrity="sha256-B5HtfGpeJKLSEsoqtAdi6sSJ05K49CTGHZbrBiJ9CwE=" crossorigin="anonymous"></script> <script src="website/optaplannerWebsite.js"></script> <script> // Ruby syntax highlighting works pretty well for DRL source code. hljs.registerAliases(["drl"], { languageName: "ruby"}); hljs.highlightAll(); </script> <script async defer src="https://buttons.github.io/buttons.js"></script> <script type="text/javascript"> if (("undefined" !== typeof _satellite) && ("function" === typeof _satellite.pageBottom)) { _satellite.pageBottom(); } </script> </body> </html>