第10章 Spring Boot 上の Red Hat ビルドの OptaPlanner: 時間割のクイックスタートガイド

本書では、OptaPlanner の制約解決人工知能 (AI) を使用して Spring Boot アプリケーションを作成するプロセスを説明します。生徒と教師の時間割を最適化する REST アプリケーションを構築します。

timeTableAppScreenshot

サービスは、AI を使用して、以下のハードおよびソフトの スケジュール制約 に準拠し、Lesson インスタンスを Timeslot インスタンスと Room インスタンスに自動的に割り当てます。

  • 1 部屋に同時に割り当てることができる授業は、最大 1 コマです。
  • 教師が同時に一度に行うことができる授業は最大 1 回です。
  • 生徒は同時に出席できる授業は最大 1 コマです。
  • 教師は、1 つの部屋での授業を希望します。
  • 教師は、連続した授業を好み、授業間に時間が空くのを嫌います。

数学的に考えると、学校の時間割は NP 困難 の問題であります。つまり、スケーリングが困難です。総当たり攻撃で考えられる組み合わせを単純にすべて反復すると、スーパーコンピューターを使用したとしても、非自明的なデータセットを取得するのに数百年かかります。幸い、OptaPlanner などの AI 制約ソルバーには、妥当な時間内にほぼ最適なソリューションを提供する高度なアルゴリズムがあります。妥当な期間として考慮される内容は、問題の目的によって異なります。

前提条件

  • OpenJDK 11 以降がインストールされている。Red Hat ビルドの Open JDK は Red Hat カスマーポータル (ログインが必要) の ソフトウェアダウンロード ページから入手できます。
  • Apache Maven 3.6 以降がインストールされている。Maven は Apache Maven Project の Web サイトから入手できます。
  • IntelliJ IDEA、VSCode、Eclipse、NetBeans などの IDE が利用できる。

10.1. Spring Boot 時間割のクイックスタートのダウンロードおよびビルド

Spring Boot 製品を備えた Red Hat ビルドの OptaPlanner 向けの授業の時間割プロジェクトの完全な例を表示するには、Red Hat カスタマーポータルからスターターアプリケーションをダウンロードします。

手順

  1. Red Hat カスタマーポータルの Software Downloads ページに移動し (ログインが必要)、ドロップダウンオプションから製品およびバージョンを選択します。

    • Product: Decision Manager
    • バージョン: 7.11
  2. Red Hat Decision Manager 7.11.0 Kogito and OptaPlanner 8 Decision Services Quickstarts (rhdm-7.11.0-decision-services-quickstarts.zip) をダウンロードします。
  3. rhdm-7.11.0-decision-services-quickstarts.zip ファイルを展開します。
  4. Red Hat Decision Manager 7.11.0 Kogito および OptaPlanner 8 Decision Services Maven Repositroy (rhdm-7.11.0-kogito-maven-repository.zip) をダウンロードします。
  5. rhdm-7.11.0-kogito-maven-repository.zip ファイルを展開します。
  6. rhdm-7.11.0-kogito-maven-repository/maven-repository サブディレクトリーのコンテンツを ~/.m2/repository ディレクトリーにコピーします。
  7. optaplanner-quickstarts-8.5.0.Final-redhat-00004/spring-boot-school-timetabling ディレクトリーに移動します。
  8. 以下のコマンドを入力して、Spring Boot の授業の時間割プロジェクトをビルドします。

    mvn clean install -DskipTests
  9. Spring Boot の授業の時間割プロジェクトをビルドするには、以下のコマンドを入力します。

    mvn spring-boot:run -DskipTests
  10. プロジェクトを表示するには、Web ブラウザーで以下の URL を入力します。

    http://localhost:8080/