迭代发现定义向量条件的布尔规则的算法

时间:2014-08-19 16:27:41

标签: string algorithm search boolean-logic

我有兴趣找到一种迭代发现定义向量条件的布尔规则的算法。例如,让我们说矢量是书中的所有字母,规则旨在告诉你这本书是否是詹姆斯·乔伊斯写的,但我们不知道规则是什么,我们想要发现它。对于任何提交的向量,规则引擎将始终回答True或False。因此,例如,如果我们提交一个包含" Ulysses"中所有字符的向量数组,那么引擎可能会响应" True",如果规则是好的。

所以,想象一下我们分裂"尤利西斯"分成两半,A和B,分别将每一半提交给引擎。引擎回答True为A,但是False回答B.从这里我们可以推断,无论规则是什么,只能在A中找到。所以,现在我们再将A分成两半,A1和A2。这次发动机对两者说都是假的。现在,我们可以推断规则中必须有AND条件,AND条件的一个原子必须在A1中,而另一个在A2中。例如,规则可能是:"如果单词' meatjuice'和' carracarracarra'在向量中返回True。这与我们的测试结果一致,因为" meatjuice"在本书的第一季," carracarracarra"是在第二季度。

通过连续划分我们的文本并重新提交到引擎,我们最终可以发现引擎正在使用的隐藏规则。

我怀疑已经存在一个算法来执行此操作,但我不知道它的名称是什么或者如何找到它。

1 个答案:

答案 0 :(得分:1)

我会将此问题描述为使用成员资格查询学习单调DNF公式。 Angluin(Queries and Concept Learning,1988)给出了一个类似于你的算法,但它使用等价查询(即找到当前假设不起作用的例子)以及成员资格查询。否则问题是找到最后一个术语可能需要相当长的时间。例如,假设规则是

   (A1 && B1) || (A2 && B1) || ... || (An && B1)
|| (A1 && B2) || (A2 && B2) || ... || (An && B2)
|| (B1 && B2).

由前两行组成的假设与2^(n + 2)输入中只有一行的规则不同。