搜索

第 11 章 Red Hat build of OptaPlanner on Red Hat build of Quarkus: a vaccination appointment 调度程序快速启动指南

download PDF

您可以使用 OptaPlanner vaccination appointment 调度程序快速启动,以开发一个有效和公平的 vaccination 调度。vaccination appointment 调度程序使用 artificial 智能(AI)来根据多个限制和优先级排列人并分配时间插槽。

先决条件

  • 安装了 OpenJDK 11 或更高版本。红帽构建的 Open JDK 可从红帽客户门户网站的 Software Downloads 页面获取(需要登录)。
  • 已安装 Apache Maven 3.6 或更高版本。Maven 可以从 Apache Maven Project 网站获得。
  • 提供了 IDE,如 IntelliJ IDEA、VS Code、Ecli 或 NetBeans。
  • 您已创建了 Quakus OptaPlanner 项目,如 第 6 章 OptaPlanner 和 Quarkus 入门 所述。

11.1. OptaPlanner vaccination appointment 调度程序如何工作

调度 appointments 的方法主要有两种。系统可以允许个人选择一个选项插槽(用户选择)或者系统分配一个插槽并告知个人何时和位置参加(系统自动自动分配分配)。OptaPlanner vaccination appointment 调度程序使用 system-automatically-assigns 方法。通过 OptaPlanner vaccination appointment 调度程序,您可以创建一个应用程序,其中人们为系统提供信息,系统会分配一个 appointment。

这个方法的特性:

  • appointment 插槽根据优先级分配。
  • 系统根据预配置的规划限制分配最佳的 appointment 时间和位置。
  • 该系统不再被大量用户对受制约数量有限。

这个方法可以通过使用计划限制为每个人创建分数来解决 vaccinating 的问题。个人的分数决定何时获得指示。个人得分越大,他们收到之前的发言的机会越大。

11.1.1. OptaPlanner vaccination appointment 调度程序限制

OptaPlanner vaccination appointment 调度程序限制可以是 hard、medium 或 soft:

  • 硬约束不能被破坏。如果有任何硬约束被破坏,则计划不可行,且无法执行:

    • 容量:在任何位置,不要随时通过手册 vaccine 容量。
    • Vaccine 最大年龄:如果 vaccine 具有最长期限,则不像首次进行的 vaccine 最长期限更久时对其进行管理,而不是 vaccine 最长期限。确保为人赋予一个适合其年龄的 vaccine 类型。例如,不要为 vaccine 分配 75 年旧个人,其最长期限限制为 65 年。
    • 所需的 vaccine type:使用所需的 vaccine 类型。例如,vaccine 的第二代的 vaccine 类型必须与第一个 dose 相同。
    • 就绪日期:管理指定日期或之后的 vaccine。例如,如果某个人收到第二个操作,则在建议尽快进行 vaccine 类型之前,不要对其进行管理,例如在第一个操作后 26 天。
    • 到期日期:管理指定日期之前或之前的 vaccine。例如,如果某个人收到第二个操作,请在推荐的 vaccination 最终因特定 vaccine 日期前对其进行管理,例如在第一个操作后的三个月。
    • 限制最大差距离:将每个人分配给最接近其一组 vaccination 中心之一。这通常是三个数据中心中的一个。这种限制的计算时间是差差时间,而不是距离距离,因此那些在维系地区持有的人通常比农区的差时限度要低。
  • Medium 约束决定,当没有足够容量为每个人分配点时,他们不会得到指出。这被称为约束规划:

    • schedule second dose vaccinations:不要使任何第二个确实 vaccination 没有被分配,除非理想的日期不在计划窗口之外。
    • 根据优先级评级计划人员:每个人具有优先级评级。这通常是其年龄,但如果它们来说,这要高得多,例如一个健康护程序。只有具有最低优先级的人们才是未分配的。在下次运行时将考虑它们。这个约束比上一个约束的软限制,因为第二个操作总是优先级在优先级评级上。
  • 软限制不应该有问题:

    • 首选 vaccination 中心:如果一个人拥有首选的 vaccination 中心,请在该中心给出一个选择点。
    • 距离:让人必须转入其分配的 vaccination 中心的距离。
    • 理想日期:管理 vaccine on 或接近指定日期。例如,如果某个人收到第二个操作,则根据特定 vaccine 的基本日期对其进行管理,例如在第 28 天之后。这个约束比距离约束的软,以避免在国家间发送一半,使其更接近其理想的日期。
    • 优先级评级:在规划窗口之前调度优先级较高的人。这个约束比距离约束的软,以避免在国家之间发送一半。这个约束也比理想日期约束的软,因为第二个操作的优先级高于优先级评级。

