第 15 章 红帽构建的 Quarkus 上的 OptaPlanner 构建: vaccination appointment 调度程序快速启动指南
您可以使用 OptaPlanner vaccination appointment 调度程序快速启动来开发高效和公平的 vaccination 调度。vaccination appointment 调度程序使用人工智能(AI)来优先选择人员并根据多个限制和优先级分配时间插槽。
先决条件
- 已安装了 OpenJDK 11 或更高版本。红帽构建的 Open JDK 可通过红帽客户门户网站中的 Software Downloads 页面(需要登录)。
- Apache Maven 3.8 或更高版本已安装。Maven 位于 Apache Maven Project 网站。
- 提供了 IDE,如 IntelliJ IDEA、VSCode 或 Eclipse。
- 您已在红帽构建的 Quarkus 平台项目上创建了一个 OptaPlanner 项目,如 第 5 章 在 Red Hat build of Quarkus 平台上开始使用 Red Hat Build of OptaPlanner 所述。
15.1. OptaPlanner vaccination appointment 调度程序的工作方式 复制链接链接已复制到粘贴板!
调度识别的方法主要有两种。系统可以让个人选择一个单点插槽(用户选择插槽),或者系统分配一个插槽,并告知个人参加的时间和位置(系统自动分配)。OptaPlanner vaccination appointment 调度程序使用 system-automatically-assigns 方法。通过 OptaPlanner vaccination appointment 调度程序,您可以创建一个应用程序,其中人员为其系统提供信息,系统分配了一个点数。
这个方法的特性:
- Appointment 插槽会根据优先级分配。
- 系统根据预配置的规划限制分配最佳评估时间和位置。
- 该系统并不是大量用户对数量有限数量的竞争。
这种方法通过使用计划限制为各个人创建分数,从而解决了尽可能多的人准确。人的分数决定何时获得 appointment。人的分数越高,他们获得早期的几分的机会越好。
15.1.1. 红帽构建的 OptaPlanner vaccination appointment 调度程序限制 复制链接链接已复制到粘贴板!
Red Hat build of OptaPlanner vaccination appointment 调度程序限制是 hard, medium, 或 soft:
硬约束无法中断。如果任何硬约束被破坏,则计划不可取,无法执行:
- 容量: 在任何位置都不要过度注册容量。
- Vaccine 最长期限:如果 vaccine 有最长期限,则不要管理它给首次执行 vaccination 的人员不会超过 vaccine 最长期限。确保人们提供适合其年龄的 vaccine 类型。例如,不要为 vaccine 分配 7 年的旧人员,其最长期限限制为 65 年。
- 必需 vaccine 类型:使用所需的 vaccine 类型。例如,vaccine 的第二个操作必须是与第一个 dose 相同的 vaccine 类型。
- 就绪日期:管理指定日期或之后的 vaccine。例如,如果某人收到第二个操作,不要在特定 vaccine 类型的建议最早可能 vaccination 日期之前对其进行管理,例如,首次完成后的 26 天。
- 到期日期:在指定日期或之前管理 vaccine。例如,如果某人收到第二个操作,请在特定 vaccine 的具体 vaccine 到期日期之前对其进行管理,例如,在首次执行之后 3 个月。
- 限制最大旅行距离:将每个人员分配到最接近的 vaccination 数据中心之一。这通常是三个中心之一。此限制是通过差旅时间而不是距离计算的,因此位于某个房间的个人通常比农业领域有比个人的最大距离更小。
中等限制决定当没有足够容量来为每个人都分配 appointments 时,谁不会获得一个状况。这称为受限规划:
- schedule second dose vaccinations:除非理想的日期不在计划窗口之外,否则不要使任何第二个 dose vaccination appointments 没有被分配。
- 根据优先级评级计划人员:每个人都有一个优先级评级。这通常是它们的年龄,但如果它们是健康的 worker,则它可能会更高。只有具有最低优先级评级的人员没有被分配。下一次运行时将考虑它们。这个约束比以前的约束软,因为第二个限制始终优先于优先级评级。
软限制不应中断:
- 首选 vaccination Center :如果个人具有首选的 vaccination Center,请给他们在该中心提供建议。
- 距离:最小化个人必须前往其分配的票务中心的距离。
- 理想日期:管理 vaccine on 或与指定日期接近。例如,如果某人收到第二个操作,则根据特定 vaccine 的理想日期对其进行管理,例如,首次执行 28 天。这个约束比 distance 约束的软者,以避免在国家/地区间向人发送半路,仅有一天更接近其理想的日期。
- 优先级评级:调度之前在规划窗口中具有更高的优先级评级的人。这个约束比 distance 约束的软者,以避免在国家/地区间发送人员的一半。这个约束也比理想的日期约束较低,因为第二个操作优先于优先级评级。
硬约束会根据其他硬限制来加权。软限制是针对其他软限制的权重。但是,硬限制总是优先于中型和软限制。如果硬约束被破坏,则计划不可行。但是,如果没有硬约束问题,则软和中等约束会被考虑以确定优先级。因为用户通常比可用的单点插槽更多,所以您必须优先选择。第二天首先被分配为始终分配点数,以避免创建稍后给您的系统造成放大的积压。之后,会根据优先级评级来分配人员。每个人都以优先级评级开头,即其年龄。这样做会优先选择较早的人。之后,位于特定优先级组的人员收到,例如,几百个额外的点。这因组的优先级而异。例如,nurses 可能会收到额外的 1000 个点。这样,较早的 nurses 优先考虑不久的人。下表描述了这个概念:
年龄 | 作业(job) | 优先级评级 |
---|---|---|
60 | nurse | 1060 |
33 | nurse | 1033 |
71 | 弃用 | 71 |
52 | 办公室工作者 | 52 |
15.1.2. 红帽构建的 OptaPlanner solver 复制链接链接已复制到粘贴板!
在 OptaPlanner 的核心是 solver,引擎会获取问题数据集并覆盖规划限制和配置。问题数据集包含有关人员、vaccines 和 vaccination 数据中心的所有信息。解决者通过各种数据组合工作,最终确定了特定中心分配给 vaccination appointments 的人员的优化情况。下图显示了 solver 创建的调度:
15.1.3. 持续规划 复制链接链接已复制到粘贴板!
持续规划是同时管理一个或多个即将推出的规划周期的技术,并重复这个过程每月、每周、每天、每小时甚至更频繁地重复该过程。规划窗口以指定间隔逐步推进。下图显示了每天更新的两周规划窗口:
两周规划窗口将划分成一半。第一周处于 published 状态,第二周处于草案状态。人们在规划窗口的出版和草案部分中都分配到了一场点。但是,只有发布了计划窗口一部分的人员才会获得他们的意见通知。在下一次运行中,其他 appoints 仍然可以变化。这样做可让 OptaPlanner 在您再次运行解决方案时,灵活地更改草案中的点子部分。例如,如果需要第二天的个人准备日期为 Monday,并且理想的日期为 Wednesday,OptaPlanner 不必为他们留出一场点,如果您可以证明 OptaPlanner 可以演示它以后可以于周的草案。
您可以确定 planning 窗口的大小,但只了解问题空间的大小。问题空间是创建计划的各种元素。您提前规划的天数越大,问题空间越大。
15.1.4. 固定计划实体 复制链接链接已复制到粘贴板!
如果您每天都要不断规划,那么在已经分配给了人的两周期间,将有点数。为确保 appointments 没有双书,OptaPlanner 将现有的 appointments 标记为固定它们所分配的。固定用于分配一个或多个特定分配,并强制 OptaPlanner 根据这些固定分配进行调度。固定计划实体(如 appointment)在解决过程中不会改变。
实体是固定的,是否由 appointment 状态决定。Appointment 可以有五种状态: Open
、Invited
、Accepted
、Rejected
或 Rescheduled
。
您实际上不会在快速启动演示代码中直接看到这些状态,因为 OptaPlanner 引擎仅对 appointment 是否固定是否感兴趣。
您需要规划已计划的一个点数。已固定带有 Invited
或 Accepted
状态的 appointment。带有 Open
、Reschedule
和 Rejected
状态的点数不会被固定,并可用于调度。
在本例中,当 solver 运行它在发布和草案范围内的整个双周规划窗口时,除了未计划输入数据外,该方案还考虑了任何未固定的实体,以及 开放
、重新排期
或拒绝状态的任何非固定实体,以找到最佳解决方案。如果解析器每天运行,您将在运行 solver 前看到添加到计划的新日期。
请注意,新日的点数已被分配,并且之前在规划窗口草案中的 Amy 和 Edna 调度到该窗口的发布部分。这是因为 Gus 和 Hugo 请求重新调度。这不会造成混淆,因为 Amy 和 Edna 永远不会收到其草案日期的通知。现在,因为它们在计划窗口的公布的部分中有点,因此它们会被通知并要求接受或拒绝其 Appointments,现在被固定。