0 / 0
Go back to the English version of the documentation
在 Decision Optimization Modeling Assistant 模型中使用 Python 创建高级自定义约束条件
Last updated: 2024年11月21日
在 Decision Optimization Modeling Assistant 中使用 Python 创建高级定制约束

Decision Optimization Modeling Assistant 示例显示如何创建使用 Python的高级定制约束。

准备工作

要求
要编辑和运行 Decision Optimization 模型,必须满足以下先决条件:
管理员编辑者 角色
您必须在项目中具有 管理员编辑者 角色。 共享项目的查看者只能看到实验,但无法修改或运行实验
watsonx.ai运行时服务
您必须有一个与项目相关联的watsonx.aiRuntime服务。 您可以在创建 Decision Optimization 试验时添加一个。
部署空间
您必须具有与 Decision Optimization 试验相关联的部署空间。 您可以在创建 Decision Optimization 试验时选择部署空间。

Decision Optimization Modeling Assistant中打开任何 Decision Optimization 模型。 此示例使用 DO-samples中提供的 Shift Assignment 样本,并使用 AssignmentWithOnCallDuties 方案。 此样本中的 AssignmentWithCustomRule 方案显示已添加此定制约束的已完成模型。

关于本任务

Modeling Assistant 为您的问题域提供了许多可定制的约束建议。 但是,您可能想要表达针对给定域预定义的约束之外的约束。 您可以通过使用使用 Python DOcplex的更高级定制约束来实现此目的。 此示例说明如何创建这些实例。

此视频提供了一种直观方法来了解本文档中的概念和任务。Decision Optimization 试验 中装入示例后,可以关注视频。

视频免责声明: 此视频中的一些次要步骤和图形步骤可能与您的平台不同。 用户界面也经常得到改进。

请参阅此 Decision Optimization 博客 中的更多信息,了解在 IBM Data Science 社区页面上找到的使用 Python 的定制约束。

过程

要创建新的高级定制约束:

  1. 在打开的 Modeling Assistant 模型的 构建模型 视图 中,查看 建议 窗格。 单击搜索字段旁边的 全部显示 图标。 然后,将按类别列出所有建议。 展开 其他 部分以找到 新建定制约束,然后单击该约束以将其添加到模型中。 或者,如果未显示所有建议和类别,那么可以在搜索字段中输入 custom 以查找相同的建议,然后单击该建议以将其添加到模型中。
    这样会将新的定制约束添加到模型中。

    模型中的新定制约束,突出显示了要由用户完成的元素。

  2. 单击 输入约束。 将 [方括号] 用于数据,概念,变量或参数 ,并输入要指定的约束。 例如,输入 No [employees] has [onCallDuties] for more than [2] consecutive days 并按 Enter 键。
    将显示该规范以及缺省参数 (parameter1, parameter2, parameter3) ,供您定制。 这些参数将传递到实现此定制规则的 Python 函数。

    已展开定制约束以显示缺省参数和函数名。

  3. 编辑规范中的缺省参数以提供更有意义的名称。 例如,将参数更改为 employees, on_call_duties,然后 limit 并单击 Enter 键。
  4. 单击函数名并输入函数的名称。 例如,输入 limitConsecutiveAssignments 并单击 Enter 键。
    将添加函数名,并显示 编辑 Python 按钮。

    显示定制参数和 "编辑 Python " 按钮的定制规则。

  5. 单击 编辑 Python 按钮。
    此时将打开一个新窗口,其中显示可以编辑以实现定制规则的 Python 代码。 您可以在代码中看到定制参数,如下所示:

    显示要定制的块的 Python 代码

    请注意,代码是使用您在定制规则中定义的相应数据帧和表列名记录的。 未记录此限制,因为这是数字值。
  6. 可选: 您可以直接在此窗口中编辑 Python 代码,但在此处使用代码之前,您可能会发现在 Notebook 中编辑和调试代码很有用。 在这种情况下,请立即在 " 方案 " 窗格中关闭此窗口,展开三个垂直点,然后为此包含定制规则的方案选择 生成 Notebook 。 输入此笔记本的名称。
    将在可供您编辑和调试的项目资产中创建 Notebook。 完成编辑,运行和调试后,可以将定制函数的代码复制回 " Modeling Assistant" 中的 " 编辑 Python " 窗口中。
  7. Modeling Assistant 定制规则 编辑 Python 窗口中编辑 Python 代码。
    例如,您可以在 Python 中定义连续几天的规则,如下所示:
        def limitConsecutiveAssignments(self, mdl, employees, on_call_duties, limit):
            global helper_add_labeled_cplex_constraint, helper_get_index_names_for_type, helper_get_column_name_for_property
            print('Adding constraints for the custom rule')
            for employee, duties in employees.associated(on_call_duties):
                duties_day_idx = duties.join(Day)  # Retrieve Day index from Day label
                for d in Day['index']:
                    end = d + limit + 1  # One must enforce that there are no occurence of (limit + 1) working consecutive days
                    duties_in_win = duties_day_idx[((duties_day_idx['index'] >= d) & (duties_day_idx['index'] <= end)) | (duties_day_idx['index'] <= end - 7)]
                    mdl.add_constraint(mdl.sum(duties_in_win.onCallDutyVar) <= limit)
  8. 单击 运行 按钮以使用定制约束运行模型。
    运行完成后,您可以在 Explore 解决方案 视图中查看结果。
Generative AI search and answer
These answers are generated by a large language model in watsonx.ai based on content from the product documentation. Learn more