如何在决策表中表示复杂的条件

时间:2016-12-13 10:12:03

标签: logical-operators rule-engine binary-decision-diagram

我正在尝试为决策表模板建模。

为什么我理解像

这样的简单规则

(x>10 and y<10) print "red"可以在决策表中表示,其中一行使用两列条件,一列用于操作。

+-----+-----+-------------+
|  X  |  Y  |   Action    |
+-----+-----+-------------+
| >10 | <10 | Print "red" |
+-----+-----+-------------+

条件如何

决策表中包含

((x>10 and y<10) or x>1) or z<5 and y>5 print "red"

我假设上面的大条件表示在许多行中,其中不同的迷你条件的组合是真的。重复相同的动作部分。 有没有方法可以将这样的条件减少到决策表?

然而在这种情况下,该行动会被多行触发。我们只有一个动作。是否有任何分组列?

1 个答案:

答案 0 :(得分:0)

一种方法是给出操作编号,并从决策表中引用它们。如果在评估运行期间触发了某个操作,则忽略后续触发。

以下是一个例子:

+-----+-----+-----+--------+
|  X  |  Y  |  Z  | Action |
+-----+-----+-----+--------+
| >10 | >10 |  -  |   1    |
+-----+-----+-----+--------+
| >10 | <10 |  -  |   2    |
+-----+-----+-----+--------+
| >50 |  -  |  -  |   2    |
+-----+-----+-----+--------+
|  -  |  -  |  >5 |   2    |
+-----+-----+-----+--------+

操作号对应于此表中的操作:

+-----+--------------+
|  #  |   Action     |
+-----+--------------+
|  1  | Print "red"  |
+-----+--------------+
|  2  | Print "blue" |
+-----+--------------+

如果因x>10 AND y<10而触发了第2项操作,即使x>50z>5也不会再次触发。