2

我需要构建一个应用程序(Ruby),允许用户选择一个或多个模式,以防这些模式匹配以继续并完成一组操作。在进行研究时,我发现了基于规则的系统的新(对我而言)领域,并花了一些时间阅读它,它似乎正是我需要的那种功能。

该应用程序将与不同的 Web 服务集成,并允许以下规则:

添加 Highrise 联系人并创建 Zendesk 票证后,请添加电子邮件到数据库

我有两个想法来构建它。第一个是构建某种 os DSL,以便能够指定规则条件并在用户输入的情况下即时构建它们。

第二个是构建一些规则类,每个类都有一个模式/匹配器和操作方法。该模式将评估表达式并返回真或假,如果匹配为正则将执行操作。

然后需要保留规则,然后定期评估。

任何人都可以对这个设计有所了解或指出我可以获得更多信息的地方吗?

谢谢

4

2 回答 2

0

在诸如 Drools、FlexRule 等商业规则引擎中,模式匹配由 RETE 算法处理。而且,它们中的一些为不同的逻辑提供多个不同的引擎,例如程序、验证、推理、流程、工作流……它们还提供 DSL 定制……规则排序和执行是基于议程和激活来处理的在引擎上定义。冲突解决策略将帮助您找到适当的触发方式。

我建议您使用托管在主机/服务上的商业产品。并使用简单的 Json/Xml 格式与规则服务器通信并执行您的规则。这可能会比创建自己的结果更好。但是,如果您有兴趣创建自己的模式匹配引擎,请考虑 RETE 算法、议程和复杂生产系统的激活机制。

在 RETE 算法中,您至少可以考虑实现正面和负面条件。在实现 RETE 时,您需要实现 beta 和 alpha 内存以及支持左右激活的 ad join 节点。

于 2013-09-24T11:13:50.303 回答
0

你认为你可以用基于图形的表示来表示你的问题吗?我很确定您的问题可以被视为基于图形的问题

如果是,您为什么不使用图形转换系统来定义和应用您的规则。我推荐的是 GrGen.NET。GrGen.NET 的使用建立在五个步骤之上

  1. 元模型的定义:在这里,您定义构建块,即图节点和图边的类型。
  2. 规则集的定义:这是您可以放置​​模式检测规则的地方。此外,您可以创建规则封装程序来操作基于图形的数据结构。
  3. 编译:基于前面两个步骤,创建了一个 C# 程序集(DLL)。应该有一种方法可以从 Ruby 访问这样的 DLL。
  4. 规则序列的定义:规则序列包含执行各个规则的结构。通常,它是一种逻辑结构,其中规则连接在一起。
  5. 图转换:在 DLL 上应用规则序列会导致图的转换,随后可以导出、保存或进一步操作。

你可以在这里找到一本非常好的 GrGen.NET 手册:http: //www.info.uni-karlsruhe.de/software/grgen/GrGenNET-Manual.pdf

于 2012-12-26T00:26:24.550 回答