我需要构建一个“基于规则”的系统,可以在C#和Java(用于化学应用程序)中运行和开发。系统需要能够获得对象的计算属性(通过现有库)并对这些值做出决策。我不确定系统会是什么样子,但规则不需要正式一致(我们使用了大量的启发式方法)。应尽可能将规则外部化,以便用户和开发人员可以修改它们,而无需了解引擎(应该是开源并在两个平台上运行)。系统可能会通过一组受限制的自然语言命令运行。将有一个适应元素 - 可以添加新对象(或至少词汇表)。
这并不像听起来那样毛茸茸 - 30多年前使用FORTRAN取得了很大的进步,但这个领域已经休闲了。我很感激指出我们可以尝试的方法,其中入口的开销是适度的。可能有效的方法包括:
编辑 问题的主要方面是找到一个基于规则的系统(Java C#提及是次要的,只是为了防止可能会说“Windows”的答案有一个内置系统“。)请不要回答将Java转换为C#的方法;我想要一种基于规则的方法 - 原则上 - 可以在任何一种方法上实施。到目前为止,只有一个(或两个)答案真正解决了规则问题。
答案 0 :(得分:2)
如果使用Java进行开发,则可以使用IKVM在.Net / C#中使用生成的类。 IKVM将Java字节码转换为等效的MSIL,并提供在.Net内运行的Java类框架和VM。它运行得非常好,它是免费的,在商业上使用(例如通过Saxon XSLT / XQuery / XPath产品),并且很容易将java类文件转换为.Net dll。
我经常在.Net中使用Java项目来进行基于科学和数学的操作,因为在这些领域中的工作通常倾向于使用Java - 当然比在C#中更常见。
答案 1 :(得分:2)
你可以看看Drools(现在也称为JBoss Rules)。这是一个Rete引擎实现,已经存在了很长时间,现在也被移植到.NET,因此它应该满足您在Java和C#中使用的要求。我不知道这些实现有多接近 - 您可能会发现自己仅限于该功能的一个子集。
JBoss规则:http://jboss.org/drools/
Drools.NET:http://droolsdotnet.codehaus.org/
不要担心业务关注于JBoss网站,Drools是一个通用的规则引擎实现。
答案 2 :(得分:0)
如果您想要实现自己的域特定语言,那么很好的选择 IronPython(Microsoft Dynamics将其用于相同目的),或者例如Boo语言。
答案 3 :(得分:-1)
您可以将规则引擎构建为Web服务,然后您可以从C#或Java调用该服务。