今天我遇到了一个有趣的挑战,我想要你如何处理这种情况.
所以问题是如下(我已经将它转换为演示数据,因为如果不了解公司字典,真正的问题就没有多大意义).
我们有一个至少有16个条件的决策表.因为管理所有这些(2 ^ 16种可能性)是不可能的壮举,所以我们决定只列出异常.像这样:

作为一个例子,我只添加了10个条件,但实际上有(现在)16个.基本思想是我们有一个基线(默认值),它对每个人都有效,并且对这个默认值都有例外.
例:
你有一个也是海盗的外国人.如果逐个执行所有异常,并按条件执行条件,则删除至少有一个条件失败的异常.最后,您将得到以下两个对我们的案例有效的例外情况.匹配在IsPirate和IsForeigner条件上.但正如你所看到的,这里有2个结果,如果计算默认值,实际上有3个.

我们的方案
现在我们提出的如何解决这个问题的方法是,在添加这些异常的GUI中,应该运行一个算法来检查这种情况并强制您更具体地定义异常.这仍然是一个理论,并没有经过测试,但我们认为它可以这样工作.
我的问题
我正在寻找使规则易于管理的替代解决方案,并防止我在示例中显示的问题.
你的问题似乎是解决冲突的规则.当多个规则与您的输入相匹配时(您的外国人和海盗)他们最终会推荐不同的东西(您的cangetjob和cangetevicted),您需要一个解决此冲突的策略.
你提到的是一种解决方法 - 首先是消除冲突.然而,这可能并不总是可能的,并且并不总是令人满意的,因为当用户添加与一组旧规则(他/她没有写入)冲突的新规则时,用户可能不知道如何修改它以删除冲突.
另一种可能的解决方法是优先化.标记每个规则的优先级(基于用户自己的权限等),根据优先级对匹配规则进行排序,并按优先级递增顺序应用.这通常有效并且管理起来要简单得多(例如,每个人都知道最高老板的规则是最终的!)
优先级也可用于将某个规则标记为"全局覆盖".在您的示例中,您可能希望将"IsPirate"设置为覆盖规则 - 这意味着它会覆盖普通人的设置.换句话说,一旦你成为海盗,你就会受到不同的待遇.这使得设计一个系统非常容易,在该系统中,您拥有一系列管理90%案例的正常业务规则,然后是一组处理不同的"例外",自动覆盖某些事物.在这种情况下,你还应该考虑制作"?" 也可以在输出列中使用.
另一种可能的解决方法是在每个条件中包含属性.例如,某些条件必须没有"零"才能通过(?无关紧要).有些条件必须至少有一个"一"才能通过.换句话说,将每个条件标记为"AND","OR"或"XOR".一些流行的文件系统安全性使用此模型.例如,CanGetJob可能是AND(您希望在工作权利方面严格要求).CanBeEvicted可能是OR - 如果他也是海盗,你可能想要驱逐一个外国人.
AND/OR方法的增强是提供在传递该条件之前总结果必须超过的阈值.例如,将CanGetJob置于阈值2,那么它必须至少获得两个1才能返回1.这有时在非明显黑白的条件下有用.
您可以混合使用解决方法:例如,首先确定优先级,然后使用AND/OR来解析具有相似优先级的规则.
可能性是无限的,实际上取决于您的实际需求.
| 归档时间: |
|
| 查看次数: |
2098 次 |
| 最近记录: |