第12章 Spring Boot 上の Red Hat ビルドの OptaPlanner: 時間割のクイックスタートガイド
本書では、OptaPlanner の制約解決人工知能 (AI) を使用して Spring Boot アプリケーションを作成するプロセスを説明します。学生および教師向けの時間割を最適化する REST アプリケーションを構築していきます。

サービスは、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 が利用できる。
12.1. Spring Boot 時間割のクイックスタートのダウンロードおよびビルド
Spring Boot 製品を備えた Red Hat ビルドの OptaPlanner 向けの授業の時間割プロジェクトの完全な例を表示するには、Red Hat カスタマーポータルからスターターアプリケーションをダウンロードします。
手順
Red Hat カスタマーポータルの Software Downloads ページに移動し (ログインが必要)、ドロップダウンオプションから製品およびバージョンを選択します。
- Product: Process Automation Manager
- Version: 7.12
-
Red Hat Process Automation Manager 7.12.0 Kogito および OptaPlanner 8 Decision Services クイックスタート (
rhpam-7.12.0-kogito-and-optaplanner-quickstarts.zip
) をダウンロードします。 -
rhpam-7.12.0-kogito-and-optaplanner-quickstarts.zip
ファイルを解凍します。 -
Red Hat Process Automation Manager 7.12.0 Kogito and OptaPlanner 8 Decision Services Maven Repositroy (
rhpam-7.12.0-kogito-maven-repository.zip
) をダウンロードします。 -
rhpam-7.12.0-decision-services-quickstarts.zip
ファイルを展開します。 -
rhpam-7.12.0-kogito-maven-repository/maven-repository
サブディレクトリーのコンテンツを~/.m2/repository
ディレクトリーにコピーします。 -
optaplanner-quickstarts-8.11.1.Final-redhat-00006/technology/java-spring-boot
ディレクトリーに移動します。 以下のコマンドを入力して、Spring Boot の授業の時間割プロジェクトをビルドします。
mvn clean install -DskipTests
Spring Boot の授業の時間割プロジェクトをビルドするには、以下のコマンドを入力します。
mvn spring-boot:run -DskipTests
プロジェクトを表示するには、Web ブラウザーで以下の URL を入力します。
http://localhost:8080/