产品配置模型中的表达式约束和表约束

本文介绍表达式约束和表约束的使用。 约束控制的对象是您在配置销售订单、销售报价单、采购订单或生产订单的产品时您可以选择的属性值。 您可以根据自己喜欢的构建约束方式来选择使用表达式约束或表约束。

约束用于控制您在配置销售订单、销售报价单、采购订单或生产订单的产品时可以选择的属性值。 您可以根据自己喜欢的构建约束方式来选择使用表达式约束或表约束。

什么是表达式约束?

表达式约束的特性是使用算术和布尔运算符和函数的表达式。 表达式约束是为产品配置模型中的特定组件而写的。 它不能为其他组件重用或共享。 但是,组件的表达式约束可以引用组件的子组件的特性。

什么是表约束?

约束表列出了在配置产品时允许属性值的组合。 表约束定义可以被广泛使用。 当您为产品配置模型中的组件创建一个表约束时,您要选择一个表约束定义。 若要创建合理的组合,您要给组件添加特定类型的属性。 每个属性类型具有一个特定值。

表约束示例

此示例显示如何如何将扬声器的配置限制到特定的机柜表面处理和格栅。 第一个表显示通常可用于配置的机柜表面处理和格栅。 这些值是针对机柜表面处理格栅属性类型定义的。

属性类型
机柜表面处理 黑色、橡木、红木、白色
前格栅 黑色、金属、白色

下一个表显示由颜色和表面处理表约束定义的组合。 通过使用此表约束,您可以配置具有橡木表面处理和黑色格栅的扬声器、具有红木表面处理和白色格栅的扬声器,等等。

完成 格栅
橡木 黑色
红木 白色
白色 黑色
白色 白色
黑色 黑色
金属

您可以创建系统定义的表约束和用户定义的表约束 有关详细信息,请参阅系统定义的和用户定义的表约束

应使用何种语法来编写约束?

编写约束时,必须使用优化建模语言 (OML) 语法。 此系统使用 Microsoft Solver Foundation 约束求解器来求解这些约束。

我应该使用表约束还是表达式约束?

您可以使用表达式约束或表约束,具体取决于您喜欢生成约束的方式。 您建立的表约束为一个矩阵表,而表达式约束则是单个报表。 在您配置产品时,可以随意使用约束条件。 以下示例显示两种方法有何不同。

当您使用以下设置约束配置产品时,这些组合是允许的:

  • 颜色为黑色、大小为 30 或 50 的产品
  • 颜色为红色、大小为 20 的产品

表约束设置

颜色 大小
30
50
红色 20

表达式约束设置

(颜色 == “黑色” & (尺寸 == “30” | 尺寸 == “50”)) | (颜色 ==“红色” & 大小 = “20”)

当我编写表达式约束时,我应该使用运算符还是中缀表示法?

您既可以使用运算符又可以使用中缀表示法来编写表达式约束。 对于MinMaxAbs运算符,您不能使用中缀表示法。 这些运算符作为标准运算符包括在大多数编程语言中。

在编写表达式约束时,我可以使用哪些运算符和中缀表示法?

下表列出的是您在产品配置模型中为组件编写表达式约束时,可以使用的运算符和中缀表示法。 第一个表中的示例显示如何使用中缀表示法或运算符编写表达式。

操作员 Description 语法 示例
提示 如果条件为 true,则应用约束 b。 提示[a, b],中缀:a -: b
  • 运算符:Implies[x != 0, y >= 0]
  • 中缀表示法:x != 0 -: y >= 0
只有所有条件为 true,则为 true。 如果条件数为 0 (零),则产生 True And[args], infix: a & b & ... & z
  • 运算符:And[x == 2, y <= 2]
  • 中缀表示法: x == 2 & y <= 2
如有条件为 true,则为 true。 如果条件数为 0 (零),则产生 False Or[args], infix: a | b | ... | z
  • 运算符:Or[x == 2, y <= 2]
  • 中缀表示法:x == 2 | y <= 2
这将合计其条件。 如果条件数为 0 (零),则产生 0 Plus[args], infix: a + b + ... + z
  • 运算符:Plus[x, y, 2] == z
  • 中缀表示法:x + y + 2 == z
这就否定了此参数。 它必须只有一个条件。 减[expr],中缀:-expr
  • 运算符:Minus[x] == y
  • 中缀表示法: -x == y
绝对值 取其条件的绝对值。 它必须只有一个条件。 绝对值[expr] 运算符:Abs[x]
时间 取其条件的产物。 如果条件数为 0 (零),则产生 1 Times[args], infix: a * b * ... * z
  • 运算符:Times[x, y, 2] == z
  • 中缀表示法:x * y * 2 == z
能力 取指数。 它从右到左求幂。 (换言之,它是权限相关。)因此,Power[a, b, c] 等于 Power[a, Power[b, c]]。 只有指数为正常数时才可以使用 Power Power[args], infix: a ^ b ^ ... ^ z
  • 运算符:Power[x, 2] == y
  • 中缀表示法:x ^ 2 == y
最大值 生成最大条件。 如果条件数为 0 (零),则生成结果为无穷大 最大值[args] 运算符:Max[x, y, 2] == z
最小值 生成最小条件。 如果条件数为 0 (零),则生成结果为无穷大 最小值[args] 运算符:Min[x, y, 2] == z
生成其条件的相反逻辑。 它必须只有一个条件。 非[expr],中缀:!expr
  • 操作员: Not[x] & Not[y == 3]
  • 中缀表示法:!x!(y == 3)

下表示例显示的是如何编写中缀表示法。

中缀表示法 Description
x + y + z 附加内容
x * y * z
x - y 二进制减法的转换方式与第二个数为负的二进制加法相同。
x ^ y ^ z 具有右关联的求幂
!x 布尔值“非”。
x -: y 布尔值影响
x y
x & y & z 布尔值“与”
x == y == z 等式
x != y != z 明确的
x < y < z 小于
x > y > z 大于
x <= y <= z 小于等于
x >= y >= z 大于等于
(x) 括号覆盖默认优先级顺序。

为什么我的表达式约束验证为错误?

您不能使用预留的关键字作为产品配置模型中的属性、组件或子组件的求解器名称。 下面是不能使用的预留关键字的列表:

  • 上限
  • 分项指标
  • 相等
  • 场地
  • 如果
  • 小于
  • 大于
  • 提示
  • 日志
  • 最大
  • 分钟
  • 功率
  • 时间
  • 时隙
  • 型号
  • 决策
  • 目标

其他资源

创建表达式约束

将计算添加到产品配置模型