过去我必须开发一个充当规则评估器的程序。你有一个先行词和一些后续词(动作),所以如果先行词评估为真,则执行的动作。

当时我用的是修改版 RETE算法 (RETE 有三个版本,只有第一个版本是公开的)用于先行词模式匹配。我们在这里讨论的是一个大系统,每个规则有数百万个操作,并且一些操作符在多个规则中“重复”。

我可能必须用其他语言重新实现它,尽管我在 RETE 方面经验丰富,但有人知道其他模式匹配算法吗?有什么建议或者我应该继续使用 RETE 吗?

有帮助吗?

解决方案

TREAT 算法与 RETE 类似,但不记录部分匹配。因此,在某些情况下,它可能比 RETE 使用更少的内存。此外,如果您修改大量已知事实,则 TREAT 会更快,因为您不必花时间在撤回上。

还有 雷特* 它通过根据您想要使用的内存量保存一些连接节点状态来平衡 RETE 和 TREAT。因此,您仍然可以节省一些断言时间,而且还可以节省内存和撤回时间,具体取决于您如何调整系统。

您可能还想查看 飞跃, ,它使用惰性评估方案并结合了 RETE 和 TREAT 的元素。

我只有 RETE 的个人经验,但似乎 RETE* 或 LEAPS 是更好、更灵活的选择。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top