9

我正在研究决策引擎/规则评估引擎。例如:

输入:客户和客户所做的所有违规行为

输出:犯罪的后果

一个示例案例是:

输入:客户(Jhonny Chimpo,999-00-1111),进攻(打破窗户,掌掴老板,踢到他的腹股沟队队长)

输出:得到粉红色的纸条

因此,我要编写的这段代码根据每种攻击和组合攻击的规则评估不同的攻击。当前的代码只是 if 和 else 语句的迷宫。我确信这样的业务问题很常见。通常使用什么设计/企业模式来解决这样的问题?

是规范模式吗?我希望代码对扩展开放,干净且灵活。

4

6 回答 6

3

基本上业务规则看起来像

forall rules:
  if <condition> then doAction();

使用分数按严重程度对所有罪行进行分类怎么样,也许对经常“作恶的人”有额外的奖励,一些罪行可能会被限时和任何需要的。

那么算法的粗略草案可能是:

  • 客户所有分数的总和(加权)
  • 与最大值比较

这将是直接使用数据结构而不是许多(可能是深度嵌套的)if..then..else 的东西。

于 2010-01-24T13:15:15.647 回答
3

我可以向您推荐一个我们用来解决类似问题的工具。

看看 JBoss Drools:http ://www.jboss.org/drools/

这是一个 BRMS:业务规则管理系统

这是一个介绍性视频:http ://www.jboss.com/products/platforms/brms/

于 2010-01-24T11:28:21.250 回答
1

我不确定上面的任何答案是否有帮助。

我使用表达式树编写了类似的组件。您可以构建表示谓词的 lambda 表达式、编译和执行它们,所有这些都是动态的,然后触发一些动作作为响应。这种方法强大、灵活,并且消除了所有 if/else 恐惧(这绝对不是要走的路)。

但是,您真正谈论的是逻辑编程。Prolog 在 .NET 上有许多实现。Prolog 是一种基于逻辑的语言,大量用于 AI 应用程序,一旦你了解它的范式,它就会开始变得非常强大。

看看其中的一些..

于 2010-02-08T00:22:04.010 回答
0

您可以尝试类似于此“基于事件”的规则引擎

于 2010-03-06T06:28:51.560 回答
0

我认为任何基于 RETE 算法的规则引擎都适用于您的情况。你可以试试流口水。

于 2010-05-17T17:02:14.340 回答
-1

我认为您正在尝试开发专家系统。您可以检查术语,然后检查适当的编程语言作为序言等。

于 2010-01-24T11:25:00.893 回答