第 10 章 Red Hat build of OptaPlanner on Red Hat build of Quarkus: a school timetable quick start Guide
本指南指导您使用红帽构建的 OptaPlanner 约束完成了创建红帽 Quarkus 应用程序的构建过程。您将构建一个针对学生和生生而优化院长的 REST 应用程序
您的服务会自动将 Lesson 实例分配给 Timeslot 和 Room 实例,方法是使用 AI 遵循以下硬和软 调度限制 :
- 个空间最多可以同时有一处。
- 老师可以同时在上课时进行教学。
- 学员最多可以同时参加。
- 教授者更倾向于在单一房间学习。
- 指导者更倾向于在课间学习顺序课时和不类差距。
数学会上讲,该学校的时间范围是一个 NP-hard 问题。这意味着很难扩展。简单地说,通过带有 brute 强制的可能组合将花费数百万年时间,而在超级计算机中,甚至在超级计算机中也要花费数百万年时间。幸运的是,AI 约束寻址者(如红帽构建的 OptaPlanner)具有高级算法,可在合理的时间内提供最接近的解决方案。被视为有合理的时间,它取决于问题的目标。
先决条件
- 安装了 OpenJDK 11 或更高版本。红帽构建的 Open JDK 可从红帽客户门户网站的 Software Downloads 页面获取(需要登录)。
- 已安装 Apache Maven 3.6 或更高版本。Maven 可以从 Apache Maven Project 网站获得。
- 使用 IntelliJ IDEA、VS Code、Eclipse 或 NetBeans 等 IDE。
您可以使用 Apache Maven 和 Quarkus Maven 插件,使用红帽构建的 OptaPlanner 和 Quarkus 应用程序启动并运行。
先决条件
- 安装了 OpenJDK 11 或更高版本。红帽构建的 Open JDK 可从红帽客户门户网站的 Software Downloads 页面获取(需要登录)。
- 已安装 Apache Maven 3.6 或更高版本。Maven 可以从 Apache Maven Project 网站获得。
流程
在命令终端中,输入以下命令验证 Maven 是否使用 JDK 11,并且 Maven 版本为 3.6 或更高版本:
mvn --version- 如果前面的命令没有返回 JDK 11,请将到 JDK 11 的路径添加到 PATH 环境变量,然后再次输入前面的命令。
要生成 Quarkus OptaPlanner quickstart 项目,请输入以下命令:
mvn com.redhat.quarkus.platform:quarkus-maven-plugin:2.13.Final-redhat-00006:create \ -DprojectGroupId=com.example \ -DprojectArtifactId=optaplanner-quickstart \ -Dextensions="resteasy,resteasy-jackson,optaplanner-quarkus,optaplanner-quarkus-jackson" \ -DplatformGroupId=com.redhat.quarkus.platform -DplatformVersion=2.13.Final-redhat-00006 \ -DnoExamples此命令在
./optaplanner-quickstart目录中创建以下元素:- Maven 结构
-
src/main/docker中的Dockerfile文件示例 应用程序配置文件
Expand 表 10.1. mvn io.quarkus:quarkus-maven-plugin:2.13.Final-redhat-00006:create 命令中使用的属性 属性 描述 projectGroupId项目的组 ID。
projectArtifactId项目的工件 ID。
extensions用于此项目的以逗号分隔的 Quarkus 扩展列表。如需 Quarkus 扩展的完整列表,请在命令行中输入
mvn quarkus:list-extensions。noExamples使用项目结构创建项目,但不包括测试或类。
projectGroupID和projectArtifactID属性的值用于生成项目版本。默认项目版本为 1InventoryServiceSNAPSHOT。
要查看您的 OptaPlanner 项目,请将目录改为 OptaPlanner Quickstarts 目录:
cd optaplanner-quickstart检查
pom.xml文件。内容应类似以下示例:<dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus.platform</groupId> <artifactId>quarkus-bom</artifactId> <version>2.13.Final-redhat-00006</version> <type>pom</type> <scope>import</scope> </dependency> <dependency> <groupId>io.quarkus.platform</groupId> <artifactId>quarkus-optaplanner-bom</artifactId> <version>2.13.Final-redhat-00006</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-jackson</artifactId> </dependency> <dependency> <groupId>org.optaplanner</groupId> <artifactId>optaplanner-quarkus</artifactId> </dependency> <dependency> <groupId>org.optaplanner</groupId> <artifactId>optaplanner-quarkus-jackson</artifactId> </dependency> <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-junit5</artifactId> <scope>test</scope> </dependency> </dependencies>