硬约束的加法是相对于其他硬约束的权重。软限制会高于其他软限制。但是,硬约束总是优先于中和软限制。如果硬约束被破坏,则计划不可行。但是,如果没有硬的限制,则考虑软限制和中等限制来确定优先级。因为只有更多的人会超过可用代表的插槽,所以您必须优先选择。第二个确实需要首先被分配,以避免在以后创建不堪重负您的系统的积压。之后,会根据优先级的等级分配用户。每个人都从优先级评级开始,是其年龄。这样做会优先考虑旧人,而非年轻的人。之后,处于特定优先级组的人接收,例如几百个额外的点。这与其组的优先级不同。例如,nurses 可能会接收额外的 1000 点。这样,旧的 nurses 的优先级高于年轻的 nurses,而年轻的 nurses 则高于非 nurses 的人。下表演示了这个概念:

表 11.1. 优先级等级表
age作业优先级评级

60

nurse

1060

33

nurse

1033

71

弃用

71

52

办公室 worker

52

11.1.2. OptaPlanner solver

OptaPlanner 的核心是解决方法,引擎用于提取问题数据集并覆盖规划限制和配置。问题数据集包含人们、vaccines 和 vaccination 中心的所有信息。解决器通过各种数据组合进行工作,最终决定一个经过优化的指示计划,与分配给特定中心的 vaccination appointments 的人员进行优化。以下示例显示一个临时解决方案创建的调度:

vaccinationSchedulingValueProposal

11.1.3. 持续规划

持续计划是同时管理一个或多个即将举办的规划期的技术,并经常重复该过程每月、每周、每天、每小时或更频繁地重复该过程。计划窗口按指定间隔递增。下图显示了两周计划窗口,每天更新:

vaccinationSchedulingContinuousPlanning

两周规划窗口被分为一半。第一周处于已发布的状态,第二周处于草案状态。人们被分配到计划窗口发布和部分的发言。但是,只有计划窗口发布的一部分的用户才会获得其发言通知。其他的 appointments 仍可在下一次运行时轻松更改。这样做可让 OptaPlanner 灵活地在再次运行问题时更改草案部分中的提示(如果需要)。例如,如果一个需要第二个操作的人准备了星期一,OptaPlanner 认为是星期三的准备日期,如果您可以证明 OptaPlanner,则可以为星期一给出一个草案。

您可以确定规划窗口的大小,但只了解问题空间的大小。问题空间就是创建计划的所有元素。您提前计划的时间越大,问题就越大。

11.1.4. 固定计划实体

如果您每天持续规划,在两个周的时间内将出现指出,该周期已分配给个人。要确保 appointments 没有双引号,OptaPlanner 将现有的 appointments 标记为固定值分配。固定( pinning)用于定位一个或多个特定的分配,并强制 OptaPlanner 围绕这些固定分配进行调度。固定规划实体(如 appointment)在解决过程中不会改变。

某个实体是固定还是不由 appointment 状态决定。appointment 可以具有五个状态: OpenInvitedAcceptedRejectedRescheduled

注意

您实际上不会在快速启动演示代码中直接看到这些状态,因为 OptaPlanner 引擎只对 appointment 是否固定。

您需要能够规划已调度的 appointments。固定具有 InvitedAccepted 状态的 appointment。没有固定状态,带有 OpenRescheduleRejected 状态没有固定状态,并可用于调度。

在这个示例中,当解决器在已发布和草案范围内搜索整个两周计划窗口时。除非计划的输入数据外,解决者还考虑了任何未固定实体、OpenRescheduleRejected 状态的任何未固定实体。如果每天运行解决方法,您会在运行解决者之前看到在计划中添加的新日期。

请注意,新天的 appointments 已被分配,在计划窗口的草案中调度了 Amy 和 Edna。这是因为 Gus 和 Hugo 请求重新调度。这不会造成任何混淆,因为 Amy 和 Edna 不会被通知其草案日期。现在,由于他们在规划窗口的已发布部分有指出,因此将收到通知并要求接受或拒绝其提示,并且现在固定了。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.