1

我需要构建一个“基于规则”的系统,该系统可以在 C# 和 Java 中运行和开发(用于化学应用程序)。系统需要能够(通过现有库)获取对象的计算属性并根据这些值做出决策。我不确定系统会是什么样子,但规则不需要正式一致(我们使用了很多启发式方法)。规则应尽可能外部化,以便用户和开发人员可以修改它们而无需了解引擎(它应该是开源的并在两个平台上运行)。系统可能会通过一组受限的类似自然语言的命令来运行。会有一个适应的元素——可以添加新的对象(或至少是词汇)。

这并不像听起来那么麻烦——30 多年前使用 FORTRAN 取得了很大进展,但该领域已处于闲置状态。我将不胜感激我们可以尝试的方法的指针,其中输入的开销是适度的。可能有效的方法包括:

  1. 序言
  2. OWL本体
  3. 决策树
  4. 规则
  5. 文字游戏

编辑 问题的主要方面是找到一个基于规则的系统(Java C# 提及是次要的,只是为了防止可能会说“Windows 具有内置系统”的答案。)请不要回答转换方法Java 到 C#;我想要一种基于规则的方法 - 原则上 - 可以在任何一个上实施。到目前为止,只有一个(或两个)答案真正解决了规则方面的问题。

4

4 回答 4

2

如果您使用 Java 进行开发,您可以通过使用IKVM在 .Net/C# 中使用生成的类。IKVM 将 Java 字节码转换为等效的 MSIL,还提供了一个 Java 类框架和 VM,它们都在 .Net 中运行。它工作得非常好,它是免费的,被商业使用(例如由 Saxon XSLT/XQuery/XPath 产品),并且将 java 类文件转换为 .Net dll 真的很容易。

我经常在 .Net 中使用 Java 项目来进行基于科学和数学的操作,因为这些领域的工作通常倾向于使用 Java——当然比使用 C# 的频率要高得多。

于 2009-10-13T09:37:03.470 回答
2

你可以看看 Drools(现在也称为 JBoss Rules)。这是一个已经存在很长时间的 Rete 引擎实现,现在也已移植到 .NET,因此它应该满足您能够在 Java 和 C# 中使用的要求。我不知道实现有多接近——您可能会发现自己仅限于功能的一个子集。

JBoss 规则:http: //jboss.org/drools/

Drools.NET:http://droolsdotnet.codehaus.org/ _

不要担心 JBoss 站点上的业务重点,Drools 是一个通用的规则引擎实现。

于 2009-10-13T09:51:40.213 回答
0

如果您想实现自己的领域特定语言,不错的选择是 IronPython(Microsoft Dynamics 将其用于相同目的),或者例如 Boo 语言。

于 2009-10-13T07:26:07.577 回答
-1

您可以将规则引擎构建为 Web 服务,然后您可以从 C# 或 Java 调用该服务。

于 2009-10-13T11:56:13.733 回答