第14章 OptaPlanner と Java の Red Hat ビルド: 学校の時間割のクイックスタートガイド
本書では、OptaPlanner の制約解決人工知能 (AI) を使用してシンプル Java アプリケーションを作成するプロセスを説明します。生徒と教師のために学校の時間割を最適化するコマンドラインアプリケーションを作成します。
アプリケーションは、AI を使用してハードスケジュールとソフトスケジュールの 制約 を順守することにより、Lesson インスタンスを タイムスロット インスタンスと Room インスタンスに自動的に割り当てます。次に例を示します。
- 1 部屋に同時に割り当てることができる授業は、最大 1 コマです。
- 教師が同時に一度に行うことができる授業は最大 1 回です。
- 生徒は同時に出席できる授業は最大 1 コマです。
- 教師は、すべてのレッスンを同じ部屋で教えることを好みます。
- 教師は、連続した授業を好み、授業間に時間が空くのを嫌います。
- 生徒は、同じ科目の連続したレッスンを嫌います。
数学的に考えると、学校の時間割は NP 困難 の問題であります。これは、スケーリングが困難であることを意味します。すべての可能な組み合わせを単純に総当たりで反復すると、スーパーコンピューター上でさえ、自明ではないデータセットに対して数百万年かかります。幸い、OptaPlanner などの AI 制約ソルバーには、妥当な時間内にほぼ最適なソリューションを提供する高度なアルゴリズムがあります。
前提条件
- OpenJDK (JDK) 11 がインストールされている。Red Hat ビルドの Open JDK は Red Hat カスマーポータル (ログインが必要) の ソフトウェアダウンロード ページから入手できます。
- Apache Maven 3.6 以降がインストールされている。Maven は Apache Maven Project の Web サイトから入手できます。
- IntelliJ IDEA、VSCode、Eclipse などの IDE
14.1. Maven または Gradle ビルドファイルの作成および依存関係の追加 リンクのコピーリンクがクリップボードにコピーされました!
OptaPlanner 学校の時間割アプリケーションには、Maven または Gradle を使用できます。ビルドファイルを作成したら、次の依存関係を追加します。
-
学校の時間割問題を解決するための
optaplanner-core(コンパイルスコープ) -
optaplanner-test(テストスコープ) から JUnit への学校の時間割の制約のテスト -
OptaPlanner が実行するステップを表示するための
logback-classic(ランタイムスコープ) などの実装
手順
- Maven または Gradle ビルドファイルを作成します。
optaplanner-core、optaplanner-test、およびlogback-classicの依存関係をビルドファイルに追加します。Maven の場合、次の依存関係を
pom.xmlファイルに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例は、完全な
pom.xmlファイルを示しています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Gradle の場合、次の依存関係を
gradle.buildファイルに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の例は、完成した
gradle.buildファイルを示しています。Copy to Clipboard Copied! Toggle word wrap Toggle overflow