此 Decision Optimization Modeling Assistant 示例显示如何使用多概念迭代,约束中的 associated
关键字,如何定义自己的定制决策以及定义逻辑约束。 为了进行说明,将使用资源分配问题 ShiftAssignment
,并且在 DO-samples中提供了包含数据的已完成模型。
准备工作
- 要求
- 要编辑和运行 Decision Optimization 模型,必须满足以下先决条件:
- 管理员 或 编辑者 角色
- 您必须在项目中具有 管理员 或 编辑者 角色。 共享项目的查看者只能看到实验,但无法修改或运行实验
- watsonx.ai运行时服务
- 您必须有一个与项目相关联的watsonx.aiRuntime服务。 您可以在创建 Decision Optimization 试验时添加一个。
- 部署空间
- 您必须具有与 Decision Optimization 试验相关联的部署空间。 您可以在创建 Decision Optimization 试验时选择部署空间。
关于本任务
此示例涉及将员工分配到不同的轮班,并且每天都要求必须有所需数量的员工待命。 此样本中使用的文件在 DO-samples中可用。
此视频提供了一种直观方法来了解本文档中的概念和任务。 在 Decision Optimization 试验中装入示例后,可以关注视频。
视频免责声明: 此视频中的一些次要步骤和图形步骤可能与您的平台不同。 用户界面也经常得到改进。
过程
要下载并打开样本,请执行以下操作:
- 从 DO-samples中的 Model_Builder 子文件夹下载 ShiftAssignment.zip 文件。 选择相应的产品和版本子文件夹。
- 打开项目或创建空项目。
- 选择 资产 选项卡。
- 选择新资产 > 解决优化问题在里面使用模型部分。
- 在打开的 " 创建 Decision Optimization 试验 " 窗口中单击 本地文件 。
- 在本地浏览以查找并选择下载的 ShiftAssignment.zip 归档。 单击 打开。 或者,使用拖放操作。
- 如果您还没有将 "watsonx.ai运行时间服务与项目关联起来,则必须先选择 "添加 "Machine Learning服务来选择或创建一个服务,然后再为 "试验选择部署空间。
- 单击 创建。将创建与样本同名的 Decision Optimization 模型。
- 打开方案窗格并选择
AssignmentWithOnCallDuties
方案。
结果
在 AssignmentWithOnCallDuties
方案的 准备数据 视图 中,可以看到已导入的数据资产。 这些表格表示轮班、需要分配到这些轮班的员工以及必需的待命职责的天数。
使用多概念迭代
关于本任务
假设您想要模型规划表示每个员工每天工作不超过一个轮班的规则。 例如,不能在同一天向员工分配两个轮班。 如本模型阐述中所示,您可以使用一周中每一天的约束。
但是,列出一周中每一天的约束是很繁琐的: 如果模型基于一年中的几天,那么您必须列出其中数百个类型的约束。 以下过程显示如何使用多概念迭代和 associated
关键字来表示对多个概念的迭代。 因此,您可以仅使用一个短语来表达这样的规则。
过程
要使用多概念迭代,请执行以下步骤。
- 单击侧边栏中的 构建模型 以查看模型阐述。模型规划显示将员工分配到轮班的意图及其目标和约束。
- 展开约束
For each Employee-Day combination , number of associated Employee-Shift assignments is less than or equal to 1
。
结果
此约束使用关键字 associated
将员工和天数组合在一起,因此表达式在员工和天数上迭代。 您可以看到 employee-day combination 中的 employee 映射到 employee-shift assignment 中的 employee。 而且 employee-day combination 中的 day 也映射到 assigned shift 的 day 属性。 因此,将为您正确且自动地处理这些组合。
通过此多概念迭代,您可以指定组合不同概念的新规则组。
定义定制决策
关于本任务
假设您还想分配待命职责。 您可以创建另一个模型,目的是将员工分配到待命职责,但是您将无法在这两个模型之间声明依赖关系规则。 通过将定制决策添加到现有模型,如本示例中所示,您可以定义轮班分配与待命职责之间的依赖关系。 此处,定制决策被称为 OnCallDuties
。
过程
要定义定制决策,请执行以下步骤。
结果
您不再仅限于使用根据您的意图推断的决策。 现在,您可以使用高级设置和决策选项卡来定义自己的定制决策,您可以在其中选择决策类型及其维度 (数据表或列)。 然后,您可以配置使用新定义的决策的新规则和目标。
使用逻辑约束
关于本任务
假设您想要确保在员工休假时不会分配待命职责。 您可以使用逻辑约束来实现此目标,如下所示。
过程
要使用逻辑约束:
- 查看约束 此约束确保对于每个员工和日组合,当不存在任何关联的分配 (例如,该员工在该日休假) 时,不会在该日向该员工分配任何待命职责。 请注意使用
if...then
关键字来定义此逻辑约束。 - 可选: 通过在建议中进行搜索,向模型添加其他逻辑约束。
结果
此约束将员工分配与包含待命职责的轮班链接在一起。 使用单独的模型,一个用于原始轮班分配,另一个用于随叫随到的职责,您无法实现此链接。
通过使用逻辑约束以及 associated
关键字,可以指定如果一个约束适用,那么另一个约束也适用。 将自动在所用的概念之间生成必需的逻辑连接,而不必使用更复杂的连接表达式。