给定一组规则,它们是某些已知值(组,类型,属性)的逻辑交集,它们组合起来给出一些值,如下所示:
group1 AND type1 AND property1 = value1
group1 AND type1 AND property2 = value2
group1 AND type1 AND property3 = value3
group1 AND type2 AND property1 = value1
group1 AND type2 AND property4 = value1
group2 AND type1 AND property2 = value2
以下情况属实:
我如何最好地找到一种最佳解决方案,将这些规则“折叠”为一种格式,在该格式中,同一组的多个值组合在一起(下方),同时保持对原始查找的相同逻辑解释?
(group1) AND (type1 OR type2) AND (property1) = value1
(group1 OR group2) AND (type1) AND (property2) = value2
(group1) AND (type1) AND (property3) = value3
(group1) AND (type2) AND (property4) = value1
目标:包含与原始查找相同的逻辑信息的最少规则数。
一种方法可以是采用原始查找“密钥”,按第一个值分组,然后将两个密钥分组,并且可以针对每个密钥组合重复对剩余密钥的不同实例进行折叠。结果朝着正确的方向前进,但不能保证最佳的多步骤方法。
如果这实际上是一个普遍的问题,我会很感激有关更好的方法或阅读指针的任何想法。
如果需要,很高兴提供任何澄清。
*为笨重的标题道歉 - 希望这描述了一般问题
编辑:我认为这个问题(没有具体答案)表示问题是找到Union of all intersecting sets。
编辑2:我应该说,目标表单实际上是一个要求,而不是来自@timrau的逻辑上最优的解决方案。表单为(groups) AND (types) AND (properties) => value
,其中groups / types / properties仅用OR表示。
答案 0 :(得分:2)
对于每个可能的值,以产品和形式形成布尔公式。 (为简单起见,我使用g1
代表group1
,t1
代表type1
,p1
代表property1
和v1
代表value1
)
v1 = g1 t1 p1 + g1 t2 p1 + g1 t2 p4
v2 = g1 t1 p2 + g2 t1 p2
v3 = g1 t1 p3
然后,如果您真的计划,您可以应用任何逻辑最小化算法/系统,例如Quine-McCluskey,Espresso,ABC,Logic Friday甚至Karnaugh map尽量减少它们。
最小化后,我们得到
v1 = g1 (t1+t2) p1 + g1 t2 p4
v2 = (g1+g2) t1 p2
v3 = g1 t1 p3
然后可以将它们翻译回原来的逻辑公式。